46 lines
1.4 KiB
TypeScript
46 lines
1.4 KiB
TypeScript
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 })
|
|
},
|
|
},
|
|
},
|
|
})
|