diff --git a/src/lib/collaboration/realtime.ts b/src/lib/collaboration/realtime.ts index e5b0cb8..800e273 100644 --- a/src/lib/collaboration/realtime.ts +++ b/src/lib/collaboration/realtime.ts @@ -77,6 +77,21 @@ export class RealtimeConnection { this.resetInactivityTimer() 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 this.connectionTimer = setTimeout(() => { if (this.isDestroyed || this.isPaused) return