Files
plantillas-proyectos/frontend/src/lib/config/backend.ts

52 lines
1.7 KiB
TypeScript

/**
* Configuración de conexión al backend
* Detecta automáticamente el entorno y usa la URL correcta
*/
export function getBackendUrl(): string {
// 1. Si existe variable de entorno, úsala (override manual)
if (import.meta.env.VITE_BACKEND_URL) {
return import.meta.env.VITE_BACKEND_URL;
}
// 2. Detección automática basada en dónde corre el código
if (typeof window !== 'undefined') {
// CLIENTE (Browser): usar la URL pública del backend
// En local: http://localhost:8000
// En prod: mismo dominio o dominio específico
const hostname = window.location.hostname;
if (hostname === 'localhost' || hostname === '127.0.0.1') {
return 'http://localhost:8000/api';
}
// En producción, asumir que el backend está en el mismo dominio /api
// o usar un subdominio específico
return `${window.location.protocol}//${hostname}/api`;
} else {
// SERVIDOR (SvelteKit SSR/Endpoints): usar URL interna
// En Docker: http://backend:8000
// En local: http://127.0.0.1:8000 (IPv4 explícito)
// Detectar si estamos en Docker por hostname
const isDocker = process.env.HOSTNAME?.includes('docker');
if (isDocker) {
return 'http://backend:8000/api';
}
// En desarrollo local, usar IPv4 explícito para evitar problemas con IPv6
return 'http://127.0.0.1:8000/api';
}
}
export const BACKEND_URL = getBackendUrl();
// Helper para logs
export function logBackendConfig() {
console.log('[Backend Config]', {
url: BACKEND_URL,
isServer: typeof window === 'undefined',
});
}