Files
ctms/frontend/src/api/auth.ts
T
2026-06-30 09:44:24 +08:00

72 lines
2.9 KiB
TypeScript

import type { AxiosResponse } from "axios";
import api, { apiGet, apiPatch, apiPost } from "./axios";
import type {
UserMeResponse,
LoginRequest,
DevLoginRequest,
LoginResponse,
LoginKeyResponse,
RegisterRequest,
EmailAvailabilityResponse,
EmailDomainsResponse,
EmailCodeVerifyResponse,
PasswordResetCodeVerifyResponse,
PasswordResetRequest,
PasswordResetTokenRequest,
} from "../types/api";
export const login = (payload: LoginRequest): Promise<AxiosResponse<LoginResponse>> =>
apiPost<LoginResponse>("/api/v1/auth/login", payload);
export const devLogin = (payload: DevLoginRequest): Promise<AxiosResponse<LoginResponse>> =>
apiPost<LoginResponse>("/api/v1/auth/dev-login", payload);
export const getLoginKey = (): Promise<AxiosResponse<LoginKeyResponse>> =>
apiGet<LoginKeyResponse>("/api/v1/auth/login-key");
export const fetchMe = (): Promise<AxiosResponse<UserMeResponse>> => apiGet<UserMeResponse>("/api/v1/auth/me");
export const fetchEmailDomains = (): Promise<AxiosResponse<EmailDomainsResponse>> =>
apiGet<EmailDomainsResponse>("/api/v1/auth/email-domains");
export const register = (payload: RegisterRequest): Promise<AxiosResponse<{ message: string }>> =>
apiPost("/api/v1/auth/register", payload);
export const checkEmailAvailability = (email: string): Promise<AxiosResponse<EmailAvailabilityResponse>> =>
apiGet<EmailAvailabilityResponse>("/api/v1/auth/register/email-availability", { params: { email } });
export const sendRegisterEmailCode = (email: string): Promise<AxiosResponse<{ message: string }>> =>
apiPost("/api/v1/auth/register/email-code/send", { email });
export const verifyRegisterEmailCode = (email: string, code: string): Promise<AxiosResponse<EmailCodeVerifyResponse>> =>
apiPost<EmailCodeVerifyResponse>("/api/v1/auth/register/email-code/verify", { email, code });
export const sendPasswordResetEmailCode = (email: string): Promise<AxiosResponse<{ message: string }>> =>
apiPost("/api/v1/auth/password-reset/email-code/send", { email });
export const verifyPasswordResetEmailCode = (
email: string,
code: string
): Promise<AxiosResponse<PasswordResetCodeVerifyResponse>> =>
apiPost<PasswordResetCodeVerifyResponse>("/api/v1/auth/password-reset/email-code/verify", { email, code });
export const sendPasswordResetLink = (email: string): Promise<AxiosResponse<{ message: string }>> =>
apiPost("/api/v1/auth/password-reset-link/send", { email });
export const resetPassword = (payload: PasswordResetRequest): Promise<AxiosResponse<{ message: string }>> =>
apiPost("/api/v1/auth/password-reset", payload);
export const resetPasswordWithToken = (
payload: PasswordResetTokenRequest
): Promise<AxiosResponse<{ message: string }>> =>
apiPost("/api/v1/auth/password-reset-link", payload);
export const updateProfile = (payload: {
full_name?: string;
clinical_department?: string;
current_password?: string;
password?: string;
}) => apiPatch<UserMeResponse>("/api/v1/auth/me", payload);
export default api;