import { Hono } from "hono"; import { apiResponse } from "../modules/api-utils/apiResponse"; import { ZodError } from "zod"; import { cors } from "hono/cors"; import GenericError from "../Errors/GenericError"; import teapot from "./teapot"; const app = new Hono(); const v1 = new Hono(); app.onError((err, ctx) => { const errClassName = err.constructor.name; if ( errClassName.toLowerCase().includes("prisma") || err.message.toLowerCase().includes("prisma") || err.name.toLowerCase().includes("prisma") ) { console.trace(err); return ctx.json(apiResponse.internalError(), 500); } if (err instanceof ZodError) { return ctx.json( apiResponse.zodError(err), //@ts-ignore apiResponse.zodError(err).status, ); } const response = apiResponse.error(err); return ctx.json(response, response.status); }); app.use("*", cors()); app.notFound((c) => { const response = apiResponse.error( new GenericError({ name: "NotFound", message: `Cannot ${c.req.method.toUpperCase()} ${c.req.path}`, status: 404, cause: "Unknown", }), ); return c.json(response, response.status); }); v1.route("/teapot", teapot); v1.route("/auth", require("./routers/authRouter").default); v1.route("/user", require("./routers/user").default); v1.route("/company", require("./routers/companyRouter").default); v1.route("/credential", require("./routers/credentialRouter").default); v1.route("/credential-type", require("./routers/credentialTypeRouter").default); v1.route("/role", require("./routers/roleRouter").default); v1.route("/permissions", require("./routers/permissionRouter").default); v1.route("/unifi", require("./routers/unifiRouter").default); v1.route("/procurement", require("./routers/procurementRouter").default); v1.route("/sales", require("./routers/salesRouter").default); v1.route("/cw", require("./routers/cwRouter").default); app.route("/v1", v1); export default app;