https://dev.kronoz.win/r/marzneshin.git
1import { fetch } from '@marzneshin/common/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)