imeeting/frontend/src/api/auth.ts

66 lines
1.6 KiB
TypeScript

import http from "./http";
export interface CaptchaResponse {
captchaId: string;
imageBase64: string;
}
export interface TenantInfo {
tenantId: number;
tenantCode: string;
tenantName: string;
}
export interface TokenResponse {
accessToken: string;
refreshToken: string;
accessExpiresInMinutes: number;
refreshExpiresInDays: number;
availableTenants?: TenantInfo[];
tenantMode?: "single" | "multi";
multiTenantEnabled?: boolean;
currentTenantId?: number;
}
export interface LoginPayload {
username: string;
password: string;
tenantCode?: string;
captchaId?: string;
captchaCode?: string;
deviceCode?: string;
}
export interface DeviceCodePayload {
username: string;
password: string;
captchaId?: string;
captchaCode?: string;
deviceName?: string;
}
export async function fetchCaptcha() {
const resp = await http.get("/sys/auth/captcha");
return resp.data.data as CaptchaResponse;
}
export async function login(payload: LoginPayload) {
const resp = await http.post("/sys/auth/login", payload);
return resp.data.data as TokenResponse;
}
export async function createDeviceCode(payload: DeviceCodePayload) {
const resp = await http.post("/sys/auth/device-code", payload);
return resp.data.data as string;
}
export async function refreshToken(refreshToken: string) {
const resp = await http.post("/sys/auth/refresh", { refreshToken });
return resp.data.data as TokenResponse;
}
export async function switchTenant(tenantId: number) {
const resp = await http.post(`/sys/auth/switch-tenant?tenantId=${tenantId}`);
return resp.data.data as TokenResponse;
}