import { post } from './apiClient'; import type { LoginRequest, LoginResponse, User } from '../types/auth'; const TOKEN_KEY = 'snp_access_token'; const REFRESH_TOKEN_KEY = 'snp_refresh_token'; const USER_KEY = 'snp_user'; export const login = async (req: LoginRequest): Promise => { const response = await post('/auth/login', req); if (!response.success || !response.data) { throw new Error(response.message || '로그인에 실패했습니다.'); } const data = response.data; localStorage.setItem(TOKEN_KEY, data.accessToken); localStorage.setItem(REFRESH_TOKEN_KEY, data.refreshToken); localStorage.setItem(USER_KEY, JSON.stringify({ loginId: data.loginId, userName: data.userName, role: data.role, })); return data; }; export const logout = async (): Promise => { try { await post('/auth/logout'); } finally { localStorage.removeItem(TOKEN_KEY); localStorage.removeItem(REFRESH_TOKEN_KEY); localStorage.removeItem(USER_KEY); } }; export const refreshToken = async (): Promise => { const storedRefreshToken = localStorage.getItem(REFRESH_TOKEN_KEY); if (!storedRefreshToken) { throw new Error('No refresh token available'); } const response = await post<{ accessToken: string }>('/auth/refresh', { refreshToken: storedRefreshToken, }); if (!response.success || !response.data) { throw new Error('Token refresh failed'); } localStorage.setItem(TOKEN_KEY, response.data.accessToken); }; export const getStoredUser = (): User | null => { const userStr = localStorage.getItem(USER_KEY); if (!userStr) return null; try { return JSON.parse(userStr) as User; } catch { return null; } }; export const getAccessToken = (): string | null => { return localStorage.getItem(TOKEN_KEY); };