@volcanicminds/backend 0.6.1 → 0.6.3

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 (108) hide show
  1. package/index.ts +6 -1
  2. package/lib/api/auth/controller/auth.ts +12 -1
  3. package/lib/config/general.ts +9 -0
  4. package/lib/hooks/onRequest.ts +1 -1
  5. package/lib/loader/general.ts +32 -0
  6. package/package.json +1 -1
  7. package/types/global.d.ts +9 -0
  8. package/dist/index.js +0 -327
  9. package/dist/index.js.map +0 -1
  10. package/dist/lib/api/auth/controller/auth.js +0 -328
  11. package/dist/lib/api/auth/controller/auth.js.map +0 -1
  12. package/dist/lib/api/auth/routes.js +0 -195
  13. package/dist/lib/api/auth/routes.js.map +0 -1
  14. package/dist/lib/api/health/controller/health.js +0 -8
  15. package/dist/lib/api/health/controller/health.js.map +0 -1
  16. package/dist/lib/api/health/routes.js +0 -26
  17. package/dist/lib/api/health/routes.js.map +0 -1
  18. package/dist/lib/api/token/controller/token.js +0 -116
  19. package/dist/lib/api/token/controller/token.js.map +0 -1
  20. package/dist/lib/api/token/routes.js +0 -152
  21. package/dist/lib/api/token/routes.js.map +0 -1
  22. package/dist/lib/api/tool/controller/tool.js +0 -25
  23. package/dist/lib/api/tool/controller/tool.js.map +0 -1
  24. package/dist/lib/api/tool/routes.js +0 -26
  25. package/dist/lib/api/tool/routes.js.map +0 -1
  26. package/dist/lib/api/users/controller/user.js +0 -14
  27. package/dist/lib/api/users/controller/user.js.map +0 -1
  28. package/dist/lib/api/users/routes.js +0 -65
  29. package/dist/lib/api/users/routes.js.map +0 -1
  30. package/dist/lib/apollo/context.js +0 -19
  31. package/dist/lib/apollo/context.js.map +0 -1
  32. package/dist/lib/apollo/resolvers.js +0 -9
  33. package/dist/lib/apollo/resolvers.js.map +0 -1
  34. package/dist/lib/apollo/type-defs.js +0 -9
  35. package/dist/lib/apollo/type-defs.js.map +0 -1
  36. package/dist/lib/config/plugins.js +0 -57
  37. package/dist/lib/config/plugins.js.map +0 -1
  38. package/dist/lib/config/roles.js +0 -19
  39. package/dist/lib/config/roles.js.map +0 -1
  40. package/dist/lib/config/tracking.js +0 -10
  41. package/dist/lib/config/tracking.js.map +0 -1
  42. package/dist/lib/hooks/onError.js +0 -15
  43. package/dist/lib/hooks/onError.js.map +0 -1
  44. package/dist/lib/hooks/onRequest.js +0 -71
  45. package/dist/lib/hooks/onRequest.js.map +0 -1
  46. package/dist/lib/hooks/onResponse.js +0 -25
  47. package/dist/lib/hooks/onResponse.js.map +0 -1
  48. package/dist/lib/hooks/preHandler.js +0 -39
  49. package/dist/lib/hooks/preHandler.js.map +0 -1
  50. package/dist/lib/hooks/preSerialization.js +0 -47
  51. package/dist/lib/hooks/preSerialization.js.map +0 -1
  52. package/dist/lib/loader/hooks.js +0 -46
  53. package/dist/lib/loader/hooks.js.map +0 -1
  54. package/dist/lib/loader/plugins.js +0 -24
  55. package/dist/lib/loader/plugins.js.map +0 -1
  56. package/dist/lib/loader/roles.js +0 -22
  57. package/dist/lib/loader/roles.js.map +0 -1
  58. package/dist/lib/loader/router.js +0 -173
  59. package/dist/lib/loader/router.js.map +0 -1
  60. package/dist/lib/loader/schemas.js +0 -34
  61. package/dist/lib/loader/schemas.js.map +0 -1
  62. package/dist/lib/loader/tracking.js +0 -70
  63. package/dist/lib/loader/tracking.js.map +0 -1
  64. package/dist/lib/loader/translation.js +0 -53
  65. package/dist/lib/loader/translation.js.map +0 -1
  66. package/dist/lib/locales/en.json +0 -12
  67. package/dist/lib/locales/it.json +0 -12
  68. package/dist/lib/middleware/dispatchForgotPasswordLink.js +0 -19
  69. package/dist/lib/middleware/dispatchForgotPasswordLink.js.map +0 -1
  70. package/dist/lib/middleware/isAdmin.js +0 -17
  71. package/dist/lib/middleware/isAdmin.js.map +0 -1
  72. package/dist/lib/middleware/isAuthenticated.js +0 -18
  73. package/dist/lib/middleware/isAuthenticated.js.map +0 -1
  74. package/dist/lib/middleware/postAuth.js +0 -19
  75. package/dist/lib/middleware/postAuth.js.map +0 -1
  76. package/dist/lib/middleware/preAuth.js +0 -17
  77. package/dist/lib/middleware/preAuth.js.map +0 -1
  78. package/dist/lib/middleware/preForgotPasswordHandler.js +0 -17
  79. package/dist/lib/middleware/preForgotPasswordHandler.js.map +0 -1
  80. package/dist/lib/schemas/auth.js +0 -101
  81. package/dist/lib/schemas/auth.js.map +0 -1
  82. package/dist/lib/schemas/common.js +0 -66
  83. package/dist/lib/schemas/common.js.map +0 -1
  84. package/dist/lib/schemas/token.js +0 -38
  85. package/dist/lib/schemas/token.js.map +0 -1
  86. package/dist/lib/util/common.js +0 -19
  87. package/dist/lib/util/common.js.map +0 -1
  88. package/dist/lib/util/errors.js +0 -19
  89. package/dist/lib/util/errors.js.map +0 -1
  90. package/dist/lib/util/generate.js +0 -10
  91. package/dist/lib/util/generate.js.map +0 -1
  92. package/dist/lib/util/logger.js +0 -52
  93. package/dist/lib/util/logger.js.map +0 -1
  94. package/dist/lib/util/mark.js +0 -25
  95. package/dist/lib/util/mark.js.map +0 -1
  96. package/dist/lib/util/path.js +0 -12
  97. package/dist/lib/util/path.js.map +0 -1
  98. package/dist/lib/util/regexp.js +0 -15
  99. package/dist/lib/util/regexp.js.map +0 -1
  100. package/dist/lib/util/tracker.js +0 -123
  101. package/dist/lib/util/tracker.js.map +0 -1
  102. package/dist/lib/util/yn.js +0 -17
  103. package/dist/lib/util/yn.js.map +0 -1
  104. package/dist/nodemon.json +0 -7
  105. package/dist/package.json +0 -101
  106. package/dist/server.js +0 -5
  107. package/dist/server.js.map +0 -1
  108. package/dist/tsconfig.json +0 -32
