* @param {boolean} forceFetch * @returns {Promise }
(forceFetch = false)
| 127 | * @returns {Promise<User>} |
| 128 | */ |
| 129 | async getLoggedInUser(forceFetch = false) { |
| 130 | if (loggedInUser && !forceFetch) return loggedInUser; |
| 131 | |
| 132 | try { |
| 133 | const res = await fetch(`${config.API_BASE}/login`); |
| 134 | |
| 135 | if (res.ok) { |
| 136 | loggedInUser = await res.json(); |
| 137 | localStorage.setItem(CACHE_USER_KEY, JSON.stringify(loggedInUser)); |
| 138 | clearTimeout(cacheTimeout); |
| 139 | cacheTimeout = setTimeout(() => (loggedInUser = null), 600_000); |
| 140 | return loggedInUser; |
| 141 | } |
| 142 | |
| 143 | if (res.status === 401) { |
| 144 | localStorage.removeItem(CACHE_USER_KEY); |
| 145 | return null; |
| 146 | } |
| 147 | |
| 148 | throw new Error("Unable to fetch user Info"); |
| 149 | } catch (error) { |
| 150 | if (CACHE_USER_KEY in localStorage) { |
| 151 | try { |
| 152 | return JSON.parse(localStorage.getItem(CACHE_USER_KEY)); |
| 153 | } catch {} |
| 154 | } |
| 155 | console.error("Unable to fetch user info:", error); |
| 156 | throw error; |
| 157 | } |
| 158 | } |
| 159 | |
| 160 | async login() { |
| 161 | return new Promise((resolve, reject) => { |
no test coverage detected