@manticore-labs/nest 0.0.31 → 0.0.33

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.
@@ -0,0 +1,35 @@
1
+ import { ObjectID, FindManyOptions } from "typeorm";
2
+ import { UserData } from "auth0";
3
+ import { ErrorServicioInterface } from '../principal.service';
4
+ export declare abstract class PrincipalAuth0Service {
5
+ private readonly AUTH0_CONFIG;
6
+ private readonly search_engine;
7
+ private readonly sort;
8
+ private readonly debug;
9
+ managementClient: any;
10
+ authenticationClient: any;
11
+ constructor(AUTH0_CONFIG: any, search_engine?: string, sort?: string, debug?: boolean);
12
+ findOne(id?: string | number | Date | ObjectID): Promise<UsuarioEntity | ErrorServicioInterface>;
13
+ create(registro: UsuarioEntity): Promise<UserData | ErrorServicioInterface>;
14
+ find(criterioBusqueda?: FindManyOptions<UsuarioEntity>): Promise<UsuarioEntity[] | ErrorServicioInterface>;
15
+ findBy(arregloCamposABuscar: string[], busqueda: string): Promise<{}>;
16
+ findOneByIdAndUpdate(id: string | number | Date | ObjectID, datosAActualizar: UsuarioEntity): Promise<UsuarioEntity | ErrorServicioInterface>;
17
+ sendEmailVerification(id: string): Promise<{
18
+ mensaje: string;
19
+ error?: number;
20
+ }>;
21
+ changePassword(email: string, connection?: string): Promise<{
22
+ mensaje: string;
23
+ error?: number;
24
+ }>;
25
+ delete(id?: string | number | ObjectID): import("../../../../../../../../../../../Users/adrianeguez/Documents/Gitlab/manticore-labs/npm/nest/manticore-labs-nest/node_modules/rxjs/internal/Observable").Observable<{}>;
26
+ createMany(nuevosRegistros: UsuarioEntity[]): Promise<any>;
27
+ }
28
+ export interface UsuarioEntity extends UserData {
29
+ user_metadata?: any;
30
+ connection?: any;
31
+ name?: string;
32
+ email?: string;
33
+ username?: string;
34
+ password?: string;
35
+ }
@@ -0,0 +1,392 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { Injectable } from "@nestjs/common";
8
+ import { AuthenticationClient } from "auth0";
9
+ import { from } from "rxjs";
10
+ const ManagementClient = require('auth0').ManagementClient;
11
+ let PrincipalAuth0Service = class PrincipalAuth0Service {
12
+ constructor(AUTH0_CONFIG, search_engine = 'v3', sort = 'created_at:-1', debug = true) {
13
+ this.AUTH0_CONFIG = AUTH0_CONFIG;
14
+ this.search_engine = search_engine;
15
+ this.sort = sort;
16
+ this.debug = debug;
17
+ this.managementClient = new ManagementClient({
18
+ domain: `${this.AUTH0_CONFIG.CUENTA}.auth0.com`,
19
+ clientId: `${this.AUTH0_CONFIG.CLIENT_ID}`,
20
+ clientSecret: `${this.AUTH0_CONFIG.SECRET}`,
21
+ scope: 'read:users update:users create:users read:user_idp_tokens'
22
+ });
23
+ this.authenticationClient = new AuthenticationClient({
24
+ domain: `${AUTH0_CONFIG.CUENTA}.auth0.com`,
25
+ clientId: `${AUTH0_CONFIG.CLIENT_ID}`
26
+ });
27
+ }
28
+ async findOne(id) {
29
+ if (id) {
30
+ return await new Promise((resolve) => {
31
+ const idUsuario = { id };
32
+ this.managementClient
33
+ .users
34
+ .get(idUsuario, (err, usuarioEncontrado) => {
35
+ if (err) {
36
+ if (this.debug) {
37
+ console.error('Error: ', err);
38
+ }
39
+ let error = 500;
40
+ let mensaje = 'Error buscando usuario';
41
+ if (err.statusCode === 404) {
42
+ error = err.statusCode;
43
+ mensaje = 'No existe usuario';
44
+ }
45
+ resolve({ error, mensaje });
46
+ }
47
+ else {
48
+ resolve(usuarioEncontrado);
49
+ }
50
+ });
51
+ });
52
+ }
53
+ else {
54
+ return await new Promise((res) => res({ mensaje: 'No envia id', error: 400 }));
55
+ }
56
+ }
57
+ async create(registro) {
58
+ return await new Promise((resolve) => {
59
+ this.managementClient
60
+ .users
61
+ .create(registro, function (err, nuevoRegistro) {
62
+ if (err) {
63
+ if (this.debug) {
64
+ console.error('Error: ', err);
65
+ }
66
+ let error = 500;
67
+ let mensaje = 'Error creando usuario';
68
+ if (err.statusCode === 409) {
69
+ error = err.statusCode;
70
+ mensaje = 'Ya existe ese usuario';
71
+ }
72
+ if (err.statusCode === 400) {
73
+ error = err.statusCode;
74
+ mensaje = 'Usuario inválido';
75
+ }
76
+ resolve({ error, mensaje });
77
+ }
78
+ else {
79
+ resolve(nuevoRegistro);
80
+ }
81
+ });
82
+ });
83
+ }
84
+ async find(criterioBusqueda) {
85
+ return await new Promise((resolve) => {
86
+ let params;
87
+ if (criterioBusqueda) {
88
+ if (this.debug) {
89
+ console.log('Hay criterio', criterioBusqueda);
90
+ }
91
+ const sort = obtenerPrimerOrder(criterioBusqueda.order);
92
+ params = {
93
+ per_page: criterioBusqueda.take ? criterioBusqueda.take : 30,
94
+ page: criterioBusqueda.skip ? criterioBusqueda.skip : 0,
95
+ search_engine: this.search_engine,
96
+ include_totals: true,
97
+ sort
98
+ };
99
+ if (criterioBusqueda.where) {
100
+ params.q = criterioBusqueda.where;
101
+ }
102
+ if (criterioBusqueda.select) {
103
+ params.fields = obtenerCamposSeparadosPorComa(criterioBusqueda.select);
104
+ }
105
+ }
106
+ else {
107
+ params = {
108
+ per_page: 30,
109
+ page: 0,
110
+ search_engine: this.search_engine,
111
+ include_totals: true,
112
+ sort: this.sort,
113
+ };
114
+ }
115
+ if (this.debug) {
116
+ console.log('Parametros: ', params);
117
+ }
118
+ this.managementClient
119
+ .users
120
+ .get(params, (err, usuarioEncontrado) => {
121
+ if (err) {
122
+ if (this.debug) {
123
+ console.error('Error: ', err);
124
+ }
125
+ let error = 500;
126
+ let mensaje = 'Error buscando usuarios';
127
+ if (err.statusCode === 404) {
128
+ error = err.statusCode;
129
+ mensaje = 'No existen usuarios';
130
+ }
131
+ resolve({ error, mensaje });
132
+ }
133
+ else {
134
+ resolve(usuarioEncontrado.users);
135
+ }
136
+ });
137
+ });
138
+ // }
139
+ }
140
+ async findBy(arregloCamposABuscar, busqueda) {
141
+ return new Promise((resolve) => {
142
+ let params = {
143
+ q: ''
144
+ };
145
+ let query = '';
146
+ arregloCamposABuscar
147
+ .forEach((campo) => {
148
+ if (query === '') {
149
+ query = `${campo}="${busqueda}"`;
150
+ }
151
+ else {
152
+ query = query + ` OR ${campo}="${busqueda}"`;
153
+ }
154
+ });
155
+ params.q = query;
156
+ if (this.debug) {
157
+ console.log('Parametros: ', params);
158
+ }
159
+ this.managementClient
160
+ .users
161
+ .get(params, (err, usuariosEncontrados) => {
162
+ if (err) {
163
+ if (this.debug) {
164
+ console.error('Error: ', err);
165
+ }
166
+ let error = 500;
167
+ let mensaje = 'Error buscando usuarios';
168
+ if (err.statusCode === 404) {
169
+ error = err.statusCode;
170
+ mensaje = 'No existen usuarios';
171
+ }
172
+ resolve({ error, mensaje });
173
+ }
174
+ else {
175
+ resolve(usuariosEncontrados);
176
+ }
177
+ });
178
+ });
179
+ }
180
+ async findOneByIdAndUpdate(id, datosAActualizar) {
181
+ const usuario = await this.findOne(id);
182
+ if (this.debug) {
183
+ console.log('Usuario encontrado: ', usuario);
184
+ }
185
+ return await new Promise((resolve) => {
186
+ if (usuario.error) {
187
+ if (this.debug) {
188
+ console.log('Error encontrando usuario: ', usuario);
189
+ }
190
+ resolve(usuario);
191
+ }
192
+ if (datosAActualizar.user_metadata) {
193
+ datosAActualizar.user_metadata = elaborarUserMetadataAActualizar(usuario.user_metadata, datosAActualizar.user_metadata);
194
+ }
195
+ this.managementClient
196
+ .users
197
+ .update({ id }, datosAActualizar, function (err, registroActualizado) {
198
+ if (err) {
199
+ if (this.debug) {
200
+ console.error('Error: ', err);
201
+ }
202
+ let error = 500;
203
+ let mensaje = 'Error actualizando usuario';
204
+ if (err.statusCode === 400) {
205
+ error = err.statusCode;
206
+ mensaje = 'Usuario inválido';
207
+ }
208
+ if (err.statusCode === 404) {
209
+ error = err.statusCode;
210
+ mensaje = 'Usuario no encontrado';
211
+ }
212
+ resolve({ error, mensaje });
213
+ }
214
+ else {
215
+ resolve(registroActualizado);
216
+ }
217
+ });
218
+ });
219
+ }
220
+ sendEmailVerification(id) {
221
+ return new Promise((resolve) => {
222
+ this.managementClient
223
+ .sendEmailVerification({
224
+ user_id: id
225
+ })
226
+ .then((r) => {
227
+ if (this.debug) {
228
+ console.error('Peticion: ', r);
229
+ }
230
+ resolve({ mensaje: 'Peticion enviada' });
231
+ })
232
+ .catch((err) => {
233
+ if (this.debug) {
234
+ console.error('Error: ', err);
235
+ }
236
+ resolve({ error: 500, mensaje: 'Error enviando peticion' });
237
+ });
238
+ });
239
+ }
240
+ changePassword(email, connection = 'Username-Password-Authentication') {
241
+ return new Promise((resolve) => {
242
+ this.authenticationClient
243
+ .requestChangePasswordEmail({
244
+ email,
245
+ connection
246
+ })
247
+ .then((r) => {
248
+ if (this.debug) {
249
+ console.error('Peticion: ', r);
250
+ }
251
+ resolve({ mensaje: 'Cambio de password realizado' });
252
+ })
253
+ .catch((err) => {
254
+ if (this.debug) {
255
+ console.error('Error: ', err);
256
+ }
257
+ resolve({ error: 500, mensaje: 'Error enviando peticion' });
258
+ });
259
+ });
260
+ }
261
+ delete(id) {
262
+ return from(new Promise((resolve) => {
263
+ this.managementClient
264
+ .users
265
+ .delete({ id: id }, (err) => {
266
+ if (err) {
267
+ if (this.debug) {
268
+ console.error('Error: ', err);
269
+ }
270
+ let error = 500;
271
+ let mensaje = 'Error borrando usuario';
272
+ if (err.statusCode === 400) {
273
+ error = err.statusCode;
274
+ mensaje = 'Usuario inválido';
275
+ }
276
+ if (err.statusCode === 404) {
277
+ error = err.statusCode;
278
+ mensaje = 'Usuario no encontrado';
279
+ }
280
+ resolve({ error, mensaje });
281
+ }
282
+ else {
283
+ resolve({ mensaje: `Registro con id: ${id} eliminado` });
284
+ }
285
+ });
286
+ }));
287
+ }
288
+ async createMany(nuevosRegistros) {
289
+ return new Promise((resolve) => {
290
+ let terminado = 0;
291
+ let numeroDeRegistros = 0;
292
+ const registrosCreados = [];
293
+ while (terminado < nuevosRegistros.length) {
294
+ const contadorAuxiliar = terminado;
295
+ const tiempoEnCrearse = 10000 * (terminado + 1);
296
+ setTimeout(() => {
297
+ this.create(nuevosRegistros[contadorAuxiliar])
298
+ .then((registroCreado) => {
299
+ if (this.debug) {
300
+ console.log('Registro creado', registroCreado);
301
+ console.log('nuevosRegistros.length', nuevosRegistros.length);
302
+ console.log('numeroDeRegistros', numeroDeRegistros);
303
+ }
304
+ if (registroCreado.error === 409 || registroCreado.error === 400) {
305
+ if (this.debug) {
306
+ console.log('Usuario ya existe o bad request', nuevosRegistros[contadorAuxiliar]);
307
+ }
308
+ this.find({ where: `username:${nuevosRegistros[contadorAuxiliar].username}` })
309
+ .then((usuario) => {
310
+ numeroDeRegistros++;
311
+ registrosCreados.push(usuario[0]);
312
+ if (numeroDeRegistros === nuevosRegistros.length) {
313
+ resolve(registrosCreados);
314
+ }
315
+ })
316
+ .catch((e) => {
317
+ numeroDeRegistros++;
318
+ registrosCreados.push(e);
319
+ if (numeroDeRegistros === nuevosRegistros.length) {
320
+ resolve(registrosCreados);
321
+ }
322
+ });
323
+ }
324
+ else {
325
+ numeroDeRegistros++;
326
+ registrosCreados.push(registroCreado);
327
+ if (numeroDeRegistros === nuevosRegistros.length) {
328
+ resolve(registrosCreados);
329
+ }
330
+ }
331
+ })
332
+ .catch((err) => {
333
+ if (this.debug) {
334
+ console.error('Error creando: ', err);
335
+ }
336
+ numeroDeRegistros++;
337
+ registrosCreados.push(err);
338
+ if (numeroDeRegistros === nuevosRegistros.length - 1) {
339
+ resolve(registrosCreados);
340
+ }
341
+ });
342
+ }, tiempoEnCrearse);
343
+ terminado++;
344
+ }
345
+ });
346
+ }
347
+ };
348
+ PrincipalAuth0Service = __decorate([
349
+ Injectable()
350
+ ], PrincipalAuth0Service);
351
+ export { PrincipalAuth0Service };
352
+ function obtenerPrimerOrder(order) {
353
+ if (order) {
354
+ const nombreCampo = Object.keys(order)[0];
355
+ return `${nombreCampo}:${order[nombreCampo] === 'ASC' ? 1 : -1}`;
356
+ }
357
+ else {
358
+ return undefined;
359
+ }
360
+ }
361
+ function obtenerCamposSeparadosPorComa(select) {
362
+ if (select) {
363
+ let campos = '';
364
+ select.forEach((nombreCampo) => {
365
+ if (campos === '') {
366
+ campos = nombreCampo;
367
+ }
368
+ else {
369
+ campos = `${campos},${nombreCampo}`;
370
+ }
371
+ });
372
+ return campos;
373
+ }
374
+ else {
375
+ return undefined;
376
+ }
377
+ }
378
+ function elaborarUserMetadataAActualizar(user_metadata, user_metadataAActualizar) {
379
+ let user_metadataClonado = {};
380
+ try {
381
+ user_metadataClonado = JSON.parse(JSON.stringify(user_metadata));
382
+ }
383
+ catch (e) {
384
+ }
385
+ Object
386
+ .keys(user_metadataAActualizar)
387
+ .forEach((nombrePropiedad) => {
388
+ user_metadataClonado[nombrePropiedad] = user_metadataAActualizar[nombrePropiedad];
389
+ });
390
+ return user_metadataClonado;
391
+ }
392
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aDAuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvYXV0aDAvYXV0aDAuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFMUMsT0FBTyxFQUFXLG9CQUFvQixFQUFDLE1BQU0sT0FBTyxDQUFDO0FBQ3JELE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFHMUIsTUFBTSxnQkFBZ0IsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsZ0JBQWdCLENBQUM7QUFHM0QsSUFBc0IscUJBQXFCLEdBQTNDO0lBSUksWUFBNkIsWUFBWSxFQUNaLGdCQUF3QixJQUFJLEVBQzVCLE9BQWUsZUFBZSxFQUM5QixRQUFpQixJQUFJO1FBSHJCLGlCQUFZLEdBQVosWUFBWSxDQUFBO1FBQ1osa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsU0FBSSxHQUFKLElBQUksQ0FBMEI7UUFDOUIsVUFBSyxHQUFMLEtBQUssQ0FBZ0I7UUFDOUMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksZ0JBQWdCLENBQUM7WUFDekMsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLFlBQVk7WUFDL0MsUUFBUSxFQUFFLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLEVBQUU7WUFDMUMsWUFBWSxFQUFFLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUU7WUFDM0MsS0FBSyxFQUFFLDJEQUEyRDtTQUNyRSxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxvQkFBb0IsQ0FBQztZQUNqRCxNQUFNLEVBQUUsR0FBRyxZQUFZLENBQUMsTUFBTSxZQUFZO1lBQzFDLFFBQVEsRUFBRSxHQUFHLFlBQVksQ0FBQyxTQUFTLEVBQUU7U0FDeEMsQ0FBQyxD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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@manticore-labs/nest",
3
- "version": "0.0.31",
3
+ "version": "0.0.33",
4
4
  "description": "Manticore labs nestjs classes",
5
5
  "main": "build/main/index.js",
6
6
  "typings": "build/main/index.d.ts",
@@ -57,6 +57,7 @@
57
57
  "@nestjs/typeorm": "^5.2.1",
58
58
  "@nestjs/websockets": "^5.3.7",
59
59
  "apollo-server-express": "^2.0.7",
60
+ "auth0": "^2.14.0",
60
61
  "class-transformer": "^0.1.9",
61
62
  "class-validator": "^0.9.1",
62
63
  "graphql": "^14.0.2",