import { OpenAPIHandler } from '@orpc/openapi/fetch' import { OpenAPIReferencePlugin } from '@orpc/openapi/plugins' import { onError } from '@orpc/server' import { ZodToJsonSchemaConverter } from '@orpc/zod/zod4' import { createFileRoute } from '@tanstack/react-router' import { name, version } from '@/../package.json' import { handleValidationError, logError } from '@/server/api/interceptors' import { router } from '@/server/api/routers' const handler = new OpenAPIHandler(router, { plugins: [ new OpenAPIReferencePlugin({ docsProvider: 'scalar', schemaConverters: [new ZodToJsonSchemaConverter()], specGenerateOptions: { info: { title: name, version, description: 'UX 授权服务 OpenAPI 文档。该服务用于工具箱侧本地身份初始化与密码学能力调用,覆盖设备授权密文生成、任务二维码解密、摘要信息加密、报告签名打包等流程。\n\n推荐调用顺序:\n1) 写入平台公钥;\n2) 写入已签名 licence JSON;\n3) 写入 OpenPGP 私钥;\n4) 读取本机身份状态进行前置校验;\n5) 执行加密/解密与签名接口。\n\n说明:除文件下载接口外,返回体均为 JSON;字段示例已提供,便于联调和 Mock。', }, }, docsPath: '/docs', specPath: '/spec.json', }), ], interceptors: [onError(logError)], clientInterceptors: [onError(handleValidationError)], }) export const Route = createFileRoute('/api/$')({ server: { handlers: { ANY: async ({ request }) => { const { response } = await handler.handle(request, { prefix: '/api', context: { headers: request.headers, }, }) return response ?? new Response('Not Found', { status: 404 }) }, }, }, })