Files
optima/src/api/server.ts
T
2026-01-24 16:59:50 -06:00

53 lines
1.2 KiB
TypeScript

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);
app.route("/v1", v1);
export default app;