fix(sprint-5/etapa-4e): lockAcquireTimeout 30s + eliminar getSessionSafe — corta freeze en guardar perfil
getSessionSafe() tenía un problema de diseño: Promise.race([getSession(), timeout]) abandona la Promise de getSession() cuando gana el timeout. La Promise abandonada deja una operación en PROCESS_LOCKS[name] que bloquea el chain. Con lockAcquireTimeout=5s (default), un token refresh lento dispara ProcessLockAcquireTimeoutError cuyo handler hace await previousOperation (colgada) → freeze permanente. Fix: lockAcquireTimeout: 30000 (margen para redes lentas) + eliminar getSessionSafe() de supabase.ts, library-store, process-store y useReportData. Las queries Supabase llaman getSession() internamente vía _getAccessToken() que espera initializePromise automáticamente — la barrera era redundante. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -1,5 +1,4 @@
|
||||
import { useEffect, useState } from 'react'
|
||||
import { getSessionSafe } from '@/lib/supabase'
|
||||
import { supabaseActivityRepo } from '@/persistence/supabase/activity-repo'
|
||||
import { supabaseResourceRepo } from '@/persistence/supabase/resource-repo'
|
||||
import { supabaseProcessRepo } from '@/persistence/supabase/process-repo'
|
||||
@@ -30,8 +29,6 @@ export function useReportData(processId: string): ReportData {
|
||||
setIsLoading(true)
|
||||
setError(null)
|
||||
try {
|
||||
// Barrera única con timeout: garantiza sesión restaurada antes del fan-out en paralelo
|
||||
await getSessionSafe()
|
||||
const [proc, sim, acts, res] = await Promise.all([
|
||||
supabaseProcessRepo.getById(processId),
|
||||
supabaseSimulationRepo.getLatestByProcess(processId),
|
||||
|
||||
Reference in New Issue
Block a user