@naturalcycles/backend-lib 2.73.1 → 3.1.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 (96) 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/index.d.ts +26 -24
  5. package/dist/index.js +29 -50
  6. package/dist/sentry/sentry.shared.service.d.ts +3 -3
  7. package/dist/server/appEngineLogMiddleware.d.ts +13 -0
  8. package/dist/server/{handlers/createGaeLogMiddleware.js → appEngineLogMiddleware.js} +6 -7
  9. package/dist/server/{handlers/asyncLocalStorage.mw.d.ts → asyncLocalStorageMiddleware.d.ts} +4 -4
  10. package/dist/server/{handlers/asyncLocalStorage.mw.js → asyncLocalStorageMiddleware.js} +6 -6
  11. package/dist/server/{handlers/bodyParserTimeout.mw.d.ts → bodyParserTimeoutMiddleware.d.ts} +4 -4
  12. package/dist/server/{handlers/bodyParserTimeout.mw.js → bodyParserTimeoutMiddleware.js} +10 -7
  13. package/dist/server/catchWrapper.d.ts +2 -2
  14. package/dist/server/createDefaultApp.d.ts +2 -2
  15. package/dist/server/createDefaultApp.js +13 -13
  16. package/dist/server/createDefaultApp.model.d.ts +8 -8
  17. package/dist/server/deployInfo.util.d.ts +1 -1
  18. package/dist/server/genericErrorMiddleware.d.ts +12 -0
  19. package/dist/server/{handlers/genericErrorHandler.mw.js → genericErrorMiddleware.js} +14 -7
  20. package/dist/server/getDefaultRouter.d.ts +2 -2
  21. package/dist/server/methodOverrideMiddleware.d.ts +8 -0
  22. package/dist/server/{handlers/methodOverride.mw.js → methodOverrideMiddleware.js} +3 -3
  23. package/dist/server/notFoundMiddleware.d.ts +2 -0
  24. package/dist/server/notFoundMiddleware.js +10 -0
  25. package/dist/server/okMiddleware.d.ts +2 -0
  26. package/dist/server/{handlers/okHandler.mw.js → okMiddleware.js} +3 -3
  27. package/dist/server/{handlers/reqValidation.mw.d.ts → reqValidationMiddleware.d.ts} +2 -2
  28. package/dist/server/{handlers/reqValidation.mw.js → reqValidationMiddleware.js} +0 -0
  29. package/dist/server/request.log.util.d.ts +2 -2
  30. package/dist/server/request.util.d.ts +10 -2
  31. package/dist/server/request.util.js +8 -0
  32. package/dist/server/requestTimeoutMiddleware.d.ts +31 -0
  33. package/dist/server/requestTimeoutMiddleware.js +68 -0
  34. package/dist/server/{handlers/safeJsonMiddleware.d.ts → safeJsonMiddleware.d.ts} +2 -2
  35. package/dist/server/{handlers/safeJsonMiddleware.js → safeJsonMiddleware.js} +0 -0
  36. package/dist/server/server.model.d.ts +37 -0
  37. package/dist/server/server.model.js +2 -0
  38. package/dist/server/serverStatsMiddleware.d.ts +13 -0
  39. package/dist/server/{handlers/serverStatsMiddleware.js → serverStatsMiddleware.js} +4 -16
  40. package/dist/server/serverStatusMiddleware.d.ts +3 -0
  41. package/dist/server/{handlers/statusHandler.js → serverStatusMiddleware.js} +7 -7
  42. package/dist/server/simpleRequestLoggerMiddleware.d.ts +12 -0
  43. package/dist/server/{handlers/simpleRequestLogger.mw.js → simpleRequestLoggerMiddleware.js} +5 -5
  44. package/dist/server/startServer.model.d.ts +2 -2
  45. package/dist/server/{handlers/validate.mw.d.ts → validateMiddleware.d.ts} +5 -5
  46. package/dist/server/{handlers/validate.mw.js → validateMiddleware.js} +0 -0
  47. package/dist/testing/express.test.service.d.ts +6 -6
  48. package/dist/testing/express.test.service.js +8 -5
  49. package/package.json +1 -1
  50. package/src/admin/admin.mw.ts +7 -4
  51. package/src/admin/base.admin.service.ts +11 -12
  52. package/src/admin/secureHeader.mw.ts +2 -2
  53. package/src/db/httpDBRequestHandler.ts +2 -3
  54. package/src/index.ts +55 -68
  55. package/src/sentry/sentry.shared.service.ts +3 -4
  56. package/src/server/{handlers/createGaeLogMiddleware.ts → appEngineLogMiddleware.ts} +6 -29
  57. package/src/server/{handlers/asyncLocalStorage.mw.ts → asyncLocalStorageMiddleware.ts} +6 -6
  58. package/src/server/{handlers/bodyParserTimeout.mw.ts → bodyParserTimeoutMiddleware.ts} +14 -13
  59. package/src/server/catchWrapper.ts +2 -2
  60. package/src/server/createDefaultApp.model.ts +8 -8
  61. package/src/server/createDefaultApp.ts +22 -19
  62. package/src/server/deployInfo.util.ts +1 -1
  63. package/src/server/{handlers/genericErrorHandler.mw.ts → genericErrorMiddleware.ts} +19 -13
  64. package/src/server/getDefaultRouter.ts +2 -2
  65. package/src/server/{handlers/methodOverride.mw.ts → methodOverrideMiddleware.ts} +5 -3
  66. package/src/server/notFoundMiddleware.ts +8 -0
  67. package/src/server/okMiddleware.ts +7 -0
  68. package/src/server/{handlers/reqValidation.mw.ts → reqValidationMiddleware.ts} +2 -2
  69. package/src/server/request.log.util.ts +2 -2
  70. package/src/server/request.util.ts +10 -2
  71. package/src/server/requestTimeoutMiddleware.ts +117 -0
  72. package/src/server/{handlers/safeJsonMiddleware.ts → safeJsonMiddleware.ts} +3 -3
  73. package/src/server/server.model.ts +56 -0
  74. package/src/server/{handlers/serverStatsMiddleware.ts → serverStatsMiddleware.ts} +10 -22
  75. package/src/server/{handlers/statusHandler.ts → serverStatusMiddleware.ts} +5 -5
  76. package/src/server/{handlers/simpleRequestLogger.mw.ts → simpleRequestLoggerMiddleware.ts} +8 -7
  77. package/src/server/startServer.model.ts +2 -2
  78. package/src/server/{handlers/validate.mw.ts → validateMiddleware.ts} +6 -6
  79. package/src/testing/express.test.service.ts +12 -8
  80. package/dist/server/handlers/createGaeLogMiddleware.d.ts +0 -30
  81. package/dist/server/handlers/genericErrorHandler.mw.d.ts +0 -13
  82. package/dist/server/handlers/methodOverride.mw.d.ts +0 -8
  83. package/dist/server/handlers/notFoundHandler.mw.d.ts +0 -2
  84. package/dist/server/handlers/notFoundHandler.mw.js +0 -9
  85. package/dist/server/handlers/okHandler.mw.d.ts +0 -2
  86. package/dist/server/handlers/requestTimeout.mw.d.ts +0 -16
  87. package/dist/server/handlers/requestTimeout.mw.js +0 -34
  88. package/dist/server/handlers/sentryErrorHandler.mw.d.ts +0 -10
  89. package/dist/server/handlers/sentryErrorHandler.mw.js +0 -26
  90. package/dist/server/handlers/serverStatsMiddleware.d.ts +0 -13
  91. package/dist/server/handlers/simpleRequestLogger.mw.d.ts +0 -12
  92. package/dist/server/handlers/statusHandler.d.ts +0 -3
  93. package/src/server/handlers/notFoundHandler.mw.ts +0 -7
  94. package/src/server/handlers/okHandler.mw.ts +0 -7
  95. package/src/server/handlers/requestTimeout.mw.ts +0 -62
  96. package/src/server/handlers/sentryErrorHandler.mw.ts +0 -34
