import { OnInit } from '@angular/core'; import { Router } from '@angular/router'; import { ValtechAuthConfig } from './types'; import { AuthService } from './auth.service'; import * as i0 from "@angular/core"; /** * Componente de callback para OAuth. * * Este componente procesa la respuesta del servidor OAuth y envía * los tokens a la ventana padre via postMessage. * * Debe agregarse a las rutas de la aplicación: * ```typescript * // app.routes.ts * import { OAuthCallbackComponent } from 'valtech-components'; * * export const routes: Routes = [ * { path: 'auth/oauth/callback', component: OAuthCallbackComponent }, * // ... otras rutas * ]; * ``` * * El backend redirige a esta ruta con los tokens en query params: * `/auth/oauth/callback?access_token=xxx&refresh_token=xxx&expires_in=900` * * O con error: * `/auth/oauth/callback?error=INVALID_CODE&error_description=...` */ export declare class OAuthCallbackComponent implements OnInit { private router; private authService; private config; message: string; /** * Nonce que el opener generó y pasó por el flujo (round-trip backend). Se * reenvía al opener en cada mensaje para que verifique el origen del callback * y rechace un oauth_callback_data forjado en localStorage por XSS (M-07). */ private clientNonce; constructor(router: Router, authService: AuthService | null, config: ValtechAuthConfig | null); ngOnInit(): void; /** * Indica si este callback corre como la VENTANA PRINCIPAL (flujo redirect), * no como popup. * * NO usamos window.name ni window.opener como indicadores primarios: * - Chrome/Firefox borran window.name al navegar cross-origin (privacidad), * por lo que ya no vale para el flujo OAuth que pasa por Google/MS. * - window.opener queda null cuando el proveedor tiene COOP:same-origin * (Google lo usa), que sever la referencia en el bounce. * * Indicador confiable: `popup=true` en la URL. OAuthService lo inyecta en * el redirect_uri antes del /start; el backend lo reenvía intacto en el * redirect final vía appendParams → sobrevive todo el round-trip sin * depender de estado de la ventana del navegador. */ private isMainWindow; /** * Completa el login en la ventana principal: instala la sesión desde los * tokens del callback y navega al home. */ private completeInMainWindow; private processCallback; private sendToParent; private closeAfterDelay; static ɵfac: i0.ɵɵFactoryDeclaration; static ɵcmp: i0.ɵɵComponentDeclaration; }