import { Request, Response } from 'express';
import { AppConfig } from '../common/config/configuration';
import { UserPrincipal } from '../common/auth/principal';
import { AuthService } from './auth.service';
import { AppleDto, DisableTwoFactorDto, LoginDto, RefreshDto, RegisterDto, ResendVerificationDto, ResetPasswordDto, TokenDto, VerifyEmailCodeDto, TwoFactorCodeDto, TwoFactorVerifyDto } from './dto/auth.dto';
declare class ForgotPasswordDto {
    email: string;
}
export declare class AuthController {
    private readonly auth;
    private readonly config;
    constructor(auth: AuthService, config: AppConfig);
    csrf(res: Response): {
        data: {
            csrfToken: string;
        };
        message: string;
    };
    register(dto: RegisterDto, req: Request): Promise<{
        data: {
            id: string;
            email: string;
        };
        message: string;
    }>;
    verify(dto: TokenDto, req: Request): Promise<{
        data: {
            id: string;
            email: string;
        };
        message: string;
    }>;
    verifyCode(dto: VerifyEmailCodeDto, req: Request): Promise<{
        data: {
            id: string;
            email: string;
        };
        message: string;
    }>;
    resendVerification(dto: ResendVerificationDto): Promise<{
        data: {
            message: string;
        };
        message: string;
    }>;
    login(dto: LoginDto, req: Request, res: Response): Promise<{
        data: {
            requiresTwoFactor: boolean;
            challengeToken: string;
        };
        message: string;
    } | {
        data: {
            expiresIn: number;
            csrfToken: string;
            user: {
                id: string;
                email: string;
            };
        };
        message: string;
    } | {
        data: {
            accessToken: string;
            refreshToken: string;
            expiresIn: number;
            user: {
                id: string;
                email: string;
            };
        };
        message: string;
    }>;
    verifyTwoFactor(dto: TwoFactorVerifyDto, req: Request, res: Response): Promise<{
        data: {
            expiresIn: number;
            csrfToken: string;
            user: {
                id: string;
                email: string;
            };
        };
        message: string;
    } | {
        data: {
            accessToken: string;
            refreshToken: string;
            expiresIn: number;
            user: {
                id: string;
                email: string;
            };
        };
        message: string;
    }>;
    refresh(dto: RefreshDto, req: Request, res: Response): Promise<{
        data: {
            expiresIn: number;
            csrfToken: string;
        };
        message: string;
    }>;
    logout(principal: UserPrincipal, req: Request, res: Response): Promise<{
        data: {
            loggedOut: boolean;
        };
        message: string;
    }>;
    logoutAll(principal: UserPrincipal, req: Request, res: Response): Promise<{
        data: {
            loggedOut: boolean;
        };
        message: string;
    }>;
    sessions(principal: UserPrincipal): Promise<{
        data: {
            id: string;
            deviceLabel: string | null;
            userAgent: string | null;
            ipAddress: string | null;
            createdAt: Date;
            lastUsedAt: Date;
            current: boolean;
        }[];
        message: string;
    }>;
    revoke(principal: UserPrincipal, id: string): Promise<{
        data: {
            revoked: boolean;
        };
        message: string;
    }>;
    forgot(dto: ForgotPasswordDto): Promise<{
        data: {
            message: string;
        };
        message: string;
    }>;
    reset(dto: ResetPasswordDto, req: Request): Promise<{
        data: {
            reset: boolean;
        };
        message: string;
    }>;
    setup(principal: UserPrincipal): Promise<{
        data: {
            otpauthUrl: string;
            secret: string;
        };
        message: string;
    }>;
    enable(principal: UserPrincipal, dto: TwoFactorCodeDto, req: Request): Promise<{
        data: {
            enabled: boolean;
        };
        message: string;
    }>;
    disable(principal: UserPrincipal, dto: DisableTwoFactorDto, req: Request): Promise<{
        data: {
            enabled: boolean;
        };
        message: string;
    }>;
    google(res: Response): {
        url: string;
        statusCode: number;
    };
    googleCallback(code: string | undefined, state: string | undefined, error: string | undefined, req: Request, res: Response): Promise<{
        url: string;
        statusCode: number;
    }>;
    apple(dto: AppleDto, req: Request, res: Response): Promise<{
        data: {
            expiresIn: number;
            csrfToken: string;
            user: {
                id: string;
                email: string;
            };
        };
        message: string;
    } | {
        data: {
            accessToken: string;
            refreshToken: string;
            expiresIn: number;
            user: {
                id: string;
                email: string;
            };
        };
        message: string;
    }>;
    private withSession;
    private meta;
}
export {};
