const LOOPBACK_HOSTS = new Set(["localhost", "127.0.0.1", "::1"]); function trimTrailingSlash(value: string) { return value.replace(/\/+$/, ""); } function getDefaultApiBaseUrl() { if (typeof window === "undefined") { return "http://localhost:5000"; } const protocol = window.location.protocol === "https:" ? "https:" : "http:"; return `${protocol}//${window.location.hostname}:5000`; } function shouldUseBrowserHostForApi(url: URL) { if (typeof window === "undefined") { return false; } return LOOPBACK_HOSTS.has(url.hostname) && !LOOPBACK_HOSTS.has(window.location.hostname); } function resolveApiBaseUrl() { const configuredApiUrl = import.meta.env.VITE_API_URL?.trim(); if (!configuredApiUrl) { return getDefaultApiBaseUrl(); } try { const apiUrl = new URL(configuredApiUrl); if (shouldUseBrowserHostForApi(apiUrl)) { apiUrl.hostname = window.location.hostname; } return trimTrailingSlash(apiUrl.toString()); } catch { return trimTrailingSlash(configuredApiUrl); } } export const API_BASE_URL = resolveApiBaseUrl();