@naturalcycles/backend-lib 2.73.3 → 3.3.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 (98) hide show
  1. package/dist/admin/admin.mw.d.ts +4 -4
  2. package/dist/admin/base.admin.service.d.ts +11 -12
  3. package/dist/db/httpDBRequestHandler.d.ts +2 -2
  4. package/dist/deploy/deployPrepare.js +1 -0
  5. package/dist/index.d.ts +25 -24
  6. package/dist/index.js +28 -50
  7. package/dist/sentry/sentry.shared.service.d.ts +3 -3
  8. package/dist/server/appEngineLogMiddleware.d.ts +13 -0
  9. package/dist/server/{handlers/createGaeLogMiddleware.js → appEngineLogMiddleware.js} +4 -4
  10. package/dist/server/{handlers/asyncLocalStorage.mw.d.ts → asyncLocalStorageMiddleware.d.ts} +4 -4
  11. package/dist/server/{handlers/asyncLocalStorage.mw.js → asyncLocalStorageMiddleware.js} +5 -5
  12. package/dist/server/{handlers/bodyParserTimeout.mw.d.ts → bodyParserTimeoutMiddleware.d.ts} +4 -4
  13. package/dist/server/{handlers/bodyParserTimeout.mw.js → bodyParserTimeoutMiddleware.js} +10 -7
  14. package/dist/server/catchWrapper.d.ts +2 -2
  15. package/dist/server/createDefaultApp.d.ts +2 -2
  16. package/dist/server/createDefaultApp.js +13 -13
  17. package/dist/server/createDefaultApp.model.d.ts +8 -8
  18. package/dist/server/deployInfo.util.d.ts +2 -2
  19. package/dist/server/genericErrorMiddleware.d.ts +12 -0
  20. package/dist/server/{handlers/genericErrorHandler.mw.js → genericErrorMiddleware.js} +20 -8
  21. package/dist/server/getDefaultRouter.d.ts +2 -2
  22. package/dist/server/methodOverrideMiddleware.d.ts +8 -0
  23. package/dist/server/{handlers/methodOverride.mw.js → methodOverrideMiddleware.js} +3 -3
  24. package/dist/server/notFoundMiddleware.d.ts +2 -0
  25. package/dist/server/notFoundMiddleware.js +10 -0
  26. package/dist/server/okMiddleware.d.ts +2 -0
  27. package/dist/server/{handlers/okHandler.mw.js → okMiddleware.js} +3 -3
  28. package/dist/server/{handlers/reqValidation.mw.d.ts → reqValidationMiddleware.d.ts} +2 -2
  29. package/dist/server/{handlers/reqValidation.mw.js → reqValidationMiddleware.js} +0 -0
  30. package/dist/server/request.log.util.d.ts +2 -2
  31. package/dist/server/request.util.d.ts +10 -2
  32. package/dist/server/request.util.js +8 -0
  33. package/dist/server/requestTimeoutMiddleware.d.ts +31 -0
  34. package/dist/server/requestTimeoutMiddleware.js +68 -0
  35. package/dist/server/{handlers/safeJsonMiddleware.d.ts → safeJsonMiddleware.d.ts} +2 -2
  36. package/dist/server/{handlers/safeJsonMiddleware.js → safeJsonMiddleware.js} +0 -0
  37. package/dist/server/server.model.d.ts +37 -0
  38. package/dist/server/server.model.js +2 -0
  39. package/dist/server/serverStatsMiddleware.d.ts +13 -0
  40. package/dist/server/{handlers/serverStatsMiddleware.js → serverStatsMiddleware.js} +2 -2
  41. package/dist/server/serverStatusMiddleware.d.ts +3 -0
  42. package/dist/server/{handlers/statusHandler.js → serverStatusMiddleware.js} +7 -7
  43. package/dist/server/simpleRequestLoggerMiddleware.d.ts +12 -0
  44. package/dist/server/{handlers/simpleRequestLogger.mw.js → simpleRequestLoggerMiddleware.js} +5 -5
  45. package/dist/server/startServer.model.d.ts +2 -2
  46. package/dist/server/{handlers/validate.mw.d.ts → validateMiddleware.d.ts} +5 -5
  47. package/dist/server/{handlers/validate.mw.js → validateMiddleware.js} +0 -0
  48. package/dist/testing/express.test.service.d.ts +6 -6
  49. package/dist/testing/express.test.service.js +8 -5
  50. package/package.json +1 -2
  51. package/src/admin/admin.mw.ts +7 -4
  52. package/src/admin/base.admin.service.ts +11 -12
  53. package/src/admin/secureHeader.mw.ts +2 -2
  54. package/src/db/httpDBRequestHandler.ts +2 -3
  55. package/src/deploy/deployPrepare.ts +1 -0
  56. package/src/index.ts +54 -68
  57. package/src/sentry/sentry.shared.service.ts +3 -4
  58. package/src/server/{handlers/createGaeLogMiddleware.ts → appEngineLogMiddleware.ts} +4 -25
  59. package/src/server/{handlers/asyncLocalStorage.mw.ts → asyncLocalStorageMiddleware.ts} +5 -5
  60. package/src/server/{handlers/bodyParserTimeout.mw.ts → bodyParserTimeoutMiddleware.ts} +14 -13
  61. package/src/server/catchWrapper.ts +2 -2
  62. package/src/server/createDefaultApp.model.ts +8 -8
  63. package/src/server/createDefaultApp.ts +22 -19
  64. package/src/server/deployInfo.util.ts +1 -1
  65. package/src/server/{handlers/genericErrorHandler.mw.ts → genericErrorMiddleware.ts} +24 -14
  66. package/src/server/getDefaultRouter.ts +2 -2
  67. package/src/server/{handlers/methodOverride.mw.ts → methodOverrideMiddleware.ts} +5 -3
  68. package/src/server/notFoundMiddleware.ts +8 -0
  69. package/src/server/okMiddleware.ts +7 -0
  70. package/src/server/{handlers/reqValidation.mw.ts → reqValidationMiddleware.ts} +2 -2
  71. package/src/server/request.log.util.ts +2 -2
  72. package/src/server/request.util.ts +10 -2
  73. package/src/server/requestTimeoutMiddleware.ts +117 -0
  74. package/src/server/{handlers/safeJsonMiddleware.ts → safeJsonMiddleware.ts} +3 -3
  75. package/src/server/server.model.ts +56 -0
  76. package/src/server/{handlers/serverStatsMiddleware.ts → serverStatsMiddleware.ts} +4 -5
  77. package/src/server/{handlers/statusHandler.ts → serverStatusMiddleware.ts} +5 -5
  78. package/src/server/{handlers/simpleRequestLogger.mw.ts → simpleRequestLoggerMiddleware.ts} +8 -7
  79. package/src/server/startServer.model.ts +2 -2
  80. package/src/server/{handlers/validate.mw.ts → validateMiddleware.ts} +6 -6
  81. package/src/testing/express.test.service.ts +12 -8
  82. package/dist/server/handlers/createGaeLogMiddleware.d.ts +0 -30
  83. package/dist/server/handlers/genericErrorHandler.mw.d.ts +0 -13
  84. package/dist/server/handlers/methodOverride.mw.d.ts +0 -8
  85. package/dist/server/handlers/notFoundHandler.mw.d.ts +0 -2
  86. package/dist/server/handlers/notFoundHandler.mw.js +0 -9
  87. package/dist/server/handlers/okHandler.mw.d.ts +0 -2
  88. package/dist/server/handlers/requestTimeout.mw.d.ts +0 -16
  89. package/dist/server/handlers/requestTimeout.mw.js +0 -34
  90. package/dist/server/handlers/sentryErrorHandler.mw.d.ts +0 -10
  91. package/dist/server/handlers/sentryErrorHandler.mw.js +0 -26
  92. package/dist/server/handlers/serverStatsMiddleware.d.ts +0 -13
  93. package/dist/server/handlers/simpleRequestLogger.mw.d.ts +0 -12
  94. package/dist/server/handlers/statusHandler.d.ts +0 -3
  95. package/src/server/handlers/notFoundHandler.mw.ts +0 -7
  96. package/src/server/handlers/okHandler.mw.ts +0 -7
  97. package/src/server/handlers/requestTimeout.mw.ts +0 -62
  98. package/src/server/handlers/sentryErrorHandler.mw.ts +0 -34
