mirror of
https://gitea.toothfairyai.com/ToothFairyAI/tf_code.git
synced 2026-03-31 06:12:26 +00:00
70 lines
1.6 KiB
TypeScript
70 lines
1.6 KiB
TypeScript
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({
|
|
description: "Get the next TUI request from the queue",
|
|
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({
|
|
description: "Submit a response to the TUI request queue",
|
|
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)
|
|
},
|
|
)
|