From 481e7e467b3c3ba403769efc211d5db8785ca854 Mon Sep 17 00:00:00 2001 From: Sutarto Jordan Chrisfivo Date: Sun, 5 Jul 2026 17:40:41 +0700 Subject: [PATCH] fix(headroom): proxy dashboard through app (#2372) Add a 9Router-side proxy so the Headroom dashboard and its data endpoints (/stats, /health, /stats-history, /transformations/feed) stay same-origin when opened remotely through the 9Router app, and add an "Open Headroom Dashboard" link in the Token Saver modal. Gate /api/headroom/proxy as LOCAL_ONLY (loopback + CLI token) to match start/stop, and strip cookie/authorization when the Headroom target is non-loopback to avoid leaking viewer credentials. Co-authored-by: Cursor --- .../dashboard/token-saver/TokenSaverClient.js | 10 ++ src/app/api/headroom/proxy/[...path]/route.js | 104 ++++++++++++++++++ src/dashboardGuard.js | 1 + 3 files changed, 115 insertions(+) create mode 100644 src/app/api/headroom/proxy/[...path]/route.js diff --git a/src/app/(dashboard)/dashboard/token-saver/TokenSaverClient.js b/src/app/(dashboard)/dashboard/token-saver/TokenSaverClient.js index 637ddced..e77194d5 100644 --- a/src/app/(dashboard)/dashboard/token-saver/TokenSaverClient.js +++ b/src/app/(dashboard)/dashboard/token-saver/TokenSaverClient.js @@ -374,6 +374,16 @@ export default function TokenSaverClient() { {headroomStatusLabel} + {headroomRunning && ( + + Open Headroom Dashboard + + )}

Proxy URL