Skip to main content

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

  1. 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

Nunca instancies un segundo cliente Axios. Usa siempre apiClient exportado desde este módulo para garantizar la inyección de tokens y el manejo de refresh.

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.
Proporciona respuestas simuladas para endpoints durante desarrollo local:
  • register — Simula registro de usuario
  • deleteAccount — 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

Nunca almacenes tokens o datos sensibles en AsyncStorage. Usa siempre SecureStorage para información de autenticación.

Upload Service

Archivo: uploadService.ts Gestiona la subida de imágenes a S3 con compresión previa y tracking de progreso.

Flujo de upload

  1. Compresión de la imagen según parámetros configurados (quality, maxWidth, maxHeight)
  2. Obtención de una signed URL desde el backend
  3. Upload directo a S3 vía PUT con la signed URL
  4. 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
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

El versionGateStore 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.

Métodos