fix reconnect

This commit is contained in:
Chris Wanstrath 2026-02-27 15:35:49 -08:00
parent 55316027c0
commit 74f9062a89

View File

@ -146,18 +146,19 @@ export function renameTunnelConfig(oldName: string, newName: string) {
saveConfig(config) saveConfig(config)
} }
function cancelReconnect(appName: string) { function cancelReconnect(appName: string, resetAttempts = true) {
const timer = _reconnectTimers.get(appName) const timer = _reconnectTimers.get(appName)
if (timer) { if (timer) {
clearTimeout(timer) clearTimeout(timer)
_reconnectTimers.delete(appName) _reconnectTimers.delete(appName)
} }
_reconnectAttempts.delete(appName) if (resetAttempts) _reconnectAttempts.delete(appName)
} }
function openTunnel(appName: string, port: number, subdomain?: string) { function openTunnel(appName: string, port: number, subdomain?: string, isReconnect = false) {
// Cancel any pending reconnect timer to prevent duplicate loops // Cancel any pending reconnect timer to prevent duplicate loops
cancelReconnect(appName) // but preserve attempts counter during reconnection so backoff works
cancelReconnect(appName, !isReconnect)
// Close existing tunnel if any // Close existing tunnel if any
const existing = _tunnels.get(appName) const existing = _tunnels.get(appName)
@ -232,7 +233,7 @@ function openTunnel(appName: string, port: number, subdomain?: string) {
const config = loadConfig() const config = loadConfig()
if (!config[appName]) return if (!config[appName]) return
hostLog(`Tunnel reconnecting: ${appName}`) hostLog(`Tunnel reconnecting: ${appName}`)
openTunnel(appName, port, config[appName]?.subdomain) openTunnel(appName, port, config[appName]?.subdomain, true)
}, delay) }, delay)
_reconnectTimers.set(appName, timer) _reconnectTimers.set(appName, timer)