@volcanicminds/backend 0.1.3 → 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.
Files changed (44) hide show
  1. package/NPM.md +24 -0
  2. package/TODO.md +1 -3
  3. package/dist/api/me/controller/me.js +32 -0
  4. package/dist/api/me/controller/me.js.map +1 -0
  5. package/dist/api/me/routes.js +101 -0
  6. package/dist/api/me/routes.js.map +1 -0
  7. package/dist/apollo/context.js +19 -0
  8. package/dist/apollo/context.js.map +1 -0
  9. package/dist/apollo/resolvers.js +9 -0
  10. package/dist/apollo/resolvers.js.map +1 -0
  11. package/dist/apollo/type-defs.js +9 -0
  12. package/dist/apollo/type-defs.js.map +1 -0
  13. package/dist/config/roles.js +21 -0
  14. package/dist/config/roles.js.map +1 -0
  15. package/dist/index.js +245 -0
  16. package/dist/index.js.map +1 -0
  17. package/dist/loader/roles.js +13 -0
  18. package/dist/loader/roles.js.map +1 -0
  19. package/dist/loader/router.js +133 -0
  20. package/dist/loader/router.js.map +1 -0
  21. package/dist/middleware/example.js +13 -0
  22. package/dist/middleware/example.js.map +1 -0
  23. package/dist/middleware/isAdmin.js +18 -0
  24. package/dist/middleware/isAdmin.js.map +1 -0
  25. package/dist/middleware/isAuthenticated.js +18 -0
  26. package/dist/middleware/isAuthenticated.js.map +1 -0
  27. package/dist/server.js +5 -0
  28. package/dist/server.js.map +1 -0
  29. package/dist/util/logger.js +52 -0
  30. package/dist/util/logger.js.map +1 -0
  31. package/dist/util/mark.js +25 -0
  32. package/dist/util/mark.js.map +1 -0
  33. package/dist/util/yn.js +17 -0
  34. package/dist/util/yn.js.map +1 -0
  35. package/index.d.ts +12 -0
  36. package/lib/config/roles.ts +1 -0
  37. package/lib/index.ts +29 -23
  38. package/lib/loader/roles.ts +1 -0
  39. package/lib/loader/router.ts +13 -34
  40. package/lib/server.ts +7 -0
  41. package/package.json +7 -7
  42. package/tsconfig.json +25 -17
  43. package/types/global.d.ts +86 -0
  44. package/lib/types/global.d.ts +0 -66
