deckhearth/lib/use-auth.js
varutasu 81bed51369
fix(lint): clear lib/config baseline and make CI lint blocking. (#63)
Lazy-init theme from localStorage, hoist checkAuth with useCallback,
named config exports for PostCSS/Tailwind, and remove the non-blocking
|| true wrapper from ci.yml (requires #61 + #62 merged first).

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-02 01:03:42 -05:00

66 lines
1.3 KiB
JavaScript

import { useState, useEffect, useCallback } from 'react';
async function verifyAuthFromStorage() {
const token = localStorage.getItem('auth_token');
const headers = {
'Content-Type': 'application/json',
};
if (token) {
headers.Authorization = `Bearer ${token}`;
}
try {
const response = await fetch('/api/auth/verify', { headers });
if (response.ok) {
return await response.json();
}
if (token) {
localStorage.removeItem('auth_token');
}
return null;
} catch (error) {
console.error('Auth check failed:', error);
return null;
}
}
export function useAuth() {
const [user, setUser] = useState(null);
const [loading, setLoading] = useState(true);
useEffect(() => {
let active = true;
void (async () => {
const verifiedUser = await verifyAuthFromStorage();
if (!active) return;
setUser(verifiedUser);
setLoading(false);
})();
return () => {
active = false;
};
}, []);
const refreshAuth = useCallback(async () => {
const verifiedUser = await verifyAuthFromStorage();
setUser(verifiedUser);
setLoading(false);
}, []);
const logout = () => {
localStorage.removeItem('auth_token');
setUser(null);
};
return {
user,
loading,
logout,
refreshAuth,
};
}