179 lines
4.6 KiB
TypeScript
179 lines
4.6 KiB
TypeScript
/**
|
|
* 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<T>(fn: () => Promise<T>, silent = false): Promise<T> {
|
|
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<Overview> {
|
|
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 };
|