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.

91 lines (90 loc) 3.67 kB
import { HumanReadableSchemaError } from "../validation/standardSchema.mjs"; import { ApiError } from "./ApiError.mjs"; import { errorHandler } from "../error/errorHandler.mjs"; import { ZodError, z } from "zod"; import { StatusCodes, getReasonPhrase } from "http-status-codes"; import ServerLogger from "@smooai/logger/AwsServerLogger"; //#region src/api/apiHandler.ts const logger = new ServerLogger(); async function lambdaApiHandler(event, context, handler) { try { logger.addLambdaContext(event, context); return await errorHandler(async (event, context) => { const response = await handler(event, context); return { ...response, body: response.body ? typeof response.body === "string" ? response.body : JSON.stringify(response.body) : void 0 }; }, event, context); } catch (error) { if (error instanceof ApiError) { logger.error(error, `An API error occurred: Status: ${error.status} (${error.statusText}); Message: ${error.message}`); return { body: JSON.stringify({ error: { message: error.message, statusText: error.statusText } }), statusCode: error.status, headers: { "Content-type": "application/json" } }; } else if (error instanceof HumanReadableSchemaError) { logger.error(error, `A schema validation error occurred: ${error.message}`); return { body: JSON.stringify({ error: { message: error.message, statusText: getReasonPhrase(StatusCodes.BAD_REQUEST) } }), statusCode: StatusCodes.BAD_REQUEST, headers: { "Content-type": "application/json" } }; } else if (error instanceof ZodError) { const prettyError = z.prettifyError(error); logger.error(error, `A validation error occurred: ${prettyError}`); return { body: JSON.stringify({ error: { message: prettyError, statusText: getReasonPhrase(StatusCodes.BAD_REQUEST) } }), statusCode: StatusCodes.BAD_REQUEST, headers: { "Content-type": "application/json" } }; } else if (error instanceof Error) { logger.error(error, `An unexpected error occurred: ${error.message}`); return { body: JSON.stringify({ error: { message: error.message, statusText: getReasonPhrase(StatusCodes.INTERNAL_SERVER_ERROR) } }), statusCode: StatusCodes.INTERNAL_SERVER_ERROR, headers: { "Content-type": "application/json" } }; } else { logger.error(error, `An unexpected error occurred: ${error}`); return { body: JSON.stringify({ error: { message: "An unexpected error occurred.", statusCode: StatusCodes.INTERNAL_SERVER_ERROR, statusText: getReasonPhrase(StatusCodes.INTERNAL_SERVER_ERROR), headers: { "Content-type": "application/json" } } }) }; } } } async function eventBridgeHandler(event, context, handler) { try { logger.addLambdaContext(void 0, context); return await errorHandler(async (event, context) => { await handler(event, context); }, event, context); } catch (error) { if (error instanceof ApiError) logger.error(error, `An API error occurred: Status: ${error.status} (${error.statusText}); Message: ${error.message}`); else if (error instanceof HumanReadableSchemaError) logger.error(error, `A schema validation error occurred: ${error.message}`); else if (error instanceof ZodError) { const prettyError = z.prettifyError(error); logger.error(error, `A validation error occurred: ${prettyError}`); } else if (error instanceof Error) logger.error(error, `An unexpected error occurred: ${error.message}`); else logger.error(error, `An unexpected error occurred: ${error}`); } } //#endregion export { eventBridgeHandler, lambdaApiHandler }; //# sourceMappingURL=apiHandler.mjs.map