@manticore-labs/nest 0.0.71 → 0.0.73

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 (236) hide show
  1. package/.circleci/config.yml +47 -47
  2. package/.idea/codeStyles/Project.xml +37 -37
  3. package/.idea/codeStyles/codeStyleConfig.xml +4 -4
  4. package/.idea/encodings.xml +3 -3
  5. package/.idea/inspectionProfiles/Project_Default.xml +5 -5
  6. package/.idea/manticore-labs-nest.iml +11 -11
  7. package/.idea/misc.xml +5 -5
  8. package/.idea/modules.xml +7 -7
  9. package/.idea/vcs.xml +5 -5
  10. package/.idea/workspace.xml +77 -399
  11. package/LICENSE +8 -8
  12. package/README.1.md +116 -116
  13. package/README.md +1 -1
  14. package/build/main/index.d.ts +42 -42
  15. package/build/main/index.js +25 -25
  16. package/build/main/lib/auth0/actualizar-usuario-cuenta-dto/actualizar-usuario-cuenta-dto.d.ts +5 -5
  17. package/build/main/lib/auth0/actualizar-usuario-cuenta-dto/actualizar-usuario-cuenta-dto.js +24 -24
  18. package/build/main/lib/auth0/actualizar-usuario-dto/actualizar-usuario-dto.d.ts +5 -5
  19. package/build/main/lib/auth0/actualizar-usuario-dto/actualizar-usuario-dto.js +24 -24
  20. package/build/main/lib/auth0/auth0.controller.d.ts +40 -40
  21. package/build/main/lib/auth0/auth0.controller.js +537 -537
  22. package/build/main/lib/auth0/auth0.service.d.ts +69 -69
  23. package/build/main/lib/auth0/auth0.service.js +604 -604
  24. package/build/main/lib/auth0/crear-usuario-dto/crear-usuario-dto.d.ts +5 -5
  25. package/build/main/lib/auth0/crear-usuario-dto/crear-usuario-dto.js +25 -25
  26. package/build/main/lib/auth0/interfaces/busqueda-nombre.d.ts +3 -3
  27. package/build/main/lib/auth0/interfaces/busqueda-nombre.js +2 -2
  28. package/build/main/lib/auth0/interfaces/funciones-seguridad.d.ts +10 -10
  29. package/build/main/lib/auth0/interfaces/funciones-seguridad.js +2 -2
  30. package/build/main/lib/auth0/interfaces/mensajes-controlador.d.ts +5 -5
  31. package/build/main/lib/auth0/interfaces/mensajes-controlador.js +2 -2
  32. package/build/main/lib/auth0/seguridad-jwt-moviles/check-jwt.d.ts +2 -2
  33. package/build/main/lib/auth0/seguridad-jwt-moviles/check-jwt.js +7 -7
  34. package/build/main/lib/expresiones-regulares/letras-espacios-tildes-enie.d.ts +1 -1
  35. package/build/main/lib/expresiones-regulares/letras-espacios-tildes-enie.js +3 -3
  36. package/build/main/lib/funciones-util/buscar-registro.d.ts +1 -1
  37. package/build/main/lib/funciones-util/buscar-registro.js +492 -351
  38. package/build/main/lib/funciones-util/buscar-un-registro-por-id.d.ts +1 -1
  39. package/build/main/lib/funciones-util/buscar-un-registro-por-id.js +25 -25
  40. package/build/main/lib/funciones-util/buscar-where-or.d.ts +1 -1
  41. package/build/main/lib/funciones-util/buscar-where-or.js +33 -33
  42. package/build/main/lib/funciones-util/contar-registros.d.ts +1 -1
  43. package/build/main/lib/funciones-util/contar-registros.js +41 -41
  44. package/build/main/lib/funciones-util/crear-un-registro.d.ts +1 -1
  45. package/build/main/lib/funciones-util/crear-un-registro.js +24 -24
  46. package/build/main/lib/funciones-util/editar-un-registro.d.ts +1 -1
  47. package/build/main/lib/funciones-util/editar-un-registro.js +24 -24
  48. package/build/main/lib/funciones-util/eliminar-uno.d.ts +1 -1
  49. package/build/main/lib/funciones-util/eliminar-uno.js +35 -35
  50. package/build/main/lib/funciones-util/typeorm/valor-esta-dentro-del-arreglo.d.ts +2 -2
  51. package/build/main/lib/funciones-util/typeorm/valor-esta-dentro-del-arreglo.js +21 -21
  52. package/build/main/lib/interfaces-util/arreglo-funciones-booleanas.d.ts +4 -4
  53. package/build/main/lib/interfaces-util/arreglo-funciones-booleanas.js +2 -2
  54. package/build/main/lib/interfaces-util/broadcast-join.gateway.d.ts +14 -14
  55. package/build/main/lib/interfaces-util/broadcast-join.gateway.js +2 -2
  56. package/build/main/lib/interfaces-util/campos-a-buscar.d.ts +9 -9
  57. package/build/main/lib/interfaces-util/campos-a-buscar.js +9 -9
  58. package/build/main/lib/interfaces-util/delete-service.d.ts +12 -12
  59. package/build/main/lib/interfaces-util/delete-service.js +2 -2
  60. package/build/main/lib/interfaces-util/dto.d.ts +4 -4
  61. package/build/main/lib/interfaces-util/dto.js +2 -2
  62. package/build/main/lib/interfaces-util/find-where-relations.d.ts +9 -9
  63. package/build/main/lib/interfaces-util/find-where-relations.js +2 -2
  64. package/build/main/lib/interfaces-util/funciones-seguridad.d.ts +13 -13
  65. package/build/main/lib/interfaces-util/funciones-seguridad.js +2 -2
  66. package/build/main/lib/interfaces-util/funciones.gateway.d.ts +5 -5
  67. package/build/main/lib/interfaces-util/funciones.gateway.js +2 -2
  68. package/build/main/lib/interfaces-util/mensajes-controller.d.ts +6 -6
  69. package/build/main/lib/interfaces-util/mensajes-controller.js +2 -2
  70. package/build/main/lib/interfaces-util/politicas-de-seguridad.d.ts +17 -17
  71. package/build/main/lib/interfaces-util/politicas-de-seguridad.js +2 -2
  72. package/build/main/lib/interfaces-util/respuesta-general.gateway.d.ts +5 -5
  73. package/build/main/lib/interfaces-util/respuesta-general.gateway.js +2 -2
  74. package/build/main/lib/menu/entities/menu-entity.d.ts +13 -13
  75. package/build/main/lib/menu/entities/menu-entity.js +93 -93
  76. package/build/main/lib/one-signal/interfaces/funciones-seguridad.d.ts +9 -9
  77. package/build/main/lib/one-signal/interfaces/funciones-seguridad.js +2 -2
  78. package/build/main/lib/one-signal/interfaces/one-signal-device.d.ts +19 -19
  79. package/build/main/lib/one-signal/interfaces/one-signal-device.js +2 -2
  80. package/build/main/lib/one-signal/interfaces/one-signal-notification.d.ts +15 -15
  81. package/build/main/lib/one-signal/interfaces/one-signal-notification.js +2 -2
  82. package/build/main/lib/one-signal/interfaces/one-signal-notifications.d.ts +7 -7
  83. package/build/main/lib/one-signal/interfaces/one-signal-notifications.js +2 -2
  84. package/build/main/lib/one-signal/interfaces/one-signal-ok-create-notification-no-players.d.ts +5 -5
  85. package/build/main/lib/one-signal/interfaces/one-signal-ok-create-notification-no-players.js +2 -2
  86. package/build/main/lib/one-signal/interfaces/one-signal-ok-create-notification.d.ts +4 -4
  87. package/build/main/lib/one-signal/interfaces/one-signal-ok-create-notification.js +2 -2
  88. package/build/main/lib/one-signal/interfaces/one-signal-success.d.ts +3 -3
  89. package/build/main/lib/one-signal/interfaces/one-signal-success.js +2 -2
  90. package/build/main/lib/one-signal/interfaces/one-signal-tags.d.ts +3 -3
  91. package/build/main/lib/one-signal/interfaces/one-signal-tags.js +2 -2
  92. package/build/main/lib/one-signal/interfaces/one-signal-view-devices.d.ts +7 -7
  93. package/build/main/lib/one-signal/interfaces/one-signal-view-devices.js +2 -2
  94. package/build/main/lib/one-signal/one-signal.controller.d.ts +15 -15
  95. package/build/main/lib/one-signal/one-signal.controller.js +250 -250
  96. package/build/main/lib/one-signal/one-signal.service.d.ts +32 -32
  97. package/build/main/lib/one-signal/one-signal.service.js +84 -84
  98. package/build/main/lib/politicas/revisar-si-tiene-nombre-permiso.d.ts +1 -1
  99. package/build/main/lib/politicas/revisar-si-tiene-nombre-permiso.js +9 -9
  100. package/build/main/lib/politicas/revisar-si-tiene-rol.d.ts +1 -1
  101. package/build/main/lib/politicas/revisar-si-tiene-rol.js +9 -9
  102. package/build/main/lib/principal.controller.d.ts +20 -20
  103. package/build/main/lib/principal.controller.js +309 -309
  104. package/build/main/lib/principal.dto.d.ts +5 -5
  105. package/build/main/lib/principal.dto.js +21 -21
  106. package/build/main/lib/principal.entity.d.ts +7 -7
  107. package/build/main/lib/principal.entity.js +42 -42
  108. package/build/main/lib/principal.find-many-options.d.ts +14 -14
  109. package/build/main/lib/principal.find-many-options.js +48 -48
  110. package/build/main/lib/principal.find-many-where-or.d.ts +10 -10
  111. package/build/main/lib/principal.find-many-where-or.js +28 -28
  112. package/build/main/lib/principal.gateway.d.ts +35 -35
  113. package/build/main/lib/principal.gateway.js +399 -399
  114. package/build/main/lib/principal.id.d.ts +3 -3
  115. package/build/main/lib/principal.id.js +16 -16
  116. package/build/main/lib/principal.resolver.d.ts +21 -21
  117. package/build/main/lib/principal.resolver.js +343 -343
  118. package/build/main/lib/principal.service.d.ts +38 -38
  119. package/build/main/lib/principal.service.js +261 -256
  120. package/build/main/lib/seguridad/aplicar-politicas-de-seguridad.d.ts +4 -4
  121. package/build/main/lib/seguridad/aplicar-politicas-de-seguridad.js +16 -16
  122. package/build/main/lib/seguridad/funciones/convertir-arreglo-en-arreglo-de-observables.d.ts +3 -3
  123. package/build/main/lib/seguridad/funciones/convertir-arreglo-en-arreglo-de-observables.js +30 -30
  124. package/build/main/lib/seguridad/funciones/index.d.ts +6 -6
  125. package/build/main/lib/seguridad/funciones/index.js +12 -12
  126. package/build/main/lib/seguridad/funciones/obtener-reflector-seguridad.d.ts +1 -1
  127. package/build/main/lib/seguridad/funciones/obtener-reflector-seguridad.js +6 -6
  128. package/build/main/lib/seguridad/funciones/obtener-request.d.ts +1 -1
  129. package/build/main/lib/seguridad/funciones/obtener-request.js +6 -6
  130. package/build/main/lib/seguridad/funciones/obtener-response.d.ts +1 -1
  131. package/build/main/lib/seguridad/funciones/obtener-response.js +6 -6
  132. package/build/main/lib/seguridad/funciones/tiene-acceso-permitido.d.ts +2 -2
  133. package/build/main/lib/seguridad/funciones/tiene-acceso-permitido.js +13 -13
  134. package/build/main/lib/seguridad/seguridad.decorator.d.ts +1 -1
  135. package/build/main/lib/seguridad/seguridad.decorator.js +4 -4
  136. package/build/module/index.d.ts +42 -42
  137. package/build/module/index.js +20 -20
  138. package/build/module/lib/auth0/actualizar-usuario-cuenta-dto/actualizar-usuario-cuenta-dto.d.ts +5 -5
  139. package/build/module/lib/auth0/actualizar-usuario-cuenta-dto/actualizar-usuario-cuenta-dto.js +21 -21
  140. package/build/module/lib/auth0/actualizar-usuario-dto/actualizar-usuario-dto.d.ts +5 -5
  141. package/build/module/lib/auth0/actualizar-usuario-dto/actualizar-usuario-dto.js +21 -21
  142. package/build/module/lib/auth0/auth0.controller.d.ts +40 -40
  143. package/build/module/lib/auth0/auth0.controller.js +535 -535
  144. package/build/module/lib/auth0/auth0.service.d.ts +69 -69
  145. package/build/module/lib/auth0/auth0.service.js +603 -603
  146. package/build/module/lib/auth0/crear-usuario-dto/crear-usuario-dto.d.ts +5 -5
  147. package/build/module/lib/auth0/crear-usuario-dto/crear-usuario-dto.js +22 -22
  148. package/build/module/lib/auth0/interfaces/busqueda-nombre.d.ts +3 -3
  149. package/build/module/lib/auth0/interfaces/funciones-seguridad.d.ts +10 -10
  150. package/build/module/lib/auth0/interfaces/mensajes-controlador.d.ts +5 -5
  151. package/build/module/lib/auth0/seguridad-jwt-moviles/check-jwt.d.ts +2 -2
  152. package/build/module/lib/auth0/seguridad-jwt-moviles/check-jwt.js +4 -4
  153. package/build/module/lib/expresiones-regulares/letras-espacios-tildes-enie.d.ts +1 -1
  154. package/build/module/lib/expresiones-regulares/letras-espacios-tildes-enie.js +1 -1
  155. package/build/module/lib/funciones-util/buscar-registro.d.ts +1 -1
  156. package/build/module/lib/funciones-util/buscar-registro.js +489 -348
  157. package/build/module/lib/funciones-util/buscar-un-registro-por-id.d.ts +1 -1
  158. package/build/module/lib/funciones-util/buscar-un-registro-por-id.js +22 -22
  159. package/build/module/lib/funciones-util/buscar-where-or.d.ts +1 -1
  160. package/build/module/lib/funciones-util/buscar-where-or.js +30 -30
  161. package/build/module/lib/funciones-util/contar-registros.d.ts +1 -1
  162. package/build/module/lib/funciones-util/contar-registros.js +38 -38
  163. package/build/module/lib/funciones-util/crear-un-registro.d.ts +1 -1
  164. package/build/module/lib/funciones-util/crear-un-registro.js +21 -21
  165. package/build/module/lib/funciones-util/editar-un-registro.d.ts +1 -1
  166. package/build/module/lib/funciones-util/editar-un-registro.js +21 -21
  167. package/build/module/lib/funciones-util/eliminar-uno.d.ts +1 -1
  168. package/build/module/lib/funciones-util/eliminar-uno.js +32 -32
  169. package/build/module/lib/funciones-util/typeorm/valor-esta-dentro-del-arreglo.d.ts +2 -2
  170. package/build/module/lib/funciones-util/typeorm/valor-esta-dentro-del-arreglo.js +18 -18
  171. package/build/module/lib/interfaces-util/arreglo-funciones-booleanas.d.ts +4 -4
  172. package/build/module/lib/interfaces-util/broadcast-join.gateway.d.ts +14 -14
  173. package/build/module/lib/interfaces-util/campos-a-buscar.d.ts +9 -9
  174. package/build/module/lib/interfaces-util/campos-a-buscar.js +6 -6
  175. package/build/module/lib/interfaces-util/delete-service.d.ts +12 -12
  176. package/build/module/lib/interfaces-util/dto.d.ts +4 -4
  177. package/build/module/lib/interfaces-util/find-where-relations.d.ts +9 -9
  178. package/build/module/lib/interfaces-util/funciones-seguridad.d.ts +13 -13
  179. package/build/module/lib/interfaces-util/funciones.gateway.d.ts +5 -5
  180. package/build/module/lib/interfaces-util/mensajes-controller.d.ts +6 -6
  181. package/build/module/lib/interfaces-util/politicas-de-seguridad.d.ts +17 -17
  182. package/build/module/lib/interfaces-util/respuesta-general.gateway.d.ts +5 -5
  183. package/build/module/lib/menu/entities/menu-entity.d.ts +13 -13
  184. package/build/module/lib/menu/entities/menu-entity.js +90 -90
  185. package/build/module/lib/one-signal/interfaces/funciones-seguridad.d.ts +9 -9
  186. package/build/module/lib/one-signal/interfaces/one-signal-device.d.ts +19 -19
  187. package/build/module/lib/one-signal/interfaces/one-signal-notification.d.ts +15 -15
  188. package/build/module/lib/one-signal/interfaces/one-signal-notifications.d.ts +7 -7
  189. package/build/module/lib/one-signal/interfaces/one-signal-ok-create-notification-no-players.d.ts +5 -5
  190. package/build/module/lib/one-signal/interfaces/one-signal-ok-create-notification.d.ts +4 -4
  191. package/build/module/lib/one-signal/interfaces/one-signal-success.d.ts +3 -3
  192. package/build/module/lib/one-signal/interfaces/one-signal-tags.d.ts +3 -3
  193. package/build/module/lib/one-signal/interfaces/one-signal-view-devices.d.ts +7 -7
  194. package/build/module/lib/one-signal/one-signal.controller.d.ts +15 -15
  195. package/build/module/lib/one-signal/one-signal.controller.js +248 -248
  196. package/build/module/lib/one-signal/one-signal.service.d.ts +32 -32
  197. package/build/module/lib/one-signal/one-signal.service.js +82 -82
  198. package/build/module/lib/politicas/revisar-si-tiene-nombre-permiso.d.ts +1 -1
  199. package/build/module/lib/politicas/revisar-si-tiene-nombre-permiso.js +6 -6
  200. package/build/module/lib/politicas/revisar-si-tiene-rol.d.ts +1 -1
  201. package/build/module/lib/politicas/revisar-si-tiene-rol.js +6 -6
  202. package/build/module/lib/principal.controller.d.ts +20 -20
  203. package/build/module/lib/principal.controller.js +306 -306
  204. package/build/module/lib/principal.dto.d.ts +5 -5
  205. package/build/module/lib/principal.dto.js +18 -18
  206. package/build/module/lib/principal.entity.d.ts +7 -7
  207. package/build/module/lib/principal.entity.js +39 -39
  208. package/build/module/lib/principal.find-many-options.d.ts +14 -14
  209. package/build/module/lib/principal.find-many-options.js +45 -45
  210. package/build/module/lib/principal.find-many-where-or.d.ts +10 -10
  211. package/build/module/lib/principal.find-many-where-or.js +25 -25
  212. package/build/module/lib/principal.gateway.d.ts +35 -35
  213. package/build/module/lib/principal.gateway.js +396 -396
  214. package/build/module/lib/principal.id.d.ts +3 -3
  215. package/build/module/lib/principal.id.js +13 -13
  216. package/build/module/lib/principal.resolver.d.ts +21 -21
  217. package/build/module/lib/principal.resolver.js +340 -340
  218. package/build/module/lib/principal.service.d.ts +38 -38
  219. package/build/module/lib/principal.service.js +258 -253
  220. package/build/module/lib/seguridad/aplicar-politicas-de-seguridad.d.ts +4 -4
  221. package/build/module/lib/seguridad/aplicar-politicas-de-seguridad.js +13 -13
  222. package/build/module/lib/seguridad/funciones/convertir-arreglo-en-arreglo-de-observables.d.ts +3 -3
  223. package/build/module/lib/seguridad/funciones/convertir-arreglo-en-arreglo-de-observables.js +27 -27
  224. package/build/module/lib/seguridad/funciones/index.d.ts +6 -6
  225. package/build/module/lib/seguridad/funciones/index.js +6 -6
  226. package/build/module/lib/seguridad/funciones/obtener-reflector-seguridad.d.ts +1 -1
  227. package/build/module/lib/seguridad/funciones/obtener-reflector-seguridad.js +3 -3
  228. package/build/module/lib/seguridad/funciones/obtener-request.d.ts +1 -1
  229. package/build/module/lib/seguridad/funciones/obtener-request.js +3 -3
  230. package/build/module/lib/seguridad/funciones/obtener-response.d.ts +1 -1
  231. package/build/module/lib/seguridad/funciones/obtener-response.js +3 -3
  232. package/build/module/lib/seguridad/funciones/tiene-acceso-permitido.d.ts +2 -2
  233. package/build/module/lib/seguridad/funciones/tiene-acceso-permitido.js +10 -10
  234. package/build/module/lib/seguridad/seguridad.decorator.d.ts +1 -1
  235. package/build/module/lib/seguridad/seguridad.decorator.js +2 -2
  236. package/package.json +117 -116
