Code findings
3SQL injection in user lookup
src/api/users.ts:42 - the query interpolates `userId` instead of binding it.
Command injection via child_process
src/jobs/export.ts:88 - user input reaches exec() unescaped.
Weak hash used for a digest
src/utils/cache.ts:18 - MD5 where SHA-256 is expected.