fix: resolve 6 production Sentry errors

- Prevent @fastify/static double-registration crash via decorateReply guard
- Fix non-ASCII filename header encoding (X-Output-Filename + RFC 5987 Content-Disposition)
- Add EACCES error handling to all startup mkdir calls with actionable messages
- Add WAL autocheckpoint and journal size limit to prevent unbounded SQLite growth
- Fix Python sidecar EPIPE handling to reject pending requests and trigger restart
- Ensure Docker entrypoint creates all subdirectories before chown
This commit is contained in:
SnapOtter
2026-06-06 16:05:59 +08:00
parent cad6a7618c
commit 66e503730d
12 changed files with 84 additions and 16 deletions
@@ -159,8 +159,7 @@ export function registerOptimizeForWeb(app: FastifyInstance) {
reply.header("Content-Type", result.contentType);
reply.header("X-Original-Size", String(fileBuffer.length));
reply.header("X-Processed-Size", String(result.buffer.length));
const safeFilename = encodeURIComponent(result.filename).replace(/[^ -~]/g, "");
reply.header("X-Output-Filename", safeFilename);
reply.header("X-Output-Filename", encodeURIComponent(result.filename));
return reply.send(result.buffer);
} catch (err) {
const message = err instanceof Error ? err.message : "Preview processing failed";