From e72665c466133cc915e79c664f0723733dd96d90 Mon Sep 17 00:00:00 2001 From: "Gan, Jimmy" Date: Sat, 7 Mar 2026 17:49:46 +0800 Subject: [PATCH] fix: refresh terminal websocket auth on reconnect Reuse the existing refresh-token flow before opening terminal websocket connections so reconnects can recover from expired access tokens without requiring a full dashboard reload. Co-Authored-By: Claude Opus 4.6 (1M context) --- dashboard/frontend/src/lib/api.js | 9 +++ dashboard/frontend/src/routes/Terminal.svelte | 66 +++++++++++++++++-- 2 files changed, 68 insertions(+), 7 deletions(-) diff --git a/dashboard/frontend/src/lib/api.js b/dashboard/frontend/src/lib/api.js index 30dcb90..fa636ec 100644 --- a/dashboard/frontend/src/lib/api.js +++ b/dashboard/frontend/src/lib/api.js @@ -54,6 +54,15 @@ async function tryRefresh() { return refreshPromise; } +export async function getWebSocketToken(forceRefresh = false) { + if (!forceRefresh && token) return token; + const refreshed = await tryRefresh(); + if (refreshed && token) return token; + setToken(""); + setRefreshToken(""); + return ""; +} + async function request(path, opts = {}) { const headers = opts.headers || {}; if (token) headers["Authorization"] = `Bearer ${token}`; diff --git a/dashboard/frontend/src/routes/Terminal.svelte b/dashboard/frontend/src/routes/Terminal.svelte index 6afd3b7..4583989 100644 --- a/dashboard/frontend/src/routes/Terminal.svelte +++ b/dashboard/frontend/src/routes/Terminal.svelte @@ -1,7 +1,7 @@