ngx-redi-core 0.0.0-watch

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 (93) hide show
  1. package/Helper/index.d.ts +5 -0
  2. package/Helper/package.json +3 -0
  3. package/Helper/public-api.d.ts +3 -0
  4. package/Helper/src/helpers/bag-data-subject.service.d.ts +43 -0
  5. package/Helper/src/helpers/csv.service.d.ts +33 -0
  6. package/Helper/src/helpers/data-subject.service.d.ts +32 -0
  7. package/Helper/src/models/interfaces/data-subject.interface.d.ts +6 -0
  8. package/README.md +24 -0
  9. package/RediDragDrop/index.d.ts +5 -0
  10. package/RediDragDrop/package.json +3 -0
  11. package/RediDragDrop/public-api.d.ts +4 -0
  12. package/RediDragDrop/src/models/classes/proceso-archivo-csv.d.ts +29 -0
  13. package/RediDragDrop/src/models/directives/drag-drop.directive.d.ts +43 -0
  14. package/RediDragDrop/src/modules/redi-drag-drop/redi-drag-drop.component.d.ts +188 -0
  15. package/RediDragDrop/src/modules/redi-drag-drop.module.d.ts +13 -0
  16. package/RediGrid/index.d.ts +5 -0
  17. package/RediGrid/package.json +3 -0
  18. package/RediGrid/public-api.d.ts +4 -0
  19. package/RediGrid/src/models/interfaces/cell.d.ts +37 -0
  20. package/RediGrid/src/models/interfaces/data-grid.d.ts +30 -0
  21. package/RediGrid/src/modules/redi-grid/redi-grid.component.d.ts +92 -0
  22. package/RediGrid/src/modules/redi-grid.module.d.ts +14 -0
  23. package/RediTable/index.d.ts +5 -0
  24. package/RediTable/package.json +3 -0
  25. package/RediTable/public-api.d.ts +6 -0
  26. package/RediTable/src/components/filter-data/filter-data.component.d.ts +23 -0
  27. package/RediTable/src/components/redi-table/redi-table.component.d.ts +139 -0
  28. package/RediTable/src/models/interfaces/column-definition.d.ts +18 -0
  29. package/RediTable/src/models/interfaces/data-table.d.ts +24 -0
  30. package/RediTable/src/models/interfaces/filter-item.d.ts +5 -0
  31. package/RediTable/src/models/interfaces/row-action.d.ts +24 -0
  32. package/RediTable/src/models/types/event-table.type.d.ts +5 -0
  33. package/Security/index.d.ts +5 -0
  34. package/Security/package.json +3 -0
  35. package/Security/public-api.d.ts +6 -0
  36. package/Security/src/modules/security-web-intercept/interceptors/redi-secure.interceptor.d.ts +39 -0
  37. package/Security/src/modules/security-web-intercept/models/secure-factory.model.d.ts +10 -0
  38. package/Security/src/modules/security-web-intercept/services/cifrado-basico.service.d.ts +14 -0
  39. package/Security/src/modules/security-web-intercept/services/cifrado.service.d.ts +21 -0
  40. package/Security/src/modules/security-web-intercept/services/reflection.service.d.ts +58 -0
  41. package/Security/src/modules/security.module.d.ts +11 -0
  42. package/esm2022/Helper/ngx-redi-core-Helper.mjs +5 -0
  43. package/esm2022/Helper/public-api.mjs +4 -0
  44. package/esm2022/Helper/src/helpers/bag-data-subject.service.mjs +61 -0
  45. package/esm2022/Helper/src/helpers/csv.service.mjs +69 -0
  46. package/esm2022/Helper/src/helpers/data-subject.service.mjs +34 -0
  47. package/esm2022/Helper/src/models/interfaces/data-subject.interface.mjs +2 -0
  48. package/esm2022/RediDragDrop/ngx-redi-core-RediDragDrop.mjs +5 -0
  49. package/esm2022/RediDragDrop/public-api.mjs +5 -0
  50. package/esm2022/RediDragDrop/src/models/classes/proceso-archivo-csv.mjs +132 -0
  51. package/esm2022/RediDragDrop/src/models/directives/drag-drop.directive.mjs +95 -0
  52. package/esm2022/RediDragDrop/src/modules/redi-drag-drop/redi-drag-drop.component.mjs +369 -0
  53. package/esm2022/RediDragDrop/src/modules/redi-drag-drop.module.mjs +34 -0
  54. package/esm2022/RediGrid/ngx-redi-core-RediGrid.mjs +5 -0
  55. package/esm2022/RediGrid/public-api.mjs +5 -0
  56. package/esm2022/RediGrid/src/models/interfaces/cell.mjs +2 -0
  57. package/esm2022/RediGrid/src/models/interfaces/data-grid.mjs +2 -0
  58. package/esm2022/RediGrid/src/modules/redi-grid/redi-grid.component.mjs +159 -0
  59. package/esm2022/RediGrid/src/modules/redi-grid.module.mjs +34 -0
  60. package/esm2022/RediTable/ngx-redi-core-RediTable.mjs +5 -0
  61. package/esm2022/RediTable/public-api.mjs +9 -0
  62. package/esm2022/RediTable/src/components/filter-data/filter-data.component.mjs +84 -0
  63. package/esm2022/RediTable/src/components/redi-table/redi-table.component.mjs +404 -0
  64. package/esm2022/RediTable/src/models/interfaces/column-definition.mjs +2 -0
  65. package/esm2022/RediTable/src/models/interfaces/data-table.mjs +2 -0
  66. package/esm2022/RediTable/src/models/interfaces/filter-item.mjs +2 -0
  67. package/esm2022/RediTable/src/models/interfaces/row-action.mjs +2 -0
  68. package/esm2022/RediTable/src/models/types/event-table.type.mjs +2 -0
  69. package/esm2022/Security/ngx-redi-core-Security.mjs +5 -0
  70. package/esm2022/Security/public-api.mjs +7 -0
  71. package/esm2022/Security/src/modules/security-web-intercept/interceptors/redi-secure.interceptor.mjs +88 -0
  72. package/esm2022/Security/src/modules/security-web-intercept/models/secure-factory.model.mjs +27 -0
  73. package/esm2022/Security/src/modules/security-web-intercept/services/cifrado-basico.service.mjs +51 -0
  74. package/esm2022/Security/src/modules/security-web-intercept/services/cifrado.service.mjs +33 -0
  75. package/esm2022/Security/src/modules/security-web-intercept/services/reflection.service.mjs +122 -0
  76. package/esm2022/Security/src/modules/security.module.mjs +23 -0
  77. package/esm2022/ngx-redi-core.mjs +5 -0
  78. package/esm2022/public-api.mjs +8 -0
  79. package/fesm2022/ngx-redi-core-Helper.mjs +166 -0
  80. package/fesm2022/ngx-redi-core-Helper.mjs.map +1 -0
  81. package/fesm2022/ngx-redi-core-RediDragDrop.mjs +628 -0
  82. package/fesm2022/ngx-redi-core-RediDragDrop.mjs.map +1 -0
  83. package/fesm2022/ngx-redi-core-RediGrid.mjs +196 -0
  84. package/fesm2022/ngx-redi-core-RediGrid.mjs.map +1 -0
  85. package/fesm2022/ngx-redi-core-RediTable.mjs +496 -0
  86. package/fesm2022/ngx-redi-core-RediTable.mjs.map +1 -0
  87. package/fesm2022/ngx-redi-core-Security.mjs +339 -0
  88. package/fesm2022/ngx-redi-core-Security.mjs.map +1 -0
  89. package/fesm2022/ngx-redi-core.mjs +14 -0
  90. package/fesm2022/ngx-redi-core.mjs.map +1 -0
  91. package/index.d.ts +5 -0
  92. package/package.json +57 -0
  93. package/public-api.d.ts +4 -0