@@ -1,4 +1,4 @@
1
- import { RequestHandler } from 'express';
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) => RequestHandler;
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): RequestHandler;
30
- export declare function loginHtml(firebaseServiceCfg: FirebaseSharedServiceCfg): RequestHandler;
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 { RequestWithLog } from '../server/handlers/createGaeLogMiddleware';
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: RequestWithLog, email: string, reqPermissions: string[], required: boolean, granted: boolean, meta?: Record<string, any>): Promise<void>;
40
- getEmailByToken(req: RequestWithLog, adminToken?: string): Promise<string | undefined>;
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: Request): Promise<string | undefined>;
46
- isAdmin(req: Request): Promise<boolean>;
47
- getAdminInfo(req: Request): Promise<AdminInfo | undefined>;
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: Request, reqPermissions?: string[], meta?: Record<string, any>): Promise<AdminInfo | undefined>;
53
- requirePermissions(req: Request, reqPermissions?: string[], meta?: Record<string, any>, andComparison?: boolean): Promise<AdminInfo>;
54
- hasPermission(req: Request, reqPermission: string, meta?: Record<string, any>): Promise<boolean>;
55
- requirePermission(req: Request, reqPermission: string, meta?: Record<string, any>): Promise<AdminInfo>;
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(): RequestHandler;
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 { Router } from 'express';
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): Router;
23
+ export declare function httpDBRequestHandler(db: CommonDB): BackendRouter;
package/dist/index.d.ts CHANGED
@@ -5,30 +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
- import { isGAE } from './gae/appEngine.util';
8
+ export * from './gae/appEngine.util';
9
9
  import { SentrySharedService, SentrySharedServiceCfg } from './sentry/sentry.shared.service';