package/index.ts CHANGED
@@ -14,6 +14,7 @@ import * as loaderHooks from './lib/loader/hooks'
14
14
  import * as loaderSchemas from './lib/loader/schemas'
15
15
  import * as loaderTracking from './lib/loader/tracking'
16
16
  import * as loaderTranslation from './lib/loader/translation'
17
+ import * as loaderConfig from './lib/loader/general'
17
18
 
18
19
  import fastify, { FastifyInstance } from 'fastify'
19
20
  import jwtValidator from '@fastify/jwt'
@@ -132,7 +133,7 @@ async function addFastifySwagger(server: FastifyInstance) {
132
133
  theme: {
133
134
  title: SWAGGER_TITLE
134
135
  }
135
- })
136
+ } as any)
136
137
  }
137
138
  }
138
139
 
@@ -140,6 +141,7 @@ const start = async (decorators) => {
140
141
  const begin = new Date().getTime()
141
142
  mark.print(logger)
142
143
 
144
+ global.config = loaderConfig.load()
143
145
  global.roles = loaderRoles.load()
144
146
  global.t = loaderTranslation.load()
145
147
 
@@ -251,6 +253,9 @@ const start = async (decorators) => {
251
253
  },
252
254
  findQuery(data: any) {
253
255
  throw new Error('Not implemented. You need to define the specific decorator (manager).')
256
+ },
257
+ disableUserById(id: string) {
258
+ throw new Error('Not implemented. You need to define the specific decorator (manager).')
254
259
  }
255
260
  } as UserManagement,
