fix(tunnel): make tailscale probes non-blocking to prevent UI freeze
Convert isTailscaleLoggedIn to cached non-blocking getter and turn isTailscaleRunningStrict / isTailscaleLoggedInStrict into async execAsync probes. The status poll no longer blocks the event loop, so dashboard navigation stays responsive while tunnel/tailscale checks run. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
1 parent
c5815ad3f0
commit
289214a2ea
4 files changed
+49
-17
No files matched your search
@@ -1,5 +1,5 @@
|
||||
import { loadState, generateShortId } from "../shared/state.js";
|
||||
import { startFunnel, stopFunnel, isTailscaleRunning, isTailscaleRunningStrict, isTailscaleLoggedIn, startLogin, startDaemonWithPassword, provisionCert } from "./tailscale.js";
|
||||
import { startFunnel, stopFunnel, isTailscaleRunning, isTailscaleRunningStrict, isTailscaleLoggedIn, isTailscaleLoggedInStrict, startLogin, startDaemonWithPassword, provisionCert } from "./tailscale.js";
|
||||
import { waitForHealth } from "./healthCheck.js";
|
||||
import { getSettings, updateSettings } from "@/lib/localDb";
|
||||
import { getCachedPassword, loadEncryptedPassword, initDbHooks } from "@/mitm/manager";
|
||||
@@ -37,7 +37,7 @@ export async function enableTailscale(localPort = 20128) {
|
||||
const shortId = existing?.shortId || generateShortId();
|
||||
const tsHostname = shortId;
|
||||
|
||||
const loggedIn = isTailscaleLoggedIn();
|
||||
const loggedIn = await isTailscaleLoggedInStrict();
|
||||
console.log(`[Tailscale] loggedIn=${loggedIn}`);
|
||||
if (!loggedIn) {
|
||||
const loginResult = await startLogin(tsHostname);
|
||||
@@ -72,7 +72,7 @@ export async function enableTailscale(localPort = 20128) {
|
||||
}
|
||||
|
||||
// Strict probe: bypass cache so we don't false-negative on first invocation
|
||||
if (!isTailscaleLoggedIn() || !isTailscaleRunningStrict()) {
|
||||
if (!(await isTailscaleLoggedInStrict()) || !(await isTailscaleRunningStrict())) {
|
||||
console.error("[Tailscale] strict probe failed (device removed?)");
|
||||
stopFunnel();
|
||||
return { success: false, error: "Tailscale not connected. Device may have been removed. Please re-login." };
|
||||
|
||||
Reference in new issue
Block a user