@naturalcycles/backend-lib 5.6.0 → 5.7.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 (39) hide show
  1. package/dist/admin/adminMiddleware.js +4 -5
  2. package/dist/admin/secureHeaderMiddleware.js +1 -2
  3. package/dist/db/httpDBRequestHandler.js +1 -2
  4. package/dist/deploy/backend.cfg.util.js +1 -2
  5. package/dist/deploy/deploy.util.js +5 -6
  6. package/dist/deploy/deployGae.js +2 -3
  7. package/dist/deploy/deployHealthCheck.js +2 -2
  8. package/dist/deploy/deployPrepare.js +2 -2
  9. package/dist/gae/appEngine.util.js +1 -2
  10. package/dist/server/appEngineLogMiddleware.js +2 -2
  11. package/dist/server/asyncLocalStorageMiddleware.js +4 -4
  12. package/dist/server/basicAuthMiddleware.js +1 -2
  13. package/dist/server/bodyParserTimeoutMiddleware.js +2 -3
  14. package/dist/server/createDefaultApp.js +1 -2
  15. package/dist/server/genericErrorMiddleware.d.ts +1 -1
  16. package/dist/server/genericErrorMiddleware.js +3 -7
  17. package/dist/server/getDefaultRouter.js +1 -2
  18. package/dist/server/methodOverrideMiddleware.js +1 -2
  19. package/dist/server/notFoundMiddleware.js +1 -2
  20. package/dist/server/okMiddleware.js +1 -2
  21. package/dist/server/request.log.util.js +2 -3
  22. package/dist/server/request.util.js +1 -2
  23. package/dist/server/requestTimeoutMiddleware.js +2 -3
  24. package/dist/server/safeJsonMiddleware.js +1 -2
  25. package/dist/server/server.model.d.ts +0 -2
  26. package/dist/server/server.util.d.ts +0 -1
  27. package/dist/server/server.util.js +1 -2
  28. package/dist/server/serverStatsMiddleware.js +2 -2
  29. package/dist/server/serverStatusMiddleware.js +2 -3
  30. package/dist/server/simpleRequestLoggerMiddleware.js +1 -2
  31. package/dist/server/startServer.d.ts +0 -1
  32. package/dist/server/startServer.js +2 -2
  33. package/dist/server/startServer.model.d.ts +0 -1
  34. package/dist/server/validation/validateMiddleware.js +3 -4
  35. package/dist/server/validation/zodValidateMiddleware.js +1 -2
  36. package/package.json +1 -1
  37. package/src/deploy/deploy.util.ts +1 -1
  38. package/src/server/genericErrorMiddleware.ts +1 -4
  39. package/src/server/serverStatsMiddleware.ts +2 -2
@@ -1,6 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getLoginHtmlRedirect = exports.loginHtml = exports.requireAdminPermissions = exports.createAdminMiddleware = void 0;
3
+ exports.createAdminMiddleware = createAdminMiddleware;
4
+ exports.requireAdminPermissions = requireAdminPermissions;
5
+ exports.loginHtml = loginHtml;
6
+ exports.getLoginHtmlRedirect = getLoginHtmlRedirect;
4
7
  const tslib_1 = require("tslib");
5
8
  const js_lib_1 = require("@naturalcycles/js-lib");
6
9
  const nodejs_lib_1 = require("@naturalcycles/nodejs-lib");
@@ -11,7 +14,6 @@ function createAdminMiddleware(adminService, cfgDefaults = {}) {
11
14
  ...cfg,
12
15
  });
13
16
  }
