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.
- package/Helper/index.d.ts +5 -0
- package/Helper/package.json +3 -0
- package/Helper/public-api.d.ts +3 -0
- package/Helper/src/helpers/bag-data-subject.service.d.ts +43 -0
- package/Helper/src/helpers/csv.service.d.ts +33 -0
- package/Helper/src/helpers/data-subject.service.d.ts +32 -0
- package/Helper/src/models/interfaces/data-subject.interface.d.ts +6 -0
- package/README.md +24 -0
- package/RediDragDrop/index.d.ts +5 -0
- package/RediDragDrop/package.json +3 -0
- package/RediDragDrop/public-api.d.ts +4 -0
- package/RediDragDrop/src/models/classes/proceso-archivo-csv.d.ts +29 -0
- package/RediDragDrop/src/models/directives/drag-drop.directive.d.ts +43 -0
- package/RediDragDrop/src/modules/redi-drag-drop/redi-drag-drop.component.d.ts +188 -0
- package/RediDragDrop/src/modules/redi-drag-drop.module.d.ts +13 -0
- package/RediGrid/index.d.ts +5 -0
- package/RediGrid/package.json +3 -0
- package/RediGrid/public-api.d.ts +4 -0
- package/RediGrid/src/models/interfaces/cell.d.ts +37 -0
- package/RediGrid/src/models/interfaces/data-grid.d.ts +30 -0
- package/RediGrid/src/modules/redi-grid/redi-grid.component.d.ts +92 -0
- package/RediGrid/src/modules/redi-grid.module.d.ts +14 -0
- package/RediTable/index.d.ts +5 -0
- package/RediTable/package.json +3 -0
- package/RediTable/public-api.d.ts +6 -0
- package/RediTable/src/components/filter-data/filter-data.component.d.ts +23 -0
- package/RediTable/src/components/redi-table/redi-table.component.d.ts +139 -0
- package/RediTable/src/models/interfaces/column-definition.d.ts +18 -0
- package/RediTable/src/models/interfaces/data-table.d.ts +24 -0
- package/RediTable/src/models/interfaces/filter-item.d.ts +5 -0
- package/RediTable/src/models/interfaces/row-action.d.ts +24 -0
- package/RediTable/src/models/types/event-table.type.d.ts +5 -0
- package/Security/index.d.ts +5 -0
- package/Security/package.json +3 -0
- package/Security/public-api.d.ts +6 -0
- package/Security/src/modules/security-web-intercept/interceptors/redi-secure.interceptor.d.ts +39 -0
- package/Security/src/modules/security-web-intercept/models/secure-factory.model.d.ts +10 -0
- package/Security/src/modules/security-web-intercept/services/cifrado-basico.service.d.ts +14 -0
- package/Security/src/modules/security-web-intercept/services/cifrado.service.d.ts +21 -0
- package/Security/src/modules/security-web-intercept/services/reflection.service.d.ts +58 -0
- package/Security/src/modules/security.module.d.ts +11 -0
- package/esm2022/Helper/ngx-redi-core-Helper.mjs +5 -0
- package/esm2022/Helper/public-api.mjs +4 -0
- package/esm2022/Helper/src/helpers/bag-data-subject.service.mjs +61 -0
- package/esm2022/Helper/src/helpers/csv.service.mjs +69 -0
- package/esm2022/Helper/src/helpers/data-subject.service.mjs +34 -0
- package/esm2022/Helper/src/models/interfaces/data-subject.interface.mjs +2 -0
- package/esm2022/RediDragDrop/ngx-redi-core-RediDragDrop.mjs +5 -0
- package/esm2022/RediDragDrop/public-api.mjs +5 -0
- package/esm2022/RediDragDrop/src/models/classes/proceso-archivo-csv.mjs +132 -0
- package/esm2022/RediDragDrop/src/models/directives/drag-drop.directive.mjs +95 -0
- package/esm2022/RediDragDrop/src/modules/redi-drag-drop/redi-drag-drop.component.mjs +369 -0
- package/esm2022/RediDragDrop/src/modules/redi-drag-drop.module.mjs +34 -0
- package/esm2022/RediGrid/ngx-redi-core-RediGrid.mjs +5 -0
- package/esm2022/RediGrid/public-api.mjs +5 -0
- package/esm2022/RediGrid/src/models/interfaces/cell.mjs +2 -0
- package/esm2022/RediGrid/src/models/interfaces/data-grid.mjs +2 -0
- package/esm2022/RediGrid/src/modules/redi-grid/redi-grid.component.mjs +159 -0
- package/esm2022/RediGrid/src/modules/redi-grid.module.mjs +34 -0
- package/esm2022/RediTable/ngx-redi-core-RediTable.mjs +5 -0
- package/esm2022/RediTable/public-api.mjs +9 -0
- package/esm2022/RediTable/src/components/filter-data/filter-data.component.mjs +84 -0
- package/esm2022/RediTable/src/components/redi-table/redi-table.component.mjs +404 -0
- package/esm2022/RediTable/src/models/interfaces/column-definition.mjs +2 -0
- package/esm2022/RediTable/src/models/interfaces/data-table.mjs +2 -0
- package/esm2022/RediTable/src/models/interfaces/filter-item.mjs +2 -0
- package/esm2022/RediTable/src/models/interfaces/row-action.mjs +2 -0
- package/esm2022/RediTable/src/models/types/event-table.type.mjs +2 -0
- package/esm2022/Security/ngx-redi-core-Security.mjs +5 -0
- package/esm2022/Security/public-api.mjs +7 -0
- package/esm2022/Security/src/modules/security-web-intercept/interceptors/redi-secure.interceptor.mjs +88 -0
- package/esm2022/Security/src/modules/security-web-intercept/models/secure-factory.model.mjs +27 -0
- package/esm2022/Security/src/modules/security-web-intercept/services/cifrado-basico.service.mjs +51 -0
- package/esm2022/Security/src/modules/security-web-intercept/services/cifrado.service.mjs +33 -0
- package/esm2022/Security/src/modules/security-web-intercept/services/reflection.service.mjs +122 -0
- package/esm2022/Security/src/modules/security.module.mjs +23 -0
- package/esm2022/ngx-redi-core.mjs +5 -0
- package/esm2022/public-api.mjs +8 -0
- package/fesm2022/ngx-redi-core-Helper.mjs +166 -0
- package/fesm2022/ngx-redi-core-Helper.mjs.map +1 -0
- package/fesm2022/ngx-redi-core-RediDragDrop.mjs +628 -0
- package/fesm2022/ngx-redi-core-RediDragDrop.mjs.map +1 -0
- package/fesm2022/ngx-redi-core-RediGrid.mjs +196 -0
- package/fesm2022/ngx-redi-core-RediGrid.mjs.map +1 -0
- package/fesm2022/ngx-redi-core-RediTable.mjs +496 -0
- package/fesm2022/ngx-redi-core-RediTable.mjs.map +1 -0
- package/fesm2022/ngx-redi-core-Security.mjs +339 -0
- package/fesm2022/ngx-redi-core-Security.mjs.map +1 -0
- package/fesm2022/ngx-redi-core.mjs +14 -0
- package/fesm2022/ngx-redi-core.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/package.json +57 -0
- package/public-api.d.ts +4 -0
package/esm2022/Security/src/modules/security-web-intercept/interceptors/redi-secure.interceptor.mjs
ADDED
|
@@ -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=
|
package/esm2022/Security/src/modules/security-web-intercept/services/cifrado-basico.service.mjs
ADDED
|
@@ -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":";;;;AACA;;AAEG;MAIU,UAAU,CAAA;AACrB;;;;AAIK;AACE,IAAA,UAAU,CAAe,IAAc,EAAA;QAC5C,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,IAAG;AACzB,YAAA,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;iBACpB,MAAM,CAAC,CAAC,IAAI,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;iBACrC,GAAG,CAAC,CAAC,IAAK,CAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAA,CAAA,CAAG,GAAG,CAAC,CAAC,CAAC;AAC1D,SAAC,CAAC,CAAC;AACH,QAAA,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAG,EAAG,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KAC1E;AAED;;;;AAIG;AACK,IAAA,gBAAgB,CAAC,SAAkB,EAAA;AACzC,QAAA,OAAO,QAAQ,SAAS,CAAC,KAAK,QAAQ;AACpC,YAAA,QAAQ,SAAS,CAAC,KAAK,UAAU,CAAC;KACrC;AAED;;;;AAIG;IACI,YAAY,CAAe,OAAe,EAAE,IAAc,EAAA;QAC/D,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC5E,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AAC7C,QAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAChC,IAAI,CAAC,KAAK,EAAE,CAAC;AACb,QAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;KACjC;AAED;;;;;AAKG;IACK,WAAW,CAAC,OAAe,EAAE,IAAU,EAAA;QAC7C,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAsB,CAAC;AAC9D,QAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,EAAE;AAC/B,YAAA,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC;AACrD,YAAA,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;AACvC,YAAA,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,QAAQ,CAAC;SAClC;AACD,QAAA,OAAO,IAAI,CAAC;KACb;8GApDU,UAAU,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAAV,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAU,cAFT,MAAM,EAAA,CAAA,CAAA,EAAA;;2FAEP,UAAU,EAAA,UAAA,EAAA,CAAA;kBAHtB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;AAyDD;AACA,MAAM,QAAQ,GAAG,yBAAyB,CAAC;AAC3C;AACA,MAAM,OAAO,GAAG,IAAI,UAAU,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;;AC9DlD;;;AAGG;MAIU,kBAAkB,CAAA;AAC7B;;AAEG;AACH,IAAA,WAAA,GAAA;AACE,QAAA,IAAI,CAAC,IAAI,GAAG,EAAO,CAAC;AACpB,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;QAC7B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;KAC7C;AAOD;;;AAGG;AACI,IAAA,SAAS,CAAC,IAAO,EAAA;AACtB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACjB,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KACzB;8GAtBU,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAAlB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,cAFjB,MAAM,EAAA,CAAA,CAAA,EAAA;;2FAEP,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAH9B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;;ACND;;;AAGG;MAIU,qBAAqB,CAAA;AAEhC;;AAEG;AACH,IAAA,WAAA,GAAA;AACE,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;KACpB;AAED;;;;AAIG;AACI,IAAA,UAAU,CAAI,OAAe,EAAA;AAClC,QAAA,IAAI,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACjD,IAAI,CAAC,MAAM,EAAE;AACX,YAAA,MAAM,GAAG,IAAI,kBAAkB,EAAK,CAAC;AACrC,YAAA,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;SACnE;AACD,QAAA,OAAO,MAA+B,CAAC;KACxC;AAED;;;;AAIG;IACI,OAAO,CAAI,OAAe,EAAE,IAAO,EAAA;QACxC,OAAO,IAAI,CAAC,UAAU,CAAI,OAAO,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;KACpD;AAED;;;;AAIG;AACI,IAAA,OAAO,CAAI,OAAe,EAAA;QAC/B,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,IAAS,CAAC;KAC3C;AAED;;;;AAIG;AACI,IAAA,aAAa,CAAI,OAAe,EAAA;QACrC,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,QAAyB,CAAC;KAC3D;8GAhDU,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAArB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qBAAqB,cAFpB,MAAM,EAAA,CAAA,CAAA,EAAA;;2FAEP,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAHjC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;;ACVD;;AAEG;;;;"}
|