@volcanicminds/backend 0.1.4 → 0.1.5
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/TODO.md +1 -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 +3 -3
- 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 +1 -1
- package/dist/loader/roles.js.map +1 -1
- package/dist/loader/router.js +25 -40
- 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/config/roles.ts +1 -0
- package/lib/index.ts +18 -25
- package/lib/loader/roles.ts +1 -0
- package/lib/loader/router.ts +13 -34
- 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/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 === null || routesjs === void 0 ? void 0 : routesjs.default;
|
|
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,26 @@ 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
104
|
log.t && log.trace(`Add path ${method} ${path} on handle ${handler}`);
|
|
104
|
-
const allMiddlewares = middlewares
|
|
105
|
+
const allMiddlewares = (middlewares === null || middlewares === void 0 ? void 0 : middlewares.length) > 0 ? middlewares.map((m) => require(normalizeMiddlewarePath(base, m))) : [];
|
|
105
106
|
server.route({
|
|
106
107
|
method: method,
|
|
107
108
|
path: path,
|
|
108
109
|
schema: doc,
|
|
109
|
-
// preHandler: allMiddlewares,
|
|
110
110
|
handler: (request, reply) => {
|
|
111
|
+
var _a;
|
|
111
112
|
try {
|
|
112
|
-
if (roles
|
|
113
|
-
const userRoles = request.user
|
|
113
|
+
if ((roles === null || roles === void 0 ? void 0 : roles.length) > 0) {
|
|
114
|
+
const userRoles = ((_a = request.user) === null || _a === void 0 ? void 0 : _a.roles) || [];
|
|
114
115
|
const resolvedRole = roles.filter((r) => userRoles.includes(r.code));
|
|
115
116
|
if (!resolvedRole || resolvedRole.length === 0) {
|
|
116
117
|
log.w && log.warn(`Not allowed to call ${method.toUpperCase()} ${path}`);
|
|
117
118
|
return reply.code(403).send();
|
|
118
119
|
}
|
|
119
120
|
}
|
|
120
|
-
return require(file
|
|
121
|
+
return require(file)[func](request, reply);
|
|
121
122
|
}
|
|
122
123
|
catch (err) {
|
|
123
124
|
log.e && log.error(`Cannot find ${file}.js or method ${func}: ${err}`);
|
|
@@ -125,24 +126,8 @@ function apply(server, routes) {
|
|
|
125
126
|
}
|
|
126
127
|
}
|
|
127
128
|
});
|
|
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
129
|
}
|
|
145
|
-
});
|
|
130
|
+
}));
|
|
146
131
|
}
|
|
147
132
|
exports.apply = apply;
|
|
148
133
|
//# 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/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
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)
|
|
@@ -28,11 +25,11 @@ export function load(): ConfiguredRoute[] {
|
|
|
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,
|
|
@@ -150,30 +145,14 @@ export function apply(server: any, routes: ConfiguredRoute[]): void {
|
|
|
150
145
|
return reply.code(403).send()
|
|
151
146
|
}
|
|
152
147
|
}
|
|
153
|
-
|
|
148
|
+
|
|
149
|
+
return require(file)[func](request, 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
|
}
|
package/lib/server.ts
ADDED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@volcanicminds/backend",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.5",
|
|
4
4
|
"codename": "turin",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"description": "The volcanic (minds) backend",
|
|
@@ -13,9 +13,9 @@
|
|
|
13
13
|
"scripts": {
|
|
14
14
|
"compile": "tsc",
|
|
15
15
|
"preprod": "npm run compile",
|
|
16
|
-
"prod": "node ./dist/
|
|
17
|
-
"start": "ts-node ./lib/
|
|
18
|
-
"dev": "nodemon --exec \"ts-node\" ./lib/
|
|
16
|
+
"prod": "node ./dist/server.js",
|
|
17
|
+
"start": "ts-node ./lib/server.ts",
|
|
18
|
+
"dev": "nodemon --exec \"ts-node\" ./lib/server.ts",
|
|
19
19
|
"test": "jest test --config ./jest.config.js",
|
|
20
20
|
"upgrade-deps": "npm-upgrade"
|
|
21
21
|
},
|
|
@@ -46,7 +46,7 @@
|
|
|
46
46
|
"type": "git",
|
|
47
47
|
"url": "git+https://github.com/volcanicminds/volcanic-backend.git"
|
|
48
48
|
},
|
|
49
|
-
"homepage": "https://
|
|
49
|
+
"homepage": "https://volcanicminds.com",
|
|
50
50
|
"bugs": {
|
|
51
51
|
"url": "https://github.com/volcanicminds/volcanic-backend/issues"
|
|
52
52
|
},
|
package/tsconfig.json
CHANGED
|
@@ -5,28 +5,32 @@
|
|
|
5
5
|
"files": true
|
|
6
6
|
},
|
|
7
7
|
"compilerOptions": {
|
|
8
|
-
"
|
|
9
|
-
"
|
|
10
|
-
"
|
|
11
|
-
"
|
|
12
|
-
"
|
|
13
|
-
"
|
|
14
|
-
"
|
|
15
|
-
"
|
|
16
|
-
"
|
|
17
|
-
"
|
|
18
|
-
"allowSyntheticDefaultImports": true,
|
|
19
|
-
"strict": true,
|
|
8
|
+
"module": "commonjs",
|
|
9
|
+
"declaration": false,
|
|
10
|
+
"noImplicitAny": false,
|
|
11
|
+
"noUnusedLocals": false,
|
|
12
|
+
"removeComments": true,
|
|
13
|
+
"noLib": false,
|
|
14
|
+
"emitDecoratorMetadata": true,
|
|
15
|
+
"experimentalDecorators": true,
|
|
16
|
+
"useUnknownInCatchVariables": false,
|
|
17
|
+
"target": "es6",
|
|
20
18
|
"sourceMap": true,
|
|
21
|
-
"
|
|
22
|
-
"typeRoots": ["./node_modules/@types", "./types", "./lib/types"],
|
|
19
|
+
"allowJs": true,
|
|
23
20
|
"outDir": "dist",
|
|
24
|
-
"
|
|
25
|
-
|
|
21
|
+
"lib": ["es7"],
|
|
22
|
+
|
|
26
23
|
"paths": {
|
|
27
|
-
"
|
|
24
|
+
"@types": ["./types"]
|
|
28
25
|
}
|
|
26
|
+
// "types": ["node"],
|
|
27
|
+
// "typeRoots": ["./node_modules/@types", "./types", "./lib/types"],
|
|
28
|
+
// "rootDirs": ["lib", "config", "types"],
|
|
29
|
+
// "baseUrl": ".",
|
|
30
|
+
// "paths": {
|
|
31
|
+
// "*": ["*", "components/*"]
|
|
32
|
+
// }
|
|
29
33
|
},
|
|
30
|
-
"include": ["
|
|
31
|
-
"exclude": ["node_modules"]
|
|
34
|
+
"include": ["lib/**/*", "config/**/*", "types/**/*"],
|
|
35
|
+
"exclude": ["node_modules", "test/**/*"]
|
|
32
36
|
}
|