import { Repository } from 'typeorm';
import { NestAuthMFASecret } from '../../auth/entities/mfa-secret.entity';
import { MFAMethodEnum, MFAOptions } from '../../core/interfaces/mfa-options.interface';
import { NestAuthUser } from '../../user/entities/user.entity';
import { NestAuthOTP } from '../../auth/entities/otp.entity';
import { EventEmitter2 } from '@nestjs/event-emitter';
import { NestAuthTrustedDevice } from '../entities/trusted-device.entity';
export declare class MfaService {
    private mfaSecretRepository;
    private userRepository;
    private otpRepository;
    private trustedDeviceRepository;
    private eventEmitter;
    constructor(mfaSecretRepository: Repository<NestAuthMFASecret>, userRepository: Repository<NestAuthUser>, otpRepository: Repository<NestAuthOTP>, trustedDeviceRepository: Repository<NestAuthTrustedDevice>, eventEmitter: EventEmitter2);
    get mfaConfig(): MFAOptions;
    requireMfaEnabledForApp(throwError?: boolean): boolean;
    private checkIsMfaEnabledForApp;
    getVerifiedMethods(userId: string): Promise<MFAMethodEnum[]>;
    getEnabledMethods(userId: string): Promise<MFAMethodEnum[]>;
    sendMfaCode(userId: string, method: MFAMethodEnum): Promise<boolean>;
    verifyMfa(userId: string, inputOtp: string, method: MFAMethodEnum): Promise<boolean>;
    setupTotpDevice(userId: string, deviceName?: string): Promise<{
        secret: string;
        qrCode: string;
    }>;
    verifyTotpSetup(userId: string, secret: string, inputOtp: string): Promise<boolean>;
    getTotpDevices(userId: string): Promise<{
        id: string;
        deviceName: string;
        method: MFAMethodEnum;
        lastUsedAt: Date;
        createdAt: Date;
        verified: boolean;
    }[]>;
    removeDevice(deviceId: string): Promise<void>;
    isRequiresMfa(userId: string): Promise<boolean>;
    isMfaEnabled(userId: string): Promise<boolean>;
    markAsVerified(userId: string, deviceId: string): Promise<void>;
    enableMFA(userId: string): Promise<void>;
    disableMFA(userId: string): Promise<void>;
    removeTotpDevice(deviceId: string): Promise<void>;
    generateRecoveryCode(userId: string): Promise<string>;
    resetMfa(userId: string, code: string): Promise<{
        message: string;
    }>;
    getAvailableMethods(): MFAMethodEnum[];
    hasRecoveryCode(userId: string): Promise<boolean>;
    createTrustedDevice(userId: string, userAgent: string, ipAddress: string): Promise<string>;
    validateTrustedDevice(userId: string, token: string): Promise<boolean>;
}
//# sourceMappingURL=mfa.service.d.ts.map