10
- import { catchWrapper } from './server/catchWrapper';
11
- import { createDefaultApp } from './server/createDefaultApp';
12
- import { DefaultAppCfg, RequestHandlerCfg, RequestHandlerWithPath } from './server/createDefaultApp.model';
13
- import { getDeployInfo } from './server/deployInfo.util';
14
- import { getDefaultRouter } from './server/getDefaultRouter';
15
- import { bodyParserTimeout, BodyParserTimeoutCfg, clearBodyParserTimeout } from './server/handlers/bodyParserTimeout.mw';
16
- import { genericErrorHandler, respondWithError } from './server/handlers/genericErrorHandler.mw';
17
- import { serverStatsHTMLHandler, serverStatsMiddleware } from './server/handlers/serverStatsMiddleware';
18
- import { methodOverride, MethodOverrideCfg } from './server/handlers/methodOverride.mw';
19
- import { notFoundHandler } from './server/handlers/notFoundHandler.mw';
20
- import { okHandler } from './server/handlers/okHandler.mw';
21
- import { requestTimeout, RequestTimeoutCfg } from './server/handlers/requestTimeout.mw';
22
- import { reqValidation, ReqValidationOptions } from './server/handlers/reqValidation.mw';
23
- import { simpleRequestLogger, SimpleRequestLoggerCfg } from './server/handlers/simpleRequestLogger.mw';
24
- import { statusHandler, statusHandlerData } from './server/handlers/statusHandler';
25
- import { validateBody, validateParams, validateQuery } from './server/handlers/validate.mw';
26
- import { coloredHttpCode, logRequest } from './server/request.log.util';
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
- import { createAsyncLocalStorage, getRequest, getRequestLogger, requestLogger } from './server/handlers/asyncLocalStorage.mw';
30
- import type { RequestWithLog } from './server/handlers/createGaeLogMiddleware';
31
- export * from './server/handlers/createGaeLogMiddleware';
32
- import { safeJsonMiddleware } from './server/handlers/safeJsonMiddleware';
33
- export type { MethodOverrideCfg, SentrySharedServiceCfg, RequestHandlerWithPath, RequestHandlerCfg, DefaultAppCfg, StartServerCfg, StartServerData, EnvSharedServiceCfg, BaseEnv, AdminMiddleware, AdminServiceCfg, AdminInfo, RequireAdminCfg, SecureHeaderMiddlewareCfg, BodyParserTimeoutCfg, RequestTimeoutCfg, SimpleRequestLoggerCfg, ReqValidationOptions, RequestWithLog, };
34
- export { BackendServer, SentrySharedService, EnvSharedService, reqValidation, notFoundHandler, genericErrorHandler, methodOverride, createDefaultApp, startServer, catchWrapper, getDefaultRouter, isGAE, statusHandler, statusHandlerData, okHandler, getDeployInfo, onFinished, respondWithError, logRequest, FirebaseSharedService, createAdminMiddleware, BaseAdminService, loginHtml, createSecureHeaderMiddleware, bodyParserTimeout, clearBodyParserTimeout, requestTimeout, simpleRequestLogger, coloredHttpCode, validateBody, validateParams, validateQuery, createAsyncLocalStorage, getRequest, getRequestLogger, requestLogger, serverStatsHTMLHandler, serverStatsMiddleware, safeJsonMiddleware, };
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,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.safeJsonMiddleware = exports.serverStatsMiddleware = exports.serverStatsHTMLHandler = exports.requestLogger = exports.getRequestLogger = exports.getRequest = exports.createAsyncLocalStorage = exports.validateQuery = exports.validateParams = exports.validateBody = exports.coloredHttpCode = exports.simpleRequestLogger = exports.requestTimeout = exports.clearBodyParserTimeout = exports.bodyParserTimeout = exports.createSecureHeaderMiddleware = exports.loginHtml = exports.BaseAdminService = exports.createAdminMiddleware = exports.FirebaseSharedService = exports.logRequest = exports.respondWithError = exports.onFinished = exports.getDeployInfo = exports.okHandler = exports.statusHandlerData = exports.statusHandler = exports.isGAE = exports.getDefaultRouter = exports.catchWrapper = exports.startServer = exports.createDefaultApp = exports.methodOverride = exports.genericErrorHandler = exports.notFoundHandler = exports.reqValidation = exports.EnvSharedService = exports.SentrySharedService = exports.BackendServer = void 0;
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
4
  const tslib_1 = require("tslib");