256
261
  tokenManager: {
@@ -221,7 +221,7 @@ export async function login(req: FastifyRequest, reply: FastifyReply) {
221
221
  return reply.status(400).send(new Error('Password not valid'))
222
222
  }
223
223
 
224
- const user = await req.server['userManager'].retrieveUserByPassword(email, password)
224
+ let user = await req.server['userManager'].retrieveUserByPassword(email, password)
225
225
  const isValid = await req.server['userManager'].isValidUser(user)
226
226
  // const user = { confirmed: true, blocked: false, externalId: 123456, roles: [{ code: 'admin' }] }
227
227
  // const isValid = true
@@ -234,10 +234,21 @@ export async function login(req: FastifyRequest, reply: FastifyReply) {
234
234
  return reply.status(403).send(new Error('User email unconfirmed'))
235
235
  }
236
236
 
237
+ const isPasswordToBeChanged = req.server['userManager'].isPasswordToBeChanged(user)
238
+ if (isPasswordToBeChanged) {
239
+ return reply
240
+ .status(403)
241
+ .send({ statusCode: 403, code: 'PASSWORD_TO_BE_CHANGED', message: 'The password is expired' })
242
+ }
243
+
237
244
  if (user.blocked) {
238
245
  return reply.status(403).send(new Error('User blocked'))
239
246
  }
240
247
 
248
+ if (config.enable && config.options.reset_external_id_on_login) {
249
+ user = await req.server['userManager'].resetExternalId(user.getId())
250
+ }
251
+
241
252
  // https://www.iana.org/assignments/jwt/jwt.xhtml
242
253
  const token = await reply.jwtSign({ sub: user.externalId })
243
254
  const refreshToken = reply.server.jwt['refreshToken']
@@ -0,0 +1,9 @@
1
+ 'use strict'
2
+
3
+ module.exports = {
4
+ name: 'general',
5
+ enable: true,
6
+ options: {
7
+ reset_external_id_on_login: false
8
+ }
9
+ }
@@ -22,7 +22,7 @@ module.exports = async (req, reply) => {
22
22
  try {
23
23
  const tokenData = reply.server.jwt.verify(bearerToken)
24
24
  user = await req.server['userManager'].retrieveUserByExternalId(tokenData?.sub)
25
- if (!user) {
25
+ if (!user && req.server['tokenManager'].isImplemented()) {
26
26
  token = await req.server['tokenManager'].retrieveTokenByExternalId(tokenData?.sub)
27
27
  }
28
28
  if (!user && !token) {
@@ -0,0 +1,32 @@
1
+ import { GeneralConfig } from '../../types/global'
2
+ import { normalizePatterns } from '../util/path'
3
+ const glob = require('glob')
4
+
5
+ export function load() {
6
+ const generalConfig: GeneralConfig = {
7
+ name: 'general',
8
+ enable: true,
9
+ options: {
10
+ reset_external_id_on_login: false
11
+ }
12
+ }
13
+
14
+ const patterns = normalizePatterns(['..', 'config', 'general.{ts,js}'], ['src', 'config', 'general.{ts,js}'])
15
+ patterns.forEach((pattern) => {
16
+ log.t && log.trace('Looking for ' + pattern)
17
+ glob.sync(pattern).forEach((f: string) => {
18
+ const config: GeneralConfig = require(f)
19
+
20
+ if (config.name === generalConfig.name) {
21
+ generalConfig.enable = config.enable
22
+ generalConfig.options = {
23
+ ...generalConfig.options,
24
+ ...(config.options || {})
25
+ }
26
+ }
27
+ })
28
+ })
29
+
30
+ log.d && log.debug('General configuration loaded')
31
+ return generalConfig
32
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@volcanicminds/backend",
3
- "version": "0.6.1",
3
+ "version": "0.6.3",
4
4
  "codename": "turin",
5
5
  "license": "MIT",
6
6
  "description": "The volcanic (minds) backend",
package/types/global.d.ts CHANGED
@@ -50,6 +50,14 @@ export interface Route {
50
50
  middlewares: string[]
51
51
  }
52
52
 
53
+ export interface GeneralConfig {
54
+ name: string
55
+ enable: boolean
56
+ options: {
57
+ reset_external_id_on_login: boolean
58
+ }
59
+ }
60
+
53
61
  export interface ConfiguredRoute {
54
62
  enable: boolean
55
63
  method: any
@@ -174,6 +182,7 @@ export interface global {}
174
182
  declare global {
175
183
  var log: any
176
184
  var server: any
185
+ var config: GeneralConfig
177
186
  var roles: Roles
178
187
  var tracking: TrackChangesList
179
188
  var trackingConfig: Data
package/dist/index.js DELETED
@@ -1,327 +0,0 @@
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
- exports.TranslatedError = exports.start = exports.yn = void 0;
39
- const dotenv_1 = __importDefault(require("dotenv"));
40
- dotenv_1.default.config();
41
- const yn_1 = __importDefault(require("./lib/util/yn"));
42
- exports.yn = yn_1.default;
43
- const logger_1 = __importDefault(require("./lib/util/logger"));
44
- const mark = __importStar(require("./lib/util/mark"));
45
- const errors_1 = require("./lib/util/errors");
46
- Object.defineProperty(exports, "TranslatedError", { enumerable: true, get: function () { return errors_1.TranslatedError; } });
47
- const loaderPlugins = __importStar(require("./lib/loader/plugins"));
48
- const loaderRoles = __importStar(require("./lib/loader/roles"));
49
- const loaderRouter = __importStar(require("./lib/loader/router"));
50
- const loaderHooks = __importStar(require("./lib/loader/hooks"));
51
- const loaderSchemas = __importStar(require("./lib/loader/schemas"));
52
- const loaderTracking = __importStar(require("./lib/loader/tracking"));
53
- const loaderTranslation = __importStar(require("./lib/loader/translation"));
54
- const fastify_1 = __importDefault(require("fastify"));
55
- const jwt_1 = __importDefault(require("@fastify/jwt"));
56
- const swagger_1 = __importDefault(require("@fastify/swagger"));
57
- const swagger_ui_1 = __importDefault(require("@fastify/swagger-ui"));
58
- const cors_1 = __importDefault(require("@fastify/cors"));
59
- const helmet_1 = __importDefault(require("@fastify/helmet"));
60
- const compress_1 = __importDefault(require("@fastify/compress"));
61
- const rate_limit_1 = __importDefault(require("@fastify/rate-limit"));
62
- const server_1 = require("@apollo/server");
63
- const fastify_2 = __importStar(require("@as-integrations/fastify"));
64
- const context_1 = require("./lib/apollo/context");
65
- const resolvers_1 = __importDefault(require("./lib/apollo/resolvers"));
66
- const type_defs_1 = __importDefault(require("./lib/apollo/type-defs"));
67
- global.log = logger_1.default;
68
- function attachApollo(server) {
69
- return __awaiter(this, void 0, void 0, function* () {
70
- log.info('Attach ApolloServer to Fastify');
71
- const apollo = new server_1.ApolloServer({
72
- typeDefs: type_defs_1.default,
73
- resolvers: resolvers_1.default,
74
- plugins: [(0, fastify_2.fastifyApolloDrainPlugin)(server)]
75
- });
76
- yield apollo.start();
77
- return apollo;
78
- });
79
- }
80
- function addApolloRouting(server, apollo) {
81
- return __awaiter(this, void 0, void 0, function* () {
82
- if (apollo) {
83
- log.trace('Add graphql routes');
84
- yield server.register((0, fastify_2.default)(apollo), {
85
- context: context_1.myContextFunction
86
- });
87
- }
88
- });
89
- }
90
- function addFastifyRouting(server) {
91
- return __awaiter(this, void 0, void 0, function* () {
92
- log.trace('Add server routes');
93
- loaderHooks.apply(server);
94
- loaderSchemas.apply(server);
95
- const routes = loaderRouter.load();
96
- routes && loaderRouter.apply(server, routes);
97
- });
98
- }
99
- function addFastifySwagger(server) {
100
- return __awaiter(this, void 0, void 0, function* () {
101
- const { SWAGGER, SWAGGER_TITLE, SWAGGER_DESCRIPTION, SWAGGER_VERSION, SWAGGER_PREFIX_URL, SWAGGER_HOST } = process.env;
102
- const loadSwagger = (0, yn_1.default)(SWAGGER, false);
103
- if (loadSwagger) {
104
- log.trace('Add swagger plugin');
105
- const fs = require('fs');
106
- const contents = fs.readFileSync('logo-dark.png', { encoding: 'base64' });
107
- yield server.register(swagger_1.default, {
108
- swagger: {
109
- info: {
110
- title: SWAGGER_TITLE || 'Volcanic API Documentation',
111
- description: SWAGGER_DESCRIPTION || 'List of available APIs and schemes to use',
112
- version: SWAGGER_VERSION || '0.0.1'
113
- },
114
- host: SWAGGER_HOST || 'localhost:2230',
115
- schemes: ['https', 'http'],
116
- consumes: ['application/json'],
117
- produces: ['application/json']
118
- },
119
- openapi: {
120
- info: {
121
- title: SWAGGER_TITLE || 'Volcanic API Documentation',
122
- description: SWAGGER_DESCRIPTION || 'List of available APIs and schemes to use',
123
- version: SWAGGER_VERSION || '0.0.1'
124
- },
125
- servers: [
126
- {
127
- url: SWAGGER_HOST || 'http://localhost:2230'
128
- }
129
- ],
130
- components: {
131
- securitySchemes: {
132
- Bearer: {
133
- type: 'http',
134
- scheme: 'bearer'
135
- }
136
- }
137
- }
138
- }
139
- });
140
- yield server.register(swagger_ui_1.default, {
141
- routePrefix: SWAGGER_PREFIX_URL || '/documentation',
142
- uiConfig: {
143
- docExpansion: 'list',
144
- deepLinking: true,
145
- defaultModelsExpandDepth: 1
146
- },
147
- logo: {
148
- type: 'image/png',
149
- content: Buffer.from(contents, 'base64')
150
- },
151
- theme: {
152
- title: SWAGGER_TITLE
153
- }
154
- });
155
- }
156
- });
157
- }
158
- const start = (decorators) => __awaiter(void 0, void 0, void 0, function* () {
159
- const begin = new Date().getTime();
160
- mark.print(logger_1.default);
161
- global.roles = loaderRoles.load();
162
- global.t = loaderTranslation.load();
163
- const { tracking, trackingConfig } = loaderTracking.load();
164
- global.tracking = tracking;
165
- global.trackingConfig = trackingConfig;
166
- const opts = (0, yn_1.default)(process.env.LOG_FASTIFY, false) ? { logger: { development: logger_1.default } } : { logger: true };
167
- const server = (0, fastify_1.default)();
168
- const { HOST: host = '0.0.0.0', PORT: port = '2230', GRAPHQL } = process.env;
169
- const { JWT_SECRET = '', JWT_EXPIRES_IN = '15d', JWT_REFRESH = 'true', JWT_REFRESH_SECRET = '', JWT_REFRESH_EXPIRES_IN = '180d' } = process.env;
170
- const loadRefreshJWT = (0, yn_1.default)(JWT_REFRESH, true);
171
- const loadApollo = (0, yn_1.default)(GRAPHQL, false);
172
- const plugins = loaderPlugins.load();
173
- !loadApollo && (plugins === null || plugins === void 0 ? void 0 : plugins.helmet) && (yield server.register(helmet_1.default));
174
- (plugins === null || plugins === void 0 ? void 0 : plugins.rateLimit) && (yield server.register(rate_limit_1.default));
175
- (plugins === null || plugins === void 0 ? void 0 : plugins.cors) && (yield server.register(cors_1.default, plugins.cors || {}));
176
- (plugins === null || plugins === void 0 ? void 0 : plugins.compress) && (yield server.register(compress_1.default));
177
- log.t && log.trace(`Add JWT - expiresIn: ${JWT_EXPIRES_IN}`);
178
- yield server.register(jwt_1.default, {
179
- secret: JWT_SECRET,
180
- sign: { expiresIn: JWT_EXPIRES_IN }
181
- });
182
- if (loadRefreshJWT) {
183
- yield server.register(jwt_1.default, {
184
- namespace: 'refreshToken',
185
- secret: JWT_REFRESH_SECRET || JWT_SECRET,
186
- sign: { expiresIn: JWT_REFRESH_EXPIRES_IN }
187
- });
188
- }
189
- const apollo = loadApollo ? yield attachApollo(server) : null;
190
- yield addFastifySwagger(server);
191
- yield addApolloRouting(server, apollo);
192
- yield addFastifyRouting(server);
193
- decorators = Object.assign({ userManager: {
194
- isImplemented() {
195
- return false;
196
- },
197
- isValidUser(data) {
198
- throw new Error('Not implemented. You need to define the specific decorator (manager).');
199
- },
200
- createUser(data) {
201
- throw new Error('Not implemented. You need to define the specific decorator (manager).');
202
- },
203
- resetExternalId(data) {
204
- throw new Error('Not implemented. You need to define the specific decorator (manager).');
205
- },
206
- updateUserById(id, user) {
207
- throw new Error('Not implemented. You need to define the specific decorator (manager).');
208
- },
209
- retrieveUserById(id) {
210
- throw new Error('Not implemented. You need to define the specific decorator (manager).');
211
- },
212
- retrieveUserByEmail(email) {
213
- throw new Error('Not implemented. You need to define the specific decorator (manager).');
214
- },
215
- retrieveUserByConfirmationToken(code) {
216
- throw new Error('Not implemented. You need to define the specific decorator (manager).');
217
- },
218
- retrieveUserByResetPasswordToken(code) {
219
- throw new Error('Not implemented. You need to define the specific decorator (manager).');
220
- },
221
- retrieveUserByUsername(username) {
222
- throw new Error('Not implemented. You need to define the specific decorator (manager).');
223
- },
224
- retrieveUserByExternalId(externalId) {
225
- throw new Error('Not implemented. You need to define the specific decorator (manager).');
226
- },
227
- retrieveUserByPassword(email, password) {
228
- throw new Error('Not implemented. You need to define the specific decorator (manager).');
229
- },
230
- changePassword(email, password, oldPassword) {
231
- throw new Error('Not implemented. You need to define the specific decorator (manager).');
232
- },
233
- forgotPassword(email) {
234
- throw new Error('Not implemented. You need to define the specific decorator (manager).');
235
- },
236
- userConfirmation(user) {
237
- throw new Error('Not implemented. You need to define the specific decorator (manager).');
238
- },
239
- resetPassword(user, password) {
240
- throw new Error('Not implemented. You need to define the specific decorator (manager).');
241
- },
242
- blockUserById(id, reason) {
243
- throw new Error('Not implemented. You need to define the specific decorator (manager).');
244
- },
245
- unblockUserById(data) {
246
- throw new Error('Not implemented. You need to define the specific decorator (manager).');
247
- },
248
- countQuery(data) {
249
- throw new Error('Not implemented. You need to define the specific decorator (manager).');
250
- },
251
- findQuery(data) {
252
- throw new Error('Not implemented. You need to define the specific decorator (manager).');
253
- }
254
- }, tokenManager: {
255
- isImplemented() {
256
- return false;
257
- },
258
- isValidToken(data) {
259
- throw new Error('Not implemented. You need to define the specific decorator (manager).');
260
- },
261
- createToken(data) {
262
- throw new Error('Not implemented. You need to define the specific decorator (manager).');
263
- },
264
- resetExternalId(id) {
265
- throw new Error('Not implemented. You need to define the specific decorator (manager).');
266
- },
267
- updateTokenById(id, token) {
268
- throw new Error('Not implemented. You need to define the specific decorator (manager).');
269
- },
270
- retrieveTokenById(id) {
271
- throw new Error('Not implemented. You need to define the specific decorator (manager).');
272
- },
273
- retrieveTokenByExternalId(id) {
274
- throw new Error('Not implemented. You need to define the specific decorator (manager).');
275
- },
276
- blockTokenById(id, reason) {
277
- throw new Error('Not implemented. You need to define the specific decorator (manager).');
278
- },
279
- unblockTokenById(id) {
280
- throw new Error('Not implemented. You need to define the specific decorator (manager).');
281
- },
282
- countQuery(data) {
283
- throw new Error('Not implemented. You need to define the specific decorator (manager).');
284
- },
285
- findQuery(data) {
286
- throw new Error('Not implemented. You need to define the specific decorator (manager).');
287
- },
288
- removeTokenById(id) {
289
- throw new Error('Not implemented. You need to define the specific decorator (manager).');
290
- }
291
- }, dataBaseManager: {
292
- isImplemented() {
293
- return false;
294
- },
295
- synchronizeSchemas() {
296
- throw new Error('Not implemented. You need to define the specific decorator (manager).');
297
- },
298
- retrieveBy(entityName, entityId) {
299
- throw new Error('Not implemented. You need to define the specific decorator (manager).');
300
- },
301
- addChange(entityName, entityId, status, userId, contents, changeEntity) {
302
- throw new Error('Not implemented. You need to define the specific decorator (manager).');
303
- }
304
- } }, decorators);
305
- yield Promise.all(Object.keys(decorators || {}).map((key) => __awaiter(void 0, void 0, void 0, function* () {
306
- yield server.decorate(key, decorators[key]);
307
- })));
308
- yield server
309
- .listen({
310
- port: Number(port),
311
- host: host
312
- })
313
- .then((address) => {
314
- const elapsed = (new Date().getTime() - begin) / 100;
315
- log.info(`All stuff loaded in ${elapsed} sec`);
316
- log.info(`Server ready 🚀 at ${address}`);
317
- const loadSwagger = (0, yn_1.default)(process.env.SWAGGER, false);
318
- loadSwagger && log.info(`Swagger ready ✨ at ${address}${process.env.SWAGGER_PREFIX_URL || '/documentation'}`);
319
- });
320
- global.server = server;
321
- return server;
322
- });
323
- exports.start = start;
324
- module.exports = { yn: yn_1.default, start, TranslatedError: errors_1.TranslatedError };
325
- module.exports.server = { yn: yn_1.default, start, TranslatedError: errors_1.TranslatedError };
326
- module.exports.default = { yn: yn_1.default, start, TranslatedError: errors_1.TranslatedError };
327
- //# sourceMappingURL=index.js.map
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}