| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- import { Hono, type Context } from "hono"
- import { describeRoute, resolver, validator } from "hono-openapi"
- import { z } from "zod"
- import { AsyncQueue } from "../util/queue"
- const TuiRequest = z.object({
- path: z.string(),
- body: z.any(),
- })
- type TuiRequest = z.infer<typeof TuiRequest>
- const request = new AsyncQueue<TuiRequest>()
- const response = new AsyncQueue<any>()
- export async function callTui(ctx: Context) {
- const body = await ctx.req.json()
- request.push({
- path: ctx.req.path,
- body,
- })
- return response.next()
- }
- export const TuiRoute = new Hono()
- .get(
- "/next",
- describeRoute({
- summary: "Get next TUI request",
- description: "Retrieve the next TUI (Terminal User Interface) request from the queue for processing.",
- operationId: "tui.control.next",
- responses: {
- 200: {
- description: "Next TUI request",
- content: {
- "application/json": {
- schema: resolver(TuiRequest),
- },
- },
- },
- },
- }),
- async (c) => {
- const req = await request.next()
- return c.json(req)
- },
- )
- .post(
- "/response",
- describeRoute({
- summary: "Submit TUI response",
- description: "Submit a response to the TUI request queue to complete a pending request.",
- operationId: "tui.control.response",
- responses: {
- 200: {
- description: "Response submitted successfully",
- content: {
- "application/json": {
- schema: resolver(z.boolean()),
- },
- },
- },
- },
- }),
- validator("json", z.any()),
- async (c) => {
- const body = c.req.valid("json")
- response.push(body)
- return c.json(true)
- },
- )
|