From 6d15a692afe6000f05ff8badac25ef37d84a7ca8 Mon Sep 17 00:00:00 2001 From: Leopoldadmin Date: Fri, 26 Jun 2026 17:58:06 +0200 Subject: [PATCH] fix: WebSocket wss:// same-origin URL + try/catch to prevent crash on HTTPS - Change DEFAULT_WS_URL from ws://hostname:3001 to wss://window.location.host - Wrap WebSocket constructor in try/catch to prevent React crash on connection error - Fixes white page when opening a project (CADEditor crashed on insecure ws:// from HTTPS page) --- frontend/src/crdt/WebSocketProvider.ts | 9 ++++++++- frontend/src/crdt/useYjsBinding.ts | 2 +- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/frontend/src/crdt/WebSocketProvider.ts b/frontend/src/crdt/WebSocketProvider.ts index 3e2f609..82888af 100644 --- a/frontend/src/crdt/WebSocketProvider.ts +++ b/frontend/src/crdt/WebSocketProvider.ts @@ -45,7 +45,14 @@ export class WebSocketProvider { this.setStatus('connecting'); const fullUrl = `${this.url}/ws/collab/${encodeURIComponent(this.docName)}`; - this.ws = new WebSocket(fullUrl); + try { + this.ws = new WebSocket(fullUrl); + } catch (err) { + console.warn('[WebSocketProvider] Failed to construct WebSocket:', err); + this.setStatus('error'); + this.scheduleReconnect(); + return; + } this.ws.binaryType = 'arraybuffer'; this.ws.onopen = () => { diff --git a/frontend/src/crdt/useYjsBinding.ts b/frontend/src/crdt/useYjsBinding.ts index 69d0bb2..705963c 100644 --- a/frontend/src/crdt/useYjsBinding.ts +++ b/frontend/src/crdt/useYjsBinding.ts @@ -41,7 +41,7 @@ export interface UseYjsBindingResult { clearSelection: () => void; } -const DEFAULT_WS_URL = `ws://${window.location.hostname}:3001`; +const DEFAULT_WS_URL = `wss://${window.location.host}`; export function useYjsBinding(opts: UseYjsBindingOptions): UseYjsBindingResult { const { docName, wsUrl = DEFAULT_WS_URL, userId, userName, userColor, enabled = true } = opts;