5
5
  const onFinished = require("on-finished");
6
6
  exports.onFinished = onFinished;
@@ -15,57 +15,36 @@ const secureHeader_mw_1 = require("./admin/secureHeader.mw");
15
15
  Object.defineProperty(exports, "createSecureHeaderMiddleware", { enumerable: true, get: function () { return secureHeader_mw_1.createSecureHeaderMiddleware; } });
16
16
  const env_shared_service_1 = require("./env/env.shared.service");
17
17
  Object.defineProperty(exports, "EnvSharedService", { enumerable: true, get: function () { return env_shared_service_1.EnvSharedService; } });
18
- const appEngine_util_1 = require("./gae/appEngine.util");
19
- Object.defineProperty(exports, "isGAE", { enumerable: true, get: function () { return appEngine_util_1.isGAE; } });
18
+ (0, tslib_1.__exportStar)(require("./gae/appEngine.util"), exports);
20
19
  const sentry_shared_service_1 = require("./sentry/sentry.shared.service");
21
20
  Object.defineProperty(exports, "SentrySharedService", { enumerable: true, get: function () { return sentry_shared_service_1.SentrySharedService; } });
22
- const catchWrapper_1 = require("./server/catchWrapper");
23
- Object.defineProperty(exports, "catchWrapper", { enumerable: true, get: function () { return catchWrapper_1.catchWrapper; } });
24
- const createDefaultApp_1 = require("./server/createDefaultApp");
25
- Object.defineProperty(exports, "createDefaultApp", { enumerable: true, get: function () { return createDefaultApp_1.createDefaultApp; } });
26
- const deployInfo_util_1 = require("./server/deployInfo.util");
27
- Object.defineProperty(exports, "getDeployInfo", { enumerable: true, get: function () { return deployInfo_util_1.getDeployInfo; } });
28
- const getDefaultRouter_1 = require("./server/getDefaultRouter");
29
- Object.defineProperty(exports, "getDefaultRouter", { enumerable: true, get: function () { return getDefaultRouter_1.getDefaultRouter; } });
30
- const bodyParserTimeout_mw_1 = require("./server/handlers/bodyParserTimeout.mw");
31
- Object.defineProperty(exports, "bodyParserTimeout", { enumerable: true, get: function () { return bodyParserTimeout_mw_1.bodyParserTimeout; } });
32
- Object.defineProperty(exports, "clearBodyParserTimeout", { enumerable: true, get: function () { return bodyParserTimeout_mw_1.clearBodyParserTimeout; } });
33
- const genericErrorHandler_mw_1 = require("./server/handlers/genericErrorHandler.mw");
34
- Object.defineProperty(exports, "genericErrorHandler", { enumerable: true, get: function () { return genericErrorHandler_mw_1.genericErrorHandler; } });
35
- Object.defineProperty(exports, "respondWithError", { enumerable: true, get: function () { return genericErrorHandler_mw_1.respondWithError; } });
36
- const serverStatsMiddleware_1 = require("./server/handlers/serverStatsMiddleware");
37
- Object.defineProperty(exports, "serverStatsHTMLHandler", { enumerable: true, get: function () { return serverStatsMiddleware_1.serverStatsHTMLHandler; } });
38
- Object.defineProperty(exports, "serverStatsMiddleware", { enumerable: true, get: function () { return serverStatsMiddleware_1.serverStatsMiddleware; } });
39
- const methodOverride_mw_1 = require("./server/handlers/methodOverride.mw");
40
- Object.defineProperty(exports, "methodOverride", { enumerable: true, get: function () { return methodOverride_mw_1.methodOverride; } });
41
- const notFoundHandler_mw_1 = require("./server/handlers/notFoundHandler.mw");
42
- Object.defineProperty(exports, "notFoundHandler", { enumerable: true, get: function () { return notFoundHandler_mw_1.notFoundHandler; } });
43
- const okHandler_mw_1 = require("./server/handlers/okHandler.mw");
44
- Object.defineProperty(exports, "okHandler", { enumerable: true, get: function () { return okHandler_mw_1.okHandler; } });
45
- const requestTimeout_mw_1 = require("./server/handlers/requestTimeout.mw");
46
- Object.defineProperty(exports, "requestTimeout", { enumerable: true, get: function () { return requestTimeout_mw_1.requestTimeout; } });
47
- const reqValidation_mw_1 = require("./server/handlers/reqValidation.mw");
48
- Object.defineProperty(exports, "reqValidation", { enumerable: true, get: function () { return reqValidation_mw_1.reqValidation; } });
49
- const simpleRequestLogger_mw_1 = require("./server/handlers/simpleRequestLogger.mw");
50
- Object.defineProperty(exports, "simpleRequestLogger", { enumerable: true, get: function () { return simpleRequestLogger_mw_1.simpleRequestLogger; } });
51
- const statusHandler_1 = require("./server/handlers/statusHandler");
52
- Object.defineProperty(exports, "statusHandler", { enumerable: true, get: function () { return statusHandler_1.statusHandler; } });
53
- Object.defineProperty(exports, "statusHandlerData", { enumerable: true, get: function () { return statusHandler_1.statusHandlerData; } });
54
- const validate_mw_1 = require("./server/handlers/validate.mw");
55
- Object.defineProperty(exports, "validateBody", { enumerable: true, get: function () { return validate_mw_1.validateBody; } });
56
- Object.defineProperty(exports, "validateParams", { enumerable: true, get: function () { return validate_mw_1.validateParams; } });
57
- Object.defineProperty(exports, "validateQuery", { enumerable: true, get: function () { return validate_mw_1.validateQuery; } });
58
- const request_log_util_1 = require("./server/request.log.util");
59
- Object.defineProperty(exports, "coloredHttpCode", { enumerable: true, get: function () { return request_log_util_1.coloredHttpCode; } });
60
- 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);
61
44
  const startServer_1 = require("./server/startServer");
