/** * Vitest 组件测用:把 `@/api/admin` 指到假数据(不连真实后端)。 * 生产与 Playwright e2e 走真实 `admin.ts`。 */ import { ApiError } from "./http"; import { mockApi } from "./mock"; import { message } from "@/utils/notify"; import type { EndpointCreateRequest, EndpointListQuery, EndpointPatchRequest, GroupFailed, MeInfo, Overview, RegistrationUpdateRequest, } from "./types"; export { ApiError }; export type * from "./types"; async function run(fn: () => Promise, silent = false): Promise { try { return await fn(); } catch (e) { if (!silent && e instanceof Error && !(e instanceof ApiError)) { message.error(e.message); } throw e; } } export function login(username: string, password: string) { return run(() => mockApi.login(username, password), true); } export function logout() { return run(() => mockApi.logout()); } export function fetchMe(silent = false) { return run(() => mockApi.me(), silent); } export function changePassword(oldPassword: string, newPassword: string) { return run(() => mockApi.changePassword(oldPassword, newPassword)); } export function fetchOverview(): Promise { return run(() => mockApi.overview()); } export function listEndpoints(q?: EndpointListQuery) { return run(() => mockApi.listEndpoints(q)); } export function createEndpoint(body: EndpointCreateRequest) { return run(() => mockApi.createEndpoint(body)); } export function importEndpoints(csvText: string) { return run(() => mockApi.importEndpoints(csvText), true); } export function batchEndpoints(ids: string[], action: "disable" | "enable" | "delete") { return run(() => mockApi.batchEndpoints(ids, action)); } export function getEndpoint(id: string) { return run(() => mockApi.getEndpoint(id)); } export function patchEndpoint(id: string, body: EndpointPatchRequest) { return run(() => mockApi.patchEndpoint(id, body)); } export function deleteEndpoint(id: string) { return run(() => mockApi.deleteEndpoint(id)); } export function kickEndpoint(id: string) { return run(() => mockApi.kickEndpoint(id)); } export function resetLoginPassword(id: string, loginPassword?: string) { return run(() => mockApi.resetLoginPassword(id, loginPassword)); } export function setTalkPassword(id: string, talkPassword: string) { return run(() => mockApi.setTalkPassword(id, talkPassword)); } export function unlockEndpoint(id: string) { return run(() => mockApi.unlockEndpoint(id)); } export function getRegistration() { return run(() => mockApi.getRegistration()); } export function updateRegistration(body: RegistrationUpdateRequest) { return run(() => mockApi.updateRegistration(body)); } export function listTokens() { return run(() => mockApi.listTokens()); } export function createToken(name: string) { return run(() => mockApi.createToken(name)); } export function patchToken(id: string, body: { name?: string; enabled?: boolean }) { return run(() => mockApi.patchToken(id, body)); } export function deleteToken(id: string) { return run(() => mockApi.deleteToken(id)); } export function listGroups(query?: string, cursor?: string, limit?: number) { return run(() => mockApi.listGroups(query, cursor, limit)); } export function createGroup(body: { id?: string; name: string; owner_id: string; member_ids?: string[]; }): Promise<{ id: string; name: string; owner_id: string; failed: GroupFailed[] }> { return run(() => mockApi.createGroup(body)); } export function getGroup(id: string, cursor?: string, limit?: number) { return run(() => mockApi.getGroup(id, cursor, limit)); } export function renameGroup(id: string, name: string) { return run(() => mockApi.renameGroup(id, name)); } export function deleteGroup(id: string) { return run(() => mockApi.deleteGroup(id)); } export function addGroupMembers(id: string, memberIds: string[]) { return run(() => mockApi.addGroupMembers(id, memberIds)); } export function removeGroupMember(id: string, endpointId: string) { return run(() => mockApi.removeGroupMember(id, endpointId)); } export function transferGroup(id: string, endpointId: string) { return run(() => mockApi.transferGroup(id, endpointId)); } export function listMessages(q: { cursor?: string; limit?: number; sender_id?: string; endpoint_id?: string; group_id?: string; state?: string; from_ms?: number; to_ms?: number; }) { return run(() => mockApi.listMessages(q)); } export function getMessage(seq: number, cursor?: string, limit?: number) { return run(() => mockApi.getMessage(seq, cursor, limit)); } export function getSettings() { return run(() => mockApi.getSettings()); } export type { MeInfo };