14
- exports.createAdminMiddleware = createAdminMiddleware;
15
17
  /**
16
18
  * Require Admin permission.
17
19
  * If not authenticated - will redirect to `loginHtmlPath` (default to /login.html).
@@ -39,7 +41,6 @@ function requireAdminPermissions(adminService, reqPermissions = [], cfg = {}) {
39
41
  }
40
42
  };
41
43
  }
42
- exports.requireAdminPermissions = requireAdminPermissions;
43
44
  function loginHtml(firebaseServiceCfg) {
44
45
  const { apiKey: firebaseApiKey, authDomain: firebaseAuthDomain, adminAuthProvider: firebaseAuthProvider = 'GoogleAuthProvider', } = firebaseServiceCfg;
45
46
  return (req, res) => {
@@ -50,7 +51,6 @@ function loginHtml(firebaseServiceCfg) {
50
51
  }));
51
52
  };
52
53
  }
53
- exports.loginHtml = loginHtml;
54
54
  const getLoginHtml = (0, js_lib_1._memoFn)((cfg) => {
55
55
  console.log(`reading login.html`);
56
56
  const tmpl = nodejs_lib_1.fs2.readText(`${__dirname}/login.html`);
@@ -68,4 +68,3 @@ function getLoginHtmlRedirect(href) {
68
68
  </html>
69
69
  `;
70
70
  }
71
- exports.getLoginHtmlRedirect = getLoginHtmlRedirect;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createSecureHeaderMiddleware = void 0;
3
+ exports.createSecureHeaderMiddleware = createSecureHeaderMiddleware;
4
4
  const js_lib_1 = require("@naturalcycles/js-lib");
5
5
  const nodejs_lib_1 = require("@naturalcycles/nodejs-lib");
6
6
  const adminMiddleware_1 = require("./adminMiddleware");
@@ -11,7 +11,6 @@ const adminMiddleware_1 = require("./adminMiddleware");
11
11
  function createSecureHeaderMiddleware(cfg) {
12
12
  return reqPermissions => requireSecureHeaderOrAdmin(cfg, reqPermissions);
13
13
  }
14
- exports.createSecureHeaderMiddleware = createSecureHeaderMiddleware;
15
14
  function requireSecureHeaderOrAdmin(cfg, reqPermissions) {
16
15
  const { secureHeaderKey = 'Authorization', secureHeaderValue } = cfg;
17
16
  const requireAdmin = (0, adminMiddleware_1.requireAdminPermissions)(cfg.adminService, reqPermissions, cfg);
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.httpDBRequestHandler = void 0;
3
+ exports.httpDBRequestHandler = httpDBRequestHandler;
4
4
  const db_lib_1 = require("@naturalcycles/db-lib");
5
5
  const validation_1 = require("@naturalcycles/db-lib/dist/validation");
6
6
  const nodejs_lib_1 = require("@naturalcycles/nodejs-lib");
@@ -84,4 +84,3 @@ function httpDBRequestHandler(db) {
84
84
  });
85
85
  return router;
86
86
  }
87
- exports.httpDBRequestHandler = httpDBRequestHandler;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getBackendCfg = void 0;
3
+ exports.getBackendCfg = getBackendCfg;
4
4
  const nodejs_lib_1 = require("@naturalcycles/nodejs-lib");
5
5
  const paths_cnst_1 = require("../paths.cnst");
6
6
  const backendCfgSchema = nodejs_lib_1.AjvSchema.readJsonSync(`${paths_cnst_1.resourcesDir}/backendCfg.schema.json`, {
@@ -15,4 +15,3 @@ function getBackendCfg(projectDir = '.') {
15
15
  backendCfgSchema.validate(backendCfg);
16
16
  return backendCfg;
17
17
  }
18
- exports.getBackendCfg = getBackendCfg;
@@ -1,6 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.validateGAEServiceName = exports.createAppYaml = exports.createAndSaveAppYaml = exports.createDeployInfo = exports.createAndSaveDeployInfo = void 0;
3
+ exports.createAndSaveDeployInfo = createAndSaveDeployInfo;
4
+ exports.createDeployInfo = createDeployInfo;
5
+ exports.createAndSaveAppYaml = createAndSaveAppYaml;
6
+ exports.createAppYaml = createAppYaml;
7
+ exports.validateGAEServiceName = validateGAEServiceName;
4
8
  const js_lib_1 = require("@naturalcycles/js-lib");
5
9
  const nodejs_lib_1 = require("@naturalcycles/nodejs-lib");
6
10
  const APP_YAML_DEFAULT = () => ({
@@ -28,7 +32,6 @@ async function createAndSaveDeployInfo(backendCfg, targetDir) {
28
32
  console.log(`saved ${(0, nodejs_lib_1.dimGrey)(deployInfoPath)}`);
29
33
  return deployInfo;
30
34
  }
31
- exports.createAndSaveDeployInfo = createAndSaveDeployInfo;
32
35
  async function createDeployInfo(backendCfg, overrideBranch) {
33
36
  const simpleGit = require('simple-git'); // lazy load
34
37
  const git = simpleGit('.');
@@ -70,7 +73,6 @@ async function createDeployInfo(backendCfg, overrideBranch) {
70
73
  console.log({ deployInfo });
71
74
  return deployInfo;
72
75
  }
73
- exports.createDeployInfo = createDeployInfo;
74
76
  function createAndSaveAppYaml(backendCfg, deployInfo, projectDir, targetDir, appYamlPassEnv = '') {
75
77
  const appYaml = createAppYaml(backendCfg, deployInfo, projectDir, appYamlPassEnv);
76
78
  const appYamlPath = `${targetDir}/app.yaml`;
@@ -78,7 +80,6 @@ function createAndSaveAppYaml(backendCfg, deployInfo, projectDir, targetDir, app
78
80
  console.log(`saved ${(0, nodejs_lib_1.dimGrey)(appYamlPath)}`);
79
81
  return appYaml;
80
82
  }
81
- exports.createAndSaveAppYaml = createAndSaveAppYaml;
82
83
  function createAppYaml(backendCfg, deployInfo, projectDir, appYamlPassEnv = '') {
83
84
  const { appEnvDefault, appEnvByBranch = {} } = backendCfg;
84
85
  const { gaeService: service, gitBranch } = deployInfo;
@@ -129,7 +130,6 @@ function createAppYaml(backendCfg, deployInfo, projectDir, appYamlPassEnv = '')
129
130
  });
130
131
  return appYaml;
131
132
  }
132
- exports.createAppYaml = createAppYaml;
133
133
  function redactedAppYaml(appYaml) {
134
134
  return {
135
135
  ...appYaml,
@@ -144,4 +144,3 @@ function validateGAEServiceName(serviceName) {
144
144
  .replaceAll(/[^0-9a-z-]/gi, '')
145
145
  .slice(0, 40);
146
146
  }
147
- exports.validateGAEServiceName = validateGAEServiceName;
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.undeployGae = exports.deployGae = void 0;
3
+ exports.deployGae = deployGae;
4
+ exports.undeployGae = undeployGae;
4
5
  const dev_lib_1 = require("@naturalcycles/dev-lib");
5
6
  const js_lib_1 = require("@naturalcycles/js-lib");
6
7
  const nodejs_lib_1 = require("@naturalcycles/nodejs-lib");
@@ -58,7 +59,6 @@ async function deployGae(opt = {}) {
58
59
  logs(gaeProject, gaeService, gaeVersion);
59
60
  }
60
61
  }
61
- exports.deployGae = deployGae;
62
62
  /**
63
63
  * Undeploys/removes the GAE service/version, using the same rules as deployGae.
64
64
  * Detects the service/version by the same criteria: branch name, backend.cfg.yaml, etc.
@@ -75,7 +75,6 @@ async function undeployGae(branch) {
75
75
  (0, nodejs_lib_1.execVoidCommandSync)(`gcloud app versions delete --project ${gaeProject} --service ${gaeService} ${gaeVersion} --quiet`, [], { shell: true });
76
76
  (0, nodejs_lib_1.appendToGithubSummary)(`removed ${gaeProject}/${gaeService}/${gaeVersion}`);
77
77
  }
78
- exports.undeployGae = undeployGae;
79
78
  function logs(gaeProject, gaeService, gaeVersion) {
80
79
  try {
81
80
  (0, nodejs_lib_1.execVoidCommandSync)(`gcloud app logs read --project ${gaeProject} --service ${gaeService} --version ${gaeVersion}`, [], { shell: true });
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.deployHealthCheck = exports.deployHealthCheckYargsOptions = void 0;
3
+ exports.deployHealthCheckYargsOptions = void 0;
4
+ exports.deployHealthCheck = deployHealthCheck;
4
5
  const node_util_1 = require("node:util");
5
6
  const js_lib_1 = require("@naturalcycles/js-lib");
6
7
  const nodejs_lib_1 = require("@naturalcycles/nodejs-lib");
@@ -139,4 +140,3 @@ async function deployHealthCheck(url, opt = {}) {
139
140
  }
140
141
  }
141
142
  }
142
- exports.deployHealthCheck = deployHealthCheck;
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.deployPrepare = exports.deployPrepareYargsOptions = void 0;
3
+ exports.deployPrepareYargsOptions = void 0;
4
+ exports.deployPrepare = deployPrepare;
4
5
  const nodejs_lib_1 = require("@naturalcycles/nodejs-lib");
5
6
  const paths_cnst_1 = require("../paths.cnst");
6
7
  const backend_cfg_util_1 = require("./backend.cfg.util");
@@ -81,4 +82,3 @@ async function deployPrepare(opt = {}) {
81
82
  (0, deploy_util_1.createAndSaveAppYaml)(backendCfg, deployInfo, projectDir, targetDir, appYamlPassEnv);
82
83
  return deployInfo;
83
84
  }
84
- exports.deployPrepare = deployPrepare;
@@ -1,8 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.isGAE = void 0;
3
+ exports.isGAE = isGAE;
4
4
  const { GAE_INSTANCE } = process.env;
5
5
  function isGAE() {
6
6
  return !!GAE_INSTANCE;
7
7
  }
8
- exports.isGAE = isGAE;
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.appEngineLogMiddleware = exports.ciLogger = exports.devLogger = exports.gaeLogger = void 0;
3
+ exports.ciLogger = exports.devLogger = exports.gaeLogger = void 0;
4
+ exports.appEngineLogMiddleware = appEngineLogMiddleware;
4
5
  const node_util_1 = require("node:util");
5
6
  const nodejs_lib_1 = require("@naturalcycles/nodejs-lib");
6
7
  const { GOOGLE_CLOUD_PROJECT, GAE_INSTANCE } = process.env;
@@ -86,4 +87,3 @@ function appEngineLogMiddleware() {
86
87
  next();
87
88
  };
88
89
  }
89
- exports.appEngineLogMiddleware = appEngineLogMiddleware;
@@ -1,6 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.requestLogger = exports.getRequestLogger = exports.getRequest = exports.asyncLocalStorageMiddleware = void 0;
3
+ exports.requestLogger = void 0;
4
+ exports.asyncLocalStorageMiddleware = asyncLocalStorageMiddleware;
5
+ exports.getRequest = getRequest;
6
+ exports.getRequestLogger = getRequestLogger;
4
7
  const node_async_hooks_1 = require("node:async_hooks");
5
8
  const js_lib_1 = require("@naturalcycles/js-lib");
6
9
  const appEngineLogMiddleware_1 = require("./appEngineLogMiddleware");
@@ -18,11 +21,9 @@ function asyncLocalStorageMiddleware() {
18
21
  storage().run(store, () => next());
19
22
  };
20
23
  }
21
- exports.asyncLocalStorageMiddleware = asyncLocalStorageMiddleware;
22
24
  function getRequest() {
23
25
  return storage().getStore()?.req;
24
26
  }
25
- exports.getRequest = getRequest;
26
27
  /**
27
28
  * It requires both `createAsyncLocalStorage` and `createGAELogMiddleware` to be in use to work.
28
29
  *
@@ -31,7 +32,6 @@ exports.getRequest = getRequest;
31
32
  function getRequestLogger() {
32
33
  return storage().getStore()?.req || (isGAE ? appEngineLogMiddleware_1.gaeLogger : isCI ? appEngineLogMiddleware_1.ciLogger : appEngineLogMiddleware_1.devLogger);
33
34
  }
34
- exports.getRequestLogger = getRequestLogger;
35
35
  /**
36
36
  * CommonLogger implementation that is Request-bound.
37
37
  * Should work the same as `req.log`, except that you don't have to have `req` available - it'll get it
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.basicAuthMiddleware = void 0;
3
+ exports.basicAuthMiddleware = basicAuthMiddleware;
4
4
  const js_lib_1 = require("@naturalcycles/js-lib");
5
5
  const nodejs_lib_1 = require("@naturalcycles/nodejs-lib");
6
6
  function basicAuthMiddleware(cfg) {
@@ -20,4 +20,3 @@ function basicAuthMiddleware(cfg) {
20
20
  .send('Unauthorized');
21
21
  };
22
22
  }
23
- exports.basicAuthMiddleware = basicAuthMiddleware;
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.clearBodyParserTimeout = exports.bodyParserTimeoutMiddleware = void 0;
3
+ exports.bodyParserTimeoutMiddleware = bodyParserTimeoutMiddleware;
4
+ exports.clearBodyParserTimeout = clearBodyParserTimeout;
4
5
  const js_lib_1 = require("@naturalcycles/js-lib");
5
6
  const index_1 = require("../index");
6
7
  const code = 'BODY_PARSER_TIMEOUT';
@@ -30,7 +31,6 @@ function bodyParserTimeoutMiddleware(cfg = {}) {
30
31
  next();
31
32
  };
32
33
  }
33
- exports.bodyParserTimeoutMiddleware = bodyParserTimeoutMiddleware;
34
34
  /**
35
35
  * Should be called AFTER bodyParser
36
36
  */