62
45
  Object.defineProperty(exports, "BackendServer", { enumerable: true, get: function () { return startServer_1.BackendServer; } });
63
46
  Object.defineProperty(exports, "startServer", { enumerable: true, get: function () { return startServer_1.startServer; } });
64
- const asyncLocalStorage_mw_1 = require("./server/handlers/asyncLocalStorage.mw");
65
- Object.defineProperty(exports, "createAsyncLocalStorage", { enumerable: true, get: function () { return asyncLocalStorage_mw_1.createAsyncLocalStorage; } });
66
- Object.defineProperty(exports, "getRequest", { enumerable: true, get: function () { return asyncLocalStorage_mw_1.getRequest; } });
67
- Object.defineProperty(exports, "getRequestLogger", { enumerable: true, get: function () { return asyncLocalStorage_mw_1.getRequestLogger; } });
68
- Object.defineProperty(exports, "requestLogger", { enumerable: true, get: function () { return asyncLocalStorage_mw_1.requestLogger; } });
69
- (0, tslib_1.__exportStar)(require("./server/handlers/createGaeLogMiddleware"), exports);
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 { ErrorRequestHandler, RequestHandler } from 'express';
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(): RequestHandler;
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(): ErrorRequestHandler;
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.createGAELogMiddleware = exports.devLogger = exports.gaeLogger = void 0;
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");
@@ -40,7 +40,7 @@ function logToDev(requestId, args) {
40
40
  ...args.map(a => (0, nodejs_lib_1.inspectAny)(a, { includeErrorStack: true, colors: true })),
41
41
  ].join(' '));
