valtech-components 4.0.548 → 4.0.549

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.
@@ -63,10 +63,7 @@ export class OAuthCallbackComponent {
63
63
  const params = new URLSearchParams(window.location.search);
64
64
  if (params.get('popup') === 'true')
65
65
  return false;
66
- // Compatibilidad con flujos sin popup=true (redirect directo, tests, legacy).
67
- if (window.name === 'oauth' || window.name === 'oauth-link')
68
- return false;
69
- return !window.opener && window.parent === window;
66
+ return !window.opener;
70
67
  }
71
68
  /**
72
69
  * Completa el login en la ventana principal: instala la sesión desde los
@@ -115,6 +112,8 @@ export class OAuthCallbackComponent {
115
112
  // MFA requerido — el backend redirige sin tokens, con mfa_token. El flujo
116
113
  // continúa con el challenge MFA (AuthService.setMFAPending → modal verify).
117
114
  if (params.get('mfa_required') === 'true') {
115
+ const mfaToken = params.get('mfa_token') || undefined;
116
+ const mfaMethod = params.get('mfa_method') || undefined;
118
117
  this.sendToParent({
119
118
  type: 'oauth-callback',
120
119
  tokens: {
@@ -122,10 +121,19 @@ export class OAuthCallbackComponent {
122
121
  refreshToken: '',
123
122
  expiresIn: 0,
124
123
  mfaRequired: true,
125
- mfaToken: params.get('mfa_token') || undefined,
126
- mfaMethod: params.get('mfa_method') || undefined,
124
+ mfaToken,
125
+ mfaMethod,
127
126
  },
128
127
  });
128
+ // Flujo redirect en ventana principal: no hay opener escuchando el
129
+ // callback. Dejamos el challenge en AuthService y volvemos al login para
130
+ // que val-login abra el modal MFA sobre la misma SPA.
131
+ if (this.isMainWindow() && this.authService && mfaToken && mfaMethod) {
132
+ this.authService.setOAuthMFAPending(mfaToken, mfaMethod);
133
+ const loginRoute = this.config?.loginRoute || '/login';
134
+ this.router.navigateByUrl(`${loginRoute}?oauth_mfa=1`, { replaceUrl: true });
135
+ return;
136
+ }
129
137
  this.message = 'Verificación adicional requerida';
130
138
  this.closeAfterDelay();
131
139
  return;
@@ -234,7 +242,7 @@ export class OAuthCallbackComponent {
234
242
  // (window.name se borra en cross-origin nav; window.opener sever por COOP).
235
243
  setTimeout(() => {
236
244
  const params = new URLSearchParams(window.location.search);
237
- const isPopup = params.get('popup') === 'true' || window.name === 'oauth' || window.name === 'oauth-link';
245
+ const isPopup = params.get('popup') === 'true';
238
246
  if (window.opener || isPopup) {
239
247
  window.close();
240
248
  }
@@ -261,4 +269,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
261
269
  type: Inject,
262
270
  args: [VALTECH_AUTH_CONFIG]
263
271
  }] }] });
264
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2F1dGgtY2FsbGJhY2suY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9zZXJ2aWNlcy9hdXRoL29hdXRoLWNhbGxiYWNrLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBVSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDcEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRy9DLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUUvQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0RBQWdELENBQUM7Ozs7QUFFakY7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQkc7QUFTSCxNQUFNLE9BQU8sc0JBQXNCO0lBVWpDLFlBQ1UsTUFBYyxFQUNGLFdBQStCLEVBQ0YsTUFBZ0M7UUFGekUsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNGLGdCQUFXLEdBQVgsV0FBVyxDQUFvQjtRQUNGLFdBQU0sR0FBTixNQUFNLENBQTBCO1FBWm5GLFlBQU8sR0FBRyw2QkFBNkIsQ0FBQztRQUV4Qzs7OztXQUlHO1FBQ0ssZ0JBQVcsR0FBa0IsSUFBSSxDQUFDO0lBTXZDLENBQUM7SUFFSixRQUFRO1FBQ04sSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7Ozs7T0FjRztJQUNLLFlBQVk7UUFDbEIsTUFBTSxNQUFNLEdBQUcsSUFBSSxlQUFlLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMzRCxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEtBQUssTUFBTTtZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQ2pELDhFQUE4RTtRQUM5RSxJQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssT0FBTyxJQUFJLE1BQU0s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InNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5qZWN0LCBPbkluaXQsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IE1GQU1ldGhvZCwgT0F1dGhDYWxsYmFja0RhdGEsIE9BdXRoUmVzdWx0LCBPQXV0aEVycm9yLCBWYWx0ZWNoQXV0aENvbmZpZyB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgVkFMVEVDSF9BVVRIX0NPTkZJRyB9IGZyb20gJy4vY29uZmlnJztcbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi9hdXRoLnNlcnZpY2UnO1xuaW1wb3J0IHsgU3BsYXNoQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9hdG9tcy9zcGxhc2gvc3BsYXNoLmNvbXBvbmVudCc7XG5cbi8qKlxuICogQ29tcG9uZW50ZSBkZSBjYWxsYmFjayBwYXJhIE9BdXRoLlxuICpcbiAqIEVzdGUgY29tcG9uZW50ZSBwcm9jZXNhIGxhIHJlc3B1ZXN0YSBkZWwgc2Vydmlkb3IgT0F1dGggeSBlbnbDrWFcbiAqIGxvcyB0b2tlbnMgYSBsYSB2ZW50YW5hIHBhZHJlIHZpYSBwb3N0TWVzc2FnZS5cbiAqXG4gKiBEZWJlIGFncmVnYXJzZSBhIGxhcyBydXRhcyBkZSBsYSBhcGxpY2FjacOzbjpcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIC8vIGFwcC5yb3V0ZXMudHNcbiAqIGltcG9ydCB7IE9BdXRoQ2FsbGJhY2tDb21wb25lbnQgfSBmcm9tICd2YWx0ZWNoLWNvbXBvbmVudHMnO1xuICpcbiAqIGV4cG9ydCBjb25zdCByb3V0ZXM6IFJvdXRlcyA9IFtcbiAqICAgeyBwYXRoOiAnYXV0aC9vYXV0aC9jYWxsYmFjaycsIGNvbXBvbmVudDogT0F1dGhDYWxsYmFja0NvbXBvbmVudCB9LFxuICogICAvLyAuLi4gb3RyYXMgcnV0YXNcbiAqIF07XG4gKiBgYGBcbiAqXG4gKiBFbCBiYWNrZW5kIHJlZGlyaWdlIGEgZXN0YSBydXRhIGNvbiBsb3MgdG9rZW5zIGVuIHF1ZXJ5IHBhcmFtczpcbiAqIGAvYXV0aC9vYXV0aC9jYWxsYmFjaz9hY2Nlc3NfdG9rZW49eHh4JnJlZnJlc2hfdG9rZW49eHh4JmV4cGlyZXNfaW49OTAwYFxuICpcbiAqIE8gY29uIGVycm9yOlxuICogYC9hdXRoL29hdXRoL2NhbGxiYWNrP2Vycm9yPUlOVkFMSURfQ09ERSZlcnJvcl9kZXNjcmlwdGlvbj0uLi5gXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbC1vYXV0aC1jYWxsYmFjaycsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIFNwbGFzaENvbXBvbmVudF0sXG4gIC8vIE1pc21vIHNwbGFzaCBkZSBhcnJhbnF1ZSBkZSBsYSBhcHAgKGxvZ28gKyBwdWxzZSkgZW4gdmV6IGRlIHVuIGxvYWRlciBwcm9waW9cbiAgLy8gY2FzaS1kdXBsaWNhZG86IGVsIGNhbGxiYWNrIE9BdXRoIGVzIHVuYSBjYXJnYSBmdW5kYW1lbnRhbCB5IGRlYmUgdmVyc2UgaWd1YWwuXG4gIHRlbXBsYXRlOiBgPHZhbC1zcGxhc2ggLz5gLFxufSlcbmV4cG9ydCBjbGFzcyBPQXV0aENhbGxiYWNrQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgbWVzc2FnZSA9ICdQcm9jZXNhbmRvIGF1dGVudGljYWNpw7NuLi4uJztcblxuICAvKipcbiAgICogTm9uY2UgcXVlIGVsIG9wZW5lciBnZW5lcsOzIHkgcGFzw7MgcG9yIGVsIGZsdWpvIChyb3VuZC10cmlwIGJhY2tlbmQpLiBTZVxuICAgKiByZWVudsOtYSBhbCBvcGVuZXIgZW4gY2FkYSBtZW5zYWplIHBhcmEgcXVlIHZlcmlmaXF1ZSBlbCBvcmlnZW4gZGVsIGNhbGxiYWNrXG4gICAqIHkgcmVjaGFjZSB1biBvYXV0aF9jYWxsYmFja19kYXRhIGZvcmphZG8gZW4gbG9jYWxTdG9yYWdlIHBvciBYU1MgKE0tMDcpLlxuICAgKi9cbiAgcHJpdmF0ZSBjbGllbnROb25jZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSB8IG51bGwsXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChWQUxURUNIX0FVVEhfQ09ORklHKSBwcml2YXRlIGNvbmZpZzogVmFsdGVjaEF1dGhDb25maWcgfCBudWxsXG4gICkge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnByb2Nlc3NDYWxsYmFjaygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluZGljYSBzaSBlc3RlIGNhbGxiYWNrIGNvcnJlIGNvbW8gbGEgVkVOVEFOQSBQUklOQ0lQQUwgKGZsdWpvIHJlZGlyZWN0KSxcbiAgICogbm8gY29tbyBwb3B1cC5cbiAgICpcbiAgICogTk8gdXNhbW9zIHdpbmRvdy5uYW1lIG5pIHdpbmRvdy5vcGVuZXIgY29tbyBpbmRpY2Fkb3JlcyBwcmltYXJpb3M6XG4gICAqIC0gQ2hyb21lL0ZpcmVmb3ggYm9ycmFuIHdpbmRvdy5uYW1lIGFsIG5hdmVnYXIgY3Jvc3Mtb3JpZ2luIChwcml2YWNpZGFkKSxcbiAgICogICBwb3IgbG8gcXVlIHlhIG5vIHZhbGUgcGFyYSBlbCBmbHVqbyBPQXV0aCBxdWUgcGFzYSBwb3IgR29vZ2xlL01TLlxuICAgKiAtIHdpbmRvdy5vcGVuZXIgcXVlZGEgbnVsbCBjdWFuZG8gZWwgcHJvdmVlZG9yIHRpZW5lIENPT1A6c2FtZS1vcmlnaW5cbiAgICogICAoR29vZ2xlIGxvIHVzYSksIHF1ZSBzZXZlciBsYSByZWZlcmVuY2lhIGVuIGVsIGJvdW5jZS5cbiAgICpcbiAgICogSW5kaWNhZG9yIGNvbmZpYWJsZTogYHBvcHVwPXRydWVgIGVuIGxhIFVSTC4gT0F1dGhTZXJ2aWNlIGxvIGlueWVjdGEgZW5cbiAgICogZWwgcmVkaXJlY3RfdXJpIGFudGVzIGRlbCAvc3RhcnQ7IGVsIGJhY2tlbmQgbG8gcmVlbnbDrWEgaW50YWN0byBlbiBlbFxuICAgKiByZWRpcmVjdCBmaW5hbCB2w61hIGFwcGVuZFBhcmFtcyDihpIgc29icmV2aXZlIHRvZG8gZWwgcm91bmQtdHJpcCBzaW5cbiAgICogZGVwZW5kZXIgZGUgZXN0YWRvIGRlIGxhIHZlbnRhbmEgZGVsIG5hdmVnYWRvci5cbiAgICovXG4gIHByaXZhdGUgaXNNYWluV2luZG93KCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCk7XG4gICAgaWYgKHBhcmFtcy5nZXQoJ3BvcHVwJykgPT09ICd0cnVlJykgcmV0dXJuIGZhbHNlO1xuICAgIC8vIENvbXBhdGliaWxpZGFkIGNvbiBmbHVqb3Mgc2luIHBvcHVwPXRydWUgKHJlZGlyZWN0IGRpcmVjdG8sIHRlc3RzLCBsZWdhY3kpLlxuICAgIGlmICh3aW5kb3cubmFtZSA9PT0gJ29hdXRoJyB8fCB3aW5kb3cubmFtZSA9PT0gJ29hdXRoLWxpbmsnKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuICF3aW5kb3cub3BlbmVyICYmIHdpbmRvdy5wYXJlbnQgPT09IHdpbmRvdztcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wbGV0YSBlbCBsb2dpbiBlbiBsYSB2ZW50YW5hIHByaW5jaXBhbDogaW5zdGFsYSBsYSBzZXNpw7NuIGRlc2RlIGxvc1xuICAgKiB0b2tlbnMgZGVsIGNhbGxiYWNrIHkgbmF2ZWdhIGFsIGhvbWUuXG4gICAqL1xuICBwcml2YXRlIGNvbXBsZXRlSW5NYWluV2luZG93KHJlc3VsdDogT0F1dGhSZXN1bHQpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuYXV0aFNlcnZpY2UpIHJldHVybiBmYWxzZTtcbiAgICB0aGlzLmF1dGhTZXJ2aWNlLnNldEV4dGVybmFsQXV0aCh7XG4gICAgICBhY2Nlc3NUb2tlbjogcmVzdWx0LmFjY2Vzc1Rva2VuLFxuICAgICAgcmVmcmVzaFRva2VuOiByZXN1bHQucmVmcmVzaFRva2VuLFxuICAgICAgZmlyZWJhc2VUb2tlbjogcmVzdWx0LmZpcmViYXNlVG9rZW4sXG4gICAgICBleHBpcmVzSW46IHJlc3VsdC5leHBpcmVzSW4sXG4gICAgICByb2xlczogcmVzdWx0LnJvbGVzLFxuICAgICAgcGVybWlzc2lvbnM6IHJlc3VsdC5wZXJtaXNzaW9ucyxcbiAgICB9KTtcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHRoaXMuY29uZmlnPy5ob21lUm91dGUgfHwgJy8nLCB7IHJlcGxhY2VVcmw6IHRydWUgfSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBwcml2YXRlIHByb2Nlc3NDYWxsYmFjaygpOiB2b2lkIHtcbiAgICBjb25zdCBwYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpO1xuICAgIHRoaXMuY2xpZW50Tm9uY2UgPSBwYXJhbXMuZ2V0KCdjbGllbnRfbm9uY2UnKTtcblxuICAgIC8vIERFQlVHOiBMb2cgYWxsIHJlY2VpdmVkIHBhcmFtc1xuICAgIGNvbnNvbGUubG9nKCdbT0F1dGhDYWxsYmFja10gVVJMIHBhcmFtcyByZWNlaXZlZDonLCB7XG4gICAgICB1cmw6IHdpbmRvdy5sb2NhdGlvbi5ocmVmLFxuICAgICAgaGFzQWNjZXNzVG9rZW46IHBhcmFtcy5oYXMoJ2FjY2Vzc190b2tlbicpLFxuICAgICAgaGFzUmVmcmVzaFRva2VuOiBwYXJhbXMuaGFzKCdyZWZyZXNoX3Rva2VuJyksXG4gICAgICBoYXNGaXJlYmFzZVRva2VuOiBwYXJhbXMuaGFzKCdmaXJlYmFzZV90b2tlbicpLFxuICAgICAgZmlyZWJhc2VUb2tlbkxlbmd0aDogcGFyYW1zLmdldCgnZmlyZWJhc2VfdG9rZW4nKT8ubGVuZ3RoIHx8IDAsXG4gICAgICBlcnJvcjogcGFyYW1zLmdldCgnZXJyb3InKSxcbiAgICB9KTtcblxuICAgIC8vIFZlcmlmaWNhciBzaSBoYXkgZXJyb3JcbiAgICBjb25zdCBlcnJvciA9IHBhcmFtcy5nZXQoJ2Vycm9yJyk7XG4gICAgaWYgKGVycm9yKSB7XG4gICAgICB0aGlzLnNlbmRUb1BhcmVudCh7XG4gICAgICAgIHR5cGU6ICdvYXV0aC1jYWxsYmFjaycsXG4gICAgICAgIGVycm9yOiB7XG4gICAgICAgICAgY29kZTogZXJyb3IsXG4gICAgICAgICAgbWVzc2FnZTogcGFyYW1zLmdldCgnZXJyb3JfZGVzY3JpcHRpb24nKSB8fCAnRXJyb3IgZGUgYXV0ZW50aWNhY2nDs24nLFxuICAgICAgICB9IGFzIE9BdXRoRXJyb3IsXG4gICAgICB9KTtcbiAgICAgIHRoaXMubWVzc2FnZSA9ICdFcnJvciBkZSBhdXRlbnRpY2FjacOzbic7XG4gICAgICB0aGlzLmNsb3NlQWZ0ZXJEZWxheSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIE1GQSByZXF1ZXJpZG8g4oCUIGVsIGJhY2tlbmQgcmVkaXJpZ2Ugc2luIHRva2VucywgY29uIG1mYV90b2tlbi4gRWwgZmx1am9cbiAgICAvLyBjb250aW7DumEgY29uIGVsIGNoYWxsZW5nZSBNRkEgKEF1dGhTZXJ2aWNlLnNldE1GQVBlbmRpbmcg4oaSIG1vZGFsIHZlcmlmeSkuXG4gICAgaWYgKHBhcmFtcy5nZXQoJ21mYV9yZXF1aXJlZCcpID09PSAndHJ1ZScpIHtcbiAgICAgIHRoaXMuc2VuZFRvUGFyZW50KHtcbiAgICAgICAgdHlwZTogJ29hdXRoLWNhbGxiYWNrJyxcbiAgICAgICAgdG9rZW5zOiB7XG4gICAgICAgICAgYWNjZXNzVG9rZW46ICcnLFxuICAgICAgICAgIHJlZnJlc2hUb2tlbjogJycsXG4gICAgICAgICAgZXhwaXJlc0luOiAwLFxuICAgICAgICAgIG1mYVJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgIG1mYVRva2VuOiBwYXJhbXMuZ2V0KCdtZmFfdG9rZW4nKSB8fCB1bmRlZmluZWQsXG4gICAgICAgICAgbWZhTWV0aG9kOiAocGFyYW1zLmdldCgnbWZhX21ldGhvZCcpIGFzIE1GQU1ldGhvZCkgfHwgdW5kZWZpbmVkLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgICB0aGlzLm1lc3NhZ2UgPSAnVmVyaWZpY2FjacOzbiBhZGljaW9uYWwgcmVxdWVyaWRhJztcbiAgICAgIHRoaXMuY2xvc2VBZnRlckRlbGF5KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gRXh0cmFlciB0b2tlbnNcbiAgICBjb25zdCBhY2Nlc3NUb2tlbiA9IHBhcmFtcy5nZXQoJ2FjY2Vzc190b2tlbicpO1xuICAgIGNvbnN0IHJlZnJlc2hUb2tlbiA9IHBhcmFtcy5nZXQoJ3JlZnJlc2hfdG9rZW4nKTtcbiAgICBjb25zdCBleHBpcmVzSW4gPSBwYXJhbXMuZ2V0KCdleHBpcmVzX2luJyk7XG4gICAgY29uc3QgZmlyZWJhc2VUb2tlbiA9IHBhcmFtcy5nZXQoJ2ZpcmViYXNlX3Rva2VuJyk7XG5cbiAgICBpZiAoIWFjY2Vzc1Rva2VuIHx8ICFyZWZyZXNoVG9rZW4pIHtcbiAgICAgIHRoaXMuc2VuZFRvUGFyZW50KHtcbiAgICAgICAgdHlwZTogJ29hdXRoLWNhbGxiYWNrJyxcbiAgICAgICAgZXJyb3I6IHtcbiAgICAgICAgICBjb2RlOiAnTUlTU0lOR19UT0tFTlMnLFxuICAgICAgICAgIG1lc3NhZ2U6ICdObyBzZSByZWNpYmllcm9uIGxvcyB0b2tlbnMgZGUgYXV0ZW50aWNhY2nDs24nLFxuICAgICAgICB9IGFzIE9BdXRoRXJyb3IsXG4gICAgICB9KTtcbiAgICAgIHRoaXMubWVzc2FnZSA9ICdFcnJvcjogdG9rZW5zIG5vIHJlY2liaWRvcyc7XG4gICAgICB0aGlzLmNsb3NlQWZ0ZXJEZWxheSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEV4dHJhZXIgcm9sZXMgeSBwZXJtaXNvcyAocHVlZGVuIHZlbmlyIGNvbW8gSlNPTiBlbiBiYXNlNjQpXG4gICAgbGV0IHJvbGVzOiBzdHJpbmdbXSB8IHVuZGVmaW5lZDtcbiAgICBsZXQgcGVybWlzc2lvbnM6IHN0cmluZ1tdIHwgdW5kZWZpbmVkO1xuXG4gICAgY29uc3Qgcm9sZXNQYXJhbSA9IHBhcmFtcy5nZXQoJ3JvbGVzJyk7XG4gICAgY29uc3QgcGVybWlzc2lvbnNQYXJhbSA9IHBhcmFtcy5nZXQoJ3Blcm1pc3Npb25zJyk7XG5cbiAgICBpZiAocm9sZXNQYXJhbSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcm9sZXMgPSBKU09OLnBhcnNlKGF0b2Iocm9sZXNQYXJhbSkpO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHJvbGVzID0gcm9sZXNQYXJhbS5zcGxpdCgnLCcpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChwZXJtaXNzaW9uc1BhcmFtKSB7XG4gICAgICB0cnkge1xuICAgICAgICBwZXJtaXNzaW9ucyA9IEpTT04ucGFyc2UoYXRvYihwZXJtaXNzaW9uc1BhcmFtKSk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgcGVybWlzc2lvbnMgPSBwZXJtaXNzaW9uc1BhcmFtLnNwbGl0KCcsJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRW52aWFyIHRva2VucyBhIGxhIHZlbnRhbmEgcGFkcmVcbiAgICBjb25zdCByZXN1bHQ6IE9BdXRoUmVzdWx0ID0ge1xuICAgICAgYWNjZXNzVG9rZW4sXG4gICAgICByZWZyZXNoVG9rZW4sXG4gICAgICBleHBpcmVzSW46IGV4cGlyZXNJbiA/IHBhcnNlSW50KGV4cGlyZXNJbiwgMTApIDogOTAwLFxuICAgICAgZmlyZWJhc2VUb2tlbjogZmlyZWJhc2VUb2tlbiB8fCB1bmRlZmluZWQsXG4gICAgICByb2xlcyxcbiAgICAgIHBlcm1pc3Npb25zLFxuICAgICAgaXNOZXdVc2VyOiBwYXJhbXMuZ2V0KCdpc19uZXdfdXNlcicpID09PSAndHJ1ZScsXG4gICAgICBsaW5rZWQ6IHBhcmFtcy5nZXQoJ2xpbmtlZCcpID09PSAndHJ1ZScsXG4gICAgfTtcblxuICAgIHRoaXMuc2VuZFRvUGFyZW50KHtcbiAgICAgIHR5cGU6ICdvYXV0aC1jYWxsYmFjaycsXG4gICAgICB0b2tlbnM6IHJlc3VsdCxcbiAgICB9KTtcblxuICAgIC8vIEZsdWpvIHJlZGlyZWN0ICh2ZW50YW5hIHByaW5jaXBhbCwgc2luIG9wZW5lciBxdWUgY29uc3VtYSBlbCBsb2NhbFN0b3JhZ2UpOlxuICAgIC8vIGluc3RhbGFyIGxhIHNlc2nDs24gYWPDoSBtaXNtbyB5IG5hdmVnYXIgYWwgaG9tZSwgZW4gdmV6IGRlIHF1ZWRhciBwZWdhZG8uXG4gICAgaWYgKHRoaXMuaXNNYWluV2luZG93KCkgJiYgdGhpcy5jb21wbGV0ZUluTWFpbldpbmRvdyhyZXN1bHQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5tZXNzYWdlID0gJ0F1dGVudGljYWNpw7NuIGV4aXRvc2EnO1xuICAgIHRoaXMuY2xvc2VBZnRlckRlbGF5KCk7XG4gIH1cblxuICBwcml2YXRlIHNlbmRUb1BhcmVudChkYXRhOiBPQXV0aENhbGxiYWNrRGF0YSk6IHZvaWQge1xuICAgIC8vIEFkanVudGFyIGVsIG5vbmNlIGRlbCBvcGVuZXIgKE0tMDcpIGEgVE9ETyBtZW5zYWplIChzdWNjZXNzLCBNRkEsIGVycm9yKVxuICAgIC8vIHBhcmEgcXVlIGVsIG9wZW5lciB2ZXJpZmlxdWUgcXVlIGVsIGNhbGxiYWNrIGVzIGRlIHN1IHByb3BpbyBmbHVqby5cbiAgICBpZiAodGhpcy5jbGllbnROb25jZSkge1xuICAgICAgZGF0YS5ub25jZSA9IHRoaXMuY2xpZW50Tm9uY2U7XG4gICAgfVxuXG4gICAgLy8gQnJvYWRjYXN0Q2hhbm5lbDogY2FuYWwgcHJpbmNpcGFsIGltbXVuZSBhIENPT1AuIEZ1bmNpb25hIGVudHJlIG1pc21hIG9yaWdpblxuICAgIC8vIHNpbiBpbXBvcnRhciBlbCBicm93c2luZyBjb250ZXh0IGdyb3VwLiBFbCBvcGVuZXIgbG8gZXNjdWNoYSBlbiBPQXV0aFNlcnZpY2UuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGJjID0gbmV3IEJyb2FkY2FzdENoYW5uZWwoJ3ZhbHRlY2gtb2F1dGgtY2FsbGJhY2snKTtcbiAgICAgIGJjLnBvc3RNZXNzYWdlKGRhdGEpO1xuICAgICAgYmMuY2xvc2UoKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1tPQXV0aENhbGxiYWNrXSBCcm9hZGNhc3RDaGFubmVsIGZhaWxlZDonLCBlKTtcbiAgICB9XG5cbiAgICAvLyBsb2NhbFN0b3JhZ2U6IGZhbGxiYWNrIHNlY3VuZGFyaW8gKHBhcmEgY29udGV4dG9zIHNpbiBCcm9hZGNhc3RDaGFubmVsIG9cbiAgICAvLyBjb24gc3RvcmFnZSBwYXJ0aXRpb25pbmcgcmVzdHJpbmdpZG8pLlxuICAgIHRyeSB7XG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnb2F1dGhfY2FsbGJhY2tfZGF0YScsIEpTT04uc3RyaW5naWZ5KGRhdGEpKTtcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdvYXV0aF9jYWxsYmFja190aW1lc3RhbXAnLCBEYXRlLm5vdygpLnRvU3RyaW5nKCkpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUud2FybignW09BdXRoQ2FsbGJhY2tdIENvdWxkIG5vdCBzYXZlIHRvIGxvY2FsU3RvcmFnZTonLCBlKTtcbiAgICB9XG5cbiAgICAvLyBwb3N0TWVzc2FnZTogdGVyY2VyIGZhbGxiYWNrIChmdW5jaW9uYSBjdWFuZG8gbm8gaGF5IENPT1AgZXN0cmljdG8pLlxuICAgIHRyeSB7XG4gICAgICBpZiAod2luZG93Lm9wZW5lciAmJiAhd2luZG93Lm9wZW5lci5jbG9zZWQpIHtcbiAgICAgICAgd2luZG93Lm9wZW5lci5wb3N0TWVzc2FnZShkYXRhLCB3aW5kb3cubG9jYXRpb24ub3JpZ2luKTtcbiAgICAgIH0gZWxzZSBpZiAod2luZG93LnBhcmVudCAhPT0gd2luZG93KSB7XG4gICAgICAgIHdpbmRvdy5wYXJlbnQucG9zdE1lc3NhZ2UoZGF0YSwgd2luZG93LmxvY2F0aW9uLm9yaWdpbik7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gQ09PUCBibG9ja3MgcG9zdE1lc3NhZ2Ug4oCUIGxvcyBkb3MgZmFsbGJhY2tzIGFudGVyaW9yZXMgY3VicmVuIGVzdGUgY2Fzb1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY2xvc2VBZnRlckRlbGF5KCk6IHZvaWQge1xuICAgIC8vIHBvcHVwPXRydWUgZW4gbGEgVVJMIGVzIGVsIGluZGljYWRvciBjb25maWFibGUgZGUgcXVlIHNvbW9zIHBvcHVwIE9BdXRoXG4gICAgLy8gKHdpbmRvdy5uYW1lIHNlIGJvcnJhIGVuIGNyb3NzLW9yaWdpbiBuYXY7IHdpbmRvdy5vcGVuZXIgc2V2ZXIgcG9yIENPT1ApLlxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY29uc3QgcGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKTtcbiAgICAgIGNvbnN0IGlzUG9wdXAgPSBwYXJhbXMuZ2V0KCdwb3B1cCcpID09PSAndHJ1ZScgfHwgd2luZG93Lm5hbWUgPT09ICdvYXV0aCcgfHwgd2luZG93Lm5hbWUgPT09ICdvYXV0aC1saW5rJztcbiAgICAgIGlmICh3aW5kb3cub3BlbmVyIHx8IGlzUG9wdXApIHtcbiAgICAgICAgd2luZG93LmNsb3NlKCk7XG4gICAgICB9XG4gICAgfSwgNTAwKTtcbiAgfVxufVxuIl19
272
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2F1dGgtY2FsbGJhY2suY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9zZXJ2aWNlcy9hdXRoL29hdXRoLWNhbGxiYWNrLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBVSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDcEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRy9DLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUUvQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0RBQWdELENBQUM7Ozs7QUFFakY7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQkc7QUFTSCxNQUFNLE9BQU8sc0JBQXNCO0lBVWpDLFlBQ1UsTUFBYyxFQUNGLFdBQStCLEVBQ0YsTUFBZ0M7UUFGekUsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNGLGdCQUFXLEdBQVgsV0FBVyxDQUFvQjtRQUNGLFdBQU0sR0FBTixNQUFNLENBQTBCO1FBWm5GLFlBQU8sR0FBRyw2QkFBNkIsQ0FBQztRQUV4Qzs7OztXQUlHO1FBQ0ssZ0JBQVcsR0FBa0IsSUFBSSxDQUFDO0lBTXZDLENBQUM7SUFFSixRQUFRO1FBQ04sSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7Ozs7T0FjRztJQUNLLFlBQVk7UUFDbEIsTUFBTSxNQUFNLEdBQUcsSUFBSSxlQUFlLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMzRCxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEtBQUssTUFBTTtZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQ2pELE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQ3hCLENBQUM7SUFFRDs7O09BR0c7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bEMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsb0JBQW9CO29CQUM5QixVQUFVLEVBQUUsSUFBSTtvQkFDaEIsT0FBTyxFQUFFLENBQUMsWUFBWSxFQUFFLGVBQWUsQ0FBQztvQkFDeEMsK0VBQStFO29CQUMvRSxpRkFBaUY7b0JBQ2pGLFFBQVEsRUFBRSxnQkFBZ0I7aUJBQzNCOzswQkFhSSxRQUFROzswQkFDUixRQUFROzswQkFBSSxNQUFNOzJCQUFDLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5qZWN0LCBPbkluaXQsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IE1GQU1ldGhvZCwgT0F1dGhDYWxsYmFja0RhdGEsIE9BdXRoUmVzdWx0LCBPQXV0aEVycm9yLCBWYWx0ZWNoQXV0aENvbmZpZyB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgVkFMVEVDSF9BVVRIX0NPTkZJRyB9IGZyb20gJy4vY29uZmlnJztcbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi9hdXRoLnNlcnZpY2UnO1xuaW1wb3J0IHsgU3BsYXNoQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9hdG9tcy9zcGxhc2gvc3BsYXNoLmNvbXBvbmVudCc7XG5cbi8qKlxuICogQ29tcG9uZW50ZSBkZSBjYWxsYmFjayBwYXJhIE9BdXRoLlxuICpcbiAqIEVzdGUgY29tcG9uZW50ZSBwcm9jZXNhIGxhIHJlc3B1ZXN0YSBkZWwgc2Vydmlkb3IgT0F1dGggeSBlbnbDrWFcbiAqIGxvcyB0b2tlbnMgYSBsYSB2ZW50YW5hIHBhZHJlIHZpYSBwb3N0TWVzc2FnZS5cbiAqXG4gKiBEZWJlIGFncmVnYXJzZSBhIGxhcyBydXRhcyBkZSBsYSBhcGxpY2FjacOzbjpcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIC8vIGFwcC5yb3V0ZXMudHNcbiAqIGltcG9ydCB7IE9BdXRoQ2FsbGJhY2tDb21wb25lbnQgfSBmcm9tICd2YWx0ZWNoLWNvbXBvbmVudHMnO1xuICpcbiAqIGV4cG9ydCBjb25zdCByb3V0ZXM6IFJvdXRlcyA9IFtcbiAqICAgeyBwYXRoOiAnYXV0aC9vYXV0aC9jYWxsYmFjaycsIGNvbXBvbmVudDogT0F1dGhDYWxsYmFja0NvbXBvbmVudCB9LFxuICogICAvLyAuLi4gb3RyYXMgcnV0YXNcbiAqIF07XG4gKiBgYGBcbiAqXG4gKiBFbCBiYWNrZW5kIHJlZGlyaWdlIGEgZXN0YSBydXRhIGNvbiBsb3MgdG9rZW5zIGVuIHF1ZXJ5IHBhcmFtczpcbiAqIGAvYXV0aC9vYXV0aC9jYWxsYmFjaz9hY2Nlc3NfdG9rZW49eHh4JnJlZnJlc2hfdG9rZW49eHh4JmV4cGlyZXNfaW49OTAwYFxuICpcbiAqIE8gY29uIGVycm9yOlxuICogYC9hdXRoL29hdXRoL2NhbGxiYWNrP2Vycm9yPUlOVkFMSURfQ09ERSZlcnJvcl9kZXNjcmlwdGlvbj0uLi5gXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbC1vYXV0aC1jYWxsYmFjaycsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIFNwbGFzaENvbXBvbmVudF0sXG4gIC8vIE1pc21vIHNwbGFzaCBkZSBhcnJhbnF1ZSBkZSBsYSBhcHAgKGxvZ28gKyBwdWxzZSkgZW4gdmV6IGRlIHVuIGxvYWRlciBwcm9waW9cbiAgLy8gY2FzaS1kdXBsaWNhZG86IGVsIGNhbGxiYWNrIE9BdXRoIGVzIHVuYSBjYXJnYSBmdW5kYW1lbnRhbCB5IGRlYmUgdmVyc2UgaWd1YWwuXG4gIHRlbXBsYXRlOiBgPHZhbC1zcGxhc2ggLz5gLFxufSlcbmV4cG9ydCBjbGFzcyBPQXV0aENhbGxiYWNrQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgbWVzc2FnZSA9ICdQcm9jZXNhbmRvIGF1dGVudGljYWNpw7NuLi4uJztcblxuICAvKipcbiAgICogTm9uY2UgcXVlIGVsIG9wZW5lciBnZW5lcsOzIHkgcGFzw7MgcG9yIGVsIGZsdWpvIChyb3VuZC10cmlwIGJhY2tlbmQpLiBTZVxuICAgKiByZWVudsOtYSBhbCBvcGVuZXIgZW4gY2FkYSBtZW5zYWplIHBhcmEgcXVlIHZlcmlmaXF1ZSBlbCBvcmlnZW4gZGVsIGNhbGxiYWNrXG4gICAqIHkgcmVjaGFjZSB1biBvYXV0aF9jYWxsYmFja19kYXRhIGZvcmphZG8gZW4gbG9jYWxTdG9yYWdlIHBvciBYU1MgKE0tMDcpLlxuICAgKi9cbiAgcHJpdmF0ZSBjbGllbnROb25jZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSB8IG51bGwsXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChWQUxURUNIX0FVVEhfQ09ORklHKSBwcml2YXRlIGNvbmZpZzogVmFsdGVjaEF1dGhDb25maWcgfCBudWxsXG4gICkge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnByb2Nlc3NDYWxsYmFjaygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluZGljYSBzaSBlc3RlIGNhbGxiYWNrIGNvcnJlIGNvbW8gbGEgVkVOVEFOQSBQUklOQ0lQQUwgKGZsdWpvIHJlZGlyZWN0KSxcbiAgICogbm8gY29tbyBwb3B1cC5cbiAgICpcbiAgICogTk8gdXNhbW9zIHdpbmRvdy5uYW1lIG5pIHdpbmRvdy5vcGVuZXIgY29tbyBpbmRpY2Fkb3JlcyBwcmltYXJpb3M6XG4gICAqIC0gQ2hyb21lL0ZpcmVmb3ggYm9ycmFuIHdpbmRvdy5uYW1lIGFsIG5hdmVnYXIgY3Jvc3Mtb3JpZ2luIChwcml2YWNpZGFkKSxcbiAgICogICBwb3IgbG8gcXVlIHlhIG5vIHZhbGUgcGFyYSBlbCBmbHVqbyBPQXV0aCBxdWUgcGFzYSBwb3IgR29vZ2xlL01TLlxuICAgKiAtIHdpbmRvdy5vcGVuZXIgcXVlZGEgbnVsbCBjdWFuZG8gZWwgcHJvdmVlZG9yIHRpZW5lIENPT1A6c2FtZS1vcmlnaW5cbiAgICogICAoR29vZ2xlIGxvIHVzYSksIHF1ZSBzZXZlciBsYSByZWZlcmVuY2lhIGVuIGVsIGJvdW5jZS5cbiAgICpcbiAgICogSW5kaWNhZG9yIGNvbmZpYWJsZTogYHBvcHVwPXRydWVgIGVuIGxhIFVSTC4gT0F1dGhTZXJ2aWNlIGxvIGlueWVjdGEgZW5cbiAgICogZWwgcmVkaXJlY3RfdXJpIGFudGVzIGRlbCAvc3RhcnQ7IGVsIGJhY2tlbmQgbG8gcmVlbnbDrWEgaW50YWN0byBlbiBlbFxuICAgKiByZWRpcmVjdCBmaW5hbCB2w61hIGFwcGVuZFBhcmFtcyDihpIgc29icmV2aXZlIHRvZG8gZWwgcm91bmQtdHJpcCBzaW5cbiAgICogZGVwZW5kZXIgZGUgZXN0YWRvIGRlIGxhIHZlbnRhbmEgZGVsIG5hdmVnYWRvci5cbiAgICovXG4gIHByaXZhdGUgaXNNYWluV2luZG93KCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCk7XG4gICAgaWYgKHBhcmFtcy5nZXQoJ3BvcHVwJykgPT09ICd0cnVlJykgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiAhd2luZG93Lm9wZW5lcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wbGV0YSBlbCBsb2dpbiBlbiBsYSB2ZW50YW5hIHByaW5jaXBhbDogaW5zdGFsYSBsYSBzZXNpw7NuIGRlc2RlIGxvc1xuICAgKiB0b2tlbnMgZGVsIGNhbGxiYWNrIHkgbmF2ZWdhIGFsIGhvbWUuXG4gICAqL1xuICBwcml2YXRlIGNvbXBsZXRlSW5NYWluV2luZG93KHJlc3VsdDogT0F1dGhSZXN1bHQpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuYXV0aFNlcnZpY2UpIHJldHVybiBmYWxzZTtcbiAgICB0aGlzLmF1dGhTZXJ2aWNlLnNldEV4dGVybmFsQXV0aCh7XG4gICAgICBhY2Nlc3NUb2tlbjogcmVzdWx0LmFjY2Vzc1Rva2VuLFxuICAgICAgcmVmcmVzaFRva2VuOiByZXN1bHQucmVmcmVzaFRva2VuLFxuICAgICAgZmlyZWJhc2VUb2tlbjogcmVzdWx0LmZpcmViYXNlVG9rZW4sXG4gICAgICBleHBpcmVzSW46IHJlc3VsdC5leHBpcmVzSW4sXG4gICAgICByb2xlczogcmVzdWx0LnJvbGVzLFxuICAgICAgcGVybWlzc2lvbnM6IHJlc3VsdC5wZXJtaXNzaW9ucyxcbiAgICB9KTtcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHRoaXMuY29uZmlnPy5ob21lUm91dGUgfHwgJy8nLCB7IHJlcGxhY2VVcmw6IHRydWUgfSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBwcml2YXRlIHByb2Nlc3NDYWxsYmFjaygpOiB2b2lkIHtcbiAgICBjb25zdCBwYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpO1xuICAgIHRoaXMuY2xpZW50Tm9uY2UgPSBwYXJhbXMuZ2V0KCdjbGllbnRfbm9uY2UnKTtcblxuICAgIC8vIERFQlVHOiBMb2cgYWxsIHJlY2VpdmVkIHBhcmFtc1xuICAgIGNvbnNvbGUubG9nKCdbT0F1dGhDYWxsYmFja10gVVJMIHBhcmFtcyByZWNlaXZlZDonLCB7XG4gICAgICB1cmw6IHdpbmRvdy5sb2NhdGlvbi5ocmVmLFxuICAgICAgaGFzQWNjZXNzVG9rZW46IHBhcmFtcy5oYXMoJ2FjY2Vzc190b2tlbicpLFxuICAgICAgaGFzUmVmcmVzaFRva2VuOiBwYXJhbXMuaGFzKCdyZWZyZXNoX3Rva2VuJyksXG4gICAgICBoYXNGaXJlYmFzZVRva2VuOiBwYXJhbXMuaGFzKCdmaXJlYmFzZV90b2tlbicpLFxuICAgICAgZmlyZWJhc2VUb2tlbkxlbmd0aDogcGFyYW1zLmdldCgnZmlyZWJhc2VfdG9rZW4nKT8ubGVuZ3RoIHx8IDAsXG4gICAgICBlcnJvcjogcGFyYW1zLmdldCgnZXJyb3InKSxcbiAgICB9KTtcblxuICAgIC8vIFZlcmlmaWNhciBzaSBoYXkgZXJyb3JcbiAgICBjb25zdCBlcnJvciA9IHBhcmFtcy5nZXQoJ2Vycm9yJyk7XG4gICAgaWYgKGVycm9yKSB7XG4gICAgICB0aGlzLnNlbmRUb1BhcmVudCh7XG4gICAgICAgIHR5cGU6ICdvYXV0aC1jYWxsYmFjaycsXG4gICAgICAgIGVycm9yOiB7XG4gICAgICAgICAgY29kZTogZXJyb3IsXG4gICAgICAgICAgbWVzc2FnZTogcGFyYW1zLmdldCgnZXJyb3JfZGVzY3JpcHRpb24nKSB8fCAnRXJyb3IgZGUgYXV0ZW50aWNhY2nDs24nLFxuICAgICAgICB9IGFzIE9BdXRoRXJyb3IsXG4gICAgICB9KTtcbiAgICAgIHRoaXMubWVzc2FnZSA9ICdFcnJvciBkZSBhdXRlbnRpY2FjacOzbic7XG4gICAgICB0aGlzLmNsb3NlQWZ0ZXJEZWxheSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIE1GQSByZXF1ZXJpZG8g4oCUIGVsIGJhY2tlbmQgcmVkaXJpZ2Ugc2luIHRva2VucywgY29uIG1mYV90b2tlbi4gRWwgZmx1am9cbiAgICAvLyBjb250aW7DumEgY29uIGVsIGNoYWxsZW5nZSBNRkEgKEF1dGhTZXJ2aWNlLnNldE1GQVBlbmRpbmcg4oaSIG1vZGFsIHZlcmlmeSkuXG4gICAgaWYgKHBhcmFtcy5nZXQoJ21mYV9yZXF1aXJlZCcpID09PSAndHJ1ZScpIHtcbiAgICAgIGNvbnN0IG1mYVRva2VuID0gcGFyYW1zLmdldCgnbWZhX3Rva2VuJykgfHwgdW5kZWZpbmVkO1xuICAgICAgY29uc3QgbWZhTWV0aG9kID0gKHBhcmFtcy5nZXQoJ21mYV9tZXRob2QnKSBhcyBNRkFNZXRob2QpIHx8IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuc2VuZFRvUGFyZW50KHtcbiAgICAgICAgdHlwZTogJ29hdXRoLWNhbGxiYWNrJyxcbiAgICAgICAgdG9rZW5zOiB7XG4gICAgICAgICAgYWNjZXNzVG9rZW46ICcnLFxuICAgICAgICAgIHJlZnJlc2hUb2tlbjogJycsXG4gICAgICAgICAgZXhwaXJlc0luOiAwLFxuICAgICAgICAgIG1mYVJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgIG1mYVRva2VuLFxuICAgICAgICAgIG1mYU1ldGhvZCxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBGbHVqbyByZWRpcmVjdCBlbiB2ZW50YW5hIHByaW5jaXBhbDogbm8gaGF5IG9wZW5lciBlc2N1Y2hhbmRvIGVsXG4gICAgICAvLyBjYWxsYmFjay4gRGVqYW1vcyBlbCBjaGFsbGVuZ2UgZW4gQXV0aFNlcnZpY2UgeSB2b2x2ZW1vcyBhbCBsb2dpbiBwYXJhXG4gICAgICAvLyBxdWUgdmFsLWxvZ2luIGFicmEgZWwgbW9kYWwgTUZBIHNvYnJlIGxhIG1pc21hIFNQQS5cbiAgICAgIGlmICh0aGlzLmlzTWFpbldpbmRvdygpICYmIHRoaXMuYXV0aFNlcnZpY2UgJiYgbWZhVG9rZW4gJiYgbWZhTWV0aG9kKSB7XG4gICAgICAgIHRoaXMuYXV0aFNlcnZpY2Uuc2V0T0F1dGhNRkFQZW5kaW5nKG1mYVRva2VuLCBtZmFNZXRob2QpO1xuICAgICAgICBjb25zdCBsb2dpblJvdXRlID0gdGhpcy5jb25maWc/LmxvZ2luUm91dGUgfHwgJy9sb2dpbic7XG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoYCR7bG9naW5Sb3V0ZX0/b2F1dGhfbWZhPTFgLCB7IHJlcGxhY2VVcmw6IHRydWUgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5tZXNzYWdlID0gJ1ZlcmlmaWNhY2nDs24gYWRpY2lvbmFsIHJlcXVlcmlkYSc7XG4gICAgICB0aGlzLmNsb3NlQWZ0ZXJEZWxheSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEV4dHJhZXIgdG9rZW5zXG4gICAgY29uc3QgYWNjZXNzVG9rZW4gPSBwYXJhbXMuZ2V0KCdhY2Nlc3NfdG9rZW4nKTtcbiAgICBjb25zdCByZWZyZXNoVG9rZW4gPSBwYXJhbXMuZ2V0KCdyZWZyZXNoX3Rva2VuJyk7XG4gICAgY29uc3QgZXhwaXJlc0luID0gcGFyYW1zLmdldCgnZXhwaXJlc19pbicpO1xuICAgIGNvbnN0IGZpcmViYXNlVG9rZW4gPSBwYXJhbXMuZ2V0KCdmaXJlYmFzZV90b2tlbicpO1xuXG4gICAgaWYgKCFhY2Nlc3NUb2tlbiB8fCAhcmVmcmVzaFRva2VuKSB7XG4gICAgICB0aGlzLnNlbmRUb1BhcmVudCh7XG4gICAgICAgIHR5cGU6ICdvYXV0aC1jYWxsYmFjaycsXG4gICAgICAgIGVycm9yOiB7XG4gICAgICAgICAgY29kZTogJ01JU1NJTkdfVE9LRU5TJyxcbiAgICAgICAgICBtZXNzYWdlOiAnTm8gc2UgcmVjaWJpZXJvbiBsb3MgdG9rZW5zIGRlIGF1dGVudGljYWNpw7NuJyxcbiAgICAgICAgfSBhcyBPQXV0aEVycm9yLFxuICAgICAgfSk7XG4gICAgICB0aGlzLm1lc3NhZ2UgPSAnRXJyb3I6IHRva2VucyBubyByZWNpYmlkb3MnO1xuICAgICAgdGhpcy5jbG9zZUFmdGVyRGVsYXkoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBFeHRyYWVyIHJvbGVzIHkgcGVybWlzb3MgKHB1ZWRlbiB2ZW5pciBjb21vIEpTT04gZW4gYmFzZTY0KVxuICAgIGxldCByb2xlczogc3RyaW5nW10gfCB1bmRlZmluZWQ7XG4gICAgbGV0IHBlcm1pc3Npb25zOiBzdHJpbmdbXSB8IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0IHJvbGVzUGFyYW0gPSBwYXJhbXMuZ2V0KCdyb2xlcycpO1xuICAgIGNvbnN0IHBlcm1pc3Npb25zUGFyYW0gPSBwYXJhbXMuZ2V0KCdwZXJtaXNzaW9ucycpO1xuXG4gICAgaWYgKHJvbGVzUGFyYW0pIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJvbGVzID0gSlNPTi5wYXJzZShhdG9iKHJvbGVzUGFyYW0pKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICByb2xlcyA9IHJvbGVzUGFyYW0uc3BsaXQoJywnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocGVybWlzc2lvbnNQYXJhbSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcGVybWlzc2lvbnMgPSBKU09OLnBhcnNlKGF0b2IocGVybWlzc2lvbnNQYXJhbSkpO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHBlcm1pc3Npb25zID0gcGVybWlzc2lvbnNQYXJhbS5zcGxpdCgnLCcpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEVudmlhciB0b2tlbnMgYSBsYSB2ZW50YW5hIHBhZHJlXG4gICAgY29uc3QgcmVzdWx0OiBPQXV0aFJlc3VsdCA9IHtcbiAgICAgIGFjY2Vzc1Rva2VuLFxuICAgICAgcmVmcmVzaFRva2VuLFxuICAgICAgZXhwaXJlc0luOiBleHBpcmVzSW4gPyBwYXJzZUludChleHBpcmVzSW4sIDEwKSA6IDkwMCxcbiAgICAgIGZpcmViYXNlVG9rZW46IGZpcmViYXNlVG9rZW4gfHwgdW5kZWZpbmVkLFxuICAgICAgcm9sZXMsXG4gICAgICBwZXJtaXNzaW9ucyxcbiAgICAgIGlzTmV3VXNlcjogcGFyYW1zLmdldCgnaXNfbmV3X3VzZXInKSA9PT0gJ3RydWUnLFxuICAgICAgbGlua2VkOiBwYXJhbXMuZ2V0KCdsaW5rZWQnKSA9PT0gJ3RydWUnLFxuICAgIH07XG5cbiAgICB0aGlzLnNlbmRUb1BhcmVudCh7XG4gICAgICB0eXBlOiAnb2F1dGgtY2FsbGJhY2snLFxuICAgICAgdG9rZW5zOiByZXN1bHQsXG4gICAgfSk7XG5cbiAgICAvLyBGbHVqbyByZWRpcmVjdCAodmVudGFuYSBwcmluY2lwYWwsIHNpbiBvcGVuZXIgcXVlIGNvbnN1bWEgZWwgbG9jYWxTdG9yYWdlKTpcbiAgICAvLyBpbnN0YWxhciBsYSBzZXNpw7NuIGFjw6EgbWlzbW8geSBuYXZlZ2FyIGFsIGhvbWUsIGVuIHZleiBkZSBxdWVkYXIgcGVnYWRvLlxuICAgIGlmICh0aGlzLmlzTWFpbldpbmRvdygpICYmIHRoaXMuY29tcGxldGVJbk1haW5XaW5kb3cocmVzdWx0KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubWVzc2FnZSA9ICdBdXRlbnRpY2FjacOzbiBleGl0b3NhJztcbiAgICB0aGlzLmNsb3NlQWZ0ZXJEZWxheSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZW5kVG9QYXJlbnQoZGF0YTogT0F1dGhDYWxsYmFja0RhdGEpOiB2b2lkIHtcbiAgICAvLyBBZGp1bnRhciBlbCBub25jZSBkZWwgb3BlbmVyIChNLTA3KSBhIFRPRE8gbWVuc2FqZSAoc3VjY2VzcywgTUZBLCBlcnJvcilcbiAgICAvLyBwYXJhIHF1ZSBlbCBvcGVuZXIgdmVyaWZpcXVlIHF1ZSBlbCBjYWxsYmFjayBlcyBkZSBzdSBwcm9waW8gZmx1am8uXG4gICAgaWYgKHRoaXMuY2xpZW50Tm9uY2UpIHtcbiAgICAgIGRhdGEubm9uY2UgPSB0aGlzLmNsaWVudE5vbmNlO1xuICAgIH1cblxuICAgIC8vIEJyb2FkY2FzdENoYW5uZWw6IGNhbmFsIHByaW5jaXBhbCBpbW11bmUgYSBDT09QLiBGdW5jaW9uYSBlbnRyZSBtaXNtYSBvcmlnaW5cbiAgICAvLyBzaW4gaW1wb3J0YXIgZWwgYnJvd3NpbmcgY29udGV4dCBncm91cC4gRWwgb3BlbmVyIGxvIGVzY3VjaGEgZW4gT0F1dGhTZXJ2aWNlLlxuICAgIHRyeSB7XG4gICAgICBjb25zdCBiYyA9IG5ldyBCcm9hZGNhc3RDaGFubmVsKCd2YWx0ZWNoLW9hdXRoLWNhbGxiYWNrJyk7XG4gICAgICBiYy5wb3N0TWVzc2FnZShkYXRhKTtcbiAgICAgIGJjLmNsb3NlKCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS53YXJuKCdbT0F1dGhDYWxsYmFja10gQnJvYWRjYXN0Q2hhbm5lbCBmYWlsZWQ6JywgZSk7XG4gICAgfVxuXG4gICAgLy8gbG9jYWxTdG9yYWdlOiBmYWxsYmFjayBzZWN1bmRhcmlvIChwYXJhIGNvbnRleHRvcyBzaW4gQnJvYWRjYXN0Q2hhbm5lbCBvXG4gICAgLy8gY29uIHN0b3JhZ2UgcGFydGl0aW9uaW5nIHJlc3RyaW5naWRvKS5cbiAgICB0cnkge1xuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ29hdXRoX2NhbGxiYWNrX2RhdGEnLCBKU09OLnN0cmluZ2lmeShkYXRhKSk7XG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnb2F1dGhfY2FsbGJhY2tfdGltZXN0YW1wJywgRGF0ZS5ub3coKS50b1N0cmluZygpKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1tPQXV0aENhbGxiYWNrXSBDb3VsZCBub3Qgc2F2ZSB0byBsb2NhbFN0b3JhZ2U6JywgZSk7XG4gICAgfVxuXG4gICAgLy8gcG9zdE1lc3NhZ2U6IHRlcmNlciBmYWxsYmFjayAoZnVuY2lvbmEgY3VhbmRvIG5vIGhheSBDT09QIGVzdHJpY3RvKS5cbiAgICB0cnkge1xuICAgICAgaWYgKHdpbmRvdy5vcGVuZXIgJiYgIXdpbmRvdy5vcGVuZXIuY2xvc2VkKSB7XG4gICAgICAgIHdpbmRvdy5vcGVuZXIucG9zdE1lc3NhZ2UoZGF0YSwgd2luZG93LmxvY2F0aW9uLm9yaWdpbik7XG4gICAgICB9IGVsc2UgaWYgKHdpbmRvdy5wYXJlbnQgIT09IHdpbmRvdykge1xuICAgICAgICB3aW5kb3cucGFyZW50LnBvc3RNZXNzYWdlKGRhdGEsIHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4pO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIENPT1AgYmxvY2tzIHBvc3RNZXNzYWdlIOKAlCBsb3MgZG9zIGZhbGxiYWNrcyBhbnRlcmlvcmVzIGN1YnJlbiBlc3RlIGNhc29cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNsb3NlQWZ0ZXJEZWxheSgpOiB2b2lkIHtcbiAgICAvLyBwb3B1cD10cnVlIGVuIGxhIFVSTCBlcyBlbCBpbmRpY2Fkb3IgY29uZmlhYmxlIGRlIHF1ZSBzb21vcyBwb3B1cCBPQXV0aFxuICAgIC8vICh3aW5kb3cubmFtZSBzZSBib3JyYSBlbiBjcm9zcy1vcmlnaW4gbmF2OyB3aW5kb3cub3BlbmVyIHNldmVyIHBvciBDT09QKS5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCk7XG4gICAgICBjb25zdCBpc1BvcHVwID0gcGFyYW1zLmdldCgncG9wdXAnKSA9PT0gJ3RydWUnO1xuICAgICAgaWYgKHdpbmRvdy5vcGVuZXIgfHwgaXNQb3B1cCkge1xuICAgICAgICB3aW5kb3cuY2xvc2UoKTtcbiAgICAgIH1cbiAgICB9LCA1MDApO1xuICB9XG59XG4iXX0=
@@ -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.548';
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDdXJyZW50IHZlcnNpb24gb2YgdmFsdGVjaC1jb21wb25lbnRzLlxuICogVGhpcyBpcyBhdXRvbWF0aWNhbGx5IHVwZGF0ZWQgZHVyaW5nIHRoZSBwdWJsaXNoIHByb2Nlc3MuXG4gKi9cbmV4cG9ydCBjb25zdCBWRVJTSU9OID0gJzQuMC41NDgnO1xuIl19
5
+ export const VERSION = '4.0.549';
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDdXJyZW50IHZlcnNpb24gb2YgdmFsdGVjaC1jb21wb25lbnRzLlxuICogVGhpcyBpcyBhdXRvbWF0aWNhbGx5IHVwZGF0ZWQgZHVyaW5nIHRoZSBwdWJsaXNoIHByb2Nlc3MuXG4gKi9cbmV4cG9ydCBjb25zdCBWRVJTSU9OID0gJzQuMC41NDknO1xuIl19
@@ -59,7 +59,7 @@ import fixWebmDuration from 'fix-webm-duration';
59
59
  * Current version of valtech-components.
60
60
  * This is automatically updated during the publish process.
61
61
  */
