Skip to content

Commit 4476cf2

Browse files
authored
chore(deps): aggregate second weekly batch + finalize nodemailer/astro fixes (#196)
Consolidates the post-#190 Dependabot batch (#191, #193, #194, #195) into a single change. Lockfiles regenerated with bun@1.3.14; full static + UI + docs gates and API/UI test suites pass. apps/api: - @anthropic-ai/sdk 0.102.0 -> 0.104.1 (#194) - nodemailer 8.0.10 -> 9.0.1 (#191, security) — replaces the prior accepted-risk suppression: 9.0.1 fixes GHSA-p6gq-j5cr-w38f outright, so the osv-scanner.toml IgnoredVuln and the bun audit --ignore are removed. Excluded from the install quarantine while <7 days old. SMTP provider (createTransport) verified by the full api test suite. - eslint-plugin-unicorn 65.0.0 -> 65.0.1, prettier 3.8.3 -> 3.8.4, typescript-eslint 8.60.1 -> 8.61.0 (#193); @typescript-eslint/utils override bumped to 8.61.0 to match (package-override-parity). apps/ui: - eslint-plugin-unicorn 65.0.0 -> 65.0.1, prettier 3.8.3 -> 3.8.4, typescript-eslint 8.60.1 -> 8.61.0 (#195); @typescript-eslint/utils override bumped to 8.61.0 to match. apps/docs: - astro 6.4.4 -> 6.4.6 (#191, security) — fixes GHSA-2pvr-wf23-7pc7 and GHSA-jrpj-wcv7-9fh9, so both astro osv-scanner.toml IgnoredVulns are removed. 6.4.6 still pins @astrojs/markdown-remark 7.2.0; override matches (single copy, build verified). Excluded: ioredis 5.11.1 (#192) — bullmq 5.78.0 still exact-pins ioredis 5.10.1; taking 5.11.1 splits the tree into conflicting RedisOptions types. Held back.
1 parent d74a803 commit 4476cf2

10 files changed

Lines changed: 67 additions & 88 deletions

File tree

.github/workflows/apps-api-security-deps.yml

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -93,8 +93,4 @@ jobs:
9393

9494
- name: bun audit
9595
if: steps.filter.outputs.code == 'true'
96-
# GHSA-p6gq-j5cr-w38f (nodemailer raw-option file-read/SSRF) is ignored:
97-
# our only nodemailer usage (src/lib/email/providers/smtp.ts) builds a
98-
# standard SMTP transport via createTransport and never passes the
99-
# vulnerable `raw` message option. Mirrors apps/api/osv-scanner.toml.
100-
run: bun audit --audit-level=high --ignore=GHSA-p6gq-j5cr-w38f
96+
run: bun audit --audit-level=high

apps/api/bun.lock

Lines changed: 25 additions & 25 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

apps/api/bunfig.toml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,10 @@ minimumReleaseAgeExcludes = [
4747
# we override `form-data` directly to clear `bun audit`. The patched release
4848
# is <7 days old, so exempt it from the quarantine window.
4949
"form-data",
50+
# nodemailer 9.0.1 patches GHSA-p6gq-j5cr-w38f (raw-option file-read/SSRF).
51+
# Direct dep; the patched release is <7 days old, so exempt it from the
52+
# quarantine window for this security upgrade.
53+
"nodemailer",
5054
]
5155

5256
[test]

apps/api/osv-scanner.toml

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -25,19 +25,6 @@ resolution). No path from user input to micromatch in api source. Awaiting
2525
upstream patch via vite/jest transitive deps.
2626
"""
2727

28-
[[IgnoredVulns]]
29-
id = "GHSA-p6gq-j5cr-w38f"
30-
ignoreUntil = "2026-09-19T00:00:00Z"
31-
reason = """
32-
nodemailer raw-option file-read/SSRF. The advisory affects nodemailer's
33-
message-level `raw` option, which bypasses disableFileAccess/disableUrlAccess.
34-
Our only nodemailer usage is src/lib/email/providers/smtp.ts, which builds a
35-
standard SMTP transport via createTransport and never passes the `raw` option,
36-
so the vulnerable code path is unreachable. Upstream fix is in 9.0.1 (a major
37-
bump, currently inside our 7-day install quarantine). Re-evaluate when bumping
38-
nodemailer to 9.x.
39-
"""
40-
4128
[[IgnoredVulns]]
4229
id = "GHSA-8988-4f7v-96qf"
4330
ignoreUntil = "2026-09-19T00:00:00Z"

apps/api/package.json

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@
5050
"prepare": "husky 2>/dev/null || true"
5151
},
5252
"dependencies": {
53-
"@anthropic-ai/sdk": "0.102.0",
53+
"@anthropic-ai/sdk": "0.104.1",
5454
"@casl/ability": "7.0.0",
5555
"@elysiajs/cors": "1.4.2",
5656
"@elysiajs/jwt": "1.4.2",
@@ -73,7 +73,7 @@
7373
"fs-extra": "11.3.5",
7474
"handlebars": "4.7.9",
7575
"ioredis": "5.10.1",
76-
"nodemailer": "8.0.10",
76+
"nodemailer": "9.0.1",
7777
"openai": "6.42.0",
7878
"otpauth": "9.5.1",
7979
"pg": "8.21.0",
@@ -116,21 +116,21 @@
116116
"eslint-plugin-prettier": "5.5.6",
117117
"eslint-plugin-promise": "7.3.0",
118118
"eslint-plugin-sonarjs": "4.0.3",
119-
"eslint-plugin-unicorn": "65.0.0",
119+
"eslint-plugin-unicorn": "65.0.1",
120120
"globals": "17.6.0",
121121
"husky": "9.1.7",
122122
"knip": "6.14.2",
123-
"prettier": "3.8.3",
123+
"prettier": "3.8.4",
124124
"typescript": "6.0.3",
125-
"typescript-eslint": "8.60.1"
125+
"typescript-eslint": "8.61.0"
126126
},
127127
"//overrides": {
128128
"_": "Why these transitive deps are pinned. Keep each entry in sync with the matching `overrides` key — enforced by the package-override-parity lint-meta rule.",
129129
"@typescript-eslint/utils": "Single @typescript-eslint/utils resolution across the workspace so the shared @boring-stack-pkg ESLint plugins all load the same utils version. The UI and docs apps mirror this exact pin; a mismatch makes the custom plugins resolve divergent utils copies and fail to load.",
130130
"form-data": "Pin patched form-data (GHSA-hmw2-7cc7-3qxx CRLF injection via unescaped multipart field names); 4.0.5 is vulnerable, 4.0.6 patches it. Pulled in transitively via @sendgrid/mail -> @sendgrid/client -> axios. Excluded from the install quarantine while <7 days old."
131131
},
132132
"overrides": {
133-
"@typescript-eslint/utils": "8.60.1",
133+
"@typescript-eslint/utils": "8.61.0",
134134
"form-data": "4.0.6"
135135
}
136136
}

apps/docs/bun.lock

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

apps/docs/osv-scanner.toml

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -90,16 +90,6 @@ id = "GHSA-58qx-3vcg-4xpx"
9090
ignoreUntil = "2026-11-22T00:00:00Z"
9191
reason = "ws@8.18.0 via miniflare/wrangler dev tooling only. Static Cloudflare Pages output has no WebSocket server runtime. Override pending upstream miniflare bump."
9292

93-
[[IgnoredVulns]]
94-
id = "GHSA-2pvr-wf23-7pc7"
95-
ignoreUntil = "2026-09-19T00:00:00Z"
96-
reason = "astro advisory; fixed in 6.4.6. Static-site build only — no Astro SSR/dev runtime ships to Cloudflare Pages. Awaiting an in-semver bump that keeps the @astrojs/markdown-remark pin valid."
97-
98-
[[IgnoredVulns]]
99-
id = "GHSA-jrpj-wcv7-9fh9"
100-
ignoreUntil = "2026-09-19T00:00:00Z"
101-
reason = "astro advisory; fixed in 6.4.6. Same scope as above — static output has no runtime Astro surface."
102-
10393
[[IgnoredVulns]]
10494
id = "GHSA-cmwh-pvxp-8882"
10595
ignoreUntil = "2026-09-19T00:00:00Z"

apps/docs/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@
3636
"@astrojs/sitemap": "3.7.3",
3737
"@astrojs/starlight": "0.39.3",
3838
"@tailwindcss/vite": "4.3.0",
39-
"astro": "6.4.4",
39+
"astro": "6.4.6",
4040
"astro-mermaid": "2.0.1",
4141
"clsx": "2.1.1",
4242
"mermaid": "11.15.0",
@@ -64,7 +64,7 @@
6464
"undici": "Pin patched undici (GHSA-vmh5-mc38-953g TLS cert-validation bypass, GHSA-pr7r-676h-xcf6); 7.28.0 patches it. Build-time tooling only (wrangler/astro fetches). Mirrors the UI app pin. Excluded from the install quarantine while <7 days old.",
6565
"@types/react": "Match the UI app's @types/react pin so React types resolve identically across apps (@astrojs/react pulls them transitively here).",
6666
"@types/react-dom": "Match the UI app's @types/react-dom pin for the same cross-app type parity.",
67-
"@astrojs/markdown-remark": "Pin to astro 6.4.4's exact dependency. Starlight depends on the 7.1.x range transitively, but only 7.2.0 exposes the `unified` subpath export that astro 6.4.4's prerender runtime imports; without this the hoisted 7.1.x copy shadows astro's nested 7.2.0 and `astro build` fails. Re-evaluate when Starlight requires >=7.2.0."
67+
"@astrojs/markdown-remark": "Pin to astro 6.4.6's exact dependency. Starlight depends on the 7.1.x range transitively, but only 7.2.0 exposes the `unified` subpath export that astro 6.4.6's prerender runtime imports; without this the hoisted 7.1.x copy shadows astro's nested 7.2.0 and `astro build` fails. Re-evaluate when Starlight requires >=7.2.0."
6868
},
6969
"overrides": {
7070
"@astrojs/markdown-remark": "7.2.0",

0 commit comments

Comments
 (0)