Spaces:
Running
Running
| /** | |
| * 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") { | |
| return "http://localhost:7860"; | |
| } | |
| // 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") { | |
| return "ws://localhost:7860"; | |
| } | |
| // 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(), | |
| wsBaseUrl: getWebSocketBaseUrl() | |
| }; | |
| } | |