From 179cf493702e5840b225d41aa94217ff7b3fee86 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A2u=20Cao?= Date: Thu, 2 Apr 2026 14:40:20 +0400 Subject: [PATCH] Fix OSM auth not being loaded correctly on launch --- app/services/osm-auth.js | 15 ++++++++++++++- tests/unit/services/osm-auth-test.js | 2 ++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/app/services/osm-auth.js b/app/services/osm-auth.js index 23dddc9..96cb0c2 100644 --- a/app/services/osm-auth.js +++ b/app/services/osm-auth.js @@ -7,7 +7,15 @@ class MarcoOsmAuthStorage { localStorage.setItem('marco:osm_auth_state', serializedState); } loadState() { - return localStorage.getItem('marco:osm_auth_state'); + const state = localStorage.getItem('marco:osm_auth_state'); + if (!state) return false; + try { + JSON.parse(state); + return state; + } catch (e) { + console.warn('Failed to parse OSM auth state', e); + return false; + } } } @@ -45,6 +53,11 @@ export default class OsmAuthService extends Service { } async restoreSession() { + try { + await this.oauthClient.ready; + } catch (e) { + console.warn('oauthClient.ready failed', e); + } const isAuthorized = await this.oauthClient.isAuthorized(); if (isAuthorized) { this.isConnected = true; diff --git a/tests/unit/services/osm-auth-test.js b/tests/unit/services/osm-auth-test.js index b860dcc..6bb51d9 100644 --- a/tests/unit/services/osm-auth-test.js +++ b/tests/unit/services/osm-auth-test.js @@ -52,6 +52,7 @@ module('Unit | Service | osm-auth', function (hooks) { // Because restoreSession runs in the constructor, we might need to overwrite it after, but it's async. // Let's just create it, let the original restoreSession fail or do nothing, and then we stub and re-call it. + service.oauthClient.ready = Promise.resolve(); service.oauthClient.isAuthorized = async () => true; window.localStorage.setItem('marco:osm_user_display_name', 'CachedName'); @@ -68,6 +69,7 @@ module('Unit | Service | osm-auth', function (hooks) { test('it fetches user info when logged in but no cached name', async function (assert) { let service = this.owner.factoryFor('service:osm-auth').create(); + service.oauthClient.ready = Promise.resolve(); service.oauthClient.isAuthorized = async () => true; service.oauthClient.getTokens = async () => ({ accessToken: 'fake-token' }); // Ensure localStorage is empty for this key