feat(server): 管理面与成员视图 API + Scalar 在线文档

契约 19 路径全量:引导/会话/改密、engine 桩、keys、overview/logs、payments、
qpu、members、audit、成员视图。鉴权优先、422 信封、登录节流、上游验证接线。
This commit is contained in:
2026-10-06 01:30:52 +08:00
parent 6980d09750
commit 6454f4acfa
18 changed files with 2358 additions and 0 deletions
+49
View File
@@ -0,0 +1,49 @@
import { OpenAPIHono, createRoute } from "@hono/zod-openapi";
import type { EngineStatus } from "@new-api-key-usage/core";
import { requireAdminSession, type AppVars } from "../middleware.ts";
import { engineStatusSchema, err401 } from "../api-schemas.ts";
/** 状态存储归同步引擎设计;此处只暴露契约字段 */
let engineStatus: EngineStatus = {
running: false,
last_round: null,
};
export function adminEngineRoutes() {
const r = new OpenAPIHono<{ Variables: AppVars }>();
r.use("*", requireAdminSession);
r.openapi(
createRoute({
method: "get",
path: "/engine",
summary: "引擎状态",
description:
"最近轮次摘要;last_round 为 null 表示引擎尚未跑过。状态存储细节归同步引擎设计。",
tags: ["引擎"],
security: [{ adminSession: [] }],
responses: {
200: {
description: "status",
content: { "application/json": { schema: engineStatusSchema } },
},
401: err401,
},
}),
async (c) => {
const guard = await requireAdminSession(c, async () => {});
if (guard) return guard;
return c.json(engineStatus, 200);
},
);
return r;
}
export function setEngineStatus(next: EngineStatus) {
engineStatus = next;
}
export function getEngineStatus(): EngineStatus {
return engineStatus;
}