Files
UHD_Media_Tool/packages/contracts/src/api.ts
T
root b32d5c028a merge: ui2/t-discover
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01Cxwgnn2pbzQ7rXv3rq7fei

# Conflicts:
#	packages/adapters/src/tmdb/index.ts
2026-10-06 18:34:12 +08:00

75 lines
2.5 KiB
TypeScript

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, string> = {}): 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 extends EndpointDef> = E["body"] extends z.ZodType ? z.input<E["body"]> : never;
export type EndpointResponse<E extends EndpointDef> = z.infer<E["response"]>;
export * from "./files.ts";
export * from "./mcp.ts";
export * from "./schedules.ts";