@volcanicminds/backend 0.1.4 → 0.1.6
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/NPM.md +2 -0
- package/README.md +70 -0
- package/TODO.md +7 -3
- package/dist/api/me/controller/me.js +22 -6
- package/dist/api/me/controller/me.js.map +1 -1
- package/dist/api/me/routes.js +4 -5
- package/dist/api/me/routes.js.map +1 -1
- package/dist/apollo/context.js +13 -2
- package/dist/apollo/context.js.map +1 -1
- package/dist/config/roles.js.map +1 -1
- package/dist/index.js +156 -157
- package/dist/index.js.map +1 -1
- package/dist/loader/roles.js +15 -1
- package/dist/loader/roles.js.map +1 -1
- package/dist/loader/router.js +28 -42
- package/dist/loader/router.js.map +1 -1
- package/dist/middleware/example.js +0 -1
- package/dist/middleware/example.js.map +1 -1
- package/dist/middleware/isAdmin.js +3 -2
- package/dist/middleware/isAdmin.js.map +1 -1
- package/dist/middleware/isAuthenticated.js +3 -3
- package/dist/middleware/isAuthenticated.js.map +1 -1
- package/dist/server.js +5 -0
- package/dist/server.js.map +1 -0
- package/dist/util/logger.js +1 -12
- package/dist/util/logger.js.map +1 -1
- package/dist/util/mark.js +0 -3
- package/dist/util/mark.js.map +1 -1
- package/index.d.ts +12 -0
- package/lib/api/me/routes.ts +1 -1
- package/lib/config/roles.ts +1 -0
- package/lib/index.ts +18 -25
- package/lib/loader/roles.ts +20 -0
- package/lib/loader/router.ts +20 -41
- package/lib/server.ts +7 -0
- package/package.json +5 -5
- package/tsconfig.json +23 -19
- package/types/global.d.ts +72 -52
package/dist/loader/roles.js
CHANGED
|
@@ -2,12 +2,26 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.load = void 0;
|
|
4
4
|
const roles_1 = require("../config/roles");
|
|
5
|
+
const glob = require('glob');
|
|
6
|
+
const path = require('path');
|
|
5
7
|
function load() {
|
|
6
8
|
const roles = {};
|
|
7
9
|
roles_1.roles.forEach((role) => {
|
|
8
10
|
roles[role.code] = role;
|
|
9
11
|
});
|
|
10
|
-
|
|
12
|
+
const patterns = [`${__dirname}/../config/roles.{ts,js}`, `${process.cwd()}/config/roles.{ts,js}`];
|
|
13
|
+
patterns.forEach((pattern) => {
|
|
14
|
+
log.i && log.info('Looking for ' + pattern);
|
|
15
|
+
glob.sync(pattern).forEach((f, index, values) => {
|
|
16
|
+
const base = path.dirname(f);
|
|
17
|
+
const dir = path.basename(base);
|
|
18
|
+
const file = path.join(dir, path.basename(f));
|
|
19
|
+
const groupjs = require(f);
|
|
20
|
+
console.log(file);
|
|
21
|
+
console.log(groupjs);
|
|
22
|
+
});
|
|
23
|
+
});
|
|
24
|
+
return Object.assign({}, roles);
|
|
11
25
|
}
|
|
12
26
|
exports.load = load;
|
|
13
27
|
//# sourceMappingURL=roles.js.map
|
package/dist/loader/roles.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"roles.js","sourceRoot":"","sources":["../../lib/loader/roles.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"roles.js","sourceRoot":"","sources":["../../lib/loader/roles.ts"],"names":[],"mappings":";;;AACA,2CAAsD;AAEtD,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;AAC5B,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;AAE5B,SAAgB,IAAI;IAClB,MAAM,KAAK,GAEP,EAAE,CAAA;IAEN,aAAW,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;QAC3B,KAAK,CAAC,IAAI,CAAC,IAAe,CAAC,GAAG,IAAI,CAAA;IACpC,CAAC,CAAC,CAAA;IAEF,MAAM,QAAQ,GAAG,CAAC,GAAG,SAAS,0BAA0B,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,uBAAuB,CAAC,CAAA;IAElG,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC3B,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,CAAA;QAC3C,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAS,EAAE,KAAa,EAAE,MAAgB,EAAE,EAAE;YACxE,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;YAC5B,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;YAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAA;YAG7C,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;YAC1B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;YACjB,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;QACtB,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,OAAO,kBAAK,KAAK,CAAW,CAAA;AAC9B,CAAC;AA1BD,oBA0BC"}
|
package/dist/loader/router.js
CHANGED
|
@@ -1,37 +1,41 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
2
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
12
|
exports.apply = exports.load = void 0;
|
|
4
13
|
const glob = require('glob');
|
|
5
14
|
const path = require('path');
|
|
6
15
|
const methods = ['GET', 'POST', 'PUT', 'DELETE', 'HEAD', 'PATCH', 'OPTIONS'];
|
|
7
16
|
function load() {
|
|
8
|
-
const check = true, print = true, load = true;
|
|
9
17
|
const validRoutes = [];
|
|
10
18
|
const patterns = [`${__dirname}/../api/**/routes.{ts,js}`, `${process.cwd()}/src/api/**/routes.{ts,js}`];
|
|
11
19
|
patterns.forEach((pattern) => {
|
|
12
|
-
|
|
20
|
+
log.i && log.info('Looking for ' + pattern);
|
|
13
21
|
glob.sync(pattern).forEach((f, index, values) => {
|
|
14
22
|
const base = path.dirname(f);
|
|
15
23
|
const dir = path.basename(base);
|
|
16
24
|
const file = path.join(dir, path.basename(f));
|
|
17
|
-
// allow array or structure
|
|
18
25
|
const routesjs = require(f);
|
|
19
|
-
const { routes = [], config: defaultConfig = {} } = routesjs
|
|
20
|
-
// adjust default config
|
|
26
|
+
const { routes = [], config: defaultConfig = {} } = routesjs || {};
|
|
21
27
|
if (!defaultConfig.enable)
|
|
22
28
|
defaultConfig.enable = true;
|
|
23
29
|
if (defaultConfig.deprecated == null)
|
|
24
30
|
defaultConfig.deprecated = false;
|
|
25
31
|
if (defaultConfig.controller == null)
|
|
26
32
|
defaultConfig.controller = 'controller';
|
|
27
|
-
|
|
28
|
-
|
|
33
|
+
log.i && log.info(`Load ${file} with ${routes.length} routes defined`);
|
|
34
|
+
log.d && log.debug(`Valid routes loaded from ${file}`);
|
|
29
35
|
routes.forEach((route, index) => {
|
|
30
36
|
const errors = [];
|
|
31
37
|
const { method: methodCase, path: pathName = '/', handler, config, middlewares = [], roles = [] } = route;
|
|
32
|
-
// specific route config
|
|
33
38
|
const { title = '', description = '', enable = defaultConfig.enable || true, deprecated = defaultConfig.deprecated || false, version = defaultConfig.version || '', params, body, response } = config || {};
|
|
34
|
-
// adjust something
|
|
35
39
|
const endpoint = `${dir}${pathName.replace(/\/+$/, '')}`;
|
|
36
40
|
const method = methodCase.toUpperCase();
|
|
37
41
|
const num = index + 1;
|
|
@@ -47,20 +51,18 @@ function load() {
|
|
|
47
51
|
errors.push(`Error in [${file}] bad handler [${handler}] at route n. ${num}`);
|
|
48
52
|
}
|
|
49
53
|
const key = method + endpoint + version;
|
|
50
|
-
if (validRoutes.some((r) => `${r.method}${r.path}${r.doc
|
|
54
|
+
if (validRoutes.some((r) => { var _a; return `${r.method}${r.path}${(_a = r.doc) === null || _a === void 0 ? void 0 : _a.version}` === key; })) {
|
|
51
55
|
errors.push(`Error in [${file}] duplicated path [${pathName}] at route n. ${num}`);
|
|
52
56
|
}
|
|
53
57
|
if (errors.length > 0) {
|
|
54
|
-
|
|
58
|
+
log.e && errors.forEach((error) => log.error(error));
|
|
55
59
|
}
|
|
56
60
|
}
|
|
57
61
|
if (errors.length == 0) {
|
|
58
|
-
enable
|
|
62
|
+
enable
|
|
59
63
|
? log.d &&
|
|
60
|
-
log.debug(`* Method [${method}] path ${endpoint} handler ${handler}
|
|
61
|
-
:
|
|
62
|
-
? log.w && log.warn(`* Method [${method}] path ${endpoint} handler ${handler} disabled. Skip.`)
|
|
63
|
-
: log.i && log.info(`* Method [${method}] path ${endpoint} handler ${handler} enabled.`);
|
|
64
|
+
log.debug(`* Method [${method}] path ${endpoint} handler ${handler} enabled with ${(middlewares === null || middlewares === void 0 ? void 0 : middlewares.length) || 0} middlewares`)
|
|
65
|
+
: log.w && log.warn(`* Method [${method}] path ${endpoint} handler ${handler} disabled. Skip.`);
|
|
64
66
|
validRoutes.push({
|
|
65
67
|
handler,
|
|
66
68
|
method,
|
|
@@ -71,7 +73,6 @@ function load() {
|
|
|
71
73
|
base,
|
|
72
74
|
file: path.join(base, defaultConfig.controller, handlerParts[0]),
|
|
73
75
|
func: handlerParts[1],
|
|
74
|
-
// swagger
|
|
75
76
|
doc: {
|
|
76
77
|
summary: title,
|
|
77
78
|
description,
|
|
@@ -98,26 +99,27 @@ function normalizeMiddlewarePath(base, middleware = '') {
|
|
|
98
99
|
}
|
|
99
100
|
function apply(server, routes) {
|
|
100
101
|
log.t && log.trace(`Apply ${routes.length} routes to server with pid ${process.pid}`);
|
|
101
|
-
routes.forEach(
|
|
102
|
+
routes.forEach(({ handler, method, path, middlewares, roles, enable, base, file, func, doc }) => __awaiter(this, void 0, void 0, function* () {
|
|
102
103
|
if (enable) {
|
|
103
|
-
log.t && log.trace(
|
|
104
|
-
const allMiddlewares = middlewares
|
|
104
|
+
log.t && log.trace(`* Add path ${method} ${path} on handle ${handler}`);
|
|
105
|
+
const allMiddlewares = (middlewares || []).map((m) => require(normalizeMiddlewarePath(base, m)));
|
|
105
106
|
server.route({
|
|
106
107
|
method: method,
|
|
107
108
|
path: path,
|
|
108
109
|
schema: doc,
|
|
109
|
-
|
|
110
|
-
handler: (
|
|
110
|
+
preHandler: allMiddlewares,
|
|
111
|
+
handler: (req, reply) => {
|
|
112
|
+
var _a;
|
|
111
113
|
try {
|
|
112
|
-
if (roles
|
|
113
|
-
const userRoles =
|
|
114
|
+
if ((roles === null || roles === void 0 ? void 0 : roles.length) > 0) {
|
|
115
|
+
const userRoles = ((_a = req.user) === null || _a === void 0 ? void 0 : _a.roles) || [];
|
|
114
116
|
const resolvedRole = roles.filter((r) => userRoles.includes(r.code));
|
|
115
117
|
if (!resolvedRole || resolvedRole.length === 0) {
|
|
116
118
|
log.w && log.warn(`Not allowed to call ${method.toUpperCase()} ${path}`);
|
|
117
119
|
return reply.code(403).send();
|
|
118
120
|
}
|
|
119
121
|
}
|
|
120
|
-
return require(file
|
|
122
|
+
return require(file)[func](req, reply);
|
|
121
123
|
}
|
|
122
124
|
catch (err) {
|
|
123
125
|
log.e && log.error(`Cannot find ${file}.js or method ${func}: ${err}`);
|
|
@@ -125,24 +127,8 @@ function apply(server, routes) {
|
|
|
125
127
|
}
|
|
126
128
|
}
|
|
127
129
|
});
|
|
128
|
-
// server[method](path, (request: FastifyRequest, reply: FastifyReply) => {
|
|
129
|
-
// try {
|
|
130
|
-
// if (roles?.length > 0) {
|
|
131
|
-
// const userRoles = request.user?.roles || []
|
|
132
|
-
// const resolvedRole = roles.filter((r) => userRoles.includes(r.code))
|
|
133
|
-
// if (!resolvedRole || resolvedRole.length === 0) {
|
|
134
|
-
// log.w && log.warn(`Not allowed to call ${method.toUpperCase()} ${path}`)
|
|
135
|
-
// return reply.code(403).send()
|
|
136
|
-
// }
|
|
137
|
-
// }
|
|
138
|
-
// return require(file + '.ts')[func](request, reply)
|
|
139
|
-
// } catch (err) {
|
|
140
|
-
// log.e && log.error(`Cannot find ${file}.js or method ${func}: ${err}`)
|
|
141
|
-
// return reply.code(500).send(`Invalid handler ${handler}`)
|
|
142
|
-
// }
|
|
143
|
-
// })
|
|
144
130
|
}
|
|
145
|
-
});
|
|
131
|
+
}));
|
|
146
132
|
}
|
|
147
133
|
exports.apply = apply;
|
|
148
134
|
//# sourceMappingURL=router.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"router.js","sourceRoot":"","sources":["../../lib/loader/router.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"router.js","sourceRoot":"","sources":["../../lib/loader/router.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"example.js","sourceRoot":"","sources":["../../lib/middleware/example.ts"],"names":[],"mappings":";;AAEA,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAA;AACtB,MAAM,CAAC,OAAO,GAAG,CAAC,GAAmB,EAAE,GAAiB,EAAE,IAAS,EAAE,EAAE;IACrE,IAAI;
|
|
1
|
+
{"version":3,"file":"example.js","sourceRoot":"","sources":["../../lib/middleware/example.ts"],"names":[],"mappings":";;AAEA,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAA;AACtB,MAAM,CAAC,OAAO,GAAG,CAAC,GAAmB,EAAE,GAAiB,EAAE,IAAS,EAAE,EAAE;IACrE,IAAI;QAEF,OAAO,IAAI,EAAE,CAAA;KACd;IAAC,OAAO,GAAG,EAAE;QACZ,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,iCAAiC,GAAG,EAAE,CAAC,CAAA;QAC1D,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;KACxB;AACH,CAAC,CAAA"}
|
|
@@ -2,9 +2,10 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const log = global.log;
|
|
4
4
|
module.exports = (req, res, next) => {
|
|
5
|
+
var _a, _b, _c;
|
|
5
6
|
try {
|
|
6
|
-
if (!!req.user
|
|
7
|
-
log.d && log.trace('isAdmin - user id ' + req.user
|
|
7
|
+
if (!!((_a = req.user) === null || _a === void 0 ? void 0 : _a.id) && (((_b = req.user) === null || _b === void 0 ? void 0 : _b.roles) || []).includes(roles.admin.code)) {
|
|
8
|
+
log.d && log.trace('isAdmin - user id ' + ((_c = req.user) === null || _c === void 0 ? void 0 : _c.id));
|
|
8
9
|
return next();
|
|
9
10
|
}
|
|
10
11
|
throw new Error('User not valid');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"isAdmin.js","sourceRoot":"","sources":["../../lib/middleware/isAdmin.ts"],"names":[],"mappings":";;AAEA,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAA;AACtB,MAAM,CAAC,OAAO,GAAG,CAAC,GAAmB,EAAE,GAAiB,EAAE,IAAS,EAAE,EAAE
|
|
1
|
+
{"version":3,"file":"isAdmin.js","sourceRoot":"","sources":["../../lib/middleware/isAdmin.ts"],"names":[],"mappings":";;AAEA,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAA;AACtB,MAAM,CAAC,OAAO,GAAG,CAAC,GAAmB,EAAE,GAAiB,EAAE,IAAS,EAAE,EAAE;;IACrE,IAAI;QACF,IAAI,CAAC,CAAC,CAAA,MAAA,GAAG,CAAC,IAAI,0CAAE,EAAE,CAAA,IAAI,CAAC,CAAA,MAAA,GAAG,CAAC,IAAI,0CAAE,KAAK,KAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;YACxE,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,oBAAoB,IAAG,MAAA,GAAG,CAAC,IAAI,0CAAE,EAAE,CAAA,CAAC,CAAA;YACvD,OAAO,IAAI,EAAE,CAAA;SACd;QACD,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAA;KAClC;IAAC,OAAO,GAAG,EAAE;QACZ,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,iCAAiC,GAAG,EAAE,CAAC,CAAA;QAC1D,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;KACxB;AACH,CAAC,CAAA"}
|
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const log = global.log;
|
|
4
4
|
module.exports = (req, res, next) => {
|
|
5
|
+
var _a, _b;
|
|
5
6
|
try {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
log.d && log.trace('isAuthenticated - user id ' + req.user?.id);
|
|
7
|
+
if (!!((_a = req.user) === null || _a === void 0 ? void 0 : _a.id)) {
|
|
8
|
+
log.d && log.trace('isAuthenticated - user id ' + ((_b = req.user) === null || _b === void 0 ? void 0 : _b.id));
|
|
9
9
|
return next();
|
|
10
10
|
}
|
|
11
11
|
throw new Error('User not authenticated');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"isAuthenticated.js","sourceRoot":"","sources":["../../lib/middleware/isAuthenticated.ts"],"names":[],"mappings":";;AAEA,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAA;AACtB,MAAM,CAAC,OAAO,GAAG,CAAC,GAAmB,EAAE,GAAiB,EAAE,IAAS,EAAE,EAAE
|
|
1
|
+
{"version":3,"file":"isAuthenticated.js","sourceRoot":"","sources":["../../lib/middleware/isAuthenticated.ts"],"names":[],"mappings":";;AAEA,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAA;AACtB,MAAM,CAAC,OAAO,GAAG,CAAC,GAAmB,EAAE,GAAiB,EAAE,IAAS,EAAE,EAAE;;IACrE,IAAI;QAEF,IAAI,CAAC,CAAC,CAAA,MAAA,GAAG,CAAC,IAAI,0CAAE,EAAE,CAAA,EAAE;YAClB,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,4BAA4B,IAAG,MAAA,GAAG,CAAC,IAAI,0CAAE,EAAE,CAAA,CAAC,CAAA;YAC/D,OAAO,IAAI,EAAE,CAAA;SACd;QACD,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAA;KAC1C;IAAC,OAAO,GAAG,EAAE;QACZ,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,iCAAiC,GAAG,EAAE,CAAC,CAAA;QAC1D,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;KACxB;AACH,CAAC,CAAA"}
|
package/dist/server.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../lib/server.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;AAEZ,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAAA;AACjC,MAAM,EAAE,CAAA;AAGR,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAA"}
|
package/dist/util/logger.js
CHANGED
|
@@ -3,21 +3,12 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
/**
|
|
7
|
-
* Minimal logger thanks to Pino
|
|
8
|
-
*/
|
|
9
|
-
// log.debug('test log test log test log')
|
|
10
|
-
// log.error('test log test log test log')
|
|
11
|
-
// log.warn('test log test log test log')
|
|
12
|
-
// log.info('test log test log test log')
|
|
13
|
-
// log.fatal('test log test log test log')
|
|
14
|
-
// log.trace('test log test log test log')
|
|
15
6
|
const pino_1 = __importDefault(require("pino"));
|
|
16
7
|
const yn_1 = __importDefault(require("./yn"));
|
|
17
8
|
const logLevels = ['fatal', 'error', 'warn', 'info', 'debug', 'trace'];
|
|
18
9
|
const { LOG_LEVEL, LOG_COLORIZE, LOG_TIMESTAMP, LOG_TIMESTAMP_READABLE } = process.env;
|
|
19
10
|
function getLogLevel() {
|
|
20
|
-
const lvl = LOG_LEVEL
|
|
11
|
+
const lvl = LOG_LEVEL === null || LOG_LEVEL === void 0 ? void 0 : LOG_LEVEL.toLowerCase();
|
|
21
12
|
return LOG_LEVEL && logLevels.includes(lvl) ? lvl : 'debug';
|
|
22
13
|
}
|
|
23
14
|
const logColorize = (0, yn_1.default)(LOG_COLORIZE, true);
|
|
@@ -36,8 +27,6 @@ const loggerConfig = {
|
|
|
36
27
|
};
|
|
37
28
|
let logger = (0, pino_1.default)(loggerConfig);
|
|
38
29
|
const logLevel = logger.levels.values[loggerConfig.level];
|
|
39
|
-
// Level: trace debug info warn error fatal silent
|
|
40
|
-
// Value: 10 20 30 40 50 60 Infinity
|
|
41
30
|
const loggerExt = Object.assign(logger, {
|
|
42
31
|
t: logLevel < 11,
|
|
43
32
|
d: logLevel < 21,
|
package/dist/util/logger.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../lib/util/logger.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;;;;;
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../lib/util/logger.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;;;;;AAaZ,gDAAuB;AACvB,8CAAqB;AAErB,MAAM,SAAS,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAAA;AAEtE,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,sBAAsB,EAAE,GAAG,OAAO,CAAC,GAAG,CAAA;AAEtF,SAAS,WAAW;IAClB,MAAM,GAAG,GAAG,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,WAAW,EAAE,CAAA;IACpC,OAAO,SAAS,IAAI,SAAS,CAAC,QAAQ,CAAC,GAAI,CAAC,CAAC,CAAC,CAAC,GAAI,CAAC,CAAC,CAAC,OAAO,CAAA;AAC/D,CAAC;AAED,MAAM,WAAW,GAAG,IAAA,YAAE,EAAC,YAAY,EAAE,IAAI,CAAC,CAAA;AAC1C,MAAM,YAAY,GAAG,IAAA,YAAE,EAAC,aAAa,EAAE,IAAI,CAAC,CAAA;AAC5C,MAAM,oBAAoB,GAAG,IAAA,YAAE,EAAC,sBAAsB,EAAE,IAAI,CAAC,CAAA;AAE7D,MAAM,YAAY,GAAG;IACnB,KAAK,EAAE,WAAW,EAAE;IACpB,SAAS,EAAE,YAAY;IACvB,SAAS,EAAE;QACT,MAAM,EAAE,aAAa;QACrB,OAAO,EAAE;YACP,aAAa,EAAE,oBAAoB,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,KAAK;YACnE,QAAQ,EAAE,WAAW;SACtB;KACF;CACF,CAAA;AAED,IAAI,MAAM,GAAG,IAAA,cAAI,EAAC,YAAY,CAAC,CAAA;AAC/B,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAA;AAKzD,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE;IACtC,CAAC,EAAE,QAAQ,GAAG,EAAE;IAChB,CAAC,EAAE,QAAQ,GAAG,EAAE;IAChB,CAAC,EAAE,QAAQ,GAAG,EAAE;IAChB,CAAC,EAAE,QAAQ,GAAG,EAAE;IAChB,CAAC,EAAE,QAAQ,GAAG,EAAE;IAChB,CAAC,EAAE,QAAQ,GAAG,EAAE;IAChB,WAAW,EAAE,WAAW;IACxB,YAAY,EAAE,YAAY;IAC1B,WAAW,EAAE,GAAG,EAAE;QAChB,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC,QAAQ,GAAG,EAAE,CAAA;QACrC,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC,QAAQ,GAAG,EAAE,CAAA;QACrC,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC,QAAQ,GAAG,EAAE,CAAA;QACrC,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC,QAAQ,GAAG,EAAE,CAAA;QACrC,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC,QAAQ,GAAG,EAAE,CAAA;QACrC,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC,QAAQ,GAAG,EAAE,CAAA;IACvC,CAAC;CACF,CAAC,CAAA;AAEF,SAAS,CAAC,EAAE,CAAC,cAAc,EAAE,GAAG,EAAE;IAChC,GAAG,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAA;AAChC,CAAC,CAAC,CAAA;AAEF,kBAAe,SAAS,CAAA"}
|
package/dist/util/mark.js
CHANGED
|
@@ -2,9 +2,6 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.print = void 0;
|
|
4
4
|
const pkg = require('../../package.json');
|
|
5
|
-
/**
|
|
6
|
-
* Minimal mark printed at startup
|
|
7
|
-
*/
|
|
8
5
|
function print(logg = log) {
|
|
9
6
|
logg.i && logg.info('Ciao');
|
|
10
7
|
logg.i && logg.info(` ,--. ,--. `);
|
package/dist/util/mark.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mark.js","sourceRoot":"","sources":["../../lib/util/mark.ts"],"names":[],"mappings":";;;AAAA,MAAM,GAAG,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"mark.js","sourceRoot":"","sources":["../../lib/util/mark.ts"],"names":[],"mappings":";;;AAAA,MAAM,GAAG,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAA;AAMzC,SAAgB,KAAK,CAAC,OAAY,GAAG;IACnC,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IAC3B,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAA;IACrE,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAA;IACvE,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAA;IACtE,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,sDAAsD,CAAC,CAAA;IAC3E,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,yDAAyD,CAAC,CAAA;IAC9E,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACvB,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,CAAC,IAAI,EAAE,CAAC,CAAA;IAC3C,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,OAAO,EAAE,CAAC,CAAA;IAC7C,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,OAAO,EAAE,CAAC,CAAA;IAC7C,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,YAAY,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAA;IAC/C,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,eAAe,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAA;IAC1D,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,YAAY,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,CAAA;IACpE,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAA;IAClD,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,OAAO,CAAC,OAAO,EAAE,CAAC,CAAA;IAC/C,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;IAClE,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,YAAY,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;AACtE,CAAC;AAlBD,sBAkBC"}
|
package/index.d.ts
ADDED
package/lib/api/me/routes.ts
CHANGED
package/lib/config/roles.ts
CHANGED
package/lib/index.ts
CHANGED
|
@@ -24,24 +24,6 @@ import { myContextFunction, MyContext } from './apollo/context'
|
|
|
24
24
|
import resolvers from './apollo/resolvers'
|
|
25
25
|
import typeDefs from './apollo/type-defs'
|
|
26
26
|
|
|
27
|
-
const begin = new Date().getTime()
|
|
28
|
-
mark.print(logger)
|
|
29
|
-
|
|
30
|
-
export interface global {}
|
|
31
|
-
declare global {
|
|
32
|
-
var log: any
|
|
33
|
-
var roles: Roles
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
global.log = logger
|
|
37
|
-
global.roles = loaderRoles.load()
|
|
38
|
-
|
|
39
|
-
declare module 'fastify' {
|
|
40
|
-
export interface FastifyRequest {
|
|
41
|
-
user?: AuthenticatedUser
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
|
|
45
27
|
async function attachApollo(fastify: FastifyInstance) {
|
|
46
28
|
log.info('Attach ApolloServer to Fastify')
|
|
47
29
|
const apollo = new ApolloServer<MyContext>({
|
|
@@ -210,8 +192,17 @@ async function addFastifySwagger(fastify: FastifyInstance) {
|
|
|
210
192
|
)
|
|
211
193
|
}
|
|
212
194
|
}
|
|
213
|
-
|
|
214
|
-
|
|
195
|
+
|
|
196
|
+
const start = async () => {
|
|
197
|
+
const begin = new Date().getTime()
|
|
198
|
+
mark.print(logger)
|
|
199
|
+
|
|
200
|
+
global.log = logger
|
|
201
|
+
global.roles = loaderRoles.load()
|
|
202
|
+
|
|
203
|
+
const opts = yn(process.env.LOG_FASTIFY, false) ? { logger: logger } : {}
|
|
204
|
+
const fastify = await Fastify(opts)
|
|
205
|
+
|
|
215
206
|
const { HOST: host = '0.0.0.0', PORT: port = '2230', GRAPHQL } = process.env
|
|
216
207
|
const { SRV_CORS, SRV_HELMET, SRV_RATELIMIT, SRV_COMPRESS } = process.env
|
|
217
208
|
|
|
@@ -240,7 +231,7 @@ Fastify(opts).then(async (fastify) => {
|
|
|
240
231
|
await addApolloRouting(fastify, apollo)
|
|
241
232
|
await addFastifyRouting(fastify)
|
|
242
233
|
|
|
243
|
-
fastify
|
|
234
|
+
await fastify
|
|
244
235
|
.listen({
|
|
245
236
|
port: Number(port),
|
|
246
237
|
host: host
|
|
@@ -250,7 +241,9 @@ Fastify(opts).then(async (fastify) => {
|
|
|
250
241
|
log.info(`All stuff loaded in ${elapsed} sec`)
|
|
251
242
|
log.info(`🚀 Server ready at ${address}`)
|
|
252
243
|
})
|
|
253
|
-
|
|
244
|
+
|
|
245
|
+
return fastify
|
|
246
|
+
}
|
|
254
247
|
|
|
255
248
|
/**
|
|
256
249
|
* These export configurations enable JS and TS developers
|
|
@@ -263,6 +256,6 @@ Fastify(opts).then(async (fastify) => {
|
|
|
263
256
|
* - `import server from '@volcanicminds/backend'`
|
|
264
257
|
* - `import server, { TSC_definition } from '@volcanicminds/backend'`
|
|
265
258
|
*/
|
|
266
|
-
module.exports =
|
|
267
|
-
module.exports.server =
|
|
268
|
-
module.exports.default =
|
|
259
|
+
module.exports = start
|
|
260
|
+
module.exports.server = start
|
|
261
|
+
module.exports.default = start
|
package/lib/loader/roles.ts
CHANGED
|
@@ -1,5 +1,9 @@
|
|
|
1
|
+
import { Role, RoleKey, Roles } from '../../types/global'
|
|
1
2
|
import { roles as configRoles } from '../config/roles'
|
|
2
3
|
|
|
4
|
+
const glob = require('glob')
|
|
5
|
+
const path = require('path')
|
|
6
|
+
|
|
3
7
|
export function load() {
|
|
4
8
|
const roles: {
|
|
5
9
|
[key in RoleKey]?: Role
|
|
@@ -9,5 +13,21 @@ export function load() {
|
|
|
9
13
|
roles[role.code as RoleKey] = role
|
|
10
14
|
})
|
|
11
15
|
|
|
16
|
+
const patterns = [`${__dirname}/../config/roles.{ts,js}`, `${process.cwd()}/config/roles.{ts,js}`]
|
|
17
|
+
|
|
18
|
+
patterns.forEach((pattern) => {
|
|
19
|
+
log.i && log.info('Looking for ' + pattern)
|
|
20
|
+
glob.sync(pattern).forEach((f: string, index: number, values: string[]) => {
|
|
21
|
+
const base = path.dirname(f)
|
|
22
|
+
const dir = path.basename(base)
|
|
23
|
+
const file = path.join(dir, path.basename(f))
|
|
24
|
+
|
|
25
|
+
// allow array or structure
|
|
26
|
+
const groupjs = require(f)
|
|
27
|
+
console.log(file)
|
|
28
|
+
console.log(groupjs)
|
|
29
|
+
})
|
|
30
|
+
})
|
|
31
|
+
|
|
12
32
|
return { ...roles } as Roles
|
|
13
33
|
}
|
package/lib/loader/router.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { Route, ConfiguredRoute } from '../../types/global'
|
|
1
2
|
import { FastifyReply, FastifyRequest } from 'fastify'
|
|
2
3
|
|
|
3
4
|
const glob = require('glob')
|
|
@@ -5,15 +6,11 @@ const path = require('path')
|
|
|
5
6
|
const methods = ['GET', 'POST', 'PUT', 'DELETE', 'HEAD', 'PATCH', 'OPTIONS']
|
|
6
7
|
|
|
7
8
|
export function load(): ConfiguredRoute[] {
|
|
8
|
-
const check = true,
|
|
9
|
-
print = true,
|
|
10
|
-
load = true
|
|
11
|
-
|
|
12
9
|
const validRoutes: ConfiguredRoute[] = []
|
|
13
10
|
const patterns = [`${__dirname}/../api/**/routes.{ts,js}`, `${process.cwd()}/src/api/**/routes.{ts,js}`]
|
|
14
11
|
|
|
15
12
|
patterns.forEach((pattern) => {
|
|
16
|
-
|
|
13
|
+
log.i && log.info('Looking for ' + pattern)
|
|
17
14
|
glob.sync(pattern).forEach((f: string, index: number, values: string[]) => {
|
|
18
15
|
const base = path.dirname(f)
|
|
19
16
|
const dir = path.basename(base)
|
|
@@ -21,18 +18,18 @@ export function load(): ConfiguredRoute[] {
|
|
|
21
18
|
|
|
22
19
|
// allow array or structure
|
|
23
20
|
const routesjs = require(f)
|
|
24
|
-
const { routes = [], config: defaultConfig = {} } = routesjs
|
|
21
|
+
const { routes = [], config: defaultConfig = {} } = routesjs || {}
|
|
25
22
|
|
|
26
23
|
// adjust default config
|
|
27
24
|
if (!defaultConfig.enable) defaultConfig.enable = true
|
|
28
25
|
if (defaultConfig.deprecated == null) defaultConfig.deprecated = false
|
|
29
26
|
if (defaultConfig.controller == null) defaultConfig.controller = 'controller'
|
|
30
27
|
|
|
31
|
-
|
|
32
|
-
|
|
28
|
+
log.i && log.info(`Load ${file} with ${routes.length} routes defined`)
|
|
29
|
+
log.d && log.debug(`Valid routes loaded from ${file}`)
|
|
33
30
|
|
|
34
31
|
routes.forEach((route: Route, index: number) => {
|
|
35
|
-
const errors = []
|
|
32
|
+
const errors: string[] = []
|
|
36
33
|
const { method: methodCase, path: pathName = '/', handler, config, middlewares = [], roles = [] } = route
|
|
37
34
|
|
|
38
35
|
// specific route config
|
|
@@ -72,21 +69,19 @@ export function load(): ConfiguredRoute[] {
|
|
|
72
69
|
}
|
|
73
70
|
|
|
74
71
|
if (errors.length > 0) {
|
|
75
|
-
|
|
72
|
+
log.e && errors.forEach((error) => log.error(error))
|
|
76
73
|
}
|
|
77
74
|
}
|
|
78
75
|
|
|
79
76
|
if (errors.length == 0) {
|
|
80
|
-
enable
|
|
77
|
+
enable
|
|
81
78
|
? log.d &&
|
|
82
79
|
log.debug(
|
|
83
|
-
`* Method [${method}] path ${endpoint} handler ${handler}
|
|
84
|
-
|
|
85
|
-
}`
|
|
80
|
+
`* Method [${method}] path ${endpoint} handler ${handler} enabled with ${
|
|
81
|
+
middlewares?.length || 0
|
|
82
|
+
} middlewares`
|
|
86
83
|
)
|
|
87
|
-
:
|
|
88
|
-
? log.w && log.warn(`* Method [${method}] path ${endpoint} handler ${handler} disabled. Skip.`)
|
|
89
|
-
: log.i && log.info(`* Method [${method}] path ${endpoint} handler ${handler} enabled.`)
|
|
84
|
+
: log.w && log.warn(`* Method [${method}] path ${endpoint} handler ${handler} disabled. Skip.`)
|
|
90
85
|
|
|
91
86
|
validRoutes.push({
|
|
92
87
|
handler,
|
|
@@ -130,50 +125,34 @@ export function apply(server: any, routes: ConfiguredRoute[]): void {
|
|
|
130
125
|
|
|
131
126
|
routes.forEach(async ({ handler, method, path, middlewares, roles, enable, base, file, func, doc }) => {
|
|
132
127
|
if (enable) {
|
|
133
|
-
log.t && log.trace(
|
|
128
|
+
log.t && log.trace(`* Add path ${method} ${path} on handle ${handler}`)
|
|
134
129
|
|
|
135
|
-
const allMiddlewares =
|
|
136
|
-
middlewares?.length > 0 ? middlewares.map((m) => require(normalizeMiddlewarePath(base, m))) : []
|
|
130
|
+
const allMiddlewares = (middlewares || []).map((m) => require(normalizeMiddlewarePath(base, m)))
|
|
137
131
|
|
|
138
132
|
server.route({
|
|
139
133
|
method: method,
|
|
140
134
|
path: path,
|
|
141
135
|
schema: doc,
|
|
142
|
-
|
|
143
|
-
handler: (
|
|
136
|
+
preHandler: allMiddlewares,
|
|
137
|
+
handler: (req: FastifyRequest, reply: FastifyReply) => {
|
|
144
138
|
try {
|
|
145
139
|
if (roles?.length > 0) {
|
|
146
|
-
const userRoles =
|
|
140
|
+
const userRoles = req.user?.roles || []
|
|
147
141
|
const resolvedRole = roles.filter((r) => userRoles.includes(r.code))
|
|
142
|
+
|
|
148
143
|
if (!resolvedRole || resolvedRole.length === 0) {
|
|
149
144
|
log.w && log.warn(`Not allowed to call ${method.toUpperCase()} ${path}`)
|
|
150
145
|
return reply.code(403).send()
|
|
151
146
|
}
|
|
152
147
|
}
|
|
153
|
-
|
|
148
|
+
|
|
149
|
+
return require(file)[func](req, reply)
|
|
154
150
|
} catch (err) {
|
|
155
151
|
log.e && log.error(`Cannot find ${file}.js or method ${func}: ${err}`)
|
|
156
152
|
return reply.code(500).send(`Invalid handler ${handler}`)
|
|
157
153
|
}
|
|
158
154
|
}
|
|
159
155
|
})
|
|
160
|
-
|
|
161
|
-
// server[method](path, (request: FastifyRequest, reply: FastifyReply) => {
|
|
162
|
-
// try {
|
|
163
|
-
// if (roles?.length > 0) {
|
|
164
|
-
// const userRoles = request.user?.roles || []
|
|
165
|
-
// const resolvedRole = roles.filter((r) => userRoles.includes(r.code))
|
|
166
|
-
// if (!resolvedRole || resolvedRole.length === 0) {
|
|
167
|
-
// log.w && log.warn(`Not allowed to call ${method.toUpperCase()} ${path}`)
|
|
168
|
-
// return reply.code(403).send()
|
|
169
|
-
// }
|
|
170
|
-
// }
|
|
171
|
-
// return require(file + '.ts')[func](request, reply)
|
|
172
|
-
// } catch (err) {
|
|
173
|
-
// log.e && log.error(`Cannot find ${file}.js or method ${func}: ${err}`)
|
|
174
|
-
// return reply.code(500).send(`Invalid handler ${handler}`)
|
|
175
|
-
// }
|
|
176
|
-
// })
|
|
177
156
|
}
|
|
178
157
|
})
|
|
179
158
|
}
|