valtech-components 2.0.575 → 2.0.577

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.
@@ -113,13 +113,32 @@ export class OAuthCallbackComponent {
113
113
  this.closeAfterDelay();
114
114
  }
115
115
  sendToParent(data) {
116
- if (window.opener) {
117
- // Enviar al opener (ventana que abrió el popup)
118
- window.opener.postMessage(data, window.location.origin);
116
+ // Siempre guardar en localStorage como fallback (para COOP issues)
117
+ try {
118
+ localStorage.setItem('oauth_callback_data', JSON.stringify(data));
119
+ localStorage.setItem('oauth_callback_timestamp', Date.now().toString());
120
+ console.log('[OAuthCallback] Saved to localStorage as fallback');
119
121
  }
120
- else if (window.parent !== window) {
121
- // Enviar al parent (si estamos en iframe)
122
- window.parent.postMessage(data, window.location.origin);
122
+ catch (e) {
123
+ console.warn('[OAuthCallback] Could not save to localStorage:', e);
124
+ }
125
+ // Intentar postMessage (puede fallar por COOP)
126
+ try {
127
+ if (window.opener && !window.opener.closed) {
128
+ window.opener.postMessage(data, window.location.origin);
129
+ console.log('[OAuthCallback] postMessage sent to opener');
130
+ }
131
+ else if (window.parent !== window) {
132
+ window.parent.postMessage(data, window.location.origin);
133
+ console.log('[OAuthCallback] postMessage sent to parent');
134
+ }
135
+ else {
136
+ console.log('[OAuthCallback] No opener/parent available, using localStorage only');
137
+ }
138
+ }
139
+ catch (e) {
140
+ // COOP blocks postMessage - localStorage fallback already saved
141
+ console.warn('[OAuthCallback] postMessage blocked (COOP), using localStorage fallback:', e);
123
142
  }
124
143
  }
125
144
  closeAfterDelay() {
@@ -147,4 +166,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
147
166
  </div>
148
167
  `, styles: [".oauth-callback{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100vh;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}.oauth-callback__spinner{width:40px;height:40px;border:3px solid #f3f3f3;border-top:3px solid #3498db;border-radius:50%;animation:spin 1s linear infinite;margin-bottom:16px}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.oauth-callback__text{color:#666;font-size:14px}\n"] }]
149
168
  }] });
150
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2F1dGgtY2FsbGJhY2suY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9zZXJ2aWNlcy9hdXRoL29hdXRoLWNhbGxiYWNrLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ2xELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7QUFHL0M7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQkc7QUEwQ0gsTUFBTSxPQUFPLHNCQUFzQjtJQXpDbkM7UUEwQ0UsWUFBTyxHQUFHLDZCQUE2QixDQUFDO0tBbUh6QztJQWpIQyxRQUFRO1FBQ04sSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFTyxlQUFlO1FBQ3JCLE1BQU0sTUFBTSxHQUFHLElBQUksZUFBZSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFM0QsaUNBQWlDO1FBQ2pDLE9BQU8sQ0FBQyxHQUFHLENBQUMsc0NBQXNDLEVBQUU7WUFDbEQsR0FBRyxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSTtZQUN6QixjQUFjLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUM7WUFDMUMsZUFBZSxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDO1lBQzVDLGdCQUFnQixFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUM7WUFDOUMsbUJBQW1CLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLE1BQU0sSUFBSSxDQUFDO1lBQzlELEtBQUssRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQztTQUMzQixDQUFDLENBQUM7UUFFSCx5QkFBeUI7UUFDekIsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLEdBQUcs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QUVILElBQUksQ0FBQyxPQUFPLEdBQUcsdUJBQXVCLENBQUM7UUFDdkMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFTyxZQUFZLENBQUMsSUFBdUI7UUFDMUMsSUFBSSxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDbEIsZ0RBQWdEO1lBQ2hELE1BQU0sQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzFELENBQUM7YUFBTSxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssTUFBTSxFQUFFLENBQUM7WUFDcEMsMENBQTBDO1lBQzFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzFELENBQUM7SUFDSCxDQUFDO0lBRU8sZUFBZTtRQUNyQiwwREFBMEQ7UUFDMUQsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLElBQUksTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUNsQixNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDakIsQ0FBQztRQUNILENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNWLENBQUM7K0dBbkhVLHNCQUFzQjttR0FBdEIsc0JBQXNCLDhFQXJDdkI7Ozs7O0dBS1QsOGhCQU5TLFlBQVk7OzRGQXNDWCxzQkFBc0I7a0JBekNsQyxTQUFTOytCQUNFLG9CQUFvQixjQUNsQixJQUFJLFdBQ1AsQ0FBQyxZQUFZLENBQUMsWUFDYjs7Ozs7R0FLVCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgT0F1dGhDYWxsYmFja0RhdGEsIE9BdXRoUmVzdWx0LCBPQXV0aEVycm9yIH0gZnJvbSAnLi90eXBlcyc7XG5cbi8qKlxuICogQ29tcG9uZW50ZSBkZSBjYWxsYmFjayBwYXJhIE9BdXRoLlxuICpcbiAqIEVzdGUgY29tcG9uZW50ZSBwcm9jZXNhIGxhIHJlc3B1ZXN0YSBkZWwgc2Vydmlkb3IgT0F1dGggeSBlbnbDrWFcbiAqIGxvcyB0b2tlbnMgYSBsYSB2ZW50YW5hIHBhZHJlIHZpYSBwb3N0TWVzc2FnZS5cbiAqXG4gKiBEZWJlIGFncmVnYXJzZSBhIGxhcyBydXRhcyBkZSBsYSBhcGxpY2FjacOzbjpcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIC8vIGFwcC5yb3V0ZXMudHNcbiAqIGltcG9ydCB7IE9BdXRoQ2FsbGJhY2tDb21wb25lbnQgfSBmcm9tICd2YWx0ZWNoLWNvbXBvbmVudHMnO1xuICpcbiAqIGV4cG9ydCBjb25zdCByb3V0ZXM6IFJvdXRlcyA9IFtcbiAqICAgeyBwYXRoOiAnYXV0aC9vYXV0aC9jYWxsYmFjaycsIGNvbXBvbmVudDogT0F1dGhDYWxsYmFja0NvbXBvbmVudCB9LFxuICogICAvLyAuLi4gb3RyYXMgcnV0YXNcbiAqIF07XG4gKiBgYGBcbiAqXG4gKiBFbCBiYWNrZW5kIHJlZGlyaWdlIGEgZXN0YSBydXRhIGNvbiBsb3MgdG9rZW5zIGVuIHF1ZXJ5IHBhcmFtczpcbiAqIGAvYXV0aC9vYXV0aC9jYWxsYmFjaz9hY2Nlc3NfdG9rZW49eHh4JnJlZnJlc2hfdG9rZW49eHh4JmV4cGlyZXNfaW49OTAwYFxuICpcbiAqIE8gY29uIGVycm9yOlxuICogYC9hdXRoL29hdXRoL2NhbGxiYWNrP2Vycm9yPUlOVkFMSURfQ09ERSZlcnJvcl9kZXNjcmlwdGlvbj0uLi5gXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbC1vYXV0aC1jYWxsYmFjaycsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXYgY2xhc3M9XCJvYXV0aC1jYWxsYmFja1wiPlxuICAgICAgPGRpdiBjbGFzcz1cIm9hdXRoLWNhbGxiYWNrX19zcGlubmVyXCI+PC9kaXY+XG4gICAgICA8cCBjbGFzcz1cIm9hdXRoLWNhbGxiYWNrX190ZXh0XCI+e3sgbWVzc2FnZSB9fTwvcD5cbiAgICA8L2Rpdj5cbiAgYCxcbiAgc3R5bGVzOiBbYFxuICAgIC5vYXV0aC1jYWxsYmFjayB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgIGhlaWdodDogMTAwdmg7XG4gICAgICBmb250LWZhbWlseTogLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCAnU2Vnb2UgVUknLCBSb2JvdG8sIHNhbnMtc2VyaWY7XG4gICAgfVxuXG4gICAgLm9hdXRoLWNhbGxiYWNrX19zcGlubmVyIHtcbiAgICAgIHdpZHRoOiA0MHB4O1xuICAgICAgaGVpZ2h0OiA0MHB4O1xuICAgICAgYm9yZGVyOiAzcHggc29saWQgI2YzZjNmMztcbiAgICAgIGJvcmRlci10b3A6IDNweCBzb2xpZCAjMzQ5OGRiO1xuICAgICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgICAgYW5pbWF0aW9uOiBzcGluIDFzIGxpbmVhciBpbmZpbml0ZTtcbiAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7XG4gICAgfVxuXG4gICAgQGtleWZyYW1lcyBzcGluIHtcbiAgICAgIDAlIHsgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7IH1cbiAgICAgIDEwMCUgeyB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpOyB9XG4gICAgfVxuXG4gICAgLm9hdXRoLWNhbGxiYWNrX190ZXh0IHtcbiAgICAgIGNvbG9yOiAjNjY2O1xuICAgICAgZm9udC1zaXplOiAxNHB4O1xuICAgIH1cbiAgYF0sXG59KVxuZXhwb3J0IGNsYXNzIE9BdXRoQ2FsbGJhY2tDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBtZXNzYWdlID0gJ1Byb2Nlc2FuZG8gYXV0ZW50aWNhY2nDs24uLi4nO1xuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMucHJvY2Vzc0NhbGxiYWNrKCk7XG4gIH1cblxuICBwcml2YXRlIHByb2Nlc3NDYWxsYmFjaygpOiB2b2lkIHtcbiAgICBjb25zdCBwYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpO1xuXG4gICAgLy8gREVCVUc6IExvZyBhbGwgcmVjZWl2ZWQgcGFyYW1zXG4gICAgY29uc29sZS5sb2coJ1tPQXV0aENhbGxiYWNrXSBVUkwgcGFyYW1zIHJlY2VpdmVkOicsIHtcbiAgICAgIHVybDogd2luZG93LmxvY2F0aW9uLmhyZWYsXG4gICAgICBoYXNBY2Nlc3NUb2tlbjogcGFyYW1zLmhhcygnYWNjZXNzX3Rva2VuJyksXG4gICAgICBoYXNSZWZyZXNoVG9rZW46IHBhcmFtcy5oYXMoJ3JlZnJlc2hfdG9rZW4nKSxcbiAgICAgIGhhc0ZpcmViYXNlVG9rZW46IHBhcmFtcy5oYXMoJ2ZpcmViYXNlX3Rva2VuJyksXG4gICAgICBmaXJlYmFzZVRva2VuTGVuZ3RoOiBwYXJhbXMuZ2V0KCdmaXJlYmFzZV90b2tlbicpPy5sZW5ndGggfHwgMCxcbiAgICAgIGVycm9yOiBwYXJhbXMuZ2V0KCdlcnJvcicpLFxuICAgIH0pO1xuXG4gICAgLy8gVmVyaWZpY2FyIHNpIGhheSBlcnJvclxuICAgIGNvbnN0IGVycm9yID0gcGFyYW1zLmdldCgnZXJyb3InKTtcbiAgICBpZiAoZXJyb3IpIHtcbiAgICAgIHRoaXMuc2VuZFRvUGFyZW50KHtcbiAgICAgICAgdHlwZTogJ29hdXRoLWNhbGxiYWNrJyxcbiAgICAgICAgZXJyb3I6IHtcbiAgICAgICAgICBjb2RlOiBlcnJvcixcbiAgICAgICAgICBtZXNzYWdlOiBwYXJhbXMuZ2V0KCdlcnJvcl9kZXNjcmlwdGlvbicpIHx8ICdFcnJvciBkZSBhdXRlbnRpY2FjacOzbicsXG4gICAgICAgIH0gYXMgT0F1dGhFcnJvcixcbiAgICAgIH0pO1xuICAgICAgdGhpcy5tZXNzYWdlID0gJ0Vycm9yIGRlIGF1dGVudGljYWNpw7NuJztcbiAgICAgIHRoaXMuY2xvc2VBZnRlckRlbGF5KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gRXh0cmFlciB0b2tlbnNcbiAgICBjb25zdCBhY2Nlc3NUb2tlbiA9IHBhcmFtcy5nZXQoJ2FjY2Vzc190b2tlbicpO1xuICAgIGNvbnN0IHJlZnJlc2hUb2tlbiA9IHBhcmFtcy5nZXQoJ3JlZnJlc2hfdG9rZW4nKTtcbiAgICBjb25zdCBleHBpcmVzSW4gPSBwYXJhbXMuZ2V0KCdleHBpcmVzX2luJyk7XG4gICAgY29uc3QgZmlyZWJhc2VUb2tlbiA9IHBhcmFtcy5nZXQoJ2ZpcmViYXNlX3Rva2VuJyk7XG5cbiAgICBpZiAoIWFjY2Vzc1Rva2VuIHx8ICFyZWZyZXNoVG9rZW4pIHtcbiAgICAgIHRoaXMuc2VuZFRvUGFyZW50KHtcbiAgICAgICAgdHlwZTogJ29hdXRoLWNhbGxiYWNrJyxcbiAgICAgICAgZXJyb3I6IHtcbiAgICAgICAgICBjb2RlOiAnTUlTU0lOR19UT0tFTlMnLFxuICAgICAgICAgIG1lc3NhZ2U6ICdObyBzZSByZWNpYmllcm9uIGxvcyB0b2tlbnMgZGUgYXV0ZW50aWNhY2nDs24nLFxuICAgICAgICB9IGFzIE9BdXRoRXJyb3IsXG4gICAgICB9KTtcbiAgICAgIHRoaXMubWVzc2FnZSA9ICdFcnJvcjogdG9rZW5zIG5vIHJlY2liaWRvcyc7XG4gICAgICB0aGlzLmNsb3NlQWZ0ZXJEZWxheSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEV4dHJhZXIgcm9sZXMgeSBwZXJtaXNvcyAocHVlZGVuIHZlbmlyIGNvbW8gSlNPTiBlbiBiYXNlNjQpXG4gICAgbGV0IHJvbGVzOiBzdHJpbmdbXSB8IHVuZGVmaW5lZDtcbiAgICBsZXQgcGVybWlzc2lvbnM6IHN0cmluZ1tdIHwgdW5kZWZpbmVkO1xuXG4gICAgY29uc3Qgcm9sZXNQYXJhbSA9IHBhcmFtcy5nZXQoJ3JvbGVzJyk7XG4gICAgY29uc3QgcGVybWlzc2lvbnNQYXJhbSA9IHBhcmFtcy5nZXQoJ3Blcm1pc3Npb25zJyk7XG5cbiAgICBpZiAocm9sZXNQYXJhbSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcm9sZXMgPSBKU09OLnBhcnNlKGF0b2Iocm9sZXNQYXJhbSkpO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHJvbGVzID0gcm9sZXNQYXJhbS5zcGxpdCgnLCcpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChwZXJtaXNzaW9uc1BhcmFtKSB7XG4gICAgICB0cnkge1xuICAgICAgICBwZXJtaXNzaW9ucyA9IEpTT04ucGFyc2UoYXRvYihwZXJtaXNzaW9uc1BhcmFtKSk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgcGVybWlzc2lvbnMgPSBwZXJtaXNzaW9uc1BhcmFtLnNwbGl0KCcsJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRW52aWFyIHRva2VucyBhIGxhIHZlbnRhbmEgcGFkcmVcbiAgICBjb25zdCByZXN1bHQ6IE9BdXRoUmVzdWx0ID0ge1xuICAgICAgYWNjZXNzVG9rZW4sXG4gICAgICByZWZyZXNoVG9rZW4sXG4gICAgICBleHBpcmVzSW46IGV4cGlyZXNJbiA/IHBhcnNlSW50KGV4cGlyZXNJbiwgMTApIDogOTAwLFxuICAgICAgZmlyZWJhc2VUb2tlbjogZmlyZWJhc2VUb2tlbiB8fCB1bmRlZmluZWQsXG4gICAgICByb2xlcyxcbiAgICAgIHBlcm1pc3Npb25zLFxuICAgICAgaXNOZXdVc2VyOiBwYXJhbXMuZ2V0KCdpc19uZXdfdXNlcicpID09PSAndHJ1ZScsXG4gICAgICBsaW5rZWQ6IHBhcmFtcy5nZXQoJ2xpbmtlZCcpID09PSAndHJ1ZScsXG4gICAgfTtcblxuICAgIHRoaXMuc2VuZFRvUGFyZW50KHtcbiAgICAgIHR5cGU6ICdvYXV0aC1jYWxsYmFjaycsXG4gICAgICB0b2tlbnM6IHJlc3VsdCxcbiAgICB9KTtcblxuICAgIHRoaXMubWVzc2FnZSA9ICdBdXRlbnRpY2FjacOzbiBleGl0b3NhJztcbiAgICB0aGlzLmNsb3NlQWZ0ZXJEZWxheSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZW5kVG9QYXJlbnQoZGF0YTogT0F1dGhDYWxsYmFja0RhdGEpOiB2b2lkIHtcbiAgICBpZiAod2luZG93Lm9wZW5lcikge1xuICAgICAgLy8gRW52aWFyIGFsIG9wZW5lciAodmVudGFuYSBxdWUgYWJyacOzIGVsIHBvcHVwKVxuICAgICAgd2luZG93Lm9wZW5lci5wb3N0TWVzc2FnZShkYXRhLCB3aW5kb3cubG9jYXRpb24ub3JpZ2luKTtcbiAgICB9IGVsc2UgaWYgKHdpbmRvdy5wYXJlbnQgIT09IHdpbmRvdykge1xuICAgICAgLy8gRW52aWFyIGFsIHBhcmVudCAoc2kgZXN0YW1vcyBlbiBpZnJhbWUpXG4gICAgICB3aW5kb3cucGFyZW50LnBvc3RNZXNzYWdlKGRhdGEsIHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY2xvc2VBZnRlckRlbGF5KCk6IHZvaWQge1xuICAgIC8vIERhciB0aWVtcG8gcGFyYSBxdWUgZWwgbWVuc2FqZSBzZSBlbnbDrWUgYW50ZXMgZGUgY2VycmFyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAod2luZG93Lm9wZW5lcikge1xuICAgICAgICB3aW5kb3cuY2xvc2UoKTtcbiAgICAgIH1cbiAgICB9LCA1MDApO1xuICB9XG59XG4iXX0=
169
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2F1dGgtY2FsbGJhY2suY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9zZXJ2aWNlcy9hdXRoL29hdXRoLWNhbGxiYWNrLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ2xELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7QUFHL0M7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQkc7QUEwQ0gsTUFBTSxPQUFPLHNCQUFzQjtJQXpDbkM7UUEwQ0UsWUFBTyxHQUFHLDZCQUE2QixDQUFDO0tBb0l6QztJQWxJQyxRQUFRO1FBQ04sSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFTyxlQUFlO1FBQ3JCLE1BQU0sTUFBTSxHQUFHLElBQUksZUFBZSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFM0QsaUNBQWlDO1FBQ2pDLE9BQU8sQ0FBQyxHQUFHLENBQUMsc0NBQXNDLEVBQUU7WUFDbEQsR0FBRyxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSTtZQUN6QixjQUFjLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUM7WUFDMUMsZUFBZSxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDO1lBQzVDLGdCQUFnQixFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUM7WUFDOUMsbUJBQW1CLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLE1BQU0sSUFBSSxDQUFDO1lBQzlELEtBQUssRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQztTQUMzQixDQUFDLENBQUM7UUFFSCx5QkFBeUI7UUFDekIsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLEdBQUcs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QztZQUNyRixDQUFDO1FBQ0gsQ0FBQztRQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDWCxnRUFBZ0U7WUFDaEUsT0FBTyxDQUFDLElBQUksQ0FBQywwRUFBMEUsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUM5RixDQUFDO0lBQ0gsQ0FBQztJQUVPLGVBQWU7UUFDckIsMERBQTBEO1FBQzFELFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDbEIsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2pCLENBQUM7UUFDSCxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDVixDQUFDOytHQXBJVSxzQkFBc0I7bUdBQXRCLHNCQUFzQiw4RUFyQ3ZCOzs7OztHQUtULDhoQkFOUyxZQUFZOzs0RkFzQ1gsc0JBQXNCO2tCQXpDbEMsU0FBUzsrQkFDRSxvQkFBb0IsY0FDbEIsSUFBSSxXQUNQLENBQUMsWUFBWSxDQUFDLFlBQ2I7Ozs7O0dBS1QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IE9BdXRoQ2FsbGJhY2tEYXRhLCBPQXV0aFJlc3VsdCwgT0F1dGhFcnJvciB9IGZyb20gJy4vdHlwZXMnO1xuXG4vKipcbiAqIENvbXBvbmVudGUgZGUgY2FsbGJhY2sgcGFyYSBPQXV0aC5cbiAqXG4gKiBFc3RlIGNvbXBvbmVudGUgcHJvY2VzYSBsYSByZXNwdWVzdGEgZGVsIHNlcnZpZG9yIE9BdXRoIHkgZW52w61hXG4gKiBsb3MgdG9rZW5zIGEgbGEgdmVudGFuYSBwYWRyZSB2aWEgcG9zdE1lc3NhZ2UuXG4gKlxuICogRGViZSBhZ3JlZ2Fyc2UgYSBsYXMgcnV0YXMgZGUgbGEgYXBsaWNhY2nDs246XG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAvLyBhcHAucm91dGVzLnRzXG4gKiBpbXBvcnQgeyBPQXV0aENhbGxiYWNrQ29tcG9uZW50IH0gZnJvbSAndmFsdGVjaC1jb21wb25lbnRzJztcbiAqXG4gKiBleHBvcnQgY29uc3Qgcm91dGVzOiBSb3V0ZXMgPSBbXG4gKiAgIHsgcGF0aDogJ2F1dGgvb2F1dGgvY2FsbGJhY2snLCBjb21wb25lbnQ6IE9BdXRoQ2FsbGJhY2tDb21wb25lbnQgfSxcbiAqICAgLy8gLi4uIG90cmFzIHJ1dGFzXG4gKiBdO1xuICogYGBgXG4gKlxuICogRWwgYmFja2VuZCByZWRpcmlnZSBhIGVzdGEgcnV0YSBjb24gbG9zIHRva2VucyBlbiBxdWVyeSBwYXJhbXM6XG4gKiBgL2F1dGgvb2F1dGgvY2FsbGJhY2s/YWNjZXNzX3Rva2VuPXh4eCZyZWZyZXNoX3Rva2VuPXh4eCZleHBpcmVzX2luPTkwMGBcbiAqXG4gKiBPIGNvbiBlcnJvcjpcbiAqIGAvYXV0aC9vYXV0aC9jYWxsYmFjaz9lcnJvcj1JTlZBTElEX0NPREUmZXJyb3JfZGVzY3JpcHRpb249Li4uYFxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YWwtb2F1dGgtY2FsbGJhY2snLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IGNsYXNzPVwib2F1dGgtY2FsbGJhY2tcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJvYXV0aC1jYWxsYmFja19fc3Bpbm5lclwiPjwvZGl2PlxuICAgICAgPHAgY2xhc3M9XCJvYXV0aC1jYWxsYmFja19fdGV4dFwiPnt7IG1lc3NhZ2UgfX08L3A+XG4gICAgPC9kaXY+XG4gIGAsXG4gIHN0eWxlczogW2BcbiAgICAub2F1dGgtY2FsbGJhY2sge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICBoZWlnaHQ6IDEwMHZoO1xuICAgICAgZm9udC1mYW1pbHk6IC1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgJ1NlZ29lIFVJJywgUm9ib3RvLCBzYW5zLXNlcmlmO1xuICAgIH1cblxuICAgIC5vYXV0aC1jYWxsYmFja19fc3Bpbm5lciB7XG4gICAgICB3aWR0aDogNDBweDtcbiAgICAgIGhlaWdodDogNDBweDtcbiAgICAgIGJvcmRlcjogM3B4IHNvbGlkICNmM2YzZjM7XG4gICAgICBib3JkZXItdG9wOiAzcHggc29saWQgIzM0OThkYjtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICAgIGFuaW1hdGlvbjogc3BpbiAxcyBsaW5lYXIgaW5maW5pdGU7XG4gICAgICBtYXJnaW4tYm90dG9tOiAxNnB4O1xuICAgIH1cblxuICAgIEBrZXlmcmFtZXMgc3BpbiB7XG4gICAgICAwJSB7IHRyYW5zZm9ybTogcm90YXRlKDBkZWcpOyB9XG4gICAgICAxMDAlIHsgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTsgfVxuICAgIH1cblxuICAgIC5vYXV0aC1jYWxsYmFja19fdGV4dCB7XG4gICAgICBjb2xvcjogIzY2NjtcbiAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICB9XG4gIGBdLFxufSlcbmV4cG9ydCBjbGFzcyBPQXV0aENhbGxiYWNrQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgbWVzc2FnZSA9ICdQcm9jZXNhbmRvIGF1dGVudGljYWNpw7NuLi4uJztcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnByb2Nlc3NDYWxsYmFjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBwcm9jZXNzQ2FsbGJhY2soKTogdm9pZCB7XG4gICAgY29uc3QgcGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKTtcblxuICAgIC8vIERFQlVHOiBMb2cgYWxsIHJlY2VpdmVkIHBhcmFtc1xuICAgIGNvbnNvbGUubG9nKCdbT0F1dGhDYWxsYmFja10gVVJMIHBhcmFtcyByZWNlaXZlZDonLCB7XG4gICAgICB1cmw6IHdpbmRvdy5sb2NhdGlvbi5ocmVmLFxuICAgICAgaGFzQWNjZXNzVG9rZW46IHBhcmFtcy5oYXMoJ2FjY2Vzc190b2tlbicpLFxuICAgICAgaGFzUmVmcmVzaFRva2VuOiBwYXJhbXMuaGFzKCdyZWZyZXNoX3Rva2VuJyksXG4gICAgICBoYXNGaXJlYmFzZVRva2VuOiBwYXJhbXMuaGFzKCdmaXJlYmFzZV90b2tlbicpLFxuICAgICAgZmlyZWJhc2VUb2tlbkxlbmd0aDogcGFyYW1zLmdldCgnZmlyZWJhc2VfdG9rZW4nKT8ubGVuZ3RoIHx8IDAsXG4gICAgICBlcnJvcjogcGFyYW1zLmdldCgnZXJyb3InKSxcbiAgICB9KTtcblxuICAgIC8vIFZlcmlmaWNhciBzaSBoYXkgZXJyb3JcbiAgICBjb25zdCBlcnJvciA9IHBhcmFtcy5nZXQoJ2Vycm9yJyk7XG4gICAgaWYgKGVycm9yKSB7XG4gICAgICB0aGlzLnNlbmRUb1BhcmVudCh7XG4gICAgICAgIHR5cGU6ICdvYXV0aC1jYWxsYmFjaycsXG4gICAgICAgIGVycm9yOiB7XG4gICAgICAgICAgY29kZTogZXJyb3IsXG4gICAgICAgICAgbWVzc2FnZTogcGFyYW1zLmdldCgnZXJyb3JfZGVzY3JpcHRpb24nKSB8fCAnRXJyb3IgZGUgYXV0ZW50aWNhY2nDs24nLFxuICAgICAgICB9IGFzIE9BdXRoRXJyb3IsXG4gICAgICB9KTtcbiAgICAgIHRoaXMubWVzc2FnZSA9ICdFcnJvciBkZSBhdXRlbnRpY2FjacOzbic7XG4gICAgICB0aGlzLmNsb3NlQWZ0ZXJEZWxheSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEV4dHJhZXIgdG9rZW5zXG4gICAgY29uc3QgYWNjZXNzVG9rZW4gPSBwYXJhbXMuZ2V0KCdhY2Nlc3NfdG9rZW4nKTtcbiAgICBjb25zdCByZWZyZXNoVG9rZW4gPSBwYXJhbXMuZ2V0KCdyZWZyZXNoX3Rva2VuJyk7XG4gICAgY29uc3QgZXhwaXJlc0luID0gcGFyYW1zLmdldCgnZXhwaXJlc19pbicpO1xuICAgIGNvbnN0IGZpcmViYXNlVG9rZW4gPSBwYXJhbXMuZ2V0KCdmaXJlYmFzZV90b2tlbicpO1xuXG4gICAgaWYgKCFhY2Nlc3NUb2tlbiB8fCAhcmVmcmVzaFRva2VuKSB7XG4gICAgICB0aGlzLnNlbmRUb1BhcmVudCh7XG4gICAgICAgIHR5cGU6ICdvYXV0aC1jYWxsYmFjaycsXG4gICAgICAgIGVycm9yOiB7XG4gICAgICAgICAgY29kZTogJ01JU1NJTkdfVE9LRU5TJyxcbiAgICAgICAgICBtZXNzYWdlOiAnTm8gc2UgcmVjaWJpZXJvbiBsb3MgdG9rZW5zIGRlIGF1dGVudGljYWNpw7NuJyxcbiAgICAgICAgfSBhcyBPQXV0aEVycm9yLFxuICAgICAgfSk7XG4gICAgICB0aGlzLm1lc3NhZ2UgPSAnRXJyb3I6IHRva2VucyBubyByZWNpYmlkb3MnO1xuICAgICAgdGhpcy5jbG9zZUFmdGVyRGVsYXkoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBFeHRyYWVyIHJvbGVzIHkgcGVybWlzb3MgKHB1ZWRlbiB2ZW5pciBjb21vIEpTT04gZW4gYmFzZTY0KVxuICAgIGxldCByb2xlczogc3RyaW5nW10gfCB1bmRlZmluZWQ7XG4gICAgbGV0IHBlcm1pc3Npb25zOiBzdHJpbmdbXSB8IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0IHJvbGVzUGFyYW0gPSBwYXJhbXMuZ2V0KCdyb2xlcycpO1xuICAgIGNvbnN0IHBlcm1pc3Npb25zUGFyYW0gPSBwYXJhbXMuZ2V0KCdwZXJtaXNzaW9ucycpO1xuXG4gICAgaWYgKHJvbGVzUGFyYW0pIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJvbGVzID0gSlNPTi5wYXJzZShhdG9iKHJvbGVzUGFyYW0pKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICByb2xlcyA9IHJvbGVzUGFyYW0uc3BsaXQoJywnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocGVybWlzc2lvbnNQYXJhbSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcGVybWlzc2lvbnMgPSBKU09OLnBhcnNlKGF0b2IocGVybWlzc2lvbnNQYXJhbSkpO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHBlcm1pc3Npb25zID0gcGVybWlzc2lvbnNQYXJhbS5zcGxpdCgnLCcpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEVudmlhciB0b2tlbnMgYSBsYSB2ZW50YW5hIHBhZHJlXG4gICAgY29uc3QgcmVzdWx0OiBPQXV0aFJlc3VsdCA9IHtcbiAgICAgIGFjY2Vzc1Rva2VuLFxuICAgICAgcmVmcmVzaFRva2VuLFxuICAgICAgZXhwaXJlc0luOiBleHBpcmVzSW4gPyBwYXJzZUludChleHBpcmVzSW4sIDEwKSA6IDkwMCxcbiAgICAgIGZpcmViYXNlVG9rZW46IGZpcmViYXNlVG9rZW4gfHwgdW5kZWZpbmVkLFxuICAgICAgcm9sZXMsXG4gICAgICBwZXJtaXNzaW9ucyxcbiAgICAgIGlzTmV3VXNlcjogcGFyYW1zLmdldCgnaXNfbmV3X3VzZXInKSA9PT0gJ3RydWUnLFxuICAgICAgbGlua2VkOiBwYXJhbXMuZ2V0KCdsaW5rZWQnKSA9PT0gJ3RydWUnLFxuICAgIH07XG5cbiAgICB0aGlzLnNlbmRUb1BhcmVudCh7XG4gICAgICB0eXBlOiAnb2F1dGgtY2FsbGJhY2snLFxuICAgICAgdG9rZW5zOiByZXN1bHQsXG4gICAgfSk7XG5cbiAgICB0aGlzLm1lc3NhZ2UgPSAnQXV0ZW50aWNhY2nDs24gZXhpdG9zYSc7XG4gICAgdGhpcy5jbG9zZUFmdGVyRGVsYXkoKTtcbiAgfVxuXG4gIHByaXZhdGUgc2VuZFRvUGFyZW50KGRhdGE6IE9BdXRoQ2FsbGJhY2tEYXRhKTogdm9pZCB7XG4gICAgLy8gU2llbXByZSBndWFyZGFyIGVuIGxvY2FsU3RvcmFnZSBjb21vIGZhbGxiYWNrIChwYXJhIENPT1AgaXNzdWVzKVxuICAgIHRyeSB7XG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnb2F1dGhfY2FsbGJhY2tfZGF0YScsIEpTT04uc3RyaW5naWZ5KGRhdGEpKTtcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdvYXV0aF9jYWxsYmFja190aW1lc3RhbXAnLCBEYXRlLm5vdygpLnRvU3RyaW5nKCkpO1xuICAgICAgY29uc29sZS5sb2coJ1tPQXV0aENhbGxiYWNrXSBTYXZlZCB0byBsb2NhbFN0b3JhZ2UgYXMgZmFsbGJhY2snKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1tPQXV0aENhbGxiYWNrXSBDb3VsZCBub3Qgc2F2ZSB0byBsb2NhbFN0b3JhZ2U6JywgZSk7XG4gICAgfVxuXG4gICAgLy8gSW50ZW50YXIgcG9zdE1lc3NhZ2UgKHB1ZWRlIGZhbGxhciBwb3IgQ09PUClcbiAgICB0cnkge1xuICAgICAgaWYgKHdpbmRvdy5vcGVuZXIgJiYgIXdpbmRvdy5vcGVuZXIuY2xvc2VkKSB7XG4gICAgICAgIHdpbmRvdy5vcGVuZXIucG9zdE1lc3NhZ2UoZGF0YSwgd2luZG93LmxvY2F0aW9uLm9yaWdpbik7XG4gICAgICAgIGNvbnNvbGUubG9nKCdbT0F1dGhDYWxsYmFja10gcG9zdE1lc3NhZ2Ugc2VudCB0byBvcGVuZXInKTtcbiAgICAgIH0gZWxzZSBpZiAod2luZG93LnBhcmVudCAhPT0gd2luZG93KSB7XG4gICAgICAgIHdpbmRvdy5wYXJlbnQucG9zdE1lc3NhZ2UoZGF0YSwgd2luZG93LmxvY2F0aW9uLm9yaWdpbik7XG4gICAgICAgIGNvbnNvbGUubG9nKCdbT0F1dGhDYWxsYmFja10gcG9zdE1lc3NhZ2Ugc2VudCB0byBwYXJlbnQnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdbT0F1dGhDYWxsYmFja10gTm8gb3BlbmVyL3BhcmVudCBhdmFpbGFibGUsIHVzaW5nIGxvY2FsU3RvcmFnZSBvbmx5Jyk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gQ09PUCBibG9ja3MgcG9zdE1lc3NhZ2UgLSBsb2NhbFN0b3JhZ2UgZmFsbGJhY2sgYWxyZWFkeSBzYXZlZFxuICAgICAgY29uc29sZS53YXJuKCdbT0F1dGhDYWxsYmFja10gcG9zdE1lc3NhZ2UgYmxvY2tlZCAoQ09PUCksIHVzaW5nIGxvY2FsU3RvcmFnZSBmYWxsYmFjazonLCBlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNsb3NlQWZ0ZXJEZWxheSgpOiB2b2lkIHtcbiAgICAvLyBEYXIgdGllbXBvIHBhcmEgcXVlIGVsIG1lbnNhamUgc2UgZW52w61lIGFudGVzIGRlIGNlcnJhclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKHdpbmRvdy5vcGVuZXIpIHtcbiAgICAgICAgd2luZG93LmNsb3NlKCk7XG4gICAgICB9XG4gICAgfSwgNTAwKTtcbiAgfVxufVxuIl19
@@ -104,18 +104,47 @@ export class OAuthService {
104
104
  });
105
105
  };
106
106
  window.addEventListener('message', this.messageHandler);
107
- // Verificar si popup se cierra manualmente
107
+ // Polling de localStorage (COOP workaround - no podemos detectar popup.closed)
108
+ // También verifica si el popup se cerró manualmente
108
109
  this.checkClosedInterval = setInterval(() => {
109
- if (this.popup?.closed) {
110
+ // Primero verificar localStorage (funciona aunque COOP bloquee todo)
111
+ const storedData = this.checkLocalStorageFallback();
112
+ if (storedData) {
110
113
  this.cleanup();
111
114
  this.ngZone.run(() => {
112
- observer.error({
113
- code: 'POPUP_CLOSED',
114
- message: 'Se cerró la ventana de autenticación',
115
- });
115
+ if (storedData.error) {
116
+ observer.error(storedData.error);
117
+ }
118
+ else if (storedData.tokens) {
119
+ console.log('[OAuthService] Retrieved tokens from localStorage fallback');
120
+ observer.next(storedData.tokens);
121
+ observer.complete();
122
+ }
123
+ else {
124
+ observer.error({
125
+ code: 'INVALID_RESPONSE',
126
+ message: 'Respuesta inválida del servidor de autenticación',
127
+ });
128
+ }
116
129
  });
130
+ return;
117
131
  }
118
- }, 500);
132
+ // Intentar verificar si popup se cerró (puede fallar por COOP)
133
+ try {
134
+ if (this.popup?.closed) {
135
+ this.cleanup();
136
+ this.ngZone.run(() => {
137
+ observer.error({
138
+ code: 'POPUP_CLOSED',
139
+ message: 'Se cerró la ventana de autenticación',
140
+ });
141
+ });
142
+ }
143
+ }
144
+ catch {
145
+ // COOP bloquea acceso a popup.closed - ignorar y seguir con polling
146
+ }
147
+ }, 300);
119
148
  // Cleanup cuando el observable se destruye
120
149
  return () => this.cleanup();
121
150
  });
@@ -220,6 +249,45 @@ export class OAuthService {
220
249
  message: error.error?.message || 'Error al verificar contraseña',
221
250
  }))));
222
251
  }
252
+ /**
253
+ * Revisa localStorage por datos de callback OAuth (fallback para COOP).
254
+ * Solo acepta datos recientes (últimos 30 segundos).
255
+ */
256
+ checkLocalStorageFallback() {
257
+ try {
258
+ const timestamp = localStorage.getItem('oauth_callback_timestamp');
259
+ const dataStr = localStorage.getItem('oauth_callback_data');
260
+ if (!timestamp || !dataStr) {
261
+ return null;
262
+ }
263
+ // Solo aceptar datos de los últimos 30 segundos
264
+ const age = Date.now() - parseInt(timestamp, 10);
265
+ if (age > 30000) {
266
+ console.log('[OAuthService] localStorage data too old, ignoring');
267
+ this.clearLocalStorageFallback();
268
+ return null;
269
+ }
270
+ const data = JSON.parse(dataStr);
271
+ this.clearLocalStorageFallback();
272
+ return data;
273
+ }
274
+ catch (e) {
275
+ console.warn('[OAuthService] Error reading localStorage fallback:', e);
276
+ return null;
277
+ }
278
+ }
279
+ /**
280
+ * Limpia datos de fallback de localStorage.
281
+ */
282
+ clearLocalStorageFallback() {
283
+ try {
284
+ localStorage.removeItem('oauth_callback_data');
285
+ localStorage.removeItem('oauth_callback_timestamp');
286
+ }
287
+ catch {
288
+ // Ignorar errores de limpieza
289
+ }
290
+ }
223
291
  /**
224
292
  * Limpia recursos del popup.
225
293
  */
@@ -247,4 +315,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
247
315
  type: Inject,
248
316
  args: [VALTECH_AUTH_CONFIG]
249
317
  }] }, { type: i1.HttpClient }, { type: i0.NgZone }] });
250
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2F1dGguc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvc2VydmljZXMvYXV0aC9vYXV0aC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQzNELE9BQU8sRUFBRSxVQUFVLEVBQVcsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3ZELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQVcvQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7OztBQUU1Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBaUNHO0FBRUgsTUFBTSxPQUFPLFlBQVk7SUFLdkIsWUFDdUMsTUFBeUIsRUFDdEQsSUFBZ0IsRUFDaEIsTUFBYztRQUZlLFdBQU0sR0FBTixNQUFNLENBQW1CO1FBQ3RELFNBQUksR0FBSixJQUFJLENBQVk7UUFDaEIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQVBoQixVQUFLLEdBQWtCLElBQUksQ0FBQztRQUM1QixtQkFBYyxHQUEyQyxJQUFJLENBQUM7UUFDOUQsd0JBQW1CLEdBQTBDLElBQUksQ0FBQztJQU12RSxDQUFDO0lBRUo7Ozs7OztPQU1HO0lBQ0gsU0FBUyxDQUFDLFFBQXVCO1FBQy9CLE9BQU8sSUFBSSxVQUFVLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDL0IsMEJBQTBCO1lBQzFCLE1BQU0sV0FBVyxHQUFHLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLHNCQUFzQixDQUFDO1lBQ3BFLE1BQU0sUUFBUSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixRQUFRLHVCQUF1QixrQkFBa0IsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO1lBRXpILHVCQUF1QjtZQUN2QixNQUFNLEtBQUss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O1lBQ3JDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDckIsQ0FBQztRQUNELElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0lBQ3BCLENBQUM7K0dBdk9VLFlBQVksa0JBTWIsbUJBQW1CO21IQU5sQixZQUFZLGNBREMsTUFBTTs7NEZBQ25CLFlBQVk7a0JBRHhCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFOzswQkFPN0IsTUFBTTsyQkFBQyxtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3QsIE5nWm9uZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgVkFMVEVDSF9BVVRIX0NPTkZJRyB9IGZyb20gJy4vY29uZmlnJztcbmltcG9ydCB7XG4gIFZhbHRlY2hBdXRoQ29uZmlnLFxuICBPQXV0aFByb3ZpZGVyLFxuICBPQXV0aFJlc3VsdCxcbiAgT0F1dGhFcnJvcixcbiAgT0F1dGhDYWxsYmFja0RhdGEsXG4gIExpbmtlZFByb3ZpZGVyLFxuICBIYXNQYXNzd29yZFJlc3BvbnNlLFxufSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBjYXRjaEVycm9yIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG4vKipcbiAqIFNlcnZpY2lvIGRlIE9BdXRoIHBhcmEgbG9naW4gc29jaWFsLlxuICpcbiAqIEltcGxlbWVudGEgZmx1am8gT0F1dGggc2VydmVyLXNpZGUgY29uIHBvcHVwOlxuICogMS4gRnJvbnRlbmQgYWJyZSBwb3B1cCBoYWNpYSBiYWNrZW5kXG4gKiAyLiBCYWNrZW5kIHJlZGlyaWdlIGEgcHJvdmlkZXIgKEdvb2dsZSwgQXBwbGUsIE1pY3Jvc29mdClcbiAqIDMuIFVzdWFyaW8gYXV0b3JpemFcbiAqIDQuIEJhY2tlbmQgaW50ZXJjYW1iaWEgY29kZSwgZ2VuZXJhIEpXVCwgcmVkaXJpZ2UgY29uIHRva2Vuc1xuICogNS4gUG9wdXAgZW52w61hIHRva2VucyBhIHZlbnRhbmEgcGFkcmUgdmlhIHBvc3RNZXNzYWdlXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGltcG9ydCB7IE9BdXRoU2VydmljZSwgQXV0aFNlcnZpY2UgfSBmcm9tICd2YWx0ZWNoLWNvbXBvbmVudHMnO1xuICpcbiAqIEBDb21wb25lbnQoey4uLn0pXG4gKiBleHBvcnQgY2xhc3MgTG9naW5Db21wb25lbnQge1xuICogICBwcml2YXRlIG9hdXRoID0gaW5qZWN0KE9BdXRoU2VydmljZSk7XG4gKiAgIHByaXZhdGUgYXV0aCA9IGluamVjdChBdXRoU2VydmljZSk7XG4gKlxuICogICBhc3luYyBsb2dpbldpdGhHb29nbGUoKSB7XG4gKiAgICAgdGhpcy5vYXV0aC5zdGFydEZsb3coJ2dvb2dsZScpLnN1YnNjcmliZSh7XG4gKiAgICAgICBuZXh0OiAocmVzdWx0KSA9PiB7XG4gKiAgICAgICAgIC8vIFRva2VucyByZWNpYmlkb3MsIGd1YXJkYXIgZW4gYXV0aCBzdGF0ZVxuICogICAgICAgICB0aGlzLmF1dGguaGFuZGxlT0F1dGhTdWNjZXNzKHJlc3VsdCk7XG4gKiAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnLyddKTtcbiAqICAgICAgIH0sXG4gKiAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XG4gKiAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ09BdXRoIGZhaWxlZDonLCBlcnJvcik7XG4gKiAgICAgICB9XG4gKiAgICAgfSk7XG4gKiAgIH1cbiAqIH1cbiAqIGBgYFxuICovXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIE9BdXRoU2VydmljZSB7XG4gIHByaXZhdGUgcG9wdXA6IFdpbmRvdyB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIG1lc3NhZ2VIYW5kbGVyOiAoKGV2ZW50OiBNZXNzYWdlRXZlbnQpID0+IHZvaWQpIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgY2hlY2tDbG9zZWRJbnRlcnZhbDogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0SW50ZXJ2YWw+IHwgbnVsbCA9IG51bGw7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChWQUxURUNIX0FVVEhfQ09ORklHKSBwcml2YXRlIGNvbmZpZzogVmFsdGVjaEF1dGhDb25maWcsXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxuICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmVcbiAgKSB7fVxuXG4gIC8qKlxuICAgKiBJbmljaWEgZmx1am8gT0F1dGggZW4gcG9wdXAuXG4gICAqIFJldG9ybmEgT2JzZXJ2YWJsZSBxdWUgZW1pdGUgY3VhbmRvIGVsIHVzdWFyaW8gY29tcGxldGEgZWwgZmx1am8uXG4gICAqXG4gICAqIEBwYXJhbSBwcm92aWRlciAtIFByb3ZlZWRvciBPQXV0aCAoJ2dvb2dsZScsICdhcHBsZScsICdtaWNyb3NvZnQnKVxuICAgKiBAcmV0dXJucyBPYnNlcnZhYmxlIHF1ZSBlbWl0ZSBPQXV0aFJlc3VsdCBvIGVycm9yXG4gICAqL1xuICBzdGFydEZsb3cocHJvdmlkZXI6IE9BdXRoUHJvdmlkZXIpOiBPYnNlcnZhYmxlPE9BdXRoUmVzdWx0PiB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKG9ic2VydmVyID0+IHtcbiAgICAgIC8vIENvbnN0cnVpciBVUkwgZGUgaW5pY2lvXG4gICAgICBjb25zdCByZWRpcmVjdFVyaSA9IGAke3dpbmRvdy5sb2NhdGlvbi5vcmlnaW59L2F1dGgvb2F1dGgvY2FsbGJhY2tgO1xuICAgICAgY29uc3Qgc3RhcnRVcmwgPSBgJHt0aGlzLmNvbmZpZy5hcGlVcmx9L3YyL2F1dGgvb2F1dGgvJHtwcm92aWRlcn0vc3RhcnQ/cmVkaXJlY3RfdXJpPSR7ZW5jb2RlVVJJQ29tcG9uZW50KHJlZGlyZWN0VXJpKX1gO1xuXG4gICAgICAvLyBBYnJpciBwb3B1cCBjZW50cmFkb1xuICAgICAgY29uc3Qgd2lkdGggPSA1MDA7XG4gICAgICBjb25zdCBoZWlnaHQgPSA2MDA7XG4gICAgICBjb25zdCBsZWZ0ID0gd2luZG93LnNjcmVlblggKyAod2luZG93Lm91dGVyV2lkdGggLSB3aWR0aCkgLyAyO1xuICAgICAgY29uc3QgdG9wID0gd2luZG93LnNjcmVlblkgKyAod2luZG93Lm91dGVySGVpZ2h0IC0gaGVpZ2h0KSAvIDI7XG4gICAgICBjb25zdCBmZWF0dXJlcyA9IGB3aWR0aD0ke3dpZHRofSxoZWlnaHQ9JHtoZWlnaHR9LGxlZnQ9JHtsZWZ0fSx0b3A9JHt0b3B9LHBvcHVwPXllc2A7XG5cbiAgICAgIHRoaXMucG9wdXAgPSB3aW5kb3cub3BlbihzdGFydFVybCwgJ29hdXRoJywgZmVhdHVyZXMpO1xuXG4gICAgICBpZiAoIXRoaXMucG9wdXApIHtcbiAgICAgICAgb2JzZXJ2ZXIuZXJyb3Ioe1xuICAgICAgICAgIGNvZGU6ICdQT1BVUF9CTE9DS0VEJyxcbiAgICAgICAgICBtZXNzYWdlOiAnRWwgbmF2ZWdhZG9yIGJsb3F1ZcOzIGxhIHZlbnRhbmEgZW1lcmdlbnRlLiBQb3IgZmF2b3IsIHBlcm1pdGUgcG9wdXBzIHBhcmEgZXN0ZSBzaXRpby4nLFxuICAgICAgICB9IGFzIE9BdXRoRXJyb3IpO1xuICAgICAgICByZXR1cm4gKCkgPT4ge307XG4gICAgICB9XG5cbiAgICAgIC8vIEVzY3VjaGFyIG1lbnNhamVzIGRlbCBwb3B1cFxuICAgICAgdGhpcy5tZXNzYWdlSGFuZGxlciA9IChldmVudDogTWVzc2FnZUV2ZW50KSA9PiB7XG4gICAgICAgIC8vIFZhbGlkYXIgb3JpZ2VuXG4gICAgICAgIGlmIChldmVudC5vcmlnaW4gIT09IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4pIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBWYWxpZGFyIHRpcG8gZGUgbWVuc2FqZVxuICAgICAgICBjb25zdCBkYXRhID0gZXZlbnQuZGF0YSBhcyBPQXV0aENhbGxiYWNrRGF0YTtcbiAgICAgICAgaWYgKGRhdGE/LnR5cGUgIT09ICdvYXV0aC1jYWxsYmFjaycpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBMaW1waWFyXG4gICAgICAgIHRoaXMuY2xlYW51cCgpO1xuXG4gICAgICAgIC8vIEVtaXRpciByZXN1bHRhZG8gZGVudHJvIGRlIE5nWm9uZSBwYXJhIHRyaWdnZXIgY2hhbmdlIGRldGVjdGlvblxuICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgIGlmIChkYXRhLmVycm9yKSB7XG4gICAgICAgICAgICBvYnNlcnZlci5lcnJvcihkYXRhLmVycm9yKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGRhdGEudG9rZW5zKSB7XG4gICAgICAgICAgICBvYnNlcnZlci5uZXh0KGRhdGEudG9rZW5zKTtcbiAgICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG9ic2VydmVyLmVycm9yKHtcbiAgICAgICAgICAgICAgY29kZTogJ0lOVkFMSURfUkVTUE9OU0UnLFxuICAgICAgICAgICAgICBtZXNzYWdlOiAnUmVzcHVlc3RhIGludsOhbGlkYSBkZWwgc2Vydmlkb3IgZGUgYXV0ZW50aWNhY2nDs24nLFxuICAgICAgICAgICAgfSBhcyBPQXV0aEVycm9yKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfTtcblxuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCB0aGlzLm1lc3NhZ2VIYW5kbGVyKTtcblxuICAgICAgLy8gVmVyaWZpY2FyIHNpIHBvcHVwIHNlIGNpZXJyYSBtYW51YWxtZW50ZVxuICAgICAgdGhpcy5jaGVja0Nsb3NlZEludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5wb3B1cD8uY2xvc2VkKSB7XG4gICAgICAgICAgdGhpcy5jbGVhbnVwKCk7XG4gICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgIG9ic2VydmVyLmVycm9yKHtcbiAgICAgICAgICAgICAgY29kZTogJ1BPUFVQX0NMT1NFRCcsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6ICdTZSBjZXJyw7MgbGEgdmVudGFuYSBkZSBhdXRlbnRpY2FjacOzbicsXG4gICAgICAgICAgICB9IGFzIE9BdXRoRXJyb3IpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9LCA1MDApO1xuXG4gICAgICAvLyBDbGVhbnVwIGN1YW5kbyBlbCBvYnNlcnZhYmxlIHNlIGRlc3RydXllXG4gICAgICByZXR1cm4gKCkgPT4gdGhpcy5jbGVhbnVwKCk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogSW5pY2lhIGZsdWpvIGRlIGxpbmtpbmcgcGFyYSB2aW5jdWxhciB1biBwcm92ZWVkb3IgYWRpY2lvbmFsLlxuICAgKiBSZXF1aWVyZSBxdWUgZWwgdXN1YXJpbyBlc3TDqSBhdXRlbnRpY2Fkby5cbiAgICpcbiAgICogQHBhcmFtIHByb3ZpZGVyIC0gUHJvdmVlZG9yIE9BdXRoIGEgdmluY3VsYXJcbiAgICogQHJldHVybnMgT2JzZXJ2YWJsZSBxdWUgZW1pdGUgY3VhbmRvIHNlIGNvbXBsZXRhIGVsIGxpbmtpbmdcbiAgICovXG4gIHN0YXJ0TGlua0Zsb3cocHJvdmlkZXI6IE9BdXRoUHJvdmlkZXIpOiBPYnNlcnZhYmxlPE9BdXRoUmVzdWx0PiB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKG9ic2VydmVyID0+IHtcbiAgICAgIGNvbnN0IHJlZGlyZWN0VXJpID0gYCR7d2luZG93LmxvY2F0aW9uLm9yaWdpbn0vYXV0aC9vYXV0aC9jYWxsYmFja2A7XG4gICAgICBjb25zdCBzdGFydFVybCA9IGAke3RoaXMuY29uZmlnLmFwaVVybH0vdjIvYXV0aC9vYXV0aC9saW5rLyR7cHJvdmlkZXJ9L3N0YXJ0P3JlZGlyZWN0X3VyaT0ke2VuY29kZVVSSUNvbXBvbmVudChyZWRpcmVjdFVyaSl9YDtcblxuICAgICAgY29uc3Qgd2lkdGggPSA1MDA7XG4gICAgICBjb25zdCBoZWlnaHQgPSA2MDA7XG4gICAgICBjb25zdCBsZWZ0ID0gd2luZG93LnNjcmVlblggKyAod2luZG93Lm91dGVyV2lkdGggLSB3aWR0aCkgLyAyO1xuICAgICAgY29uc3QgdG9wID0gd2luZG93LnNjcmVlblkgKyAod2luZG93Lm91dGVySGVpZ2h0IC0gaGVpZ2h0KSAvIDI7XG4gICAgICBjb25zdCBmZWF0dXJlcyA9IGB3aWR0aD0ke3dpZHRofSxoZWlnaHQ9JHtoZWlnaHR9LGxlZnQ9JHtsZWZ0fSx0b3A9JHt0b3B9LHBvcHVwPXllc2A7XG5cbiAgICAgIHRoaXMucG9wdXAgPSB3aW5kb3cub3BlbihzdGFydFVybCwgJ29hdXRoLWxpbmsnLCBmZWF0dXJlcyk7XG5cbiAgICAgIGlmICghdGhpcy5wb3B1cCkge1xuICAgICAgICBvYnNlcnZlci5lcnJvcih7XG4gICAgICAgICAgY29kZTogJ1BPUFVQX0JMT0NLRUQnLFxuICAgICAgICAgIG1lc3NhZ2U6ICdFbCBuYXZlZ2Fkb3IgYmxvcXVlw7MgbGEgdmVudGFuYSBlbWVyZ2VudGUnLFxuICAgICAgICB9IGFzIE9BdXRoRXJyb3IpO1xuICAgICAgICByZXR1cm4gKCkgPT4ge307IC8vIGNsZWFudXAgZnVuY3Rpb25cbiAgICAgIH1cblxuICAgICAgdGhpcy5tZXNzYWdlSGFuZGxlciA9IChldmVudDogTWVzc2FnZUV2ZW50KSA9PiB7XG4gICAgICAgIGlmIChldmVudC5vcmlnaW4gIT09IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4pIHJldHVybjtcblxuICAgICAgICBjb25zdCBkYXRhID0gZXZlbnQuZGF0YSBhcyBPQXV0aENhbGxiYWNrRGF0YTtcbiAgICAgICAgaWYgKGRhdGE/LnR5cGUgIT09ICdvYXV0aC1jYWxsYmFjaycpIHJldHVybjtcblxuICAgICAgICB0aGlzLmNsZWFudXAoKTtcblxuICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgIGlmIChkYXRhLmVycm9yKSB7XG4gICAgICAgICAgICBvYnNlcnZlci5lcnJvcihkYXRhLmVycm9yKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChkYXRhLnRva2VucyB8fCB7fSBhcyBPQXV0aFJlc3VsdCk7XG4gICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9O1xuXG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIHRoaXMubWVzc2FnZUhhbmRsZXIpO1xuXG4gICAgICB0aGlzLmNoZWNrQ2xvc2VkSW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLnBvcHVwPy5jbG9zZWQpIHtcbiAgICAgICAgICB0aGlzLmNsZWFudXAoKTtcbiAgICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgb2JzZXJ2ZXIuZXJyb3Ioe1xuICAgICAgICAgICAgICBjb2RlOiAnUE9QVVBfQ0xPU0VEJyxcbiAgICAgICAgICAgICAgbWVzc2FnZTogJ1NlIGNlcnLDsyBsYSB2ZW50YW5hIGRlIGF1dGVudGljYWNpw7NuJyxcbiAgICAgICAgICAgIH0gYXMgT0F1dGhFcnJvcik7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0sIDUwMCk7XG5cbiAgICAgIHJldHVybiAoKSA9PiB0aGlzLmNsZWFudXAoKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPYnRpZW5lIGxvcyBwcm92ZWVkb3JlcyBPQXV0aCB2aW5jdWxhZG9zIGFsIHVzdWFyaW8uXG4gICAqL1xuICBnZXRMaW5rZWRQcm92aWRlcnMoKTogT2JzZXJ2YWJsZTxMaW5rZWRQcm92aWRlcltdPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLmdldDx7IHByb3ZpZGVyczogTGlua2VkUHJvdmlkZXJbXSB9PihgJHt0aGlzLmNvbmZpZy5hcGlVcmx9L3YyL2F1dGgvb2F1dGgvcHJvdmlkZXJzYClcbiAgICAgIC5waXBlKFxuICAgICAgICBjYXRjaEVycm9yKGVycm9yID0+IHRocm93RXJyb3IoKCkgPT4gKHtcbiAgICAgICAgICBjb2RlOiBlcnJvci5lcnJvcj8uY29kZSB8fCAnRkVUQ0hfRVJST1InLFxuICAgICAgICAgIG1lc3NhZ2U6IGVycm9yLmVycm9yPy5tZXNzYWdlIHx8ICdFcnJvciBhbCBvYnRlbmVyIHByb3ZlZWRvcmVzIHZpbmN1bGFkb3MnLFxuICAgICAgICB9IGFzIE9BdXRoRXJyb3IpKSlcbiAgICAgICkgYXMgdW5rbm93biBhcyBPYnNlcnZhYmxlPExpbmtlZFByb3ZpZGVyW10+O1xuICB9XG5cbiAgLyoqXG4gICAqIERlc3ZpbmN1bGEgdW4gcHJvdmVlZG9yIE9BdXRoLlxuICAgKi9cbiAgdW5saW5rUHJvdmlkZXIocHJvdmlkZXI6IE9BdXRoUHJvdmlkZXIpOiBPYnNlcnZhYmxlPHsgc3VjY2VzczogYm9vbGVhbiB9PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLnBvc3Q8eyBzdWNjZXNzOiBib29sZWFuIH0+KGAke3RoaXMuY29uZmlnLmFwaVVybH0vdjIvYXV0aC9vYXV0aC91bmxpbmtgLCB7IHByb3ZpZGVyIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgY2F0Y2hFcnJvcihlcnJvciA9PiB0aHJvd0Vycm9yKCgpID0+ICh7XG4gICAgICAgICAgY29kZTogZXJyb3IuZXJyb3I/LmNvZGUgfHwgJ1VOTElOS19FUlJPUicsXG4gICAgICAgICAgbWVzc2FnZTogZXJyb3IuZXJyb3I/Lm1lc3NhZ2UgfHwgJ0Vycm9yIGFsIGRlc3ZpbmN1bGFyIHByb3ZlZWRvcicsXG4gICAgICAgIH0gYXMgT0F1dGhFcnJvcikpKVxuICAgICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFc3RhYmxlY2UgY29udHJhc2XDsWEgcGFyYSB1c3VhcmlvcyBxdWUgc29sbyB0aWVuZW4gT0F1dGguXG4gICAqL1xuICBzZXRQYXNzd29yZChwYXNzd29yZDogc3RyaW5nKTogT2JzZXJ2YWJsZTx7IHN1Y2Nlc3M6IGJvb2xlYW4gfT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5wb3N0PHsgc3VjY2VzczogYm9vbGVhbiB9PihgJHt0aGlzLmNvbmZpZy5hcGlVcmx9L3YyL2F1dGgvb2F1dGgvc2V0LXBhc3N3b3JkYCwgeyBwYXNzd29yZCB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4gdGhyb3dFcnJvcigoKSA9PiAoe1xuICAgICAgICAgIGNvZGU6IGVycm9yLmVycm9yPy5jb2RlIHx8ICdTRVRfUEFTU1dPUkRfRVJST1InLFxuICAgICAgICAgIG1lc3NhZ2U6IGVycm9yLmVycm9yPy5tZXNzYWdlIHx8ICdFcnJvciBhbCBlc3RhYmxlY2VyIGNvbnRyYXNlw7FhJyxcbiAgICAgICAgfSBhcyBPQXV0aEVycm9yKSkpXG4gICAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmaWNhIHNpIGVsIHVzdWFyaW8gdGllbmUgY29udHJhc2XDsWEgZXN0YWJsZWNpZGEuXG4gICAqL1xuICBoYXNQYXNzd29yZCgpOiBPYnNlcnZhYmxlPEhhc1Bhc3N3b3JkUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAuZ2V0PEhhc1Bhc3N3b3JkUmVzcG9uc2U+KGAke3RoaXMuY29uZmlnLmFwaVVybH0vdjIvYXV0aC9vYXV0aC9oYXMtcGFzc3dvcmRgKVxuICAgICAgLnBpcGUoXG4gICAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4gdGhyb3dFcnJvcigoKSA9PiAoe1xuICAgICAgICAgIGNvZGU6IGVycm9yLmVycm9yPy5jb2RlIHx8ICdDSEVDS19QQVNTV09SRF9FUlJPUicsXG4gICAgICAgICAgbWVzc2FnZTogZXJyb3IuZXJyb3I/Lm1lc3NhZ2UgfHwgJ0Vycm9yIGFsIHZlcmlmaWNhciBjb250cmFzZcOxYScsXG4gICAgICAgIH0gYXMgT0F1dGhFcnJvcikpKVxuICAgICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMaW1waWEgcmVjdXJzb3MgZGVsIHBvcHVwLlxuICAgKi9cbiAgcHJpdmF0ZSBjbGVhbnVwKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLm1lc3NhZ2VIYW5kbGVyKSB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIHRoaXMubWVzc2FnZUhhbmRsZXIpO1xuICAgICAgdGhpcy5tZXNzYWdlSGFuZGxlciA9IG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY2hlY2tDbG9zZWRJbnRlcnZhbCkge1xuICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLmNoZWNrQ2xvc2VkSW50ZXJ2YWwpO1xuICAgICAgdGhpcy5jaGVja0Nsb3NlZEludGVydmFsID0gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5wb3B1cCAmJiAhdGhpcy5wb3B1cC5jbG9zZWQpIHtcbiAgICAgIHRoaXMucG9wdXAuY2xvc2UoKTtcbiAgICB9XG4gICAgdGhpcy5wb3B1cCA9IG51bGw7XG4gIH1cbn1cbiJdfQ==
318
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2F1dGguc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvc2VydmljZXMvYXV0aC9vYXV0aC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQzNELE9BQU8sRUFBRSxVQUFVLEVBQVcsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3ZELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQVcvQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7OztBQUU1Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBaUNHO0FBRUgsTUFBTSxPQUFPLFlBQVk7SUFLdkIsWUFDdUMsTUFBeUIsRUFDdEQsSUFBZ0IsRUFDaEIsTUFBYztRQUZlLFdBQU0sR0FBTixNQUFNLENBQW1CO1FBQ3RELFNBQUksR0FBSixJQUFJLENBQVk7UUFDaEIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQVBoQixVQUFLLEdBQWtCLElBQUksQ0FBQztRQUM1QixtQkFBYyxHQUEyQyxJQUFJLENBQUM7UUFDOUQsd0JBQW1CLEdBQTBDLElBQUksQ0FBQztJQU12RSxDQUFDO0lBRUo7Ozs7OztPQU1HO0lBQ0gsU0FBUyxDQUFDLFFBQXVCO1FBQy9CLE9BQU8sSUFBSSxVQUFVLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDL0IsMEJBQTBCO1lBQzFCLE1BQU0sV0FBVyxHQUFHLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLHNCQUFzQixDQUFDO1lBQ3BFLE1BQU0sUUFBUSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixRQUFRLHVCQUF1QixrQkFBa0IsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO1lBRXpILHVCQUF1QjtZQUN2QixNQUFNLEtBQUss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TTsyQkFBQyxtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3QsIE5nWm9uZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgVkFMVEVDSF9BVVRIX0NPTkZJRyB9IGZyb20gJy4vY29uZmlnJztcbmltcG9ydCB7XG4gIFZhbHRlY2hBdXRoQ29uZmlnLFxuICBPQXV0aFByb3ZpZGVyLFxuICBPQXV0aFJlc3VsdCxcbiAgT0F1dGhFcnJvcixcbiAgT0F1dGhDYWxsYmFja0RhdGEsXG4gIExpbmtlZFByb3ZpZGVyLFxuICBIYXNQYXNzd29yZFJlc3BvbnNlLFxufSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBjYXRjaEVycm9yIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG4vKipcbiAqIFNlcnZpY2lvIGRlIE9BdXRoIHBhcmEgbG9naW4gc29jaWFsLlxuICpcbiAqIEltcGxlbWVudGEgZmx1am8gT0F1dGggc2VydmVyLXNpZGUgY29uIHBvcHVwOlxuICogMS4gRnJvbnRlbmQgYWJyZSBwb3B1cCBoYWNpYSBiYWNrZW5kXG4gKiAyLiBCYWNrZW5kIHJlZGlyaWdlIGEgcHJvdmlkZXIgKEdvb2dsZSwgQXBwbGUsIE1pY3Jvc29mdClcbiAqIDMuIFVzdWFyaW8gYXV0b3JpemFcbiAqIDQuIEJhY2tlbmQgaW50ZXJjYW1iaWEgY29kZSwgZ2VuZXJhIEpXVCwgcmVkaXJpZ2UgY29uIHRva2Vuc1xuICogNS4gUG9wdXAgZW52w61hIHRva2VucyBhIHZlbnRhbmEgcGFkcmUgdmlhIHBvc3RNZXNzYWdlXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGltcG9ydCB7IE9BdXRoU2VydmljZSwgQXV0aFNlcnZpY2UgfSBmcm9tICd2YWx0ZWNoLWNvbXBvbmVudHMnO1xuICpcbiAqIEBDb21wb25lbnQoey4uLn0pXG4gKiBleHBvcnQgY2xhc3MgTG9naW5Db21wb25lbnQge1xuICogICBwcml2YXRlIG9hdXRoID0gaW5qZWN0KE9BdXRoU2VydmljZSk7XG4gKiAgIHByaXZhdGUgYXV0aCA9IGluamVjdChBdXRoU2VydmljZSk7XG4gKlxuICogICBhc3luYyBsb2dpbldpdGhHb29nbGUoKSB7XG4gKiAgICAgdGhpcy5vYXV0aC5zdGFydEZsb3coJ2dvb2dsZScpLnN1YnNjcmliZSh7XG4gKiAgICAgICBuZXh0OiAocmVzdWx0KSA9PiB7XG4gKiAgICAgICAgIC8vIFRva2VucyByZWNpYmlkb3MsIGd1YXJkYXIgZW4gYXV0aCBzdGF0ZVxuICogICAgICAgICB0aGlzLmF1dGguaGFuZGxlT0F1dGhTdWNjZXNzKHJlc3VsdCk7XG4gKiAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnLyddKTtcbiAqICAgICAgIH0sXG4gKiAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XG4gKiAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ09BdXRoIGZhaWxlZDonLCBlcnJvcik7XG4gKiAgICAgICB9XG4gKiAgICAgfSk7XG4gKiAgIH1cbiAqIH1cbiAqIGBgYFxuICovXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIE9BdXRoU2VydmljZSB7XG4gIHByaXZhdGUgcG9wdXA6IFdpbmRvdyB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIG1lc3NhZ2VIYW5kbGVyOiAoKGV2ZW50OiBNZXNzYWdlRXZlbnQpID0+IHZvaWQpIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgY2hlY2tDbG9zZWRJbnRlcnZhbDogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0SW50ZXJ2YWw+IHwgbnVsbCA9IG51bGw7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChWQUxURUNIX0FVVEhfQ09ORklHKSBwcml2YXRlIGNvbmZpZzogVmFsdGVjaEF1dGhDb25maWcsXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxuICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmVcbiAgKSB7fVxuXG4gIC8qKlxuICAgKiBJbmljaWEgZmx1am8gT0F1dGggZW4gcG9wdXAuXG4gICAqIFJldG9ybmEgT2JzZXJ2YWJsZSBxdWUgZW1pdGUgY3VhbmRvIGVsIHVzdWFyaW8gY29tcGxldGEgZWwgZmx1am8uXG4gICAqXG4gICAqIEBwYXJhbSBwcm92aWRlciAtIFByb3ZlZWRvciBPQXV0aCAoJ2dvb2dsZScsICdhcHBsZScsICdtaWNyb3NvZnQnKVxuICAgKiBAcmV0dXJucyBPYnNlcnZhYmxlIHF1ZSBlbWl0ZSBPQXV0aFJlc3VsdCBvIGVycm9yXG4gICAqL1xuICBzdGFydEZsb3cocHJvdmlkZXI6IE9BdXRoUHJvdmlkZXIpOiBPYnNlcnZhYmxlPE9BdXRoUmVzdWx0PiB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKG9ic2VydmVyID0+IHtcbiAgICAgIC8vIENvbnN0cnVpciBVUkwgZGUgaW5pY2lvXG4gICAgICBjb25zdCByZWRpcmVjdFVyaSA9IGAke3dpbmRvdy5sb2NhdGlvbi5vcmlnaW59L2F1dGgvb2F1dGgvY2FsbGJhY2tgO1xuICAgICAgY29uc3Qgc3RhcnRVcmwgPSBgJHt0aGlzLmNvbmZpZy5hcGlVcmx9L3YyL2F1dGgvb2F1dGgvJHtwcm92aWRlcn0vc3RhcnQ/cmVkaXJlY3RfdXJpPSR7ZW5jb2RlVVJJQ29tcG9uZW50KHJlZGlyZWN0VXJpKX1gO1xuXG4gICAgICAvLyBBYnJpciBwb3B1cCBjZW50cmFkb1xuICAgICAgY29uc3Qgd2lkdGggPSA1MDA7XG4gICAgICBjb25zdCBoZWlnaHQgPSA2MDA7XG4gICAgICBjb25zdCBsZWZ0ID0gd2luZG93LnNjcmVlblggKyAod2luZG93Lm91dGVyV2lkdGggLSB3aWR0aCkgLyAyO1xuICAgICAgY29uc3QgdG9wID0gd2luZG93LnNjcmVlblkgKyAod2luZG93Lm91dGVySGVpZ2h0IC0gaGVpZ2h0KSAvIDI7XG4gICAgICBjb25zdCBmZWF0dXJlcyA9IGB3aWR0aD0ke3dpZHRofSxoZWlnaHQ9JHtoZWlnaHR9LGxlZnQ9JHtsZWZ0fSx0b3A9JHt0b3B9LHBvcHVwPXllc2A7XG5cbiAgICAgIHRoaXMucG9wdXAgPSB3aW5kb3cub3BlbihzdGFydFVybCwgJ29hdXRoJywgZmVhdHVyZXMpO1xuXG4gICAgICBpZiAoIXRoaXMucG9wdXApIHtcbiAgICAgICAgb2JzZXJ2ZXIuZXJyb3Ioe1xuICAgICAgICAgIGNvZGU6ICdQT1BVUF9CTE9DS0VEJyxcbiAgICAgICAgICBtZXNzYWdlOiAnRWwgbmF2ZWdhZG9yIGJsb3F1ZcOzIGxhIHZlbnRhbmEgZW1lcmdlbnRlLiBQb3IgZmF2b3IsIHBlcm1pdGUgcG9wdXBzIHBhcmEgZXN0ZSBzaXRpby4nLFxuICAgICAgICB9IGFzIE9BdXRoRXJyb3IpO1xuICAgICAgICByZXR1cm4gKCkgPT4ge307XG4gICAgICB9XG5cbiAgICAgIC8vIEVzY3VjaGFyIG1lbnNhamVzIGRlbCBwb3B1cFxuICAgICAgdGhpcy5tZXNzYWdlSGFuZGxlciA9IChldmVudDogTWVzc2FnZUV2ZW50KSA9PiB7XG4gICAgICAgIC8vIFZhbGlkYXIgb3JpZ2VuXG4gICAgICAgIGlmIChldmVudC5vcmlnaW4gIT09IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4pIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBWYWxpZGFyIHRpcG8gZGUgbWVuc2FqZVxuICAgICAgICBjb25zdCBkYXRhID0gZXZlbnQuZGF0YSBhcyBPQXV0aENhbGxiYWNrRGF0YTtcbiAgICAgICAgaWYgKGRhdGE/LnR5cGUgIT09ICdvYXV0aC1jYWxsYmFjaycpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBMaW1waWFyXG4gICAgICAgIHRoaXMuY2xlYW51cCgpO1xuXG4gICAgICAgIC8vIEVtaXRpciByZXN1bHRhZG8gZGVudHJvIGRlIE5nWm9uZSBwYXJhIHRyaWdnZXIgY2hhbmdlIGRldGVjdGlvblxuICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgIGlmIChkYXRhLmVycm9yKSB7XG4gICAgICAgICAgICBvYnNlcnZlci5lcnJvcihkYXRhLmVycm9yKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGRhdGEudG9rZW5zKSB7XG4gICAgICAgICAgICBvYnNlcnZlci5uZXh0KGRhdGEudG9rZW5zKTtcbiAgICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG9ic2VydmVyLmVycm9yKHtcbiAgICAgICAgICAgICAgY29kZTogJ0lOVkFMSURfUkVTUE9OU0UnLFxuICAgICAgICAgICAgICBtZXNzYWdlOiAnUmVzcHVlc3RhIGludsOhbGlkYSBkZWwgc2Vydmlkb3IgZGUgYXV0ZW50aWNhY2nDs24nLFxuICAgICAgICAgICAgfSBhcyBPQXV0aEVycm9yKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfTtcblxuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCB0aGlzLm1lc3NhZ2VIYW5kbGVyKTtcblxuICAgICAgLy8gUG9sbGluZyBkZSBsb2NhbFN0b3JhZ2UgKENPT1Agd29ya2Fyb3VuZCAtIG5vIHBvZGVtb3MgZGV0ZWN0YXIgcG9wdXAuY2xvc2VkKVxuICAgICAgLy8gVGFtYmnDqW4gdmVyaWZpY2Egc2kgZWwgcG9wdXAgc2UgY2VycsOzIG1hbnVhbG1lbnRlXG4gICAgICB0aGlzLmNoZWNrQ2xvc2VkSW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICAgIC8vIFByaW1lcm8gdmVyaWZpY2FyIGxvY2FsU3RvcmFnZSAoZnVuY2lvbmEgYXVucXVlIENPT1AgYmxvcXVlZSB0b2RvKVxuICAgICAgICBjb25zdCBzdG9yZWREYXRhID0gdGhpcy5jaGVja0xvY2FsU3RvcmFnZUZhbGxiYWNrKCk7XG4gICAgICAgIGlmIChzdG9yZWREYXRhKSB7XG4gICAgICAgICAgdGhpcy5jbGVhbnVwKCk7XG4gICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgIGlmIChzdG9yZWREYXRhLmVycm9yKSB7XG4gICAgICAgICAgICAgIG9ic2VydmVyLmVycm9yKHN0b3JlZERhdGEuZXJyb3IpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChzdG9yZWREYXRhLnRva2Vucykge1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZygnW09BdXRoU2VydmljZV0gUmV0cmlldmVkIHRva2VucyBmcm9tIGxvY2FsU3RvcmFnZSBmYWxsYmFjaycpO1xuICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KHN0b3JlZERhdGEudG9rZW5zKTtcbiAgICAgICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG9ic2VydmVyLmVycm9yKHtcbiAgICAgICAgICAgICAgICBjb2RlOiAnSU5WQUxJRF9SRVNQT05TRScsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ1Jlc3B1ZXN0YSBpbnbDoWxpZGEgZGVsIHNlcnZpZG9yIGRlIGF1dGVudGljYWNpw7NuJyxcbiAgICAgICAgICAgICAgfSBhcyBPQXV0aEVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJbnRlbnRhciB2ZXJpZmljYXIgc2kgcG9wdXAgc2UgY2VycsOzIChwdWVkZSBmYWxsYXIgcG9yIENPT1ApXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKHRoaXMucG9wdXA/LmNsb3NlZCkge1xuICAgICAgICAgICAgdGhpcy5jbGVhbnVwKCk7XG4gICAgICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgICBvYnNlcnZlci5lcnJvcih7XG4gICAgICAgICAgICAgICAgY29kZTogJ1BPUFVQX0NMT1NFRCcsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ1NlIGNlcnLDsyBsYSB2ZW50YW5hIGRlIGF1dGVudGljYWNpw7NuJyxcbiAgICAgICAgICAgICAgfSBhcyBPQXV0aEVycm9yKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgLy8gQ09PUCBibG9xdWVhIGFjY2VzbyBhIHBvcHVwLmNsb3NlZCAtIGlnbm9yYXIgeSBzZWd1aXIgY29uIHBvbGxpbmdcbiAgICAgICAgfVxuICAgICAgfSwgMzAwKTtcblxuICAgICAgLy8gQ2xlYW51cCBjdWFuZG8gZWwgb2JzZXJ2YWJsZSBzZSBkZXN0cnV5ZVxuICAgICAgcmV0dXJuICgpID0+IHRoaXMuY2xlYW51cCgpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaWNpYSBmbHVqbyBkZSBsaW5raW5nIHBhcmEgdmluY3VsYXIgdW4gcHJvdmVlZG9yIGFkaWNpb25hbC5cbiAgICogUmVxdWllcmUgcXVlIGVsIHVzdWFyaW8gZXN0w6kgYXV0ZW50aWNhZG8uXG4gICAqXG4gICAqIEBwYXJhbSBwcm92aWRlciAtIFByb3ZlZWRvciBPQXV0aCBhIHZpbmN1bGFyXG4gICAqIEByZXR1cm5zIE9ic2VydmFibGUgcXVlIGVtaXRlIGN1YW5kbyBzZSBjb21wbGV0YSBlbCBsaW5raW5nXG4gICAqL1xuICBzdGFydExpbmtGbG93KHByb3ZpZGVyOiBPQXV0aFByb3ZpZGVyKTogT2JzZXJ2YWJsZTxPQXV0aFJlc3VsdD4ge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShvYnNlcnZlciA9PiB7XG4gICAgICBjb25zdCByZWRpcmVjdFVyaSA9IGAke3dpbmRvdy5sb2NhdGlvbi5vcmlnaW59L2F1dGgvb2F1dGgvY2FsbGJhY2tgO1xuICAgICAgY29uc3Qgc3RhcnRVcmwgPSBgJHt0aGlzLmNvbmZpZy5hcGlVcmx9L3YyL2F1dGgvb2F1dGgvbGluay8ke3Byb3ZpZGVyfS9zdGFydD9yZWRpcmVjdF91cmk9JHtlbmNvZGVVUklDb21wb25lbnQocmVkaXJlY3RVcmkpfWA7XG5cbiAgICAgIGNvbnN0IHdpZHRoID0gNTAwO1xuICAgICAgY29uc3QgaGVpZ2h0ID0gNjAwO1xuICAgICAgY29uc3QgbGVmdCA9IHdpbmRvdy5zY3JlZW5YICsgKHdpbmRvdy5vdXRlcldpZHRoIC0gd2lkdGgpIC8gMjtcbiAgICAgIGNvbnN0IHRvcCA9IHdpbmRvdy5zY3JlZW5ZICsgKHdpbmRvdy5vdXRlckhlaWdodCAtIGhlaWdodCkgLyAyO1xuICAgICAgY29uc3QgZmVhdHVyZXMgPSBgd2lkdGg9JHt3aWR0aH0saGVpZ2h0PSR7aGVpZ2h0fSxsZWZ0PSR7bGVmdH0sdG9wPSR7dG9wfSxwb3B1cD15ZXNgO1xuXG4gICAgICB0aGlzLnBvcHVwID0gd2luZG93Lm9wZW4oc3RhcnRVcmwsICdvYXV0aC1saW5rJywgZmVhdHVyZXMpO1xuXG4gICAgICBpZiAoIXRoaXMucG9wdXApIHtcbiAgICAgICAgb2JzZXJ2ZXIuZXJyb3Ioe1xuICAgICAgICAgIGNvZGU6ICdQT1BVUF9CTE9DS0VEJyxcbiAgICAgICAgICBtZXNzYWdlOiAnRWwgbmF2ZWdhZG9yIGJsb3F1ZcOzIGxhIHZlbnRhbmEgZW1lcmdlbnRlJyxcbiAgICAgICAgfSBhcyBPQXV0aEVycm9yKTtcbiAgICAgICAgcmV0dXJuICgpID0+IHt9OyAvLyBjbGVhbnVwIGZ1bmN0aW9uXG4gICAgICB9XG5cbiAgICAgIHRoaXMubWVzc2FnZUhhbmRsZXIgPSAoZXZlbnQ6IE1lc3NhZ2VFdmVudCkgPT4ge1xuICAgICAgICBpZiAoZXZlbnQub3JpZ2luICE9PSB3aW5kb3cubG9jYXRpb24ub3JpZ2luKSByZXR1cm47XG5cbiAgICAgICAgY29uc3QgZGF0YSA9IGV2ZW50LmRhdGEgYXMgT0F1dGhDYWxsYmFja0RhdGE7XG4gICAgICAgIGlmIChkYXRhPy50eXBlICE9PSAnb2F1dGgtY2FsbGJhY2snKSByZXR1cm47XG5cbiAgICAgICAgdGhpcy5jbGVhbnVwKCk7XG5cbiAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICBpZiAoZGF0YS5lcnJvcikge1xuICAgICAgICAgICAgb2JzZXJ2ZXIuZXJyb3IoZGF0YS5lcnJvcik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG9ic2VydmVyLm5leHQoZGF0YS50b2tlbnMgfHwge30gYXMgT0F1dGhSZXN1bHQpO1xuICAgICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfTtcblxuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCB0aGlzLm1lc3NhZ2VIYW5kbGVyKTtcblxuICAgICAgdGhpcy5jaGVja0Nsb3NlZEludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5wb3B1cD8uY2xvc2VkKSB7XG4gICAgICAgICAgdGhpcy5jbGVhbnVwKCk7XG4gICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgIG9ic2VydmVyLmVycm9yKHtcbiAgICAgICAgICAgICAgY29kZTogJ1BPUFVQX0NMT1NFRCcsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6ICdTZSBjZXJyw7MgbGEgdmVudGFuYSBkZSBhdXRlbnRpY2FjacOzbicsXG4gICAgICAgICAgICB9IGFzIE9BdXRoRXJyb3IpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9LCA1MDApO1xuXG4gICAgICByZXR1cm4gKCkgPT4gdGhpcy5jbGVhbnVwKCk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogT2J0aWVuZSBsb3MgcHJvdmVlZG9yZXMgT0F1dGggdmluY3VsYWRvcyBhbCB1c3VhcmlvLlxuICAgKi9cbiAgZ2V0TGlua2VkUHJvdmlkZXJzKCk6IE9ic2VydmFibGU8TGlua2VkUHJvdmlkZXJbXT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5nZXQ8eyBwcm92aWRlcnM6IExpbmtlZFByb3ZpZGVyW10gfT4oYCR7dGhpcy5jb25maWcuYXBpVXJsfS92Mi9hdXRoL29hdXRoL3Byb3ZpZGVyc2ApXG4gICAgICAucGlwZShcbiAgICAgICAgY2F0Y2hFcnJvcihlcnJvciA9PiB0aHJvd0Vycm9yKCgpID0+ICh7XG4gICAgICAgICAgY29kZTogZXJyb3IuZXJyb3I/LmNvZGUgfHwgJ0ZFVENIX0VSUk9SJyxcbiAgICAgICAgICBtZXNzYWdlOiBlcnJvci5lcnJvcj8ubWVzc2FnZSB8fCAnRXJyb3IgYWwgb2J0ZW5lciBwcm92ZWVkb3JlcyB2aW5jdWxhZG9zJyxcbiAgICAgICAgfSBhcyBPQXV0aEVycm9yKSkpXG4gICAgICApIGFzIHVua25vd24gYXMgT2JzZXJ2YWJsZTxMaW5rZWRQcm92aWRlcltdPjtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXN2aW5jdWxhIHVuIHByb3ZlZWRvciBPQXV0aC5cbiAgICovXG4gIHVubGlua1Byb3ZpZGVyKHByb3ZpZGVyOiBPQXV0aFByb3ZpZGVyKTogT2JzZXJ2YWJsZTx7IHN1Y2Nlc3M6IGJvb2xlYW4gfT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5wb3N0PHsgc3VjY2VzczogYm9vbGVhbiB9PihgJHt0aGlzLmNvbmZpZy5hcGlVcmx9L3YyL2F1dGgvb2F1dGgvdW5saW5rYCwgeyBwcm92aWRlciB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4gdGhyb3dFcnJvcigoKSA9PiAoe1xuICAgICAgICAgIGNvZGU6IGVycm9yLmVycm9yPy5jb2RlIHx8ICdVTkxJTktfRVJST1InLFxuICAgICAgICAgIG1lc3NhZ2U6IGVycm9yLmVycm9yPy5tZXNzYWdlIHx8ICdFcnJvciBhbCBkZXN2aW5jdWxhciBwcm92ZWVkb3InLFxuICAgICAgICB9IGFzIE9BdXRoRXJyb3IpKSlcbiAgICAgICk7XG4gIH1cblxuICAvKipcbiAgICogRXN0YWJsZWNlIGNvbnRyYXNlw7FhIHBhcmEgdXN1YXJpb3MgcXVlIHNvbG8gdGllbmVuIE9BdXRoLlxuICAgKi9cbiAgc2V0UGFzc3dvcmQocGFzc3dvcmQ6IHN0cmluZyk6IE9ic2VydmFibGU8eyBzdWNjZXNzOiBib29sZWFuIH0+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAucG9zdDx7IHN1Y2Nlc3M6IGJvb2xlYW4gfT4oYCR7dGhpcy5jb25maWcuYXBpVXJsfS92Mi9hdXRoL29hdXRoL3NldC1wYXNzd29yZGAsIHsgcGFzc3dvcmQgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBjYXRjaEVycm9yKGVycm9yID0+IHRocm93RXJyb3IoKCkgPT4gKHtcbiAgICAgICAgICBjb2RlOiBlcnJvci5lcnJvcj8uY29kZSB8fCAnU0VUX1BBU1NXT1JEX0VSUk9SJyxcbiAgICAgICAgICBtZXNzYWdlOiBlcnJvci5lcnJvcj8ubWVzc2FnZSB8fCAnRXJyb3IgYWwgZXN0YWJsZWNlciBjb250cmFzZcOxYScsXG4gICAgICAgIH0gYXMgT0F1dGhFcnJvcikpKVxuICAgICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWZXJpZmljYSBzaSBlbCB1c3VhcmlvIHRpZW5lIGNvbnRyYXNlw7FhIGVzdGFibGVjaWRhLlxuICAgKi9cbiAgaGFzUGFzc3dvcmQoKTogT2JzZXJ2YWJsZTxIYXNQYXNzd29yZFJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLmdldDxIYXNQYXNzd29yZFJlc3BvbnNlPihgJHt0aGlzLmNvbmZpZy5hcGlVcmx9L3YyL2F1dGgvb2F1dGgvaGFzLXBhc3N3b3JkYClcbiAgICAgIC5waXBlKFxuICAgICAgICBjYXRjaEVycm9yKGVycm9yID0+IHRocm93RXJyb3IoKCkgPT4gKHtcbiAgICAgICAgICBjb2RlOiBlcnJvci5lcnJvcj8uY29kZSB8fCAnQ0hFQ0tfUEFTU1dPUkRfRVJST1InLFxuICAgICAgICAgIG1lc3NhZ2U6IGVycm9yLmVycm9yPy5tZXNzYWdlIHx8ICdFcnJvciBhbCB2ZXJpZmljYXIgY29udHJhc2XDsWEnLFxuICAgICAgICB9IGFzIE9BdXRoRXJyb3IpKSlcbiAgICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmV2aXNhIGxvY2FsU3RvcmFnZSBwb3IgZGF0b3MgZGUgY2FsbGJhY2sgT0F1dGggKGZhbGxiYWNrIHBhcmEgQ09PUCkuXG4gICAqIFNvbG8gYWNlcHRhIGRhdG9zIHJlY2llbnRlcyAow7psdGltb3MgMzAgc2VndW5kb3MpLlxuICAgKi9cbiAgcHJpdmF0ZSBjaGVja0xvY2FsU3RvcmFnZUZhbGxiYWNrKCk6IE9BdXRoQ2FsbGJhY2tEYXRhIHwgbnVsbCB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHRpbWVzdGFtcCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdvYXV0aF9jYWxsYmFja190aW1lc3RhbXAnKTtcbiAgICAgIGNvbnN0IGRhdGFTdHIgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnb2F1dGhfY2FsbGJhY2tfZGF0YScpO1xuXG4gICAgICBpZiAoIXRpbWVzdGFtcCB8fCAhZGF0YVN0cikge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgLy8gU29sbyBhY2VwdGFyIGRhdG9zIGRlIGxvcyDDumx0aW1vcyAzMCBzZWd1bmRvc1xuICAgICAgY29uc3QgYWdlID0gRGF0ZS5ub3coKSAtIHBhcnNlSW50KHRpbWVzdGFtcCwgMTApO1xuICAgICAgaWYgKGFnZSA+IDMwMDAwKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdbT0F1dGhTZXJ2aWNlXSBsb2NhbFN0b3JhZ2UgZGF0YSB0b28gb2xkLCBpZ25vcmluZycpO1xuICAgICAgICB0aGlzLmNsZWFyTG9jYWxTdG9yYWdlRmFsbGJhY2soKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRhdGEgPSBKU09OLnBhcnNlKGRhdGFTdHIpIGFzIE9BdXRoQ2FsbGJhY2tEYXRhO1xuICAgICAgdGhpcy5jbGVhckxvY2FsU3RvcmFnZUZhbGxiYWNrKCk7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1tPQXV0aFNlcnZpY2VdIEVycm9yIHJlYWRpbmcgbG9jYWxTdG9yYWdlIGZhbGxiYWNrOicsIGUpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIExpbXBpYSBkYXRvcyBkZSBmYWxsYmFjayBkZSBsb2NhbFN0b3JhZ2UuXG4gICAqL1xuICBwcml2YXRlIGNsZWFyTG9jYWxTdG9yYWdlRmFsbGJhY2soKTogdm9pZCB7XG4gICAgdHJ5IHtcbiAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCdvYXV0aF9jYWxsYmFja19kYXRhJyk7XG4gICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnb2F1dGhfY2FsbGJhY2tfdGltZXN0YW1wJyk7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBJZ25vcmFyIGVycm9yZXMgZGUgbGltcGllemFcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTGltcGlhIHJlY3Vyc29zIGRlbCBwb3B1cC5cbiAgICovXG4gIHByaXZhdGUgY2xlYW51cCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5tZXNzYWdlSGFuZGxlcikge1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCB0aGlzLm1lc3NhZ2VIYW5kbGVyKTtcbiAgICAgIHRoaXMubWVzc2FnZUhhbmRsZXIgPSBudWxsO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNoZWNrQ2xvc2VkSW50ZXJ2YWwpIHtcbiAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5jaGVja0Nsb3NlZEludGVydmFsKTtcbiAgICAgIHRoaXMuY2hlY2tDbG9zZWRJbnRlcnZhbCA9IG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucG9wdXAgJiYgIXRoaXMucG9wdXAuY2xvc2VkKSB7XG4gICAgICB0aGlzLnBvcHVwLmNsb3NlKCk7XG4gICAgfVxuICAgIHRoaXMucG9wdXAgPSBudWxsO1xuICB9XG59XG4iXX0=
@@ -28044,18 +28044,47 @@ class OAuthService {
28044
28044
  });
28045
28045
  };
28046
28046
  window.addEventListener('message', this.messageHandler);
28047
- // Verificar si popup se cierra manualmente
28047
+ // Polling de localStorage (COOP workaround - no podemos detectar popup.closed)
28048
+ // También verifica si el popup se cerró manualmente
28048
28049
  this.checkClosedInterval = setInterval(() => {
28049
- if (this.popup?.closed) {
28050
+ // Primero verificar localStorage (funciona aunque COOP bloquee todo)
28051
+ const storedData = this.checkLocalStorageFallback();
28052
+ if (storedData) {
28050
28053
  this.cleanup();
28051
28054
  this.ngZone.run(() => {
28052
- observer.error({
28053
- code: 'POPUP_CLOSED',
28054
- message: 'Se cerró la ventana de autenticación',
28055
- });
28055
+ if (storedData.error) {
28056
+ observer.error(storedData.error);
28057
+ }
28058
+ else if (storedData.tokens) {
28059
+ console.log('[OAuthService] Retrieved tokens from localStorage fallback');
28060
+ observer.next(storedData.tokens);
28061
+ observer.complete();
28062
+ }
28063
+ else {
28064
+ observer.error({
28065
+ code: 'INVALID_RESPONSE',
28066
+ message: 'Respuesta inválida del servidor de autenticación',
28067
+ });
28068
+ }
28056
28069
  });
28070
+ return;
28057
28071
  }
28058
- }, 500);
28072
+ // Intentar verificar si popup se cerró (puede fallar por COOP)
28073
+ try {
28074
+ if (this.popup?.closed) {
28075
+ this.cleanup();
28076
+ this.ngZone.run(() => {
28077
+ observer.error({
28078
+ code: 'POPUP_CLOSED',
28079
+ message: 'Se cerró la ventana de autenticación',
28080
+ });
28081
+ });
28082
+ }
28083
+ }
28084
+ catch {
28085
+ // COOP bloquea acceso a popup.closed - ignorar y seguir con polling
28086
+ }
28087
+ }, 300);
28059
28088
  // Cleanup cuando el observable se destruye
28060
28089
  return () => this.cleanup();
28061
28090
  });
@@ -28160,6 +28189,45 @@ class OAuthService {
28160
28189
  message: error.error?.message || 'Error al verificar contraseña',
28161
28190
  }))));
28162
28191
  }
28192
+ /**
28193
+ * Revisa localStorage por datos de callback OAuth (fallback para COOP).
28194
+ * Solo acepta datos recientes (últimos 30 segundos).
28195
+ */
28196
+ checkLocalStorageFallback() {
28197
+ try {
28198
+ const timestamp = localStorage.getItem('oauth_callback_timestamp');
28199
+ const dataStr = localStorage.getItem('oauth_callback_data');
28200
+ if (!timestamp || !dataStr) {
28201
+ return null;
28202
+ }
28203
+ // Solo aceptar datos de los últimos 30 segundos
28204
+ const age = Date.now() - parseInt(timestamp, 10);
28205
+ if (age > 30000) {
28206
+ console.log('[OAuthService] localStorage data too old, ignoring');
28207
+ this.clearLocalStorageFallback();
28208
+ return null;
28209
+ }
28210
+ const data = JSON.parse(dataStr);
28211
+ this.clearLocalStorageFallback();
28212
+ return data;
28213
+ }
28214
+ catch (e) {
28215
+ console.warn('[OAuthService] Error reading localStorage fallback:', e);
28216
+ return null;
28217
+ }
28218
+ }
28219
+ /**
28220
+ * Limpia datos de fallback de localStorage.
28221
+ */
28222
+ clearLocalStorageFallback() {
28223
+ try {
28224
+ localStorage.removeItem('oauth_callback_data');
28225
+ localStorage.removeItem('oauth_callback_timestamp');
28226
+ }
28227
+ catch {
28228
+ // Ignorar errores de limpieza
28229
+ }
28230
+ }
28163
28231
  /**
28164
28232
  * Limpia recursos del popup.
28165
28233
  */
@@ -29862,13 +29930,32 @@ class OAuthCallbackComponent {
29862
29930
  this.closeAfterDelay();
29863
29931
  }
29864
29932
  sendToParent(data) {
29865
- if (window.opener) {
29866
- // Enviar al opener (ventana que abrió el popup)
29867
- window.opener.postMessage(data, window.location.origin);
29933
+ // Siempre guardar en localStorage como fallback (para COOP issues)
29934
+ try {
29935
+ localStorage.setItem('oauth_callback_data', JSON.stringify(data));
29936
+ localStorage.setItem('oauth_callback_timestamp', Date.now().toString());
29937
+ console.log('[OAuthCallback] Saved to localStorage as fallback');
29938
+ }
29939
+ catch (e) {
29940
+ console.warn('[OAuthCallback] Could not save to localStorage:', e);
29868
29941
  }
29869
- else if (window.parent !== window) {
29870
- // Enviar al parent (si estamos en iframe)
29871
- window.parent.postMessage(data, window.location.origin);
29942
+ // Intentar postMessage (puede fallar por COOP)
29943
+ try {
29944
+ if (window.opener && !window.opener.closed) {
29945
+ window.opener.postMessage(data, window.location.origin);
29946
+ console.log('[OAuthCallback] postMessage sent to opener');
29947
+ }
29948
+ else if (window.parent !== window) {
29949
+ window.parent.postMessage(data, window.location.origin);
29950
+ console.log('[OAuthCallback] postMessage sent to parent');
29951
+ }
29952
+ else {
29953
+ console.log('[OAuthCallback] No opener/parent available, using localStorage only');
29954
+ }
29955
+ }
29956
+ catch (e) {
29957
+ // COOP blocks postMessage - localStorage fallback already saved
29958
+ console.warn('[OAuthCallback] postMessage blocked (COOP), using localStorage fallback:', e);
29872
29959
  }
29873
29960
  }
29874
29961
  closeAfterDelay() {