gitscope
← marzneshin / v0.6.1 / dashboard/src/features/auth/auth.store.ts
https://dev.kronoz.win/r/marzneshin.git
dashboard/src/features/auth/auth.store.ts · TypeScript
Blame Raw
 1import { fetch } from '@marzneshin/utils';
 2import { create } from 'zustand';
 3import { subscribeWithSelector } from 'zustand/middleware';
 4
 5type AdminStateType = {
 6    isLoggedIn: () => Promise<boolean>,
 7    getAuthToken: () => string | null;
 8    isSudo: () => boolean;
 9    setAuthToken: (token: string) => void;
10    removeAuthToken: () => void;
11    setSudo: (isSudo: boolean) => void;
12}
13
14export const useAuth = create(
15    subscribeWithSelector<AdminStateType>(() => ({
16        isLoggedIn: async () => {
17            try {
18                await fetch('/admins/current');
19                return true;
20            } catch (error) {
21                return false;
22            }
23        },
24        getAuthToken: () => {
25            return localStorage.getItem('token');
26        },
27        isSudo: () => {
28            const isSudo = localStorage.getItem('is-sudo')
29            return isSudo === "true";
30        },
31        setSudo: (isSudo) => {
32            localStorage.setItem('is-sudo', String(isSudo));
33        },
34        setAuthToken: (token: string) => {
35            localStorage.setItem('token', token);
36        },
37        removeAuthToken: () => {
38            localStorage.removeItem('token');
39        },
40    }))
41)