import { JwtService } from '@nestjs/jwt';
import { ConfigService } from '@nestjs/config';
import { MagicLinkPurpose } from '@prisma/client';
import { PrismaService } from '../../prisma/prisma.service';
import { LoginDto } from './dto/login.dto';
import { RegisterDto } from './dto/register.dto';
import { RefreshTokenDto } from './dto/refresh-token.dto';
import { NotificationsService } from '../notifications/notifications.service';
export declare class AuthService {
    private readonly prisma;
    private readonly jwt;
    private readonly config;
    private readonly notifications;
    private readonly logger;
    constructor(prisma: PrismaService, jwt: JwtService, config: ConfigService, notifications: NotificationsService);
    register(dto: RegisterDto): Promise<{
        accessToken: string;
        refreshToken: string;
        tokenType: string;
        user: {
            id: string;
            email: string;
            roles: {
                code: import(".prisma/client").$Enums.RoleCode;
                tenantId: string | null;
                scopeComplexId: string | null;
            }[];
        };
    }>;
    login(dto: LoginDto): Promise<{
        accessToken: string;
        refreshToken: string;
        tokenType: string;
        user: {
            id: string;
            email: string;
            roles: {
                code: import(".prisma/client").$Enums.RoleCode;
                tenantId: string | null;
                scopeComplexId: string | null;
            }[];
        };
    } | {
        mfaRequired: boolean;
        userId: string;
    }>;
    mfaEnroll(userId: string): Promise<{
        secret: string;
        otpauthUrl: string | undefined;
    }>;
    mfaActivate(userId: string, code: string): Promise<{
        enabled: boolean;
    }>;
    mfaDisable(userId: string, code: string): Promise<{
        enabled: boolean;
    }>;
    refresh(dto: RefreshTokenDto): Promise<{
        accessToken: string;
        refreshToken: string;
        tokenType: string;
        user: {
            id: string;
            email: string;
            roles: {
                code: import(".prisma/client").$Enums.RoleCode;
                tenantId: string | null;
                scopeComplexId: string | null;
            }[];
        };
    }>;
    logout(userId: string, refreshToken: string): Promise<{
        success: boolean;
    }>;
    getProfile(userId: string): Promise<{
        roles: {
            code: import(".prisma/client").$Enums.RoleCode;
            label: string;
            tenantId: string | null;
            tenant: {
                id: string;
                companyName: string;
            } | null;
            scopeComplexId: string | null;
        }[];
        id: string;
        createdAt: Date;
        updatedAt: Date;
        status: import(".prisma/client").$Enums.UserStatus;
        email: string;
        phone: string | null;
        firstName: string | null;
        lastName: string | null;
        language: string;
        mfaEnabled: boolean;
        lastLoginAt: Date | null;
    }>;
    updateProfile(userId: string, dto: {
        firstName?: string;
        lastName?: string;
        phone?: string;
    }): Promise<{
        firstName: string | null;
        lastName: string | null;
        phone: string | null;
    }>;
    changePassword(userId: string, currentPassword: string, newPassword: string): Promise<{
        success: boolean;
    }>;
    private buildTokenResponse;
    private hashToken;
    requestMagicLink(email: string, purpose?: MagicLinkPurpose): Promise<{
        devUrl?: string | undefined;
        sent: boolean;
    }>;
    verifyMagicLink(token: string, ip?: string): Promise<{
        accessToken: string;
        refreshToken: string;
        tokenType: string;
        user: {
            id: string;
            email: string;
            roles: {
                code: import(".prisma/client").$Enums.RoleCode;
                tenantId: string | null;
                scopeComplexId: string | null;
            }[];
        };
    }>;
}
