CISA Known Exploited Vulnerabilities catalog — tracks CVEs actively
exploited in the wild. No auth required. Provides vendor breakdown,
ransomware linkage, recent additions, and actionable signals.
Cloudflare Radar — internet outages, traffic anomalies, and DDoS attack
trends. Requires a free API token (CLOUDFLARE_API_TOKEN). Monitors
watchlist countries (RU, UA, CN, IR, KP, etc.) for internet shutdowns
and sustained disruptions.
Both sources slot into Tier 6: Cyber & Infrastructure. Source count
updated from 27 to 29.
The Promise.race timeout was never cleared on success/failure,
keeping the Node event loop alive for ~30s after fast sweeps.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The dashboard would hang indefinitely on the loading screen because:
1. `bls.mjs` used a raw `fetch()` without any timeout/AbortSignal —
if the BLS API was slow or unresponsive, it would block forever.
2. `runSource()` in `briefing.mjs` had no per-source timeout, so a
single hanging API could stall the entire sweep indefinitely.
3. `server.mjs` loaded cached `latest.json` via a fire-and-forget
promise (`.then()`) instead of `await`, meaning the dashboard
never received the cached data before the sweep started.
4. `loading.html` relied solely on SSE for redirect — if the SSE
connection missed the update event, the page would never redirect.
Changes:
- Add 15s AbortController timeout to BLS `getSeries()` fetch call
- Add 30s per-source timeout via `Promise.race()` in `runSource()`
- Await `synthesize()` when loading cached data so the dashboard
serves instantly on restart when `runs/latest.json` exists
- Add 5s fallback polling to loading page alongside SSE
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- New source: apis/sources/space.mjs (no API key required)
- Tracks: recent launches, ISS, military sats, Starlink/OneWeb constellations
- Wired into briefing.mjs (27 sources), inject.mjs synthesis, and dashboard
- New Space Watch panel in left rail with military breakdown and signals
- New Satellites layer in Sensor Grid
26-source OSINT intelligence engine with live Jarvis dashboard,
auto-refresh via SSE, optional LLM layer (4 providers), delta/memory
system, and Telegram breaking news alerts.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>