@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.
- package/dist/admin/adminMiddleware.js +4 -5
- package/dist/admin/secureHeaderMiddleware.js +1 -2
- package/dist/db/httpDBRequestHandler.js +1 -2
- package/dist/deploy/backend.cfg.util.js +1 -2
- package/dist/deploy/deploy.util.js +5 -6
- package/dist/deploy/deployGae.js +2 -3
- package/dist/deploy/deployHealthCheck.js +2 -2
- package/dist/deploy/deployPrepare.js +2 -2
- package/dist/gae/appEngine.util.js +1 -2
- package/dist/server/appEngineLogMiddleware.js +2 -2
- package/dist/server/asyncLocalStorageMiddleware.js +4 -4
- package/dist/server/basicAuthMiddleware.js +1 -2
- package/dist/server/bodyParserTimeoutMiddleware.js +2 -3
- package/dist/server/createDefaultApp.js +1 -2
- package/dist/server/genericErrorMiddleware.d.ts +1 -1
- package/dist/server/genericErrorMiddleware.js +3 -7
- package/dist/server/getDefaultRouter.js +1 -2
- package/dist/server/methodOverrideMiddleware.js +1 -2
- package/dist/server/notFoundMiddleware.js +1 -2
- package/dist/server/okMiddleware.js +1 -2
- package/dist/server/request.log.util.js +2 -3
- package/dist/server/request.util.js +1 -2
- package/dist/server/requestTimeoutMiddleware.js +2 -3
- package/dist/server/safeJsonMiddleware.js +1 -2
- package/dist/server/server.model.d.ts +0 -2
- package/dist/server/server.util.d.ts +0 -1
- package/dist/server/server.util.js +1 -2
- package/dist/server/serverStatsMiddleware.js +2 -2
- package/dist/server/serverStatusMiddleware.js +2 -3
- package/dist/server/simpleRequestLoggerMiddleware.js +1 -2
- package/dist/server/startServer.d.ts +0 -1
- package/dist/server/startServer.js +2 -2
- package/dist/server/startServer.model.d.ts +0 -1
- package/dist/server/validation/validateMiddleware.js +3 -4
- package/dist/server/validation/zodValidateMiddleware.js +1 -2
- package/package.json +1 -1
- package/src/deploy/deploy.util.ts +1 -1
- package/src/server/genericErrorMiddleware.ts +1 -4
- 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.
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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.
|
|
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;
|
package/dist/deploy/deployGae.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
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.
|
|
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.
|
|
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,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
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 =
|
|
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 =
|
|
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.
|
|
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 =
|
|
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.
|
|
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.
|
|
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.
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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.
|
|
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 =
|
|
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.
|
|
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 =
|
|
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,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.enableDestroy =
|
|
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.
|
|
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.
|
|
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 =
|
|
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,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
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,21 +1,20 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
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 =
|
|
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
|
@@ -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.
|
|
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]
|
|
130
|
+
serverStatsMap[endpoint].stack.push(latency)
|
|
131
131
|
if (res.statusCode) {
|
|
132
|
-
serverStatsMap[endpoint]
|
|
132
|
+
serverStatsMap[endpoint][getStatusFamily(res.statusCode)]++
|
|
133
133
|
}
|
|
134
134
|
|
|
135
135
|
if (now - lastCleanup > 60_000) {
|