summaryrefslogtreecommitdiff
path: root/ui/lib/session.svelte.js
diff options
context:
space:
mode:
authorOwen Jacobson <owen@grimoire.ca>2025-04-09 01:10:28 -0400
committerOwen Jacobson <owen@grimoire.ca>2025-04-22 00:52:22 -0400
commit40b91af8007dd0a5d180eba37a8168ca12e013e2 (patch)
tree6c3c681cd5dc722b707b50b09fb46a2ec1e3bfaf /ui/lib/session.svelte.js
parent1ef57107b1c355ef896327f0714344277df7ae18 (diff)
When booting a session, retry every five seconds if unable to send the request.
This is intended to transparently resume the session (using `boot` to start over) after more serious connection interruptions. It interacts with the heartbeat timeout: we let the browser try to reconnect through `EventSource` on its own for up to 30 seconds, before intervening, closing the event source, and starting attempts to call `boot`. This covers both initial boot, which will now hang if the server is unavailable (sorry), and reconnection after an event timeout. No other operations are retried (particularly, sending a message is _not_ retried).
Diffstat (limited to 'ui/lib/session.svelte.js')
-rw-r--r--ui/lib/session.svelte.js24
1 files changed, 14 insertions, 10 deletions
diff --git a/ui/lib/session.svelte.js b/ui/lib/session.svelte.js
index b953d9c..21a391d 100644
--- a/ui/lib/session.svelte.js
+++ b/ui/lib/session.svelte.js
@@ -94,16 +94,20 @@ class Session {
}
async function bootOrNavigate(navigateTo) {
- const response = await api.boot();
- switch (response.status) {
- case 401:
- await navigateTo('/login');
- break;
- case 503:
- await navigateTo('/setup');
- break;
- case 200:
- return response.data;
+ try {
+ const response = await api.retry(async () => await api.boot());
+ return response.data;
+ } catch (err) {
+ switch (true) {
+ case err instanceof api.LoggedOut:
+ await navigateTo('/login');
+ break;
+ case err instanceof api.SetupRequired:
+ await navigateTo('/setup');
+ break;
+ default:
+ throw err;
+ }
}
}