@alanszp/express-common-fn 11.0.0 → 12.0.0

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.
Files changed (139) hide show
  1. package/dist/commonErrorsHandler.js +29 -14
  2. package/dist/commonErrorsHandler.js.map +1 -1
  3. package/node_modules/@alanszp/audit/dist/errors/AuditError.d.ts +2 -2
  4. package/node_modules/@alanszp/audit/dist/errors/AuditError.js +1 -1
  5. package/node_modules/@alanszp/audit/dist/errors/AuditError.js.map +1 -1
  6. package/node_modules/@alanszp/audit/dist/errors/MissingAuditFieldsError.d.ts +3 -3
  7. package/node_modules/@alanszp/audit/dist/errors/MissingAuditFieldsError.js +2 -2
  8. package/node_modules/@alanszp/audit/dist/errors/MissingAuditFieldsError.js.map +1 -1
  9. package/node_modules/@alanszp/audit/package.json +4 -4
  10. package/node_modules/@alanszp/audit/src/errors/AuditError.ts +2 -2
  11. package/node_modules/@alanszp/audit/src/errors/MissingAuditFieldsError.ts +4 -7
  12. package/node_modules/@alanszp/errors/dist/BaseError.js.map +1 -0
  13. package/node_modules/@alanszp/errors/dist/HttpRenderableError.d.ts +4 -0
  14. package/node_modules/@alanszp/errors/dist/HttpRenderableError.js +8 -0
  15. package/node_modules/@alanszp/errors/dist/HttpRenderableError.js.map +1 -0
  16. package/node_modules/@alanszp/errors/dist/InternalServerError.d.ts +8 -0
  17. package/node_modules/@alanszp/errors/dist/InternalServerError.js +24 -0
  18. package/node_modules/@alanszp/errors/dist/InternalServerError.js.map +1 -0
  19. package/node_modules/@alanszp/errors/dist/RenderableError.d.ts +15 -0
  20. package/node_modules/@alanszp/errors/dist/RenderableError.js +27 -0
  21. package/node_modules/@alanszp/errors/dist/RenderableError.js.map +1 -0
  22. package/node_modules/@alanszp/errors/dist/index.d.ts +4 -3
  23. package/node_modules/@alanszp/errors/dist/index.js +4 -3
  24. package/node_modules/@alanszp/errors/dist/index.js.map +1 -1
  25. package/node_modules/@alanszp/errors/node_modules/@alanszp/core/.gitignore +3 -0
  26. package/node_modules/@alanszp/errors/node_modules/@alanszp/core/.npmignore +3 -0
  27. package/node_modules/@alanszp/errors/node_modules/@alanszp/core/LICENSE +21 -0
  28. package/node_modules/@alanszp/errors/node_modules/@alanszp/core/dist/app/appIdentifier.js.map +1 -0
  29. package/node_modules/@alanszp/errors/node_modules/@alanszp/core/dist/app/index.d.ts +1 -0
  30. package/node_modules/@alanszp/errors/{dist/errors/http → node_modules/@alanszp/core/dist/app}/index.js +6 -6
  31. package/node_modules/@alanszp/errors/node_modules/@alanszp/core/dist/app/index.js.map +1 -0
  32. package/node_modules/@alanszp/errors/node_modules/@alanszp/core/dist/assignKey.d.ts +2 -0
  33. package/node_modules/@alanszp/errors/node_modules/@alanszp/core/dist/assignKey.js +20 -0
  34. package/node_modules/@alanszp/errors/node_modules/@alanszp/core/dist/assignKey.js.map +1 -0
  35. package/node_modules/@alanszp/errors/node_modules/@alanszp/core/dist/editable/index.d.ts +2 -0
  36. package/node_modules/@alanszp/errors/node_modules/@alanszp/core/dist/editable/index.js +19 -0
  37. package/node_modules/@alanszp/errors/node_modules/@alanszp/core/dist/editable/index.js.map +1 -0
  38. package/node_modules/@alanszp/errors/node_modules/@alanszp/core/dist/editable/keepOrUpdate.d.ts +3 -0
  39. package/node_modules/@alanszp/errors/node_modules/@alanszp/core/dist/editable/keepOrUpdate.js +26 -0
  40. package/node_modules/@alanszp/errors/node_modules/@alanszp/core/dist/editable/keepOrUpdate.js.map +1 -0
  41. package/node_modules/@alanszp/errors/node_modules/@alanszp/core/dist/editable/types.d.ts +6 -0
  42. package/node_modules/@alanszp/errors/{dist/errors/RenderableError.js → node_modules/@alanszp/core/dist/editable/types.js} +1 -1
  43. package/node_modules/@alanszp/errors/node_modules/@alanszp/core/dist/editable/types.js.map +1 -0
  44. package/node_modules/@alanszp/errors/node_modules/@alanszp/core/dist/index.d.ts +4 -0
  45. package/node_modules/@alanszp/errors/node_modules/@alanszp/core/dist/index.js +21 -0
  46. package/node_modules/@alanszp/errors/node_modules/@alanszp/core/dist/index.js.map +1 -0
  47. package/node_modules/@alanszp/errors/node_modules/@alanszp/core/dist/lists/ListResult.d.ts +7 -0
  48. package/node_modules/@alanszp/errors/node_modules/@alanszp/core/dist/lists/ListResult.js +8 -0
  49. package/node_modules/@alanszp/errors/node_modules/@alanszp/core/dist/lists/ListResult.js.map +1 -0
  50. package/node_modules/@alanszp/errors/node_modules/@alanszp/core/dist/lists/Orderable.d.ts +11 -0
  51. package/node_modules/@alanszp/errors/node_modules/@alanszp/core/dist/lists/Orderable.js +13 -0
  52. package/node_modules/@alanszp/errors/node_modules/@alanszp/core/dist/lists/Orderable.js.map +1 -0
  53. package/node_modules/@alanszp/errors/node_modules/@alanszp/core/dist/lists/Paginable.d.ts +14 -0
  54. package/node_modules/@alanszp/errors/node_modules/@alanszp/core/dist/lists/Paginable.js +22 -0
  55. package/node_modules/@alanszp/errors/node_modules/@alanszp/core/dist/lists/Paginable.js.map +1 -0
  56. package/node_modules/@alanszp/errors/node_modules/@alanszp/core/dist/lists/index.d.ts +3 -0
  57. package/node_modules/@alanszp/errors/node_modules/@alanszp/core/dist/lists/index.js +20 -0
  58. package/node_modules/@alanszp/errors/node_modules/@alanszp/core/dist/lists/index.js.map +1 -0
  59. package/node_modules/@alanszp/errors/node_modules/@alanszp/core/package.json +25 -0
  60. package/node_modules/@alanszp/errors/node_modules/@alanszp/core/tsconfig.json +15 -0
  61. package/node_modules/@alanszp/errors/package.json +6 -2
  62. package/node_modules/@alanszp/errors/src/HttpRenderableError.ts +5 -0
  63. package/node_modules/@alanszp/errors/src/{errors/http/InternalServerError.ts → InternalServerError.ts} +8 -10
  64. package/node_modules/@alanszp/errors/src/RenderableError.ts +37 -0
  65. package/node_modules/@alanszp/errors/src/index.ts +4 -3
  66. package/node_modules/@alanszp/express/dist/helpers/renderErrorJson.d.ts +4 -0
  67. package/node_modules/@alanszp/express/dist/helpers/renderErrorJson.js +32 -0
  68. package/node_modules/@alanszp/express/dist/helpers/renderErrorJson.js.map +1 -0
  69. package/node_modules/@alanszp/express/dist/index.d.ts +0 -1
  70. package/node_modules/@alanszp/express/dist/index.js +0 -1
  71. package/node_modules/@alanszp/express/dist/index.js.map +1 -1
  72. package/node_modules/@alanszp/express/dist/middlewares/authedForOrg.js +3 -4
  73. package/node_modules/@alanszp/express/dist/middlewares/authedForOrg.js.map +1 -1
  74. package/node_modules/@alanszp/express/dist/middlewares/authenticateUser.js +4 -5
  75. package/node_modules/@alanszp/express/dist/middlewares/authenticateUser.js.map +1 -1
  76. package/node_modules/@alanszp/express/dist/middlewares/createContext.js +2 -2
  77. package/node_modules/@alanszp/express/dist/middlewares/createContext.js.map +1 -1
  78. package/node_modules/@alanszp/express/dist/middlewares/createContext.test.js +3 -3
  79. package/node_modules/@alanszp/express/dist/middlewares/createContext.test.js.map +1 -1
  80. package/node_modules/@alanszp/express/dist/middlewares/hasRoles.js +2 -3
  81. package/node_modules/@alanszp/express/dist/middlewares/hasRoles.js.map +1 -1
  82. package/node_modules/@alanszp/express/dist/middlewares/jsonBodyParser.js +3 -4
  83. package/node_modules/@alanszp/express/dist/middlewares/jsonBodyParser.js.map +1 -1
  84. package/node_modules/@alanszp/express/dist/middlewares/returnInternalServerError.js +1 -2
  85. package/node_modules/@alanszp/express/dist/middlewares/returnInternalServerError.js.map +1 -1
  86. package/node_modules/@alanszp/express/dist/middlewares/returnNotFound.js +2 -3
  87. package/node_modules/@alanszp/express/dist/middlewares/returnNotFound.js.map +1 -1
  88. package/node_modules/@alanszp/express/package.json +7 -7
  89. package/node_modules/@alanszp/express/src/helpers/renderErrorJson.ts +29 -0
  90. package/node_modules/@alanszp/express/src/index.ts +0 -1
  91. package/node_modules/@alanszp/express/src/middlewares/authedForOrg.ts +3 -4
  92. package/node_modules/@alanszp/express/src/middlewares/authenticateUser.ts +7 -10
  93. package/node_modules/@alanszp/express/src/middlewares/createContext.test.ts +1 -1
  94. package/node_modules/@alanszp/express/src/middlewares/createContext.ts +1 -1
  95. package/node_modules/@alanszp/express/src/middlewares/hasRoles.ts +2 -3
  96. package/node_modules/@alanszp/express/src/middlewares/jsonBodyParser.ts +3 -4
  97. package/node_modules/@alanszp/express/src/middlewares/returnInternalServerError.ts +1 -2
  98. package/node_modules/@alanszp/express/src/middlewares/returnNotFound.ts +2 -3
  99. package/node_modules/@alanszp/jwt/package.json +2 -2
  100. package/node_modules/@alanszp/logger/package.json +2 -2
  101. package/package.json +7 -6
  102. package/src/commonErrorsHandler.ts +35 -16
  103. package/node_modules/@alanszp/errors/dist/errors/BaseError.js.map +0 -1
  104. package/node_modules/@alanszp/errors/dist/errors/RenderableError.d.ts +0 -6
  105. package/node_modules/@alanszp/errors/dist/errors/RenderableError.js.map +0 -1
  106. package/node_modules/@alanszp/errors/dist/errors/http/BadRequestError.d.ts +0 -8
  107. package/node_modules/@alanszp/errors/dist/errors/http/BadRequestError.js +0 -20
  108. package/node_modules/@alanszp/errors/dist/errors/http/BadRequestError.js.map +0 -1
  109. package/node_modules/@alanszp/errors/dist/errors/http/HttpError.d.ts +0 -8
  110. package/node_modules/@alanszp/errors/dist/errors/http/HttpError.js +0 -18
  111. package/node_modules/@alanszp/errors/dist/errors/http/HttpError.js.map +0 -1
  112. package/node_modules/@alanszp/errors/dist/errors/http/InternalServerError.d.ts +0 -8
  113. package/node_modules/@alanszp/errors/dist/errors/http/InternalServerError.js +0 -32
  114. package/node_modules/@alanszp/errors/dist/errors/http/InternalServerError.js.map +0 -1
  115. package/node_modules/@alanszp/errors/dist/errors/http/NotFoundError.d.ts +0 -4
  116. package/node_modules/@alanszp/errors/dist/errors/http/NotFoundError.js +0 -11
  117. package/node_modules/@alanszp/errors/dist/errors/http/NotFoundError.js.map +0 -1
  118. package/node_modules/@alanszp/errors/dist/errors/http/UnauthorizedError.d.ts +0 -8
  119. package/node_modules/@alanszp/errors/dist/errors/http/UnauthorizedError.js +0 -20
  120. package/node_modules/@alanszp/errors/dist/errors/http/UnauthorizedError.js.map +0 -1
  121. package/node_modules/@alanszp/errors/dist/errors/http/index.d.ts +0 -5
  122. package/node_modules/@alanszp/errors/dist/errors/http/index.js.map +0 -1
  123. package/node_modules/@alanszp/errors/src/errors/RenderableError.ts +0 -7
  124. package/node_modules/@alanszp/errors/src/errors/http/BadRequestError.ts +0 -21
  125. package/node_modules/@alanszp/errors/src/errors/http/HttpError.ts +0 -19
  126. package/node_modules/@alanszp/errors/src/errors/http/NotFoundError.ts +0 -7
  127. package/node_modules/@alanszp/errors/src/errors/http/UnauthorizedError.ts +0 -21
  128. package/node_modules/@alanszp/errors/src/errors/http/index.ts +0 -5
  129. package/node_modules/@alanszp/express/dist/helpers/appIdentifier.js.map +0 -1
  130. package/node_modules/@alanszp/express/dist/views/errorView.d.ts +0 -2
  131. package/node_modules/@alanszp/express/dist/views/errorView.js +0 -14
  132. package/node_modules/@alanszp/express/dist/views/errorView.js.map +0 -1
  133. package/node_modules/@alanszp/express/src/helpers/appIdentifier.ts +0 -5
  134. package/node_modules/@alanszp/express/src/views/errorView.ts +0 -11
  135. /package/node_modules/@alanszp/errors/dist/{errors/BaseError.d.ts → BaseError.d.ts} +0 -0
  136. /package/node_modules/@alanszp/errors/dist/{errors/BaseError.js → BaseError.js} +0 -0
  137. /package/node_modules/@alanszp/{express/dist/helpers → errors/node_modules/@alanszp/core/dist/app}/appIdentifier.d.ts +0 -0
  138. /package/node_modules/@alanszp/{express/dist/helpers → errors/node_modules/@alanszp/core/dist/app}/appIdentifier.js +0 -0
  139. /package/node_modules/@alanszp/errors/src/{errors/BaseError.ts → BaseError.ts} +0 -0
