Reconectar Banco
Exportar contenido
Renueva una conexión bancaria con tokens expirados o revocados.
Cuándo reconectar
Sección titulada «Cuándo reconectar»- ⚠️ Badge “Requiere reconexión” en tarjeta de conexión
- ⚠️ Status:
expiredorevoked - ⚠️ Sincronización fallando repetidamente
- Haz clic en “Reconectar” en tarjeta de banco
- Repite flujo OAuth (mismo proceso que conexión inicial)
- Tokens se actualizan preservando historial de transacciones
- Conexión vuelve a
active
Qué se preserva
Sección titulada «Qué se preserva»✅ Historial de transacciones importadas
✅ Reconciliaciones realizadas
✅ Configuración de sincronización (frecuencia, rango)
✅ Cuentas en business_bank_accounts
Diferencia con nueva conexión
Sección titulada «Diferencia con nueva conexión»| Acción | Reconectar | Nueva conexión |
|---|---|---|
| Historial | ✅ Preservado | ❌ Se crea nueva conexión |
| Transacciones | ✅ Mantiene existentes | ❌ Duplicaría transacciones |
| ID conexión | ✅ Mismo ID | ⚠️ Nuevo ID |
Errores comunes
Sección titulada «Errores comunes»| Error | Causa | Solución |
|---|---|---|
| ”Esta conexión ya está activa” | Conexión no está expirada | No necesita reconexión |
| ”Banco ya conectado” | Existe conexión activa del mismo banco | Desconectar la antigua primero |
Notas técnicas
Sección titulada «Notas técnicas»Detalles de implementación
Lógica de reconexión en truelayer-auth:
// Buscar conexión existente por business_id y account_idsconst { data: existingConnection } = await supabase .from("bank_connections") .select("id, status, connection_id") .eq("business_id", business_id) .contains("account_ids", accountIds) // ← Crucial .in("status", ["active", "expired", "disconnected", "revoked"]) .order("created_at", { ascending: false }) .limit(1) .maybeSingle();
if (existingConnection) { // UPDATE: Reactivar conexión existente console.log("♻️ Actualizando conexión existente");
const { data: updatedConnection } = await supabase .from("bank_connections") .update({ token_expires_at: expiresAt.toISOString(), status: "pending", // Será 'active' tras guardar tokens requires_reauth: false, consecutive_failures: 0, last_error: null, }) .eq("id", existingConnection.id) .select() .single();
connection = updatedConnection; isUpdate = true;} else { // INSERT: Nueva conexión console.log("➕ Creando nueva conexión bancaria"); // ...}
// Actualizar tokens encriptados (igual para INSERT/UPDATE)await supabase.rpc("update_bank_connection_tokens", { p_connection_id: connection.id, p_new_access_token: tokenData.access_token, p_new_refresh_token: tokenData.refresh_token, p_new_expires_at: expiresAt.toISOString(), p_new_status: "active",});
return { success: true, is_reconnection: isUpdate // ← Frontend puede mostrar mensaje diferente};Por qué contains("account_ids", accountIds):
- Evita duplicados cuando usuario reconecta exactamente las mismas cuentas
- Si usuario conecta cuentas DIFERENTES del mismo banco → nueva conexión
- Permite tener múltiples conexiones de un banco si son cuentas distintas