Servicios Compartidos
Ubicación:src/shared/services/
Los servicios encapsulan lógica de infraestructura y comunicación con sistemas externos. Todos son singletons o funciones puras sin estado de UI.
API Client
Archivo:api/client.ts
El cliente HTTP central de la aplicación, construido sobre Axios.
Configuración
Interceptores
- Request
- Response
- Obtiene el access token (con cache de 5s) 2. Agrega header
Authorization: Bearer {token}3. Inyecta el idioma como query parameter 4. Si el token está expirado, intenta refresh antes de enviar
Métodos disponibles
Error Handler
Archivo:api/errorHandler.ts
Clasifica y procesa errores de red para mostrar mensajes amigables al usuario e informar a Sentry.
Clasificación de errores
Integración con Sentry
- Agrega breadcrumbs con detalles del request (URL, método, status)
- Reporta errores no cancelados como excepciones
- Incluye contexto extra: response body, headers relevantes
Mock Response Handler
Archivo:api/mockResponseHandler.ts
Este servicio solo está activo en modo desarrollo. En producción no se incluye en el bundle.
register— Simula registro de usuariodeleteAccount— Simula eliminación de cuenta- Endpoints de booking — Simula flujos de reserva
Secure Storage
Archivo:storage/secureStorage.ts
Wrapper de expo-secure-store con retry y backoff exponencial.
Configuración de retry
Datos gestionados
Tokens de autenticación
- Access token - Refresh token - Token expiry timestamp
Datos de usuario
- Información del perfil serializada - Se almacena como JSON cifrado
Métodos
Upload Service
Archivo:uploadService.ts
Gestiona la subida de imágenes a S3 con compresión previa y tracking de progreso.
Flujo de upload
- Compresión de la imagen según parámetros configurados (quality, maxWidth, maxHeight)
- Obtención de una signed URL desde el backend
- Upload directo a S3 vía
PUTcon la signed URL - Tracking del progreso para actualizar la UI
Categorías de upload
Linking Service
Archivo:linkingService.ts
Parser y router de deep links. Gestiona la navegación desde URLs externas hacia pantallas de la app.
Capacidades
- Soporta URL schemes nativos y links web (universal links)
- Crea links compartibles para diferentes entidades
- Mapea URLs entrantes a rutas de Expo Router
- Procesa deep links provenientes de push notifications
Tipos de link soportados
El servicio tiene configuradas más de 20 rutas de pantalla. Cada ruta mapea un patrón de URL a una
pantalla específica de Expo Router.
Query Invalidation Service
Archivo:queryInvalidationService.ts
Centraliza la invalidación de caches de React Query para mantener la coherencia de datos entre módulos.
Métodos
Version Gate
Ubicación:services/versionGate/
Servicio que verifica la versión instalada de la app contra los valores min y current del backend, mostrando un modal bloqueante (actualización obligatoria) o un banner dismissible (actualización recomendada).
Archivos
API Call
- Sin autenticación — usa
axios.get()directo, no el cliente centralizado - Timeout: 5 segundos
- Retry: 1 reintento en caso de fallo
- Fail open: si ambos intentos fallan, el usuario pasa sin bloqueo
- Response format: soporta tanto
{ min, current }(filtrado) como{ ios: {...}, android: {...} }(nested)
Comparación de versiones
Compara la versión instalada (Constants.expoConfig?.version) contra:
Coordinación con otros modales
ElversionGateStore expone isActive: boolean que otros componentes pueden consultar para esperar a que el version gate se resuelva antes de mostrar sus propios modales. Por ejemplo, AutoShowReviewModal espera a que isActive sea false.
Store URLs
Analytics
Onboarding Service
Archivo:onboardingService.ts
Wrapper del onboardingStore que expone métodos simples para gestionar el estado del onboarding.