valtech-components 4.0.170 → 4.0.171
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/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 +31 -5
- package/fesm2022/valtech-components.mjs.map +1 -1
- 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJjZXB0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3NlcnZpY2VzL2F1dGgvaW50ZXJjZXB0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQVF2QyxPQUFPLEVBQWMsVUFBVSxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4RixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRS9DLDhEQUE4RDtBQUM5RCxJQUFJLFlBQVksR0FBRyxLQUFLLENBQUM7QUFDekIsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLGVBQWUsQ0FBZ0IsSUFBSSxDQUFDLENBQUM7QUFFckU7Ozs7O0dBS0c7QUFDSCxNQUFNLHlCQUF5QixHQUFHLEtBQUssQ0FBQztBQUV4Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1CRztBQUNILE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBc0IsQ0FDaEQsT0FBNkIsRUFDN0IsSUFBbUIsRUFDYSxFQUFFO0lBQ2xDLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUN4QyxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQztJQUUzQywyQ0FBMkM7SUFDM0MsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7UUFDMUMsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDdkIsQ0FBQztJQUVELG1EQUFtRDtJQUNuRCxJQUFJLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsVUFBVyxDQUFDLEVBQUUsQ0FBQztRQUNsRCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN2QixDQUFDO0lBRUQsTUFBTSxXQUFXLEdBQUcsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBRTlDLDhDQUE4QztJQUM5QyxJQUFJLFdBQVcsRUFBRSxDQUFDO1FBQ2hCLE9BQU8sR0FBRyxhQUFhLENBQUMsT0FBTyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFRCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQ3ZCLFVBQVUsQ0FBQyxDQUFDLEtBQXdCLEVBQUUsRUFBRTtRQUN0QyxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxVQUFXLENBQUMsRUFBRSxDQUFDO1lBQzlFLE9BQU8sY0FBYyxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDcEQsQ0FBQztRQUVELElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQztZQUN6QixPQUFPLENBQUMsS0FBSyxDQUNYLGlDQUFpQyxFQUNqQyxLQUFLLENBQUMsS0FBSyxFQUFFLE9BQU8sSUFBSSxrQkFBa0IsQ0FDM0MsQ0FBQztRQUNKLENBQUM7UUFFRCxPQUFPLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqQyxDQUFDLENBQUMsQ0FDSCxDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBRUY7O0dBRUc7QUFDSCxTQUFTLGFBQWEsQ0FBQyxPQUE2QixFQUFFLEtBQWE7SUFDakUsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDO1FBQ25CLFVBQVUsRUFBRTtZQUNWLGFBQWEsRUFBRSxVQUFVLEtBQUssRUFBRTtTQUNqQztLQUNGLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQVMsWUFBWSxDQUFDLE9BQTZCLEVBQUUsTUFBYztJQUNqRSxPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQzVFLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQVMsZ0JBQWdCLENBQUMsT0FBNkIsRUFBRSxVQUFrQjtJQUN6RSxNQUFNLGVBQWUsR0FBRztRQUN0QixTQUFTO1FBQ1QsU0FBUztRQUNULFVBQVU7UUFDVixTQUFTO1FBQ1QsYUFBYSxFQUFFLHFCQUFxQjtLQUNyQyxDQUFDO0lBQ0YsT0FBTyxlQUFlLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsR0FBRyxVQUFVLEdBQUcsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzVGLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQVMsbUJBQW1CLENBQUMsT0FBNkIsRUFBRSxVQUFrQjtJQUM1RSxrREFBa0Q7SUFDbEQsOENBQThDO0lBQzlDLDBHQUEwRztJQUMxRyw0RUFBNEU7SUFDNUUsb0VBQW9FO0lBQ3BFLGlEQUFpRDtJQUNqRCxNQUFNLGtCQUFrQixHQUFHO1FBQ3pCLFNBQVM7UUFDVCxTQUFTO1FBQ1QsVUFBVTtRQUNWLFNBQVM7UUFDVCxhQUFhO1FBQ2IsY0FBYztRQUNkLGNBQWM7UUFDZCxrQkFBa0I7S0FDbkIsQ0FBQztJQUNGLE9BQU8sa0JBQWtCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsR0FBRyxVQUFVLEdBQUcsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQy9GLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQVMsY0FBYyxDQUNyQixPQUE2QixFQUM3QixJQUFtQixFQUNuQixXQUF3QjtJQUV4QixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDbEIsWUFBWSxHQUFHLElBQUksQ0FBQztRQUNwQixtQkFBbUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFL0IsT0FBTyxXQUFXLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxJQUFJLENBQzFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUNuQixtQkFBbUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQy9DLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7UUFDNUQsQ0FBQyxDQUFDLEVBQ0YsVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ2pCLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNyQixPQUFPLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNqQyxDQUFDLENBQUMsRUFDRixRQUFRLENBQUMsR0FBRyxFQUFFO1lBQ1osWUFBWSxHQUFHLEtBQUssQ0FBQztRQUN2QixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUVELHlFQUF5RTtJQUN6RSw0RUFBNEU7SUFDNUUsMEVBQTBFO0lBQzFFLDZDQUE2QztJQUM3QyxPQUFPLG1CQUFtQixDQUFDLElBQUksQ0FDN0IsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFtQixFQUFFLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQyxFQUNsRCxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQ1AsT0FBTyxDQUFDLHlCQUF5QixDQUFDLEVBQ2xDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFDdkQsVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFO1FBQ2pCLFlBQVksR0FBRyxLQUFLLENBQUM7UUFDckIsT0FBTyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDakMsQ0FBQyxDQUFDLENBQ0gsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEh0dHBJbnRlcmNlcHRvckZuLFxuICBIdHRwUmVxdWVzdCxcbiAgSHR0cEhhbmRsZXJGbixcbiAgSHR0cEV2ZW50LFxuICBIdHRwRXJyb3JSZXNwb25zZSxcbn0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgdGhyb3dFcnJvciwgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBmaWx0ZXIsIHRha2UsIHN3aXRjaE1hcCwgZmluYWxpemUsIHRpbWVvdXQgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4vYXV0aC5zZXJ2aWNlJztcbmltcG9ydCB7IFZBTFRFQ0hfQVVUSF9DT05GSUcgfSBmcm9tICcuL2NvbmZpZyc7XG5cbi8vIENvbnRyb2wgZGUgZXN0YWRvIGRlIHJlZnJlc2NvIChzaW5nbGV0b24gYSBuaXZlbCBkZSBtw7NkdWxvKVxubGV0IGlzUmVmcmVzaGluZyA9IGZhbHNlO1xuY29uc3QgcmVmcmVzaFRva2VuU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG5cbi8qKlxuICogVG9wZSBkZSBlc3BlcmEgcGFyYSB1bmEgcmVxdWVzdCBlbmNvbGFkYSBkZXRyw6FzIGRlIHVuIHJlZnJlc2ggZW4gY3Vyc28uIFNpIGVsXG4gKiByZWZyZXNoIHNlIGN1ZWxnYSAocmVkL0xhbWJkYSBmcsOtYSksIHNpbiBlc3RlIGzDrW1pdGUgbGEgcmVxdWVzdCBlbmNvbGFkYSBlc3BlcmFcbiAqIHBhcmEgc2llbXByZSB5IGxhIG5hdmVnYWNpw7NuIHBvc3QtbG9naW4gc2UgYXRhc2NhLiBMZXZlbWVudGUgbWF5b3IgYWwgdGltZW91dFxuICogZGVsIHByb3BpbyByZWZyZXNoIChSRUZSRVNIX1RJTUVPVVRfTVM9MTBzKSBwYXJhIGRhcmxlIG1hcmdlbiBhIHJlc29sdmVyLlxuICovXG5jb25zdCBRVUVVRURfUkVRVUVTVF9USU1FT1VUX01TID0gMTIwMDA7XG5cbi8qKlxuICogSW50ZXJjZXB0b3IgSFRUUCBxdWU6XG4gKiAxLiBBZ3JlZ2EgaGVhZGVyIEF1dGhvcml6YXRpb24gY29uIEJlYXJlciB0b2tlbiBhIHJlcXVlc3RzIEFQSVxuICogMi4gTWFuZWphIGVycm9yZXMgNDAxIHJlZnJlc2NhbmRvIGVsIHRva2VuIGF1dG9tw6F0aWNhbWVudGVcbiAqIDMuIEVuY29sYSByZXF1ZXN0cyBkdXJhbnRlIGVsIHJlZnJlc2NvIHBhcmEgZXZpdGFyIG3Dumx0aXBsZXMgcmVmcmVzaFxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAvLyBJbmNsdWlkbyBhdXRvbcOhdGljYW1lbnRlIHBvciBwcm92aWRlVmFsdGVjaEF1dGgoKVxuICogLy8gUGFyYSB1c28gbWFudWFsOlxuICogaW1wb3J0IHsgcHJvdmlkZUh0dHBDbGllbnQsIHdpdGhJbnRlcmNlcHRvcnMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG4gKiBpbXBvcnQgeyBhdXRoSW50ZXJjZXB0b3IgfSBmcm9tICd2YWx0ZWNoLWNvbXBvbmVudHMnO1xuICpcbiAqIGJvb3RzdHJhcEFwcGxpY2F0aW9uKEFwcENvbXBvbmVudCwge1xuICogICBwcm92aWRlcnM6IFtcbiAqICAgICBwcm92aWRlSHR0cENsaWVudCh3aXRoSW50ZXJjZXB0b3JzKFthdXRoSW50ZXJjZXB0b3JdKSksXG4gKiAgIF0sXG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgY29uc3QgYXV0aEludGVyY2VwdG9yOiBIdHRwSW50ZXJjZXB0b3JGbiA9IChcbiAgcmVxdWVzdDogSHR0cFJlcXVlc3Q8dW5rbm93bj4sXG4gIG5leHQ6IEh0dHBIYW5kbGVyRm5cbik6IE9ic2VydmFibGU8SHR0cEV2ZW50PHVua25vd24+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.171';
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDdXJyZW50IHZlcnNpb24gb2YgdmFsdGVjaC1jb21wb25lbnRzLlxuICogVGhpcyBpcyBhdXRvbWF0aWNhbGx5IHVwZGF0ZWQgZHVyaW5nIHRoZSBwdWJsaXNoIHByb2Nlc3MuXG4gKi9cbmV4cG9ydCBjb25zdCBWRVJTSU9OID0gJzQuMC4xNzEnO1xuIl19
|
|
@@ -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.171';
|
|
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);
|