Openstatus
www.openstatus.dev
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}