@volcanicminds/backend 0.2.5 → 0.2.7
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/Dockerfile +1 -1
- package/README.md +42 -13
- package/TODO.md +0 -1
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/lib/api/users/routes.js +17 -1
- package/dist/lib/api/users/routes.js.map +1 -1
- package/dist/lib/loader/hooks.js +1 -1
- package/dist/lib/loader/hooks.js.map +1 -1
- package/dist/lib/loader/roles.js +1 -1
- package/dist/lib/loader/roles.js.map +1 -1
- package/dist/lib/loader/router.js +1 -1
- package/dist/lib/loader/schemas.js +24 -0
- package/dist/lib/loader/schemas.js.map +1 -0
- package/dist/lib/middleware/isAuthenticated.js.map +1 -1
- package/dist/lib/schemas/example.js +9 -0
- package/dist/lib/schemas/example.js.map +1 -0
- package/index.ts +5 -7
- package/lib/api/users/routes.ts +17 -1
- package/lib/loader/hooks.ts +1 -3
- package/lib/loader/roles.ts +1 -4
- package/lib/loader/router.ts +2 -2
- package/lib/loader/schemas.ts +22 -0
- package/lib/middleware/isAuthenticated.ts +0 -1
- package/lib/schemas/example.ts +7 -0
- package/lib/util/logger.ts +1 -1
- package/package.json +7 -7
package/Dockerfile
CHANGED
package/README.md
CHANGED
|
@@ -15,13 +15,13 @@ And, what you see in [package.json](package.json).
|
|
|
15
15
|
|
|
16
16
|
## How to install
|
|
17
17
|
|
|
18
|
-
```
|
|
18
|
+
```ts
|
|
19
19
|
yarn add @volcanicminds/backend
|
|
20
20
|
```
|
|
21
21
|
|
|
22
22
|
## How to upgrade packages
|
|
23
23
|
|
|
24
|
-
```
|
|
24
|
+
```ts
|
|
25
25
|
yarn upgrade-deps
|
|
26
26
|
```
|
|
27
27
|
|
|
@@ -56,7 +56,7 @@ For docker may be useful set HOST as 0.0.0.0 (instead 127.0.0.1).
|
|
|
56
56
|
|
|
57
57
|
## How to run
|
|
58
58
|
|
|
59
|
-
```
|
|
59
|
+
```ts
|
|
60
60
|
yarn dev
|
|
61
61
|
yarn start
|
|
62
62
|
yarn prod
|
|
@@ -66,7 +66,7 @@ When you execute `yarn dev` the server is restarted whenever a .js/.ts file is c
|
|
|
66
66
|
|
|
67
67
|
## How to test (logic)
|
|
68
68
|
|
|
69
|
-
```
|
|
69
|
+
```ts
|
|
70
70
|
yarn test
|
|
71
71
|
yarn test -t 'Logging'
|
|
72
72
|
```
|
|
@@ -96,7 +96,7 @@ Log levels:
|
|
|
96
96
|
|
|
97
97
|
a bit of code:
|
|
98
98
|
|
|
99
|
-
```
|
|
99
|
+
```ts
|
|
100
100
|
log.trace('Annoying message')
|
|
101
101
|
log.debug('Where is my bug?')
|
|
102
102
|
log.info('Useful information')
|
|
@@ -124,7 +124,7 @@ Other settings:
|
|
|
124
124
|
|
|
125
125
|
Defaults, see [logger.ts](./lib/util/logger.ts):
|
|
126
126
|
|
|
127
|
-
```
|
|
127
|
+
```ts
|
|
128
128
|
const logColorize = yn(LOG_COLORIZE, true)
|
|
129
129
|
const logTimestamp = yn(LOG_TIMESTAMP, true)
|
|
130
130
|
const logTimestampReadable = yn(LOG_TIMESTAMP_READABLE, true)
|
|
@@ -158,7 +158,7 @@ SRV_COMPRESS=false
|
|
|
158
158
|
|
|
159
159
|
Minimal setup (routes.ts):
|
|
160
160
|
|
|
161
|
-
```
|
|
161
|
+
```ts
|
|
162
162
|
module.exports = {
|
|
163
163
|
routes: [
|
|
164
164
|
{
|
|
@@ -177,7 +177,7 @@ Some notes:
|
|
|
177
177
|
- It's possible define a list of **roles** (optional).
|
|
178
178
|
- It's possible define a list of **middleware** (optional).
|
|
179
179
|
|
|
180
|
-
```
|
|
180
|
+
```ts
|
|
181
181
|
module.exports = {
|
|
182
182
|
config: {
|
|
183
183
|
title: 'Example of routes.ts',
|
|
@@ -226,7 +226,7 @@ module.exports = {
|
|
|
226
226
|
|
|
227
227
|
## Controllers
|
|
228
228
|
|
|
229
|
-
```
|
|
229
|
+
```ts
|
|
230
230
|
import { FastifyReply, FastifyRequest } from '@volcanicminds/backend'
|
|
231
231
|
|
|
232
232
|
export async function user(req: FastifyRequest, reply: FastifyReply) {
|
|
@@ -247,7 +247,7 @@ By default, there are some basic roles:
|
|
|
247
247
|
|
|
248
248
|
In this way you can add custom roles:
|
|
249
249
|
|
|
250
|
-
```
|
|
250
|
+
```ts
|
|
251
251
|
import { Role } from '@volcanicminds/backend'
|
|
252
252
|
|
|
253
253
|
export const roles: Role[] = [
|
|
@@ -261,17 +261,21 @@ export const roles: Role[] = [
|
|
|
261
261
|
|
|
262
262
|
You can use something like this to specify which roles (routes.ts) can recall some routes:
|
|
263
263
|
|
|
264
|
-
```
|
|
264
|
+
```ts
|
|
265
265
|
roles: [roles.admin, roles.public]
|
|
266
266
|
```
|
|
267
267
|
|
|
268
|
+
## Database
|
|
269
|
+
|
|
270
|
+
Use package `@volcaniminds/typeorm`
|
|
271
|
+
|
|
268
272
|
## Hooks
|
|
269
273
|
|
|
270
274
|
It's possible add hook to application or request/reply lifecycles. More info on [Fastify Hooks](https://www.fastify.io/docs/latest/Reference/Hooks/).
|
|
271
275
|
|
|
272
276
|
Available hooks are:
|
|
273
277
|
|
|
274
|
-
```
|
|
278
|
+
```ts
|
|
275
279
|
const hooks = [
|
|
276
280
|
'onRequest',
|
|
277
281
|
'onError',
|
|
@@ -291,7 +295,7 @@ const hooks = [
|
|
|
291
295
|
|
|
292
296
|
Under `src` create the `hooks` folder and inside add the hook as shown in the fastify docs, for example:
|
|
293
297
|
|
|
294
|
-
```
|
|
298
|
+
```ts
|
|
295
299
|
// src/hooks/onRequest.ts
|
|
296
300
|
|
|
297
301
|
async function hook(req, reply) {
|
|
@@ -300,3 +304,28 @@ async function hook(req, reply) {
|
|
|
300
304
|
|
|
301
305
|
export { hook }
|
|
302
306
|
```
|
|
307
|
+
|
|
308
|
+
## Schemas
|
|
309
|
+
|
|
310
|
+
It's possible add schemas referenceable by `$ref`. More info on [Fastify Validation & Serialization](https://www.fastify.io/docs/latest/Reference/Validation-and-Serialization/).
|
|
311
|
+
|
|
312
|
+
Under `src` create the `schemas` folder and inside add the schema as shown in the fastify docs, for example:
|
|
313
|
+
|
|
314
|
+
```ts
|
|
315
|
+
module.exports = {
|
|
316
|
+
$id: 'commonSchema',
|
|
317
|
+
type: 'object',
|
|
318
|
+
properties: {
|
|
319
|
+
hello: { type: 'string' }
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
```
|
|
323
|
+
|
|
324
|
+
So, in your `routes.ts` you'll can use something like this:
|
|
325
|
+
|
|
326
|
+
```ts
|
|
327
|
+
params: { $ref: 'commonSchema#' },
|
|
328
|
+
query: { $ref: 'commonSchema#' },
|
|
329
|
+
body: { $ref: 'commonSchema#' },
|
|
330
|
+
headers: { $ref: 'commonSchema#' }
|
|
331
|
+
```
|
package/TODO.md
CHANGED
package/dist/index.js
CHANGED
|
@@ -44,6 +44,7 @@ const mark = __importStar(require("./lib/util/mark"));
|
|
|
44
44
|
const loaderRoles = __importStar(require("./lib/loader/roles"));
|
|
45
45
|
const loaderRouter = __importStar(require("./lib/loader/router"));
|
|
46
46
|
const loaderHooks = __importStar(require("./lib/loader/hooks"));
|
|
47
|
+
const loaderSchemas = __importStar(require("./lib/loader/schemas"));
|
|
47
48
|
const fastify_1 = __importDefault(require("fastify"));
|
|
48
49
|
const swagger_1 = __importDefault(require("@fastify/swagger"));
|
|
49
50
|
const swagger_ui_1 = __importDefault(require("@fastify/swagger-ui"));
|
|
@@ -56,6 +57,7 @@ const fastify_2 = __importStar(require("@as-integrations/fastify"));
|
|
|
56
57
|
const context_1 = require("./lib/apollo/context");
|
|
57
58
|
const resolvers_1 = __importDefault(require("./lib/apollo/resolvers"));
|
|
58
59
|
const type_defs_1 = __importDefault(require("./lib/apollo/type-defs"));
|
|
60
|
+
global.log = logger_1.default;
|
|
59
61
|
function attachApollo(fastify) {
|
|
60
62
|
return __awaiter(this, void 0, void 0, function* () {
|
|
61
63
|
log.info('Attach ApolloServer to Fastify');
|
|
@@ -82,7 +84,7 @@ function addFastifyRouting(fastify) {
|
|
|
82
84
|
return __awaiter(this, void 0, void 0, function* () {
|
|
83
85
|
log.trace('Add fastify routes');
|
|
84
86
|
loaderHooks.apply(fastify);
|
|
85
|
-
|
|
87
|
+
loaderSchemas.apply(fastify);
|
|
86
88
|
const routes = loaderRouter.load();
|
|
87
89
|
routes && loaderRouter.apply(fastify, routes);
|
|
88
90
|
});
|
|
@@ -130,7 +132,6 @@ function addFastifySwagger(fastify) {
|
|
|
130
132
|
const start = () => __awaiter(void 0, void 0, void 0, function* () {
|
|
131
133
|
const begin = new Date().getTime();
|
|
132
134
|
mark.print(logger_1.default);
|
|
133
|
-
global.log = logger_1.default;
|
|
134
135
|
global.roles = loaderRoles.load();
|
|
135
136
|
const opts = (0, yn_1.default)(process.env.LOG_FASTIFY, false) ? { logger: logger_1.default } : {};
|
|
136
137
|
const fastify = yield (0, fastify_1.default)(opts);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEZ,oDAA2B;AAC3B,gBAAM,CAAC,MAAM,EAAE,CAAA;AAEf,uDAA8B;AAC9B,+DAAsC;AACtC,sDAAuC;AACvC,gEAAiD;AACjD,kEAAmD;AACnD,gEAAiD;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
|
|
@@ -51,7 +51,23 @@ module.exports = {
|
|
|
51
51
|
description: 'Check if the current user is an admin',
|
|
52
52
|
enable: true,
|
|
53
53
|
deprecated: false,
|
|
54
|
-
version: false
|
|
54
|
+
version: false,
|
|
55
|
+
response: {
|
|
56
|
+
403: {
|
|
57
|
+
description: 'Successful response',
|
|
58
|
+
type: 'object',
|
|
59
|
+
properties: {
|
|
60
|
+
hello: { type: 'string' }
|
|
61
|
+
}
|
|
62
|
+
},
|
|
63
|
+
200: {
|
|
64
|
+
description: 'Default response',
|
|
65
|
+
type: 'object',
|
|
66
|
+
properties: {
|
|
67
|
+
ok: { type: 'boolean' }
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
55
71
|
}
|
|
56
72
|
}
|
|
57
73
|
]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routes.js","sourceRoot":"","sources":["../../../../lib/api/users/routes.ts"],"names":[],"mappings":";AAAA,MAAM,CAAC,OAAO,GAAG;IACf,MAAM,EAAE;QACN,KAAK,EAAE,uBAAuB;QAC9B,WAAW,EAAE,uBAAuB;QACpC,UAAU,EAAE,YAAY;QACxB,IAAI,EAAE,CAAC,OAAO,CAAC;QACf,MAAM,EAAE,IAAI;QACZ,UAAU,EAAE,KAAK;QACjB,OAAO,EAAE,KAAK;KACf;IACD,MAAM,EAAE;QACN;YACE,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,GAAG;YACT,KAAK,EAAE,EAAE;YACT,OAAO,EAAE,WAAW;YACpB,WAAW,EAAE,CAAC,wBAAwB,CAAC;YACvC,MAAM,EAAE;gBACN,MAAM,EAAE,IAAI;gBACZ,KAAK,EAAE,kBAAkB;gBACzB,WAAW,EAAE,kBAAkB;gBAC/B,UAAU,EAAE,KAAK;gBACjB,OAAO,EAAE,KAAK;gBACd,QAAQ,EAAE;oBACR,GAAG,EAAE;wBACH,WAAW,EAAE,qBAAqB;wBAClC,IAAI,EAAE,QAAQ;wBACd,UAAU,EAAE;4BACV,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;yBAC1B;qBACF;oBACD,GAAG,EAAE;wBACH,WAAW,EAAE,kBAAkB;wBAC/B,IAAI,EAAE,QAAQ;wBACd,UAAU,EAAE;4BACV,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;yBACvB;qBACF;iBACF;aACF;SACF;QACD;YACE,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,WAAW;YACjB,KAAK,EAAE,EAAE;YACT,OAAO,EAAE,cAAc;YACvB,WAAW,EAAE,CAAC,wBAAwB,CAAC;YACvC,MAAM,EAAE;gBACN,KAAK,EAAE,sBAAsB;gBAC7B,WAAW,EAAE,uCAAuC;gBACpD,MAAM,EAAE,IAAI;gBACZ,UAAU,EAAE,KAAK;gBACjB,OAAO,EAAE,KAAK;
|
|
1
|
+
{"version":3,"file":"routes.js","sourceRoot":"","sources":["../../../../lib/api/users/routes.ts"],"names":[],"mappings":";AAAA,MAAM,CAAC,OAAO,GAAG;IACf,MAAM,EAAE;QACN,KAAK,EAAE,uBAAuB;QAC9B,WAAW,EAAE,uBAAuB;QACpC,UAAU,EAAE,YAAY;QACxB,IAAI,EAAE,CAAC,OAAO,CAAC;QACf,MAAM,EAAE,IAAI;QACZ,UAAU,EAAE,KAAK;QACjB,OAAO,EAAE,KAAK;KACf;IACD,MAAM,EAAE;QACN;YACE,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,GAAG;YACT,KAAK,EAAE,EAAE;YACT,OAAO,EAAE,WAAW;YACpB,WAAW,EAAE,CAAC,wBAAwB,CAAC;YACvC,MAAM,EAAE;gBACN,MAAM,EAAE,IAAI;gBACZ,KAAK,EAAE,kBAAkB;gBACzB,WAAW,EAAE,kBAAkB;gBAC/B,UAAU,EAAE,KAAK;gBACjB,OAAO,EAAE,KAAK;gBACd,QAAQ,EAAE;oBACR,GAAG,EAAE;wBACH,WAAW,EAAE,qBAAqB;wBAClC,IAAI,EAAE,QAAQ;wBACd,UAAU,EAAE;4BACV,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;yBAC1B;qBACF;oBACD,GAAG,EAAE;wBACH,WAAW,EAAE,kBAAkB;wBAC/B,IAAI,EAAE,QAAQ;wBACd,UAAU,EAAE;4BACV,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;yBACvB;qBACF;iBACF;aACF;SACF;QACD;YACE,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,WAAW;YACjB,KAAK,EAAE,EAAE;YACT,OAAO,EAAE,cAAc;YACvB,WAAW,EAAE,CAAC,wBAAwB,CAAC;YACvC,MAAM,EAAE;gBACN,KAAK,EAAE,sBAAsB;gBAC7B,WAAW,EAAE,uCAAuC;gBACpD,MAAM,EAAE,IAAI;gBACZ,UAAU,EAAE,KAAK;gBACjB,OAAO,EAAE,KAAK;gBACd,QAAQ,EAAE;oBACR,GAAG,EAAE;wBACH,WAAW,EAAE,qBAAqB;wBAClC,IAAI,EAAE,QAAQ;wBACd,UAAU,EAAE;4BACV,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;yBAC1B;qBACF;oBACD,GAAG,EAAE;wBACH,WAAW,EAAE,kBAAkB;wBAC/B,IAAI,EAAE,QAAQ;wBACd,UAAU,EAAE;4BACV,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;yBACxB;qBACF;iBACF;aACF;SACF;KACF;CACF,CAAA"}
|
package/dist/lib/loader/hooks.js
CHANGED
|
@@ -22,7 +22,7 @@ function apply(server) {
|
|
|
22
22
|
const patterns = [`${__dirname}/../hooks/*.{ts,js}`, `${process.cwd()}/src/hooks/*.{ts,js}`];
|
|
23
23
|
const allHooks = hooks.reduce((acc, v) => (Object.assign(Object.assign({}, acc), { [v]: [] })), {});
|
|
24
24
|
patterns.forEach((pattern) => {
|
|
25
|
-
log.
|
|
25
|
+
log.t && log.trace('Looking for ' + pattern);
|
|
26
26
|
glob.sync(pattern).forEach((f) => {
|
|
27
27
|
const hookName = path.basename(f, path.extname(f));
|
|
28
28
|
const fn = require(f);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../../lib/loader/hooks.ts"],"names":[],"mappings":";;;AAAA,MAAM,KAAK,GAAG;IACZ,WAAW;IACX,SAAS;IACT,QAAQ;IACR,YAAY;IACZ,WAAW;IACX,SAAS;IACT,SAAS;IACT,SAAS;IACT,YAAY;IACZ,YAAY;IACZ,eAAe;IACf,kBAAkB;IAClB,YAAY;CACb,CAAA;AAED,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;AAC5B,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;AAE5B,SAAgB,KAAK,CAAC,MAAW;
|
|
1
|
+
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../../lib/loader/hooks.ts"],"names":[],"mappings":";;;AAAA,MAAM,KAAK,GAAG;IACZ,WAAW;IACX,SAAS;IACT,QAAQ;IACR,YAAY;IACZ,WAAW;IACX,SAAS;IACT,SAAS;IACT,SAAS;IACT,YAAY;IACZ,YAAY;IACZ,eAAe;IACf,kBAAkB;IAClB,YAAY;CACb,CAAA;AAED,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;AAC5B,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;AAE5B,SAAgB,KAAK,CAAC,MAAW;IAC/B,MAAM,QAAQ,GAAG,CAAC,GAAG,SAAS,qBAAqB,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,sBAAsB,CAAC,CAAA;IAC5F,MAAM,QAAQ,GAAQ,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,iCAAM,GAAG,KAAE,CAAC,CAAC,CAAC,EAAE,EAAgB,IAAG,EAAE,EAAE,CAAC,CAAA;IAEvF,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC3B,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,cAAc,GAAG,OAAO,CAAC,CAAA;QAC5C,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAS,EAAE,EAAE;YACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAA;YAClD,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;YAErB,IAAI,EAAE,IAAI,IAAI,EAAE;gBACd,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,EAAE;oBAC9B,QAAQ,CAAC,QAAQ,CAAC,GAAG,EAAgB,CAAA;iBACtC;gBACD,QAAQ,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,CAAA;aAClD;QACH,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,KAAK,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE;QACrB,MAAM,GAAG,GAAe,QAAQ,CAAC,QAAQ,CAAC,CAAA;QAC1C,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,UAAU,CAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,MAAM,KAAI,CAAC,aAAa,QAAQ,EAAE,CAAC,CAAA;QACrE,CAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,MAAM,IAAG,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAc,CAAC,CAAC,CAAA;IAC9E,CAAC,CAAC,CAAA;AACJ,CAAC;AAxBD,sBAwBC"}
|
package/dist/lib/loader/roles.js
CHANGED
|
@@ -6,7 +6,7 @@ function load() {
|
|
|
6
6
|
const roles = {};
|
|
7
7
|
const patterns = [`${__dirname}/../config/roles.{ts,js}`, `${process.cwd()}/src/config/roles.{ts,js}`];
|
|
8
8
|
patterns.forEach((pattern) => {
|
|
9
|
-
log.
|
|
9
|
+
log.t && log.trace('Looking for ' + pattern);
|
|
10
10
|
glob.sync(pattern).forEach((f) => {
|
|
11
11
|
const configRoles = require(f);
|
|
12
12
|
configRoles.forEach((role) => {
|
|
@@ -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,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;AAE5B,SAAgB,IAAI;IAClB,MAAM,KAAK,GAAU,EAAE,CAAA;IAEvB,MAAM,QAAQ,GAAG,CAAC,GAAG,SAAS,0BAA0B,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,2BAA2B,CAAC,CAAA;IACtG,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC3B,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,cAAc,GAAG,OAAO,CAAC,CAAA;QAC5C,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAS,EAAE,EAAE;YACvC,MAAM,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;YAE9B,WAAW,CAAC,OAAO,CAAC,CAAC,IAAU,EAAE,EAAE;gBACjC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;YACzB,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IACF,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;IACnE,OAAO,KAAK,CAAA;AACd,CAAC;AAhBD,oBAgBC"}
|
|
@@ -17,7 +17,7 @@ function load() {
|
|
|
17
17
|
const validRoutes = [];
|
|
18
18
|
const patterns = [`${__dirname}/../api/**/routes.{ts,js}`, `${process.cwd()}/src/api/**/routes.{ts,js}`];
|
|
19
19
|
patterns.forEach((pattern) => {
|
|
20
|
-
log.
|
|
20
|
+
log.t && log.trace('Looking for ' + pattern);
|
|
21
21
|
glob.sync(pattern).forEach((f, index, values) => {
|
|
22
22
|
const base = path.dirname(f);
|
|
23
23
|
const dir = path.basename(base);
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.apply = void 0;
|
|
4
|
+
const glob = require('glob');
|
|
5
|
+
const path = require('path');
|
|
6
|
+
function apply(server) {
|
|
7
|
+
const patterns = [`${__dirname}/../schemas/*.{ts,js}`, `${process.cwd()}/src/schemas/*.{ts,js}`];
|
|
8
|
+
let schemaCount = 0;
|
|
9
|
+
patterns.forEach((pattern) => {
|
|
10
|
+
log.t && log.trace('Looking for ' + pattern);
|
|
11
|
+
glob.sync(pattern).forEach((f) => {
|
|
12
|
+
const schemaName = path.basename(f);
|
|
13
|
+
const schema = require(f);
|
|
14
|
+
if (schema != null) {
|
|
15
|
+
log.debug(`* Schema [${schema === null || schema === void 0 ? void 0 : schema.$id}] loaded from ${schemaName}`);
|
|
16
|
+
server.addSchema(schema);
|
|
17
|
+
schemaCount++;
|
|
18
|
+
}
|
|
19
|
+
});
|
|
20
|
+
});
|
|
21
|
+
log.debug(`Schemas loaded: ${schemaCount} referenceable by $ref`);
|
|
22
|
+
}
|
|
23
|
+
exports.apply = apply;
|
|
24
|
+
//# sourceMappingURL=schemas.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../../lib/loader/schemas.ts"],"names":[],"mappings":";;;AAAA,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;AAC5B,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;AAE5B,SAAgB,KAAK,CAAC,MAAW;IAC/B,MAAM,QAAQ,GAAG,CAAC,GAAG,SAAS,uBAAuB,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,wBAAwB,CAAC,CAAA;IAEhG,IAAI,WAAW,GAAG,CAAC,CAAA;IACnB,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC3B,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,cAAc,GAAG,OAAO,CAAC,CAAA;QAC5C,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAS,EAAE,EAAE;YACvC,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;YACnC,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;YACzB,IAAI,MAAM,IAAI,IAAI,EAAE;gBAClB,GAAG,CAAC,KAAK,CAAC,aAAa,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,GAAG,iBAAiB,UAAU,EAAE,CAAC,CAAA;gBAChE,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;gBACxB,WAAW,EAAE,CAAA;aACd;QACH,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,GAAG,CAAC,KAAK,CAAC,mBAAmB,WAAW,wBAAwB,CAAC,CAAA;AACnE,CAAC;AAlBD,sBAkBC"}
|
|
@@ -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;;IACrE,IAAI;
|
|
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;QACF,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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"example.js","sourceRoot":"","sources":["../../../lib/schemas/example.ts"],"names":[],"mappings":";AAAA,MAAM,CAAC,OAAO,GAAG;IACf,GAAG,EAAE,cAAc;IACnB,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE;QACV,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;KAC1B;CACF,CAAA"}
|
package/index.ts
CHANGED
|
@@ -9,6 +9,7 @@ import * as mark from './lib/util/mark'
|
|
|
9
9
|
import * as loaderRoles from './lib/loader/roles'
|
|
10
10
|
import * as loaderRouter from './lib/loader/router'
|
|
11
11
|
import * as loaderHooks from './lib/loader/hooks'
|
|
12
|
+
import * as loaderSchemas from './lib/loader/schemas'
|
|
12
13
|
|
|
13
14
|
import Fastify, { FastifyInstance } from 'fastify'
|
|
14
15
|
import swagger from '@fastify/swagger'
|
|
@@ -20,11 +21,13 @@ import compress from '@fastify/compress'
|
|
|
20
21
|
import rateLimit from '@fastify/rate-limit'
|
|
21
22
|
|
|
22
23
|
import { ApolloServer } from '@apollo/server'
|
|
23
|
-
import fastifyApollo, {
|
|
24
|
+
import fastifyApollo, { fastifyApolloDrainPlugin } from '@as-integrations/fastify'
|
|
24
25
|
import { myContextFunction, MyContext } from './lib/apollo/context'
|
|
25
26
|
import resolvers from './lib/apollo/resolvers'
|
|
26
27
|
import typeDefs from './lib/apollo/type-defs'
|
|
27
28
|
|
|
29
|
+
global.log = logger
|
|
30
|
+
|
|
28
31
|
async function attachApollo(fastify: FastifyInstance) {
|
|
29
32
|
log.info('Attach ApolloServer to Fastify')
|
|
30
33
|
const apollo = new ApolloServer<MyContext>({
|
|
@@ -59,8 +62,7 @@ async function addFastifyRouting(fastify: FastifyInstance) {
|
|
|
59
62
|
log.trace('Add fastify routes')
|
|
60
63
|
|
|
61
64
|
loaderHooks.apply(fastify)
|
|
62
|
-
|
|
63
|
-
fastify.addHook('onRequest', async (req, reply) => {})
|
|
65
|
+
loaderSchemas.apply(fastify)
|
|
64
66
|
|
|
65
67
|
const routes = loaderRouter.load()
|
|
66
68
|
routes && loaderRouter.apply(fastify, routes)
|
|
@@ -162,8 +164,6 @@ async function addFastifySwagger(fastify: FastifyInstance) {
|
|
|
162
164
|
const start = async () => {
|
|
163
165
|
const begin = new Date().getTime()
|
|
164
166
|
mark.print(logger)
|
|
165
|
-
|
|
166
|
-
global.log = logger
|
|
167
167
|
global.roles = loaderRoles.load()
|
|
168
168
|
|
|
169
169
|
const opts = yn(process.env.LOG_FASTIFY, false) ? { logger: logger } : {}
|
|
@@ -187,8 +187,6 @@ const start = async () => {
|
|
|
187
187
|
const apollo = loadApollo ? await attachApollo(fastify) : null
|
|
188
188
|
// Helmet is not usable with Apollo Server
|
|
189
189
|
!loadApollo && addPluginHelmet && (await fastify.register(helmet))
|
|
190
|
-
|
|
191
|
-
// Usable with Apollo Server
|
|
192
190
|
addPluginRateLimit && (await fastify.register(rateLimit))
|
|
193
191
|
addPluginCors && (await fastify.register(cors))
|
|
194
192
|
addPluginCompress && (await fastify.register(compress))
|
package/lib/api/users/routes.ts
CHANGED
|
@@ -50,7 +50,23 @@ module.exports = {
|
|
|
50
50
|
description: 'Check if the current user is an admin',
|
|
51
51
|
enable: true,
|
|
52
52
|
deprecated: false,
|
|
53
|
-
version: false
|
|
53
|
+
version: false,
|
|
54
|
+
response: {
|
|
55
|
+
403: {
|
|
56
|
+
description: 'Successful response',
|
|
57
|
+
type: 'object',
|
|
58
|
+
properties: {
|
|
59
|
+
hello: { type: 'string' }
|
|
60
|
+
}
|
|
61
|
+
},
|
|
62
|
+
200: {
|
|
63
|
+
description: 'Default response',
|
|
64
|
+
type: 'object',
|
|
65
|
+
properties: {
|
|
66
|
+
ok: { type: 'boolean' }
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
} // swagger
|
|
54
70
|
}
|
|
55
71
|
}
|
|
56
72
|
]
|
package/lib/loader/hooks.ts
CHANGED
|
@@ -18,13 +18,11 @@ const glob = require('glob')
|
|
|
18
18
|
const path = require('path')
|
|
19
19
|
|
|
20
20
|
export function apply(server: any): void {
|
|
21
|
-
//const patterns = [`{${__dirname},${process.cwd()}}/../hooks/*.{ts,js}`]
|
|
22
21
|
const patterns = [`${__dirname}/../hooks/*.{ts,js}`, `${process.cwd()}/src/hooks/*.{ts,js}`]
|
|
23
22
|
const allHooks: any = hooks.reduce((acc, v) => ({ ...acc, [v]: [] as Function[] }), {})
|
|
24
|
-
// log.error(allHooks)
|
|
25
23
|
|
|
26
24
|
patterns.forEach((pattern) => {
|
|
27
|
-
log.
|
|
25
|
+
log.t && log.trace('Looking for ' + pattern)
|
|
28
26
|
glob.sync(pattern).forEach((f: string) => {
|
|
29
27
|
const hookName = path.basename(f, path.extname(f))
|
|
30
28
|
const fn = require(f)
|
package/lib/loader/roles.ts
CHANGED
|
@@ -1,15 +1,12 @@
|
|
|
1
1
|
import { Role, Roles } from '../../types/global'
|
|
2
|
-
// import { roles as configRoles } from '../config/roles'
|
|
3
|
-
|
|
4
2
|
const glob = require('glob')
|
|
5
|
-
// const path = require('path')
|
|
6
3
|
|
|
7
4
|
export function load() {
|
|
8
5
|
const roles: Roles = {}
|
|
9
6
|
|
|
10
7
|
const patterns = [`${__dirname}/../config/roles.{ts,js}`, `${process.cwd()}/src/config/roles.{ts,js}`]
|
|
11
8
|
patterns.forEach((pattern) => {
|
|
12
|
-
log.
|
|
9
|
+
log.t && log.trace('Looking for ' + pattern)
|
|
13
10
|
glob.sync(pattern).forEach((f: string) => {
|
|
14
11
|
const configRoles = require(f)
|
|
15
12
|
|
package/lib/loader/router.ts
CHANGED
|
@@ -10,7 +10,7 @@ export function load(): ConfiguredRoute[] {
|
|
|
10
10
|
const patterns = [`${__dirname}/../api/**/routes.{ts,js}`, `${process.cwd()}/src/api/**/routes.{ts,js}`]
|
|
11
11
|
|
|
12
12
|
patterns.forEach((pattern) => {
|
|
13
|
-
log.
|
|
13
|
+
log.t && log.trace('Looking for ' + pattern)
|
|
14
14
|
glob.sync(pattern).forEach((f: string, index: number, values: string[]) => {
|
|
15
15
|
const base = path.dirname(f)
|
|
16
16
|
const dir = path.basename(base)
|
|
@@ -94,7 +94,7 @@ export function load(): ConfiguredRoute[] {
|
|
|
94
94
|
base,
|
|
95
95
|
file: path.join(base, defaultConfig.controller, handlerParts[0]),
|
|
96
96
|
func: handlerParts[1],
|
|
97
|
-
// swagger
|
|
97
|
+
// swagger: doc
|
|
98
98
|
doc: {
|
|
99
99
|
summary: title,
|
|
100
100
|
description,
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
const glob = require('glob')
|
|
2
|
+
const path = require('path')
|
|
3
|
+
|
|
4
|
+
export function apply(server: any): void {
|
|
5
|
+
const patterns = [`${__dirname}/../schemas/*.{ts,js}`, `${process.cwd()}/src/schemas/*.{ts,js}`]
|
|
6
|
+
|
|
7
|
+
let schemaCount = 0
|
|
8
|
+
patterns.forEach((pattern) => {
|
|
9
|
+
log.t && log.trace('Looking for ' + pattern)
|
|
10
|
+
glob.sync(pattern).forEach((f: string) => {
|
|
11
|
+
const schemaName = path.basename(f)
|
|
12
|
+
const schema = require(f)
|
|
13
|
+
if (schema != null) {
|
|
14
|
+
log.debug(`* Schema [${schema?.$id}] loaded from ${schemaName}`)
|
|
15
|
+
server.addSchema(schema)
|
|
16
|
+
schemaCount++
|
|
17
|
+
}
|
|
18
|
+
})
|
|
19
|
+
})
|
|
20
|
+
|
|
21
|
+
log.debug(`Schemas loaded: ${schemaCount} referenceable by $ref`)
|
|
22
|
+
}
|
|
@@ -3,7 +3,6 @@ import { FastifyReply, FastifyRequest } from 'fastify'
|
|
|
3
3
|
const log = global.log
|
|
4
4
|
module.exports = (req: FastifyRequest, res: FastifyReply, next: any) => {
|
|
5
5
|
try {
|
|
6
|
-
// TODO: do something and then you can throw an exception or call next()..
|
|
7
6
|
if (!!req.user?.id) {
|
|
8
7
|
log.d && log.trace('isAuthenticated - user id ' + req.user?.id)
|
|
9
8
|
return next()
|
package/lib/util/logger.ts
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@volcanicminds/backend",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.7",
|
|
4
4
|
"codename": "turin",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"description": "The volcanic (minds) backend",
|
|
@@ -42,15 +42,15 @@
|
|
|
42
42
|
"upgrade-deps": "npm-upgrade"
|
|
43
43
|
},
|
|
44
44
|
"dependencies": {
|
|
45
|
-
"@apollo/server": "^4.
|
|
45
|
+
"@apollo/server": "^4.1.1",
|
|
46
46
|
"@as-integrations/fastify": "^1.1.0",
|
|
47
47
|
"@fastify/compress": "^6.1.1",
|
|
48
|
-
"@fastify/cors": "^8.
|
|
48
|
+
"@fastify/cors": "^8.2.0",
|
|
49
49
|
"@fastify/helmet": "^10.0.2",
|
|
50
50
|
"@fastify/rate-limit": "^7.5.0",
|
|
51
|
-
"@fastify/swagger": "^8.
|
|
52
|
-
"@fastify/swagger-ui": "^1.
|
|
53
|
-
"@types/node": "^18.11.
|
|
51
|
+
"@fastify/swagger": "^8.1.0",
|
|
52
|
+
"@fastify/swagger-ui": "^1.2.0",
|
|
53
|
+
"@types/node": "^18.11.9",
|
|
54
54
|
"dotenv": "^16.0.3",
|
|
55
55
|
"fastify": "^4.9.2",
|
|
56
56
|
"graphql": "^16.6.0",
|
|
@@ -60,7 +60,7 @@
|
|
|
60
60
|
"root-require": "^0.3.1"
|
|
61
61
|
},
|
|
62
62
|
"devDependencies": {
|
|
63
|
-
"jest": "^29.
|
|
63
|
+
"jest": "^29.3.1",
|
|
64
64
|
"nodemon": "^2.0.20",
|
|
65
65
|
"npm-upgrade": "^3.1.0",
|
|
66
66
|
"ts-node": "^10.9.1",
|