From a0d675493b152988d96e471ebbddc1dcb5d4dc52 Mon Sep 17 00:00:00 2001 From: JR40159 <126243293+JR40159@users.noreply.github.com> Date: Wed, 5 Mar 2025 20:56:17 +0000 Subject: [PATCH 1/2] Handle non-bailo errors --- .../routes/middleware/expressErrorHandler.ts | 49 ++++++++++++------- 1 file changed, 31 insertions(+), 18 deletions(-) diff --git a/backend/src/routes/middleware/expressErrorHandler.ts b/backend/src/routes/middleware/expressErrorHandler.ts index 0ecd89364..f2ea163fd 100644 --- a/backend/src/routes/middleware/expressErrorHandler.ts +++ b/backend/src/routes/middleware/expressErrorHandler.ts @@ -1,8 +1,10 @@ import { NextFunction, Request, Response } from 'express' +import { isNativeError } from 'util/types' import audit from '../../connectors/audit/index.js' import log from '../../services/log.js' import { BailoError } from '../../types/error.js' +import { InternalError } from '../../utils/error.js' export function bailoErrorGuard(err: unknown): err is BailoError { if (typeof err !== 'object' || err === null) { @@ -24,23 +26,34 @@ export function bailoErrorGuard(err: unknown): err is BailoError { } export async function expressErrorHandler(err: unknown, req: Request, res: Response, _next: NextFunction) { - if (!bailoErrorGuard(err)) { - log.error({ err }, 'No error code was found, returning generic error to user.') - throw err + if (bailoErrorGuard(err)) { + const logger = err.logger || req.log + logger.warn(err.context, err.message) + + delete err.context?.internal + + await audit.onError(req, err) + + return res.status(err.code).json({ + error: { + name: err.name, + message: err.message, + context: err.context, + }, + }) + } else if (isNativeError(err)) { + log.warn( + { err: { name: err.name, stack: err.stack } }, + 'Generic Javascript error found, returning generic error to user.', + ) + await audit.onError(req, InternalError('Internal Server Error')) + return res.status(500).json({ + error: { + name: 'Internal Server Error', + message: 'Unknown error - Please contact Bailo support', + }, + }) } - - const logger = err.logger || req.log - logger.warn(err.context, err.message) - - delete err.context?.internal - - await audit.onError(req, err) - - return res.status(err.code).json({ - error: { - name: err.name, - message: err.message, - context: err.context, - }, - }) + log.error({ err }, 'Unknown error format was found, returning generic error to user.') + throw err } From a2cea2bb3df88c8684544c294263f042d28d01ca Mon Sep 17 00:00:00 2001 From: JR40159 <126243293+JR40159@users.noreply.github.com> Date: Wed, 5 Mar 2025 21:34:40 +0000 Subject: [PATCH 2/2] Prevent undefined being prepended to log messages --- backend/src/routes/middleware/expressErrorHandler.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/backend/src/routes/middleware/expressErrorHandler.ts b/backend/src/routes/middleware/expressErrorHandler.ts index f2ea163fd..7be6f40f7 100644 --- a/backend/src/routes/middleware/expressErrorHandler.ts +++ b/backend/src/routes/middleware/expressErrorHandler.ts @@ -28,7 +28,11 @@ export function bailoErrorGuard(err: unknown): err is BailoError { export async function expressErrorHandler(err: unknown, req: Request, res: Response, _next: NextFunction) { if (bailoErrorGuard(err)) { const logger = err.logger || req.log - logger.warn(err.context, err.message) + if (err.context) { + logger.warn(err.context, err.message) + } else { + logger.warn(err.message) + } delete err.context?.internal