fix: wait for auth session before connecting to realtime channel

On initial page load, the Supabase browser client's auth session may not
be ready yet (still loading from cookies). The Realtime channel subscription
silently fails without a valid access token. Now connect() awaits getSession()
first, which ensures the token is available and also refreshes expired tokens
on reconnect after inactivity.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Gustavo Henrique Santos Souza de Miranda 2026-01-24 19:22:22 -03:00
parent 9769a80381
commit 3b19f58e26
1 changed files with 15 additions and 0 deletions

View File

@ -77,6 +77,21 @@ export class RealtimeConnection {
this.resetInactivityTimer() this.resetInactivityTimer()
this.clearConnectionTimer() this.clearConnectionTimer()
// Ensure the Supabase client has a valid auth session before connecting.
// On initial page load, the session may still be loading from cookies.
try {
const { data: { session } } = await this.supabase.auth.getSession()
if (!session && !this.isDestroyed) {
// No session yet - wait briefly and retry
this.scheduleReconnect()
return
}
} catch {
// Session check failed - proceed anyway, channel will handle auth errors
}
if (this.isDestroyed || this.isPaused) return
// Set a timeout: if we don't connect within CONNECTION_TIMEOUT_MS, retry // Set a timeout: if we don't connect within CONNECTION_TIMEOUT_MS, retry
this.connectionTimer = setTimeout(() => { this.connectionTimer = setTimeout(() => {
if (this.isDestroyed || this.isPaused) return if (this.isDestroyed || this.isPaused) return