159 lines
3.8 KiB
TypeScript
159 lines
3.8 KiB
TypeScript
import api from './client';
|
|
|
|
export interface TokenRow {
|
|
token_id: number;
|
|
token_prefix: string;
|
|
token_plain: string | null;
|
|
client_id: string;
|
|
service_scope: string;
|
|
service_url: string | null;
|
|
status: string;
|
|
expires_at: string | null;
|
|
description: string | null;
|
|
created_at: string | null;
|
|
created_by: string;
|
|
revoked_at: string | null;
|
|
revoke_reason: string | null;
|
|
last_used_at: string | null;
|
|
last_used_svc: string | null;
|
|
}
|
|
|
|
export interface TokenCreate {
|
|
client_id: string;
|
|
service_scope: string;
|
|
description?: string;
|
|
expires_at?: string | null;
|
|
}
|
|
|
|
export interface CreateResult {
|
|
token: string;
|
|
token_id: number;
|
|
token_prefix: string;
|
|
client_id: string;
|
|
service_scope: string;
|
|
message: string;
|
|
}
|
|
|
|
export async function listTokens(params?: {
|
|
client_id?: string;
|
|
status?: string;
|
|
service_scope?: string;
|
|
}) {
|
|
const { data } = await api.get('/tokens', { params });
|
|
return data as { total: number; tokens: TokenRow[] };
|
|
}
|
|
|
|
export async function createToken(payload: TokenCreate) {
|
|
const { data } = await api.post('/tokens', payload);
|
|
return data as CreateResult;
|
|
}
|
|
|
|
export async function revokeToken(token_id: number, reason?: string) {
|
|
const { data } = await api.put(`/tokens/${token_id}/revoke`, { reason });
|
|
return data;
|
|
}
|
|
|
|
export async function enableToken(token_id: number) {
|
|
const { data } = await api.put(`/tokens/${token_id}/enable`);
|
|
return data;
|
|
}
|
|
|
|
export async function deleteToken(token_id: number) {
|
|
const { data } = await api.delete(`/tokens/${token_id}`);
|
|
return data;
|
|
}
|
|
|
|
export async function updateToken(
|
|
token_id: number,
|
|
payload: { description?: string; expires_at?: string | null },
|
|
) {
|
|
const { data } = await api.patch(`/tokens/${token_id}`, payload);
|
|
return data;
|
|
}
|
|
|
|
export async function tokenLogs(token_id: number) {
|
|
const { data } = await api.get(`/tokens/${token_id}/logs`);
|
|
return data as {
|
|
total: number;
|
|
logs: Array<{
|
|
log_id: number;
|
|
event: string;
|
|
service: string | null;
|
|
client_ip: string | null;
|
|
occurred_at: string | null;
|
|
detail: unknown;
|
|
}>;
|
|
};
|
|
}
|
|
|
|
export async function getStats() {
|
|
const { data } = await api.get('/stats');
|
|
return data as {
|
|
total: number;
|
|
active: number;
|
|
revoked: number;
|
|
by_scope: Record<string, number>;
|
|
calls_24h: number;
|
|
clients_24h: number;
|
|
recent: Array<{
|
|
token_prefix: string;
|
|
client_id: string;
|
|
service: string | null;
|
|
last_used_at: string | null;
|
|
}>;
|
|
};
|
|
}
|
|
|
|
// ==================== MCP 服务管理 ====================
|
|
|
|
export interface ServiceRow {
|
|
service_id: number;
|
|
service_name: string;
|
|
service_url: string;
|
|
api_key: string;
|
|
description: string | null;
|
|
status: string;
|
|
created_at: string | null;
|
|
created_by: string;
|
|
revoked_at: string | null;
|
|
last_used_at: string | null;
|
|
}
|
|
|
|
export interface ServiceCreate {
|
|
service_name: string;
|
|
service_url: string;
|
|
description?: string;
|
|
}
|
|
|
|
export interface ServiceCreateResult {
|
|
api_key: string;
|
|
service_id: number;
|
|
service_name: string;
|
|
message: string;
|
|
}
|
|
|
|
export async function listServices(params?: { status?: string }) {
|
|
const { data } = await api.get('/services', { params });
|
|
return data as { total: number; services: ServiceRow[] };
|
|
}
|
|
|
|
export async function registerService(payload: ServiceCreate) {
|
|
const { data } = await api.post('/services', payload);
|
|
return data as ServiceCreateResult;
|
|
}
|
|
|
|
export async function revokeService(service_id: number) {
|
|
const { data } = await api.patch(`/services/${service_id}/revoke`);
|
|
return data;
|
|
}
|
|
|
|
export async function enableService(service_id: number) {
|
|
const { data } = await api.patch(`/services/${service_id}/enable`);
|
|
return data;
|
|
}
|
|
|
|
export async function deleteService(service_id: number) {
|
|
const { data } = await api.delete(`/services/${service_id}`);
|
|
return data;
|
|
}
|