Files
scavengerhunt-fe/src/lib/stores/auth.svelte.ts

44 lines
1.5 KiB
TypeScript

import {getRoleFromToken, getSubjectFromToken, type UserRole} from '../utils/jwt'
let _accessToken = $state<string | null>(localStorage.getItem('accessToken'))
let _refreshToken = $state<string | null>(localStorage.getItem('refreshToken'))
let _name = $state<string | null>(localStorage.getItem('hunterName'))
export const auth = {
get accessToken() { return _accessToken },
get refreshToken() { return _refreshToken },
get isLoggedIn() { return _accessToken !== null },
get role(): UserRole | null { return _accessToken ? getRoleFromToken(_accessToken) : null },
get isAdmin() { return auth.role === 'ADMIN' },
get subject() { return _accessToken ? getSubjectFromToken(_accessToken) : null },
get name() { return _name },
}
export function setTokens(accessToken: string, refreshToken: string, name?: string) {
_accessToken = accessToken
_refreshToken = refreshToken
localStorage.setItem('accessToken', accessToken)
localStorage.setItem('refreshToken', refreshToken)
if (name !== undefined) {
_name = name
localStorage.setItem('hunterName', name)
}
}
export function setAccessToken(token: string) {
_accessToken = token
localStorage.setItem('accessToken', token)
}
export function getAccessToken() { return _accessToken }
export function getRefreshToken() { return _refreshToken }
export function clearTokens() {
_accessToken = null
_refreshToken = null
_name = null
localStorage.removeItem('accessToken')
localStorage.removeItem('refreshToken')
localStorage.removeItem('hunterName')
}