errorReply

tcmts.cli.web.errorReply · #olej3zti · term · runs on the server

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) } };
}

uses

used by