import { HTTPException } from "hono/http-exception";
import { HTTPError } from "ky";
import { prettifyError, ZodError } from "zod";
import { HTTP_STATUS_CODES } from "@/core/constants/http.js";
import { logger } from "@/core/utils/logger.js";
app.onError(async (error, c) => {
const reqId = c.get("requestId");
if (error instanceof ZodError) {
const errorMessage = prettifyError(error);
logger.error(`ZodError with requestId: ${reqId}`, {
error: errorMessage,
});
return c.json({ message: errorMessage }, HTTP_STATUS_CODES.BAD_REQUEST);
}
if (error instanceof HTTPError) {
const errors = await error.response.json();
const response = { message: error.message, error: errors };
logger.error(`HTTPError with requestId: ${reqId}`, response);
return c.json(response, HTTP_STATUS_CODES.BAD_REQUEST);
}
if (error instanceof HTTPException) {
logger.error(`HTTPException with requestId: ${reqId}`, {
error: error.message,
});
// Hono built-in HTTP error
return error.getResponse();
}
logger.error(`UnknownError with requestId: ${reqId}`, {
error: error.message,
});
return c.json(
{ ...error, message: error.message },
HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR
);
});