File size: 1,535 Bytes
2dddd1f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
import { create } from 'zustand';

interface AuthState {
  token: string | null;
  username: string | null;
  deviceId: string | null;
  isAuthenticated: boolean;
  login: (token: string, username: string, deviceId?: string | null) => void;
  setDeviceId: (deviceId: string | null) => void;
  logout: () => void;
}

export const useAuthStore = create<AuthState>((set) => {
  const storedToken = localStorage.getItem('auth_token');
  const storedUsername = localStorage.getItem('auth_username');
  const storedDeviceId = localStorage.getItem('auth_device_id');

  return {
    token: storedToken,
    username: storedUsername,
    deviceId: storedDeviceId,
    isAuthenticated: !!storedToken,
    login: (token, username, deviceId = null) => {
      localStorage.setItem('auth_token', token);
      localStorage.setItem('auth_username', username);
      if (deviceId) {
        localStorage.setItem('auth_device_id', deviceId);
      }
      set({ token, username, deviceId: deviceId || storedDeviceId, isAuthenticated: true });
    },
    setDeviceId: (deviceId) => {
      if (deviceId) {
        localStorage.setItem('auth_device_id', deviceId);
      } else {
        localStorage.removeItem('auth_device_id');
      }
      set({ deviceId });
    },
    logout: () => {
      localStorage.removeItem('auth_token');
      localStorage.removeItem('auth_username');
      // Note: we don't remove auth_device_id here because it's used for auto-login
      set({ token: null, username: null, isAuthenticated: false });
    },
  };
});