errorReply
uses tcmts.cli.style.red, which uses node:util
How a server-side failure reaches the caller: deliberate HttpErrors as is, anything else hidden in production.
import { red } from "#codebase/tcmts/cli/style"; export function errorReply(err: Error & { status?: number; retryAfter?: number }, isHttpError: boolean, name: string, production: boolean) { if (isHttpError) { const status = err.status! >= 400 && err.status! < 600 ? err.status! : 500; return { status, body: { name: "HttpError", message: err.message, status: err.status }, retryAfter: err.retryAfter }; } if (production) { // unexpected errors can carry internals (paths, queries, secrets): log them here, tell the caller less console.error(red(` ${name} failed: ${err?.stack ?? String(err)}`)); return { status: 500, body: { name: "Error", message: "internal error" } }; } return { status: 500, body: { name: err?.name ?? "Error", message: err?.message ?? String(err) } }; }