| import { writable, derived } from 'svelte/store'; |
| import { auth as authApi } from '$api/client.js'; |
|
|
| function createAuthStore() { |
| const storedUser = typeof localStorage !== 'undefined' ? localStorage.getItem('pos_user') : null; |
| const storedToken = typeof localStorage !== 'undefined' ? localStorage.getItem('pos_token') : null; |
|
|
| const { subscribe, set, update } = writable({ |
| user: storedUser ? JSON.parse(storedUser) : null, |
| token: storedToken || null, |
| loading: false, |
| error: null |
| }); |
|
|
| return { |
| subscribe, |
|
|
| async login(username, password) { |
| update((s) => ({ ...s, loading: true, error: null })); |
| try { |
| const res = await authApi.login(username, password); |
| const { token, user } = res.data; |
| localStorage.setItem('pos_token', token); |
| localStorage.setItem('pos_user', JSON.stringify(user)); |
| set({ user, token, loading: false, error: null }); |
| return true; |
| } catch (err) { |
| update((s) => ({ ...s, loading: false, error: err.message })); |
| return false; |
| } |
| }, |
|
|
| async pinLogin(pin) { |
| update((s) => ({ ...s, loading: true, error: null })); |
| try { |
| const res = await authApi.pinLogin(pin); |
| const { token, user } = res.data; |
| localStorage.setItem('pos_token', token); |
| localStorage.setItem('pos_user', JSON.stringify(user)); |
| set({ user, token, loading: false, error: null }); |
| return true; |
| } catch (err) { |
| update((s) => ({ ...s, loading: false, error: err.message })); |
| return false; |
| } |
| }, |
|
|
| logout() { |
| localStorage.removeItem('pos_token'); |
| localStorage.removeItem('pos_user'); |
| set({ user: null, token: null, loading: false, error: null }); |
| }, |
|
|
| clearError() { |
| update((s) => ({ ...s, error: null })); |
| } |
| }; |
| } |
|
|
| export const authStore = createAuthStore(); |
|
|
| export const currentUser = derived(authStore, ($auth) => $auth.user); |
| export const isAuthenticated = derived(authStore, ($auth) => !!$auth.token); |
| export const userRole = derived(authStore, ($auth) => $auth.user?.role?.name?.toLowerCase() || ''); |
|
|