@@ -40,4 +40,3 @@ function clearBodyParserTimeout() {
40
40
  next();
41
41
  };
42
42
  }
43
- exports.clearBodyParserTimeout = clearBodyParserTimeout;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createDefaultApp = void 0;
3
+ exports.createDefaultApp = createDefaultApp;
4
4
  const cookieParser = require("cookie-parser");
5
5
  const cors = require("cors");
6
6
  const express = require("express");
@@ -87,7 +87,6 @@ function createDefaultApp(cfg) {
87
87
  app.use((0, genericErrorMiddleware_1.genericErrorMiddleware)({ sentryService, ...cfg.genericErrorMwCfg }));
88
88
  return app;
89
89
  }
90
- exports.createDefaultApp = createDefaultApp;
91
90
  function useHandlers(app, handlers = []) {
92
91
  handlers
93
92
  .map(cfg => {
@@ -16,7 +16,7 @@ export interface GenericErrorMiddlewareCfg {
16
16
  }
17
17
  /**
18
18
  * Generic error handler.
19
- * Returns HTTP code based on err.data.httpStatusCode (default to 500).
19
+ * Returns HTTP code based on err.data.backendResponseStatusCode (default to 500).
20
20
  * Sends json payload as ErrorResponse, transformed via errorSharedUtil.
21
21
  */
22
22
  export declare function genericErrorMiddleware(cfg?: GenericErrorMiddlewareCfg): BackendErrorRequestHandler;
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.respondWithError = exports.genericErrorMiddleware = void 0;
3
+ exports.genericErrorMiddleware = genericErrorMiddleware;
4
+ exports.respondWithError = respondWithError;
4
5
  const js_lib_1 = require("@naturalcycles/js-lib");
5
6
  const { APP_ENV } = process.env;
6
7
  const includeErrorStack = APP_ENV === 'dev';
@@ -10,7 +11,7 @@ let reportOnly5xx = false;
10
11
  let formatError;
11
12
  /**
12
13
  * Generic error handler.
13
- * Returns HTTP code based on err.data.httpStatusCode (default to 500).
14
+ * Returns HTTP code based on err.data.backendResponseStatusCode (default to 500).
14
15
  * Sends json payload as ErrorResponse, transformed via errorSharedUtil.
15
16
  */
16
17
  function genericErrorMiddleware(cfg = {}) {
@@ -32,7 +33,6 @@ function genericErrorMiddleware(cfg = {}) {
32
33
  respondWithError(req, res, err);
33
34
  };
34
35
  }
35
- exports.genericErrorMiddleware = genericErrorMiddleware;
36
36
  function respondWithError(req, res, err) {
37
37
  const { headersSent } = res;
38
38
  if (headersSent) {
@@ -53,9 +53,6 @@ function respondWithError(req, res, err) {
53
53
  delete httpError.stack;
54
54
  httpError.data.errorId = errorId;
55
55
  httpError.data.backendResponseStatusCode ||= 500; // default to 500
56
- // httpStatusCode is for backwards-compatibility
57
- // Otherwise, it breaks the _isHttpErrorResponse function check, and error get formatted/detected wrongly
58
- httpError.data['httpStatusCode'] = httpError.data.backendResponseStatusCode;
59
56
  httpError.data.headersSent = headersSent || undefined;
60
57
  (0, js_lib_1._filterUndefinedValues)(httpError.data, true);
61
58
  formatError?.(httpError); // Mutates
@@ -63,7 +60,6 @@ function respondWithError(req, res, err) {
63
60
  error: httpError,
64
61
  });
65
62
  }
66
- exports.respondWithError = respondWithError;
67
63
  function shouldReportToSentry(err) {
68
64
  const e = err;
69
65
  // By default - report
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getDefaultRouter = void 0;
3
+ exports.getDefaultRouter = getDefaultRouter;
4
4
  const tslib_1 = require("tslib");
5
5
  const express_promise_router_1 = tslib_1.__importDefault(require("express-promise-router"));
6
6
  /**
@@ -12,4 +12,3 @@ function getDefaultRouter(defaultHandlers = []) {
12
12
  defaultHandlers.forEach(h => router.use(h));
13
13
  return router;
14
14
  }
15
- exports.getDefaultRouter = getDefaultRouter;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.methodOverrideMiddleware = void 0;
3
+ exports.methodOverrideMiddleware = methodOverrideMiddleware;
4
4
  function methodOverrideMiddleware(cfg = {}) {
5
5
  const { methodKey } = {
6
6
  methodKey: '_method',
@@ -14,4 +14,3 @@ function methodOverrideMiddleware(cfg = {}) {
14
14
  next();
15
15
  };
16
16
  }
17
- exports.methodOverrideMiddleware = methodOverrideMiddleware;
@@ -1,10 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.notFoundMiddleware = void 0;
3
+ exports.notFoundMiddleware = notFoundMiddleware;
4
4
  const request_util_1 = require("./request.util");
5
5
  function notFoundMiddleware() {
6
6
  return (req, res) => {
7
7
  res.status(404).send(`404 Not Found: ${(0, request_util_1.getRequestEndpoint)(req)}`);
8
8
  };
9
9
  }
10
- exports.notFoundMiddleware = notFoundMiddleware;
@@ -1,9 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.okMiddleware = void 0;
3
+ exports.okMiddleware = okMiddleware;
4
4
  function okMiddleware() {
5
5
  return (req, res) => {
6
6
  res.json({ ok: 1 });
7
7
  };
8
8
  }
9
- exports.okMiddleware = okMiddleware;
@@ -1,11 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.coloredHttpCode = exports.logRequest = void 0;
3
+ exports.logRequest = logRequest;
4
+ exports.coloredHttpCode = coloredHttpCode;
4
5
  const nodejs_lib_1 = require("@naturalcycles/nodejs-lib");
5
6
  function logRequest(req, statusCode, ...tokens) {
6
7
  req[logLevel(statusCode)]([coloredHttpCode(statusCode), req.method, (0, nodejs_lib_1.boldGrey)(req.url), ...tokens].join(' '));
7
8
  }
8
- exports.logRequest = logRequest;
9
9
  function coloredHttpCode(statusCode) {
10
10
  if (statusCode >= 200 && statusCode < 400)
11
11
  return (0, nodejs_lib_1.green)(statusCode);
@@ -13,7 +13,6 @@ function coloredHttpCode(statusCode) {
13
13
  return (0, nodejs_lib_1.yellow)(statusCode);
14
14
  return (0, nodejs_lib_1.red)(statusCode);
15
15
  }
16
- exports.coloredHttpCode = coloredHttpCode;
17
16
  function logLevel(statusCode) {
18
17
  if (!statusCode || statusCode < 400)
19
18
  return 'log';
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getRequestEndpoint = void 0;
3
+ exports.getRequestEndpoint = getRequestEndpoint;
4
4
  /**
5
5
  * Returns e.g:
6
6
  *
@@ -16,4 +16,3 @@ function getRequestEndpoint(req) {
16
16
  }
17
17
  return [req.method, path].join(' ');
18
18
  }
19
- exports.getRequestEndpoint = getRequestEndpoint;
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.customRequestTimeoutMiddleware = exports.requestTimeoutMiddleware = void 0;
3
+ exports.requestTimeoutMiddleware = requestTimeoutMiddleware;
4
+ exports.customRequestTimeoutMiddleware = customRequestTimeoutMiddleware;
4
5
  const js_lib_1 = require("@naturalcycles/js-lib");
5
6
  const index_1 = require("../index");
6
7
  const code = 'REQUEST_TIMEOUT';
@@ -39,7 +40,6 @@ function requestTimeoutMiddleware(cfg = {}) {
39
40
  next();
40
41
  };
41
42
  }
42
- exports.requestTimeoutMiddleware = requestTimeoutMiddleware;
43
43
  /**
44
44
  * Example:
45
45
  *
@@ -65,4 +65,3 @@ function customRequestTimeoutMiddleware(onTimeout, cfg) {
65
65
  next();
66
66
  };
67
67
  }
68
- exports.customRequestTimeoutMiddleware = customRequestTimeoutMiddleware;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.safeJsonMiddleware = void 0;
3
+ exports.safeJsonMiddleware = safeJsonMiddleware;
4
4
  const js_lib_1 = require("@naturalcycles/js-lib");
5
5
  /**
6
6
  * Replaces express's built-in req.json() function with the safe one,
@@ -19,4 +19,3 @@ function safeJsonMiddleware() {
19
19
  next();
20
20
  };
21
21
  }
22
- exports.safeJsonMiddleware = safeJsonMiddleware;
@@ -1,5 +1,3 @@
1
- /// <reference types="cookie-parser" />
2
- /// <reference types="node" />
3
1
  import type { CommonLogFunction, Promisable } from '@naturalcycles/js-lib';
4
2
  import type { IRouter, Request, NextFunction, Response, Application } from 'express';
5
3
  /**
@@ -1,4 +1,3 @@
1
- /// <reference types="node" />
2
1
  import { Server } from 'node:http';
3
2
  export interface DestroyableServer extends Server {
4
3
  destroy: () => Promise<void>;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.enableDestroy = void 0;
3
+ exports.enableDestroy = enableDestroy;
4
4
  /**
5
5
  * Based on: https://github.com/isaacs/server-destroy/blob/master/index.js
6
6
  *
@@ -25,4 +25,3 @@ function enableDestroy(server) {
25
25
  };
26
26
  return srv;
27
27
  }
28
- exports.enableDestroy = enableDestroy;
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.serverStatsMiddleware = exports.serverStatsHTMLHandler = void 0;
3
+ exports.serverStatsHTMLHandler = void 0;
4
+ exports.serverStatsMiddleware = serverStatsMiddleware;
4
5
  const js_lib_1 = require("@naturalcycles/js-lib");
5
6
  const index_1 = require("../index");
6
7
  const request_util_1 = require("./request.util");
@@ -96,7 +97,6 @@ function serverStatsMiddleware() {
96
97
  next();
97
98
  };
98
99
  }
99
- exports.serverStatsMiddleware = serverStatsMiddleware;
100
100
  function cleanupServerStats() {
101
101
  if (Object.keys(serverStatsMap).length <= MAX_ENDPOINTS)
102
102
  return;
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getServerStatusData = exports.serverStatusMiddleware = void 0;
3
+ exports.serverStatusMiddleware = serverStatusMiddleware;
4
+ exports.getServerStatusData = getServerStatusData;
4
5
  const js_lib_1 = require("@naturalcycles/js-lib");
5
6
  const nodejs_lib_1 = require("@naturalcycles/nodejs-lib");
6
7
  const deployInfo_util_1 = require("./deployInfo.util");
@@ -11,7 +12,6 @@ function serverStatusMiddleware(projectDir, extra) {
11
12
  res.json(getServerStatusData(projectDir, extra));
12
13
  };
13
14
  }
14
- exports.serverStatusMiddleware = serverStatusMiddleware;
15
15
  function getServerStatusData(projectDir = process.cwd(), extra) {
16
16
  const { gitRev, gitBranch, ts } = (0, deployInfo_util_1.getDeployInfo)(projectDir);
17
17
  const t = (0, js_lib_1.localTime)(ts);
@@ -34,7 +34,6 @@ function getServerStatusData(projectDir = process.cwd(), extra) {
34
34
  ...extra,
35
35
  });
36
36
  }
37
- exports.getServerStatusData = getServerStatusData;
38
37
  function getStartedStr() {
39
38
  const started = js_lib_1.localTime.now().minus(process.uptime(), 'second');
40
39
  return `${started.toPretty()} (${started.fromNow()})`;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.simpleRequestLoggerMiddleware = void 0;
3
+ exports.simpleRequestLoggerMiddleware = simpleRequestLoggerMiddleware;
4
4
  const js_lib_1 = require("@naturalcycles/js-lib");
5
5
  const nodejs_lib_1 = require("@naturalcycles/nodejs-lib");
6
6
  const index_1 = require("../index");
@@ -36,4 +36,3 @@ function simpleRequestLoggerMiddleware(_cfg = {}) {
36
36
  next();
37
37
  };
38
38
  }
39
- exports.simpleRequestLoggerMiddleware = simpleRequestLoggerMiddleware;
@@ -1,4 +1,3 @@
1
- /// <reference types="node" />
2
1
  import { Server } from 'node:http';
3
2
  import { StartServerCfg, StartServerData } from './startServer.model';
4
3
  export declare class BackendServer {
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.startServer = exports.BackendServer = void 0;
3
+ exports.BackendServer = void 0;
4
+ exports.startServer = startServer;
4
5
  const tslib_1 = require("tslib");
5
6
  const js_lib_1 = require("@naturalcycles/js-lib");
6
7
  const nodejs_lib_1 = require("@naturalcycles/nodejs-lib");
@@ -95,4 +96,3 @@ async function startServer(cfg) {
95
96
  throw err;
96
97
  }
97
98
  }
98
- exports.startServer = startServer;
@@ -1,4 +1,3 @@
1
- /// <reference types="node" />
2
1
  import { Server } from 'node:http';
3
2
  import { SentrySharedService } from '../sentry/sentry.shared.service';
4
3
  import { DefaultAppCfg } from './createDefaultApp.model';
@@ -1,21 +1,20 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.validateQuery = exports.validateParams = exports.validateBody = void 0;
3
+ exports.validateBody = validateBody;
4
+ exports.validateParams = validateParams;
5
+ exports.validateQuery = validateQuery;
4
6
  const js_lib_1 = require("@naturalcycles/js-lib");
5
7
  const nodejs_lib_1 = require("@naturalcycles/nodejs-lib");
6
8
  const REDACTED = 'REDACTED';
7
9
  function validateBody(schema, opt = {}) {
8
10
  return validateObject('body', schema, opt);
9
11
  }
10
- exports.validateBody = validateBody;
11
12
  function validateParams(schema, opt = {}) {
12
13
  return validateObject('params', schema, opt);
13
14
  }
14
- exports.validateParams = validateParams;
15
15
  function validateQuery(schema, opt = {}) {
16
16
  return validateObject('query', schema, opt);
17
17
  }
18
- exports.validateQuery = validateQuery;
19
18
  /**
20
19
  * Validates req property (body, params or query).
21
20
  * Supports Joi schema or AjvSchema (from nodejs-lib).
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.zodReqValidate = void 0;
3
+ exports.zodReqValidate = zodReqValidate;
4
4
  const js_lib_1 = require("@naturalcycles/js-lib");
5
5
  const REDACTED = 'REDACTED';
6
6
  /**
@@ -26,7 +26,6 @@ function zodReqValidate(prop, schema, opt = {}) {
26
26
  }));
27
27
  };
28
28
  }
29
- exports.zodReqValidate = zodReqValidate;
30
29
  /**
31
30
  * Mutates error
32
31
  */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@naturalcycles/backend-lib",
3
- "version": "5.6.0",
3
+ "version": "5.7.0",
4
4
  "scripts": {
5
5
  "prepare": "husky",
6
6
  "dev": "APP_ENV=dev node -r ts-node/register --watch ./src/test/server/server.ts",
@@ -55,7 +55,7 @@ export async function createDeployInfo(
55
55
  gaeProject = gaeProjectByBranch[gitBranch] || gaeProject
56
56
 
57
57
  if (gaeServiceByBranch[gitBranch]) {
58
- gaeService = validateGAEServiceName(gaeServiceByBranch[gitBranch]!)
58
+ gaeService = validateGAEServiceName(gaeServiceByBranch[gitBranch])
59
59
  } else {
60
60
  gaeService = validateGAEServiceName([gitBranch, gaeService].join('--'))
61
61
  }
@@ -35,7 +35,7 @@ let formatError: GenericErrorMiddlewareCfg['formatError']
35
35
 
36
36
  /**
37
37
  * Generic error handler.
38
- * Returns HTTP code based on err.data.httpStatusCode (default to 500).
38
+ * Returns HTTP code based on err.data.backendResponseStatusCode (default to 500).
39
39
  * Sends json payload as ErrorResponse, transformed via errorSharedUtil.
40
40
  */
41
41
  export function genericErrorMiddleware(
@@ -86,9 +86,6 @@ export function respondWithError(req: BackendRequest, res: BackendResponse, err:
86
86
 
87
87
  httpError.data.errorId = errorId
88
88
  httpError.data.backendResponseStatusCode ||= 500 // default to 500
89
- // httpStatusCode is for backwards-compatibility
90
- // Otherwise, it breaks the _isHttpErrorResponse function check, and error get formatted/detected wrongly
91
- httpError.data['httpStatusCode'] = httpError.data.backendResponseStatusCode
92
89
  httpError.data.headersSent = headersSent || undefined
93
90
  _filterUndefinedValues(httpError.data, true)
94
91
 
@@ -127,9 +127,9 @@ export function serverStatsMiddleware(): BackendRequestHandler {
127
127
  '5xx': 0,
128
128
  }
129
129
 
130
- serverStatsMap[endpoint]!.stack.push(latency)
130
+ serverStatsMap[endpoint].stack.push(latency)
131
131
  if (res.statusCode) {
132
- serverStatsMap[endpoint]![getStatusFamily(res.statusCode)]++
132
+ serverStatsMap[endpoint][getStatusFamily(res.statusCode)]++
133
133
  }
134
134
 
135
135
  if (now - lastCleanup > 60_000) {