valtech-components 4.0.170 → 4.0.172
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/esm2022/lib/components/organisms/html-viewer-modal/html-viewer-modal.component.mjs +8 -22
- package/esm2022/lib/services/auth/auth.service.mjs +16 -3
- package/esm2022/lib/services/auth/interceptor.mjs +17 -4
- package/esm2022/lib/version.mjs +2 -2
- package/fesm2022/valtech-components.mjs +37 -25
- package/fesm2022/valtech-components.mjs.map +1 -1
- package/lib/components/organisms/html-viewer-modal/html-viewer-modal.component.d.ts +5 -5
- package/lib/version.d.ts +1 -1
- package/package.json +1 -1
|
@@ -1,11 +1,18 @@
|
|
|
1
1
|
import { inject } from '@angular/core';
|
|
2
2
|
import { throwError, BehaviorSubject } from 'rxjs';
|
|
3
|
-
import { catchError, filter, take, switchMap, finalize } from 'rxjs/operators';
|
|
3
|
+
import { catchError, filter, take, switchMap, finalize, timeout } from 'rxjs/operators';
|
|
4
4
|
import { AuthService } from './auth.service';
|
|
5
5
|
import { VALTECH_AUTH_CONFIG } from './config';
|
|
6
6
|
// Control de estado de refresco (singleton a nivel de módulo)
|
|
7
7
|
let isRefreshing = false;
|
|
8
8
|
const refreshTokenSubject = new BehaviorSubject(null);
|
|
9
|
+
/**
|
|
10
|
+
* Tope de espera para una request encolada detrás de un refresh en curso. Si el
|
|
11
|
+
* refresh se cuelga (red/Lambda fría), sin este límite la request encolada espera
|
|
12
|
+
* para siempre y la navegación post-login se atasca. Levemente mayor al timeout
|
|
13
|
+
* del propio refresh (REFRESH_TIMEOUT_MS=10s) para darle margen a resolver.
|
|
14
|
+
*/
|
|
15
|
+
const QUEUED_REQUEST_TIMEOUT_MS = 12000;
|
|
9
16
|
/**
|
|
10
17
|
* Interceptor HTTP que:
|
|
11
18
|
* 1. Agrega header Authorization con Bearer token a requests API
|
|
@@ -120,7 +127,13 @@ function handle401Error(request, next, authService) {
|
|
|
120
127
|
isRefreshing = false;
|
|
121
128
|
}));
|
|
122
129
|
}
|
|
123
|
-
// Esperar a que termine el refresco en curso
|
|
124
|
-
|
|
130
|
+
// Esperar a que termine el refresco en curso. Con timeout: si el refresh
|
|
131
|
+
// se cuelga, la request encolada no espera para siempre (evita el atasco de
|
|
132
|
+
// navegación post-login). Al expirar, reseteamos el flag para no dejar el
|
|
133
|
+
// interceptor bloqueado de forma permanente.
|
|
134
|
+
return refreshTokenSubject.pipe(filter((token) => token !== null), take(1), timeout(QUEUED_REQUEST_TIMEOUT_MS), switchMap(token => next(addAuthHeader(request, token))), catchError(error => {
|
|
135
|
+
isRefreshing = false;
|
|
136
|
+
return throwError(() => error);
|
|
137
|
+
}));
|
|
125
138
|
}
|
|
126
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJjZXB0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3NlcnZpY2VzL2F1dGgvaW50ZXJjZXB0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQVF2QyxPQUFPLEVBQWMsVUFBVSxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQy9FLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFL0MsOERBQThEO0FBQzlELElBQUksWUFBWSxHQUFHLEtBQUssQ0FBQztBQUN6QixNQUFNLG1CQUFtQixHQUFHLElBQUksZUFBZSxDQUFnQixJQUFJLENBQUMsQ0FBQztBQUVyRTs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1CRztBQUNILE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBc0IsQ0FDaEQsT0FBNkIsRUFDN0IsSUFBbUIsRUFDYSxFQUFFO0lBQ2xDLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUN4QyxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQztJQUUzQywyQ0FBMkM7SUFDM0MsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7UUFDMUMsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDdkIsQ0FBQztJQUVELG1EQUFtRDtJQUNuRCxJQUFJLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsVUFBVyxDQUFDLEVBQUUsQ0FBQztRQUNsRCxP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TyxXQUFXLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxJQUFJLENBQzFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUNuQixtQkFBbUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQy9DLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7UUFDNUQsQ0FBQyxDQUFDLEVBQ0YsVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ2pCLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNyQixPQUFPLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNqQyxDQUFDLENBQUMsRUFDRixRQUFRLENBQUMsR0FBRyxFQUFFO1lBQ1osWUFBWSxHQUFHLEtBQUssQ0FBQztRQUN2QixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUVELDZDQUE2QztJQUM3QyxPQUFPLG1CQUFtQixDQUFDLElBQUksQ0FDN0IsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFtQixFQUFFLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQyxFQUNsRCxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQ1AsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUN4RCxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgSHR0cEludGVyY2VwdG9yRm4sXG4gIEh0dHBSZXF1ZXN0LFxuICBIdHRwSGFuZGxlckZuLFxuICBIdHRwRXZlbnQsXG4gIEh0dHBFcnJvclJlc3BvbnNlLFxufSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCB0aHJvd0Vycm9yLCBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIGZpbHRlciwgdGFrZSwgc3dpdGNoTWFwLCBmaW5hbGl6ZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi9hdXRoLnNlcnZpY2UnO1xuaW1wb3J0IHsgVkFMVEVDSF9BVVRIX0NPTkZJRyB9IGZyb20gJy4vY29uZmlnJztcblxuLy8gQ29udHJvbCBkZSBlc3RhZG8gZGUgcmVmcmVzY28gKHNpbmdsZXRvbiBhIG5pdmVsIGRlIG3Ds2R1bG8pXG5sZXQgaXNSZWZyZXNoaW5nID0gZmFsc2U7XG5jb25zdCByZWZyZXNoVG9rZW5TdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmcgfCBudWxsPihudWxsKTtcblxuLyoqXG4gKiBJbnRlcmNlcHRvciBIVFRQIHF1ZTpcbiAqIDEuIEFncmVnYSBoZWFkZXIgQXV0aG9yaXphdGlvbiBjb24gQmVhcmVyIHRva2VuIGEgcmVxdWVzdHMgQVBJXG4gKiAyLiBNYW5lamEgZXJyb3JlcyA0MDEgcmVmcmVzY2FuZG8gZWwgdG9rZW4gYXV0b23DoXRpY2FtZW50ZVxuICogMy4gRW5jb2xhIHJlcXVlc3RzIGR1cmFudGUgZWwgcmVmcmVzY28gcGFyYSBldml0YXIgbcO6bHRpcGxlcyByZWZyZXNoXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIC8vIEluY2x1aWRvIGF1dG9tw6F0aWNhbWVudGUgcG9yIHByb3ZpZGVWYWx0ZWNoQXV0aCgpXG4gKiAvLyBQYXJhIHVzbyBtYW51YWw6XG4gKiBpbXBvcnQgeyBwcm92aWRlSHR0cENsaWVudCwgd2l0aEludGVyY2VwdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbiAqIGltcG9ydCB7IGF1dGhJbnRlcmNlcHRvciB9IGZyb20gJ3ZhbHRlY2gtY29tcG9uZW50cyc7XG4gKlxuICogYm9vdHN0cmFwQXBwbGljYXRpb24oQXBwQ29tcG9uZW50LCB7XG4gKiAgIHByb3ZpZGVyczogW1xuICogICAgIHByb3ZpZGVIdHRwQ2xpZW50KHdpdGhJbnRlcmNlcHRvcnMoW2F1dGhJbnRlcmNlcHRvcl0pKSxcbiAqICAgXSxcbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBjb25zdCBhdXRoSW50ZXJjZXB0b3I6IEh0dHBJbnRlcmNlcHRvckZuID0gKFxuICByZXF1ZXN0OiBIdHRwUmVxdWVzdDx1bmtub3duPixcbiAgbmV4dDogSHR0cEhhbmRsZXJGblxuKTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8dW5rbm93bj4+ID0+IHtcbiAgY29uc3QgYXV0aFNlcnZpY2UgPSBpbmplY3QoQXV0aFNlcnZpY2UpO1xuICBjb25zdCBjb25maWcgPSBpbmplY3QoVkFMVEVDSF9BVVRIX0NPTkZJRyk7XG5cbiAgLy8gT21pdGlyIHJlcXVlc3RzIHF1ZSBubyBzb24gYSBudWVzdHJhIEFQSVxuICBpZiAoIWlzQXBpUmVxdWVzdChyZXF1ZXN0LCBjb25maWcuYXBpVXJsKSkge1xuICAgIHJldHVybiBuZXh0KHJlcXVlc3QpO1xuICB9XG5cbiAgLy8gT21pdGlyIGVuZHBvaW50cyBww7pibGljb3MgcXVlIG5vIG5lY2VzaXRhbiB0b2tlblxuICBpZiAoaXNQdWJsaWNFbmRwb2ludChyZXF1ZXN0LCBjb25maWcuYXV0aFByZWZpeCEpKSB7XG4gICAgcmV0dXJuIG5leHQocmVxdWVzdCk7XG4gIH1cblxuICBjb25zdCBhY2Nlc3NUb2tlbiA9IGF1dGhTZXJ2aWNlLmFjY2Vzc1Rva2VuKCk7XG5cbiAgLy8gQWdyZWdhciBoZWFkZXIgZGUgYXV0b3JpemFjacOzbiBzaSBoYXkgdG9rZW5cbiAgaWYgKGFjY2Vzc1Rva2VuKSB7XG4gICAgcmVxdWVzdCA9IGFkZEF1dGhIZWFkZXIocmVxdWVzdCwgYWNjZXNzVG9rZW4pO1xuICB9XG5cbiAgcmV0dXJuIG5leHQocmVxdWVzdCkucGlwZShcbiAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcbiAgICAgIGlmIChlcnJvci5zdGF0dXMgPT09IDQwMSAmJiAhaXNOb1JlZnJlc2hFbmRwb2ludChyZXF1ZXN0LCBjb25maWcuYXV0aFByZWZpeCEpKSB7XG4gICAgICAgIHJldHVybiBoYW5kbGU0MDFFcnJvcihyZXF1ZXN0LCBuZXh0LCBhdXRoU2VydmljZSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChlcnJvci5zdGF0dXMgPT09IDQwMykge1xuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICdbVmFsdGVjaEF1dGhdIFBlcm1pc28gZGVuZWdhZG86JyxcbiAgICAgICAgICBlcnJvci5lcnJvcj8ubWVzc2FnZSB8fCAnQWNjZXNvIHByb2hpYmlkbydcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gZXJyb3IpO1xuICAgIH0pXG4gICk7XG59O1xuXG4vKipcbiAqIEFncmVnYSBoZWFkZXIgZGUgYXV0b3JpemFjacOzbiBhIGxhIHJlcXVlc3QuXG4gKi9cbmZ1bmN0aW9uIGFkZEF1dGhIZWFkZXIocmVxdWVzdDogSHR0cFJlcXVlc3Q8dW5rbm93bj4sIHRva2VuOiBzdHJpbmcpOiBIdHRwUmVxdWVzdDx1bmtub3duPiB7XG4gIHJldHVybiByZXF1ZXN0LmNsb25lKHtcbiAgICBzZXRIZWFkZXJzOiB7XG4gICAgICBBdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dG9rZW59YCxcbiAgICB9LFxuICB9KTtcbn1cblxuLyoqXG4gKiBWZXJpZmljYSBzaSBsYSByZXF1ZXN0IGVzIGEgbnVlc3RyYSBBUEkuXG4gKi9cbmZ1bmN0aW9uIGlzQXBpUmVxdWVzdChyZXF1ZXN0OiBIdHRwUmVxdWVzdDx1bmtub3duPiwgYXBpVXJsOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIHJlcXVlc3QudXJsLnN0YXJ0c1dpdGgoYXBpVXJsKSB8fCByZXF1ZXN0LnVybC5pbmNsdWRlcygnL3YyL2F1dGgnKTtcbn1cblxuLyoqXG4gKiBWZXJpZmljYSBzaSBsYSByZXF1ZXN0IGVzIGEgdW4gZW5kcG9pbnQgcMO6YmxpY28gcXVlIE5PIHJlcXVpZXJlIHRva2VuLlxuICovXG5mdW5jdGlvbiBpc1B1YmxpY0VuZHBvaW50KHJlcXVlc3Q6IEh0dHBSZXF1ZXN0PHVua25vd24+LCBhdXRoUHJlZml4OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgY29uc3QgcHVibGljRW5kcG9pbnRzID0gW1xuICAgICcvc2lnbmluJyxcbiAgICAnL3NpZ251cCcsXG4gICAgJy9yZWZyZXNoJyxcbiAgICAnL2xvZ291dCcsXG4gICAgJy9tZmEvdmVyaWZ5JywgLy8gU29sbyBkdXJhbnRlIGxvZ2luXG4gIF07XG4gIHJldHVybiBwdWJsaWNFbmRwb2ludHMuc29tZShlbmRwb2ludCA9PiByZXF1ZXN0LnVybC5pbmNsdWRlcyhgJHthdXRoUHJlZml4fSR7ZW5kcG9pbnR9YCkpO1xufVxuXG4vKipcbiAqIFZlcmlmaWNhIHNpIGxhIHJlcXVlc3QgZXMgYSB1biBlbmRwb2ludCBxdWUgTk8gZGViZSByZWludGVudGFyIHJlZnJlc2ggZW4gNDAxLlxuICovXG5mdW5jdGlvbiBpc05vUmVmcmVzaEVuZHBvaW50KHJlcXVlc3Q6IEh0dHBSZXF1ZXN0PHVua25vd24+LCBhdXRoUHJlZml4OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgLy8gRW5kcG9pbnRzIHF1ZSBubyBkZWJlbiBpbnRlbnRhciByZWZyZXNoIGVuIDQwMTpcbiAgLy8gLSBQw7pibGljb3M6IHNpZ25pbiwgc2lnbnVwLCByZWZyZXNoLCBsb2dvdXRcbiAgLy8gLSBNRkE6IHZlcmlmeSAoZHVyYW50ZSBsb2dpbiksIGNvbmZpcm0gKDQwMSA9IGPDs2RpZ28gaW5jb3JyZWN0byksIGRpc2FibGUgKDQwMSA9IGNvbnRyYXNlw7FhIGluY29ycmVjdGEpXG4gIC8vIC0gY2hhbmdlLXBhc3N3b3JkOiA0MDEgPSBjb250cmFzZcOxYSBhY3R1YWwgaW5jb3JyZWN0YSwgTk8gdG9rZW4gZXhwaXJhZG8uXG4gIC8vICAgU2luIGVzdGEgZXhjbHVzacOzbiwgZWwgcmV0cnkgdHJhcyByZWZyZXNoIHZ1ZWx2ZSBhIGRhciA0MDEgeSBlbFxuICAvLyAgIGNhdGNoRXJyb3IgZGUgaGFuZGxlNDAxRXJyb3IgZGlzcGFyYSBsb2dvdXQuXG4gIGNvbnN0IG5vUmVmcmVzaEVuZHBvaW50cyA9IFtcbiAgICAnL3NpZ25pbicsXG4gICAgJy9zaWdudXAnLFxuICAgICcvcmVmcmVzaCcsXG4gICAgJy9sb2dvdXQnLFxuICAgICcvbWZhL3ZlcmlmeScsXG4gICAgJy9tZmEvY29uZmlybScsXG4gICAgJy9tZmEvZGlzYWJsZScsXG4gICAgJy9jaGFuZ2UtcGFzc3dvcmQnLFxuICBdO1xuICByZXR1cm4gbm9SZWZyZXNoRW5kcG9pbnRzLnNvbWUoZW5kcG9pbnQgPT4gcmVxdWVzdC51cmwuaW5jbHVkZXMoYCR7YXV0aFByZWZpeH0ke2VuZHBvaW50fWApKTtcbn1cblxuLyoqXG4gKiBNYW5lamEgZXJyb3JlcyA0MDEgcmVmcmVzY2FuZG8gZWwgdG9rZW4uXG4gKi9cbmZ1bmN0aW9uIGhhbmRsZTQwMUVycm9yKFxuICByZXF1ZXN0OiBIdHRwUmVxdWVzdDx1bmtub3duPixcbiAgbmV4dDogSHR0cEhhbmRsZXJGbixcbiAgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlXG4pOiBPYnNlcnZhYmxlPEh0dHBFdmVudDx1bmtub3duPj4ge1xuICBpZiAoIWlzUmVmcmVzaGluZykge1xuICAgIGlzUmVmcmVzaGluZyA9IHRydWU7XG4gICAgcmVmcmVzaFRva2VuU3ViamVjdC5uZXh0KG51bGwpO1xuXG4gICAgcmV0dXJuIGF1dGhTZXJ2aWNlLnJlZnJlc2hBY2Nlc3NUb2tlbigpLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAocmVzcG9uc2UgPT4ge1xuICAgICAgICByZWZyZXNoVG9rZW5TdWJqZWN0Lm5leHQocmVzcG9uc2UuYWNjZXNzVG9rZW4pO1xuICAgICAgICByZXR1cm4gbmV4dChhZGRBdXRoSGVhZGVyKHJlcXVlc3QsIHJlc3BvbnNlLmFjY2Vzc1Rva2VuKSk7XG4gICAgICB9KSxcbiAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4ge1xuICAgICAgICBhdXRoU2VydmljZS5sb2dvdXQoKTtcbiAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gZXJyb3IpO1xuICAgICAgfSksXG4gICAgICBmaW5hbGl6ZSgoKSA9PiB7XG4gICAgICAgIGlzUmVmcmVzaGluZyA9IGZhbHNlO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgLy8gRXNwZXJhciBhIHF1ZSB0ZXJtaW5lIGVsIHJlZnJlc2NvIGVuIGN1cnNvXG4gIHJldHVybiByZWZyZXNoVG9rZW5TdWJqZWN0LnBpcGUoXG4gICAgZmlsdGVyKCh0b2tlbik6IHRva2VuIGlzIHN0cmluZyA9PiB0b2tlbiAhPT0gbnVsbCksXG4gICAgdGFrZSgxKSxcbiAgICBzd2l0Y2hNYXAodG9rZW4gPT4gbmV4dChhZGRBdXRoSGVhZGVyKHJlcXVlc3QsIHRva2VuKSkpXG4gICk7XG59XG4iXX0=
|
|
139
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJjZXB0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3NlcnZpY2VzL2F1dGgvaW50ZXJjZXB0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQVF2QyxPQUFPLEVBQWMsVUFBVSxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4RixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRS9DLDhEQUE4RDtBQUM5RCxJQUFJLFlBQVksR0FBRyxLQUFLLENBQUM7QUFDekIsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLGVBQWUsQ0FBZ0IsSUFBSSxDQUFDLENBQUM7QUFFckU7Ozs7O0dBS0c7QUFDSCxNQUFNLHlCQUF5QixHQUFHLEtBQUssQ0FBQztBQUV4Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1CRztBQUNILE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBc0IsQ0FDaEQsT0FBNkIsRUFDN0IsSUFBbUIsRUFDYSxFQUFFO0lBQ2xDLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUN4QyxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQztJQUUzQywyQ0FBMkM7SUFDM0MsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7UUFDMUMsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDdkIsQ0FBQztJQUVELG1EQUFtRDtJQUNuRCxJQUFJLGdC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LCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEh0dHBJbnRlcmNlcHRvckZuLFxuICBIdHRwUmVxdWVzdCxcbiAgSHR0cEhhbmRsZXJGbixcbiAgSHR0cEV2ZW50LFxuICBIdHRwRXJyb3JSZXNwb25zZSxcbn0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgdGhyb3dFcnJvciwgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBmaWx0ZXIsIHRha2UsIHN3aXRjaE1hcCwgZmluYWxpemUsIHRpbWVvdXQgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4vYXV0aC5zZXJ2aWNlJztcbmltcG9ydCB7IFZBTFRFQ0hfQVVUSF9DT05GSUcgfSBmcm9tICcuL2NvbmZpZyc7XG5cbi8vIENvbnRyb2wgZGUgZXN0YWRvIGRlIHJlZnJlc2NvIChzaW5nbGV0b24gYSBuaXZlbCBkZSBtw7NkdWxvKVxubGV0IGlzUmVmcmVzaGluZyA9IGZhbHNlO1xuY29uc3QgcmVmcmVzaFRva2VuU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG5cbi8qKlxuICogVG9wZSBkZSBlc3BlcmEgcGFyYSB1bmEgcmVxdWVzdCBlbmNvbGFkYSBkZXRyw6FzIGRlIHVuIHJlZnJlc2ggZW4gY3Vyc28uIFNpIGVsXG4gKiByZWZyZXNoIHNlIGN1ZWxnYSAocmVkL0xhbWJkYSBmcsOtYSksIHNpbiBlc3RlIGzDrW1pdGUgbGEgcmVxdWVzdCBlbmNvbGFkYSBlc3BlcmFcbiAqIHBhcmEgc2llbXByZSB5IGxhIG5hdmVnYWNpw7NuIHBvc3QtbG9naW4gc2UgYXRhc2NhLiBMZXZlbWVudGUgbWF5b3IgYWwgdGltZW91dFxuICogZGVsIHByb3BpbyByZWZyZXNoIChSRUZSRVNIX1RJTUVPVVRfTVM9MTBzKSBwYXJhIGRhcmxlIG1hcmdlbiBhIHJlc29sdmVyLlxuICovXG5jb25zdCBRVUVVRURfUkVRVUVTVF9USU1FT1VUX01TID0gMTIwMDA7XG5cbi8qKlxuICogSW50ZXJjZXB0b3IgSFRUUCBxdWU6XG4gKiAxLiBBZ3JlZ2EgaGVhZGVyIEF1dGhvcml6YXRpb24gY29uIEJlYXJlciB0b2tlbiBhIHJlcXVlc3RzIEFQSVxuICogMi4gTWFuZWphIGVycm9yZXMgNDAxIHJlZnJlc2NhbmRvIGVsIHRva2VuIGF1dG9tw6F0aWNhbWVudGVcbiAqIDMuIEVuY29sYSByZXF1ZXN0cyBkdXJhbnRlIGVsIHJlZnJlc2NvIHBhcmEgZXZpdGFyIG3Dumx0aXBsZXMgcmVmcmVzaFxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAvLyBJbmNsdWlkbyBhdXRvbcOhdGljYW1lbnRlIHBvciBwcm92aWRlVmFsdGVjaEF1dGgoKVxuICogLy8gUGFyYSB1c28gbWFudWFsOlxuICogaW1wb3J0IHsgcHJvdmlkZUh0dHBDbGllbnQsIHdpdGhJbnRlcmNlcHRvcnMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG4gKiBpbXBvcnQgeyBhdXRoSW50ZXJjZXB0b3IgfSBmcm9tICd2YWx0ZWNoLWNvbXBvbmVudHMnO1xuICpcbiAqIGJvb3RzdHJhcEFwcGxpY2F0aW9uKEFwcENvbXBvbmVudCwge1xuICogICBwcm92aWRlcnM6IFtcbiAqICAgICBwcm92aWRlSHR0cENsaWVudCh3aXRoSW50ZXJjZXB0b3JzKFthdXRoSW50ZXJjZXB0b3JdKSksXG4gKiAgIF0sXG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgY29uc3QgYXV0aEludGVyY2VwdG9yOiBIdHRwSW50ZXJjZXB0b3JGbiA9IChcbiAgcmVxdWVzdDogSHR0cFJlcXVlc3Q8dW5rbm93bj4sXG4gIG5leHQ6IEh0dHBIYW5kbGVyRm5cbik6IE9ic2VydmFibGU8SHR0cEV2ZW50PHVua25vd24+PiA9PiB7XG4gIGNvbnN0IGF1dGhTZXJ2aWNlID0gaW5qZWN0KEF1dGhTZXJ2aWNlKTtcbiAgY29uc3QgY29uZmlnID0gaW5qZWN0KFZBTFRFQ0hfQVVUSF9DT05GSUcpO1xuXG4gIC8vIE9taXRpciByZXF1ZXN0cyBxdWUgbm8gc29uIGEgbnVlc3RyYSBBUElcbiAgaWYgKCFpc0FwaVJlcXVlc3QocmVxdWVzdCwgY29uZmlnLmFwaVVybCkpIHtcbiAgICByZXR1cm4gbmV4dChyZXF1ZXN0KTtcbiAgfVxuXG4gIC8vIE9taXRpciBlbmRwb2ludHMgcMO6YmxpY29zIHF1ZSBubyBuZWNlc2l0YW4gdG9rZW5cbiAgaWYgKGlzUHVibGljRW5kcG9pbnQocmVxdWVzdCwgY29uZmlnLmF1dGhQcmVmaXghKSkge1xuICAgIHJldHVybiBuZXh0KHJlcXVlc3QpO1xuICB9XG5cbiAgY29uc3QgYWNjZXNzVG9rZW4gPSBhdXRoU2VydmljZS5hY2Nlc3NUb2tlbigpO1xuXG4gIC8vIEFncmVnYXIgaGVhZGVyIGRlIGF1dG9yaXphY2nDs24gc2kgaGF5IHRva2VuXG4gIGlmIChhY2Nlc3NUb2tlbikge1xuICAgIHJlcXVlc3QgPSBhZGRBdXRoSGVhZGVyKHJlcXVlc3QsIGFjY2Vzc1Rva2VuKTtcbiAgfVxuXG4gIHJldHVybiBuZXh0KHJlcXVlc3QpLnBpcGUoXG4gICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB7XG4gICAgICBpZiAoZXJyb3Iuc3RhdHVzID09PSA0MDEgJiYgIWlzTm9SZWZyZXNoRW5kcG9pbnQocmVxdWVzdCwgY29uZmlnLmF1dGhQcmVmaXghKSkge1xuICAgICAgICByZXR1cm4gaGFuZGxlNDAxRXJyb3IocmVxdWVzdCwgbmV4dCwgYXV0aFNlcnZpY2UpO1xuICAgICAgfVxuXG4gICAgICBpZiAoZXJyb3Iuc3RhdHVzID09PSA0MDMpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAnW1ZhbHRlY2hBdXRoXSBQZXJtaXNvIGRlbmVnYWRvOicsXG4gICAgICAgICAgZXJyb3IuZXJyb3I/Lm1lc3NhZ2UgfHwgJ0FjY2VzbyBwcm9oaWJpZG8nXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGVycm9yKTtcbiAgICB9KVxuICApO1xufTtcblxuLyoqXG4gKiBBZ3JlZ2EgaGVhZGVyIGRlIGF1dG9yaXphY2nDs24gYSBsYSByZXF1ZXN0LlxuICovXG5mdW5jdGlvbiBhZGRBdXRoSGVhZGVyKHJlcXVlc3Q6IEh0dHBSZXF1ZXN0PHVua25vd24+LCB0b2tlbjogc3RyaW5nKTogSHR0cFJlcXVlc3Q8dW5rbm93bj4ge1xuICByZXR1cm4gcmVxdWVzdC5jbG9uZSh7XG4gICAgc2V0SGVhZGVyczoge1xuICAgICAgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VufWAsXG4gICAgfSxcbiAgfSk7XG59XG5cbi8qKlxuICogVmVyaWZpY2Egc2kgbGEgcmVxdWVzdCBlcyBhIG51ZXN0cmEgQVBJLlxuICovXG5mdW5jdGlvbiBpc0FwaVJlcXVlc3QocmVxdWVzdDogSHR0cFJlcXVlc3Q8dW5rbm93bj4sIGFwaVVybDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiByZXF1ZXN0LnVybC5zdGFydHNXaXRoKGFwaVVybCkgfHwgcmVxdWVzdC51cmwuaW5jbHVkZXMoJy92Mi9hdXRoJyk7XG59XG5cbi8qKlxuICogVmVyaWZpY2Egc2kgbGEgcmVxdWVzdCBlcyBhIHVuIGVuZHBvaW50IHDDumJsaWNvIHF1ZSBOTyByZXF1aWVyZSB0b2tlbi5cbiAqL1xuZnVuY3Rpb24gaXNQdWJsaWNFbmRwb2ludChyZXF1ZXN0OiBIdHRwUmVxdWVzdDx1bmtub3duPiwgYXV0aFByZWZpeDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGNvbnN0IHB1YmxpY0VuZHBvaW50cyA9IFtcbiAgICAnL3NpZ25pbicsXG4gICAgJy9zaWdudXAnLFxuICAgICcvcmVmcmVzaCcsXG4gICAgJy9sb2dvdXQnLFxuICAgICcvbWZhL3ZlcmlmeScsIC8vIFNvbG8gZHVyYW50ZSBsb2dpblxuICBdO1xuICByZXR1cm4gcHVibGljRW5kcG9pbnRzLnNvbWUoZW5kcG9pbnQgPT4gcmVxdWVzdC51cmwuaW5jbHVkZXMoYCR7YXV0aFByZWZpeH0ke2VuZHBvaW50fWApKTtcbn1cblxuLyoqXG4gKiBWZXJpZmljYSBzaSBsYSByZXF1ZXN0IGVzIGEgdW4gZW5kcG9pbnQgcXVlIE5PIGRlYmUgcmVpbnRlbnRhciByZWZyZXNoIGVuIDQwMS5cbiAqL1xuZnVuY3Rpb24gaXNOb1JlZnJlc2hFbmRwb2ludChyZXF1ZXN0OiBIdHRwUmVxdWVzdDx1bmtub3duPiwgYXV0aFByZWZpeDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIC8vIEVuZHBvaW50cyBxdWUgbm8gZGViZW4gaW50ZW50YXIgcmVmcmVzaCBlbiA0MDE6XG4gIC8vIC0gUMO6YmxpY29zOiBzaWduaW4sIHNpZ251cCwgcmVmcmVzaCwgbG9nb3V0XG4gIC8vIC0gTUZBOiB2ZXJpZnkgKGR1cmFudGUgbG9naW4pLCBjb25maXJtICg0MDEgPSBjw7NkaWdvIGluY29ycmVjdG8pLCBkaXNhYmxlICg0MDEgPSBjb250cmFzZcOxYSBpbmNvcnJlY3RhKVxuICAvLyAtIGNoYW5nZS1wYXNzd29yZDogNDAxID0gY29udHJhc2XDsWEgYWN0dWFsIGluY29ycmVjdGEsIE5PIHRva2VuIGV4cGlyYWRvLlxuICAvLyAgIFNpbiBlc3RhIGV4Y2x1c2nDs24sIGVsIHJldHJ5IHRyYXMgcmVmcmVzaCB2dWVsdmUgYSBkYXIgNDAxIHkgZWxcbiAgLy8gICBjYXRjaEVycm9yIGRlIGhhbmRsZTQwMUVycm9yIGRpc3BhcmEgbG9nb3V0LlxuICBjb25zdCBub1JlZnJlc2hFbmRwb2ludHMgPSBbXG4gICAgJy9zaWduaW4nLFxuICAgICcvc2lnbnVwJyxcbiAgICAnL3JlZnJlc2gnLFxuICAgICcvbG9nb3V0JyxcbiAgICAnL21mYS92ZXJpZnknLFxuICAgICcvbWZhL2NvbmZpcm0nLFxuICAgICcvbWZhL2Rpc2FibGUnLFxuICAgICcvY2hhbmdlLXBhc3N3b3JkJyxcbiAgXTtcbiAgcmV0dXJuIG5vUmVmcmVzaEVuZHBvaW50cy5zb21lKGVuZHBvaW50ID0+IHJlcXVlc3QudXJsLmluY2x1ZGVzKGAke2F1dGhQcmVmaXh9JHtlbmRwb2ludH1gKSk7XG59XG5cbi8qKlxuICogTWFuZWphIGVycm9yZXMgNDAxIHJlZnJlc2NhbmRvIGVsIHRva2VuLlxuICovXG5mdW5jdGlvbiBoYW5kbGU0MDFFcnJvcihcbiAgcmVxdWVzdDogSHR0cFJlcXVlc3Q8dW5rbm93bj4sXG4gIG5leHQ6IEh0dHBIYW5kbGVyRm4sXG4gIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZVxuKTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8dW5rbm93bj4+IHtcbiAgaWYgKCFpc1JlZnJlc2hpbmcpIHtcbiAgICBpc1JlZnJlc2hpbmcgPSB0cnVlO1xuICAgIHJlZnJlc2hUb2tlblN1YmplY3QubmV4dChudWxsKTtcblxuICAgIHJldHVybiBhdXRoU2VydmljZS5yZWZyZXNoQWNjZXNzVG9rZW4oKS5waXBlKFxuICAgICAgc3dpdGNoTWFwKHJlc3BvbnNlID0+IHtcbiAgICAgICAgcmVmcmVzaFRva2VuU3ViamVjdC5uZXh0KHJlc3BvbnNlLmFjY2Vzc1Rva2VuKTtcbiAgICAgICAgcmV0dXJuIG5leHQoYWRkQXV0aEhlYWRlcihyZXF1ZXN0LCByZXNwb25zZS5hY2Nlc3NUb2tlbikpO1xuICAgICAgfSksXG4gICAgICBjYXRjaEVycm9yKGVycm9yID0+IHtcbiAgICAgICAgYXV0aFNlcnZpY2UubG9nb3V0KCk7XG4gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGVycm9yKTtcbiAgICAgIH0pLFxuICAgICAgZmluYWxpemUoKCkgPT4ge1xuICAgICAgICBpc1JlZnJlc2hpbmcgPSBmYWxzZTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIC8vIEVzcGVyYXIgYSBxdWUgdGVybWluZSBlbCByZWZyZXNjbyBlbiBjdXJzby4gQ29uIHRpbWVvdXQ6IHNpIGVsIHJlZnJlc2hcbiAgLy8gc2UgY3VlbGdhLCBsYSByZXF1ZXN0IGVuY29sYWRhIG5vIGVzcGVyYSBwYXJhIHNpZW1wcmUgKGV2aXRhIGVsIGF0YXNjbyBkZVxuICAvLyBuYXZlZ2FjacOzbiBwb3N0LWxvZ2luKS4gQWwgZXhwaXJhciwgcmVzZXRlYW1vcyBlbCBmbGFnIHBhcmEgbm8gZGVqYXIgZWxcbiAgLy8gaW50ZXJjZXB0b3IgYmxvcXVlYWRvIGRlIGZvcm1hIHBlcm1hbmVudGUuXG4gIHJldHVybiByZWZyZXNoVG9rZW5TdWJqZWN0LnBpcGUoXG4gICAgZmlsdGVyKCh0b2tlbik6IHRva2VuIGlzIHN0cmluZyA9PiB0b2tlbiAhPT0gbnVsbCksXG4gICAgdGFrZSgxKSxcbiAgICB0aW1lb3V0KFFVRVVFRF9SRVFVRVNUX1RJTUVPVVRfTVMpLFxuICAgIHN3aXRjaE1hcCh0b2tlbiA9PiBuZXh0KGFkZEF1dGhIZWFkZXIocmVxdWVzdCwgdG9rZW4pKSksXG4gICAgY2F0Y2hFcnJvcihlcnJvciA9PiB7XG4gICAgICBpc1JlZnJlc2hpbmcgPSBmYWxzZTtcbiAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGVycm9yKTtcbiAgICB9KVxuICApO1xufVxuIl19
|
package/esm2022/lib/version.mjs
CHANGED
|
@@ -2,5 +2,5 @@
|
|
|
2
2
|
* Current version of valtech-components.
|
|
3
3
|
* This is automatically updated during the publish process.
|
|
4
4
|
*/
|
|
5
|
-
export const VERSION = '4.0.
|
|
6
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
5
|
+
export const VERSION = '4.0.172';
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDdXJyZW50IHZlcnNpb24gb2YgdmFsdGVjaC1jb21wb25lbnRzLlxuICogVGhpcyBpcyBhdXRvbWF0aWNhbGx5IHVwZGF0ZWQgZHVyaW5nIHRoZSBwdWJsaXNoIHByb2Nlc3MuXG4gKi9cbmV4cG9ydCBjb25zdCBWRVJTSU9OID0gJzQuMC4xNzInO1xuIl19
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
2
|
import { inject, InjectionToken, makeEnvironmentProviders, APP_INITIALIZER, ErrorHandler, Injectable, DestroyRef, Inject, signal, computed, PLATFORM_ID, isDevMode, Optional, runInInjectionContext, effect, Pipe, TemplateRef, ViewContainerRef, input, Directive, EventEmitter, Component, Input, Output, ChangeDetectionStrategy, HostBinding, HostListener, SecurityContext, NgZone, ViewChild, ElementRef, ChangeDetectorRef, output, ContentChild, model, ViewEncapsulation, untracked, viewChild, Injector, isSignal } from '@angular/core';
|
|
3
3
|
import { BehaviorSubject, throwError, Subject, map, distinctUntilChanged, filter as filter$1, take as take$1, firstValueFrom, of, from, EMPTY, Observable, interval, debounceTime, switchMap as switchMap$1, catchError as catchError$1, takeUntil, isObservable, forkJoin, race, timer, shareReplay } from 'rxjs';
|
|
4
|
-
import { catchError, switchMap, finalize, filter, take, map as map$1, tap, distinctUntilChanged as distinctUntilChanged$1, retry,
|
|
4
|
+
import { catchError, switchMap, finalize, filter, take, timeout, map as map$1, tap, distinctUntilChanged as distinctUntilChanged$1, retry, debounceTime as debounceTime$1, takeUntil as takeUntil$1 } from 'rxjs/operators';
|
|
5
5
|
import * as i1$3 from '@angular/common/http';
|
|
6
6
|
import { provideHttpClient, withInterceptors, HttpClient, HttpErrorResponse } from '@angular/common/http';
|
|
7
7
|
import * as i1$1 from '@angular/fire/firestore';
|
|
@@ -56,11 +56,18 @@ import { BrowserMultiFormatReader } from '@zxing/browser';
|
|
|
56
56
|
* Current version of valtech-components.
|
|
57
57
|
* This is automatically updated during the publish process.
|
|
58
58
|
*/
|
|
59
|
-
const VERSION = '4.0.
|
|
59
|
+
const VERSION = '4.0.172';
|
|
60
60
|
|
|
61
61
|
// Control de estado de refresco (singleton a nivel de módulo)
|
|
62
62
|
let isRefreshing = false;
|
|
63
63
|
const refreshTokenSubject = new BehaviorSubject(null);
|
|
64
|
+
/**
|
|
65
|
+
* Tope de espera para una request encolada detrás de un refresh en curso. Si el
|
|
66
|
+
* refresh se cuelga (red/Lambda fría), sin este límite la request encolada espera
|
|
67
|
+
* para siempre y la navegación post-login se atasca. Levemente mayor al timeout
|
|
68
|
+
* del propio refresh (REFRESH_TIMEOUT_MS=10s) para darle margen a resolver.
|
|
69
|
+
*/
|
|
70
|
+
const QUEUED_REQUEST_TIMEOUT_MS = 12000;
|
|
64
71
|
/**
|
|
65
72
|
* Interceptor HTTP que:
|
|
66
73
|
* 1. Agrega header Authorization con Bearer token a requests API
|
|
@@ -175,8 +182,14 @@ function handle401Error(request, next, authService) {
|
|
|
175
182
|
isRefreshing = false;
|
|
176
183
|
}));
|
|
177
184
|
}
|
|
178
|
-
// Esperar a que termine el refresco en curso
|
|
179
|
-
|
|
185
|
+
// Esperar a que termine el refresco en curso. Con timeout: si el refresh
|
|
186
|
+
// se cuelga, la request encolada no espera para siempre (evita el atasco de
|
|
187
|
+
// navegación post-login). Al expirar, reseteamos el flag para no dejar el
|
|
188
|
+
// interceptor bloqueado de forma permanente.
|
|
189
|
+
return refreshTokenSubject.pipe(filter((token) => token !== null), take(1), timeout(QUEUED_REQUEST_TIMEOUT_MS), switchMap(token => next(addAuthHeader(request, token))), catchError(error => {
|
|
190
|
+
isRefreshing = false;
|
|
191
|
+
return throwError(() => error);
|
|
192
|
+
}));
|
|
180
193
|
}
|
|
181
194
|
|
|
182
195
|
/**
|
|
@@ -8286,6 +8299,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
8286
8299
|
}]
|
|
8287
8300
|
}] });
|
|
8288
8301
|
|
|
8302
|
+
/**
|
|
8303
|
+
* Timeout duro para el `/refresh` (ms). Una Lambda fría + red móvil flaky pueden
|
|
8304
|
+
* dejar el POST colgado indefinidamente; sin este límite el `await` de
|
|
8305
|
+
* `initialize()` (APP_INITIALIZER) congela el bootstrap en el skeleton, y el flag
|
|
8306
|
+
* `isRefreshing` del interceptor se queda pegado bloqueando toda request posterior.
|
|
8307
|
+
* Con timeout, el refresh SIEMPRE resuelve (ok o error) → la UI nunca cuelga: el
|
|
8308
|
+
* bootstrap continúa como invitado y el interceptor libera la cola.
|
|
8309
|
+
*/
|
|
8310
|
+
const REFRESH_TIMEOUT_MS = 10000;
|
|
8289
8311
|
/**
|
|
8290
8312
|
* Servicio principal de autenticación.
|
|
8291
8313
|
*
|
|
@@ -8745,7 +8767,11 @@ class AuthService {
|
|
|
8745
8767
|
const body = this.storageService.cookieOnly ? {} : { refreshToken: this.state().refreshToken };
|
|
8746
8768
|
return this.http
|
|
8747
8769
|
.post(`${this.baseUrl}/refresh`, body, { withCredentials: true })
|
|
8748
|
-
.pipe(
|
|
8770
|
+
.pipe(
|
|
8771
|
+
// Nunca dejar el refresh colgado: si la red/Lambda no responde a tiempo,
|
|
8772
|
+
// emitimos error → los callers (initialize, interceptor) lo manejan y la
|
|
8773
|
+
// UI deja de esperar. Ver REFRESH_TIMEOUT_MS.
|
|
8774
|
+
timeout(REFRESH_TIMEOUT_MS), tap(response => {
|
|
8749
8775
|
const expiresAt = Date.now() + response.expiresIn * 1000;
|
|
8750
8776
|
this.stateService.updateAccessToken(response.accessToken, response.expiresIn);
|
|
8751
8777
|
this.stateService.updateRefreshToken(response.refreshToken);
|
|
@@ -35262,20 +35288,21 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
35262
35288
|
type: Output
|
|
35263
35289
|
}] } });
|
|
35264
35290
|
|
|
35265
|
-
addIcons({ printOutline
|
|
35291
|
+
addIcons({ printOutline });
|
|
35266
35292
|
/**
|
|
35267
35293
|
* `val-html-viewer-modal` — Modal para visualizar y descargar/imprimir HTML.
|
|
35268
35294
|
* Se abre como sheet a pantalla completa en móviles.
|
|
35269
35295
|
*
|
|
35270
35296
|
* Renderiza HTML embebido en un iframe (los estilos deben estar inline o
|
|
35271
|
-
* embebidos en el HTML).
|
|
35272
|
-
*
|
|
35297
|
+
* embebidos en el HTML). Botón Imprimir (print via iframe) + Cerrar. El diálogo
|
|
35298
|
+
* de impresión del SO ya ofrece "Guardar como PDF" y compartir nativo, así que
|
|
35299
|
+
* NO exponemos un "descargar HTML" (un .html suelto no le sirve al usuario).
|
|
35273
35300
|
*
|
|
35274
|
-
* Uso: ModalService.
|
|
35301
|
+
* Uso: ModalService.open({ component: HtmlViewerModalComponent, componentProps: { html: "...", title: "..." }, size: "full" })
|
|
35275
35302
|
*
|
|
35276
35303
|
* Props:
|
|
35277
35304
|
* - html: string — HTML completo con estilos embebidos (requerido)
|
|
35278
|
-
* - title: string —
|
|
35305
|
+
* - title: string — Título del documento (default: "documento")
|
|
35279
35306
|
*
|
|
35280
35307
|
* El componente recibe `_modalRef` inyectado por ModalService para cerrar.
|
|
35281
35308
|
*/
|
|
@@ -35297,15 +35324,6 @@ class HtmlViewerModalComponent {
|
|
|
35297
35324
|
iframe.contentWindow.print();
|
|
35298
35325
|
}
|
|
35299
35326
|
}
|
|
35300
|
-
downloadContent() {
|
|
35301
|
-
const blob = new Blob([this.html], { type: 'text/html;charset=utf-8' });
|
|
35302
|
-
const url = window.URL.createObjectURL(blob);
|
|
35303
|
-
const link = document.createElement('a');
|
|
35304
|
-
link.href = url;
|
|
35305
|
-
link.download = `${this.title}-${new Date().getTime()}.html`;
|
|
35306
|
-
link.click();
|
|
35307
|
-
window.URL.revokeObjectURL(url);
|
|
35308
|
-
}
|
|
35309
35327
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: HtmlViewerModalComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
35310
35328
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: HtmlViewerModalComponent, isStandalone: true, selector: "val-html-viewer-modal", inputs: { html: "html", title: "title" }, ngImport: i0, template: `
|
|
35311
35329
|
<ion-header>
|
|
@@ -35319,9 +35337,6 @@ class HtmlViewerModalComponent {
|
|
|
35319
35337
|
<ion-button fill="clear" color="primary" (click)="printContent()" title="Imprimir">
|
|
35320
35338
|
<ion-icon name="print-outline" slot="icon-only" />
|
|
35321
35339
|
</ion-button>
|
|
35322
|
-
<ion-button fill="clear" color="primary" (click)="downloadContent()" title="Descargar">
|
|
35323
|
-
<ion-icon name="download-outline" slot="icon-only" />
|
|
35324
|
-
</ion-button>
|
|
35325
35340
|
</ion-buttons>
|
|
35326
35341
|
</ion-toolbar>
|
|
35327
35342
|
</ion-header>
|
|
@@ -35345,9 +35360,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
35345
35360
|
<ion-button fill="clear" color="primary" (click)="printContent()" title="Imprimir">
|
|
35346
35361
|
<ion-icon name="print-outline" slot="icon-only" />
|
|
35347
35362
|
</ion-button>
|
|
35348
|
-
<ion-button fill="clear" color="primary" (click)="downloadContent()" title="Descargar">
|
|
35349
|
-
<ion-icon name="download-outline" slot="icon-only" />
|
|
35350
|
-
</ion-button>
|
|
35351
35363
|
</ion-buttons>
|
|
35352
35364
|
</ion-toolbar>
|
|
35353
35365
|
</ion-header>
|