@@ -1,11 +1,10 @@
1
- import { NotFoundError, UnauthorizedError } from "@alanszp/errors";
2
- import { errorView } from "../views/errorView";
3
1
  import { NextFunction, Response } from "express";
4
2
  import { getRequestLogger } from "../helpers/getRequestLogger";
5
3
  import { GenericRequest } from "../types/GenericRequest";
4
+ import { render401Error, render404Error } from "../helpers/renderErrorJson";
6
5
 
7
6
  function response401(res: Response): void {
8
- res.status(401).json(errorView(new UnauthorizedError(["jwt"])));
7
+ res.status(401).json(render401Error(["jwt"]));
9
8
  }
10
9
 
11
10
  export function authForOrg(
@@ -46,6 +45,6 @@ export function authForOrg(
46
45
  logger.info("middleware.authForOrg.error.noOrganization", {
47
46
  error,
48
47
  });
49
- res.status(404).json(errorView(new NotFoundError()));
48
+ res.status(404).json(render404Error());
50
49
  }
51
50
  }
@@ -1,11 +1,10 @@
1
1
  import { JWTUser, verifyJWT, VerifyOptions } from "@alanszp/jwt";
2
- import { UnauthorizedError } from "@alanszp/errors";
3
- import { errorView } from "../views/errorView";
4
2
  import { NextFunction, Response } from "express";
