Openstatus www.openstatus.dev
at 4c0f4c00a38753a5d0dfd7e7b7b7706dec6f1503 36 lines 879 B view raw
1import { BaseError } from "./base-error"; 2import type { ErrorCode } from "./error-code"; 3import { statusToCode } from "./utils"; 4 5type Context = { 6 url?: string; 7 method?: string; 8 statusCode?: number; 9}; 10 11export class HttpError extends BaseError<Context> { 12 public readonly name = HttpError.name; 13 public readonly code: ErrorCode; 14 15 constructor(opts: { 16 code: ErrorCode; 17 message: string; 18 cause?: BaseError; 19 context?: Context; 20 }) { 21 super(opts); 22 this.code = opts.code; 23 } 24 25 public static fromRequest(request: Request, response: Response) { 26 return new HttpError({ 27 code: statusToCode(response.status), 28 message: response.statusText, // can be overriden with { ...res, statusText: 'Custom message' } 29 context: { 30 url: request.url, 31 method: request.method, 32 statusCode: response.status, 33 }, 34 }); 35 } 36}