UNPKG

@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
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