@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.
71 lines (70 loc) • 2.75 kB
JavaScript
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
const require_chunk = require("../chunk-CoPdw6nB.cjs");
const require_validation_standardSchema = require("../validation/standardSchema.cjs");
const require_env_index = require("../env/index.cjs");
let zod = require("zod");
let _smooai_logger_AwsServerLogger = require("@smooai/logger/AwsServerLogger");
_smooai_logger_AwsServerLogger = require_chunk.__toESM(_smooai_logger_AwsServerLogger);
let hono = require("hono");
let hono_aws_lambda = require("hono/aws-lambda");
let hono_http_exception = require("hono/http-exception");
let hono_logger = require("hono/logger");
let hono_pretty_json = require("hono/pretty-json");
let hono_request_id = require("hono/request-id");
//#region src/api/hono.ts
const logger = new _smooai_logger_AwsServerLogger.default();
function addHonoMiddleware(_app) {
const app = _app ?? new hono.Hono();
app.use((0, hono_request_id.requestId)());
app.use(async (c, next) => {
const start = Date.now();
const namespace = `${c.req.method} ${c.req.path}`;
logger.addRequestContext(c.req);
logger.setNamespace(namespace);
logger.addContext({ honoRequestId: c.get("requestId") });
logger.info(`Request started`);
await next();
await logger.cloneAndAddResponseContext(c.res);
logger.addTelemetryFields({ duration: Date.now() - start });
logger.info(`Request completed`);
});
app.use(async (c, next) => {
(0, hono_logger.logger)((str, ...rest) => {
logger.info(str, ...rest);
});
await next();
});
if (require_env_index.isRunningLocally()) app.use((0, hono_pretty_json.prettyJSON)());
app.onError((error, c) => {
if (error instanceof require_validation_standardSchema.HumanReadableSchemaError) {
logger.error(error, `A schema validation error occurred`);
return c.json({
error: error.message,
schemaError: error.schemaError
}, 400);
} else if (error instanceof zod.ZodError) {
const prettyError = zod.z.prettifyError(error);
logger.error(error, `A validation error occurred`);
return c.json({
error: prettyError,
details: error.issues
}, 400);
} else if (error instanceof hono_http_exception.HTTPException) {
logger.error(error, `An HTTP error occurred`);
return error.getResponse();
}
logger.error(error, `An unknown error occurred`);
return c.json({ error: error.message }, 500);
});
return app;
}
function createHonoAwsLambdaHandler(app) {
return (event, lambdaContext) => {
logger.addLambdaContext(event, lambdaContext);
return (0, hono_aws_lambda.handle)(app)(event, lambdaContext);
};
}
//#endregion
exports.addHonoMiddleware = addHonoMiddleware;
exports.createHonoAwsLambdaHandler = createHonoAwsLambdaHandler;
//# sourceMappingURL=hono.cjs.map