diff --git a/server/index.js b/server/index.js index 92082df..833af56 100755 --- a/server/index.js +++ b/server/index.js @@ -270,17 +270,8 @@ app.use(express.static(path.join(__dirname, '../dist'), { })); // API Routes (protected) -app.get('/api/config', authenticateToken, (req, res) => { - const host = req.headers.host || `${req.hostname}:${PORT}`; - const protocol = req.protocol === 'https' || req.get('x-forwarded-proto') === 'https' ? 'wss' : 'ws'; - - console.log('Config API called - Returning host:', host, 'Protocol:', protocol); - - res.json({ - serverPort: PORT, - wsUrl: `${protocol}://${host}` - }); -}); +// /api/config endpoint removed - no longer needed +// Frontend now uses window.location for WebSocket URLs // System update endpoint app.post('/api/system/update', authenticateToken, async (req, res) => { diff --git a/src/components/Shell.jsx b/src/components/Shell.jsx index de96d37..39ee41b 100644 --- a/src/components/Shell.jsx +++ b/src/components/Shell.jsx @@ -380,43 +380,29 @@ function Shell({ selectedProject, selectedSession, isActive, initialCommand, isP // WebSocket connection function (called manually) const connectWebSocket = async () => { if (isConnecting || isConnected) return; - + try { - // Get authentication token - const token = localStorage.getItem('auth-token'); - if (!token) { - console.error('No authentication token found for Shell WebSocket connection'); - return; - } - - // Fetch server configuration to get the correct WebSocket URL - let wsBaseUrl; - try { - const configResponse = await fetch('/api/config', { - headers: { - 'Authorization': `Bearer ${token}` - } - }); - const config = await configResponse.json(); - wsBaseUrl = config.wsUrl; - - // If the config returns localhost but we're not on localhost, use current host but with API server port - if (wsBaseUrl.includes('localhost') && !window.location.hostname.includes('localhost')) { - const protocol = window.location.protocol === 'https:' ? 'wss:' : 'ws:'; - // For development, API server is typically on port 3002 when Vite is on 3001 - const apiPort = window.location.port === '3001' ? '3002' : window.location.port; - wsBaseUrl = `${protocol}//${window.location.hostname}:${apiPort}`; - } - } catch (error) { + const isPlatform = import.meta.env.VITE_IS_PLATFORM === 'true'; + + // Construct WebSocket URL + let wsUrl; + + if (isPlatform) { + // Platform mode: Use same domain as the page (goes through proxy) const protocol = window.location.protocol === 'https:' ? 'wss:' : 'ws:'; - // For development, API server is typically on port 3002 when Vite is on 3001 - const apiPort = window.location.port === '3001' ? '3002' : window.location.port; - wsBaseUrl = `${protocol}//${window.location.hostname}:${apiPort}`; + wsUrl = `${protocol}//${window.location.host}/shell`; + } else { + // OSS mode: Connect to same host:port that served the page + const token = localStorage.getItem('auth-token'); + if (!token) { + console.error('No authentication token found for Shell WebSocket connection'); + return; + } + + const protocol = window.location.protocol === 'https:' ? 'wss:' : 'ws:'; + wsUrl = `${protocol}//${window.location.host}/shell?token=${encodeURIComponent(token)}`; } - - // Include token in WebSocket URL as query parameter - const wsUrl = `${wsBaseUrl}/shell?token=${encodeURIComponent(token)}`; - + ws.current = new WebSocket(wsUrl); ws.current.onopen = () => { diff --git a/src/utils/api.js b/src/utils/api.js index 9459417..4ae75a7 100644 --- a/src/utils/api.js +++ b/src/utils/api.js @@ -37,9 +37,9 @@ export const api = { user: () => authenticatedFetch('/api/auth/user'), logout: () => authenticatedFetch('/api/auth/logout', { method: 'POST' }), }, - + // Protected endpoints - config: () => authenticatedFetch('/api/config'), + // config endpoint removed - no longer needed (frontend uses window.location) projects: () => authenticatedFetch('/api/projects'), sessions: (projectName, limit = 5, offset = 0) => authenticatedFetch(`/api/projects/${projectName}/sessions?limit=${limit}&offset=${offset}`), diff --git a/src/utils/websocket.js b/src/utils/websocket.js index 074b6d9..553eaf2 100755 --- a/src/utils/websocket.js +++ b/src/utils/websocket.js @@ -21,49 +21,27 @@ export function useWebSocket() { const connect = async () => { try { - // Get authentication token (skip in platform mode) - let token = null; const isPlatform = import.meta.env.VITE_IS_PLATFORM === 'true'; - if (!isPlatform) { - token = localStorage.getItem('auth-token'); + // Construct WebSocket URL + let wsUrl; + + if (isPlatform) { + // Platform mode: Use same domain as the page (goes through proxy) + const protocol = window.location.protocol === 'https:' ? 'wss:' : 'ws:'; + wsUrl = `${protocol}//${window.location.host}/ws`; + } else { + // OSS mode: Connect to same host:port that served the page + const token = localStorage.getItem('auth-token'); if (!token) { console.warn('No authentication token found for WebSocket connection'); return; } - } - // Fetch server configuration to get the correct WebSocket URL - let wsBaseUrl; - try { - const configResponse = await fetch('/api/config', { - headers: token ? { - 'Authorization': `Bearer ${token}` - } : {} - }); - const config = await configResponse.json(); - wsBaseUrl = config.wsUrl; - - // If the config returns localhost but we're not on localhost, use current host but with API server port - if (wsBaseUrl.includes('localhost') && !window.location.hostname.includes('localhost')) { - const protocol = window.location.protocol === 'https:' ? 'wss:' : 'ws:'; - // For development, API server is typically on port 3002 when Vite is on 3001 - const apiPort = window.location.port === '3001' ? '3002' : window.location.port; - wsBaseUrl = `${protocol}//${window.location.hostname}:${apiPort}`; - } - } catch (error) { - console.warn('Could not fetch server config, falling back to current host with API server port'); const protocol = window.location.protocol === 'https:' ? 'wss:' : 'ws:'; - // For development, API server is typically on port 3002 when Vite is on 3001 - const apiPort = window.location.port === '3001' ? '3002' : window.location.port; - wsBaseUrl = `${protocol}//${window.location.hostname}:${apiPort}`; + wsUrl = `${protocol}//${window.location.host}/ws?token=${encodeURIComponent(token)}`; } - // Include token in WebSocket URL as query parameter (only in OSS mode) - let wsUrl = `${wsBaseUrl}/ws`; - if (token) { - wsUrl += `?token=${encodeURIComponent(token)}`; - } const websocket = new WebSocket(wsUrl); websocket.onopen = () => {