()
| 213 | * This function has no side-effects; callers are responsible for acting on the result. |
| 214 | */ |
| 215 | export async function verifyZooCodeToken(): Promise<"valid" | "invalid" | "unreachable"> { |
| 216 | const token = await getZooCodeToken() |
| 217 | if (!token) return "invalid" |
| 218 | |
| 219 | const baseUrl = getZooCodeBaseUrl() |
| 220 | |
| 221 | try { |
| 222 | const response = await fetch(`${baseUrl}/api/extension/auth/verify`, { |
| 223 | headers: { Authorization: `Bearer ${token}` }, |
| 224 | signal: AbortSignal.timeout(10_000), |
| 225 | }) |
| 226 | |
| 227 | if (!response.ok) { |
| 228 | if (response.status >= 500) { |
| 229 | return "unreachable" |
| 230 | } |
| 231 | return "invalid" |
| 232 | } |
| 233 | |
| 234 | const data = (await response.json()) as { valid?: boolean } |
| 235 | return data.valid === true ? "valid" : "invalid" |
| 236 | } catch { |
| 237 | return "unreachable" |
| 238 | } |
| 239 | } |
| 240 | |
| 241 | export async function isZooCodeAuthenticated(): Promise<boolean> { |
| 242 | const token = await getZooCodeToken() |
no test coverage detected