fix(idaa): add Clear Cache & Reload escape hatch to recovery meetings server error state

"Try Again" resets auto_retry_count but reuses the same localStorage state — if
ae_loc or ae_idaa_loc holds a stale account_id or api_secret_key, every retry
fails identically and the user is stuck in an infinite error loop.

New button clears ae_loc + ae_idaa_loc from localStorage and db_events.event
from IDB, then reloads via the sessionStorage-preserved UUID URL (same logic as
the IDAA layout's Clear Cache & Reload). Forces a fresh FQDN handshake and
re-derives correct auth state. Guidance text shown so users know to try it when
Try Again keeps failing.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Scott Idem
2026-05-21 12:30:53 -04:00
parent cfc5d237c7
commit e6db2b4d6a

View File

@@ -484,16 +484,41 @@ if (browser) {
Unable to load meetings — server error. Please try again.
{/if}
</p>
<button
type="button"
class="btn btn-sm preset-tonal-primary m-auto"
onclick={() => {
auto_retry_count = 0;
$idaa_sess.recovery_meetings.search_version++;
}}>
<span class="fas fa-redo m-1"></span>
Try Again
</button>
<p class="text-xs opacity-60">
If "Try Again" keeps failing, use "Clear Cache &amp; Reload" to reset your local data.
</p>
<div class="flex flex-row flex-wrap items-center justify-center gap-2">
<button
type="button"
class="btn btn-sm preset-tonal-primary"
onclick={() => {
auto_retry_count = 0;
$idaa_sess.recovery_meetings.search_version++;
}}>
<span class="fas fa-redo m-1"></span>
Try Again
</button>
<!-- Escape hatch for persistent server errors caused by stale auth state in
localStorage (stale account_id, api_secret_key, or site config). "Try Again"
reuses the same bad state and loops indefinitely — this clears it.
Mirrors the "Clear Cache & Reload" button in the IDAA layout auth error state. -->
<button
type="button"
class="btn btn-sm preset-tonal-surface preset-outlined-warning-100-900 hover:preset-filled-warning-200-800 transition-all"
onclick={async () => {
localStorage.removeItem('ae_loc');
localStorage.removeItem('ae_idaa_loc');
try { await db_events.event.clear(); } catch { /* ignore */ }
try {
const saved_url = sessionStorage.getItem('idaa_iframe_reload_url');
if (saved_url) { location.href = saved_url; return; }
} catch { /* ignore */ }
location.reload();
}}>
<span class="fas fa-sync-alt m-1"></span>
Clear Cache &amp; Reload
</button>
</div>
</div>
{:else}
{#if has_active_filters}