@@ -1,605 +1,605 @@
1
- "use strict";
2
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
- 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;
6
- return c > 3 && r && Object.defineProperty(target, key, r), r;
7
- };
8
- var __importDefault = (this && this.__importDefault) || function (mod) {
9
- return (mod && mod.__esModule) ? mod : { "default": mod };
10
- };
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- const common_1 = require("@nestjs/common");
13
- const auth0_1 = require("auth0");
14
- const buscar_registro_1 = require("../funciones-util/buscar-registro");
15
- const principal_find_many_options_1 = require("../principal.find-many-options");
16
- const axios_1 = __importDefault(require("axios"));
17
- const axios = axios_1.default;
18
- const ManagementClient = require('auth0').ManagementClient;
19
- let PrincipalAuth0Service = class PrincipalAuth0Service {
20
- constructor(AUTH0_CONFIG, _datosUsuarioService, datosUsuarioDto, AUTH0_CONFIG_PASSWORD, search_engine = 'v3', sort = 'created_at:-1', debug = true) {
21
- this.AUTH0_CONFIG = AUTH0_CONFIG;
22
- this._datosUsuarioService = _datosUsuarioService;
23
- this.datosUsuarioDto = datosUsuarioDto;
24
- this.AUTH0_CONFIG_PASSWORD = AUTH0_CONFIG_PASSWORD;
25
- this.search_engine = search_engine;
26
- this.sort = sort;
27
- this.debug = debug;
28
- this.managementClient = new ManagementClient({
29
- domain: `${this.AUTH0_CONFIG.CUENTA}.auth0.com`,
30
- clientId: `${this.AUTH0_CONFIG.CLIENT_ID}`,
31
- clientSecret: `${this.AUTH0_CONFIG.SECRET}`,
32
- scope: 'read:users update:users create:users read:user_idp_tokens'
33
- });
34
- this.authenticationClient = new auth0_1.AuthenticationClient({
35
- domain: `${AUTH0_CONFIG.CUENTA}.auth0.com`,
36
- clientId: `${AUTH0_CONFIG.CLIENT_ID}`
37
- });
38
- }
39
- async findOne(id) {
40
- if (id) {
41
- return await new Promise((resolve) => {
42
- const idUsuario = { id };
43
- this.managementClient
44
- .users
45
- .get(idUsuario, (err, usuarioEncontrado) => {
46
- if (err) {
47
- if (this.debug) {
48
- console.error('Error: ', err);
49
- }
50
- let error = 500;
51
- let mensaje = 'Error buscando usuario';
52
- if (err.statusCode === 404) {
53
- error = err.statusCode;
54
- mensaje = 'No existe usuario';
55
- }
56
- resolve({ error, mensaje });
57
- }
58
- else {
59
- resolve(usuarioEncontrado);
60
- }
61
- });
62
- });
63
- }
64
- else {
65
- return await new Promise((res) => res({ mensaje: 'No envia id', error: 400 }));
66
- }
67
- }
68
- async create(registro) {
69
- return await new Promise((resolve) => {
70
- this.managementClient
71
- .users
72
- .create(registro, (err, nuevoRegistro) => {
73
- if (err) {
74
- if (this.debug) {
75
- console.error('Error: ', err);
76
- }
77
- let error = 500;
78
- let mensaje = 'Error creando usuario';
79
- if (err.statusCode === 409) {
80
- error = err.statusCode;
81
- mensaje = 'Ya existe ese usuario';
82
- }
83
- if (err.statusCode === 400) {
84
- error = err.statusCode;
85
- mensaje = 'Usuario inválido';
86
- }
87
- resolve({ error, mensaje });
88
- }
89
- else {
90
- resolve(nuevoRegistro);
91
- }
92
- });
93
- });
94
- }
95
- async find(criterioBusqueda) {
96
- return await new Promise((resolve) => {
97
- let params;
98
- if (criterioBusqueda) {
99
- if (this.debug) {
100
- console.log('Hay criterio', criterioBusqueda);
101
- }
102
- const sort = obtenerPrimerOrder(criterioBusqueda.order);
103
- params = {
104
- per_page: criterioBusqueda.take ? criterioBusqueda.take : 30,
105
- page: criterioBusqueda.skip ? criterioBusqueda.skip : 0,
106
- search_engine: this.search_engine,
107
- include_totals: true,
108
- sort
109
- };
110
- if (criterioBusqueda.where) {
111
- params.q = criterioBusqueda.where;
112
- }
113
- if (criterioBusqueda.select) {
114
- params.fields = obtenerCamposSeparadosPorComa(criterioBusqueda.select);
115
- }
116
- }
117
- else {
118
- params = {
119
- per_page: 30,
120
- page: 0,
121
- search_engine: this.search_engine,
122
- include_totals: true,
123
- sort: this.sort
124
- };
125
- }
126
- if (this.debug) {
127
- console.log('Parametros: ', params);
128
- }
129
- this.managementClient
130
- .users
131
- .get(params, (err, usuarioEncontrado) => {
132
- if (err) {
133
- if (this.debug) {
134
- console.error('Error: ', err);
135
- }
136
- let error = 500;
137
- let mensaje = 'Error buscando usuarios';
138
- if (err.statusCode === 404) {
139
- error = err.statusCode;
140
- mensaje = 'No existen usuarios';
141
- }
142
- resolve({ error, mensaje });
143
- }
144
- else {
145
- resolve(usuarioEncontrado.users);
146
- }
147
- });
148
- });
149
- // }
150
- }
151
- async findBy(arregloCamposABuscar, busqueda) {
152
- return new Promise((resolve) => {
153
- let params = {
154
- q: ''
155
- };
156
- let query = '';
157
- arregloCamposABuscar
158
- .forEach((campo) => {
159
- if (query === '') {
160
- query = `${campo}="${busqueda}"`;
161
- }
162
- else {
163
- query = query + ` OR ${campo}="${busqueda}"`;
164
- }
165
- });
166
- params.q = query;
167
- if (this.debug) {
168
- console.log('Parametros: ', params);
169
- }
170
- this.managementClient
171
- .users
172
- .get(params, (err, usuariosEncontrados) => {
173
- if (err) {
174
- if (this.debug) {
175
- console.error('Error: ', err);
176
- }
177
- let error = 500;
178
- let mensaje = 'Error buscando usuarios';
179
- if (err.statusCode === 404) {
180
- error = err.statusCode;
181
- mensaje = 'No existen usuarios';
182
- }
183
- resolve({ error, mensaje });
184
- }
185
- else {
186
- resolve(usuariosEncontrados);
187
- }
188
- });
189
- });
190
- }
191
- async findOneByIdAndUpdate(id, datosAActualizar) {
192
- const usuario = await this.findOne(id);
193
- if (this.debug) {
194
- console.log('Usuario encontrado: ', usuario);
195
- }
196
- return await new Promise((resolve) => {
197
- if (usuario.error) {
198
- if (this.debug) {
199
- console.log('Error encontrando usuario: ', usuario);
200
- }
201
- resolve(usuario);
202
- }
203
- if (datosAActualizar.user_metadata) {
204
- datosAActualizar.user_metadata = elaborarUserMetadataAActualizar(usuario.user_metadata, datosAActualizar.user_metadata);
205
- }
206
- this.managementClient
207
- .users
208
- .update({ id }, datosAActualizar, (err, registroActualizado) => {
209
- if (err) {
210
- if (this.debug) {
211
- console.error('Error: ', err);
212
- }
213
- let error = 500;
214
- let mensaje = 'Error actualizando usuario';
215
- if (err.statusCode === 400) {
216
- error = err.statusCode;
217
- mensaje = 'Usuario inválido';
218
- }
219
- if (err.statusCode === 404) {
220
- error = err.statusCode;
221
- mensaje = 'Usuario no encontrado';
222
- }
223
- resolve({ error, mensaje });
224
- }
225
- else {
226
- resolve(registroActualizado);
227
- }
228
- });
229
- });
230
- }
231
- sendEmailVerification(id) {
232
- return new Promise((resolve) => {
233
- this.managementClient
234
- .sendEmailVerification({
235
- user_id: id
236
- })
237
- .then((r) => {
238
- if (this.debug) {
239
- console.error('Peticion: ', r);
240
- }
241
- resolve({ mensaje: 'Peticion enviada' });
242
- })
243
- .catch((err) => {
244
- if (this.debug) {
245
- console.error('Error: ', err);
246
- }
247
- resolve({ error: 500, mensaje: 'Error enviando peticion' });
248
- });
249
- });
250
- }
251
- refreshToken(refreshToken) {
252
- return new Promise((resolve) => {
253
- const data = {
254
- refresh_token: refreshToken
255
- };
256
- this.authenticationClient
257
- .refreshToken(data, (err, userData) => {
258
- if (err) {
259
- if (this.debug) {
260
- console.error('Error: ', err);
261
- }
262
- resolve({ error: 500, mensaje: 'Error enviando peticion' });
263
- }
264
- else {
265
- resolve({ data: userData });
266
- }
267
- });
268
- });
269
- }
270
- changePassword(email, connection = 'Username-Password-Authentication') {
271
- return new Promise((resolve) => {
272
- this.authenticationClient
273
- .requestChangePasswordEmail({
274
- email,
275
- connection
276
- })
277
- .then((r) => {
278
- if (this.debug) {
279
- console.error('Peticion: ', r);
280
- }
281
- resolve({ mensaje: 'Cambio de password realizado' });
282
- })
283
- .catch((err) => {
284
- if (this.debug) {
285
- console.error('Error: ', err);
286
- }
287
- resolve({ error: 500, mensaje: 'Error enviando peticion' });
288
- });
289
- });
290
- }
291
- delete(id) {
292
- return new Promise((resolve) => {
293
- this.managementClient
294
- .users
295
- .delete({ id: id }, (err) => {
296
- if (err) {
297
- if (this.debug) {
298
- console.error('Error: ', err);
299
- }
300
- let error = 500;
301
- let mensaje = 'Error borrando usuario';
302
- if (err.statusCode === 400) {
303
- error = err.statusCode;
304
- mensaje = 'Usuario inválido';
305
- }
306
- if (err.statusCode === 404) {
307
- error = err.statusCode;
308
- mensaje = 'Usuario no encontrado';
309
- }
310
- resolve({ error, mensaje });
311
- }
312
- else {
313
- resolve({ mensaje: `Registro con id: ${id} eliminado` });
314
- }
315
- });
316
- });
317
- }
318
- async createMany(nuevosRegistros) {
319
- return new Promise((resolve) => {
320
- let terminado = 0;
321
- let numeroDeRegistros = 0;
322
- const registrosCreados = [];
323
- while (terminado < nuevosRegistros.length) {
324
- const contadorAuxiliar = terminado;
325
- const tiempoEnCrearse = 10000 * (terminado + 1);
326
- setTimeout(() => {
327
- this.create(nuevosRegistros[contadorAuxiliar])
328
- .then((registroCreado) => {
329
- if (this.debug) {
330
- console.log('Registro creado', registroCreado);
331
- console.log('nuevosRegistros.length', nuevosRegistros.length);
332
- console.log('numeroDeRegistros', numeroDeRegistros);
333
- }
334
- if (registroCreado.error === 409 || registroCreado.error === 400) {
335
- if (this.debug) {
336
- console.log('Usuario ya existe o bad request', nuevosRegistros[contadorAuxiliar]);
337
- }
338
- this.find({ where: `username:${nuevosRegistros[contadorAuxiliar].username}` })
339
- .then((usuario) => {
340
- numeroDeRegistros++;
341
- registrosCreados.push(usuario[0]);
342
- if (numeroDeRegistros === nuevosRegistros.length) {
343
- resolve(registrosCreados);
344
- }
345
- })
346
- .catch((e) => {
347
- numeroDeRegistros++;
348
- registrosCreados.push(e);
349
- if (numeroDeRegistros === nuevosRegistros.length) {
350
- resolve(registrosCreados);
351
- }
352
- });
353
- }
354
- else {
355
- numeroDeRegistros++;
356
- registrosCreados.push(registroCreado);
357
- if (numeroDeRegistros === nuevosRegistros.length) {
358
- resolve(registrosCreados);
359
- }
360
- }
361
- })
362
- .catch((err) => {
363
- if (this.debug) {
364
- console.error('Error creando: ', err);
365
- }
366
- numeroDeRegistros++;
367
- registrosCreados.push(err);
368
- if (numeroDeRegistros === nuevosRegistros.length - 1) {
369
- resolve(registrosCreados);
370
- }
371
- });
372
- }, tiempoEnCrearse);
373
- terminado++;
374
- }
375
- });
376
- }
377
- async findWhereOr(camposABuscar, skip = 0, take = 10) {
378
- if (this._datosUsuarioService) {
379
- if (this.debug) {
380
- console.info('Consulta: ', camposABuscar);
381
- }
382
- const usuariosEncontrados = await this._datosUsuarioService
383
- .findWhereOr(camposABuscar, skip, take);
384
- if (this.debug) {
385
- console.info('UsuariosEncontrados: ', usuariosEncontrados);
386
- }
387
- let consulta = '';
388
- const hayUsuarios = usuariosEncontrados[0].length > 0;
389
- if (hayUsuarios) {
390
- usuariosEncontrados[0]
391
- .forEach((datosUsuario) => {
392
- if (consulta === '') {
393
- consulta = consulta + datosUsuario.user_id;
394
- }
395
- else {
396
- consulta = consulta + ' OR ' + datosUsuario.user_id;
397
- }
398
- });
399
- if (this.debug) {
400
- console.info('Consulta de usuarios: ', consulta);
401
- }
402
- const respuesta = await this.find({
403
- where: consulta
404
- });
405
- if (respuesta.error) {
406
- const error = respuesta;
407
- return { error: error.error, mensaje: error.mensaje };
408
- }
409
- else {
410
- let usuariosAuth0 = respuesta;
411
- usuariosAuth0 = usuariosAuth0
412
- .map((usuarioAuth0) => {
413
- usuarioAuth0.usuario = usuariosEncontrados[0]
414
- .find((usuario) => {
415
- return usuario.user_id === usuarioAuth0.user_id;
416
- });
417
- return usuarioAuth0;
418
- });
419
- return [usuariosAuth0, usuariosAuth0.length];
420
- }
421
- }
422
- else {
423
- if (this.debug) {
424
- console.info('No se encontraron usuarios');
425
- }
426
- return { error: 404, mensaje: 'No se encontro ningun usuario' };
427
- }
428
- }
429
- else {
430
- if (this.debug) {
431
- console.info('No existe el servicio, añada como dependencia en el constructor el _datosUsuarioService');
432
- }
433
- return { error: 400, mensaje: 'No existe el servicio DatosUsuarioService' };
434
- }
435
- }
436
- async findAll(criterioBusqueda, skip, take) {
437
- if (this._datosUsuarioService) {
438
- if (this.debug) {
439
- console.info('Consulta: ', criterioBusqueda);
440
- }
441
- const usuariosEncontrados = await buscar_registro_1.buscarVariosRegistros(criterioBusqueda, principal_find_many_options_1.PrincipalFindManyOptions, skip, take, this._datosUsuarioService);
442
- if (this.debug) {
443
- console.info('UsuariosEncontrados: ', usuariosEncontrados);
444
- }
445
- let consulta = '';
446
- const hayUsuarios = usuariosEncontrados[0].length > 0;
447
- if (hayUsuarios) {
448
- usuariosEncontrados[0]
449
- .forEach((datosUsuario) => {
450
- if (consulta === '') {
451
- consulta = consulta + datosUsuario.user_id;
452
- }
453
- else {
454
- consulta = consulta + ' OR ' + datosUsuario.user_id;
455
- }
456
- });
457
- if (this.debug) {
458
- console.info('Consulta de usuarios: ', consulta);
459
- }
460
- const respuesta = await this.find({
461
- where: consulta
462
- });
463
- if (respuesta.error) {
464
- const error = respuesta;
465
- return { error: error.error, mensaje: error.mensaje };
466
- }
467
- else {
468
- let usuariosAuth0 = respuesta;
469
- usuariosAuth0 = usuariosAuth0
470
- .map((usuarioAuth0) => {
471
- usuarioAuth0.usuario = usuariosEncontrados[0]
472
- .find((usuario) => {
473
- return usuario.user_id === usuarioAuth0.user_id;
474
- });
475
- return usuarioAuth0;
476
- });
477
- return [usuariosAuth0, usuariosAuth0.length];
478
- }
479
- }
480
- else {
481
- if (this.debug) {
482
- console.info('No se encontraron usuarios');
483
- }
484
- return { error: 404, mensaje: 'No se encontro ningun usuario' };
485
- }
486
- }
487
- else {
488
- if (this.debug) {
489
- console.info('No existe el servicio, añada como dependencia en el constructor el _datosUsuarioService');
490
- }
491
- return { error: 400, mensaje: 'No existe el servicio DatosUsuarioService' };
492
- }
493
- }
494
- login(username, password) {
495
- return new Promise(async (res, rej) => {
496
- try {
497
- const urlBase = `https://${this.AUTH0_CONFIG.CUENTA}.auth0.com`;
498
- const scopeAuth0 = 'openid profile email read:users user_id id offline_access';
499
- if (this.debug) {
500
- console.log({
501
- mensaje: 'URL base',
502
- datos: {
503
- urlBase
504
- }
505
- });
506
- }
507
- const configuracionObtenerToken = {
508
- method: 'post',
509
- url: urlBase + '/oauth/token',
510
- data: {
511
- username,
512
- password,
513
- grant_type: 'password',
514
- connection: 'Username-Password-Authentication',
515
- realm: 'Username-Password-Authentication',
516
- scope: scopeAuth0,
517
- client_id: this.AUTH0_CONFIG_PASSWORD.client_id,
518
- client_secret: this.AUTH0_CONFIG_PASSWORD.client_secret
519
- }
520
- };
521
- const respuestaAxios = await axios(configuracionObtenerToken);
522
- const configuracionUserInfo = {
523
- method: 'get',
524
- url: urlBase + '/userinfo',
525
- headers: {
526
- 'Authorization': 'Bearer ' + respuestaAxios.data.access_token,
527
- 'Content-Type': 'application/json'
528
- }
529
- };
530
- const respuestaUsuario = await axios(configuracionUserInfo);
531
- res({
532
- usuario: Object.assign({}, respuestaUsuario.data),
533
- token: Object.assign({}, respuestaAxios.data)
534
- });
535
- }
536
- catch (e) {
537
- console.error(e);
538
- rej({ error: 500, mensaje: 'Error en login' });
539
- }
540
- });
541
- }
542
- requestChangePasswordByEmail(email, connection = 'Username-Password-Authentication') {
543
- return new Promise((res, rej) => {
544
- const data = {
545
- email,
546
- connection
547
- };
548
- this.authenticationClient
549
- .requestChangePasswordEmail(data, (err) => {
550
- if (err) {
551
- console.error(err);
552
- rej({ mensaje: 'Error solicitando password', error: 500 });
553
- }
554
- res({
555
- mensaje: 'Si tu correo ha sido confirmado, recibiras un link para resetear tu password. Revisa tu correo.'
556
- });
557
- });
558
- });
559
- }
560
- };
561
- PrincipalAuth0Service = __decorate([
562
- common_1.Injectable()
563
- ], PrincipalAuth0Service);
564
- exports.PrincipalAuth0Service = PrincipalAuth0Service;
565
- function obtenerPrimerOrder(order) {
566
- if (order) {
567
- const nombreCampo = Object.keys(order)[0];
568
- return `${nombreCampo}:${order[nombreCampo] === 'ASC' ? 1 : -1}`;
569
- }
570
- else {
571
- return undefined;
572
- }
573
- }
574
- function obtenerCamposSeparadosPorComa(select) {
575
- if (select) {
576
- let campos = '';
577
- select.forEach((nombreCampo) => {
578
- if (campos === '') {
579
- campos = nombreCampo;
580
- }
581
- else {
582
- campos = `${campos},${nombreCampo}`;
583
- }
584
- });
585
- return campos;
586
- }
587
- else {
588
- return undefined;
589
- }
590
- }
591
- function elaborarUserMetadataAActualizar(user_metadata, user_metadataAActualizar) {
592
- let user_metadataClonado = {};
593
- try {
594
- user_metadataClonado = JSON.parse(JSON.stringify(user_metadata));
595
- }
596
- catch (e) {
597
- }
598
- Object
599
- .keys(user_metadataAActualizar)
600
- .forEach((nombrePropiedad) => {
601
- user_metadataClonado[nombrePropiedad] = user_metadataAActualizar[nombrePropiedad];
602
- });
603
- return user_metadataClonado;
604
- }
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ 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;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __importDefault = (this && this.__importDefault) || function (mod) {
9
+ return (mod && mod.__esModule) ? mod : { "default": mod };
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ const common_1 = require("@nestjs/common");
13
+ const auth0_1 = require("auth0");
14
+ const buscar_registro_1 = require("../funciones-util/buscar-registro");
15
+ const principal_find_many_options_1 = require("../principal.find-many-options");
16
+ const axios_1 = __importDefault(require("axios"));
17
+ const axios = axios_1.default;
18
+ const ManagementClient = require('auth0').ManagementClient;
19
+ let PrincipalAuth0Service = class PrincipalAuth0Service {
20
+ constructor(AUTH0_CONFIG, _datosUsuarioService, datosUsuarioDto, AUTH0_CONFIG_PASSWORD, search_engine = 'v3', sort = 'created_at:-1', debug = true) {
21
+ this.AUTH0_CONFIG = AUTH0_CONFIG;
22
+ this._datosUsuarioService = _datosUsuarioService;
23
+ this.datosUsuarioDto = datosUsuarioDto;
24
+ this.AUTH0_CONFIG_PASSWORD = AUTH0_CONFIG_PASSWORD;
25
+ this.search_engine = search_engine;
26
+ this.sort = sort;
27
+ this.debug = debug;
28
+ this.managementClient = new ManagementClient({
29
+ domain: `${this.AUTH0_CONFIG.CUENTA}.auth0.com`,
30
+ clientId: `${this.AUTH0_CONFIG.CLIENT_ID}`,
31
+ clientSecret: `${this.AUTH0_CONFIG.SECRET}`,
32
+ scope: 'read:users update:users create:users read:user_idp_tokens'
33
+ });
34
+ this.authenticationClient = new auth0_1.AuthenticationClient({
35
+ domain: `${AUTH0_CONFIG.CUENTA}.auth0.com`,
36
+ clientId: `${AUTH0_CONFIG.CLIENT_ID}`
37
+ });
38
+ }
39
+ async findOne(id) {
40
+ if (id) {
41
+ return await new Promise((resolve) => {
42
+ const idUsuario = { id };
43
+ this.managementClient
44
+ .users
45
+ .get(idUsuario, (err, usuarioEncontrado) => {
46
+ if (err) {
47
+ if (this.debug) {
48
+ console.error('Error: ', err);
49
+ }
50
+ let error = 500;
51
+ let mensaje = 'Error buscando usuario';
52
+ if (err.statusCode === 404) {
53
+ error = err.statusCode;
54
+ mensaje = 'No existe usuario';
55
+ }
56
+ resolve({ error, mensaje });
57
+ }
58
+ else {
59
+ resolve(usuarioEncontrado);
60
+ }
61
+ });
62
+ });
63
+ }
64
+ else {
65
+ return await new Promise((res) => res({ mensaje: 'No envia id', error: 400 }));
66
+ }
67
+ }
68
+ async create(registro) {
69
+ return await new Promise((resolve) => {
70
+ this.managementClient
71
+ .users
72
+ .create(registro, (err, nuevoRegistro) => {
73
+ if (err) {
74
+ if (this.debug) {
75
+ console.error('Error: ', err);
76
+ }
77
+ let error = 500;
78
+ let mensaje = 'Error creando usuario';
79
+ if (err.statusCode === 409) {
80
+ error = err.statusCode;
81
+ mensaje = 'Ya existe ese usuario';
82
+ }
83
+ if (err.statusCode === 400) {
84
+ error = err.statusCode;
85
+ mensaje = 'Usuario inválido';
86
+ }
87
+ resolve({ error, mensaje });
88
+ }
89
+ else {
90
+ resolve(nuevoRegistro);
91
+ }
92
+ });
93
+ });
94
+ }
95
+ async find(criterioBusqueda) {
96
+ return await new Promise((resolve) => {
97
+ let params;
98
+ if (criterioBusqueda) {
99
+ if (this.debug) {
100
+ console.log('Hay criterio', criterioBusqueda);
101
+ }
102
+ const sort = obtenerPrimerOrder(criterioBusqueda.order);
103
+ params = {
104
+ per_page: criterioBusqueda.take ? criterioBusqueda.take : 30,
105
+ page: criterioBusqueda.skip ? criterioBusqueda.skip : 0,
106
+ search_engine: this.search_engine,
107
+ include_totals: true,
108
+ sort
109
+ };
110
+ if (criterioBusqueda.where) {
111
+ params.q = criterioBusqueda.where;
112
+ }
113
+ if (criterioBusqueda.select) {
114
+ params.fields = obtenerCamposSeparadosPorComa(criterioBusqueda.select);
115
+ }
116
+ }
117
+ else {
118
+ params = {
119
+ per_page: 30,
120
+ page: 0,
121
+ search_engine: this.search_engine,
122
+ include_totals: true,
123
+ sort: this.sort
124
+ };
125
+ }
126
+ if (this.debug) {
127
+ console.log('Parametros: ', params);
128
+ }
129
+ this.managementClient
130
+ .users
131
+ .get(params, (err, usuarioEncontrado) => {
132
+ if (err) {
133
+ if (this.debug) {
134
+ console.error('Error: ', err);
135
+ }
136
+ let error = 500;
137
+ let mensaje = 'Error buscando usuarios';
138
+ if (err.statusCode === 404) {
139
+ error = err.statusCode;
140
+ mensaje = 'No existen usuarios';
141
+ }
142
+ resolve({ error, mensaje });
143
+ }
144
+ else {
145
+ resolve(usuarioEncontrado.users);
146
+ }
147
+ });
148
+ });
149
+ // }
150
+ }
151
+ async findBy(arregloCamposABuscar, busqueda) {
152
+ return new Promise((resolve) => {
153
+ let params = {
154
+ q: ''
155
+ };
156
+ let query = '';
157
+ arregloCamposABuscar
158
+ .forEach((campo) => {
159
+ if (query === '') {
160
+ query = `${campo}="${busqueda}"`;
161
+ }
162
+ else {
163
+ query = query + ` OR ${campo}="${busqueda}"`;
164
+ }
165
+ });
166
+ params.q = query;
167
+ if (this.debug) {
168
+ console.log('Parametros: ', params);
169
+ }
170
+ this.managementClient
171
+ .users
172
+ .get(params, (err, usuariosEncontrados) => {
173
+ if (err) {
174
+ if (this.debug) {
175
+ console.error('Error: ', err);
176
+ }
177
+ let error = 500;
178
+ let mensaje = 'Error buscando usuarios';
179
+ if (err.statusCode === 404) {
180
+ error = err.statusCode;
181
+ mensaje = 'No existen usuarios';
182
+ }
183
+ resolve({ error, mensaje });
184
+ }
185
+ else {
186
+ resolve(usuariosEncontrados);
187
+ }
188
+ });
189
+ });
190
+ }
191
+ async findOneByIdAndUpdate(id, datosAActualizar) {
192
+ const usuario = await this.findOne(id);
193
+ if (this.debug) {
194
+ console.log('Usuario encontrado: ', usuario);
195
+ }
196
+ return await new Promise((resolve) => {
197
+ if (usuario.error) {
198
+ if (this.debug) {
199
+ console.log('Error encontrando usuario: ', usuario);
200
+ }
201
+ resolve(usuario);
202
+ }
203
+ if (datosAActualizar.user_metadata) {
204
+ datosAActualizar.user_metadata = elaborarUserMetadataAActualizar(usuario.user_metadata, datosAActualizar.user_metadata);
205
+ }
206
+ this.managementClient
207
+ .users
208
+ .update({ id }, datosAActualizar, (err, registroActualizado) => {
209
+ if (err) {
210
+ if (this.debug) {
211
+ console.error('Error: ', err);
212
+ }
213
+ let error = 500;
214
+ let mensaje = 'Error actualizando usuario';
215
+ if (err.statusCode === 400) {
216
+ error = err.statusCode;
217
+ mensaje = 'Usuario inválido';
218
+ }
219
+ if (err.statusCode === 404) {
220
+ error = err.statusCode;
221
+ mensaje = 'Usuario no encontrado';
222
+ }
223
+ resolve({ error, mensaje });
224
+ }
225
+ else {
226
+ resolve(registroActualizado);
227
+ }
228
+ });
229
+ });
230
+ }
231
+ sendEmailVerification(id) {
232
+ return new Promise((resolve) => {
233
+ this.managementClient
234
+ .sendEmailVerification({
235
+ user_id: id
236
+ })
237
+ .then((r) => {
238
+ if (this.debug) {
239
+ console.error('Peticion: ', r);
240
+ }
241
+ resolve({ mensaje: 'Peticion enviada' });
242
+ })
243
+ .catch((err) => {
244
+ if (this.debug) {
245
+ console.error('Error: ', err);
246
+ }
247
+ resolve({ error: 500, mensaje: 'Error enviando peticion' });
248
+ });
249
+ });
250
+ }
251
+ refreshToken(refreshToken) {
252
+ return new Promise((resolve) => {
253
+ const data = {
254
+ refresh_token: refreshToken
255
+ };
256
+ this.authenticationClient
257
+ .refreshToken(data, (err, userData) => {
258
+ if (err) {
259
+ if (this.debug) {
260
+ console.error('Error: ', err);
261
+ }
262
+ resolve({ error: 500, mensaje: 'Error enviando peticion' });
263
+ }
264
+ else {
265
+ resolve({ data: userData });
266
+ }
267
+ });
268
+ });
269
+ }
270
+ changePassword(email, connection = 'Username-Password-Authentication') {
271
+ return new Promise((resolve) => {
272
+ this.authenticationClient
273
+ .requestChangePasswordEmail({
274
+ email,
275
+ connection
276
+ })
277
+ .then((r) => {
278
+ if (this.debug) {
279
+ console.error('Peticion: ', r);
280
+ }
281
+ resolve({ mensaje: 'Cambio de password realizado' });
282
+ })
283
+ .catch((err) => {
284
+ if (this.debug) {
285
+ console.error('Error: ', err);
286
+ }
287
+ resolve({ error: 500, mensaje: 'Error enviando peticion' });
288
+ });
289
+ });
290
+ }
291
+ delete(id) {
292
+ return new Promise((resolve) => {
293
+ this.managementClient
294
+ .users
295
+ .delete({ id: id }, (err) => {
296
+ if (err) {
297
+ if (this.debug) {
298
+ console.error('Error: ', err);
299
+ }
300
+ let error = 500;
301
+ let mensaje = 'Error borrando usuario';
302
+ if (err.statusCode === 400) {
303
+ error = err.statusCode;
304
+ mensaje = 'Usuario inválido';
305
+ }
306
+ if (err.statusCode === 404) {
307
+ error = err.statusCode;
308
+ mensaje = 'Usuario no encontrado';
309
+ }
310
+ resolve({ error, mensaje });
311
+ }
312
+ else {
313
+ resolve({ mensaje: `Registro con id: ${id} eliminado` });
314
+ }
315
+ });
316
+ });
317
+ }
318
+ async createMany(nuevosRegistros) {
319
+ return new Promise((resolve) => {
320
+ let terminado = 0;
321
+ let numeroDeRegistros = 0;
322
+ const registrosCreados = [];
323
+ while (terminado < nuevosRegistros.length) {
324
+ const contadorAuxiliar = terminado;
325
+ const tiempoEnCrearse = 10000 * (terminado + 1);
326
+ setTimeout(() => {
327
+ this.create(nuevosRegistros[contadorAuxiliar])
328
+ .then((registroCreado) => {
329
+ if (this.debug) {
330
+ console.log('Registro creado', registroCreado);
331
+ console.log('nuevosRegistros.length', nuevosRegistros.length);
332
+ console.log('numeroDeRegistros', numeroDeRegistros);
333
+ }
334
+ if (registroCreado.error === 409 || registroCreado.error === 400) {
335
+ if (this.debug) {
336
+ console.log('Usuario ya existe o bad request', nuevosRegistros[contadorAuxiliar]);
337
+ }
338
+ this.find({ where: `username:${nuevosRegistros[contadorAuxiliar].username}` })
339
+ .then((usuario) => {
340
+ numeroDeRegistros++;
341
+ registrosCreados.push(usuario[0]);
342
+ if (numeroDeRegistros === nuevosRegistros.length) {
343
+ resolve(registrosCreados);
344
+ }
345
+ })
346
+ .catch((e) => {
347
+ numeroDeRegistros++;
348
+ registrosCreados.push(e);
349
+ if (numeroDeRegistros === nuevosRegistros.length) {
350
+ resolve(registrosCreados);
351
+ }
352
+ });
353
+ }
354
+ else {
355
+ numeroDeRegistros++;
356
+ registrosCreados.push(registroCreado);
357
+ if (numeroDeRegistros === nuevosRegistros.length) {
358
+ resolve(registrosCreados);
359
+ }
360
+ }
361
+ })
362
+ .catch((err) => {
363
+ if (this.debug) {
364
+ console.error('Error creando: ', err);
365
+ }
366
+ numeroDeRegistros++;
367
+ registrosCreados.push(err);
368
+ if (numeroDeRegistros === nuevosRegistros.length - 1) {
369
+ resolve(registrosCreados);
370
+ }
371
+ });
372
+ }, tiempoEnCrearse);
373
+ terminado++;
374
+ }
375
+ });
376
+ }
377
+ async findWhereOr(camposABuscar, skip = 0, take = 10) {
378
+ if (this._datosUsuarioService) {
379
+ if (this.debug) {
380
+ console.info('Consulta: ', camposABuscar);
381
+ }
382
+ const usuariosEncontrados = await this._datosUsuarioService
383
+ .findWhereOr(camposABuscar, skip, take);
384
+ if (this.debug) {
385
+ console.info('UsuariosEncontrados: ', usuariosEncontrados);
386
+ }
387
+ let consulta = '';
388
+ const hayUsuarios = usuariosEncontrados[0].length > 0;
389
+ if (hayUsuarios) {
390
+ usuariosEncontrados[0]
391
+ .forEach((datosUsuario) => {
392
+ if (consulta === '') {
393
+ consulta = consulta + datosUsuario.user_id;
394
+ }
395
+ else {
396
+ consulta = consulta + ' OR ' + datosUsuario.user_id;
397
+ }
398
+ });
399
+ if (this.debug) {
400
+ console.info('Consulta de usuarios: ', consulta);
401
+ }
402
+ const respuesta = await this.find({
403
+ where: consulta
404
+ });
405
+ if (respuesta.error) {
406
+ const error = respuesta;
407
+ return { error: error.error, mensaje: error.mensaje };
408
+ }
409
+ else {
410
+ let usuariosAuth0 = respuesta;
411
+ usuariosAuth0 = usuariosAuth0
412
+ .map((usuarioAuth0) => {
413
+ usuarioAuth0.usuario = usuariosEncontrados[0]
414
+ .find((usuario) => {
415
+ return usuario.user_id === usuarioAuth0.user_id;
416
+ });
417
+ return usuarioAuth0;
418
+ });
419
+ return [usuariosAuth0, usuariosAuth0.length];
420
+ }
421
+ }
422
+ else {
423
+ if (this.debug) {
424
+ console.info('No se encontraron usuarios');
425
+ }
426
+ return { error: 404, mensaje: 'No se encontro ningun usuario' };
427
+ }
428
+ }
429
+ else {
430
+ if (this.debug) {
431
+ console.info('No existe el servicio, añada como dependencia en el constructor el _datosUsuarioService');
432
+ }
433
+ return { error: 400, mensaje: 'No existe el servicio DatosUsuarioService' };
434
+ }
435
+ }
436
+ async findAll(criterioBusqueda, skip, take) {
437
+ if (this._datosUsuarioService) {
438
+ if (this.debug) {
439
+ console.info('Consulta: ', criterioBusqueda);
440
+ }
441
+ const usuariosEncontrados = await buscar_registro_1.buscarVariosRegistros(criterioBusqueda, principal_find_many_options_1.PrincipalFindManyOptions, skip, take, this._datosUsuarioService);
442
+ if (this.debug) {
443
+ console.info('UsuariosEncontrados: ', usuariosEncontrados);
444
+ }
445
+ let consulta = '';
446
+ const hayUsuarios = usuariosEncontrados[0].length > 0;
447
+ if (hayUsuarios) {
448
+ usuariosEncontrados[0]
449
+ .forEach((datosUsuario) => {
450
+ if (consulta === '') {
451
+ consulta = consulta + datosUsuario.user_id;
452
+ }
453
+ else {
454
+ consulta = consulta + ' OR ' + datosUsuario.user_id;
455
+ }
456
+ });
457
+ if (this.debug) {
458
+ console.info('Consulta de usuarios: ', consulta);
459
+ }
460
+ const respuesta = await this.find({
461
+ where: consulta
462
+ });
463
+ if (respuesta.error) {
464
+ const error = respuesta;
465
+ return { error: error.error, mensaje: error.mensaje };
466
+ }
467
+ else {
468
+ let usuariosAuth0 = respuesta;
469
+ usuariosAuth0 = usuariosAuth0
470
+ .map((usuarioAuth0) => {
471
+ usuarioAuth0.usuario = usuariosEncontrados[0]
472
+ .find((usuario) => {
473
+ return usuario.user_id === usuarioAuth0.user_id;
474
+ });
475
+ return usuarioAuth0;
476
+ });
477
+ return [usuariosAuth0, usuariosAuth0.length];
478
+ }
479
+ }
480
+ else {
481
+ if (this.debug) {
482
+ console.info('No se encontraron usuarios');
483
+ }
484
+ return { error: 404, mensaje: 'No se encontro ningun usuario' };
485
+ }
486
+ }
487
+ else {
488
+ if (this.debug) {
489
+ console.info('No existe el servicio, añada como dependencia en el constructor el _datosUsuarioService');
490
+ }
491
+ return { error: 400, mensaje: 'No existe el servicio DatosUsuarioService' };
492
+ }
493
+ }
494
+ login(username, password) {
495
+ return new Promise(async (res, rej) => {
496
+ try {
497
+ const urlBase = `https://${this.AUTH0_CONFIG.CUENTA}.auth0.com`;
498
+ const scopeAuth0 = 'openid profile email read:users user_id id offline_access';
499
+ if (this.debug) {
500
+ console.log({
501
+ mensaje: 'URL base',
502
+ datos: {
503
+ urlBase
504
+ }
505
+ });
506
+ }
507
+ const configuracionObtenerToken = {
508
+ method: 'post',
509
+ url: urlBase + '/oauth/token',
510
+ data: {
511
+ username,
512
+ password,
513
+ grant_type: 'password',
514
+ connection: 'Username-Password-Authentication',
515
+ realm: 'Username-Password-Authentication',
516
+ scope: scopeAuth0,
517
+ client_id: this.AUTH0_CONFIG_PASSWORD.client_id,
518
+ client_secret: this.AUTH0_CONFIG_PASSWORD.client_secret
519
+ }
520
+ };
521
+ const respuestaAxios = await axios(configuracionObtenerToken);
522
+ const configuracionUserInfo = {
523
+ method: 'get',
524
+ url: urlBase + '/userinfo',
525
+ headers: {
526
+ 'Authorization': 'Bearer ' + respuestaAxios.data.access_token,
527
+ 'Content-Type': 'application/json'
528
+ }
529
+ };
530
+ const respuestaUsuario = await axios(configuracionUserInfo);
531
+ res({
532
+ usuario: Object.assign({}, respuestaUsuario.data),
533
+ token: Object.assign({}, respuestaAxios.data)
534
+ });
535
+ }
536
+ catch (e) {
537
+ console.error(e);
538
+ rej({ error: 500, mensaje: 'Error en login' });
539
+ }
540
+ });
541
+ }
542
+ requestChangePasswordByEmail(email, connection = 'Username-Password-Authentication') {
543
+ return new Promise((res, rej) => {
544
+ const data = {
545
+ email,
546
+ connection
547
+ };
548
+ this.authenticationClient
549
+ .requestChangePasswordEmail(data, (err) => {
550
+ if (err) {
551
+ console.error(err);
552
+ rej({ mensaje: 'Error solicitando password', error: 500 });
553
+ }
554
+ res({
555
+ mensaje: 'Si tu correo ha sido confirmado, recibiras un link para resetear tu password. Revisa tu correo.'
556
+ });
557
+ });
558
+ });
559
+ }
560
+ };
561
+ PrincipalAuth0Service = __decorate([
562
+ common_1.Injectable()
563
+ ], PrincipalAuth0Service);
564
+ exports.PrincipalAuth0Service = PrincipalAuth0Service;
565
+ function obtenerPrimerOrder(order) {
566
+ if (order) {
567
+ const nombreCampo = Object.keys(order)[0];
568
+ return `${nombreCampo}:${order[nombreCampo] === 'ASC' ? 1 : -1}`;
569
+ }
570
+ else {
571
+ return undefined;
572
+ }
573
+ }
574
+ function obtenerCamposSeparadosPorComa(select) {
575
+ if (select) {
576
+ let campos = '';
577
+ select.forEach((nombreCampo) => {
578
+ if (campos === '') {
579
+ campos = nombreCampo;
580
+ }
581
+ else {
582
+ campos = `${campos},${nombreCampo}`;
583
+ }
584
+ });
585
+ return campos;
586
+ }
587
+ else {
588
+ return undefined;
589
+ }
590
+ }
591
+ function elaborarUserMetadataAActualizar(user_metadata, user_metadataAActualizar) {
592
+ let user_metadataClonado = {};
593
+ try {
594
+ user_metadataClonado = JSON.parse(JSON.stringify(user_metadata));
595
+ }
596
+ catch (e) {
597
+ }
598
+ Object
599
+ .keys(user_metadataAActualizar)
600
+ .forEach((nombrePropiedad) => {
601
+ user_metadataClonado[nombrePropiedad] = user_metadataAActualizar[nombrePropiedad];
602
+ });
603
+ return user_metadataClonado;
604
+ }
605
605
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aDAuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvYXV0aDAvYXV0aDAuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBLDJDQUE0QztBQUU1QyxpQ0FBdUQ7QUFHdkQsdUVBQTBFO0FBQzFFLGdGQUEwRTtBQUMxRSxrREFBeUI7QUFFekIsTUFBTSxLQUFLLEdBQVEsZUFBSSxDQUFDO0FBQ3hCLE1BQU0sZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLGdCQUFnQixDQUFDO0FBRzNELElBQXNCLHFCQUFxQixHQUEzQztJQUlFLFlBQTZCLFlBQVksRUFDYixvQkFBMEIsRUFDMUIsZUFBcUIsRUFDcEIscUJBQTJCLEVBQzNCLGdCQUF3QixJQUFJLEVBQzVCLE9BQWUsZUFBZSxFQUM5QixRQUFpQixJQUFJO1FBTnJCLGlCQUFZLEdBQVosWUFBWSxDQUFBO1FBQ2IseUJBQW9CLEdBQXBCLG9CQUFvQixDQUFNO1FBQzFCLG9CQUFlLEdBQWYsZUFBZSxDQUFNO1FBQ3BCLDBCQUFxQixHQUFyQixxQkFBcUIsQ0FBTTtRQUMzQixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixTQUFJLEdBQUosSUFBSSxDQUEwQjtRQUM5QixVQUFLLEdBQUwsS0FBSyxDQUFnQjtRQUNoRCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBQztZQUMzQyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sWUFBWTtZQUMvQyxRQUFRLEVBQUUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsRUFBRTtZQUMxQyxZQUFZLEVBQUUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRTtZQUMzQyxLQUFLLEVBQUUsMkRBQTJEO1NBQ25FLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLDRCQUFv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