diff --git a/src/routes/idaa/(idaa)/+layout.svelte b/src/routes/idaa/(idaa)/+layout.svelte index f3b56b88..c89cbd93 100644 --- a/src/routes/idaa/(idaa)/+layout.svelte +++ b/src/routes/idaa/(idaa)/+layout.svelte @@ -358,9 +358,21 @@ async function verify_novi_uuid(uuid: string, is_retry: boolean = false) { return; } + if (response.status === 503) { + // Novi unreachable or Novi 5xx — Aether backend returns 503. + // Mirror the network-error retry path: one automatic 3s wait before giving up. + if (is_retry) { + throw new Error(`Novi verification: Novi unreachable (503) — retry also failed`); + } + console.warn(`IDAA Layout: Novi unreachable (503) for ${uuid}. Retrying in 3s...`); + verifying_status_msg = 'Connection issue — retrying...'; + await new Promise((resolve) => setTimeout(resolve, 3_000)); + await verify_novi_uuid(uuid, true); + return; + } + if (!response.ok) { // 404 = not a member (Novi 404, or Novi empty-200 anti-pattern handled server-side). - // 503 = Novi unreachable / Novi 5xx — show api_error UI so user can retry. throw new Error(`Novi verification returned ${response.status} for UUID ${uuid}`); }