@naturalcycles/backend-lib 2.73.0 → 3.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.
- 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/index.d.ts +26 -23
- package/dist/index.js +30 -51
- 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} +13 -12
- package/dist/server/{handlers/asyncLocalStorage.mw.d.ts → asyncLocalStorageMiddleware.d.ts} +4 -4
- package/dist/server/{handlers/asyncLocalStorage.mw.js → asyncLocalStorageMiddleware.js} +6 -6
- 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 +1 -1
- package/dist/server/genericErrorMiddleware.d.ts +12 -0
- package/dist/server/{handlers/genericErrorHandler.mw.js → genericErrorMiddleware.js} +26 -16
- 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} +4 -16
- 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 +5 -5
- package/package.json +1 -1
- 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/index.ts +55 -68
- package/src/sentry/sentry.shared.service.ts +3 -4
- package/src/server/{handlers/createGaeLogMiddleware.ts → appEngineLogMiddleware.ts} +13 -34
- package/src/server/{handlers/asyncLocalStorage.mw.ts → asyncLocalStorageMiddleware.ts} +7 -7
- 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} +37 -23
- 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} +10 -22
- 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 +6 -7
- package/dist/server/handlers/createGaeLogMiddleware.d.ts +0 -28
- 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
package/dist/admin/admin.mw.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { BackendRequestHandler } from '../server/server.model';
|
|
2
2
|
import { BaseAdminService } from './base.admin.service';
|
|
3
3
|
import { FirebaseSharedServiceCfg } from './firebase.shared.service';
|
|
4
4
|
export interface RequireAdminCfg {
|
|
@@ -18,7 +18,7 @@ export interface RequireAdminCfg {
|
|
|
18
18
|
*/
|
|
19
19
|
autoLogin?: boolean;
|
|
20
20
|
}
|
|
21
|
-
export declare type AdminMiddleware = (reqPermissions?: string[], cfg?: RequireAdminCfg) =>
|
|
21
|
+
export declare type AdminMiddleware = (reqPermissions?: string[], cfg?: RequireAdminCfg) => BackendRequestHandler;
|
|
22
22
|
export declare function createAdminMiddleware(adminService: BaseAdminService, cfgDefaults?: RequireAdminCfg): AdminMiddleware;
|
|
23
23
|
/**
|
|
24
24
|
* Require Admin permission.
|
|
@@ -26,6 +26,6 @@ export declare function createAdminMiddleware(adminService: BaseAdminService, cf
|
|
|
26
26
|
* If authenticated, but not authorized - will throw 403.
|
|
27
27
|
* Otherwise will just pass.
|
|
28
28
|
*/
|
|
29
|
-
export declare function requireAdminPermissions(adminService: BaseAdminService, reqPermissions?: string[], cfg?: RequireAdminCfg):
|
|
30
|
-
export declare function loginHtml(firebaseServiceCfg: FirebaseSharedServiceCfg):
|
|
29
|
+
export declare function requireAdminPermissions(adminService: BaseAdminService, reqPermissions?: string[], cfg?: RequireAdminCfg): BackendRequestHandler;
|
|
30
|
+
export declare function loginHtml(firebaseServiceCfg: FirebaseSharedServiceCfg): BackendRequestHandler;
|
|
31
31
|
export declare function getLoginHtmlRedirect(href: string): string;
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import { Request, RequestHandler } from 'express';
|
|
2
1
|
import type * as FirebaseAdmin from 'firebase-admin';
|
|
3
|
-
import {
|
|
2
|
+
import { BackendRequest, BackendRequestHandler } from '../server/server.model';
|
|
4
3
|
export interface AdminServiceCfg {
|
|
5
4
|
/**
|
|
6
5
|
* @default 'admin_token'
|
|
@@ -36,23 +35,23 @@ export declare class BaseAdminService {
|
|
|
36
35
|
/**
|
|
37
36
|
* To be extended.
|
|
38
37
|
*/
|
|
39
|
-
protected onPermissionCheck(req:
|
|
40
|
-
getEmailByToken(req:
|
|
38
|
+
protected onPermissionCheck(req: BackendRequest, email: string, reqPermissions: string[], required: boolean, granted: boolean, meta?: Record<string, any>): Promise<void>;
|
|
39
|
+
getEmailByToken(req: BackendRequest, adminToken?: string): Promise<string | undefined>;
|
|
41
40
|
/**
|
|
42
41
|
* Current implementation is based on req=Request (from Express).
|
|
43
42
|
* Override if needed.
|
|
44
43
|
*/
|
|
45
|
-
getAdminToken(req:
|
|
46
|
-
isAdmin(req:
|
|
47
|
-
getAdminInfo(req:
|
|
44
|
+
getAdminToken(req: BackendRequest): Promise<string | undefined>;
|
|
45
|
+
isAdmin(req: BackendRequest): Promise<boolean>;
|
|
46
|
+
getAdminInfo(req: BackendRequest): Promise<AdminInfo | undefined>;
|
|
48
47
|
/**
|
|
49
48
|
* Returns AdminInfo if it has all required permissions.
|
|
50
49
|
* Otherwise returns undefined
|
|
51
50
|
*/
|
|
52
|
-
hasPermissions(req:
|
|
53
|
-
requirePermissions(req:
|
|
54
|
-
hasPermission(req:
|
|
55
|
-
requirePermission(req:
|
|
51
|
+
hasPermissions(req: BackendRequest, reqPermissions?: string[], meta?: Record<string, any>): Promise<AdminInfo | undefined>;
|
|
52
|
+
requirePermissions(req: BackendRequest, reqPermissions?: string[], meta?: Record<string, any>, andComparison?: boolean): Promise<AdminInfo>;
|
|
53
|
+
hasPermission(req: BackendRequest, reqPermission: string, meta?: Record<string, any>): Promise<boolean>;
|
|
54
|
+
requirePermission(req: BackendRequest, reqPermission: string, meta?: Record<string, any>): Promise<AdminInfo>;
|
|
56
55
|
/**
|
|
57
56
|
* Install it on POST /admin/login url
|
|
58
57
|
*
|
|
@@ -62,5 +61,5 @@ export declare class BaseAdminService {
|
|
|
62
61
|
*
|
|
63
62
|
* Same endpoint is used to logout, but the `Authentication` header should contain `logout` magic string.
|
|
64
63
|
*/
|
|
65
|
-
getFirebaseAuthLoginHandler():
|
|
64
|
+
getFirebaseAuthLoginHandler(): BackendRequestHandler;
|
|
66
65
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { CommonDB, CommonDBOptions, CommonDBSaveOptions, DBQuery } from '@naturalcycles/db-lib';
|
|
2
2
|
import { ObjectWithId } from '@naturalcycles/js-lib';
|
|
3
|
-
import {
|
|
3
|
+
import { BackendRouter } from '..';
|
|
4
4
|
export interface GetByIdsInput {
|
|
5
5
|
table: string;
|
|
6
6
|
ids: string[];
|
|
@@ -20,4 +20,4 @@ export interface SaveBatchInput {
|
|
|
20
20
|
/**
|
|
21
21
|
* Exposes CommonDB interface from provided CommonDB as HTTP endpoint (Express RequestHandler).
|
|
22
22
|
*/
|
|
23
|
-
export declare function httpDBRequestHandler(db: CommonDB):
|
|
23
|
+
export declare function httpDBRequestHandler(db: CommonDB): BackendRouter;
|
package/dist/index.d.ts
CHANGED
|
@@ -5,29 +5,32 @@ import { FirebaseSharedService } from './admin/firebase.shared.service';
|
|
|
5
5
|
import { createSecureHeaderMiddleware, SecureHeaderMiddlewareCfg } from './admin/secureHeader.mw';
|
|
6
6
|
import { BaseEnv } from './env/env.model';
|
|
7
7
|
import { EnvSharedService, EnvSharedServiceCfg } from './env/env.shared.service';
|
|
8
|
-
|
|
8
|
+
export * from './gae/appEngine.util';
|
|
9
9
|
import { SentrySharedService, SentrySharedServiceCfg } from './sentry/sentry.shared.service';
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
import { DefaultAppCfg,
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
import {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
import {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
import {
|
|
22
|
-
|
|
23
|
-
import {
|
|
24
|
-
import {
|
|
25
|
-
import {
|
|
26
|
-
|
|
10
|
+
export * from './server/catchWrapper';
|
|
11
|
+
export * from './server/createDefaultApp';
|
|
12
|
+
import { DefaultAppCfg, BackendRequestHandlerCfg, BackendRequestHandlerWithPath } from './server/createDefaultApp.model';
|
|
13
|
+
export * from './server/deployInfo.util';
|
|
14
|
+
export * from './server/getDefaultRouter';
|
|
15
|
+
import { bodyParserTimeoutMiddleware, BodyParserTimeoutMiddlewareCfg, clearBodyParserTimeout } from './server/bodyParserTimeoutMiddleware';
|
|
16
|
+
export * from './server/genericErrorMiddleware';
|
|
17
|
+
export * from './server/serverStatsMiddleware';
|
|
18
|
+
import { methodOverrideMiddleware, MethodOverrideMiddlewareCfg } from './server/methodOverrideMiddleware';
|
|
19
|
+
export * from './server/notFoundMiddleware';
|
|
20
|
+
export * from './server/okMiddleware';
|
|
21
|
+
import { RequestTimeoutMiddlewareCfg } from './server/requestTimeoutMiddleware';
|
|
22
|
+
export * from './server/requestTimeoutMiddleware';
|
|
23
|
+
import { reqValidation, ReqValidationOptions } from './server/reqValidationMiddleware';
|
|
24
|
+
import { simpleRequestLoggerMiddleware, SimpleRequestLoggerMiddlewareCfg } from './server/simpleRequestLoggerMiddleware';
|
|
25
|
+
import { serverStatusMiddleware, getServerStatusData } from './server/serverStatusMiddleware';
|
|
26
|
+
export * from './server/validateMiddleware';
|
|
27
|
+
export * from './server/request.log.util';
|
|
27
28
|
import { BackendServer, startServer } from './server/startServer';
|
|
28
29
|
import { StartServerCfg, StartServerData } from './server/startServer.model';
|
|
29
|
-
|
|
30
|
-
import {
|
|
31
|
-
|
|
32
|
-
export
|
|
33
|
-
export
|
|
30
|
+
export * from './server/asyncLocalStorageMiddleware';
|
|
31
|
+
import type { BackendRequest, BackendRequestHandler, BackendResponse, BackendErrorRequestHandler, BackendRouter, BackendApplication } from './server/server.model';
|
|
32
|
+
export * from './server/appEngineLogMiddleware';
|
|
33
|
+
export * from './server/safeJsonMiddleware';
|
|
34
|
+
export * from './server/request.util';
|
|
35
|
+
export type { MethodOverrideMiddlewareCfg, SentrySharedServiceCfg, BackendRequestHandlerWithPath, BackendRequestHandlerCfg, DefaultAppCfg, StartServerCfg, StartServerData, EnvSharedServiceCfg, BaseEnv, AdminMiddleware, AdminServiceCfg, AdminInfo, RequireAdminCfg, SecureHeaderMiddlewareCfg, BodyParserTimeoutMiddlewareCfg, RequestTimeoutMiddlewareCfg, SimpleRequestLoggerMiddlewareCfg, ReqValidationOptions, BackendRequest, BackendRequestHandler, BackendResponse, BackendErrorRequestHandler, BackendRouter, BackendApplication, };
|
|
36
|
+
export { BackendServer, SentrySharedService, EnvSharedService, reqValidation, methodOverrideMiddleware, startServer, serverStatusMiddleware, getServerStatusData, onFinished, FirebaseSharedService, createAdminMiddleware, BaseAdminService, loginHtml, createSecureHeaderMiddleware, bodyParserTimeoutMiddleware, clearBodyParserTimeout, simpleRequestLoggerMiddleware, };
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.simpleRequestLoggerMiddleware = exports.clearBodyParserTimeout = exports.bodyParserTimeoutMiddleware = exports.createSecureHeaderMiddleware = exports.loginHtml = exports.BaseAdminService = exports.createAdminMiddleware = exports.FirebaseSharedService = exports.onFinished = exports.getServerStatusData = exports.serverStatusMiddleware = exports.startServer = exports.methodOverrideMiddleware = exports.reqValidation = exports.EnvSharedService = exports.SentrySharedService = exports.BackendServer = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
4
5
|
const onFinished = require("on-finished");
|
|
5
6
|
exports.onFinished = onFinished;
|
|
6
7
|
const admin_mw_1 = require("./admin/admin.mw");
|
|
@@ -14,58 +15,36 @@ const secureHeader_mw_1 = require("./admin/secureHeader.mw");
|
|
|
14
15
|
Object.defineProperty(exports, "createSecureHeaderMiddleware", { enumerable: true, get: function () { return secureHeader_mw_1.createSecureHeaderMiddleware; } });
|
|
15
16
|
const env_shared_service_1 = require("./env/env.shared.service");
|
|
16
17
|
Object.defineProperty(exports, "EnvSharedService", { enumerable: true, get: function () { return env_shared_service_1.EnvSharedService; } });
|
|
17
|
-
|
|
18
|
-
Object.defineProperty(exports, "isGAE", { enumerable: true, get: function () { return appEngine_util_1.isGAE; } });
|
|
18
|
+
(0, tslib_1.__exportStar)(require("./gae/appEngine.util"), exports);
|
|
19
19
|
const sentry_shared_service_1 = require("./sentry/sentry.shared.service");
|
|
20
20
|
Object.defineProperty(exports, "SentrySharedService", { enumerable: true, get: function () { return sentry_shared_service_1.SentrySharedService; } });
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
const
|
|
26
|
-
Object.defineProperty(exports, "
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
Object.defineProperty(exports, "
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
const
|
|
36
|
-
Object.defineProperty(exports, "
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
Object.defineProperty(exports, "
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
const requestTimeout_mw_1 = require("./server/handlers/requestTimeout.mw");
|
|
45
|
-
Object.defineProperty(exports, "requestTimeout", { enumerable: true, get: function () { return requestTimeout_mw_1.requestTimeout; } });
|
|
46
|
-
const reqValidation_mw_1 = require("./server/handlers/reqValidation.mw");
|
|
47
|
-
Object.defineProperty(exports, "reqValidation", { enumerable: true, get: function () { return reqValidation_mw_1.reqValidation; } });
|
|
48
|
-
const simpleRequestLogger_mw_1 = require("./server/handlers/simpleRequestLogger.mw");
|
|
49
|
-
Object.defineProperty(exports, "simpleRequestLogger", { enumerable: true, get: function () { return simpleRequestLogger_mw_1.simpleRequestLogger; } });
|
|
50
|
-
const statusHandler_1 = require("./server/handlers/statusHandler");
|
|
51
|
-
Object.defineProperty(exports, "statusHandler", { enumerable: true, get: function () { return statusHandler_1.statusHandler; } });
|
|
52
|
-
Object.defineProperty(exports, "statusHandlerData", { enumerable: true, get: function () { return statusHandler_1.statusHandlerData; } });
|
|
53
|
-
const validate_mw_1 = require("./server/handlers/validate.mw");
|
|
54
|
-
Object.defineProperty(exports, "validateBody", { enumerable: true, get: function () { return validate_mw_1.validateBody; } });
|
|
55
|
-
Object.defineProperty(exports, "validateParams", { enumerable: true, get: function () { return validate_mw_1.validateParams; } });
|
|
56
|
-
Object.defineProperty(exports, "validateQuery", { enumerable: true, get: function () { return validate_mw_1.validateQuery; } });
|
|
57
|
-
const request_log_util_1 = require("./server/request.log.util");
|
|
58
|
-
Object.defineProperty(exports, "coloredHttpCode", { enumerable: true, get: function () { return request_log_util_1.coloredHttpCode; } });
|
|
59
|
-
Object.defineProperty(exports, "logRequest", { enumerable: true, get: function () { return request_log_util_1.logRequest; } });
|
|
21
|
+
(0, tslib_1.__exportStar)(require("./server/catchWrapper"), exports);
|
|
22
|
+
(0, tslib_1.__exportStar)(require("./server/createDefaultApp"), exports);
|
|
23
|
+
(0, tslib_1.__exportStar)(require("./server/deployInfo.util"), exports);
|
|
24
|
+
(0, tslib_1.__exportStar)(require("./server/getDefaultRouter"), exports);
|
|
25
|
+
const bodyParserTimeoutMiddleware_1 = require("./server/bodyParserTimeoutMiddleware");
|
|
26
|
+
Object.defineProperty(exports, "bodyParserTimeoutMiddleware", { enumerable: true, get: function () { return bodyParserTimeoutMiddleware_1.bodyParserTimeoutMiddleware; } });
|
|
27
|
+
Object.defineProperty(exports, "clearBodyParserTimeout", { enumerable: true, get: function () { return bodyParserTimeoutMiddleware_1.clearBodyParserTimeout; } });
|
|
28
|
+
(0, tslib_1.__exportStar)(require("./server/genericErrorMiddleware"), exports);
|
|
29
|
+
(0, tslib_1.__exportStar)(require("./server/serverStatsMiddleware"), exports);
|
|
30
|
+
const methodOverrideMiddleware_1 = require("./server/methodOverrideMiddleware");
|
|
31
|
+
Object.defineProperty(exports, "methodOverrideMiddleware", { enumerable: true, get: function () { return methodOverrideMiddleware_1.methodOverrideMiddleware; } });
|
|
32
|
+
(0, tslib_1.__exportStar)(require("./server/notFoundMiddleware"), exports);
|
|
33
|
+
(0, tslib_1.__exportStar)(require("./server/okMiddleware"), exports);
|
|
34
|
+
(0, tslib_1.__exportStar)(require("./server/requestTimeoutMiddleware"), exports);
|
|
35
|
+
const reqValidationMiddleware_1 = require("./server/reqValidationMiddleware");
|
|
36
|
+
Object.defineProperty(exports, "reqValidation", { enumerable: true, get: function () { return reqValidationMiddleware_1.reqValidation; } });
|
|
37
|
+
const simpleRequestLoggerMiddleware_1 = require("./server/simpleRequestLoggerMiddleware");
|
|
38
|
+
Object.defineProperty(exports, "simpleRequestLoggerMiddleware", { enumerable: true, get: function () { return simpleRequestLoggerMiddleware_1.simpleRequestLoggerMiddleware; } });
|
|
39
|
+
const serverStatusMiddleware_1 = require("./server/serverStatusMiddleware");
|
|
40
|
+
Object.defineProperty(exports, "serverStatusMiddleware", { enumerable: true, get: function () { return serverStatusMiddleware_1.serverStatusMiddleware; } });
|
|
41
|
+
Object.defineProperty(exports, "getServerStatusData", { enumerable: true, get: function () { return serverStatusMiddleware_1.getServerStatusData; } });
|
|
42
|
+
(0, tslib_1.__exportStar)(require("./server/validateMiddleware"), exports);
|
|
43
|
+
(0, tslib_1.__exportStar)(require("./server/request.log.util"), exports);
|
|
60
44
|
const startServer_1 = require("./server/startServer");
|
|
61
45
|
Object.defineProperty(exports, "BackendServer", { enumerable: true, get: function () { return startServer_1.BackendServer; } });
|
|
62
46
|
Object.defineProperty(exports, "startServer", { enumerable: true, get: function () { return startServer_1.startServer; } });
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
Object.defineProperty(exports, "requestLogger", { enumerable: true, get: function () { return asyncLocalStorage_mw_1.requestLogger; } });
|
|
68
|
-
const createGaeLogMiddleware_1 = require("./server/handlers/createGaeLogMiddleware");
|
|
69
|
-
Object.defineProperty(exports, "createGAELogMiddleware", { enumerable: true, get: function () { return createGaeLogMiddleware_1.createGAELogMiddleware; } });
|
|
70
|
-
const safeJsonMiddleware_1 = require("./server/handlers/safeJsonMiddleware");
|
|
71
|
-
Object.defineProperty(exports, "safeJsonMiddleware", { enumerable: true, get: function () { return safeJsonMiddleware_1.safeJsonMiddleware; } });
|
|
47
|
+
(0, tslib_1.__exportStar)(require("./server/asyncLocalStorageMiddleware"), exports);
|
|
48
|
+
(0, tslib_1.__exportStar)(require("./server/appEngineLogMiddleware"), exports);
|
|
49
|
+
(0, tslib_1.__exportStar)(require("./server/safeJsonMiddleware"), exports);
|
|
50
|
+
(0, tslib_1.__exportStar)(require("./server/request.util"), exports);
|
|
@@ -2,7 +2,7 @@ import { CommonLogger } from '@naturalcycles/js-lib';
|
|
|
2
2
|
import { Severity } from '@sentry/node';
|
|
3
3
|
import type { Breadcrumb, NodeOptions } from '@sentry/node';
|
|
4
4
|
import type * as SentryLib from '@sentry/node';
|
|
5
|
-
import {
|
|
5
|
+
import { BackendErrorRequestHandler, BackendRequestHandler } from '../index';
|
|
6
6
|
export interface SentrySharedServiceCfg extends NodeOptions {
|
|
7
7
|
}
|
|
8
8
|
export declare class SentrySharedService {
|
|
@@ -15,13 +15,13 @@ export declare class SentrySharedService {
|
|
|
15
15
|
*
|
|
16
16
|
* UPD: to be tested. Without it - request is not enriched and the error is less useful.
|
|
17
17
|
*/
|
|
18
|
-
getRequestHandler():
|
|
18
|
+
getRequestHandler(): BackendRequestHandler;
|
|
19
19
|
/**
|
|
20
20
|
* Currently not recommended, as it's replaced by our custom sentryErrorHandler.
|
|
21
21
|
*
|
|
22
22
|
* @deprecated
|
|
23
23
|
*/
|
|
24
|
-
getErrorHandler():
|
|
24
|
+
getErrorHandler(): BackendErrorRequestHandler;
|
|
25
25
|
/**
|
|
26
26
|
* For GDPR reasons we never send more information than just User ID.
|
|
27
27
|
*/
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { CommonLogger } from '@naturalcycles/js-lib';
|
|
2
|
+
import { BackendRequestHandler } from './server.model';
|
|
3
|
+
/**
|
|
4
|
+
* Logger that logs in AppEngine format.
|
|
5
|
+
* To be used in outside-of-request situations (otherwise req.log should be used).
|
|
6
|
+
*/
|
|
7
|
+
export declare const gaeLogger: CommonLogger;
|
|
8
|
+
/**
|
|
9
|
+
* Fancy development logger, to be used in outside-of-request situations
|
|
10
|
+
* (otherwise req.log should be used).
|
|
11
|
+
*/
|
|
12
|
+
export declare const devLogger: CommonLogger;
|
|
13
|
+
export declare function appEngineLogMiddleware(): BackendRequestHandler;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.appEngineLogMiddleware = exports.devLogger = exports.gaeLogger = void 0;
|
|
4
4
|
const util_1 = require("util");
|
|
5
5
|
const colors_1 = require("@naturalcycles/nodejs-lib/dist/colors");
|
|
6
6
|
const nodejs_lib_1 = require("@naturalcycles/nodejs-lib");
|
|
@@ -9,17 +9,19 @@ const isGAE = !!GAE_INSTANCE;
|
|
|
9
9
|
// Simple "request counter" (poor man's "correlation id") counter, to use on dev machine (not in the cloud)
|
|
10
10
|
let reqCounter = 0;
|
|
11
11
|
/**
|
|
12
|
-
*
|
|
12
|
+
* Logger that logs in AppEngine format.
|
|
13
|
+
* To be used in outside-of-request situations (otherwise req.log should be used).
|
|
13
14
|
*/
|
|
14
|
-
exports.
|
|
15
|
+
exports.gaeLogger = {
|
|
15
16
|
log: (...args) => logToAppEngine({}, args),
|
|
16
17
|
warn: (...args) => logToAppEngine({ severity: 'WARNING' }, args),
|
|
17
18
|
error: (...args) => logToAppEngine({ severity: 'ERROR' }, args),
|
|
18
19
|
};
|
|
19
20
|
/**
|
|
20
|
-
*
|
|
21
|
+
* Fancy development logger, to be used in outside-of-request situations
|
|
22
|
+
* (otherwise req.log should be used).
|
|
21
23
|
*/
|
|
22
|
-
exports.
|
|
24
|
+
exports.devLogger = {
|
|
23
25
|
log: (...args) => logToDev(null, args),
|
|
24
26
|
warn: (...args) => logToDev(null, args),
|
|
25
27
|
error: (...args) => logToDev(null, args),
|
|
@@ -38,7 +40,7 @@ function logToDev(requestId, args) {
|
|
|
38
40
|
...args.map(a => (0, nodejs_lib_1.inspectAny)(a, { includeErrorStack: true, colors: true })),
|
|
39
41
|
].join(' '));
|
|
40
42
|
}
|
|
41
|
-
function
|
|
43
|
+
function appEngineLogMiddleware() {
|
|
42
44
|
if (!isGAE || !GOOGLE_CLOUD_PROJECT) {
|
|
43
45
|
// Local machine, return "simple" logToDev middleware with request numbering
|
|
44
46
|
return function gaeLogMiddlewareDev(req, res, next) {
|
|
@@ -49,15 +51,14 @@ function createGAELogMiddleware() {
|
|
|
49
51
|
};
|
|
50
52
|
}
|
|
51
53
|
// Otherwise, we're in AppEngine
|
|
52
|
-
return function
|
|
53
|
-
const meta = {};
|
|
54
|
+
return function appEngineLogHandler(req, res, next) {
|
|
54
55
|
const traceHeader = req.header('x-cloud-trace-context');
|
|
55
56
|
if (traceHeader) {
|
|
56
57
|
const [trace] = traceHeader.split('/');
|
|
57
|
-
|
|
58
|
+
const meta = {
|
|
58
59
|
'logging.googleapis.com/trace': `projects/${GOOGLE_CLOUD_PROJECT}/traces/${trace}`,
|
|
59
60
|
'appengine.googleapis.com/request_id': req.header('x-appengine-request-log-id'),
|
|
60
|
-
}
|
|
61
|
+
};
|
|
61
62
|
Object.assign(req, {
|
|
62
63
|
log: (...args) => logToAppEngine({ ...meta, severity: 'INFO' }, args),
|
|
63
64
|
warn: (...args) => logToAppEngine({ ...meta, severity: 'WARNING' }, args),
|
|
@@ -66,9 +67,9 @@ function createGAELogMiddleware() {
|
|
|
66
67
|
req.requestId = trace;
|
|
67
68
|
}
|
|
68
69
|
else {
|
|
69
|
-
Object.assign(req, exports.
|
|
70
|
+
Object.assign(req, exports.gaeLogger);
|
|
70
71
|
}
|
|
71
72
|
next();
|
|
72
73
|
};
|
|
73
74
|
}
|
|
74
|
-
exports.
|
|
75
|
+
exports.appEngineLogMiddleware = appEngineLogMiddleware;
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { CommonLogger } from '@naturalcycles/js-lib';
|
|
2
|
-
import {
|
|
2
|
+
import { BackendRequest, BackendRequestHandler } from './server.model';
|
|
3
3
|
export interface RequestLocalStorage {
|
|
4
|
-
req:
|
|
4
|
+
req: BackendRequest;
|
|
5
5
|
}
|
|
6
|
-
export declare function
|
|
7
|
-
export declare function getRequest():
|
|
6
|
+
export declare function asyncLocalStorageMiddleware(): BackendRequestHandler;
|
|
7
|
+
export declare function getRequest(): BackendRequest | undefined;
|
|
8
8
|
/**
|
|
9
9
|
* It requires both `createAsyncLocalStorage` and `createGAELogMiddleware` to be in use to work.
|
|
10
10
|
*
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.requestLogger = exports.getRequestLogger = exports.getRequest = exports.
|
|
3
|
+
exports.requestLogger = exports.getRequestLogger = exports.getRequest = exports.asyncLocalStorageMiddleware = void 0;
|
|
4
4
|
const async_hooks_1 = require("async_hooks");
|
|
5
5
|
const js_lib_1 = require("@naturalcycles/js-lib");
|
|
6
|
-
const
|
|
6
|
+
const appEngineLogMiddleware_1 = require("./appEngineLogMiddleware");
|
|
7
7
|
const { GAE_INSTANCE } = process.env;
|
|
8
8
|
const isGAE = !!GAE_INSTANCE;
|
|
9
9
|
// Singleton, for simplicity
|
|
10
10
|
// Create it lazily (on demand)
|
|
11
11
|
const storage = (0, js_lib_1._lazyValue)(() => new async_hooks_1.AsyncLocalStorage());
|
|
12
|
-
function
|
|
12
|
+
function asyncLocalStorageMiddleware() {
|
|
13
13
|
return (req, res, next) => {
|
|
14
14
|
const store = {
|
|
15
15
|
req,
|
|
@@ -17,9 +17,9 @@ function createAsyncLocalStorage() {
|
|
|
17
17
|
storage().run(store, () => next());
|
|
18
18
|
};
|
|
19
19
|
}
|
|
20
|
-
exports.
|
|
20
|
+
exports.asyncLocalStorageMiddleware = asyncLocalStorageMiddleware;
|
|
21
21
|
function getRequest() {
|
|
22
|
-
return storage().getStore()
|
|
22
|
+
return storage().getStore()?.req;
|
|
23
23
|
}
|
|
24
24
|
exports.getRequest = getRequest;
|
|
25
25
|
/**
|
|
@@ -28,7 +28,7 @@ exports.getRequest = getRequest;
|
|
|
28
28
|
* @experimental
|
|
29
29
|
*/
|
|
30
30
|
function getRequestLogger() {
|
|
31
|
-
return storage().getStore()?.req || (isGAE ?
|
|
31
|
+
return storage().getStore()?.req || (isGAE ? appEngineLogMiddleware_1.gaeLogger : appEngineLogMiddleware_1.devLogger);
|
|
32
32
|
}
|
|
33
33
|
exports.getRequestLogger = getRequestLogger;
|
|
34
34
|
/**
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export interface
|
|
1
|
+
import { BackendRequestHandler } from '../index';
|
|
2
|
+
export interface BodyParserTimeoutMiddlewareCfg {
|
|
3
3
|
/**
|
|
4
4
|
* @default 10
|
|
5
5
|
*/
|
|
@@ -16,8 +16,8 @@ export interface BodyParserTimeoutCfg {
|
|
|
16
16
|
/**
|
|
17
17
|
* Should be called BEFORE bodyParser
|
|
18
18
|
*/
|
|
19
|
-
export declare function
|
|
19
|
+
export declare function bodyParserTimeoutMiddleware(cfg?: BodyParserTimeoutMiddlewareCfg): BackendRequestHandler;
|
|
20
20
|
/**
|
|
21
21
|
* Should be called AFTER bodyParser
|
|
22
22
|
*/
|
|
23
|
-
export declare function clearBodyParserTimeout():
|
|
23
|
+
export declare function clearBodyParserTimeout(): BackendRequestHandler;
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.clearBodyParserTimeout = exports.
|
|
3
|
+
exports.clearBodyParserTimeout = exports.bodyParserTimeoutMiddleware = void 0;
|
|
4
4
|
const js_lib_1 = require("@naturalcycles/js-lib");
|
|
5
|
-
const index_1 = require("
|
|
5
|
+
const index_1 = require("../index");
|
|
6
6
|
const code = 'BODY_PARSER_TIMEOUT';
|
|
7
7
|
/**
|
|
8
8
|
* Should be called BEFORE bodyParser
|
|
9
9
|
*/
|
|
10
|
-
function
|
|
10
|
+
function bodyParserTimeoutMiddleware(cfg = {}) {
|
|
11
11
|
const { timeoutSeconds, httpStatusCode, httpStatus } = {
|
|
12
12
|
timeoutSeconds: 10,
|
|
13
13
|
httpStatusCode: 400,
|
|
@@ -16,7 +16,11 @@ function bodyParserTimeout(cfg = {}) {
|
|
|
16
16
|
};
|
|
17
17
|
const timeout = timeoutSeconds * 1000;
|
|
18
18
|
return (req, res, next) => {
|
|
19
|
-
|
|
19
|
+
// If requestTimeout was previously set - cancel it first
|
|
20
|
+
// Then set the new requestTimeout and handler
|
|
21
|
+
if (req.bodyParserTimeout)
|
|
22
|
+
clearTimeout(req.bodyParserTimeout);
|
|
23
|
+
req.bodyParserTimeout = setTimeout(() => {
|
|
20
24
|
(0, index_1.respondWithError)(req, res, new js_lib_1.HttpError(httpStatus, {
|
|
21
25
|
code,
|
|
22
26
|
httpStatusCode,
|
|
@@ -26,14 +30,13 @@ function bodyParserTimeout(cfg = {}) {
|
|
|
26
30
|
next();
|
|
27
31
|
};
|
|
28
32
|
}
|
|
29
|
-
exports.
|
|
33
|
+
exports.bodyParserTimeoutMiddleware = bodyParserTimeoutMiddleware;
|
|
30
34
|
/**
|
|
31
35
|
* Should be called AFTER bodyParser
|
|
32
36
|
*/
|
|
33
37
|
function clearBodyParserTimeout() {
|
|
34
38
|
return (req, res, next) => {
|
|
35
|
-
|
|
36
|
-
clearTimeout(req._bodyParserTimeout);
|
|
39
|
+
clearTimeout(req.bodyParserTimeout);
|
|
37
40
|
next();
|
|
38
41
|
};
|
|
39
42
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export declare const catchWrapper: (fn:
|
|
1
|
+
import { BackendRequestHandler } from './server.model';
|
|
2
|
+
export declare const catchWrapper: (fn: BackendRequestHandler) => BackendRequestHandler;
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { BackendApplication } from '..';
|
|
2
2
|
import { DefaultAppCfg } from './createDefaultApp.model';
|
|
3
|
-
export declare function createDefaultApp(cfg: DefaultAppCfg):
|
|
3
|
+
export declare function createDefaultApp(cfg: DefaultAppCfg): BackendApplication;
|
|
@@ -5,12 +5,12 @@ const cookieParser = require("cookie-parser");
|
|
|
5
5
|
const cors = require("cors");
|
|
6
6
|
const express = require("express");
|
|
7
7
|
const __1 = require("..");
|
|
8
|
-
const
|
|
9
|
-
const
|
|
10
|
-
const
|
|
11
|
-
const
|
|
12
|
-
const
|
|
13
|
-
const
|
|
8
|
+
const asyncLocalStorageMiddleware_1 = require("./asyncLocalStorageMiddleware");
|
|
9
|
+
const appEngineLogMiddleware_1 = require("./appEngineLogMiddleware");
|
|
10
|
+
const genericErrorMiddleware_1 = require("./genericErrorMiddleware");
|
|
11
|
+
const notFoundMiddleware_1 = require("./notFoundMiddleware");
|
|
12
|
+
const requestTimeoutMiddleware_1 = require("./requestTimeoutMiddleware");
|
|
13
|
+
const simpleRequestLoggerMiddleware_1 = require("./simpleRequestLoggerMiddleware");
|
|
14
14
|
const isTest = process.env['APP_ENV'] === 'test';
|
|
15
15
|
function createDefaultApp(cfg) {
|
|
16
16
|
const { sentryService } = cfg;
|
|
@@ -20,9 +20,9 @@ function createDefaultApp(cfg) {
|
|
|
20
20
|
app.set('trust proxy', true);
|
|
21
21
|
// preHandlers
|
|
22
22
|
useHandlers(app, cfg.preHandlers);
|
|
23
|
-
app.use((0,
|
|
23
|
+
app.use((0, appEngineLogMiddleware_1.appEngineLogMiddleware)());
|
|
24
24
|
if (!isTest) {
|
|
25
|
-
app.use((0,
|
|
25
|
+
app.use((0, asyncLocalStorageMiddleware_1.asyncLocalStorageMiddleware)());
|
|
26
26
|
}
|
|
27
27
|
// The request handler must be the first middleware on the app
|
|
28
28
|
if (sentryService) {
|
|
@@ -30,12 +30,12 @@ function createDefaultApp(cfg) {
|
|
|
30
30
|
// which will trigger genericErrorHandler "headers already sent"
|
|
31
31
|
app.use(sentryService.getRequestHandler());
|
|
32
32
|
}
|
|
33
|
-
app.use((0, __1.
|
|
34
|
-
app.use((0,
|
|
33
|
+
app.use((0, __1.methodOverrideMiddleware)());
|
|
34
|
+
app.use((0, requestTimeoutMiddleware_1.requestTimeoutMiddleware)());
|
|
35
35
|
// app.use(serverStatsMiddleware()) // disabled by default
|
|
36
36
|
// app.use(bodyParserTimeout()) // removed by default
|
|
37
37
|
if (!(0, __1.isGAE)() && !isTest) {
|
|
38
|
-
app.use((0,
|
|
38
|
+
app.use((0, simpleRequestLoggerMiddleware_1.simpleRequestLoggerMiddleware)());
|
|
39
39
|
}
|
|
40
40
|
// app.use(safeJsonMiddleware()) // optional
|
|
41
41
|
app.use(express.json({ limit: '1mb' }));
|
|
@@ -65,11 +65,11 @@ function createDefaultApp(cfg) {
|
|
|
65
65
|
// postHandlers
|
|
66
66
|
useHandlers(app, cfg.postHandlers);
|
|
67
67
|
// Generic 404 handler
|
|
68
|
-
app.use((0,
|
|
68
|
+
app.use((0, notFoundMiddleware_1.notFoundMiddleware)());
|
|
69
69
|
// Generic error handler
|
|
70
70
|
// It handles errors, returns proper status, does sentry.captureException(),
|
|
71
71
|
// assigns err.data.errorId from sentry
|
|
72
|
-
app.use((0,
|
|
72
|
+
app.use((0, genericErrorMiddleware_1.genericErrorMiddleware)({ sentryService }));
|
|
73
73
|
return app;
|
|
74
74
|
}
|
|
75
75
|
exports.createDefaultApp = createDefaultApp;
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import { RequestHandler } from 'express';
|
|
2
1
|
import { SentrySharedService } from '../sentry/sentry.shared.service';
|
|
2
|
+
import { BackendRequestHandler } from './server.model';
|
|
3
3
|
/**
|
|
4
4
|
* Plain RequestHandler can be provided - then it's mounted to /
|
|
5
5
|
* Otherwise `path` can be provided to specify mounting point.
|
|
6
6
|
*/
|
|
7
|
-
export declare type
|
|
8
|
-
export interface
|
|
7
|
+
export declare type BackendRequestHandlerCfg = BackendRequestHandler | BackendRequestHandlerWithPath;
|
|
8
|
+
export interface BackendRequestHandlerWithPath {
|
|
9
9
|
path: string;
|
|
10
|
-
handler:
|
|
10
|
+
handler: BackendRequestHandler;
|
|
11
11
|
}
|
|
12
12
|
/**
|
|
13
13
|
* Handlers are used in this order:
|
|
@@ -18,9 +18,9 @@ export interface RequestHandlerWithPath {
|
|
|
18
18
|
* 4. postHandlers
|
|
19
19
|
*/
|
|
20
20
|
export interface DefaultAppCfg {
|
|
21
|
-
preHandlers?:
|
|
22
|
-
handlers?:
|
|
23
|
-
resources?:
|
|
24
|
-
postHandlers?:
|
|
21
|
+
preHandlers?: BackendRequestHandlerCfg[];
|
|
22
|
+
handlers?: BackendRequestHandlerCfg[];
|
|
23
|
+
resources?: BackendRequestHandlerCfg[];
|
|
24
|
+
postHandlers?: BackendRequestHandlerCfg[];
|
|
25
25
|
sentryService?: SentrySharedService;
|
|
26
26
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import type { DeployInfo } from '../deploy
|
|
1
|
+
import type { DeployInfo } from '../deploy';
|
|
2
2
|
export declare const getDeployInfo: ((projectDir: string) => DeployInfo) & import("@naturalcycles/js-lib/dist/decorators/memoFn").MemoizedFunction;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { SentrySharedService } from '../sentry/sentry.shared.service';
|
|
2
|
+
import { BackendErrorRequestHandler, BackendRequest, BackendResponse } from './server.model';
|
|
3
|
+
export interface GenericErrorMiddlewareCfg {
|
|
4
|
+
sentryService?: SentrySharedService;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Generic error handler.
|
|
8
|
+
* Returns HTTP code based on err.data.httpStatusCode (default to 500).
|
|
9
|
+
* Sends json payload as ErrorResponse, transformed via errorSharedUtil.
|
|
10
|
+
*/
|
|
11
|
+
export declare function genericErrorMiddleware(cfg?: GenericErrorMiddlewareCfg): BackendErrorRequestHandler;
|
|
12
|
+
export declare function respondWithError(req: BackendRequest, res: BackendResponse, err: any): void;
|