package/NPM.md ADDED
@@ -0,0 +1,24 @@
1
+ # NPM
2
+
3
+ [more info](https://zellwk.com/blog/publish-to-npm/)
4
+
5
+ ## how to publish
6
+
7
+ ```ruby
8
+ npm install npm@latest -g
9
+ npm login
10
+ npm init --scope=volcanicminds
11
+ npm publish --access public
12
+ ```
13
+
14
+ ## local linking
15
+
16
+ ```ruby
17
+ yarn link
18
+ yarn link "@volcanicminds/backend"
19
+ ```
20
+
21
+ ```ruby
22
+ yarn unlink
23
+ yarn unlink "@volcanicminds/backend"
24
+ ```
package/TODO.md CHANGED
@@ -2,11 +2,9 @@
2
2
 
3
3
  - roles
4
4
  - database psql
5
+ - hooks (esposti, es come middlewares ma per nome file specifico es onReady ecc)
5
6
  - models
6
7
  - validations
7
8
  - authentication
8
- - hooks (come middlewares esposti)
9
9
  - testare middlewares
10
- - usare progetto come modulo
11
- - creare modulo npm
12
10
  - metrics (plugin?)
@@ -0,0 +1,32 @@
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
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.demo = exports.isAdmin = exports.user = void 0;
13
+ function user(req, reply) {
14
+ return __awaiter(this, void 0, void 0, function* () {
15
+ reply.send(req.user || {});
16
+ });
17
+ }
18
+ exports.user = user;
19
+ function isAdmin(req, reply) {
20
+ var _a;
21
+ return __awaiter(this, void 0, void 0, function* () {
22
+ reply.send({ isAdmin: (((_a = req.user) === null || _a === void 0 ? void 0 : _a.roles) || []).includes('admin') || false });
23
+ });
24
+ }
25
+ exports.isAdmin = isAdmin;
26
+ function demo(req, reply) {
27
+ return __awaiter(this, void 0, void 0, function* () {
28
+ reply.send({ demo: true });
29
+ });
30
+ }
31
+ exports.demo = demo;
32
+ //# sourceMappingURL=me.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"me.js","sourceRoot":"","sources":["../../../../lib/api/me/controller/me.ts"],"names":[],"mappings":";;;;;;;;;;;;AAEA,SAAsB,IAAI,CAAC,GAAmB,EAAE,KAAmB;;QACjE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAA;IAC5B,CAAC;CAAA;AAFD,oBAEC;AAED,SAAsB,OAAO,CAAC,GAAmB,EAAE,KAAmB;;;QACpE,KAAK,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC,CAAA,MAAA,GAAG,CAAC,IAAI,0CAAE,KAAK,KAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,KAAK,EAAE,CAAC,CAAA;;CAC5E;AAFD,0BAEC;AAED,SAAsB,IAAI,CAAC,GAAmB,EAAE,KAAmB;;QACjE,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAA;IAC5B,CAAC;CAAA;AAFD,oBAEC"}
@@ -0,0 +1,101 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.default = {
4
+ config: {
5
+ title: 'Useful functions',
6
+ description: 'Useful functions',
7
+ controller: 'controller',
8
+ tags: ['user', 'code'],
9
+ enable: true,
10
+ deprecated: false,
11
+ version: false
12
+ },
13
+ routes: [
14
+ {
15
+ method: 'GET',
16
+ path: '/',
17
+ roles: [],
18
+ handler: 'me.user',
19
+ middlewares: ['global.isAuthenticated'],
20
+ config: {
21
+ enable: true,
22
+ title: 'Me title',
23
+ description: 'Me description',
24
+ tags: ['user', 'code'],
25
+ deprecated: false,
26
+ version: false,
27
+ response: {
28
+ 403: {
29
+ description: 'Successful response',
30
+ type: 'object',
31
+ properties: {
32
+ hello: { type: 'string' }
33
+ }
34
+ },
35
+ 200: {
36
+ description: 'Default response',
37
+ type: 'object',
38
+ properties: {
39
+ id: { type: 'number' }
40
+ }
41
+ }
42
+ }
43
+ }
44
+ },
45
+ {
46
+ method: 'GET',
47
+ path: '/is-admin',
48
+ roles: [],
49
+ handler: 'me.isAdmin',
50
+ middlewares: ['global.isAuthenticated'],
51
+ config: {
52
+ title: 'Admin',
53
+ description: 'Admin',
54
+ enable: true,
55
+ deprecated: false,
56
+ version: false
57
+ }
58
+ },
59
+ {
60
+ method: 'GET',
61
+ path: '/demo',
62
+ roles: [],
63
+ handler: 'me.demo',
64
+ middlewares: ['global.isAdmin'],
65
+ config: {
66
+ enable: true,
67
+ title: 'Me title',
68
+ description: 'Me description',
69
+ tags: ['user', 'code'],
70
+ deprecated: false,
71
+ version: false,
72
+ params: {
73
+ type: 'object',
74
+ properties: {
75
+ id: {
76
+ type: 'string',
77
+ description: 'user id'
78
+ }
79
+ }
80
+ },
81
+ response: {
82
+ 201: {
83
+ description: 'Successful response',
84
+ type: 'object',
85
+ properties: {
86
+ hello: { type: 'string' }
87
+ }
88
+ },
89
+ 200: {
90
+ description: 'Default response',
91
+ type: 'object',
92
+ properties: {
93
+ foo: { type: 'string' }
94
+ }
95
+ }
96
+ }
97
+ }
98
+ }
99
+ ]
100
+ };
101
+ //# sourceMappingURL=routes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routes.js","sourceRoot":"","sources":["../../../lib/api/me/routes.ts"],"names":[],"mappings":";;AAAA,kBAAe;IACb,MAAM,EAAE;QACN,KAAK,EAAE,kBAAkB;QACzB,WAAW,EAAE,kBAAkB;QAC/B,UAAU,EAAE,YAAY;QACxB,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC;QACtB,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,SAAS;YAClB,WAAW,EAAE,CAAC,wBAAwB,CAAC;YACvC,MAAM,EAAE;gBACN,MAAM,EAAE,IAAI;gBACZ,KAAK,EAAE,UAAU;gBACjB,WAAW,EAAE,gBAAgB;gBAC7B,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC;gBACtB,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,YAAY;YACrB,WAAW,EAAE,CAAC,wBAAwB,CAAC;YACvC,MAAM,EAAE;gBACN,KAAK,EAAE,OAAO;gBACd,WAAW,EAAE,OAAO;gBACpB,MAAM,EAAE,IAAI;gBACZ,UAAU,EAAE,KAAK;gBACjB,OAAO,EAAE,KAAK;aACf;SACF;QACD;YACE,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,OAAO;YACb,KAAK,EAAE,EAAE;YACT,OAAO,EAAE,SAAS;YAClB,WAAW,EAAE,CAAC,gBAAgB,CAAC;YAC/B,MAAM,EAAE;gBACN,MAAM,EAAE,IAAI;gBACZ,KAAK,EAAE,UAAU;gBACjB,WAAW,EAAE,gBAAgB;gBAC7B,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC;gBACtB,UAAU,EAAE,KAAK;gBACjB,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE;oBACN,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE;wBACV,EAAE,EAAE;4BACF,IAAI,EAAE,QAAQ;4BACd,WAAW,EAAE,SAAS;yBACvB;qBACF;iBACF;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,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;yBACxB;qBACF;iBACF;aACF;SACF;KACF;CACF,CAAA"}
@@ -0,0 +1,19 @@
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
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.myContextFunction = void 0;
13
+ const myContextFunction = () => __awaiter(void 0, void 0, void 0, function* () {
14
+ return ({
15
+ greeting: 'Hello World!! ' + new Date().getTime()
16
+ });
17
+ });
18
+ exports.myContextFunction = myContextFunction;
19
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../lib/apollo/context.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;;;;;;;;;;;;AAQL,MAAM,iBAAiB,GAA4C,GAAS,EAAE;IAAC,OAAA,CAAC;QACrF,QAAQ,EAAE,gBAAgB,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE;KAClD,CAAC,CAAA;EAAA,CAAA;AAFW,QAAA,iBAAiB,qBAE5B"}
@@ -0,0 +1,9 @@
1
+ 'use strict';
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const resolvers = {
4
+ Query: {
5
+ helloWorld: (parent, args, context, info) => context.greeting
6
+ }
7
+ };
8
+ exports.default = resolvers;
9
+ //# sourceMappingURL=resolvers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolvers.js","sourceRoot":"","sources":["../../lib/apollo/resolvers.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAIZ,MAAM,SAAS,GAAG;IAChB,KAAK,EAAE;QACL,UAAU,EAAE,CAAC,MAAW,EAAE,IAAS,EAAE,OAAkB,EAAE,IAAS,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ;KACxF;CACF,CAAA;AAED,kBAAe,SAAS,CAAA"}
@@ -0,0 +1,9 @@
1
+ 'use strict';
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const typeDefs = `
4
+ type Query {
5
+ helloWorld: String!
6
+ }
7
+ `;
8
+ exports.default = typeDefs;
9
+ //# sourceMappingURL=type-defs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"type-defs.js","sourceRoot":"","sources":["../../lib/apollo/type-defs.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ,MAAM,QAAQ,GAAG;;;;CAIhB,CAAA;AAED,kBAAe,QAAQ,CAAA"}
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.roles = void 0;
4
+ exports.roles = [
5
+ {
6
+ code: 'public',
7
+ name: 'Public',
8
+ description: 'Public role'
9
+ },
10
+ {
11
+ code: 'admin',
12
+ name: 'Admin',
13
+ description: 'Admin role'
14
+ },
15
+ {
16
+ code: 'backoffice',
17
+ name: 'Backoffice',
18
+ description: 'Backoffice role'
19
+ }
20
+ ];
21
+ //# sourceMappingURL=roles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"roles.js","sourceRoot":"","sources":["../../lib/config/roles.ts"],"names":[],"mappings":";;;AASa,QAAA,KAAK,GAAW;IAC3B;QACE,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,aAAa;KAC3B;IACD;QACE,IAAI,EAAE,OAAO;QACb,IAAI,EAAE,OAAO;QACb,WAAW,EAAE,YAAY;KAC1B;IACD;QACE,IAAI,EAAE,YAAY;QAClB,IAAI,EAAE,YAAY;QAClB,WAAW,EAAE,iBAAiB;KAC/B;CACF,CAAA"}
package/dist/index.js ADDED
@@ -0,0 +1,245 @@
1
+ 'use strict';
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
26
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
27
+ return new (P || (P = Promise))(function (resolve, reject) {
28
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
29
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
30
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
31
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
32
+ });
33
+ };
34
+ var __importDefault = (this && this.__importDefault) || function (mod) {
35
+ return (mod && mod.__esModule) ? mod : { "default": mod };
36
+ };
37
+ Object.defineProperty(exports, "__esModule", { value: true });
38
+ const dotenv_1 = __importDefault(require("dotenv"));
39
+ dotenv_1.default.config();
40
+ const yn_1 = __importDefault(require("./util/yn"));
41
+ const logger_1 = __importDefault(require("./util/logger"));
42
+ const mark = __importStar(require("./util/mark"));
43
+ const loaderRoles = __importStar(require("./loader/roles"));
44
+ const loaderRouter = __importStar(require("./loader/router"));
45
+ const fastify_1 = __importDefault(require("fastify"));
46
+ const swagger_1 = __importDefault(require("@fastify/swagger"));
47
+ const swagger_ui_1 = __importDefault(require("@fastify/swagger-ui"));
48
+ const cors_1 = __importDefault(require("@fastify/cors"));
49
+ const helmet_1 = __importDefault(require("@fastify/helmet"));
50
+ const compress_1 = __importDefault(require("@fastify/compress"));
51
+ const rate_limit_1 = __importDefault(require("@fastify/rate-limit"));
52
+ const server_1 = require("@apollo/server");
53
+ const fastify_2 = __importStar(require("@as-integrations/fastify"));
54
+ const context_1 = require("./apollo/context");
55
+ const resolvers_1 = __importDefault(require("./apollo/resolvers"));
56
+ const type_defs_1 = __importDefault(require("./apollo/type-defs"));
57
+ function attachApollo(fastify) {
58
+ return __awaiter(this, void 0, void 0, function* () {
59
+ log.info('Attach ApolloServer to Fastify');
60
+ const apollo = new server_1.ApolloServer({
61
+ typeDefs: type_defs_1.default,
62
+ resolvers: resolvers_1.default,
63
+ plugins: [(0, fastify_2.fastifyApolloDrainPlugin)(fastify)]
64
+ });
65
+ yield apollo.start();
66
+ return apollo;
67
+ });
68
+ }
69
+ function addApolloRouting(fastify, apollo) {
70
+ return __awaiter(this, void 0, void 0, function* () {
71
+ if (apollo) {
72
+ log.info('Add graphql routes');
73
+ yield fastify.register((0, fastify_2.default)(apollo), {
74
+ context: context_1.myContextFunction
75
+ });
76
+ }
77
+ });
78
+ }
79
+ function addFastifyRouting(fastify) {
80
+ return __awaiter(this, void 0, void 0, function* () {
81
+ log.info('Add fastify routes');
82
+ fastify.addHook('onSend', (req, reply) => __awaiter(this, void 0, void 0, function* () {
83
+ log.debug('onSend');
84
+ }));
85
+ fastify.addHook('onResponse', (req, reply) => __awaiter(this, void 0, void 0, function* () {
86
+ log.debug('onResponse');
87
+ }));
88
+ fastify.addHook('onTimeout', (req, reply) => __awaiter(this, void 0, void 0, function* () {
89
+ log.debug('onTimeout');
90
+ }));
91
+ fastify.addHook('onReady', () => __awaiter(this, void 0, void 0, function* () {
92
+ log.debug('onReady');
93
+ }));
94
+ fastify.addHook('onClose', (instance) => __awaiter(this, void 0, void 0, function* () {
95
+ log.debug('onClose');
96
+ }));
97
+ fastify.addHook('onError', (req, reply, error) => __awaiter(this, void 0, void 0, function* () {
98
+ log.debug(`onError ${error}`);
99
+ }));
100
+ fastify.addHook('onRequest', (req, reply) => __awaiter(this, void 0, void 0, function* () {
101
+ log.debug(`onRequest ${req.method} ${req.url}`);
102
+ req.user = {
103
+ id: 306,
104
+ name: 'Huseyin',
105
+ roles: ['admin', 'public']
106
+ };
107
+ }));
108
+ fastify.addHook('preParsing', (req) => __awaiter(this, void 0, void 0, function* () {
109
+ log.debug(`preParsing ${req.method} ${req.url}`);
110
+ req.user = {
111
+ id: 42,
112
+ name: 'Jane Doe',
113
+ roles: ['admin', 'public']
114
+ };
115
+ }));
116
+ const routes = loaderRouter.load();
117
+ routes && loaderRouter.apply(fastify, routes);
118
+ });
119
+ }
120
+ function addFastifySwagger(fastify) {
121
+ return __awaiter(this, void 0, void 0, function* () {
122
+ const { NODE_ENV, SWAGGER, SWAGGER_TITLE, SWAGGER_DESCRIPTION, SWAGGER_VERSION } = process.env;
123
+ const loadSwagger = (0, yn_1.default)(SWAGGER, false);
124
+ if (loadSwagger && NODE_ENV !== 'production') {
125
+ log.info('Add swagger plugin');
126
+ yield fastify.register(swagger_1.default, {
127
+ swagger: {
128
+ info: {
129
+ title: SWAGGER_TITLE || 'API Documentation',
130
+ description: SWAGGER_DESCRIPTION || 'List of available APIs and schemes to use',
131
+ version: SWAGGER_VERSION || '0.1.0'
132
+ },
133
+ consumes: ['application/json'],
134
+ produces: ['application/json']
135
+ }
136
+ });
137
+ yield fastify.register(swagger_ui_1.default, {
138
+ routePrefix: '/documentation',
139
+ uiConfig: {
140
+ docExpansion: 'list',
141
+ deepLinking: true,
142
+ defaultModelsExpandDepth: 1
143
+ },
144
+ uiHooks: {
145
+ onRequest: function (request, reply, next) {
146
+ next();
147
+ },
148
+ preHandler: function (request, reply, next) {
149
+ next();
150
+ }
151
+ },
152
+ staticCSP: true,
153
+ transformStaticCSP: (header) => header
154
+ });
155
+ yield fastify.put('/some-route/:id', {
156
+ schema: {
157
+ description: 'post some data',
158
+ tags: ['user', 'code'],
159
+ deprecated: true,
160
+ summary: 'qwerty',
161
+ params: {
162
+ type: 'object',
163
+ properties: {
164
+ id: {
165
+ type: 'string',
166
+ description: 'user id'
167
+ }
168
+ }
169
+ },
170
+ body: {
171
+ type: 'object',
172
+ properties: {
173
+ hello: { type: 'string' },
174
+ obj: {
175
+ type: 'object',
176
+ properties: {
177
+ some: { type: 'string' }
178
+ }
179
+ }
180
+ }
181
+ },
182
+ response: {
183
+ 201: {
184
+ description: 'Successful response',
185
+ type: 'object',
186
+ properties: {
187
+ hello: { type: 'string' }
188
+ }
189
+ },
190
+ default: {
191
+ description: 'Default response',
192
+ type: 'object',
193
+ properties: {
194
+ foo: { type: 'string' }
195
+ }
196
+ }
197
+ }
198
+ }
199
+ }, (req, reply) => { });
200
+ }
201
+ });
202
+ }
203
+ const start = () => __awaiter(void 0, void 0, void 0, function* () {
204
+ const begin = new Date().getTime();
205
+ mark.print(logger_1.default);
206
+ global.log = logger_1.default;
207
+ global.roles = loaderRoles.load();
208
+ const opts = (0, yn_1.default)(process.env.LOG_FASTIFY, false) ? { logger: logger_1.default } : {};
209
+ const fastify = yield (0, fastify_1.default)(opts);
210
+ const { HOST: host = '0.0.0.0', PORT: port = '2230', GRAPHQL } = process.env;
211
+ const { SRV_CORS, SRV_HELMET, SRV_RATELIMIT, SRV_COMPRESS } = process.env;
212
+ const loadApollo = (0, yn_1.default)(GRAPHQL, true);
213
+ const addPluginCors = (0, yn_1.default)(SRV_CORS, true);
214
+ const addPluginHelmet = (0, yn_1.default)(SRV_HELMET, true);
215
+ const addPluginRateLimit = (0, yn_1.default)(SRV_RATELIMIT, true);
216
+ const addPluginCompress = (0, yn_1.default)(SRV_COMPRESS, true);
217
+ log.t && log.trace(`Attach Apollo Server ${loadApollo}`);
218
+ log.t && log.trace(`Add plugin CORS: ${addPluginCors}`);
219
+ log.t && log.trace(`Add plugin HELMET: ${!loadApollo ? addPluginHelmet : 'Not usable with Apollo'}`);
220
+ log.t && log.trace(`Add plugin COMPRESS: ${addPluginCompress}`);
221
+ log.t && log.trace(`Add plugin RATELIMIT: ${addPluginRateLimit}`);
222
+ const apollo = loadApollo ? yield attachApollo(fastify) : null;
223
+ !loadApollo && addPluginHelmet && (yield fastify.register(helmet_1.default));
224
+ addPluginRateLimit && (yield fastify.register(rate_limit_1.default));
225
+ addPluginCors && (yield fastify.register(cors_1.default));
226
+ addPluginCompress && (yield fastify.register(compress_1.default));
227
+ yield addFastifySwagger(fastify);
228
+ yield addApolloRouting(fastify, apollo);
229
+ yield addFastifyRouting(fastify);
230
+ yield fastify
231
+ .listen({
232
+ port: Number(port),
233
+ host: host
234
+ })
235
+ .then((address) => {
236
+ const elapsed = (new Date().getTime() - begin) / 100;
237
+ log.info(`All stuff loaded in ${elapsed} sec`);
238
+ log.info(`🚀 Server ready at ${address}`);
239
+ });
240
+ return fastify;
241
+ });
242
+ module.exports = start;
243
+ module.exports.server = start;
244
+ module.exports.default = start;
245
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../lib/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.load = void 0;
4
+ const roles_1 = require("../config/roles");
5
+ function load() {
6
+ const roles = {};
7
+ roles_1.roles.forEach((role) => {
8
+ roles[role.code] = role;
9
+ });
10
+ return Object.assign({}, roles);
11
+ }
12
+ exports.load = load;
13
+ //# sourceMappingURL=roles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"roles.js","sourceRoot":"","sources":["../../lib/loader/roles.ts"],"names":[],"mappings":";;;AACA,2CAAsD;AAEtD,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,OAAO,kBAAK,KAAK,CAAW,CAAA;AAC9B,CAAC;AAVD,oBAUC"}