import { BaseAuthProvider } from "./BaseAuthProvider.js";
import type { AuthProviderConfig, ClerkConfig, AuthUser, TokenValidationResult, AuthRequestContext, AuthHealthCheck, AuthProviderType } from "../../types/index.js";
/**
 * Clerk Authentication Provider
 *
 * Supports Clerk's session-based and JWT authentication.
 * Can validate both JWT tokens and session tokens via Clerk API.
 *
 * Features:
 * - JWT validation using Clerk's JWKS
 * - Session token validation via Clerk API
 * - User profile fetching
 * - Organization support for multi-tenant apps
 *
 * @example
 * ```typescript
 * const clerk = new ClerkProvider({
 *   type: "clerk",
 *   publishableKey: "pk_test_...",
 *   secretKey: "sk_test_..."
 * });
 *
 * const result = await clerk.authenticateToken(sessionToken);
 * if (result.valid) {
 *   console.log("Authenticated user:", result.user);
 * }
 * ```
 */
export declare class ClerkProvider extends BaseAuthProvider {
    readonly type: AuthProviderType;
    private secretKey;
    private jwtKey?;
    private publishableKey?;
    private jwks;
    private localKey;
    constructor(config: AuthProviderConfig & ClerkConfig);
    /**
     * Initialize Clerk JWKS
     */
    initialize(): Promise<void>;
    /**
     * Validate Clerk session token or JWT
     */
    authenticateToken(token: string, _context?: AuthRequestContext): Promise<TokenValidationResult>;
    /**
     * Validate JWT using local jwtKey (if configured) or JWKS
     */
    private validateJWT;
    /**
     * Validate session token via Clerk API
     */
    private validateSessionToken;
    /**
     * Get user by ID from Clerk API
     */
    getUser(userId: string): Promise<AuthUser | null>;
    /**
     * Get user by email from Clerk API
     */
    getUserByEmail(email: string): Promise<AuthUser | null>;
    /**
     * Health check
     */
    healthCheck(): Promise<AuthHealthCheck>;
}
