From 9d579d9b9f6ef239a6fa7ad73a6b5a47d6306142 Mon Sep 17 00:00:00 2001 From: h Date: Wed, 21 Jan 2026 02:07:44 +0100 Subject: [PATCH] fix(frontend): ws replacement --- frontend/src/lib/convex-polling.svelte.ts | 13 +++++++++++-- frontend/src/routes/[mnemonic]/+page.svelte | 21 ++++++++++++++++++--- 2 files changed, 29 insertions(+), 5 deletions(-) diff --git a/frontend/src/lib/convex-polling.svelte.ts b/frontend/src/lib/convex-polling.svelte.ts index 627e4ae..da1fe96 100644 --- a/frontend/src/lib/convex-polling.svelte.ts +++ b/frontend/src/lib/convex-polling.svelte.ts @@ -12,13 +12,17 @@ type PollingContext = { export function hasWebSocketSupport(): boolean { if (typeof window === 'undefined') return true; try { - return 'WebSocket' in window && typeof WebSocket !== 'undefined'; - } catch { + const hasWs = 'WebSocket' in window && typeof WebSocket !== 'undefined'; + console.log('[convex-polling] WebSocket check:', hasWs); + return hasWs; + } catch (e) { + console.log('[convex-polling] WebSocket check error:', e); return false; } } export function setupPollingConvex(url: string): void { + console.log('[convex-polling] Setting up polling client with URL:', url); const client = new ConvexHttpClient(url); setContext(POLLING_CONTEXT_KEY, { client }); } @@ -63,22 +67,27 @@ export function usePollingQuery>( async function poll() { const args = argsGetter(); if (args === 'skip') { + console.log('[convex-polling] Skipping query (args=skip)'); state.isLoading = false; return; } const argsJson = JSON.stringify(args); if (argsJson !== lastArgsJson) { + console.log('[convex-polling] Args changed, setting loading'); state.isLoading = true; lastArgsJson = argsJson; } try { + console.log('[convex-polling] Polling query with args:', args); const result = await client.query(query, args); + console.log('[convex-polling] Query result:', result); state.data = result; state.error = null; state.isLoading = false; } catch (err) { + console.error('[convex-polling] Query error:', err); state.error = err instanceof Error ? err : new Error(String(err)); state.isLoading = false; } diff --git a/frontend/src/routes/[mnemonic]/+page.svelte b/frontend/src/routes/[mnemonic]/+page.svelte index 8da178b..e4aa5fe 100644 --- a/frontend/src/routes/[mnemonic]/+page.svelte +++ b/frontend/src/routes/[mnemonic]/+page.svelte @@ -10,6 +10,7 @@ const usePolling = getContext('convex-use-polling') ?? false; let mnemonic = $derived(page.params.mnemonic); + let debugInfo = $state(''); const chatDataWs = usePolling ? null @@ -97,11 +98,25 @@
+
+ mode: {usePolling ? 'polling' : 'websocket'}
+ mnemonic: {mnemonic}
+ loading: {chatData.isLoading}
+ error: {chatData.error?.message ?? 'none'}
+ data: {chatData.data ? 'yes' : 'no'} +
+ {#if chatData.isLoading} -
Loading...
+
+ Loading... ({usePolling ? 'polling' : 'ws'}) +
{:else if chatData.error} -
- Error: {chatData.error.toString()} +
+
Error:
+
{chatData.error.message}
+
Mode: {usePolling ? 'polling' : 'websocket'}
{:else if !chatData.data}
Chat not found