/** * Authentication API */ import apiClient from './client'; export interface LoginCredentials { username: string; password: string; } import { UserRole } from '../types'; export interface MasqueradeStackEntry { user_id: number; username: string; role: UserRole; business_id?: number; business_subdomain?: string; } export interface LoginResponse { access: string; refresh: string; user: { id: number; username: string; email: string; name: string; role: UserRole; avatar_url?: string; email_verified?: boolean; is_staff: boolean; is_superuser: boolean; business?: number; business_name?: string; business_subdomain?: string; }; masquerade_stack?: MasqueradeStackEntry[]; } export interface User { id: number; username: string; email: string; name: string; role: UserRole; avatar_url?: string; email_verified?: boolean; is_staff: boolean; is_superuser: boolean; business?: number; business_name?: string; business_subdomain?: string; } /** * Login user */ export const login = async (credentials: LoginCredentials): Promise => { const response = await apiClient.post('/api/auth/login/', credentials); return response.data; }; /** * Logout user */ export const logout = async (): Promise => { await apiClient.post('/api/auth/logout/'); }; /** * Get current user */ export const getCurrentUser = async (): Promise => { const response = await apiClient.get('/api/auth/me/'); return response.data; }; /** * Refresh access token */ export const refreshToken = async (refresh: string): Promise<{ access: string }> => { const response = await apiClient.post('/api/auth/refresh/', { refresh }); return response.data; }; /** * Masquerade as another user (hijack) */ export const masquerade = async ( user_pk: number, hijack_history?: MasqueradeStackEntry[] ): Promise => { const response = await apiClient.post( '/api/auth/hijack/acquire/', { user_pk, hijack_history } ); return response.data; }; /** * Stop masquerading and return to previous user */ export const stopMasquerade = async ( masquerade_stack: MasqueradeStackEntry[] ): Promise => { const response = await apiClient.post( '/api/auth/hijack/release/', { masquerade_stack } ); return response.data; };