Type: Security / Reliability
Priority: 🟠 HIGH
Description:
The /api/upload route validates file type/size but does not validate the number of files per request (a caller could send 1000 files). The job routes accept any string as id with no format validation. Server-side rate limiting is absent from all API routes (the existing rateLimiter.ts only runs client-side).
Acceptance Criteria:
Type: Security / Reliability
Priority: 🟠 HIGH
Description:
The
/api/uploadroute validates file type/size but does not validate the number of files per request (a caller could send 1000 files). The job routes accept any string asidwith no format validation. Server-side rate limiting is absent from all API routes (the existingrateLimiter.tsonly runs client-side).Acceptance Criteria:
/api/upload: capfiles.lengthat a configurable max (e.g. 10); return 400 if exceeded/api/jobs/[id]: validateidformat (UUID or alphanumeric, max 64 chars); return 400 on invalidX-RateLimit-Limit,X-RateLimit-Remaining,Retry-After) are returned on 429 responses