import * as Soap from "@soapjs/soap"; import { OAuth2StrategyConfig } from "./oauth2.types"; import { SessionHandler } from "../../session/session-handler"; import { BaseAuthStrategy } from "../base-auth.strategy"; import { JwtStrategy } from "../jwt/jwt.strategy"; import { JwtService } from "../../services/jwks.service"; import { PKCEService } from "../../services/pkce.service"; export declare abstract class OAuth2Strategy extends BaseAuthStrategy { protected config: OAuth2StrategyConfig; protected session?: SessionHandler; protected jwt?: JwtStrategy; protected logger?: Soap.Logger; abstract readonly name: string; protected jwks: JwtService; protected pkce: PKCEService; protected abstract extractAccessToken(context: TContext): Promise; protected abstract extractRefreshToken(context: TContext): Promise; protected abstract storeAccessToken(token: string, context: TContext): Promise; protected abstract storeRefreshToken(token: string, context: TContext): Promise; protected abstract embedAccessToken(token: string, context: TContext): any; protected abstract embedRefreshToken(token: string, context: TContext): any; protected abstract extractAuthorizationCode(context: TContext): string | null; protected abstract redirectUser(context: TContext, authUrl: string): void; constructor(config: OAuth2StrategyConfig, session?: SessionHandler, jwt?: JwtStrategy, logger?: Soap.Logger); logout(context: TContext): Promise; protected getCredentialsForPasswordGrant(context: TContext): Promise<{ identifier: string; password: string; }>; authenticate(context: TContext): Promise | null>; protected processOAuthFlow(context: TContext): Promise<{ accessToken: string; refreshToken?: string; }>; protected verifyAuthorizationCode(context: TContext, code: string): Promise; protected startAuthorizationFlow(context: TContext): Promise; protected validateState(context: TContext): Promise; protected buildAuthorizationUrl(context: TContext, state?: string, nonce?: string): Promise; protected exchangeCodeForToken(context: TContext, code: string): Promise<{ accessToken: string; idToken?: string; refreshToken?: string; }>; login(context: TContext): Promise; protected fetchUser(accessToken: string): Promise; protected exchangeClientCredentials(): Promise<{ accessToken: string; }>; protected exchangePasswordGrant(username: string, password: string): Promise<{ accessToken: string; }>; refreshAccessToken(context: TContext): Promise<{ accessToken: string; refreshToken?: string; idToken?: string; }>; protected handleTokenRefreshFailure(context: TContext): Promise; protected verifyIdToken(idToken: string, context?: TContext): Promise; revokeToken(token: string): Promise; protected isTokenExpired(token: string): boolean; }