Corp/frontend/src/lib/api/auth.ts

65 lines
2.4 KiB
TypeScript

import type {
AuthSession,
ChangePasswordPayload,
ChangePasswordResult,
PasswordResetConfirmPayload,
PasswordResetConfirmResult,
PasswordResetRequestPayload,
PasswordResetRequestResult,
QrLoginCreateResult,
QrLoginRequestActionResult,
QrLoginRequestDetailResult,
SessionBulkActionResult,
} from "@/types/api";
import type { RequestFn } from "./utils";
export function createAuthApi(request: RequestFn) {
return {
getAuthSessions: (): Promise<AuthSession[]> => request("/api/auth/sessions/"),
deleteAuthSession: (sessionId: string): Promise<void> =>
request(`/api/auth/sessions/${sessionId}/`, { method: "DELETE" }),
logoutOtherSessions: (): Promise<SessionBulkActionResult> =>
request("/api/auth/sessions/logout-others/", { method: "POST" }),
createQrLogin: (): Promise<QrLoginCreateResult> =>
request("/api/auth/qr-login/", { method: "POST" }),
getQrLoginRequest: (
scanToken: string,
): Promise<QrLoginRequestDetailResult> =>
request(`/api/auth/qr-login/requests/${encodeURIComponent(scanToken)}/`),
approveQrLoginRequest: (
scanToken: string,
): Promise<QrLoginRequestActionResult> =>
request(`/api/auth/qr-login/requests/${encodeURIComponent(scanToken)}/approve/`, {
method: "POST",
}),
denyQrLoginRequest: (
scanToken: string,
): Promise<QrLoginRequestActionResult> =>
request(`/api/auth/qr-login/requests/${encodeURIComponent(scanToken)}/deny/`, {
method: "POST",
}),
changePassword: (
payload: ChangePasswordPayload,
): Promise<ChangePasswordResult> =>
request("/api/auth/change-password/", {
method: "POST",
body: JSON.stringify(payload),
}),
requestPasswordReset: (
payload: PasswordResetRequestPayload,
): Promise<PasswordResetRequestResult> =>
request("/api/auth/password-reset/", {
method: "POST",
body: JSON.stringify(payload),
}),
confirmPasswordReset: (
payload: PasswordResetConfirmPayload,
): Promise<PasswordResetConfirmResult> =>
request("/api/auth/password-reset/confirm/", {
method: "POST",
body: JSON.stringify(payload),
}),
};
}