backend-error 1.2.1 → 1.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -72,6 +72,8 @@ const error = new BackendError({
72
72
 
73
73
  ## ⚙️ Static error helpers
74
74
 
75
+ Available helpers (status, showUser, severity):
76
+
75
77
  ```ts
76
78
  BackendError.BadRequest("..."); // 400, showUser: true
77
79
  BackendError.Unauthorized("..."); // 401, showUser: true
@@ -79,14 +81,23 @@ BackendError.Forbidden("..."); // 403, showUser: true
79
81
  BackendError.NotFound("..."); // 404, showUser: true
80
82
  BackendError.Conflict("..."); // 409, showUser: true
81
83
  BackendError.UnprocessableEntity("..."); // 422, showUser: true
84
+ BackendError.FailedDependency("..."); // 424, showUser: true
82
85
  BackendError.Internal("..."); // 500, showUser: false
83
- BackendError.ServiceUnavailable("..."); // 503, showUser: false
86
+ BackendError.NotImplemented("..."); // 501, showUser: true
84
87
  BackendError.ExternalAPI("..."); // 502, showUser: true
88
+ BackendError.ServiceUnavailable("..."); // 503, showUser: false
89
+ BackendError.GatewayTimeout("..."); // 504, showUser: false
90
+ BackendError.InsufficientStorage("..."); // 507, showUser: false
85
91
  ```
86
92
 
93
+ Notes:
94
+
95
+ - 4xx helpers generally have `showUser: true` so clients get actionable messages.
96
+ - 5xx helpers are usually `showUser: false` to avoid leaking internals, except `NotImplemented` and `ExternalAPI` which intentionally expose helpful client-facing messages.
97
+
87
98
  ### External / upstream errors
88
99
 
89
- Use `ExternalAPI` for failures originating from upstream services (Stripe, bank APIs, HR systems etc). It defaults to HTTP `502 Bad Gateway`, `showUser: true` (so the user gets a helpful message), and `severity: "warning"`.
100
+ Use `ExternalAPI` for failures originating from upstream services (Stripe, bank APIs, HR systems etc). It defaults to HTTP `502 Bad Gateway`, `showUser: true` (so the user gets a helpful message), and `severity: "critical"`.
90
101
 
91
102
  Example:
92
103
 
@@ -1,17 +1,23 @@
1
- import { BackendErrorOptions, Severity } from "../interfaces/Types";
2
- export declare class BackendError extends Error {
3
- isOperational: boolean;
4
- showUser: boolean;
5
- severity: Severity;
6
- code?: number;
7
- data?: any;
8
- constructor(options: BackendErrorOptions);
9
- static BadRequest(msg: string): BackendError;
10
- static Unauthorized(msg: string): BackendError;
11
- static Forbidden(msg: string): BackendError;
12
- static NotFound(msg: string): BackendError;
13
- static Conflict(msg: string): BackendError;
14
- static UnprocessableEntity(msg: string): BackendError;
15
- static Internal(msg: string): BackendError;
16
- static ServiceUnavailable(msg: string): BackendError;
17
- }
1
+ import { BackendErrorOptions, Severity } from "../interfaces/Types";
2
+ export declare class BackendError extends Error {
3
+ isOperational: boolean;
4
+ showUser: boolean;
5
+ severity: Severity;
6
+ code?: number;
7
+ data?: any;
8
+ constructor(options: BackendErrorOptions);
9
+ static BadRequest(msg: string): BackendError;
10
+ static Unauthorized(msg: string): BackendError;
11
+ static Forbidden(msg: string): BackendError;
12
+ static NotFound(msg: string): BackendError;
13
+ static Conflict(msg: string): BackendError;
14
+ static UnprocessableEntity(msg: string): BackendError;
15
+ static FailedDependency(msg: string): BackendError;
16
+ static Internal(msg: string): BackendError;
17
+ static NotImplemented(msg: string): BackendError;
18
+ static ExternalAPI(msg: string, code?: number): BackendError;
19
+ static ServiceUnavailable(msg: string): BackendError;
20
+ static GatewayTimeout(msg: string): BackendError;
21
+ static InsufficientStorage(msg: string): BackendError;
22
+ }
23
+ //# sourceMappingURL=BackendError.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BackendError.d.ts","sourceRoot":"","sources":["../../src/core/BackendError.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAEpE,qBAAa,YAAa,SAAQ,KAAK;IAC9B,aAAa,EAAE,OAAO,CAAC;IACvB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,QAAQ,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,GAAG,CAAC;gBAEN,OAAO,EAAE,mBAAmB;IAcxC,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,MAAM;IAI7B,MAAM,CAAC,YAAY,CAAC,GAAG,EAAE,MAAM;IAI/B,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE,MAAM;IAI5B,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM;IAK3B,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM;IAK3B,MAAM,CAAC,mBAAmB,CAAC,GAAG,EAAE,MAAM;IAItC,MAAM,CAAC,gBAAgB,CAAC,GAAG,EAAE,MAAM;IAKnC,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM;IAI3B,MAAM,CAAC,cAAc,CAAC,GAAG,EAAE,MAAM;IAIjC,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,GAAE,MAAY;IAIlD,MAAM,CAAC,kBAAkB,CAAC,GAAG,EAAE,MAAM;IAIrC,MAAM,CAAC,cAAc,CAAC,GAAG,EAAE,MAAM;IAIjC,MAAM,CAAC,mBAAmB,CAAC,GAAG,EAAE,MAAM;CAGvC"}
@@ -13,6 +13,7 @@ class BackendError extends Error {
13
13
  this.data = options.data;
14
14
  Object.setPrototypeOf(this, BackendError.prototype);
15
15
  }
16
+ // Ordered by HTTP status code (ascending)
16
17
  static BadRequest(msg) {
17
18
  return new BackendError({ message: msg, code: 400, severity: "warning", showUser: true });
18
19
  }
@@ -25,21 +26,36 @@ class BackendError extends Error {
25
26
  static NotFound(msg) {
26
27
  return new BackendError({ message: msg, code: 404, severity: "warning", showUser: true });
27
28
  }
29
+ // 409 Conflict variants
28
30
  static Conflict(msg) {
29
31
  return new BackendError({ message: msg, code: 409, severity: "warning", showUser: true });
30
32
  }
33
+ // 422 Unprocessable / validation
31
34
  static UnprocessableEntity(msg) {
32
35
  return new BackendError({ message: msg, code: 422, severity: "warning", showUser: true });
33
36
  }
37
+ static FailedDependency(msg) {
38
+ return new BackendError({ message: msg, code: 424, severity: "warning", showUser: true });
39
+ }
40
+ // 5xx server errors
34
41
  static Internal(msg) {
35
42
  return new BackendError({ message: msg, code: 500, severity: "critical", showUser: false });
36
43
  }
44
+ static NotImplemented(msg) {
45
+ return new BackendError({ message: msg, code: 501, severity: "error", showUser: true });
46
+ }
37
47
  static ExternalAPI(msg, code = 502) {
38
- return new BackendError({ message: msg, code, severity: "warning", showUser: true });
48
+ return new BackendError({ message: msg, code, severity: "critical", showUser: true });
39
49
  }
40
50
  static ServiceUnavailable(msg) {
41
51
  return new BackendError({ message: msg, code: 503, severity: "critical", showUser: false });
42
52
  }
53
+ static GatewayTimeout(msg) {
54
+ return new BackendError({ message: msg, code: 504, severity: "critical", showUser: false });
55
+ }
56
+ static InsufficientStorage(msg) {
57
+ return new BackendError({ message: msg, code: 507, severity: "critical", showUser: false });
58
+ }
43
59
  }
44
60
  exports.BackendError = BackendError;
45
61
  //# sourceMappingURL=BackendError.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"BackendError.js","sourceRoot":"","sources":["../../src/core/BackendError.ts"],"names":[],"mappings":";;;AAEA,MAAa,YAAa,SAAQ,KAAK;IAOrC,YAAY,OAA4B;;QACtC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACvB,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;QAE3B,IAAI,CAAC,aAAa,GAAG,MAAA,OAAO,CAAC,aAAa,mCAAI,IAAI,CAAC;QACnD,IAAI,CAAC,QAAQ,GAAG,MAAA,OAAO,CAAC,QAAQ,mCAAI,IAAI,CAAC;QACzC,IAAI,CAAC,QAAQ,GAAG,MAAA,OAAO,CAAC,QAAQ,mCAAI,OAAO,CAAC;QAC5C,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;QACzB,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;QAEzB,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,YAAY,CAAC,SAAS,CAAC,CAAC;IACtD,CAAC;IAED,MAAM,CAAC,UAAU,CAAC,GAAW;QAC3B,OAAO,IAAI,YAAY,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5F,CAAC;IAED,MAAM,CAAC,YAAY,CAAC,GAAW;QAC7B,OAAO,IAAI,YAAY,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5F,CAAC;IAED,MAAM,CAAC,SAAS,CAAC,GAAW;QAC1B,OAAO,IAAI,YAAY,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5F,CAAC;IAED,MAAM,CAAC,QAAQ,CAAC,GAAW;QACzB,OAAO,IAAI,YAAY,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5F,CAAC;IAED,MAAM,CAAC,QAAQ,CAAC,GAAW;QACzB,OAAO,IAAI,YAAY,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5F,CAAC;IAED,MAAM,CAAC,mBAAmB,CAAC,GAAW;QACpC,OAAO,IAAI,YAAY,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5F,CAAC;IAED,MAAM,CAAC,QAAQ,CAAC,GAAW;QACzB,OAAO,IAAI,YAAY,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;IAC9F,CAAC;IAED,MAAM,CAAC,WAAW,CAAC,GAAW,EAAE,OAAe,GAAG;QAChD,OAAO,IAAI,YAAY,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IACvF,CAAC;IAED,MAAM,CAAC,kBAAkB,CAAC,GAAW;QACnC,OAAO,IAAI,YAAY,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;IAC9F,CAAC;CACF;AAvDD,oCAuDC"}
1
+ {"version":3,"file":"BackendError.js","sourceRoot":"","sources":["../../src/core/BackendError.ts"],"names":[],"mappings":";;;AAEA,MAAa,YAAa,SAAQ,KAAK;IAOrC,YAAY,OAA4B;;QACtC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACvB,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;QAE3B,IAAI,CAAC,aAAa,GAAG,MAAA,OAAO,CAAC,aAAa,mCAAI,IAAI,CAAC;QACnD,IAAI,CAAC,QAAQ,GAAG,MAAA,OAAO,CAAC,QAAQ,mCAAI,IAAI,CAAC;QACzC,IAAI,CAAC,QAAQ,GAAG,MAAA,OAAO,CAAC,QAAQ,mCAAI,OAAO,CAAC;QAC5C,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;QACzB,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;QAEzB,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,YAAY,CAAC,SAAS,CAAC,CAAC;IACtD,CAAC;IAED,0CAA0C;IAC1C,MAAM,CAAC,UAAU,CAAC,GAAW;QAC3B,OAAO,IAAI,YAAY,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5F,CAAC;IAED,MAAM,CAAC,YAAY,CAAC,GAAW;QAC7B,OAAO,IAAI,YAAY,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5F,CAAC;IAED,MAAM,CAAC,SAAS,CAAC,GAAW;QAC1B,OAAO,IAAI,YAAY,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5F,CAAC;IAED,MAAM,CAAC,QAAQ,CAAC,GAAW;QACzB,OAAO,IAAI,YAAY,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5F,CAAC;IAED,wBAAwB;IACxB,MAAM,CAAC,QAAQ,CAAC,GAAW;QACzB,OAAO,IAAI,YAAY,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5F,CAAC;IAED,iCAAiC;IACjC,MAAM,CAAC,mBAAmB,CAAC,GAAW;QACpC,OAAO,IAAI,YAAY,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5F,CAAC;IAED,MAAM,CAAC,gBAAgB,CAAC,GAAW;QACjC,OAAO,IAAI,YAAY,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5F,CAAC;IAED,oBAAoB;IACpB,MAAM,CAAC,QAAQ,CAAC,GAAW;QACzB,OAAO,IAAI,YAAY,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;IAC9F,CAAC;IAED,MAAM,CAAC,cAAc,CAAC,GAAW;QAC/B,OAAO,IAAI,YAAY,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1F,CAAC;IAED,MAAM,CAAC,WAAW,CAAC,GAAW,EAAE,OAAe,GAAG;QAChD,OAAO,IAAI,YAAY,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IACxF,CAAC;IAED,MAAM,CAAC,kBAAkB,CAAC,GAAW;QACnC,OAAO,IAAI,YAAY,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;IAC9F,CAAC;IAED,MAAM,CAAC,cAAc,CAAC,GAAW;QAC/B,OAAO,IAAI,YAAY,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;IAC9F,CAAC;IAED,MAAM,CAAC,mBAAmB,CAAC,GAAW;QACpC,OAAO,IAAI,YAAY,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;IAC9F,CAAC;CACF;AA3ED,oCA2EC"}
@@ -1,6 +1,7 @@
1
- export declare function httpErrorFormatter(err: unknown): {
2
- status: number;
3
- body: Record<string, any>;
4
- showUser: boolean;
5
- message: string;
6
- };
1
+ export declare function httpErrorFormatter(err: unknown): {
2
+ status: number;
3
+ body: Record<string, any>;
4
+ showUser: boolean;
5
+ message: string;
6
+ };
7
+ //# sourceMappingURL=httpErrorFormatter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"httpErrorFormatter.d.ts","sourceRoot":"","sources":["../../src/core/httpErrorFormatter.ts"],"names":[],"mappings":"AAMA,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG;IAChD,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC1B,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB,CA8CA"}
package/dist/index.d.ts CHANGED
@@ -1,3 +1,4 @@
1
- export { BackendError } from "./core/BackendError";
2
- export { httpErrorFormatter } from "./core/httpErrorFormatter";
3
- export type { BackendErrorOptions, Severity } from "./interfaces/Types";
1
+ export { BackendError } from "./core/BackendError";
2
+ export { httpErrorFormatter } from "./core/httpErrorFormatter";
3
+ export type { BackendErrorOptions, Severity } from "./interfaces/Types";
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,YAAY,EAAE,mBAAmB,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC"}
@@ -1,9 +1,10 @@
1
- export type Severity = "info" | "warning" | "error" | "critical";
2
- export interface BackendErrorOptions {
3
- message: string;
4
- isOperational?: boolean;
5
- showUser?: boolean;
6
- severity?: Severity;
7
- code?: number;
8
- data?: any;
9
- }
1
+ export type Severity = "info" | "warning" | "error" | "critical";
2
+ export interface BackendErrorOptions {
3
+ message: string;
4
+ isOperational?: boolean;
5
+ showUser?: boolean;
6
+ severity?: Severity;
7
+ code?: number;
8
+ data?: any;
9
+ }
10
+ //# sourceMappingURL=Types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Types.d.ts","sourceRoot":"","sources":["../../src/interfaces/Types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,SAAS,GAAG,OAAO,GAAG,UAAU,CAAC;AAEjE,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,GAAG,CAAC;CACZ"}
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "1.2.1",
2
+ "version": "1.2.2",
3
3
  "name": "backend-error",
4
4
  "license": "MIT",
5
5
  "keywords": [