¡Esta es una revisión vieja del documento!
Esta librería funciona como un repositorio centralizado de componentes, permitiendo compartir y reutilizar elementos visuales de manera consistente en todas las aplicaciones. Al mantener un sistema de diseño unificado, garantiza la coherencia visual y mejora la eficiencia del desarrollo, reduciendo la duplicación de código y simplificando el mantenimiento de la interfaz de usuario.
Para comenzar, sigue estos pasos:
npm i crypto-js
"crypto-util-library": "http://10.1.40.130:8081/repository/npm-hosted/crypto-util-library/-/crypto-util-library-1.0.0.tgz"
import { CryptoUtil } from 'crypto-util-library';
decryptResponse(data: any) { return this.cryptoUtil.decryptObject(data); }
encryptData(data: any) { return this.cryptoUtil.encryptObject(data); }
import { CryptoConfig } from './crypto.config'; import { CryptoUtilLibraryService } from '../services/crypto-util-library.service';
export const cryptoInterceptorInterceptor = (config: CryptoConfig): HttpInterceptorFn ⇒
(request, next) => { // Inyecta el servicio de encriptación y desencriptación const cryptoService = inject(CryptoUtilLibraryService); // Verifica si la URL de la solicitud debe excluirse del proceso de encriptación/desencriptación const shouldSkip = config.excludedUrls.some(url => request.url.includes(url) ); if (shouldSkip) { return next(request); // Si la URL está excluida, continúa la solicitud sin modificaciones } // Si la solicitud tiene un cuerpo, se procede a encriptarlo antes de enviarlo if (request.body) { return from(cryptoService.encryptData(request.body)).pipe( switchMap(encryptedBody => { // Clona la solicitud con el cuerpo encriptado const clonedRequest = request.clone({ body: encryptedBody }); return next(clonedRequest).pipe( switchMap(event => { // Si la respuesta es un HttpResponse y tiene un cuerpo, se desencripta if (event instanceof HttpResponse && event.body) { const decryptedBodyPromise = cryptoService.decryptResponse(event.body); return from(decryptedBodyPromise).pipe( map(decryptedBody => event.clone({ body: decryptedBody })) ); } return [event]; }), catchError(error => { // Si ocurre un error y contiene un cuerpo, se intenta desencriptar el mensaje de error if (error instanceof HttpErrorResponse && error.error) { const decryptedErrorPromise = cryptoService.decryptResponse(error.error); return from(decryptedErrorPromise).pipe( switchMap(decryptedError => { // Clona el error con el mensaje desencriptado const clonedError = new HttpErrorResponse({ ...error, error: decryptedError, url: error.url ?? undefined }); return throwError(() => clonedError); }) ); } return throwError(() => error); // Si no es un error encriptado, lanza el error original }) ); }) ); } // Si la solicitud no tiene un cuerpo, solo se maneja la desencriptación de la respuesta return next(request).pipe( switchMap(event => { if (event instanceof HttpResponse && event.body) { const decryptedBodyPromise = cryptoService.decryptResponse(event.body); return from(decryptedBodyPromise).pipe( map(decryptedBody => event.clone({ body: decryptedBody })) ); } return [event]; }), catchError(error => { if (error instanceof HttpErrorResponse && error.error) { const decryptedErrorPromise = cryptoService.decryptResponse(error.error); return from(decryptedErrorPromise).pipe( switchMap(decryptedError => { const clonedError = new HttpErrorResponse({ ...error, error: decryptedError, url: error.url ?? undefined }); return throwError(() => clonedError); }) ); } return throwError(() => error); }) ); };