import { Hono } from "hono";import { bearerAuth } from "hono/bearer-auth";import { z } from "zod";import { zValidator } from "@hono/zod-validator";import { generateSchema } from '@anatine/zod-openapi';type Bindings = { TOKEN: string;};const app = new Hono<{ Bindings: Bindings }>();// API 格式校验 ⬇️const schema = z.object({ point: z.union([ z.literal("ping"), z.literal("app.external_data_tool.query"), z.literal("app.moderation.input"), z.literal("app.moderation.output"), ]), // Restricts 'point' to two specific values params: z .object({ app_id: z.string().optional(), tool_variable: z.string().optional(), inputs: z.record(z.any()).optional(), query: z.any(), text: z.any() }) .optional(),});// Generate OpenAPI schemaapp.get("/", (c) => { return c.json(generateSchema(schema));});app.post( "/", (c, next) => { const auth = bearerAuth({ token: c.env.TOKEN }); return auth(c, next); }, zValidator("json", schema), async (c) => { const { point, params } = c.req.valid("json"); if (point === "ping") { return c.json({ result: "pong", }); } // ⬇️ impliment your logic here ⬇️ // point === "app.external_data_tool.query" else if (point === "app.moderation.input"){ // 输入检查 ⬇️ const inputkeywords = ["输入过滤测试1", "输入过滤测试2", "输入过滤测试3"]; if (inputkeywords.some(keyword => params.query.includes(keyword))) { return c.json({ "flagged": true, "action": "direct_output", "preset_response": "输入存在违法内容,请换个问题再试!" }); } else { return c.json({ "flagged": false, "action": "direct_output", "preset_response": "输入无异常" }); } // 输入检查完毕 } else { // 输出检查 ⬇️ const outputkeywords = ["输出过滤测试1", "输出过滤测试2", "输出过滤测试3"]; if (outputkeywords.some(keyword => params.text.includes(keyword))) { return c.json({ "flagged": true, "action": "direct_output", "preset_response": "输出存在敏感内容,已被系统过滤,请换个问题再问!" }); } else { return c.json({ "flagged": false, "action": "direct_output", "preset_response": "输出无异常" }); }; } // 输出检查完毕 });export default app;