The app logged itself out in the middle of the OAuth code exchange, tearing down the page before the callback request could finish. On resume, the deep-link handler and the sync-on-resume listener fire in the same tick. Sync ran first, hit a 401 (no session exists yet), and ApiClient treated that as an expired session: it cleared tokens, wiped the offline DB, and hard-navigated to /login via window.location.href. That reload aborted the in-flight POST /auth/oauth2/callback, surfacing as "Authentication request failed TypeError: Failed to fetch".
414 KiB
414 KiB