import type { z } from "zod"; import { browserApi } from "./api/browser.ts"; import { contentApi } from "./api/content.ts"; import { episodeMappingApi } from "./api/episode-mapping.ts"; import { executionApi } from "./api/execution.ts"; import { instancesApi } from "./api/instances.ts"; import { libraryApi } from "./api/library.ts"; import { logsApi } from "./api/logs.ts"; import { opsApi } from "./api/ops.ts"; import { organizeApi } from "./api/organize.ts"; import { platformApi } from "./api/platform.ts"; import { reviewApi } from "./api/review.ts"; import { rulesApi } from "./api/rules.ts"; import { schedulesApi } from "./api/schedules.ts"; import { API_PREFIX, type EndpointDef } from "./api/shared.ts"; import { sourcesApi } from "./api/sources.ts"; import { subtitlesApi } from "./api/subtitles.ts"; import { systemApi } from "./api/system.ts"; export type { EndpointAuth, EndpointDef, HttpMethod } from "./api/shared.ts"; export { API_PREFIX, DecisionSummary, DecisionSummaryGroup, IdentityRevisionList, OkResult, ReleaseIdentityResult, TaskAccepted, } from "./api/shared.ts"; export * from "./discover.ts"; export * from "./search.ts"; // 所有 REST 端点的路径常量与请求/响应 schema 汇总,按领域分在 ./api/*.ts。 // 合并顺序即路由注册顺序(静态路径须先于同前缀的 {id} 路径),调整分组顺序前先看 server 的路由注册。 export const Api = { ...contentApi, ...instancesApi, ...sourcesApi, ...rulesApi, ...executionApi, ...reviewApi, ...opsApi, ...organizeApi, ...platformApi, ...systemApi, ...logsApi, ...libraryApi, ...browserApi, ...schedulesApi, ...subtitlesApi, ...episodeMappingApi, } as const; /** 用参数填充 `{name}` 路径占位,返回带 API_PREFIX 的完整路径 */ export function buildPath(path: string, params: Record = {}): string { const filled = path.replace(/\{(\w+)\}/g, (_, k: string) => { const v = params[k]; if (v === undefined) throw new Error(`缺少路径参数 ${k}`); return encodeURIComponent(v); }); return `${API_PREFIX}${filled}`; } /** 扁平列出全部端点(生成 OpenAPI、权限表与测试用) */ export function listEndpoints(): EndpointDef[] { return Object.values(Api).flatMap((group) => Object.values(group) as EndpointDef[]); } export type EndpointBody = E["body"] extends z.ZodType ? z.input : never; export type EndpointResponse = z.infer; export * from "./files.ts"; export * from "./mcp.ts"; export * from "./schedules.ts";