80 lines
1.7 KiB
TypeScript
80 lines
1.7 KiB
TypeScript
/**
|
|
* Auth utilities - Gerenciamento de autenticação no cliente
|
|
*/
|
|
|
|
export interface User {
|
|
id: string;
|
|
email: string;
|
|
name: string;
|
|
role: string;
|
|
tenantId?: string;
|
|
company?: string;
|
|
subdomain?: string;
|
|
}
|
|
|
|
const TOKEN_KEY = 'token';
|
|
const USER_KEY = 'user';
|
|
|
|
/**
|
|
* Salva token e dados do usuário no localStorage
|
|
*/
|
|
export function saveAuth(token: string, user: User): void {
|
|
if (typeof window === 'undefined') return;
|
|
|
|
localStorage.setItem(TOKEN_KEY, token);
|
|
localStorage.setItem(USER_KEY, JSON.stringify(user));
|
|
}
|
|
|
|
/**
|
|
* Retorna o token JWT armazenado
|
|
*/
|
|
export function getToken(): string | null {
|
|
if (typeof window === 'undefined') return null;
|
|
return localStorage.getItem(TOKEN_KEY);
|
|
}
|
|
|
|
/**
|
|
* Retorna os dados do usuário armazenados
|
|
*/
|
|
export function getUser(): User | null {
|
|
if (typeof window === 'undefined') return null;
|
|
|
|
const userStr = localStorage.getItem(USER_KEY);
|
|
if (!userStr) return null;
|
|
|
|
try {
|
|
return JSON.parse(userStr);
|
|
} catch {
|
|
return null;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Verifica se o usuário está autenticado
|
|
*/
|
|
export function isAuthenticated(): boolean {
|
|
return !!getToken() && !!getUser();
|
|
}
|
|
|
|
/**
|
|
* Remove token e dados do usuário (logout)
|
|
*/
|
|
export function clearAuth(): void {
|
|
if (typeof window === 'undefined') return;
|
|
|
|
localStorage.removeItem(TOKEN_KEY);
|
|
localStorage.removeItem(USER_KEY);
|
|
}
|
|
|
|
/**
|
|
* Retorna headers com Authorization para requisições autenticadas
|
|
*/
|
|
export function getAuthHeaders(): HeadersInit {
|
|
const token = getToken();
|
|
|
|
return {
|
|
'Content-Type': 'application/json',
|
|
...(token ? { 'Authorization': `Bearer ${token}` } : {}),
|
|
};
|
|
}
|