/** * Configuration utilities for environment-specific URLs */ // Check if we're running in browser const isBrowser = typeof window !== "undefined"; /** * Get the SPACE_HOST from various sources */ function getSpaceHost(): string | undefined { if (!isBrowser) return undefined; // Check window.SPACE_HOST (injected by container) if ((window as unknown as { SPACE_HOST?: string }).SPACE_HOST) { return (window as unknown as { SPACE_HOST: string }).SPACE_HOST; } // Check if current hostname looks like HF Spaces const hostname = window.location.hostname; if (hostname.includes("hf.space") || hostname.includes("huggingface.co")) { return hostname; } return undefined; } /** * Get the base URL for API requests */ export function getApiBaseUrl(): string { if (!isBrowser) return "http://localhost:7860"; // Check for Hugging Face Spaces const spaceHost = getSpaceHost(); if (spaceHost) { return `https://${spaceHost}`; } // In browser, check current location const { protocol, hostname, port } = window.location; // If we're on the same host and port, use same origin (both frontend and backend on same server) if (hostname === "localhost" || hostname === "127.0.0.1") { // In development, frontend might be on 5173 and backend on 7860 if (port === "5173" || port === "5174") { return "http://localhost:8000"; } // If frontend is served from backend (port 7860), use same origin return `${protocol}//${hostname}:${port}`; } // For production, use same origin (both served from same FastAPI server) return `${protocol}//${hostname}${port ? `:${port}` : ""}`; } /** * Get the WebSocket URL for real-time connections */ export function getWebSocketBaseUrl(): string { if (!isBrowser) return "ws://localhost:7860"; // Check for Hugging Face Spaces const spaceHost = getSpaceHost(); if (spaceHost) { return `wss://${spaceHost}`; } const { protocol, hostname, port } = window.location; // If we're on localhost if (hostname === "localhost" || hostname === "127.0.0.1") { // In development, frontend might be on 5173 and backend on 7860 if (port === "5173" || port === "5174") { return "ws://localhost:8000"; } // If frontend is served from backend (port 7860), use same origin const wsProtocol = protocol === "https:" ? "wss:" : "ws:"; return `${wsProtocol}//${hostname}:${port}`; } // For HTTPS sites, use WSS; for HTTP sites, use WS const wsProtocol = protocol === "https:" ? "wss:" : "ws:"; // For production, use same origin (both served from same FastAPI server) return `${wsProtocol}//${hostname}${port ? `:${port}` : ""}`; } /** * Get environment info for debugging */ export function getEnvironmentInfo() { if (!isBrowser) return { env: "server", hostname: "unknown" }; const { protocol, hostname, port } = window.location; const spaceHost = getSpaceHost(); return { env: spaceHost ? "huggingface-spaces" : hostname === "localhost" ? "local" : "production", hostname, port, protocol, spaceHost, apiBaseUrl: getApiBaseUrl(), }; }