(app: App, options: Options)
| 52 | type HonoServer = ReturnType<typeof createHonoServer> |
| 53 | |
| 54 | function createHonoServer(app: App, options: Options) { |
| 55 | type Env = { |
| 56 | Variables: { |
| 57 | requestId: string |
| 58 | resourceLimits: ResourceLimits |
| 59 | } |
| 60 | } |
| 61 | |
| 62 | const server = new Hono<Env>() |
| 63 | |
| 64 | return server |
| 65 | .onError((error, c) => { |
| 66 | log.error('Error processing request', { |
| 67 | error: util.inspect(error), |
| 68 | method: c.req.method, |
| 69 | pathname: c.req.path, |
| 70 | requestId: c.get('requestId'), |
| 71 | }) |
| 72 | return getErrorResponse(error, c) |
| 73 | }) |
| 74 | .use(fallbackLoggerMiddleware(options.perRequestLogContext)) |
| 75 | .use(logMiddleware) |
| 76 | .use(clientTelemetryMiddleware) |
| 77 | .use(resourceLimitsMiddleware(options)) |
| 78 | .get('/health', (c) => { |
| 79 | return c.json({ status: 'ok' }) |
| 80 | }) |
| 81 | .get('/connection-info', (c) => { |
| 82 | return c.json(app.getConnectionInfo() satisfies ConnectionInfoResponseBody) |
| 83 | }) |
| 84 | .post('/query', zValidator('json', QueryRequestBody), async (c) => { |
| 85 | const request = c.req.valid('json') |
| 86 | const data = await app.query( |
| 87 | request.plan as QueryPlanNode, |
| 88 | request.params, |
| 89 | request.comments, |
| 90 | c.get('resourceLimits'), |
| 91 | null, |
| 92 | ) |
| 93 | return c.json({ data } satisfies QueryResponseBody) |
| 94 | }) |
| 95 | .post('/transaction/start', zValidator('json', TransactionStartRequestBody), async (c) => { |
| 96 | const result = await app.startTransaction(c.req.valid('json'), c.get('resourceLimits')) |
| 97 | c.header('Prisma-Transaction-Id', result.id) |
| 98 | return c.json(result satisfies TransactionStartResponseBody) |
| 99 | }) |
| 100 | .post('/transaction/:txId/query', zValidator('json', QueryRequestBody), async (c) => { |
| 101 | const request = c.req.valid('json') |
| 102 | const data = await app.query( |
| 103 | request.plan as QueryPlanNode, |
| 104 | request.params, |
| 105 | request.comments, |
| 106 | c.get('resourceLimits'), |
| 107 | c.req.param('txId'), |
| 108 | ) |
| 109 | return c.json({ data } satisfies QueryResponseBody) |
| 110 | }) |
| 111 | .post('/transaction/:txId/commit', async (c) => { |
no test coverage detected