42
42
  }
43
- function createGAELogMiddleware() {
43
+ function appEngineLogMiddleware() {
44
44
  if (!isGAE || !GOOGLE_CLOUD_PROJECT) {
45
45
  // Local machine, return "simple" logToDev middleware with request numbering
46
46
  return function gaeLogMiddlewareDev(req, res, next) {
@@ -51,15 +51,14 @@ function createGAELogMiddleware() {
51
51
  };
52
52
  }
53
53
  // Otherwise, we're in AppEngine
54
- return function gaeLogMiddleware(req, res, next) {
55
- const meta = {};
54
+ return function appEngineLogHandler(req, res, next) {
56
55
  const traceHeader = req.header('x-cloud-trace-context');
57
56
  if (traceHeader) {
58
57
  const [trace] = traceHeader.split('/');
59
- Object.assign(meta, {
58
+ const meta = {
60
59
  'logging.googleapis.com/trace': `projects/${GOOGLE_CLOUD_PROJECT}/traces/${trace}`,
61
60
  'appengine.googleapis.com/request_id': req.header('x-appengine-request-log-id'),
62
- });
61
+ };
63
62
  Object.assign(req, {
64
63
  log: (...args) => logToAppEngine({ ...meta, severity: 'INFO' }, args),
65
64
  warn: (...args) => logToAppEngine({ ...meta, severity: 'WARNING' }, args),
@@ -73,4 +72,4 @@ function createGAELogMiddleware() {
73
72
  next();
74
73
  };
75
74
  }
76
- exports.createGAELogMiddleware = createGAELogMiddleware;
75
+ exports.appEngineLogMiddleware = appEngineLogMiddleware;
@@ -1,10 +1,10 @@
1
1
  import { CommonLogger } from '@naturalcycles/js-lib';
2
- import { Request, RequestHandler } from 'express';
2
+ import { BackendRequest, BackendRequestHandler } from './server.model';
3
3
  export interface RequestLocalStorage {
4
- req: Request;
4
+ req: BackendRequest;
5
5
  }
6
- export declare function createAsyncLocalStorage(): RequestHandler;
7
- export declare function getRequest(): Request;
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.createAsyncLocalStorage = void 0;
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 createGaeLogMiddleware_1 = require("./createGaeLogMiddleware");
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 createAsyncLocalStorage() {
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.createAsyncLocalStorage = createAsyncLocalStorage;
20
+ exports.asyncLocalStorageMiddleware = asyncLocalStorageMiddleware;
21
21
  function getRequest() {
22
- return storage().getStore().req;
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 ? createGaeLogMiddleware_1.gaeLogger : createGaeLogMiddleware_1.devLogger);
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 { RequestHandler } from 'express';
2
- export interface BodyParserTimeoutCfg {
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 bodyParserTimeout(cfg?: BodyParserTimeoutCfg): RequestHandler;
19
+ export declare function bodyParserTimeoutMiddleware(cfg?: BodyParserTimeoutMiddlewareCfg): BackendRequestHandler;
20
20
  /**
21
21
  * Should be called AFTER bodyParser
22
22
  */
23
- export declare function clearBodyParserTimeout(): RequestHandler;
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.bodyParserTimeout = void 0;
3
+ exports.clearBodyParserTimeout = exports.bodyParserTimeoutMiddleware = void 0;
4
4
  const js_lib_1 = require("@naturalcycles/js-lib");
5
- const index_1 = require("../../index");
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 bodyParserTimeout(cfg = {}) {
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
- req._bodyParserTimeout = setTimeout(() => {
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.bodyParserTimeout = bodyParserTimeout;
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
- if (req._bodyParserTimeout)
36
- clearTimeout(req._bodyParserTimeout);
39
+ clearTimeout(req.bodyParserTimeout);
37
40
  next();
38
41
  };
39
42
  }
@@ -1,2 +1,2 @@
1
- import { RequestHandler } from 'express';
2
- export declare const catchWrapper: (fn: RequestHandler) => RequestHandler;
1
+ import { BackendRequestHandler } from './server.model';
2
+ export declare const catchWrapper: (fn: BackendRequestHandler) => BackendRequestHandler;
@@ -1,3 +1,3 @@
1
- import type { Application } from 'express';
1
+ import { BackendApplication } from '..';
2
2
  import { DefaultAppCfg } from './createDefaultApp.model';
3
- export declare function createDefaultApp(cfg: DefaultAppCfg): Application;
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 asyncLocalStorage_mw_1 = require("./handlers/asyncLocalStorage.mw");
9
- const createGaeLogMiddleware_1 = require("./handlers/createGaeLogMiddleware");
10
- const genericErrorHandler_mw_1 = require("./handlers/genericErrorHandler.mw");
11
- const notFoundHandler_mw_1 = require("./handlers/notFoundHandler.mw");
12
- const requestTimeout_mw_1 = require("./handlers/requestTimeout.mw");
13
- const simpleRequestLogger_mw_1 = require("./handlers/simpleRequestLogger.mw");
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, createGaeLogMiddleware_1.createGAELogMiddleware)());
23
+ app.use((0, appEngineLogMiddleware_1.appEngineLogMiddleware)());
24
24
  if (!isTest) {
25
- app.use((0, asyncLocalStorage_mw_1.createAsyncLocalStorage)());
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.methodOverride)());
34
- app.use((0, requestTimeout_mw_1.requestTimeout)());
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, simpleRequestLogger_mw_1.simpleRequestLogger)());
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, notFoundHandler_mw_1.notFoundHandler)());
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, genericErrorHandler_mw_1.genericErrorHandler)({ sentryService }));
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 RequestHandlerCfg = RequestHandler | RequestHandlerWithPath;
8
- export interface RequestHandlerWithPath {
7
+ export declare type BackendRequestHandlerCfg = BackendRequestHandler | BackendRequestHandlerWithPath;
8
+ export interface BackendRequestHandlerWithPath {
9
9
  path: string;
10
- handler: RequestHandler;
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?: RequestHandlerCfg[];
22
- handlers?: RequestHandlerCfg[];
23
- resources?: RequestHandlerCfg[];
24
- postHandlers?: RequestHandlerCfg[];
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/deploy.model';
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;