From 5141a5c06cb05720eebc34f796cc273a4399a6b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcos=20Ben=C3=ADtez?= Date: Thu, 18 Jun 2026 22:06:53 -0300 Subject: [PATCH] =?UTF-8?q?Este=20es=20el=20workaround=20documentado=20ofi?= =?UTF-8?q?cialmente=20para=20el=20bug=20conocido=20de=20navigator.locks?= =?UTF-8?q?=20colg=C3=A1ndose=20en=20supabase-js=20v2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/lib/supabase.ts | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/lib/supabase.ts b/src/lib/supabase.ts index 8825624..4f521ee 100644 --- a/src/lib/supabase.ts +++ b/src/lib/supabase.ts @@ -1,4 +1,4 @@ -import { createClient } from '@supabase/supabase-js' +import { createClient, processLock } from '@supabase/supabase-js' const supabaseUrl = import.meta.env.VITE_SUPABASE_URL const supabaseAnonKey = import.meta.env.VITE_SUPABASE_ANON_KEY @@ -7,7 +7,16 @@ if (!supabaseUrl || !supabaseAnonKey) { throw new Error('Variables de entorno VITE_SUPABASE_URL y VITE_SUPABASE_ANON_KEY son requeridas') } -export const supabase = createClient(supabaseUrl, supabaseAnonKey) +export const supabase = createClient(supabaseUrl, supabaseAnonKey, { + auth: { + // Por defecto supabase-js v2 usa navigator.locks para coordinar refresh de sesión entre tabs. + // Si una tab queda colgada o se cierra sin liberar el lock, getSession()/queries quedan + // esperando ese lock para siempre. processLock usa coordinación solo en memoria (sin + // navigator.locks) — evita el deadlock a costa de no sincronizar refresh entre tabs, + // lo cual es aceptable para este producto (uso mayormente single-tab). + lock: processLock, + }, +}) // supabase.auth.getSession() puede colgarse indefinidamente si el cliente queda // esperando un lock interno (navigator.locks) que nunca se libera. Esta barrera