2026-06-20 22:21:34 +08:00
|
|
|
|
/**
|
|
|
|
|
|
* 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 字段 + 审计元数据,非审计日志原始对象)
|
2026-07-11 07:37:53 +08:00
|
|
|
|
* - usage 端点基于 ExternalToolExecution 表按 (system_id, env_key) 关联查询,返回工具执行记录摘要
|
|
|
|
|
|
* - stats 端点支持 expiring_days 参数控制 expiring_soon 阈值;返回字段含 expired(已过期未失效)
|
|
|
|
|
|
* - detail 端点返回 system_name/system_slug 关联系统上下文
|
|
|
|
|
|
* - rotation-preview 端点返回 token_status + affected_policies(密钥轮换策略)
|
|
|
|
|
|
* - invalidate 端点幂等:已失效的 Token 返回 409 ConflictError
|
2026-06-20 22:21:34 +08:00
|
|
|
|
*/
|
|
|
|
|
|
import { apiGet, apiAdminPost } from '../base'
|
|
|
|
|
|
import { buildUrl, buildQueryString, MODULE_PATHS } from './base'
|
|
|
|
|
|
|
|
|
|
|
|
const URL = buildUrl(MODULE_PATHS.TOKEN)
|
|
|
|
|
|
|
|
|
|
|
|
// ===== 列表与详情 =====
|
2026-07-11 07:37:53 +08:00
|
|
|
|
/** 分页列出 Token(支持 system_id/env_key/token_type/is_invalidated 过滤,DB 层下推) */
|
2026-06-20 22:21:34 +08:00
|
|
|
|
export const getTokenListApi = (params = {}) => apiGet(`${URL}${buildQueryString(params)}`)
|
2026-07-11 07:37:53 +08:00
|
|
|
|
/** 获取 Token 详情(access_token/refresh_token 脱敏,含 system_name/system_slug 上下文) */
|
2026-06-20 22:21:34 +08:00
|
|
|
|
export const getTokenDetailApi = (id) => apiGet(`${URL}/${id}`)
|
|
|
|
|
|
|
|
|
|
|
|
// ===== 失效管理 =====
|
2026-07-11 07:37:53 +08:00
|
|
|
|
/** 失效单条 Token(admin 权限,幂等,已失效返回 409) */
|
2026-06-20 22:21:34 +08:00
|
|
|
|
export const invalidateTokenApi = (id) => apiAdminPost(`${URL}/${id}/invalidate`)
|
2026-07-11 07:37:53 +08:00
|
|
|
|
/** 按环境失效 Token(admin 权限,幂等,Body: {system_id, env_key}) */
|
2026-06-20 22:21:34 +08:00
|
|
|
|
export const invalidateEnvironmentTokensApi = (data) => apiAdminPost(`${URL}/invalidate-environment`, data)
|
|
|
|
|
|
|
|
|
|
|
|
// ===== 使用与轮换预览 =====
|
2026-07-11 07:37:53 +08:00
|
|
|
|
/** 查询 Token 使用记录(基于 ExternalToolExecution 关联查询) */
|
2026-06-20 22:21:34 +08:00
|
|
|
|
export const getTokenUsageApi = (id, params = {}) =>
|
|
|
|
|
|
apiGet(`${URL}/${id}/usage${buildQueryString(params)}`)
|
2026-07-11 07:37:53 +08:00
|
|
|
|
/** 轮换影响范围预览(只读,返回 token_status + 受影响的系统/环境/工具/密钥轮换策略) */
|
2026-06-20 22:21:34 +08:00
|
|
|
|
export const getTokenRotationPreviewApi = (id) => apiGet(`${URL}/${id}/rotation-preview`)
|
|
|
|
|
|
|
|
|
|
|
|
// ===== 统计与历史 =====
|
2026-07-11 07:37:53 +08:00
|
|
|
|
/** 查询 Token 统计(5 状态分组:total/active/invalidated/expired/expiring_soon,支持 expiring_days 阈值) */
|
2026-06-20 22:21:34 +08:00
|
|
|
|
export const getTokenStatsApi = (params = {}) => apiGet(`${URL}/stats${buildQueryString(params)}`)
|
2026-07-11 07:37:53 +08:00
|
|
|
|
/** 查询 Token 变更历史(system_id 必填,基于审计日志,含刷新成功/失败事件) */
|
2026-06-20 22:21:34 +08:00
|
|
|
|
export const getTokenHistoryApi = (params = {}) => apiGet(`${URL}/history${buildQueryString(params)}`)
|
|
|
|
|
|
|
|
|
|
|
|
// ===== 过期预警 =====
|
2026-07-11 07:37:53 +08:00
|
|
|
|
/** 查询即将过期的 Token(days 默认 7,范围 1-90,system_id 透传 DB 层过滤) */
|
2026-06-20 22:21:34 +08:00
|
|
|
|
export const getExpiringTokensApi = (params = {}) => apiGet(`${URL}/expiring${buildQueryString(params)}`)
|