From 180ba2abe7e7b1b4fd5447fc026c9132ff1d074c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcos=20Ben=C3=ADtez?= Date: Thu, 28 May 2026 00:37:55 -0300 Subject: [PATCH] =?UTF-8?q?fix:=20try-catch=20en=20onAuthStateChange=20?= =?UTF-8?q?=E2=80=94=20loading=20nunca=20queda=20bloqueado=20en=20error?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Sonnet 4.6 --- src/auth/SupabaseAuthService.ts | 53 ++++++++++++++++++++++----------- 1 file changed, 35 insertions(+), 18 deletions(-) diff --git a/src/auth/SupabaseAuthService.ts b/src/auth/SupabaseAuthService.ts index 5180f91..5304f64 100644 --- a/src/auth/SupabaseAuthService.ts +++ b/src/auth/SupabaseAuthService.ts @@ -24,27 +24,44 @@ export class SupabaseAuthService implements AuthService { onAuthStateChange(callback: (user: AuthUser | null) => void): () => void { const { data: { subscription } } = supabase.auth.onAuthStateChange( async (event, session) => { - if (!session?.user) { - callback(null) - return - } + // Siempre llamar callback — incluso si falla algo interno + try { + if (!session?.user) { + callback(null) + return + } - if (event === 'SIGNED_IN') { - const email = session.user.email ?? '' - const role = email.endsWith('@inquality.com.py') ? 'platform_admin' : 'guest' - await supabase.from('users').upsert( - { + if (event === 'SIGNED_IN') { + const email = session.user.email ?? '' + const role = email.endsWith('@inquality.com.py') ? 'platform_admin' : 'guest' + const { error: upsertError } = await supabase.from('users').upsert( + { + id: session.user.id, + name: session.user.user_metadata?.full_name ?? email, + avatar_url: session.user.user_metadata?.avatar_url ?? null, + platform_role: role, + }, + { onConflict: 'id', ignoreDuplicates: true } + ) + if (upsertError) console.error('Error al crear usuario en DB:', upsertError) + } + + const user = await this.buildAuthUser(session.user) + callback(user) + } catch (err) { + console.error('Error en onAuthStateChange:', err) + // Garantizar que loading se desbloquea incluso en error + if (session?.user) { + callback({ id: session.user.id, - name: session.user.user_metadata?.full_name ?? email, - avatar_url: session.user.user_metadata?.avatar_url ?? null, - platform_role: role, - }, - { onConflict: 'id', ignoreDuplicates: true } - ) + email: session.user.email ?? '', + name: session.user.user_metadata?.full_name as string ?? session.user.email ?? '', + platformRole: 'guest', + }) + } else { + callback(null) + } } - - const user = await this.buildAuthUser(session.user) - callback(user) } )