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 文档:设备授权、任务解密、摘要加密与报告签名打包接口。', }, }, 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 }) }, }, }, })