diff --git a/src/App.svelte b/src/App.svelte index 600d2f5..6e8d2e7 100644 --- a/src/App.svelte +++ b/src/App.svelte @@ -12,6 +12,7 @@ let newPassword = ''; let authError = ''; let authBusy = false; + let connectionNotice = ''; let oauthLink = ''; let oauthIdentity: 'streamer' | 'bot' = 'streamer'; let oauthBusy = false; @@ -19,15 +20,29 @@ async function checkServer() { connectionState = 'CONNECTING'; - try { - const response = await fetch(`${serverAddress}/api/v1/server/info`); - if (!response.ok) throw new Error(`HTTP ${response.status}`); - const info: { server_version: string } = await response.json(); - serverVersion = info.server_version; - connectionState = 'CONNECTED'; - } catch { - connectionState = 'SERVER UNAVAILABLE'; + const retryDelays = [0, 3000, 10000, 15000, 30000]; + for (let attempt = 0; attempt < retryDelays.length; attempt += 1) { + if (retryDelays[attempt] > 0) { + connectionState = 'RECONNECTING'; + connectionNotice = `Retry ${attempt + 1}/${retryDelays.length} in ${retryDelays[attempt] / 1000}s`; + await new Promise((resolve) => window.setTimeout(resolve, retryDelays[attempt])); + } else { + connectionNotice = 'Connecting to server'; + } + try { + const response = await fetch(`${serverAddress}/api/v1/server/info`); + if (!response.ok) throw new Error(`HTTP ${response.status}`); + const info: { server_version: string } = await response.json(); + serverVersion = info.server_version; + connectionState = 'CONNECTED'; + connectionNotice = ''; + return; + } catch { + connectionNotice = 'Server unavailable'; + } } + connectionState = 'SERVER UNAVAILABLE'; + connectionNotice = 'Reconnect attempts exhausted. Test connection to try again.'; } async function login() { @@ -126,7 +141,7 @@ {/each} -