/** * OAuth Provider Configuration */ export interface OAuthProvider { /** Provider name (e.g., 'notion', 'linear') */ name: string; /** Human-readable display name */ displayName: string; /** OAuth authorization endpoint */ authorizationUrl: string; /** OAuth token exchange endpoint */ tokenUrl: string; /** Required OAuth scopes */ scopes: string[]; /** Client ID for the OAuth app (ralph-starter's registered app) */ clientId: string; /** Client secret for the OAuth app (set via env var for security) */ clientSecret?: string; /** Additional authorization URL parameters */ authParams?: Record; /** Whether this provider supports PKCE (no client secret needed) */ supportsPKCE: boolean; /** Build the full authorization URL */ buildAuthUrl(redirectUri: string, state: string, codeChallenge?: string): string; /** Exchange authorization code for access token */ exchangeCode(code: string, redirectUri: string, codeVerifier?: string): Promise; } export interface OAuthTokens { accessToken: string; refreshToken?: string; expiresIn?: number; tokenType: string; scope?: string; } /** * Base class for OAuth providers */ export declare abstract class BaseOAuthProvider implements OAuthProvider { abstract name: string; abstract displayName: string; abstract authorizationUrl: string; abstract tokenUrl: string; abstract scopes: string[]; abstract clientId: string; clientSecret?: string; authParams?: Record; /** Override in subclass to enable PKCE flow */ supportsPKCE: boolean; buildAuthUrl(redirectUri: string, state: string, codeChallenge?: string): string; exchangeCode(code: string, redirectUri: string, codeVerifier?: string): Promise; } //# sourceMappingURL=base.d.ts.map