import type { ErrorRequestHandler } from 'express'; import { toHttpError } from '../errors.js'; import { applyApiResponseHeaders, buildApiLogContext, wantsApiEnvelope, } from '../http.js'; export const errorHandler: ErrorRequestHandler = ( error, request, response, _next, ) => { const normalizedError = toHttpError(error); const meta = applyApiResponseHeaders(request, response); request.log?.error( { err: error, ...buildApiLogContext(request, response), user_id: request.userId ?? null, status: normalizedError.statusCode, error_code: normalizedError.code, }, 'request failed', ); response.status(normalizedError.statusCode); const errorPayload = { code: normalizedError.code, message: normalizedError.message, ...(normalizedError.expose && normalizedError.details !== undefined ? { details: normalizedError.details } : {}), }; if (wantsApiEnvelope(request)) { response.json({ ok: false, data: null, error: errorPayload, meta, }); return; } response.json({ error: errorPayload, meta, }); };