/** * OAuth 2.0 Authorization Code + PKCE flow para clientes públicos (instalados / desktop). * * Sirve a los 3 providers: * - Anthropic (Claude Code OAuth, sk-ant-oat...) * - OpenAI (Codex CLI OAuth, ChatGPT account) * - Google (Gemini CLI OAuth, suscripción Google AI Pro) * * Mecánica: * 1. Genera code_verifier + code_challenge (PKCE S256) * 2. Levanta servidor HTTP en localhost: * 3. Abre el navegador del usuario al endpoint de authorize del provider * 4. Espera el redirect a localhost con ?code=...&state=... * 5. Intercambia el code por tokens en el endpoint /token * 6. Devuelve los tokens al llamador para que los persista * * No depende de tener el CLI oficial del provider instalado: el usuario solo * necesita un navegador. */ export interface OAuthConfig { /** Nombre legible del provider para los mensajes en consola y la página de éxito. */ providerLabel: string; /** OAuth client_id público del provider (mismo que usa su CLI oficial). */ clientId: string; /** Client secret. Vacío para PKCE puro (Anthropic, OpenAI). Requerido por Google. */ clientSecret?: string; authorizeUrl: string; tokenUrl: string; /** Scopes separados por espacio. */ scope: string; /** Si el provider requiere parámetros adicionales en el authorize URL. */ extraAuthParams?: Record; /** Si el provider requiere parámetros adicionales en el body del /token. */ extraTokenParams?: Record; /** Puerto fijo en lugar de aleatorio (algunos providers solo aceptan puertos específicos). */ port?: number; /** * Host del redirect_uri. Default `localhost`. Algunos clientes OAuth de Google * exigen explícitamente `127.0.0.1` (Code Assist). */ redirectHost?: string; /** * Path del callback HTTP. Default `/callback`. Code Assist exige `/oauth2callback`. * Debe coincidir con lo que el provider tenga registrado en el client OAuth. */ redirectPath?: string; /** * Si el provider NO acepta localhost como redirect (Anthropic), el flow no * levanta servidor: abre el navegador, redirige a una URL del provider que * muestra el code en pantalla, y el usuario lo pega en el terminal. */ manualCodePaste?: boolean; /** * redirect_uri completo a usar cuando `manualCodePaste = true`. * Anthropic exige `https://console.anthropic.com/oauth/code/callback`. */ manualRedirectUri?: string; /** * Algunos providers (Anthropic) esperan el body del /token como JSON con un * campo `state` adicional, no como x-www-form-urlencoded. Default: 'form'. */ tokenRequestFormat?: 'form' | 'json'; /** * Anthropic usa el PKCE verifier literal como `state` (no un valor random). * Sin esto, el authorize devuelve "Invalid request format" porque su validador * espera state == verifier. Default: false (state = random, comportamiento estándar). */ stateIsVerifier?: boolean; /** * Si el body del /token debe incluir el campo `state`. Anthropic lo exige; * OpenAI lo rechaza con `Unknown parameter: 'state'`. Default: false. */ includeStateInTokenRequest?: boolean; } export interface OAuthResult { accessToken: string; refreshToken?: string; idToken?: string; /** Segundos hasta expirar (lo que devuelve `expires_in` el token endpoint). */ expiresIn?: number; /** Cualquier campo extra que devuelva el provider, sin parsear. */ raw: Record; } export declare function base64url(buf: Buffer): string; export declare function generatePKCE(): { verifier: string; challenge: string; }; /** * Ejecuta el flow OAuth completo. Bloquea hasta que el usuario autoriza * (o cancela). Lanza Error si algo falla. * * Dos modos: * - localhost callback (default): levanta servidor HTTP y captura el code. * - manualCodePaste: el provider muestra el code en pantalla, el usuario lo pega. */ export declare function runOAuthFlow(cfg: OAuthConfig): Promise; export declare function exchangeCodeForTokens(cfg: OAuthConfig, code: string, state: string, verifier: string, redirectUri: string): Promise; //# sourceMappingURL=oauth-flow.d.ts.map