From 814bfb028d36e8945b03e84b81ab352f94452b1d Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Mon, 6 Jul 2026 20:49:59 +0000 Subject: [PATCH] =?UTF-8?q?=F0=9F=9B=A1=EF=B8=8F=20Sentinel:=20[MEDIUM]=20?= =?UTF-8?q?Add=20explicit=20timeouts=20to=20external=20fetch=20calls?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This adds timeouts to fetch calls across the network, market, and github source sync logic using AbortSignal.timeout(). 🚨 Severity: MEDIUM 💡 Vulnerability: Missing fetch timeouts on external API calls 🎯 Impact: Could cause application hanging or memory exhaustion due to slow network requests. 🔧 Fix: Add `signal: AbortSignal.timeout(TIMEOUT_MS)` to explicitly stop fetches if they take too long. ✅ Verification: Ran `npm run lint`, `npm run typecheck`, and `npm run build` which passed without error. Co-authored-by: felirami <6752178+felirami@users.noreply.github.com> --- .jules/sentinel.md | 5 +++++ scripts/sync-sources.mjs | 3 +++ src/lib/network.ts | 1 + src/lib/snap-market.ts | 2 ++ 4 files changed, 11 insertions(+) diff --git a/.jules/sentinel.md b/.jules/sentinel.md index b5d9250..25cdbff 100644 --- a/.jules/sentinel.md +++ b/.jules/sentinel.md @@ -12,3 +12,8 @@ **Vulnerability:** XSS risk via unsanitized `<` characters in `JSON.stringify` output injected into `` to break out of the context and inject malicious scripts. **Prevention:** Always replace `<` with `\u003c` when injecting JSON output into script tags, e.g., `JSON.stringify(data).replace(/ { headers: { Accept: "application/json", }, + signal: AbortSignal.timeout(NODE_PROBE_TIMEOUT_MS), }); if (!response.ok) { diff --git a/src/lib/snap-market.ts b/src/lib/snap-market.ts index 19b7c1a..d0e8c0b 100644 --- a/src/lib/snap-market.ts +++ b/src/lib/snap-market.ts @@ -1,6 +1,7 @@ import { SNAP, correctedSnapFdv } from "@/lib/snap"; export const SNAP_MARKET_REVALIDATE = 30; +export const MARKET_FETCH_TIMEOUT_MS = 10_000; type DexPeriod = { buys?: number; @@ -79,6 +80,7 @@ export async function getSnapMarketData(): Promise { "user-agent": "hypersnap.org market data checker", }, next: { revalidate: SNAP_MARKET_REVALIDATE }, + signal: AbortSignal.timeout(MARKET_FETCH_TIMEOUT_MS), }); if (!response.ok) {