Skip to content

Configuración del Servidor

La configuración de Streamlyra es centralizada y tipada, basada en variables de entorno y validada en tiempo de ejecución para prevenir errores de arranque por configuraciones faltantes.

Módulo de Configuración (src/config/index.ts)

Toda la configuración se exporta mediante un objeto único config. Este módulo:

  1. Carga las variables desde el archivo .env mediante dotenv.
  2. Valida que las variables críticas existan.
  3. Exporta constantes estructuradas para el resto de la aplicación.

Variables de Entorno Requeridas

VariableDescripciónValor Ejemplo
DATABASE_URLURL de conexión a PostgreSQL.postgres://user:pass@host:5432/db
JWT_SECRETClave para firmar tokens de sesión.una_cadena_larga_y_aleatoria
ENCRYPTION_KEYClave para encriptar tokens de terceros (AES-256).32_bytes_de_seguridad
FRONTEND_URLURL del cliente (CORS).http://localhost:5173

Configuración de Cookies y CSRF

Configuramos las cookies de sesión basándonos en el entorno:

  • Producción: Cookies con Secure: true, SameSite: None (para permitir cross-site si el dominio es distinto) y HttpOnly.
  • Desarrollo: Secure: false y SameSite: Lax.

Configuración CORS para CSRF Cross-Origin

Para soportar aplicaciones donde el frontend y backend están en dominios diferentes (ej. frontend en Vercel, backend en Render), la configuración de CORS incluye:

  • exposedHeaders: ['X-CSRF-Token']: Permite que el cliente JavaScript lea el token CSRF del header de respuesta
  • allowedHeaders: ['X-CSRF-Token', 'csrf-token']: Permite que el cliente envíe el token CSRF en los headers de petición

Esta configuración es esencial para el funcionamiento del sistema de protección CSRF en entornos cross-origin, donde las cookies no son accesibles por JavaScript debido a las políticas de seguridad del navegador.

Validación en Tiempo de Ejecución

En src/config/validation.ts, utilizamos una lógica que detiene el servidor si faltan variables esenciales. Esto evita que la aplicación falle silenciosamente cuando intenta usar un servicio no configurado.

typescript
// Ejemplo de lógica de validación
if (!process.env.DATABASE_URL) {
  throw new Error("FATAL: DATABASE_URL no definida");
}

Plataformas (OAuth)

La configuración de cada plataforma (IDs de cliente y Secrets) se encuentra desacoplada en src/config/oauth.config.ts, permitiendo añadir o modificar integraciones sin tocar el núcleo de la lógica.

Liberado bajo la Licencia MIT.