@smooai/utils
Version:
A collection of shared utilities and tools used across SmooAI projects. This package provides common functionality to standardize and simplify development across all SmooAI repositories.
67 lines (66 loc) • 2.26 kB
JavaScript
import { HumanReadableSchemaError } from "../validation/standardSchema.mjs";
import { isRunningLocally } from "../env/index.mjs";
import { ZodError, z } from "zod";
import ServerLogger from "@smooai/logger/AwsServerLogger";
import { Hono } from "hono";
import { handle } from "hono/aws-lambda";
import { HTTPException } from "hono/http-exception";
import { logger } from "hono/logger";
import { prettyJSON } from "hono/pretty-json";
import { requestId } from "hono/request-id";
//#region src/api/hono.ts
const logger$1 = new ServerLogger();
function addHonoMiddleware(_app) {
const app = _app ?? new Hono();
app.use(requestId());
app.use(async (c, next) => {
const start = Date.now();
const namespace = `${c.req.method} ${c.req.path}`;
logger$1.addRequestContext(c.req);
logger$1.setNamespace(namespace);
logger$1.addContext({ honoRequestId: c.get("requestId") });
logger$1.info(`Request started`);
await next();
await logger$1.cloneAndAddResponseContext(c.res);
logger$1.addTelemetryFields({ duration: Date.now() - start });
logger$1.info(`Request completed`);
});
app.use(async (c, next) => {
logger((str, ...rest) => {
logger$1.info(str, ...rest);
});
await next();
});
if (isRunningLocally()) app.use(prettyJSON());
app.onError((error, c) => {
if (error instanceof HumanReadableSchemaError) {
logger$1.error(error, `A schema validation error occurred`);
return c.json({
error: error.message,
schemaError: error.schemaError
}, 400);
} else if (error instanceof ZodError) {
const prettyError = z.prettifyError(error);
logger$1.error(error, `A validation error occurred`);
return c.json({
error: prettyError,
details: error.issues
}, 400);
} else if (error instanceof HTTPException) {
logger$1.error(error, `An HTTP error occurred`);
return error.getResponse();
}
logger$1.error(error, `An unknown error occurred`);
return c.json({ error: error.message }, 500);
});
return app;
}
function createHonoAwsLambdaHandler(app) {
return (event, lambdaContext) => {
logger$1.addLambdaContext(event, lambdaContext);
return handle(app)(event, lambdaContext);
};
}
//#endregion
export { addHonoMiddleware, createHonoAwsLambdaHandler };
//# sourceMappingURL=hono.mjs.map