@@ -0,0 +1,88 @@
1
+ import 'reflect-metadata';
2
+ import { Injectable } from '@angular/core';
3
+ import { HttpContextToken, HttpResponse } from '@angular/common/http';
4
+ import { map } from 'rxjs/operators';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "../services/reflection.service";
7
+ /** Request token para el contexto Http */
8
+ export const REQUEST_TOKEN = new HttpContextToken(() => { });
9
+ /** Response token para el contexto Http */
10
+ export const RESPONSE_TOKEN = new HttpContextToken(() => { });
11
+ /**
12
+ * Interceptor de seguridad que cifra y descifra información sensible en las peticiones Web
13
+ * @decorator `@Injectable()`
14
+ */
15
+ export class RediSecureInterceptor {
16
+ constructor(reflectionService) {
17
+ this.reflectionService = reflectionService;
18
+ }
19
+ intercept(request, next) {
20
+ /** Ciframos los datos de la petición */
21
+ return next.handle(this.cifrarRequest(request))
22
+ .pipe(map(event => {
23
+ if (event instanceof HttpResponse) {
24
+ return event.clone({
25
+ body: this.descifrarResponse(request, event)
26
+ });
27
+ }
28
+ return event;
29
+ }));
30
+ }
31
+ /**
32
+ * Regresa una respuesta HTTP descifrada
33
+ * @param request - Petición web
34
+ * @param response - Respuesta web a descifrar
35
+ * @returns Respuesta http descifrada
36
+ */
37
+ descifrarResponse(request, response) {
38
+ const responseDefinition = request.context.get(RESPONSE_TOKEN);
39
+ if (responseDefinition && response.body) {
40
+ return this.reflectionService.descifrarDatos(response.body, responseDefinition);
41
+ }
42
+ return response.body;
43
+ }
44
+ /**
45
+ * Cifra los datos de la petición interceptada y regresa una nueva petición con los datos cifrados
46
+ * @param request - Petición Http
47
+ * @returns - Petición con datos cifrados
48
+ */
49
+ cifrarRequest(request) {
50
+ return request.method === 'POST' ?
51
+ request.clone({ body: this.reflectionService.cifrarDatos(request.body) }) :
52
+ request.clone({ url: this.cifrarPeticionUrl(request) });
53
+ }
54
+ /**
55
+ * Realiza el cifrado de la petición cuando los datos a cifrar se mandan en la URL
56
+ * @param request - Petición HTTP
57
+ * @returns StringQueryParams cifrados en URL
58
+ */
59
+ cifrarPeticionUrl(request) {
60
+ const requestData = request.context.get(REQUEST_TOKEN);
61
+ const queryParams = [];
62
+ const queryObject = {};
63
+ new URL(request.url).searchParams.forEach((value, key) => {
64
+ queryObject[key] = value;
65
+ });
66
+ if (typeof requestData === 'object') {
67
+ Object.entries(queryObject).forEach(([key, value]) => {
68
+ if (!requestData[key]) {
69
+ requestData[key] = value;
70
+ }
71
+ });
72
+ Object.entries(this.reflectionService.cifrarDatos(requestData)).forEach(([key, value]) => {
73
+ if (value && typeof value !== 'object') {
74
+ queryParams.push(`${key}=${encodeURI((value))}`);
75
+ }
76
+ });
77
+ }
78
+ const paramsString = queryParams.length ? `?${queryParams.join('&')}` : '';
79
+ const fixedURL = (request.url || '').split('?')[0];
80
+ return `${fixedURL}${paramsString}`;
81
+ }
82
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.4", ngImport: i0, type: RediSecureInterceptor, deps: [{ token: i1.ReflectionService }], target: i0.ɵɵFactoryTarget.Injectable }); }
83
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.4", ngImport: i0, type: RediSecureInterceptor }); }
84
+ }
85
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.4", ngImport: i0, type: RediSecureInterceptor, decorators: [{
86
+ type: Injectable
87
+ }], ctorParameters: () => [{ type: i1.ReflectionService }] });
88
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVkaS1zZWN1cmUuaW50ZXJjZXB0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtcmVkaS1jb3JlL1NlY3VyaXR5L3NyYy9tb2R1bGVzL3NlY3VyaXR5LXdlYi1pbnRlcmNlcHQvaW50ZXJjZXB0b3JzL3JlZGktc2VjdXJlLmludGVyY2VwdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBS0wsZ0JBQWdCLEVBQ2hCLFlBQVksRUFDYixNQUFNLHNCQUFzQixDQUFDO0FBRTlCLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7O0FBR3JDLDBDQUEwQztBQUMxQyxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBVSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN0RSwyQ0FBMkM7QUFDM0MsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLElBQUksZ0JBQWdCLENBQVUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFFdkU7OztHQUdHO0FBRUgsTUFBTSxPQUFPLHFCQUFxQjtJQUNoQyxZQUE2QixpQkFBb0M7UUFBcEMsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtJQUFJLENBQUM7SUFFdEUsU0FBUyxDQUFDLE9BQTZCLEVBQUUsSUFBaUI7UUFDeEQsd0NBQXdDO1FBQ3hDLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2FBQzVDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDaEIsSUFBSSxLQUFLLFlBQVksWUFBWSxFQUFFLENBQUM7Z0JBQ2xDLE9BQVEsS0FBYSxDQUFDLEtBQUssQ0FBQztvQkFD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Q0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ25ELE9BQU8sR0FBRyxRQUFRLEdBQUcsWUFBWSxFQUFFLENBQUM7SUFDdEMsQ0FBQzs4R0FwRVUscUJBQXFCO2tIQUFyQixxQkFBcUI7OzJGQUFyQixxQkFBcUI7a0JBRGpDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgJ3JlZmxlY3QtbWV0YWRhdGEnO1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7XHJcbiAgSHR0cFJlcXVlc3QsXHJcbiAgSHR0cEhhbmRsZXIsXHJcbiAgSHR0cEV2ZW50LFxyXG4gIEh0dHBJbnRlcmNlcHRvcixcclxuICBIdHRwQ29udGV4dFRva2VuLFxyXG4gIEh0dHBSZXNwb25zZVxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IFJlZmxlY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvcmVmbGVjdGlvbi5zZXJ2aWNlJztcclxuXHJcbi8qKiBSZXF1ZXN0IHRva2VuIHBhcmEgZWwgY29udGV4dG8gSHR0cCAqL1xyXG5leHBvcnQgY29uc3QgUkVRVUVTVF9UT0tFTiA9IG5ldyBIdHRwQ29udGV4dFRva2VuPHVua25vd24+KCgpID0+IHsgfSk7XHJcbi8qKiBSZXNwb25zZSB0b2tlbiBwYXJhIGVsIGNvbnRleHRvIEh0dHAgKi9cclxuZXhwb3J0IGNvbnN0IFJFU1BPTlNFX1RPS0VOID0gbmV3IEh0dHBDb250ZXh0VG9rZW48dW5rbm93bj4oKCkgPT4geyB9KTtcclxuXHJcbi8qKlxyXG4gKiBJbnRlcmNlcHRvciBkZSBzZWd1cmlkYWQgcXVlIGNpZnJhIHkgZGVzY2lmcmEgaW5mb3JtYWNpw7NuIHNlbnNpYmxlIGVuIGxhcyBwZXRpY2lvbmVzIFdlYlxyXG4gKiBAZGVjb3JhdG9yIGBASW5qZWN0YWJsZSgpYFxyXG4gKi9cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgUmVkaVNlY3VyZUludGVyY2VwdG9yIGltcGxlbWVudHMgSHR0cEludGVyY2VwdG9yIHtcclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IHJlZmxlY3Rpb25TZXJ2aWNlOiBSZWZsZWN0aW9uU2VydmljZSkgeyB9XHJcblxyXG4gIGludGVyY2VwdChyZXF1ZXN0OiBIdHRwUmVxdWVzdDx1bmtub3duPiwgbmV4dDogSHR0cEhhbmRsZXIpOiBPYnNlcnZhYmxlPEh0dHBFdmVudDx1bmtub3duPj4ge1xyXG4gICAgLyoqIENpZnJhbW9zIGxvcyBkYXRvcyBkZSBsYSBwZXRpY2nDs24gKi9cclxuICAgIHJldHVybiBuZXh0LmhhbmRsZSh0aGlzLmNpZnJhclJlcXVlc3QocmVxdWVzdCkpXHJcbiAgICAgIC5waXBlKG1hcChldmVudCA9PiB7XHJcbiAgICAgICAgaWYgKGV2ZW50IGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlKSB7XHJcbiAgICAgICAgICByZXR1cm4gKGV2ZW50IGFzIGFueSkuY2xvbmUoe1xyXG4gICAgICAgICAgICBib2R5OiB0aGlzLmRlc2NpZnJhclJlc3BvbnNlKHJlcXVlc3QsIGV2ZW50KVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBldmVudDtcclxuICAgICAgfSkpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVncmVzYSB1bmEgcmVzcHVlc3RhIEhUVFAgZGVzY2lmcmFkYVxyXG4gICAqIEBwYXJhbSByZXF1ZXN0IC0gUGV0aWNpw7NuIHdlYlxyXG4gICAqIEBwYXJhbSByZXNwb25zZSAtIFJlc3B1ZXN0YSB3ZWIgYSBkZXNjaWZyYXJcclxuICAgKiBAcmV0dXJucyBSZXNwdWVzdGEgaHR0cCBkZXNjaWZyYWRhXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBkZXNjaWZyYXJSZXNwb25zZShyZXF1ZXN0OiBIdHRwUmVxdWVzdDx1bmtub3duPiwgcmVzcG9uc2U6IEh0dHBSZXNwb25zZTx1bmtub3duPik6IHVua25vd24ge1xyXG4gICAgY29uc3QgcmVzcG9uc2VEZWZpbml0aW9uID0gcmVxdWVzdC5jb250ZXh0LmdldChSRVNQT05TRV9UT0tFTik7XHJcbiAgICBpZiAocmVzcG9uc2VEZWZpbml0aW9uICYmIHJlc3BvbnNlLmJvZHkpIHtcclxuICAgICAgcmV0dXJuIHRoaXMucmVmbGVjdGlvblNlcnZpY2UuZGVzY2lmcmFyRGF0b3MocmVzcG9uc2UuYm9keSwgcmVzcG9uc2VEZWZpbml0aW9uKTtcclxuICAgIH1cclxuICAgIHJldHVybiByZXNwb25zZS5ib2R5O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2lmcmEgbG9zIGRhdG9zIGRlIGxhIHBldGljacOzbiBpbnRlcmNlcHRhZGEgeSByZWdyZXNhIHVuYSBudWV2YSBwZXRpY2nDs24gY29uIGxvcyBkYXRvcyBjaWZyYWRvc1xyXG4gICAqIEBwYXJhbSByZXF1ZXN0IC0gUGV0aWNpw7NuIEh0dHBcclxuICAgKiBAcmV0dXJucyAtIFBldGljacOzbiBjb24gZGF0b3MgY2lmcmFkb3NcclxuICAgKi9cclxuICBwcml2YXRlIGNpZnJhclJlcXVlc3QocmVxdWVzdDogSHR0cFJlcXVlc3Q8dW5rbm93bj4pOiBIdHRwUmVxdWVzdDx1bmtub3duPiB7XHJcbiAgICByZXR1cm4gcmVxdWVzdC5tZXRob2QgPT09ICdQT1NUJyA/XHJcbiAgICAgIHJlcXVlc3QuY2xvbmUoeyBib2R5OiB0aGlzLnJlZmxlY3Rpb25TZXJ2aWNlLmNpZnJhckRhdG9zKHJlcXVlc3QuYm9keSkgfSkgOlxyXG4gICAgICByZXF1ZXN0LmNsb25lKHsgdXJsOiB0aGlzLmNpZnJhclBldGljaW9uVXJsKHJlcXVlc3QpIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVhbGl6YSBlbCBjaWZyYWRvIGRlIGxhIHBldGljacOzbiBjdWFuZG8gbG9zIGRhdG9zIGEgY2lmcmFyIHNlIG1hbmRhbiBlbiBsYSBVUkxcclxuICAgKiBAcGFyYW0gcmVxdWVzdCAtIFBldGljacOzbiBIVFRQXHJcbiAgICogQHJldHVybnMgU3RyaW5nUXVlcnlQYXJhbXMgY2lmcmFkb3MgZW4gVVJMXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBjaWZyYXJQZXRpY2lvblVybChyZXF1ZXN0OiBIdHRwUmVxdWVzdDx1bmtub3duPik6IHN0cmluZyB7XHJcbiAgICBjb25zdCByZXF1ZXN0RGF0YSA9IHJlcXVlc3QuY29udGV4dC5nZXQoUkVRVUVTVF9UT0tFTik7XHJcbiAgICBjb25zdCBxdWVyeVBhcmFtczogc3RyaW5nW10gPSBbXTtcclxuICAgIGNvbnN0IHF1ZXJ5T2JqZWN0OiBhbnkgPSB7fTtcclxuICAgIG5ldyBVUkwocmVxdWVzdC51cmwpLnNlYXJjaFBhcmFtcy5mb3JFYWNoKCh2YWx1ZSwga2V5KSA9PiB7XHJcbiAgICAgIHF1ZXJ5T2JqZWN0W2tleV0gPSB2YWx1ZTtcclxuICAgIH0pO1xyXG4gICAgaWYgKHR5cGVvZiByZXF1ZXN0RGF0YSA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgT2JqZWN0LmVudHJpZXMocXVlcnlPYmplY3QpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xyXG4gICAgICAgIGlmICghKHJlcXVlc3REYXRhIGFzIGFueSlba2V5XSkge1xyXG4gICAgICAgICAgKHJlcXVlc3REYXRhIGFzIGFueSlba2V5XSA9IHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIE9iamVjdC5lbnRyaWVzKHRoaXMucmVmbGVjdGlvblNlcnZpY2UuY2lmcmFyRGF0b3MocmVxdWVzdERhdGEpKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcclxuICAgICAgICBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0Jykge1xyXG4gICAgICAgICAgcXVlcnlQYXJhbXMucHVzaChgJHtrZXl9PSR7ZW5jb2RlVVJJKCh2YWx1ZSkgYXMgc3RyaW5nKX1gKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgY29uc3QgcGFyYW1zU3RyaW5nID0gcXVlcnlQYXJhbXMubGVuZ3RoID8gYD8ke3F1ZXJ5UGFyYW1zLmpvaW4oJyYnKX1gIDogJyc7XHJcbiAgICBjb25zdCBmaXhlZFVSTCA9IChyZXF1ZXN0LnVybCB8fCAnJykuc3BsaXQoJz8nKVswXTtcclxuICAgIHJldHVybiBgJHtmaXhlZFVSTH0ke3BhcmFtc1N0cmluZ31gO1xyXG4gIH1cclxuXHJcbn1cclxuXHJcbiJdfQ==
@@ -0,0 +1,27 @@
1
+ import 'reflect-metadata';
2
+ /**
3
+ * Fabrica de decoradores para del modulo de seguridad
4
+ * @param cipher Indica el algoritmo de cifrado
5
+ */
6
+ export function secure(cipher) {
7
+ /**
8
+ * Función para la fabrica de decoradores de clases y propiedades
9
+ * @param target Target del decorador
10
+ * @param propertyKey Nombre de la propiedad
11
+ * @returns Function de devolución para la fabrica de decoradores
12
+ */
13
+ return function (target, propertyKey) {
14
+ if (propertyKey) {
15
+ Reflect.defineProperty(target, propertyKey, { writable: true });
16
+ Reflect.defineMetadata(TOKEN_SECURE, cipher, target, propertyKey);
17
+ }
18
+ else {
19
+ Reflect.defineMetadata(TOKEN_SECURE, cipher, target.prototype);
20
+ }
21
+ };
22
+ }
23
+ /**
24
+ * Token para decorador de seguridad
25
+ */
26
+ export const TOKEN_SECURE = secure.name;
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjdXJlLWZhY3RvcnkubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtcmVkaS1jb3JlL1NlY3VyaXR5L3NyYy9tb2R1bGVzL3NlY3VyaXR5LXdlYi1pbnRlcmNlcHQvbW9kZWxzL3NlY3VyZS1mYWN0b3J5Lm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sa0JBQWtCLENBQUM7QUFFMUI7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLE1BQU0sQ0FBQyxNQUFlO0lBQ2xDOzs7OztPQUtHO0lBQ0gsT0FBTyxVQUFVLE1BQWUsRUFBRSxXQUFvQjtRQUNsRCxJQUFJLFdBQVcsRUFBRSxDQUFDO1lBQ2QsT0FBTyxDQUFDLGNBQWMsQ0FBQyxNQUFhLEVBQUUsV0FBVyxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7WUFDdkUsT0FBTyxDQUFDLGNBQWMsQ0FBQyxZQUFZLEVBQUUsTUFBTSxFQUFFLE1BQWEsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUM3RSxDQUFDO2FBQ0ksQ0FBQztZQUNGLE9BQU8sQ0FBQyxjQUFjLENBQUMsWUFBWSxFQUFFLE1BQU0sRUFBRyxNQUFjLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDNUUsQ0FBQztJQUNMLENBQUMsQ0FBQztBQUNOLENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICdyZWZsZWN0LW1ldGFkYXRhJztcclxuXHJcbi8qKlxyXG4gKiBGYWJyaWNhIGRlIGRlY29yYWRvcmVzIHBhcmEgZGVsIG1vZHVsbyBkZSBzZWd1cmlkYWRcclxuICogQHBhcmFtIGNpcGhlciBJbmRpY2EgZWwgYWxnb3JpdG1vIGRlIGNpZnJhZG9cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBzZWN1cmUoY2lwaGVyPzogc3RyaW5nKSB7XHJcbiAgICAvKipcclxuICAgICAqIEZ1bmNpw7NuIHBhcmEgbGEgZmFicmljYSBkZSBkZWNvcmFkb3JlcyBkZSBjbGFzZXMgeSBwcm9waWVkYWRlc1xyXG4gICAgICogQHBhcmFtIHRhcmdldCBUYXJnZXQgZGVsIGRlY29yYWRvclxyXG4gICAgICogQHBhcmFtIHByb3BlcnR5S2V5IE5vbWJyZSBkZSBsYSBwcm9waWVkYWRcclxuICAgICAqIEByZXR1cm5zIEZ1bmN0aW9uIGRlIGRldm9sdWNpw7NuIHBhcmEgbGEgZmFicmljYSBkZSBkZWNvcmFkb3Jlc1xyXG4gICAgICovXHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldDogdW5rbm93biwgcHJvcGVydHlLZXk/OiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAocHJvcGVydHlLZXkpIHtcclxuICAgICAgICAgICAgUmVmbGVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQgYXMgYW55LCBwcm9wZXJ0eUtleSwgeyB3cml0YWJsZTogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgUmVmbGVjdC5kZWZpbmVNZXRhZGF0YShUT0tFTl9TRUNVUkUsIGNpcGhlciwgdGFyZ2V0IGFzIGFueSwgcHJvcGVydHlLZXkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgUmVmbGVjdC5kZWZpbmVNZXRhZGF0YShUT0tFTl9TRUNVUkUsIGNpcGhlciwgKHRhcmdldCBhcyBhbnkpLnByb3RvdHlwZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFRva2VuIHBhcmEgZGVjb3JhZG9yIGRlIHNlZ3VyaWRhZFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IFRPS0VOX1NFQ1VSRSA9IHNlY3VyZS5uYW1lO1xyXG4iXX0=
@@ -0,0 +1,51 @@
1
+ import { Injectable } from '@angular/core';
2
+ import * as CryptoJS from 'crypto-js';
3
+ import * as i0 from "@angular/core";
4
+ export class CifradoBasicoService {
5
+ constructor() {
6
+ this.secretPass = 'NGX-REDI-CORE-PASS-DEFAULT';
7
+ this.llave = CryptoJS.enc.Utf8.parse(this.secretPass);
8
+ this.llave_tamanio = 256;
9
+ this.vector = CryptoJS.lib.WordArray.create(this.llave.words.slice(0, 4));
10
+ this.vector_tamanio = 128;
11
+ this.iterations = 100;
12
+ }
13
+ encrypt_dos(msg) {
14
+ const salt = CryptoJS.lib.WordArray.random(128 / 8);
15
+ const key = CryptoJS.PBKDF2(this.secretPass, salt, {
16
+ keySize: this.llave_tamanio / 32,
17
+ iterations: this.iterations
18
+ });
19
+ const iv = CryptoJS.lib.WordArray.random(128 / 8);
20
+ const encrypted = CryptoJS.AES.encrypt(msg, key, {
21
+ iv: iv,
22
+ padding: CryptoJS.pad.Pkcs7,
23
+ mode: CryptoJS.mode.CBC
24
+ });
25
+ return salt.toString() + iv.toString() + encrypted.toString();
26
+ }
27
+ decrypt_dos(transitmessage) {
28
+ const salt = CryptoJS.enc.Hex.parse(transitmessage.substring(0, 32));
29
+ const iv = CryptoJS.enc.Hex.parse(transitmessage.substring(32, 64));
30
+ const encrypted = transitmessage.substring(64);
31
+ const key = CryptoJS.PBKDF2(this.secretPass, salt, {
32
+ keySize: this.llave_tamanio / 32,
33
+ iterations: this.iterations
34
+ });
35
+ const decrypted = CryptoJS.AES.decrypt(encrypted, key, {
36
+ iv: iv,
37
+ padding: CryptoJS.pad.Pkcs7,
38
+ mode: CryptoJS.mode.CBC
39
+ });
40
+ return decrypted.toString(CryptoJS.enc.Utf8);
41
+ }
42
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.4", ngImport: i0, type: CifradoBasicoService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
43
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.4", ngImport: i0, type: CifradoBasicoService, providedIn: 'root' }); }
44
+ }
45
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.4", ngImport: i0, type: CifradoBasicoService, decorators: [{
46
+ type: Injectable,
47
+ args: [{
48
+ providedIn: 'root'
49
+ }]
50
+ }] });
51
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2lmcmFkby1iYXNpY28uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1yZWRpLWNvcmUvU2VjdXJpdHkvc3JjL21vZHVsZXMvc2VjdXJpdHktd2ViLWludGVyY2VwdC9zZXJ2aWNlcy9jaWZyYWRvLWJhc2ljby5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxLQUFLLFFBQVEsTUFBTSxXQUFXLENBQUM7O0FBTXRDLE1BQU0sT0FBTyxvQkFBb0I7SUFIakM7UUFJRSxlQUFVLEdBQUcsNEJBQTRCLENBQUM7UUFDMUMsVUFBSyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDakQsa0JBQWEsR0FBRyxHQUFHLENBQUM7UUFFcEIsV0FBTSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDckUsbUJBQWMsR0FBRyxHQUFHLENBQUM7UUFDckIsZUFBVSxHQUFHLEdBQUcsQ0FBQztLQXNDbEI7SUFwQ0MsV0FBVyxDQUFDLEdBQVc7UUFDckIsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNwRCxNQUFNLEdBQUcsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFO1lBQ2pELE9BQU8sRUFBRSxJQUFJLENBQUMsYUFBYSxHQUFHLEVBQUU7WUFDaEMsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVO1NBQzVCLENBQUMsQ0FBQztRQUVILE1BQU0sRUFBRSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDbEQsTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRTtZQUMvQyxFQUFFLEVBQUUsRUFBRTtZQUNOLE9BQU8sRUFBRSxRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUs7WUFDM0IsSUFBSSxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRztTQUN4QixDQUFDLENBQUM7UUFFSCxPQUFPLElBQUksQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUMsUUFBUSxFQUFFLEdBQUcsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2hFLENBQUM7SUFHRCxXQUFXLENBQUMsY0FBc0I7UUFDaEMsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDckUsTUFBTSxFQUFFLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUE7UUFDbkUsTUFBTSxTQUFTLEdBQUcsY0FBYyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUUvQyxNQUFNLEdBQUcsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFO1lBQ2pELE9BQU8sRUFBRSxJQUFJLENBQUMsYUFBYSxHQUFHLEVBQUU7WUFDaEMsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVO1NBQzVCLENBQUMsQ0FBQztRQUVILE1BQU0sU0FBUyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxHQUFHLEVBQUU7WUFDckQsRUFBRSxFQUFFLEVBQUU7WUFDTixPQUFPLEVBQUUsUUFBUSxDQUFDLEdBQUcsQ0FBQyxLQUFLO1lBQzNCLElBQUksRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUc7U0FFeEIsQ0FBQyxDQUFBO1FBQ0YsT0FBTyxTQUFTLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDL0MsQ0FBQzs4R0E1Q1Usb0JBQW9CO2tIQUFwQixvQkFBb0IsY0FGbkIsTUFBTTs7MkZBRVAsb0JBQW9CO2tCQUhoQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0ICogYXMgQ3J5cHRvSlMgZnJvbSAnY3J5cHRvLWpzJztcclxuXHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDaWZyYWRvQmFzaWNvU2VydmljZSB7XHJcbiAgc2VjcmV0UGFzcyA9ICdOR1gtUkVESS1DT1JFLVBBU1MtREVGQVVMVCc7XHJcbiAgbGxhdmUgPSBDcnlwdG9KUy5lbmMuVXRmOC5wYXJzZSh0aGlzLnNlY3JldFBhc3MpO1xyXG4gIGxsYXZlX3RhbWFuaW8gPSAyNTY7XHJcblxyXG4gIHZlY3RvciA9IENyeXB0b0pTLmxpYi5Xb3JkQXJyYXkuY3JlYXRlKHRoaXMubGxhdmUud29yZHMuc2xpY2UoMCwgNCkpO1xyXG4gIHZlY3Rvcl90YW1hbmlvID0gMTI4O1xyXG4gIGl0ZXJhdGlvbnMgPSAxMDA7XHJcblxyXG4gIGVuY3J5cHRfZG9zKG1zZzogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBzYWx0ID0gQ3J5cHRvSlMubGliLldvcmRBcnJheS5yYW5kb20oMTI4IC8gOCk7XHJcbiAgICBjb25zdCBrZXkgPSBDcnlwdG9KUy5QQktERjIodGhpcy5zZWNyZXRQYXNzLCBzYWx0LCB7XHJcbiAgICAgIGtleVNpemU6IHRoaXMubGxhdmVfdGFtYW5pbyAvIDMyLFxyXG4gICAgICBpdGVyYXRpb25zOiB0aGlzLml0ZXJhdGlvbnNcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IGl2ID0gQ3J5cHRvSlMubGliLldvcmRBcnJheS5yYW5kb20oMTI4IC8gOCk7XHJcbiAgICBjb25zdCBlbmNyeXB0ZWQgPSBDcnlwdG9KUy5BRVMuZW5jcnlwdChtc2csIGtleSwge1xyXG4gICAgICBpdjogaXYsXHJcbiAgICAgIHBhZGRpbmc6IENyeXB0b0pTLnBhZC5Qa2NzNyxcclxuICAgICAgbW9kZTogQ3J5cHRvSlMubW9kZS5DQkNcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBzYWx0LnRvU3RyaW5nKCkgKyBpdi50b1N0cmluZygpICsgZW5jcnlwdGVkLnRvU3RyaW5nKCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgZGVjcnlwdF9kb3ModHJhbnNpdG1lc3NhZ2U6IHN0cmluZykge1xyXG4gICAgY29uc3Qgc2FsdCA9IENyeXB0b0pTLmVuYy5IZXgucGFyc2UodHJhbnNpdG1lc3NhZ2Uuc3Vic3RyaW5nKDAsIDMyKSk7XHJcbiAgICBjb25zdCBpdiA9IENyeXB0b0pTLmVuYy5IZXgucGFyc2UodHJhbnNpdG1lc3NhZ2Uuc3Vic3RyaW5nKDMyLCA2NCkpXHJcbiAgICBjb25zdCBlbmNyeXB0ZWQgPSB0cmFuc2l0bWVzc2FnZS5zdWJzdHJpbmcoNjQpO1xyXG5cclxuICAgIGNvbnN0IGtleSA9IENyeXB0b0pTLlBCS0RGMih0aGlzLnNlY3JldFBhc3MsIHNhbHQsIHtcclxuICAgICAga2V5U2l6ZTogdGhpcy5sbGF2ZV90YW1hbmlvIC8gMzIsXHJcbiAgICAgIGl0ZXJhdGlvbnM6IHRoaXMuaXRlcmF0aW9uc1xyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgZGVjcnlwdGVkID0gQ3J5cHRvSlMuQUVTLmRlY3J5cHQoZW5jcnlwdGVkLCBrZXksIHtcclxuICAgICAgaXY6IGl2LFxyXG4gICAgICBwYWRkaW5nOiBDcnlwdG9KUy5wYWQuUGtjczcsXHJcbiAgICAgIG1vZGU6IENyeXB0b0pTLm1vZGUuQ0JDXHJcblxyXG4gICAgfSlcclxuICAgIHJldHVybiBkZWNyeXB0ZWQudG9TdHJpbmcoQ3J5cHRvSlMuZW5jLlV0ZjgpO1xyXG4gIH1cclxufVxyXG4iXX0=
@@ -0,0 +1,33 @@
1
+ import { Injectable } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ /**
4
+ * Servicio de cifrado y descifrado de información
5
+ * @decorator `@Injectable()`
6
+ */
7
+ export class CifradoService {
8
+ /**
9
+ * Método que realiza el cifrado de los datos tipo Texto
10
+ * @param data - Texto a cifrar
11
+ * @returns Datos cifrados en modo tex
12
+ */
13
+ cifrar(data) {
14
+ return window.btoa(encodeURIComponent(data));
15
+ }
16
+ /**
17
+ * Método que descifra el texto
18
+ * @params data - Texto a descifrar
19
+ * @returns Texto descifrado
20
+ */
21
+ descifrar(data) {
22
+ return window.atob(decodeURIComponent(data));
23
+ }
24
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.4", ngImport: i0, type: CifradoService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
25
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.4", ngImport: i0, type: CifradoService, providedIn: 'root' }); }
26
+ }
27
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.4", ngImport: i0, type: CifradoService, decorators: [{
28
+ type: Injectable,
29
+ args: [{
30
+ providedIn: 'root'
31
+ }]
32
+ }] });
33
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2lmcmFkby5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXJlZGktY29yZS9TZWN1cml0eS9zcmMvbW9kdWxlcy9zZWN1cml0eS13ZWItaW50ZXJjZXB0L3NlcnZpY2VzL2NpZnJhZG8uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUUzQzs7O0dBR0c7QUFJSCxNQUFNLE9BQU8sY0FBYztJQUV6Qjs7OztPQUlHO0lBQ0ksTUFBTSxDQUFDLElBQVk7UUFDeEIsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxTQUFTLENBQUMsSUFBWTtRQUMzQixPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUMvQyxDQUFDOzhHQWxCVSxjQUFjO2tIQUFkLGNBQWMsY0FGYixNQUFNOzsyRkFFUCxjQUFjO2tCQUgxQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbi8qKlxyXG4gKiBTZXJ2aWNpbyBkZSBjaWZyYWRvIHkgZGVzY2lmcmFkbyBkZSBpbmZvcm1hY2nDs25cclxuICogQGRlY29yYXRvciBgQEluamVjdGFibGUoKWBcclxuICovXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIENpZnJhZG9TZXJ2aWNlIHtcclxuXHJcbiAgLyoqXHJcbiAgICogTcOpdG9kbyBxdWUgcmVhbGl6YSBlbCBjaWZyYWRvIGRlIGxvcyBkYXRvcyB0aXBvIFRleHRvXHJcbiAgICogQHBhcmFtIGRhdGEgLSBUZXh0byBhIGNpZnJhclxyXG4gICAqIEByZXR1cm5zIERhdG9zIGNpZnJhZG9zIGVuIG1vZG8gdGV4XHJcbiAgICovXHJcbiAgcHVibGljIGNpZnJhcihkYXRhOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHdpbmRvdy5idG9hKGVuY29kZVVSSUNvbXBvbmVudChkYXRhKSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNw6l0b2RvIHF1ZSBkZXNjaWZyYSBlbCB0ZXh0b1xyXG4gICAqIEBwYXJhbXMgZGF0YSAtIFRleHRvIGEgZGVzY2lmcmFyXHJcbiAgICogQHJldHVybnMgVGV4dG8gZGVzY2lmcmFkb1xyXG4gICAqL1xyXG4gIHB1YmxpYyBkZXNjaWZyYXIoZGF0YTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB3aW5kb3cuYXRvYihkZWNvZGVVUklDb21wb25lbnQoZGF0YSkpO1xyXG4gIH1cclxufVxyXG4iXX0=
@@ -0,0 +1,122 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { TOKEN_SECURE } from '../models/secure-factory.model';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "./cifrado.service";
5
+ export class ReflectionService {
6
+ constructor(cifradoService) {
7
+ this.cifradoService = cifradoService;
8
+ }
9
+ /**
10
+ * Valida si la propiedad de un objeto es segura
11
+ * @param data - Objeto a validar
12
+ * @param key - Propiedad del objeto a validar
13
+ * @returns True si es una propiedad segura
14
+ */
15
+ isValidDecorator(data, key) {
16
+ return data != null && this.propertyHasDecorator(data, key);
17
+ }
18
+ /**
19
+ * Valida si la propiedad tiene el decorador de seguridad
20
+ * @param data - Entidad objetivo
21
+ * @param key - Nombre de la propiedad
22
+ */
23
+ propertyHasDecorator(data, key) {
24
+ return Reflect.hasMetadata(TOKEN_SECURE, data ?? {}, key);
25
+ }
26
+ /**
27
+ * Valida si un objeto es seguro
28
+ * @param data - Objeto a validar
29
+ * @returns True si existe el decorador @Secure
30
+ */
31
+ hasDecorator(data) {
32
+ return data != null && Reflect.hasMetadata(TOKEN_SECURE, data);
33
+ }
34
+ /**
35
+ * Valida si es un objeto y no esta nulo
36
+ * @param object - Objeto a validar
37
+ * @returns True si es un objeto valido
38
+ */
39
+ isValidObject(object) {
40
+ return object != null && typeof object === 'object';
41
+ }
42
+ /**
43
+ * Cifra los datos especificados
44
+ * @param datos - Datos a cifrar
45
+ * @returns Regresa el objeto con los datos cifrados
46
+ */
47
+ cifrarDatos(datos) {
48
+ if (this.isValidObject(datos)) {
49
+ const contenedor = Array.isArray(datos) ? [] : {};
50
+ Object.entries(datos ?? {}).forEach(([key, value]) => {
51
+ if (this.isValidObject(value)) {
52
+ contenedor[key] = this.cifrarDatos(value);
53
+ }
54
+ else if (this.isValidDecorator(datos, key)) {
55
+ contenedor[key] = this.cifrarTexto(value);
56
+ }
57
+ else {
58
+ contenedor[key] = value;
59
+ }
60
+ });
61
+ return this.hasDecorator(datos) ? this.cifrarTexto(JSON.stringify(contenedor)) : contenedor;
62
+ }
63
+ return datos;
64
+ }
65
+ /**
66
+ * Descifra los datos a partir de una definición
67
+ * @param datos - Datos a descifrar
68
+ * @param definition - Definición de los datos con los decoradores seguros
69
+ * @returns Datos descifrados
70
+ */
71
+ descifrarDatos(datos, definition) {
72
+ let contenedor = datos;
73
+ if (datos && definition) {
74
+ if (Array.isArray(datos)) {
75
+ contenedor = [];
76
+ Object.entries(datos).forEach(([, value]) => {
77
+ contenedor.push(this.descifrarDatos(value, definition));
78
+ });
79
+ }
80
+ else {
81
+ contenedor = {};
82
+ Object.entries(datos).forEach(([key, value]) => {
83
+ if (this.isValidObject(value)) {
84
+ contenedor[key] = this.descifrarDatos(value, definition.prototype[key]);
85
+ }
86
+ else if (this.propertyHasDecorator(definition.prototype, key)) {
87
+ contenedor[key] = this.decifrarTexto(value);
88
+ }
89
+ else {
90
+ contenedor[key] = value;
91
+ }
92
+ });
93
+ }
94
+ }
95
+ return contenedor;
96
+ }
97
+ /**
98
+ * Cifra el texto especificado
99
+ * @param datos - Contiene los datos que se cifraran
100
+ * @returns Datos cifrados
101
+ */
102
+ cifrarTexto(datos) {
103
+ return this.cifradoService.cifrar(datos);
104
+ }
105
+ /**
106
+ * Descifra el texto proporcionado
107
+ * @param datos - Contiene los datos que se descifraran
108
+ * @returns Datos descifrados
109
+ */
110
+ decifrarTexto(datosCifrados) {
111
+ return this.cifradoService.descifrar(datosCifrados);
112
+ }
113
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.4", ngImport: i0, type: ReflectionService, deps: [{ token: i1.CifradoService }], target: i0.ɵɵFactoryTarget.Injectable }); }
114
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.4", ngImport: i0, type: ReflectionService, providedIn: 'root' }); }
115
+ }
116
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.4", ngImport: i0, type: ReflectionService, decorators: [{
117
+ type: Injectable,
118
+ args: [{
119
+ providedIn: 'root'
120
+ }]
121
+ }], ctorParameters: () => [{ type: i1.CifradoService }] });
122
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVmbGVjdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXJlZGktY29yZS9TZWN1cml0eS9zcmMvbW9kdWxlcy9zZWN1cml0eS13ZWItaW50ZXJjZXB0L3NlcnZpY2VzL3JlZmxlY3Rpb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQzs7O0FBTTlELE1BQU0sT0FBTyxpQkFBaUI7SUFDNUIsWUFBNkIsY0FBOEI7UUFBOUIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO0lBQUksQ0FBQztJQUNoRTs7Ozs7T0FLRztJQUNLLGdCQUFnQixDQUFDLElBQWEsRUFBRSxHQUFXO1FBQ2pELE9BQU8sSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFRDs7OztPQUlHO0lBQ0ssb0JBQW9CLENBQUMsSUFBYSxFQUFFLEdBQVc7UUFDckQsT0FBTyxPQUFPLENBQUMsV0FBVyxDQUFDLFlBQVksRUFBRSxJQUFJLElBQUksRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFRDs7OztPQUlHO0lBQ0ssWUFBWSxDQUFDLElBQWE7UUFDaEMsT0FBTyxJQUFJLElBQUksSUFBSSxJQUFJLE9BQU8sQ0FBQyxXQUFXLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ2pFLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ssYUFBYSxDQUFDLE1BQWU7UUFDbkMsT0FBTyxNQUFNLElBQUksSUFBSSxJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsQ0FBQztJQUN0RCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLFdBQVcsQ0FBQyxL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T0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNLLGFBQWEsQ0FBQyxhQUFxQjtRQUN6QyxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ3RELENBQUM7OEdBakhVLGlCQUFpQjtrSEFBakIsaUJBQWlCLGNBRmhCLE1BQU07OzJGQUVQLGlCQUFpQjtrQkFIN0IsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFRPS0VOX1NFQ1VSRSB9IGZyb20gJy4uL21vZGVscy9zZWN1cmUtZmFjdG9yeS5tb2RlbCc7XHJcbmltcG9ydCB7IENpZnJhZG9TZXJ2aWNlIH0gZnJvbSAnLi9jaWZyYWRvLnNlcnZpY2UnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgUmVmbGVjdGlvblNlcnZpY2Uge1xyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgY2lmcmFkb1NlcnZpY2U6IENpZnJhZG9TZXJ2aWNlKSB7IH1cclxuICAvKipcclxuICAgKiBWYWxpZGEgc2kgbGEgcHJvcGllZGFkIGRlIHVuIG9iamV0byBlcyBzZWd1cmFcclxuICAgKiBAcGFyYW0gZGF0YSAtIE9iamV0byBhIHZhbGlkYXJcclxuICAgKiBAcGFyYW0ga2V5IC0gUHJvcGllZGFkIGRlbCBvYmpldG8gYSB2YWxpZGFyXHJcbiAgICogQHJldHVybnMgVHJ1ZSBzaSBlcyB1bmEgcHJvcGllZGFkIHNlZ3VyYVxyXG4gICAqL1xyXG4gIHByaXZhdGUgaXNWYWxpZERlY29yYXRvcihkYXRhOiB1bmtub3duLCBrZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIGRhdGEgIT0gbnVsbCAmJiB0aGlzLnByb3BlcnR5SGFzRGVjb3JhdG9yKGRhdGEsIGtleSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBWYWxpZGEgc2kgbGEgcHJvcGllZGFkIHRpZW5lIGVsIGRlY29yYWRvciBkZSBzZWd1cmlkYWRcclxuICAgKiBAcGFyYW0gZGF0YSAtIEVudGlkYWQgb2JqZXRpdm9cclxuICAgKiBAcGFyYW0ga2V5IC0gTm9tYnJlIGRlIGxhIHByb3BpZWRhZFxyXG4gICAqL1xyXG4gIHByaXZhdGUgcHJvcGVydHlIYXNEZWNvcmF0b3IoZGF0YTogdW5rbm93biwga2V5OiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBSZWZsZWN0Lmhhc01ldGFkYXRhKFRPS0VOX1NFQ1VSRSwgZGF0YSA/PyB7fSwga2V5KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFZhbGlkYSBzaSB1biBvYmpldG8gZXMgc2VndXJvXHJcbiAgICogQHBhcmFtIGRhdGEgLSBPYmpldG8gYSB2YWxpZGFyXHJcbiAgICogQHJldHVybnMgVHJ1ZSBzaSBleGlzdGUgZWwgZGVjb3JhZG9yIEBTZWN1cmVcclxuICAgKi9cclxuICBwcml2YXRlIGhhc0RlY29yYXRvcihkYXRhOiB1bmtub3duKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gZGF0YSAhPSBudWxsICYmIFJlZmxlY3QuaGFzTWV0YWRhdGEoVE9LRU5fU0VDVVJFLCBkYXRhKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFZhbGlkYSBzaSBlcyB1biBvYmpldG8geSBubyBlc3RhIG51bG9cclxuICAgKiBAcGFyYW0gb2JqZWN0IC0gT2JqZXRvIGEgdmFsaWRhclxyXG4gICAqIEByZXR1cm5zIFRydWUgc2kgZXMgdW4gb2JqZXRvIHZhbGlkb1xyXG4gICAqL1xyXG4gIHByaXZhdGUgaXNWYWxpZE9iamVjdChvYmplY3Q6IHVua25vd24pOiBib29sZWFuIHtcclxuICAgIHJldHVybiBvYmplY3QgIT0gbnVsbCAmJiB0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0JztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENpZnJhIGxvcyBkYXRvcyBlc3BlY2lmaWNhZG9zXHJcbiAgICogQHBhcmFtIGRhdG9zIC0gRGF0b3MgYSBjaWZyYXJcclxuICAgKiBAcmV0dXJucyBSZWdyZXNhIGVsIG9iamV0byBjb24gbG9zIGRhdG9zIGNpZnJhZG9zXHJcbiAgICovXHJcbiAgcHVibGljIGNpZnJhckRhdG9zKGRhdG9zOiB1bmtub3duKTogYW55IHtcclxuICAgIGlmICh0aGlzLmlzVmFsaWRPYmplY3QoZGF0b3MpKSB7XHJcbiAgICAgIGNvbnN0IGNvbnRlbmVkb3I6IGFueSA9IEFycmF5LmlzQXJyYXkoZGF0b3MpID8gW10gOiB7fTtcclxuICAgICAgT2JqZWN0LmVudHJpZXMoZGF0b3MgPz8ge30pLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLmlzVmFsaWRPYmplY3QodmFsdWUpKSB7XHJcbiAgICAgICAgICBjb250ZW5lZG9yW2tleV0gPSB0aGlzLmNpZnJhckRhdG9zKHZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy5pc1ZhbGlkRGVjb3JhdG9yKGRhdG9zLCBrZXkpKSB7XHJcbiAgICAgICAgICBjb250ZW5lZG9yW2tleV0gPSB0aGlzLmNpZnJhclRleHRvKHZhbHVlIGFzIHN0cmluZyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgY29udGVuZWRvcltrZXldID0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuIHRoaXMuaGFzRGVjb3JhdG9yKGRhdG9zKSA/IHRoaXMuY2lmcmFyVGV4dG8oSlNPTi5zdHJpbmdpZnkoY29udGVuZWRvcikpIDogY29udGVuZWRvcjtcclxuICAgIH1cclxuICAgIHJldHVybiBkYXRvcztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERlc2NpZnJhIGxvcyBkYXRvcyBhIHBhcnRpciBkZSB1bmEgZGVmaW5pY2nDs25cclxuICAgKiBAcGFyYW0gZGF0b3MgLSBEYXRvcyBhIGRlc2NpZnJhclxyXG4gICAqIEBwYXJhbSBkZWZpbml0aW9uIC0gRGVmaW5pY2nDs24gZGUgbG9zIGRhdG9zIGNvbiBsb3MgZGVjb3JhZG9yZXMgc2VndXJvc1xyXG4gICAqIEByZXR1cm5zIERhdG9zIGRlc2NpZnJhZG9zXHJcbiAgICovXHJcbiAgcHVibGljIGRlc2NpZnJhckRhdG9zKGRhdG9zOiB1bmtub3duLCBkZWZpbml0aW9uOiB1bmtub3duKTogYW55IHtcclxuICAgIGxldCBjb250ZW5lZG9yOiB1bmtub3duID0gZGF0b3M7XHJcbiAgICBpZiAoZGF0b3MgJiYgZGVmaW5pdGlvbikge1xyXG5cclxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZGF0b3MpKSB7XHJcbiAgICAgICAgY29udGVuZWRvciA9IFtdO1xyXG4gICAgICAgIE9iamVjdC5lbnRyaWVzKGRhdG9zKS5mb3JFYWNoKChbLCB2YWx1ZV0pID0+IHtcclxuICAgICAgICAgIChjb250ZW5lZG9yIGFzIEFycmF5PHVua25vd24+KS5wdXNoKHRoaXMuZGVzY2lmcmFyRGF0b3ModmFsdWUsIGRlZmluaXRpb24pKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBjb250ZW5lZG9yID0ge307XHJcbiAgICAgICAgT2JqZWN0LmVudHJpZXMoZGF0b3MpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHRoaXMuaXNWYWxpZE9iamVjdCh2YWx1ZSkpIHtcclxuICAgICAgICAgICAgKGNvbnRlbmVkb3IgYXMgYW55KVtrZXldID0gdGhpcy5kZXNjaWZyYXJEYXRvcyh2YWx1ZSwgKGRlZmluaXRpb24gYXMgYW55KS5wcm90b3R5cGVba2V5XSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIGlmICh0aGlzLnByb3BlcnR5SGFzRGVjb3JhdG9yKChkZWZpbml0aW9uIGFzIGFueSkucHJvdG90eXBlLCBrZXkpKSB7XHJcbiAgICAgICAgICAgIChjb250ZW5lZG9yIGFzIGFueSlba2V5XSA9IHRoaXMuZGVjaWZyYXJUZXh0byh2YWx1ZSBhcyBzdHJpbmcpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIChjb250ZW5lZG9yIGFzIGFueSlba2V5XSA9IHZhbHVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY29udGVuZWRvciBhcyBhbnk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDaWZyYSBlbCB0ZXh0byBlc3BlY2lmaWNhZG9cclxuICAgKiBAcGFyYW0gZGF0b3MgLSBDb250aWVuZSBsb3MgZGF0b3MgcXVlIHNlIGNpZnJhcmFuXHJcbiAgICogQHJldHVybnMgRGF0b3MgY2lmcmFkb3NcclxuICAgKi9cclxuICBwcml2YXRlIGNpZnJhclRleHRvKGRhdG9zOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuY2lmcmFkb1NlcnZpY2UuY2lmcmFyKGRhdG9zKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERlc2NpZnJhIGVsIHRleHRvIHByb3BvcmNpb25hZG9cclxuICAgKiBAcGFyYW0gZGF0b3MgLSBDb250aWVuZSBsb3MgZGF0b3MgcXVlIHNlIGRlc2NpZnJhcmFuXHJcbiAgICogQHJldHVybnMgRGF0b3MgZGVzY2lmcmFkb3NcclxuICAgKi9cclxuICBwcml2YXRlIGRlY2lmcmFyVGV4dG8oZGF0b3NDaWZyYWRvczogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmNpZnJhZG9TZXJ2aWNlLmRlc2NpZnJhcihkYXRvc0NpZnJhZG9zKTtcclxuICB9XHJcbn1cclxuIl19
@@ -0,0 +1,23 @@
1
+ import { NgModule } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import * as i0 from "@angular/core";
4
+ /**
5
+ * Modulo de seguridad
6
+ * @decorators `@NgModule`
7
+ */
8
+ export class SecurityModule {
9
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.4", ngImport: i0, type: SecurityModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
10
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.0.4", ngImport: i0, type: SecurityModule, imports: [CommonModule] }); }
11
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.0.4", ngImport: i0, type: SecurityModule, imports: [CommonModule] }); }
12
+ }
13
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.4", ngImport: i0, type: SecurityModule, decorators: [{
14
+ type: NgModule,
15
+ args: [{
16
+ declarations: [],
17
+ imports: [
18
+ CommonModule
19
+ ],
20
+ exports: []
21
+ }]
22
+ }] });
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjdXJpdHkubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXJlZGktY29yZS9TZWN1cml0eS9zcmMvbW9kdWxlcy9zZWN1cml0eS5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7O0FBRS9DOzs7R0FHRztBQVFILE1BQU0sT0FBTyxjQUFjOzhHQUFkLGNBQWM7K0dBQWQsY0FBYyxZQUp2QixZQUFZOytHQUlILGNBQWMsWUFKdkIsWUFBWTs7MkZBSUgsY0FBYztrQkFQMUIsUUFBUTttQkFBQztvQkFDUixZQUFZLEVBQUUsRUFBRTtvQkFDaEIsT0FBTyxFQUFFO3dCQUNQLFlBQVk7cUJBQ2I7b0JBQ0QsT0FBTyxFQUFFLEVBQUU7aUJBQ1oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5cclxuLyoqXHJcbiAqIE1vZHVsbyBkZSBzZWd1cmlkYWRcclxuICogQGRlY29yYXRvcnMgYEBOZ01vZHVsZWBcclxuICovXHJcbkBOZ01vZHVsZSh7XHJcbiAgZGVjbGFyYXRpb25zOiBbXSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBDb21tb25Nb2R1bGVcclxuICBdLFxyXG4gIGV4cG9ydHM6IFtdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTZWN1cml0eU1vZHVsZSB7IH1cclxuIl19
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './public-api';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LXJlZGktY29yZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL25neC1yZWRpLWNvcmUvbmd4LXJlZGktY29yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsY0FBYyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL3B1YmxpYy1hcGknO1xuIl19
@@ -0,0 +1,8 @@
1
+ /*
2
+ * Public API Surface of ngx-redi-core
3
+ */
4
+ /**
5
+ * TOKEN de biblioteca
6
+ */
7
+ export const REDI_CORE = 'ngx-redi-core';
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL25neC1yZWRpLWNvcmUvcHVibGljLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVIOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLGVBQWUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIFB1YmxpYyBBUEkgU3VyZmFjZSBvZiBuZ3gtcmVkaS1jb3JlXHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRPS0VOIGRlIGJpYmxpb3RlY2FcclxuICovXHJcbmV4cG9ydCBjb25zdCBSRURJX0NPUkUgPSAnbmd4LXJlZGktY29yZSc7Il19
@@ -0,0 +1,166 @@
1
+ import * as i0 from '@angular/core';
2
+ import { Injectable } from '@angular/core';
3
+ import { Subject } from 'rxjs';
4
+
5
+ /**
6
+ * Servicio que provee métodos para trabajar con datos CSV
7
+ */
8
+ class CsvService {
9
+ /**
10
+ * Genera el texto CSV a partir de un archivo
11
+ * @param data- Datos a construir
12
+ * @returns CSV texto
13
+ */
14
+ generarCsv(data) {
15
+ const datos = data.map(d => {
16
+ return Object.values(d)
17
+ .filter(p => this.tipoSerializable(p))
18
+ .map(v => v.includes(',') ? `"${v}"` : v);
19
+ });
20
+ return datos.map(d => { return Object.values(d).join(','); }).join('\n');
21
+ }
22
+ /**
23
+ * Método que indica si la propiedad es serializable
24
+ * @param propiedad - Propiedad a validar
25
+ * @returns True si es una propiedad serializable
26
+ */
27
+ tipoSerializable(propiedad) {
28
+ return typeof (propiedad) !== 'object' &&
29
+ typeof (propiedad) !== 'function';
30
+ }
31
+ /**
32
+ * Descarga el CSV a partir de los datos establecidos
33
+ * @param archivo - Nombre del archivo a descargar
34
+ * @param data - Arreglo de datos a descargar
35
+ */
36
+ descargarCsv(archivo, data) {
37
+ const blob = new Blob([BOM_CSV, this.generarCsv(data)], { type: TYPE_CSV });
38
+ const link = this.generarLink(archivo, blob);
39
+ document.body.appendChild(link);
40
+ link.click();
41
+ document.body.removeChild(link);
42
+ }
43
+ /**
44
+ * Genera el link para el blob y archivo establecidos
45
+ * @param archivo - Nombre del archivo a descargar
46
+ * @param blob - Contenido del blob
47
+ * @returns link
48
+ */
49
+ generarLink(archivo, blob) {
50
+ const link = document.createElement('a');
51
+ if (link.download !== undefined) {
52
+ link.setAttribute('href', URL.createObjectURL(blob));
53
+ link.setAttribute('download', archivo);
54
+ link.style.visibility = 'hidden';
55
+ }
56
+ return link;
57
+ }
58
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.4", ngImport: i0, type: CsvService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
59
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.4", ngImport: i0, type: CsvService, providedIn: 'root' }); }
60
+ }
61
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.4", ngImport: i0, type: CsvService, decorators: [{
62
+ type: Injectable,
63
+ args: [{
64
+ providedIn: 'root'
65
+ }]
66
+ }] });
67
+ /** Tipo MIME CSV + Encode */
68
+ const TYPE_CSV = 'text/csv;charset=utf-8;';
69
+ /** BOM CSV */
70
+ const BOM_CSV = new Uint8Array([0xEF, 0xBB, 0xBF]);
71
+
72
+ /**
73
+ * Servicio para compartir datos
74
+ * @decorators `@Injectable`
75
+ */
76
+ class DataSubjectService {
77
+ /**
78
+ * Crea un nuevo servicio de Datos compartidos
79
+ */
80
+ constructor() {
81
+ this.data = {};
82
+ this.subject = new Subject();
83
+ this.observer = this.subject.asObservable();
84
+ }
85
+ /**
86
+ * Emite los datos a los subscriptores
87
+ * @param data Datos a emitir
88
+ */
89
+ broadcast(data) {
90
+ this.data = data;
91
+ this.subject.next(data);
92
+ }
93
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.4", ngImport: i0, type: DataSubjectService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
94
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.4", ngImport: i0, type: DataSubjectService, providedIn: 'root' }); }
95
+ }
96
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.4", ngImport: i0, type: DataSubjectService, decorators: [{
97
+ type: Injectable,
98
+ args: [{
99
+ providedIn: 'root'
100
+ }]
101
+ }], ctorParameters: () => [] });
102
+
103
+ /**
104
+ * Servicio para compartir datos entre micro-fronts
105
+ * @decorators `@Injectable`
106
+ */
107
+ class BagDataSubjectService {
108
+ /**
109
+ * Crea un nuevo servicio de datos compartido
110
+ */
111
+ constructor() {
112
+ this.subjects = {};
113
+ }
114
+ /**
115
+ * Obtiene el subjet dada un identificador
116
+ * @param subject Identificador
117
+ * @returns Servicio de datos
118
+ */
119
+ getSubject(subject) {
120
+ let result = Reflect.get(this.subjects, subject);
121
+ if (!result) {
122
+ result = new DataSubjectService();
123
+ Reflect.defineProperty(this.subjects, subject, { value: result });
124
+ }
125
+ return result;
126
+ }
127
+ /**
128
+ * Asigna los datos a un servicio mediante su identificador
129
+ * @param subject Identificador del servicio
130
+ * @param data Datos a emitir
131
+ */
132
+ setData(subject, data) {
133
+ return this.getSubject(subject).broadcast(data);
134
+ }
135
+ /**
136
+ * Obtiene el ultimo dato del servicio especificando su identificador
137
+ * @param subject Identificador del servicio
138
+ * @returns Dato
139
+ */
140
+ getData(subject) {
141
+ return this.getSubject(subject).data;
142
+ }
143
+ /**
144
+ * Obtiene el observable especificando el servicio
145
+ * @param subject Identificador del servicio
146
+ * @returns Observable<T>
147
+ */
148
+ getObservable(subject) {
149
+ return this.getSubject(subject).observer;
150
+ }
151
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.4", ngImport: i0, type: BagDataSubjectService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
152
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.4", ngImport: i0, type: BagDataSubjectService, providedIn: 'root' }); }
153
+ }
154
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.4", ngImport: i0, type: BagDataSubjectService, decorators: [{
155
+ type: Injectable,
156
+ args: [{
157
+ providedIn: 'root'
158
+ }]
159
+ }], ctorParameters: () => [] });
160
+
161
+ /**
162
+ * Generated bundle index. Do not edit.
163
+ */
164
+
165
+ export { BagDataSubjectService, CsvService, DataSubjectService };
166
+ //# sourceMappingURL=ngx-redi-core-Helper.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ngx-redi-core-Helper.mjs","sources":["../../../projects/ngx-redi-core/Helper/src/helpers/csv.service.ts","../../../projects/ngx-redi-core/Helper/src/helpers/data-subject.service.ts","../../../projects/ngx-redi-core/Helper/src/helpers/bag-data-subject.service.ts","../../../projects/ngx-redi-core/Helper/ngx-redi-core-Helper.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\r\n/**\r\n * Servicio que provee métodos para trabajar con datos CSV\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class CsvService {\r\n /**\r\n * Genera el texto CSV a partir de un archivo\r\n * @param data- Datos a construir\r\n * @returns CSV texto\r\n */\r\n public generarCsv<T extends {}>(data: Array<T>): string {\r\n const datos = data.map(d => {\r\n return Object.values(d)\r\n .filter(p => this.tipoSerializable(p))\r\n .map(v => (v as string).includes(',') ? `\"${v}\"` : v);\r\n });\r\n return datos.map(d => { return Object.values(d).join(','); }).join('\\n');\r\n }\r\n\r\n /**\r\n * Método que indica si la propiedad es serializable\r\n * @param propiedad - Propiedad a validar\r\n * @returns True si es una propiedad serializable\r\n */\r\n private tipoSerializable(propiedad: unknown): boolean {\r\n return typeof (propiedad) !== 'object' &&\r\n typeof (propiedad) !== 'function';\r\n }\r\n\r\n /**\r\n * Descarga el CSV a partir de los datos establecidos\r\n * @param archivo - Nombre del archivo a descargar\r\n * @param data - Arreglo de datos a descargar\r\n */\r\n public descargarCsv<T extends {}>(archivo: string, data: Array<T>): void {\r\n const blob = new Blob([BOM_CSV, this.generarCsv(data)], { type: TYPE_CSV });\r\n const link = this.generarLink(archivo, blob);\r\n document.body.appendChild(link);\r\n link.click();\r\n document.body.removeChild(link);\r\n }\r\n\r\n /**\r\n * Genera el link para el blob y archivo establecidos\r\n * @param archivo - Nombre del archivo a descargar\r\n * @param blob - Contenido del blob\r\n * @returns link\r\n */\r\n private generarLink(archivo: string, blob: Blob): HTMLAnchorElement {\r\n const link = document.createElement('a') as HTMLAnchorElement;\r\n if (link.download !== undefined) {\r\n link.setAttribute('href', URL.createObjectURL(blob));\r\n link.setAttribute('download', archivo);\r\n link.style.visibility = 'hidden';\r\n }\r\n return link;\r\n }\r\n\r\n}\r\n\r\n/** Tipo MIME CSV + Encode */\r\nconst TYPE_CSV = 'text/csv;charset=utf-8;';\r\n/** BOM CSV */\r\nconst BOM_CSV = new Uint8Array([0xEF, 0xBB, 0xBF]);\r\n","import { Injectable } from '@angular/core';\r\nimport { Observable, Subject } from 'rxjs';\r\nimport { DataSubject } from '../models/interfaces/data-subject.interface';\r\n\r\n/**\r\n * Servicio para compartir datos\r\n * @decorators `@Injectable`\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class DataSubjectService<T> implements DataSubject<T> {\r\n /**\r\n * Crea un nuevo servicio de Datos compartidos\r\n */\r\n constructor() {\r\n this.data = {} as T;\r\n this.subject = new Subject();\r\n this.observer = this.subject.asObservable();\r\n }\r\n\r\n /**\r\n * Contiene el subject que emite datos\r\n */\r\n private readonly subject: Subject<T>;\r\n\r\n /**\r\n * Emite los datos a los subscriptores\r\n * @param data Datos a emitir\r\n */\r\n public broadcast(data: T): void {\r\n this.data = data;\r\n this.subject.next(data);\r\n }\r\n\r\n /**\r\n * Contiene el ultimo dato emitido\r\n */\r\n public data: T;\r\n\r\n /**\r\n * Observable que notifica los cambios\r\n */\r\n public observer: Observable<T>;\r\n}","import { Injectable } from '@angular/core';\r\nimport { DataSubjectService } from './data-subject.service';\r\nimport { Observable } from 'rxjs';\r\n\r\n/**\r\n * Servicio para compartir datos entre micro-fronts\r\n * @decorators `@Injectable`\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class BagDataSubjectService {\r\n\r\n /**\r\n * Crea un nuevo servicio de datos compartido\r\n */\r\n constructor() {\r\n this.subjects = {};\r\n }\r\n\r\n /**\r\n * Obtiene el subjet dada un identificador\r\n * @param subject Identificador\r\n * @returns Servicio de datos\r\n */\r\n public getSubject<T>(subject: string): DataSubjectService<T> {\r\n let result = Reflect.get(this.subjects, subject);\r\n if (!result) {\r\n result = new DataSubjectService<T>();\r\n Reflect.defineProperty(this.subjects, subject, { value: result });\r\n }\r\n return result as DataSubjectService<T>;\r\n }\r\n\r\n /**\r\n * Asigna los datos a un servicio mediante su identificador\r\n * @param subject Identificador del servicio\r\n * @param data Datos a emitir\r\n */\r\n public setData<T>(subject: string, data: T): void {\r\n return this.getSubject<T>(subject).broadcast(data);\r\n }\r\n\r\n /**\r\n * Obtiene el ultimo dato del servicio especificando su identificador\r\n * @param subject Identificador del servicio\r\n * @returns Dato\r\n */\r\n public getData<T>(subject: string): T {\r\n return this.getSubject(subject).data as T;\r\n }\r\n\r\n /**\r\n * Obtiene el observable especificando el servicio\r\n * @param subject Identificador del servicio\r\n * @returns Observable<T>\r\n */\r\n public getObservable<T>(subject: string): Observable<T> {\r\n return this.getSubject(subject).observer as Observable<T>;\r\n }\r\n\r\n /**\r\n * Objeto contenedor de los subjects\r\n */\r\n private subjects: object;\r\n}","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}