5
3
  import { getRequestLogger } from "../helpers/getRequestLogger";
6
4
  import { GenericRequest } from "../types/GenericRequest";
7
5
  import { ILogger } from "@alanszp/logger";
8
6
  import { compact, isEmpty, omit } from "lodash";
7
+ import { render401Error } from "../helpers/renderErrorJson";
9
8
 
10
9
  function parseAuthorizationHeader(
11
10
  authorization: string | undefined
@@ -143,13 +142,11 @@ export function createAuthContext<Options extends AuthOptions>(
143
142
  res
144
143
  .status(401)
145
144
  .json(
146
- errorView(
147
- new UnauthorizedError([
148
- authAttempts.includes(null)
149
- ? `Token invalid for methods ${authMethods}`
150
- : `Token not set for methods ${authMethods}`,
151
- ])
152
- )
145
+ render401Error([
146
+ authAttempts.includes(null)
147
+ ? `Token invalid for methods ${authMethods}`
148
+ : `Token not set for methods ${authMethods}`,
149
+ ])
153
150
  );
154
151
  return;
155
152
  }
@@ -167,7 +164,7 @@ export function createAuthContext<Options extends AuthOptions>(
167
164
  methods: AuthMethods,
168
165
  error,
169
166
  });
170
- res.status(401).json(errorView(new UnauthorizedError(authMethods)));
167
+ res.status(401).json(render401Error(authMethods));
171
168
  }
