fix: Signal SSE monitor reconnects on connection drop

- Wrap streamSignalEvents in reconnection loop
- Exponential backoff: 1s → 30s max
- Log reconnection attempts
- Respect abortSignal for clean shutdown

Fixes #425
This commit is contained in:
Quentin
2026-01-07 22:48:15 +01:00
committed by Peter Steinberger
parent c21ba9e876
commit 80f31cd75e

View File

@@ -524,6 +524,13 @@ export async function monitorSignalProvider(
if (!queuedFinal) return; if (!queuedFinal) return;
}; };
// Reconnection loop for SSE stream
const MAX_RETRY_DELAY = 30_000; // 30 seconds
const INITIAL_RETRY_DELAY = 1_000; // 1 second
let retryDelay = INITIAL_RETRY_DELAY;
while (!opts.abortSignal?.aborted) {
try {
await streamSignalEvents({ await streamSignalEvents({
baseUrl, baseUrl,
account, account,
@@ -534,6 +541,17 @@ export async function monitorSignalProvider(
}); });
}, },
}); });
// If streamSignalEvents returns normally, break (shouldn't happen normally)
break;
} catch (err) {
if (opts.abortSignal?.aborted) return;
runtime.log?.(
`Signal SSE connection lost, reconnecting in ${retryDelay / 1000}s...`,
);
await new Promise((resolve) => setTimeout(resolve, retryDelay));
retryDelay = Math.min(retryDelay * 2, MAX_RETRY_DELAY);
}
}
} catch (err) { } catch (err) {
if (opts.abortSignal?.aborted) return; if (opts.abortSignal?.aborted) return;
throw err; throw err;