import type { User } from './user';
import type { LoggerConfig } from '../core/logger';
import type { DatabaseConfig } from '../database';
import type { RateLimitingConfig } from '../features/rate-limiting';
import type { EmailProviderConfig } from '../email/types';
export interface ProviderConfig {
    enabled?: boolean;
    clientId?: string;
    clientSecret?: string;
}
export interface EmailVerificationOptions {
    method: 'otp' | 'magic-link';
    otpLength?: number;
    otpExpiration?: number;
    tokenExpiration?: number;
    enabled?: boolean;
}
export interface PasswordResetOptions {
    tokenExpiration?: number;
}
export interface TwoFactorAuthOptions {
    method: 'totp' | 'sms' | 'email';
    allowBackupCodes?: boolean;
    backupCodeCount?: number;
}
export interface SecurityConfig {
    level?: 'strict' | 'moderate' | 'relaxed';
    maxLoginAttempts?: number;
    lockoutDuration?: number;
    emailVerification?: EmailVerificationOptions;
    passwordReset?: PasswordResetOptions;
    twoFactorAuth?: TwoFactorAuthOptions;
    emailProvider?: EmailProviderConfig;
    rateLimiting: RateLimitingConfig;
    routeProtection?: {
        protectedRoutes?: {
            [route: string]: {
                allowedRoles?: string[];
                authenticated?: boolean;
                redirectPath?: string;
            };
        };
        publicRoutes?: {
            [route: string]: {
                redirectPath?: string;
            };
        };
        redirectPath?: string;
        authenticatedRedirect?: string;
        roleKey?: string;
    };
    passwordPolicy?: {
        minLength?: number;
        maxLength?: number;
        requireUppercase?: boolean | number;
        requireLowercase?: boolean | number;
        requireNumbers?: boolean | number;
        requireSpecialChars?: boolean | number;
        specialChars?: string;
    };
}
export interface EventHandlers {
    onSignIn?: (user: User) => Promise<void>;
    onRegistration?: (user: User) => Promise<void>;
    onPasswordReset?: (user: User) => Promise<void>;
    onEmailVerification?: (user: User) => void;
    onTwoFactorSetup?: (user: User) => void;
}
export interface GuardianAuthConfig {
    database?: DatabaseConfig;
    providers: {
        google?: ProviderConfig;
        github?: ProviderConfig;
        credentials?: ProviderConfig & {
            passwordless?: boolean;
            additionalUserFields?: string[];
            allowRegistration?: boolean;
            requireEmailVerification?: boolean;
        };
    };
    security: SecurityConfig;
    events?: EventHandlers;
    logging?: LoggerConfig;
    pages?: {
        signIn?: string;
        signOut?: string;
        error?: string;
        verifyRequest?: string;
        newUser?: string;
    };
    advanced?: {
        sessionStrategy?: 'jwt' | 'database';
        tokenEncryption?: boolean;
        rateLimiting?: {
            enabled: boolean;
            requestsPerMinute?: number;
        };
    };
}
export declare const DefaultGuardianAuthConfig: GuardianAuthConfig;