62
- const VERSION = '4.0.548';
62
+ const VERSION = '4.0.549';
63
63
 
64
64
  // Control de estado de refresco (singleton a nivel de módulo)
65
65
  let isRefreshing = false;
@@ -8822,6 +8822,19 @@ class AuthService {
8822
8822
  return throwError(() => authError);
8823
8823
  }));
8824
8824
  }
8825
+ /**
8826
+ * Continúa un login OAuth que volvió por redirect principal con MFA requerido.
8827
+ * En ese caso `signinWithOAuth()` no puede emitir porque la página navegó al
8828
+ * backend OAuth y el callback corre en una ruta nueva de la misma SPA.
8829
+ */
8830
+ setOAuthMFAPending(mfaToken, method) {
8831
+ this.stateService.clearError();
8832
+ this.stateService.setMFAPending({
8833
+ required: true,
8834
+ mfaToken,
8835
+ method,
8836
+ });
8837
+ }
8825
8838
  /**
8826
8839
  * Vincula un proveedor OAuth adicional a la cuenta actual.
8827
8840
  * Requiere que el usuario esté autenticado.
@@ -35462,10 +35475,7 @@ class OAuthCallbackComponent {
35462
35475
  const params = new URLSearchParams(window.location.search);
35463
35476
  if (params.get('popup') === 'true')
35464
35477
  return false;
35465
- // Compatibilidad con flujos sin popup=true (redirect directo, tests, legacy).
35466
- if (window.name === 'oauth' || window.name === 'oauth-link')
35467
- return false;
35468
- return !window.opener && window.parent === window;
35478
+ return !window.opener;
35469
35479
  }
35470
35480
  /**
35471
35481
  * Completa el login en la ventana principal: instala la sesión desde los
@@ -35514,6 +35524,8 @@ class OAuthCallbackComponent {
35514
35524
  // MFA requerido — el backend redirige sin tokens, con mfa_token. El flujo
35515
35525
  // continúa con el challenge MFA (AuthService.setMFAPending → modal verify).
35516
35526
  if (params.get('mfa_required') === 'true') {
35527
+ const mfaToken = params.get('mfa_token') || undefined;
35528
+ const mfaMethod = params.get('mfa_method') || undefined;
35517
35529
  this.sendToParent({
35518
35530
  type: 'oauth-callback',
35519
35531
  tokens: {
@@ -35521,10 +35533,19 @@ class OAuthCallbackComponent {
35521
35533
  refreshToken: '',
35522
35534
  expiresIn: 0,
35523
35535
  mfaRequired: true,
35524
- mfaToken: params.get('mfa_token') || undefined,
35525
- mfaMethod: params.get('mfa_method') || undefined,
35536
+ mfaToken,
35537
+ mfaMethod,
35526
35538
  },
35527
35539
  });
35540
+ // Flujo redirect en ventana principal: no hay opener escuchando el
35541
+ // callback. Dejamos el challenge en AuthService y volvemos al login para
35542
+ // que val-login abra el modal MFA sobre la misma SPA.
35543
+ if (this.isMainWindow() && this.authService && mfaToken && mfaMethod) {
35544
+ this.authService.setOAuthMFAPending(mfaToken, mfaMethod);
35545
+ const loginRoute = this.config?.loginRoute || '/login';
35546
+ this.router.navigateByUrl(`${loginRoute}?oauth_mfa=1`, { replaceUrl: true });
35547
+ return;
35548
+ }
35528
35549
  this.message = 'Verificación adicional requerida';
35529
35550
  this.closeAfterDelay();
35530
35551
  return;
@@ -35633,7 +35654,7 @@ class OAuthCallbackComponent {
35633
35654
  // (window.name se borra en cross-origin nav; window.opener sever por COOP).
35634
35655
  setTimeout(() => {
35635
35656
  const params = new URLSearchParams(window.location.search);
35636
- const isPopup = params.get('popup') === 'true' || window.name === 'oauth' || window.name === 'oauth-link';
35657
+ const isPopup = params.get('popup') === 'true';
35637
35658
  if (window.opener || isPopup) {
35638
35659
  window.close();
35639
35660
  }
@@ -44879,6 +44900,9 @@ class LoginComponent {
44879
44900
  if (this.props.initialOperation === 'signup') {
44880
44901
  this.isRegisterModalOpen = true;
44881
44902
  }
44903
+ if (this.authService.mfaPending().required) {
44904
+ queueMicrotask(() => this.openMFAVerifyModal());
44905
+ }
44882
44906
  }
44883
44907
  ngOnDestroy() {
44884
44908
  this.stopResendCooldown();