@@ -1,16 +0,0 @@
1
- import { RequestHandler } from 'express';
2
- export interface RequestTimeoutCfg {
3
- /**
4
- * @default 120
5
- */
6
- timeoutSeconds?: number;
7
- /**
8
- * @default 503
9
- */
10
- httpStatusCode?: number;
11
- /**
12
- * @default 'Request timed out'
13
- */
14
- httpErrorMessage?: string;
15
- }
16
- export declare function requestTimeout(cfg?: RequestTimeoutCfg): RequestHandler;
@@ -1,34 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.requestTimeout = void 0;
4
- const js_lib_1 = require("@naturalcycles/js-lib");
5
- const index_1 = require("../../index");
6
- const code = 'REQUEST_TIMEOUT';
7
- const REQUEST_TIMEOUT_QUERY_KEY = 'requestTimeout';
8
- function requestTimeout(cfg = {}) {
9
- const { timeoutSeconds: defTimeoutSeconds, httpStatusCode, httpErrorMessage, } = {
10
- // Considerations about the default value of the timeout.
11
- // Ideally the default value here would be HIGHER than the default timeout for getGot (in nodejs-lib),
12
- // so, cross-service communication has a chance to fail SOONER than server times out,
13
- // so, proper error from exact service is shown, rather than generic "503 request timed out"
14
- timeoutSeconds: 120,
15
- httpStatusCode: 503,
16
- httpErrorMessage: 'Request timed out',
17
- ...cfg,
18
- };
19
- return (req, res, next) => {
20
- const timeoutSeconds = req.query[REQUEST_TIMEOUT_QUERY_KEY]
21
- ? Number.parseInt(req.query[REQUEST_TIMEOUT_QUERY_KEY])
22
- : defTimeoutSeconds;
23
- const timer = setTimeout(() => {
24
- (0, index_1.respondWithError)(req, res, new js_lib_1.HttpError(httpErrorMessage, {
25
- code,
26
- httpStatusCode,
27
- // userFriendly: true, // no, cause this error is not expected
28
- }));
29
- }, timeoutSeconds * 1000);
30
- (0, index_1.onFinished)(res, () => clearTimeout(timer));
31
- next();
32
- };
33
- }
34
- exports.requestTimeout = requestTimeout;
@@ -1,10 +0,0 @@
1
- import { ErrorRequestHandler } from 'express';
2
- import { SentrySharedService } from '../..';
3
- export interface SentryErrorMiddlewareCfg {
4
- sentryService: SentrySharedService;
5
- }
6
- /**
7
- * Mutates err with err.data.errorId.
8
- * Passes error further via next(err).
9
- */
10
- export declare function sentryErrorHandler(cfg: SentryErrorMiddlewareCfg): ErrorRequestHandler;
@@ -1,26 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.sentryErrorHandler = void 0;
4
- /**
5
- * Mutates err with err.data.errorId.
6
- * Passes error further via next(err).
7
- */
8
- function sentryErrorHandler(cfg) {
9
- return (err, req, res, next) => {
10
- if (!err)
11
- return next();
12
- err.data = {
13
- ...err.data,
14
- };
15
- const httpStatusCode = err.data.httpStatusCode || 500;
16
- if (shouldReportToSentry(httpStatusCode)) {
17
- err.data.errorId = cfg.sentryService.captureException(err);
18
- }
19
- next(err);
20
- };
21
- }
22
- exports.sentryErrorHandler = sentryErrorHandler;
23
- function shouldReportToSentry(httpCode) {
24
- // Only report 5xx
25
- return httpCode >= 500;
26
- }
@@ -1,13 +0,0 @@
1
- import { RequestHandler } from 'express';
2
- /**
3
- * Depends on serverStatsMiddleware to work.
4
- *
5
- * @example
6
- *
7
- * router.get('/stats', serverStatsHTMLHandler)
8
- */
9
- export declare const serverStatsHTMLHandler: RequestHandler;
10
- /**
11
- * Unlocks serverStatsHTMLHandler
12
- */
13
- export declare function serverStatsMiddleware(): RequestHandler;
@@ -1,12 +0,0 @@
1
- import { RequestHandler } from 'express';
2
- export interface SimpleRequestLoggerCfg {
3
- /**
4
- * @default false
5
- */
6
- logStart: boolean;
7
- /**
8
- * @default true
9
- */
10
- logFinish: boolean;
11
- }
12
- export declare function simpleRequestLogger(_cfg?: Partial<SimpleRequestLoggerCfg>): RequestHandler;
@@ -1,3 +0,0 @@
1
- import { RequestHandler } from 'express';
2
- export declare function statusHandler(projectDir?: string, extra?: any): RequestHandler;
3
- export declare function statusHandlerData(projectDir?: string, extra?: any): Record<string, any>;
@@ -1,7 +0,0 @@
1
- import { RequestHandler } from 'express'
2
-
3
- export function notFoundHandler(): RequestHandler {
4
- return (req, res) => {
5
- res.status(404).send(`404 Not Found: ${req.url}`)
6
- }
7
- }
@@ -1,7 +0,0 @@
1
- import { RequestHandler } from 'express'
2
-
3
- export function okHandler(): RequestHandler {
4
- return (req, res) => {
5
- res.json({ ok: 1 })
6
- }
7
- }
@@ -1,62 +0,0 @@
1
- import { HttpError } from '@naturalcycles/js-lib'
2
- import { RequestHandler } from 'express'
3
- import { onFinished, respondWithError } from '../../index'
4
-
5
- export interface RequestTimeoutCfg {
6
- /**
7
- * @default 120
8
- */
9
- timeoutSeconds?: number
10
-
11
- /**
12
- * @default 503
13
- */
14
- httpStatusCode?: number
15
-
16
- /**
17
- * @default 'Request timed out'
18
- */
19
- httpErrorMessage?: string
20
- }
21
-
22
- const code = 'REQUEST_TIMEOUT'
23
- const REQUEST_TIMEOUT_QUERY_KEY = 'requestTimeout'
24
-
25
- export function requestTimeout(cfg: RequestTimeoutCfg = {}): RequestHandler {
26
- const {
27
- timeoutSeconds: defTimeoutSeconds,
28
- httpStatusCode,
29
- httpErrorMessage,
30
- } = {
31
- // Considerations about the default value of the timeout.
32
- // Ideally the default value here would be HIGHER than the default timeout for getGot (in nodejs-lib),
33
- // so, cross-service communication has a chance to fail SOONER than server times out,
34
- // so, proper error from exact service is shown, rather than generic "503 request timed out"
35
- timeoutSeconds: 120,
36
- httpStatusCode: 503,
37
- httpErrorMessage: 'Request timed out',
38
- ...cfg,
39
- }
40
-
41
- return (req, res, next) => {
42
- const timeoutSeconds = req.query[REQUEST_TIMEOUT_QUERY_KEY]
43
- ? Number.parseInt(req.query[REQUEST_TIMEOUT_QUERY_KEY] as string)
44
- : defTimeoutSeconds
45
-
46
- const timer = setTimeout(() => {
47
- respondWithError(
48
- req,
49
- res,
50
- new HttpError(httpErrorMessage, {
51
- code,
52
- httpStatusCode,
53
- // userFriendly: true, // no, cause this error is not expected
54
- }),
55
- )
56
- }, timeoutSeconds * 1000)
57
-
58
- onFinished(res, () => clearTimeout(timer))
59
-
60
- next()
61
- }
62
- }
@@ -1,34 +0,0 @@
1
- import { HttpErrorData } from '@naturalcycles/js-lib'
2
- import { ErrorRequestHandler } from 'express'
3
- import { SentrySharedService } from '../..'
4
-
5
- export interface SentryErrorMiddlewareCfg {
6
- sentryService: SentrySharedService
7
- }
8
-
9
- /**
10
- * Mutates err with err.data.errorId.
11
- * Passes error further via next(err).
12
- */
13
- export function sentryErrorHandler(cfg: SentryErrorMiddlewareCfg): ErrorRequestHandler {
14
- return (err, req, res, next) => {
15
- if (!err) return next()
16
-
17
- err.data = {
18
- ...err.data,
19
- }
20
-
21
- const httpStatusCode = (err.data as HttpErrorData).httpStatusCode || 500
22
-
23
- if (shouldReportToSentry(httpStatusCode)) {
24
- err.data.errorId = cfg.sentryService.captureException(err)
25
- }
26
-
27
- next(err)
28
- }
29
- }
30
-
31
- function shouldReportToSentry(httpCode: number): boolean {
32
- // Only report 5xx
33
- return httpCode >= 500
34
- }