172
169
  };
173
170
  };
@@ -8,7 +8,7 @@ import {
8
8
  mockRequestWithBody,
9
9
  mockResponse,
10
10
  } from "../test/mocks/expressMocks";
11
- import { appIdentifier } from "../helpers/appIdentifier";
11
+ import { appIdentifier } from "@alanszp/core";
12
12
  jest.mock("@alanszp/shared-context");
13
13
 
14
14
  const logger = createMockLogger({});
@@ -2,7 +2,7 @@ import { createId } from "@paralleldrive/cuid2";
2
2
  import { NextFunction, Response } from "express";
3
3
  import { ILogger } from "@alanszp/logger";
4
4
  import { Audit } from "@alanszp/audit";
5
- import { appIdentifier } from "../helpers/appIdentifier";
5
+ import { appIdentifier } from "@alanszp/core";
6
6
  import { GenericRequest } from "../types/GenericRequest";
7
7
  import { SharedContext } from "@alanszp/shared-context";
8
8
  import { compact } from "lodash";
@@ -1,10 +1,9 @@
1
- import { UnauthorizedError } from "@alanszp/errors";
2
- import { errorView } from "../views/errorView";
3
1
  import { NextFunction, Response } from "express";
4
2
  import { GenericRequest } from "../types/GenericRequest";
3
+ import { render401Error } from "../helpers/renderErrorJson";
5
4
 
6
5
  function response401(res: Response): void {
7
- res.status(401).json(errorView(new UnauthorizedError(["permissions"])));
6
+ res.status(401).json(render401Error(["permissions"]));
8
7
  }
9
8
 
