mirror of
https://git.meshkee.com/BaloutPastry/dashboards.git
synced 2026-08-11 22:30:59 +04:30
68 lines
1.5 KiB
TypeScript
68 lines
1.5 KiB
TypeScript
import type { UserRole } from '../data/users'
|
|
|
|
const AUTH_KEY = 'balout.admin.auth'
|
|
|
|
export type AuthUser = {
|
|
id: string
|
|
title: string
|
|
firstName: string
|
|
lastName: string
|
|
cellNumber: string
|
|
role: UserRole
|
|
name: string
|
|
}
|
|
|
|
export type AuthSession = {
|
|
accessToken: string
|
|
refreshToken: string
|
|
user: AuthUser
|
|
}
|
|
|
|
function isSession(value: unknown): value is AuthSession {
|
|
if (!value || typeof value !== 'object') return false
|
|
const session = value as Partial<AuthSession>
|
|
return (
|
|
typeof session.accessToken === 'string' &&
|
|
typeof session.refreshToken === 'string' &&
|
|
!!session.user &&
|
|
typeof session.user === 'object' &&
|
|
typeof session.user.name === 'string' &&
|
|
typeof session.user.id === 'string'
|
|
)
|
|
}
|
|
|
|
export function getSession(): AuthSession | null {
|
|
try {
|
|
const raw = localStorage.getItem(AUTH_KEY)
|
|
if (!raw) return null
|
|
const parsed = JSON.parse(raw) as unknown
|
|
return isSession(parsed) ? parsed : null
|
|
} catch {
|
|
return null
|
|
}
|
|
}
|
|
|
|
export function setSession(session: AuthSession) {
|
|
localStorage.setItem(AUTH_KEY, JSON.stringify(session))
|
|
}
|
|
|
|
export function clearSession() {
|
|
localStorage.removeItem(AUTH_KEY)
|
|
}
|
|
|
|
export function isAuthenticated(): boolean {
|
|
return getSession() !== null
|
|
}
|
|
|
|
export function getAccessToken(): string | null {
|
|
return getSession()?.accessToken ?? null
|
|
}
|
|
|
|
export function getRefreshToken(): string | null {
|
|
return getSession()?.refreshToken ?? null
|
|
}
|
|
|
|
export function getAuthUser(): AuthUser | null {
|
|
return getSession()?.user ?? null
|
|
}
|