Skip to content

Fix all 26 npm audit vulnerabilities (1 critical) + align Playwright image - #13

Merged
stretchcloud merged 1 commit into
mainfrom
fix/npm-audit
Jul 22, 2026
Merged

Fix all 26 npm audit vulnerabilities (1 critical) + align Playwright image#13
stretchcloud merged 1 commit into
mainfrom
fix/npm-audit

Conversation

@stretchcloud

Copy link
Copy Markdown
Owner

Stacked on #12 (both PRs touch package-lock.json; stacking avoids a lockfile conflict). Merge #12 first — GitHub will retarget this PR to main automatically.

Problem

npm audit: 26 vulnerabilities — 1 critical, 14 high, 7 moderate, 4 low.

The critical is form-data 4.0.2 (predictable multipart boundary GHSA-fjxv-7rqg-78g4, CRLF injection GHSA-hmw2-7cc7-3qxx). The highs cluster on axios (29 advisories: SSRF via NO_PROXY bypass, prototype-pollution gadgets, DoS), playwright (browser downloads without SSL verification), undici, ws, validator, lodash.

Fix

Every advisory was fixable within existing semver ranges — so package.json is untouched and this is a lockfile-only refresh:

  • npm audit fix (25 of 26)
  • npm update minimatch for the one copy the fix pass left behind (9.0.5 → 9.0.9)
package before after
form-data ⚠️ critical 4.0.2 4.0.6
axios 1.9.0 1.18.1
playwright 1.52.0 1.61.1
express 4.21.2 4.22.2
bullmq 5.49.2 5.80.10
undici / ws / qs / validator / uuid / … patched

Plus one deliberate non-lockfile change: the Dockerfile pins the Playwright base image by version, and the audit bump moved the library to 1.61.1 — with the old v1.52.0-jammy image the container would no longer have the browser builds the library looks for, breaking every browser launch. Bumped the image to v1.61.1-jammy (tag verified on MCR) to keep them paired.

Verification

  • npm audit0 vulnerabilities
  • tsc ✅ · eslint ✅ · 180/180 tests ✅ · openapi:check in sync ✅
  • Docker end-to-end smoke test on the built image:
    • Chromium 149 launches under Playwright 1.61.1 inside the container
    • App boots against Redis — BullMQ 5.80 queues initialize
    • /health UP, /health/ready READY
    • POST /api/scrape succeeds on both the browser path and the HTTP (axios) path

🤖 Generated with Claude Code

…image

npm audit reported 26 vulnerabilities (1 critical, 14 high, 7 moderate,
4 low). All were fixable within existing semver ranges, so package.json is
untouched — this is a lockfile-only dependency refresh via `npm audit fix`
plus one `npm update minimatch` for a copy the fix pass left behind.

Critical: form-data 4.0.2 -> 4.0.6 (predictable multipart boundary,
GHSA-fjxv-7rqg-78g4; CRLF injection, GHSA-hmw2-7cc7-3qxx).

Notable bumps: axios 1.9.0 -> 1.18.1 (29 advisories incl. SSRF/proto
pollution), playwright 1.52.0 -> 1.61.1 (SSL-verification advisory),
express 4.21.2 -> 4.22.2 (qs/body-parser/path-to-regexp), undici, ws,
bullmq 5.49 -> 5.80, validator/express-validator, uuid, eslint chain.

Dockerfile: bump the Playwright base image v1.52.0-jammy -> v1.61.1-jammy
to match the bumped library — the image ships the browser builds the
library expects, and a version mismatch breaks browser launches in the
container.

Verified: npm audit clean (0 vulnerabilities); tsc, eslint, all 180 tests
pass; openapi:check in sync; Docker image builds; in-container smoke test
passed — chromium launches under playwright 1.61.1, app boots against
Redis (BullMQ 5.80 queues initialize), /health and /health/ready OK, and
POST /api/scrape succeeds on both the browser path and the HTTP path.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@stretchcloud
stretchcloud changed the base branch from feature/openapi-from-zod to main July 22, 2026 15:51
@stretchcloud
stretchcloud merged commit af5b645 into main Jul 22, 2026
1 check passed
@stretchcloud
stretchcloud deleted the fix/npm-audit branch July 22, 2026 15:51
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant