/** * 05-Token 管理 API(9 端点) * 路径前缀:/tokens * * 对齐后端 Router:backend/server/routers/external_systems/token_router.py * 关键对齐点: * - GET 端点(list/detail/stats/history/expiring/usage/rotation-preview)后端用 get_required_user,前端用 apiGet * - 写操作(invalidate-token/invalidate-environment)后端用 get_admin_user,前端用 apiAdminPost * - 静态路径(/stats、/history、/invalidate-environment、/expiring)必须在动态路径 /{token_id} 之前声明 * - access_token / refresh_token 后端默认脱敏为 "***",前端无需额外处理 * - history 端点按 system_id 查询审计日志,返回 list[TokenHistoryItem](Token 字段 + 审计元数据,非审计日志原始对象) * - usage 端点当前返回空列表占位(list[dict],未实现使用记录采集) */ import { apiGet, apiAdminPost } from '../base' import { buildUrl, buildQueryString, MODULE_PATHS } from './base' const URL = buildUrl(MODULE_PATHS.TOKEN) // ===== 列表与详情 ===== /** 分页列出 Token(支持 system_id/env_key/token_type/is_invalidated 过滤) */ export const getTokenListApi = (params = {}) => apiGet(`${URL}${buildQueryString(params)}`) /** 获取 Token 详情(access_token/refresh_token 脱敏) */ export const getTokenDetailApi = (id) => apiGet(`${URL}/${id}`) // ===== 失效管理 ===== /** 失效单条 Token(admin 权限,无 Body) */ export const invalidateTokenApi = (id) => apiAdminPost(`${URL}/${id}/invalidate`) /** 按环境失效 Token(admin 权限,Body: {system_id, env_key}) */ export const invalidateEnvironmentTokensApi = (data) => apiAdminPost(`${URL}/invalidate-environment`, data) // ===== 使用与轮换预览 ===== /** 查询 Token 使用记录(当前返回空列表占位) */ export const getTokenUsageApi = (id, params = {}) => apiGet(`${URL}/${id}/usage${buildQueryString(params)}`) /** 轮换影响范围预览(只读,返回受影响的系统/环境/工具) */ export const getTokenRotationPreviewApi = (id) => apiGet(`${URL}/${id}/rotation-preview`) // ===== 统计与历史 ===== /** 查询 Token 统计(4 状态分组计数:active/expiring_soon/invalidated/total) */ export const getTokenStatsApi = (params = {}) => apiGet(`${URL}/stats${buildQueryString(params)}`) /** 查询 Token 变更历史(system_id 必填,基于审计日志) */ export const getTokenHistoryApi = (params = {}) => apiGet(`${URL}/history${buildQueryString(params)}`) // ===== 过期预警 ===== /** 查询即将过期的 Token(days 默认 7,范围 1-90) */ export const getExpiringTokensApi = (params = {}) => apiGet(`${URL}/expiring${buildQueryString(params)}`)