Files
NixMsg/web/src/api/admin-mock.ts
T

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 };