@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.
- package/dist/admin/admin.mw.d.ts +4 -4
- package/dist/admin/base.admin.service.d.ts +11 -12
- package/dist/db/httpDBRequestHandler.d.ts +2 -2
- package/dist/deploy/deployPrepare.js +1 -0
- package/dist/index.d.ts +25 -24
- package/dist/index.js +28 -50
- package/dist/sentry/sentry.shared.service.d.ts +3 -3
- package/dist/server/appEngineLogMiddleware.d.ts +13 -0
- package/dist/server/{handlers/createGaeLogMiddleware.js → appEngineLogMiddleware.js} +4 -4
- package/dist/server/{handlers/asyncLocalStorage.mw.d.ts → asyncLocalStorageMiddleware.d.ts} +4 -4
- package/dist/server/{handlers/asyncLocalStorage.mw.js → asyncLocalStorageMiddleware.js} +5 -5
- package/dist/server/{handlers/bodyParserTimeout.mw.d.ts → bodyParserTimeoutMiddleware.d.ts} +4 -4
- package/dist/server/{handlers/bodyParserTimeout.mw.js → bodyParserTimeoutMiddleware.js} +10 -7
- package/dist/server/catchWrapper.d.ts +2 -2
- package/dist/server/createDefaultApp.d.ts +2 -2
- package/dist/server/createDefaultApp.js +13 -13
- package/dist/server/createDefaultApp.model.d.ts +8 -8
- package/dist/server/deployInfo.util.d.ts +2 -2
- package/dist/server/genericErrorMiddleware.d.ts +12 -0
- package/dist/server/{handlers/genericErrorHandler.mw.js → genericErrorMiddleware.js} +20 -8
- package/dist/server/getDefaultRouter.d.ts +2 -2
- package/dist/server/methodOverrideMiddleware.d.ts +8 -0
- package/dist/server/{handlers/methodOverride.mw.js → methodOverrideMiddleware.js} +3 -3
- package/dist/server/notFoundMiddleware.d.ts +2 -0
- package/dist/server/notFoundMiddleware.js +10 -0
- package/dist/server/okMiddleware.d.ts +2 -0
- package/dist/server/{handlers/okHandler.mw.js → okMiddleware.js} +3 -3
- package/dist/server/{handlers/reqValidation.mw.d.ts → reqValidationMiddleware.d.ts} +2 -2
- package/dist/server/{handlers/reqValidation.mw.js → reqValidationMiddleware.js} +0 -0
- package/dist/server/request.log.util.d.ts +2 -2
- package/dist/server/request.util.d.ts +10 -2
- package/dist/server/request.util.js +8 -0
- package/dist/server/requestTimeoutMiddleware.d.ts +31 -0
- package/dist/server/requestTimeoutMiddleware.js +68 -0
- package/dist/server/{handlers/safeJsonMiddleware.d.ts → safeJsonMiddleware.d.ts} +2 -2
- package/dist/server/{handlers/safeJsonMiddleware.js → safeJsonMiddleware.js} +0 -0
- package/dist/server/server.model.d.ts +37 -0
- package/dist/server/server.model.js +2 -0
- package/dist/server/serverStatsMiddleware.d.ts +13 -0
- package/dist/server/{handlers/serverStatsMiddleware.js → serverStatsMiddleware.js} +2 -2
- package/dist/server/serverStatusMiddleware.d.ts +3 -0
- package/dist/server/{handlers/statusHandler.js → serverStatusMiddleware.js} +7 -7
- package/dist/server/simpleRequestLoggerMiddleware.d.ts +12 -0
- package/dist/server/{handlers/simpleRequestLogger.mw.js → simpleRequestLoggerMiddleware.js} +5 -5
- package/dist/server/startServer.model.d.ts +2 -2
- package/dist/server/{handlers/validate.mw.d.ts → validateMiddleware.d.ts} +5 -5
- package/dist/server/{handlers/validate.mw.js → validateMiddleware.js} +0 -0
- package/dist/testing/express.test.service.d.ts +6 -6
- package/dist/testing/express.test.service.js +8 -5
- package/package.json +1 -2
- package/src/admin/admin.mw.ts +7 -4
- package/src/admin/base.admin.service.ts +11 -12
- package/src/admin/secureHeader.mw.ts +2 -2
- package/src/db/httpDBRequestHandler.ts +2 -3
- package/src/deploy/deployPrepare.ts +1 -0
- package/src/index.ts +54 -68
- package/src/sentry/sentry.shared.service.ts +3 -4
- package/src/server/{handlers/createGaeLogMiddleware.ts → appEngineLogMiddleware.ts} +4 -25
- package/src/server/{handlers/asyncLocalStorage.mw.ts → asyncLocalStorageMiddleware.ts} +5 -5
- package/src/server/{handlers/bodyParserTimeout.mw.ts → bodyParserTimeoutMiddleware.ts} +14 -13
- package/src/server/catchWrapper.ts +2 -2
- package/src/server/createDefaultApp.model.ts +8 -8
- package/src/server/createDefaultApp.ts +22 -19
- package/src/server/deployInfo.util.ts +1 -1
- package/src/server/{handlers/genericErrorHandler.mw.ts → genericErrorMiddleware.ts} +24 -14
- package/src/server/getDefaultRouter.ts +2 -2
- package/src/server/{handlers/methodOverride.mw.ts → methodOverrideMiddleware.ts} +5 -3
- package/src/server/notFoundMiddleware.ts +8 -0
- package/src/server/okMiddleware.ts +7 -0
- package/src/server/{handlers/reqValidation.mw.ts → reqValidationMiddleware.ts} +2 -2
- package/src/server/request.log.util.ts +2 -2
- package/src/server/request.util.ts +10 -2
- package/src/server/requestTimeoutMiddleware.ts +117 -0
- package/src/server/{handlers/safeJsonMiddleware.ts → safeJsonMiddleware.ts} +3 -3
- package/src/server/server.model.ts +56 -0
- package/src/server/{handlers/serverStatsMiddleware.ts → serverStatsMiddleware.ts} +4 -5
- package/src/server/{handlers/statusHandler.ts → serverStatusMiddleware.ts} +5 -5
- package/src/server/{handlers/simpleRequestLogger.mw.ts → simpleRequestLoggerMiddleware.ts} +8 -7
- package/src/server/startServer.model.ts +2 -2
- package/src/server/{handlers/validate.mw.ts → validateMiddleware.ts} +6 -6
- package/src/testing/express.test.service.ts +12 -8
- package/dist/server/handlers/createGaeLogMiddleware.d.ts +0 -30
- package/dist/server/handlers/genericErrorHandler.mw.d.ts +0 -13
- package/dist/server/handlers/methodOverride.mw.d.ts +0 -8
- package/dist/server/handlers/notFoundHandler.mw.d.ts +0 -2
- package/dist/server/handlers/notFoundHandler.mw.js +0 -9
- package/dist/server/handlers/okHandler.mw.d.ts +0 -2
- package/dist/server/handlers/requestTimeout.mw.d.ts +0 -16
- package/dist/server/handlers/requestTimeout.mw.js +0 -34
- package/dist/server/handlers/sentryErrorHandler.mw.d.ts +0 -10
- package/dist/server/handlers/sentryErrorHandler.mw.js +0 -26
- package/dist/server/handlers/serverStatsMiddleware.d.ts +0 -13
- package/dist/server/handlers/simpleRequestLogger.mw.d.ts +0 -12
- package/dist/server/handlers/statusHandler.d.ts +0 -3
- package/src/server/handlers/notFoundHandler.mw.ts +0 -7
- package/src/server/handlers/okHandler.mw.ts +0 -7
- package/src/server/handlers/requestTimeout.mw.ts +0 -62
- 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,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
|
-
}
|