10
9
  export function hasRoles(
@@ -1,8 +1,7 @@
1
1
  import { json, OptionsJson } from "body-parser";
2
2
  import { NextFunction, Response } from "express";
3
- import { BadRequestError } from "@alanszp/errors";
4
- import { errorView } from "../views/errorView";
5
3
  import { GenericRequest } from "../types/GenericRequest";
4
+ import { render400Error } from "../helpers/renderErrorJson";
6
5
 
7
6
  export function jsonBodyParser(options?: OptionsJson) {
8
7
  const bodyParser = json({ limit: "1mb", ...options });
@@ -14,10 +13,10 @@ export function jsonBodyParser(options?: OptionsJson) {
14
13
  try {
15
14
  bodyParser(req, res, (error?: unknown) => {
16
15
  if (!error) return next();
17
- res.status(400).json(errorView(new BadRequestError("Malformed JSON")));
16
+ res.status(400).json(render400Error("Malformed JSON"));
18
17
  });
19
18
  } catch (error: unknown) {
20
- res.status(400).json(errorView(new BadRequestError("Malformed JSON")));
19
+ res.status(400).json(render400Error("Malformed JSON"));
21
20
  }
22
21
  };
23
22
  }
@@ -1,6 +1,5 @@
1
1
  import { ErrorRequestHandler, NextFunction, Response } from "express";
2
2
  import { InternalServerError } from "@alanszp/errors";
3
- import { errorView } from "../views/errorView";
4
3
  import { GenericRequest } from "../types/GenericRequest";
5
4
  import { ILogger } from "@alanszp/logger";
6
5
 
@@ -11,6 +10,6 @@ export type GetInternalServerErrorMiddleware = (
11
10
  export const returnInternalServerError: GetInternalServerErrorMiddleware =
12
11
  (getLogger: () => ILogger) =>
13
12
  (error: unknown, req: GenericRequest, res: Response, _next: NextFunction) => {
14
- res.status(500).json(errorView(new InternalServerError(error)));
13
+ res.status(500).json(new InternalServerError(error).toView());
15
14
  getLogger().error("error_to_client", { error });
16
15
  };
@@ -1,12 +1,11 @@
1
1
  import { NextFunction, Response } from "express";
2
- import { NotFoundError } from "@alanszp/errors";
3
- import { errorView } from "../views/errorView";
4
2
  import { GenericRequest } from "../types/GenericRequest";
3
+ import { render404Error } from "../helpers/renderErrorJson";
5
4
 
6
5
  export function returnNotFound(
7
6
  _req: GenericRequest,
8
7
  res: Response,
9
8
  _next: NextFunction
10
9
  ): void {
11
- res.status(404).json(errorView(new NotFoundError()));
10
+ res.status(404).json(render404Error());
12
11
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@alanszp/jwt",
3
- "version": "11.0.0",
3
+ "version": "12.0.0",
4
4
  "description": "Alan's jwt validator & signer.",
5
5
  "main": "dist/index.js",
6
6
  "typings": "dist/index.d.ts",
@@ -26,5 +26,5 @@
26
26
  "dependencies": {
27
27
  "jose": "^5.2.2"
28
28
  },
29
- "gitHead": "60b62fa2fff34ef094ea9af69c2bed2373c70f64"
29
+ "gitHead": "085a76a387bc0e272e09e9cb1b6f48f814512940"
30
30
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@alanszp/logger",
3
- "version": "11.0.0",
3
+ "version": "12.0.0",
4
4
  "description": "Alan's logger util.",
5
5
  "main": "dist/index.js",
6
6
  "typings": "dist/index.d.ts",
@@ -32,5 +32,5 @@
32
32
  "tslint": "^5.11.0",
33
33
  "typescript": "^4.3.4"
34
34
  },
35
- "gitHead": "60b62fa2fff34ef094ea9af69c2bed2373c70f64"
35
+ "gitHead": "085a76a387bc0e272e09e9cb1b6f48f814512940"
36
36
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@alanszp/express-common-fn",
3
- "version": "11.0.0",
3
+ "version": "12.0.0",
4
4
  "description": "Alan's express function to handle common errors and format uniformly.",
5
5
  "main": "dist/index.js",
6
6
  "typings": "dist/index.d.ts",
@@ -19,10 +19,11 @@
19
19
  "yalc-publish": "yarn run yalc publish"
20
20
  },
21
21
  "dependencies": {
22
- "@alanszp/errors": "^11.0.0",
23
- "@alanszp/express": "^11.0.0",
24
- "@alanszp/logger": "^11.0.0",
25
- "@alanszp/validations": "^11.0.0"
22
+ "@alanszp/core": "^12.0.0",
23
+ "@alanszp/errors": "^12.0.0",
24
+ "@alanszp/express": "^12.0.0",
25
+ "@alanszp/logger": "^12.0.0",
26
+ "@alanszp/validations": "^12.0.0"
26
27
  },
27
28
  "peerDependencies": {
28
29
  "express": "^4.17.1",
@@ -34,5 +35,5 @@
34
35
  "typeorm": "^0.2.34",
35
36
  "typescript": "4.7.4"
36
37
  },
37
- "gitHead": "60b62fa2fff34ef094ea9af69c2bed2373c70f64"
38
+ "gitHead": "085a76a387bc0e272e09e9cb1b6f48f814512940"
38
39
  }
@@ -1,11 +1,11 @@
1
- import { errorView } from "@alanszp/express";
1
+ import { appIdentifier } from "@alanszp/core";
2
2
  import {
3
- BadRequestError,
4
3
  InternalServerError,
5
- NotFoundError,
4
+ RenderableError,
5
+ HttpRenderableError,
6
+ RenderableView,
6
7
  } from "@alanszp/errors";
7
8
  import { Context, ILogger } from "@alanszp/logger";
8
- import { ModelValidationError } from "@alanszp/validations";
9
9
  import { Response } from "express";
10
10
  import { EntityNotFoundError, QueryFailedError } from "typeorm";
11
11
 
@@ -19,6 +19,24 @@ const defaultsOption: CommonErrorOptions = {
19
19
  extraContext: {},
20
20
  };
21
21
 
22
+ function render404Error(): RenderableView {
23
+ return {
24
+ code: "not_found",
25
+ message: "Not Found",
26
+ context: {},
27
+ origin: appIdentifier(),
28
+ };
29
+ }
30
+
31
+ function render400Error(message: string): RenderableView {
32
+ return {
33
+ code: "bad_request",
34
+ message,
35
+ context: {},
36
+ origin: appIdentifier(),
37
+ };
38
+ }
39
+
22
40
  export function commonErrorsHandler(loggerFn: () => ILogger) {
23
41
  return function handleCommonErrors(
24
42
  error: unknown,
@@ -34,9 +52,14 @@ export function commonErrorsHandler(loggerFn: () => ILogger) {
34
52
  };
35
53
  const instanceLogger = logger.child(opts.extraContext);
36
54
 
37
- if (error instanceof ModelValidationError) {
38
- instanceLogger.info(`${baseLog}.error.validation`, { error });
39
- res.status(400).json(errorView(error));
55
+ if (error instanceof RenderableError) {
56
+ const statusCode =
57
+ error instanceof HttpRenderableError ? error.httpCode() : 500;
58
+ instanceLogger.info(`${baseLog}.error.${error.code()}`, {
59
+ statusCode,
60
+ error,
61
+ });
62
+ res.status(statusCode).json(error.toView());
40
63
  return;
41
64
  }
42
65
 
@@ -45,11 +68,9 @@ export function commonErrorsHandler(loggerFn: () => ILogger) {
45
68
  error,
46
69
  });
47
70
  if (opts.entityNotFound === 400) {
48
- res
49
- .status(400)
50
- .json(errorView(new BadRequestError("Entity not present")));
71
+ res.status(400).json(render400Error("Entity not present"));
51
72
  } else {
52
- res.status(404).json(errorView(new NotFoundError()));
73
+ res.status(404).json(render404Error());
53
74
  }
54
75
  return;
55
76
  }
@@ -59,19 +80,17 @@ export function commonErrorsHandler(loggerFn: () => ILogger) {
59
80
  instanceLogger.info(`${baseLog}.error.typeorm.query_error.duplicate`, {
60
81
  error,
61
82
  });
62
- res
63
- .status(400)
64
- .json(errorView(new BadRequestError("Entity already exists")));
83
+ res.status(400).json(render400Error("Entity already exists"));
65
84
  } else {
66
85
  instanceLogger.error(`${baseLog}.error.typeorm.query_error.unknown`, {
67
86
  error,
68
87
  });
69
- res.status(500).json(errorView(new InternalServerError(error)));
88
+ res.status(500).json(new InternalServerError(error).toView());
70
89
  }
71
90
  return;
72
91
  }
73
92
 
74
93
  instanceLogger.error(`${baseLog}.error.unknown`, { error });
75
- res.status(500).json(errorView(new InternalServerError(error)));
94
+ res.status(500).json(new InternalServerError(error).toView());
76
95
  };
77
96
  }
@@ -1 +0,0 @@
1
- {"version":3,"file":"BaseError.js","sourceRoot":"","sources":["../../src/errors/BaseError.ts"],"names":[],"mappings":";;;AAAA,MAAa,SAAU,SAAQ,KAAK;IAClC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QAEf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;QAClC,IAAI,OAAO,KAAK,CAAC,iBAAiB,KAAK,UAAU,EAAE;YACjD,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;SACjD;aAAM;YACL,IAAI,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC;SAC5C;QAED,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;IAC1D,CAAC;CACF;AAbD,8BAaC"}
@@ -1,6 +0,0 @@
1
- export declare type RenderableContext = Record<string, unknown>;
2
- export interface RenderableError {
3
- code(): string;
4
- renderMessage(): string;
5
- context(): RenderableContext;
6
- }
@@ -1 +0,0 @@
1
- {"version":3,"file":"RenderableError.js","sourceRoot":"","sources":["../../src/errors/RenderableError.ts"],"names":[],"mappings":""}
@@ -1,8 +0,0 @@
1
- import { RenderableContext } from "../RenderableError";
2
- import { HttpError } from "./HttpError";
3
- export declare class BadRequestError extends HttpError {
4
- private errors;
5
- constructor(errors: string[] | string);
6
- renderMessage(): string;
7
- context(): RenderableContext;
8
- }
@@ -1,20 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.BadRequestError = void 0;
4
- const HttpError_1 = require("./HttpError");
5
- class BadRequestError extends HttpError_1.HttpError {
6
- constructor(errors) {
7
- super();
8
- this.errors = errors;
9
- }
10
- renderMessage() {
11
- return "Bad Request";
12
- }
13
- context() {
14
- return {
15
- errors: this.errors,
16
- };
17
- }
18
- }
19
- exports.BadRequestError = BadRequestError;
20
- //# sourceMappingURL=BadRequestError.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"BadRequestError.js","sourceRoot":"","sources":["../../../src/errors/http/BadRequestError.ts"],"names":[],"mappings":";;;AACA,2CAAwC;AAExC,MAAa,eAAgB,SAAQ,qBAAS;IAG5C,YAAmB,MAAyB;QAC1C,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAEM,aAAa;QAClB,OAAO,aAAa,CAAC;IACvB,CAAC;IAEM,OAAO;QACZ,OAAO;YACL,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB,CAAC;IACJ,CAAC;CACF;AAjBD,0CAiBC"}
@@ -1,8 +0,0 @@
1
- import { BaseError } from "../BaseError";
2
- import { RenderableContext, RenderableError } from "../RenderableError";
3
- export declare abstract class HttpError extends BaseError implements RenderableError {
4
- constructor();
5
- abstract renderMessage(): string;
6
- code(): string;
7
- context(): RenderableContext;
8
- }
@@ -1,18 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.HttpError = void 0;
4
- const lodash_1 = require("lodash");
5
- const BaseError_1 = require("../BaseError");
6
- class HttpError extends BaseError_1.BaseError {
7
- constructor() {
8
- super("HttpError");
9
- }
10
- code() {
11
- return (0, lodash_1.snakeCase)(this.renderMessage());
12
- }
13
- context() {
14
- return {};
15
- }
16
- }
17
- exports.HttpError = HttpError;
18
- //# sourceMappingURL=HttpError.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"HttpError.js","sourceRoot":"","sources":["../../../src/errors/http/HttpError.ts"],"names":[],"mappings":";;;AAAA,mCAAmC;AACnC,4CAAyC;AAGzC,MAAsB,SAAU,SAAQ,qBAAS;IAC/C;QACE,KAAK,CAAC,WAAW,CAAC,CAAC;IACrB,CAAC;IAIM,IAAI;QACT,OAAO,IAAA,kBAAS,EAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;IACzC,CAAC;IAEM,OAAO;QACZ,OAAO,EAAE,CAAC;IACZ,CAAC;CACF;AAdD,8BAcC"}
@@ -1,8 +0,0 @@
1
- import { RenderableContext } from "../RenderableError";
2
- import { HttpError } from "./HttpError";
3
- export declare class InternalServerError extends HttpError {
4
- error: any;
5
- constructor(error?: unknown);
6
- renderMessage(): string;
7
- context(): RenderableContext;
8
- }
@@ -1,32 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.InternalServerError = void 0;
4
- const HttpError_1 = require("./HttpError");
5
- class InternalServerError extends HttpError_1.HttpError {
6
- constructor(error) {
7
- super();
8
- this.error = error;
9
- }
10
- renderMessage() {
11
- return "Internal Server Error";
12
- }
13
- context() {
14
- if (process.env.NODE_ENV === "production") {
15
- return {};
16
- }
17
- return {
18
- error: {
19
- name: this.error.name,
20
- message: this.error.message,
21
- code: this.error.code,
22
- context: this.error.context,
23
- renderMessage: this.error.renderMessage,
24
- stack: this.error.stack,
25
- status: this.error.status,
26
- signal: this.error.signal,
27
- },
28
- };
29
- }
30
- }
31
- exports.InternalServerError = InternalServerError;
32
- //# sourceMappingURL=InternalServerError.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"InternalServerError.js","sourceRoot":"","sources":["../../../src/errors/http/InternalServerError.ts"],"names":[],"mappings":";;;AACA,2CAAwC;AAExC,MAAa,mBAAoB,SAAQ,qBAAS;IAGhD,YAAY,KAAe;QACzB,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAEM,aAAa;QAClB,OAAO,uBAAuB,CAAC;IACjC,CAAC;IAEM,OAAO;QACZ,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,EAAE;YACzC,OAAO,EAAE,CAAC;SACX;QAED,OAAO;YACL,KAAK,EAAE;gBACL,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI;gBACrB,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO;gBAC3B,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI;gBACrB,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO;gBAC3B,aAAa,EAAE,IAAI,CAAC,KAAK,CAAC,aAAa;gBACvC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK;gBACvB,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM;gBACzB,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM;aAC1B;SACF,CAAC;IACJ,CAAC;CACF;AA9BD,kDA8BC"}
@@ -1,4 +0,0 @@
1
- import { HttpError } from "./HttpError";
2
- export declare class NotFoundError extends HttpError {
3
- renderMessage(): string;
4
- }
@@ -1,11 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.NotFoundError = void 0;
4
- const HttpError_1 = require("./HttpError");
5
- class NotFoundError extends HttpError_1.HttpError {
6
- renderMessage() {
7
- return "Not Found";
8
- }
9
- }
10
- exports.NotFoundError = NotFoundError;
11
- //# sourceMappingURL=NotFoundError.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"NotFoundError.js","sourceRoot":"","sources":["../../../src/errors/http/NotFoundError.ts"],"names":[],"mappings":";;;AAAA,2CAAwC;AAExC,MAAa,aAAc,SAAQ,qBAAS;IACnC,aAAa;QAClB,OAAO,WAAW,CAAC;IACrB,CAAC;CACF;AAJD,sCAIC"}
@@ -1,8 +0,0 @@
1
- import { RenderableContext } from "../RenderableError";
2
- import { HttpError } from "./HttpError";
3
- export declare class UnauthorizedError extends HttpError {
4
- requiredChecks: any;
5
- constructor(requiredChecks: string[]);
6
- renderMessage(): string;
7
- context(): RenderableContext;
8
- }
@@ -1,20 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.UnauthorizedError = void 0;
4
- const HttpError_1 = require("./HttpError");
5
- class UnauthorizedError extends HttpError_1.HttpError {
6
- constructor(requiredChecks) {
7
- super();
8
- this.requiredChecks = requiredChecks;
9
- }
10
- renderMessage() {
11
- return "Unauthorized Error";
12
- }
13
- context() {
14
- return {
15
- requiredChecks: this.requiredChecks,
16
- };
17
- }
18
- }
19
- exports.UnauthorizedError = UnauthorizedError;
20
- //# sourceMappingURL=UnauthorizedError.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"UnauthorizedError.js","sourceRoot":"","sources":["../../../src/errors/http/UnauthorizedError.ts"],"names":[],"mappings":";;;AACA,2CAAwC;AAExC,MAAa,iBAAkB,SAAQ,qBAAS;IAG9C,YAAmB,cAAwB;QACzC,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;IACvC,CAAC;IAEM,aAAa;QAClB,OAAO,oBAAoB,CAAC;IAC9B,CAAC;IAEM,OAAO;QACZ,OAAO;YACL,cAAc,EAAE,IAAI,CAAC,cAAc;SACpC,CAAC;IACJ,CAAC;CACF;AAjBD,8CAiBC"}
@@ -1,5 +0,0 @@
1
- export * from "./HttpError";
2
- export * from "./BadRequestError";
3
- export * from "./UnauthorizedError";
4
- export * from "./InternalServerError";
5
- export * from "./NotFoundError";
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/errors/http/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,8CAA4B;AAC5B,oDAAkC;AAClC,sDAAoC;AACpC,wDAAsC;AACtC,kDAAgC"}
@@ -1,7 +0,0 @@
1
- export type RenderableContext = Record<string, unknown>;
2
-
3
- export interface RenderableError {
4
- code(): string;
5
- renderMessage(): string;
6
- context(): RenderableContext;
7
- }
@@ -1,21 +0,0 @@
1
- import { RenderableContext } from "../RenderableError";
2
- import { HttpError } from "./HttpError";
3
-
4
- export class BadRequestError extends HttpError {
5
- private errors;
6
-
7
- public constructor(errors: string[] | string) {
8
- super();
9
- this.errors = errors;
10
- }
11
-
12
- public renderMessage(): string {
13
- return "Bad Request";
14
- }
15
-
16
- public context(): RenderableContext {
17
- return {
18
- errors: this.errors,
19
- };
20
- }
21
- }
@@ -1,19 +0,0 @@
1
- import { snakeCase } from "lodash";
2
- import { BaseError } from "../BaseError";
3
- import { RenderableContext, RenderableError } from "../RenderableError";
4
-
5
- export abstract class HttpError extends BaseError implements RenderableError {
6
- constructor() {
7
- super("HttpError");
8
- }
9
-
10
- public abstract renderMessage(): string;
11
-
12
- public code(): string {
13
- return snakeCase(this.renderMessage());
14
- }
15
-
16
- public context(): RenderableContext {
17
- return {};
18
- }
19
- }
@@ -1,7 +0,0 @@
1
- import { HttpError } from "./HttpError";
2
-
3
- export class NotFoundError extends HttpError {
4
- public renderMessage(): string {
5
- return "Not Found";
6
- }
7
- }
@@ -1,21 +0,0 @@
1
- import { RenderableContext } from "../RenderableError";
2
- import { HttpError } from "./HttpError";
3
-
4
- export class UnauthorizedError extends HttpError {
5
- public requiredChecks;
6
-
7
- public constructor(requiredChecks: string[]) {
8
- super();
9
- this.requiredChecks = requiredChecks;
10
- }
11
-
12
- public renderMessage(): string {
13
- return "Unauthorized Error";
14
- }
15
-
16
- public context(): RenderableContext {
17
- return {
18
- requiredChecks: this.requiredChecks,
19
- };
20
- }
21
- }
@@ -1,5 +0,0 @@
1
- export * from "./HttpError";
2
- export * from "./BadRequestError";
3
- export * from "./UnauthorizedError";
4
- export * from "./InternalServerError";
5
- export * from "./NotFoundError";
@@ -1 +0,0 @@
1
- {"version":3,"file":"appIdentifier.js","sourceRoot":"","sources":["../../src/helpers/appIdentifier.ts"],"names":[],"mappings":";;;AAAA,SAAgB,aAAa;IAC3B,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,WAAW,CAAC;IAC3D,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,aAAa,CAAC;IAClD,OAAO,GAAG,OAAO,IAAI,GAAG,EAAE,CAAC;AAC7B,CAAC;AAJD,sCAIC"}
@@ -1,2 +0,0 @@
1
- import { RenderableError } from "@alanszp/errors";
2
- export declare function errorView(err: RenderableError): unknown;
@@ -1,14 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.errorView = void 0;
4
- const appIdentifier_1 = require("../helpers/appIdentifier");
5
- function errorView(err) {
6
- return {
7
- code: err.code(),
8
- message: err.renderMessage(),
9
- context: err.context(),
10
- origin: (0, appIdentifier_1.appIdentifier)(),
11
- };
12
- }
13
- exports.errorView = errorView;
14
- //# sourceMappingURL=errorView.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"errorView.js","sourceRoot":"","sources":["../../src/views/errorView.ts"],"names":[],"mappings":";;;AACA,4DAAyD;AAEzD,SAAgB,SAAS,CAAC,GAAoB;IAC5C,OAAO;QACL,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE;QAChB,OAAO,EAAE,GAAG,CAAC,aAAa,EAAE;QAC5B,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE;QACtB,MAAM,EAAE,IAAA,6BAAa,GAAE;KACxB,CAAC;AACJ,CAAC;AAPD,8BAOC"}
@@ -1,5 +0,0 @@
1
- export function appIdentifier() {
2
- const appName = process.env.API_ORIGIN_NAME || "undefined";
3
- const env = process.env.NODE_ENV || "development";
4
- return `${appName}:${env}`;
5
- }