import { HttpStatus } from '@nestjs/common';
import { CreateUserDto, LoginDto, ResetPasswordDto, SocialLoginDto } from './auth.dto';
import { Kysely } from 'kysely';
import { DB } from "../../database/database.type";
import { DeviceTypePayload } from '../devices/device.dto';
import { AuthHelper } from '../../utils/auth.helpers';
import { Logger } from 'pino-nestjs';
import { DeviceService } from '../devices/device.service';
import { MailService } from '../mail/mail.service';
import { ReferralsService } from '../referrals/referrals.service';
import { BillingService } from '../billing/billing.service';
import { NotificationsService } from '../notifications/notifications.service';
type SessionUser = {
    id: string;
    email: string;
    display_name: string;
    phone: string | null;
    role: string;
    premium_until: Date | string | null;
    premium_source: string | null;
    is_premium: boolean;
    email_verified_at: Date | string | null;
    is_email_verified: boolean;
    basic_credits: number;
    additional_credits: number;
    total_credits: number;
};
export declare class AuthService {
    private db;
    private readonly authHelper;
    private logger;
    private readonly deviceService;
    private readonly mailService;
    private readonly referralsService;
    private readonly billingService;
    private readonly notificationsService;
    private readonly googleOAuthClient;
    private appleJwksCache;
    constructor(db: Kysely<DB>, authHelper: AuthHelper, logger: Logger, deviceService: DeviceService, mailService: MailService, referralsService: ReferralsService, billingService: BillingService, notificationsService: NotificationsService);
    private generateReferralCode;
    private generateOtp;
    private getDevicePayload;
    private toSessionUser;
    private getSessionToken;
    private getSessionUserById;
    private getSessionUserByVerifiedEmail;
    private findUserBySocialIdentity;
    private linkSocialIdentity;
    private markEmailVerifiedFromProvider;
    private getGoogleAudiences;
    private getAppleAudience;
    private fetchAppleJwks;
    private verifyGoogleSocialToken;
    private verifyAppleSocialToken;
    private verifySocialToken;
    private hasRequiredSocialSignupConsent;
    private createSocialUser;
    socialLogin(data: SocialLoginDto, context?: {
        ip?: string | null;
        userAgent?: string | null;
    }): Promise<{
        status: boolean;
        statusCode: HttpStatus;
        data: {
            user: SessionUser;
            token: string;
            socialSignup: boolean;
        };
    }>;
    register(data: CreateUserDto, context?: {
        ip?: string | null;
        userAgent?: string | null;
    }): Promise<{
        status: boolean;
        statusCode: HttpStatus;
        data: {
            user: {
                id: string;
                email: string;
                display_name: string;
                phone: string | null;
                referralCode: string | null;
                role: string;
                premium_until: Date | string | null;
                premium_source: string | null;
                is_premium: boolean;
                email_verified_at: Date | null;
                is_email_verified: boolean;
                basic_credits: number;
                additional_credits: number;
                total_credits: number;
            };
            token: string;
            emailVerificationRequired: boolean;
            otpExpiresAt: string;
        };
    }>;
    login(data: LoginDto): Promise<{
        status: boolean;
        statusCode: HttpStatus;
        data: {
            user: {
                id: string;
                email: string;
                display_name: string;
                phone: string | null;
                role: string;
                premium_until: Date | null;
                premium_source: string | null;
                is_premium: boolean;
                email_verified_at: Date | null;
                is_email_verified: boolean;
                basic_credits: number;
                additional_credits: number;
                total_credits: number;
            };
            token: string;
        };
    }>;
    attachDeviceToUser(device: DeviceTypePayload | undefined, userId: string): Promise<void>;
    getCurrentUser(userId: string): Promise<{
        status: boolean;
        statusCode: HttpStatus;
        data: {
            display_name: string;
            email: string;
            email_verified_at: Date | null;
            id: string;
            phone: string | null;
            premium_source: string | null;
            premium_until: Date | null;
            role: string;
            basic_credits: number;
            additional_credits: number;
            is_premium: boolean;
            is_email_verified: boolean;
            total_credits: number;
        };
    }>;
    sendForgotPasswordOTP(email: string): Promise<{
        status: boolean;
        statusCode: HttpStatus;
        message: string;
    }>;
    resetPassword(data: ResetPasswordDto): Promise<{
        status: boolean;
        statusCode: HttpStatus;
        message: string;
    }>;
    requestEmailVerificationOtp(userId: string): Promise<{
        status: boolean;
        statusCode: HttpStatus;
        data: {
            message: string;
            otpExpiresAt?: undefined;
        };
    } | {
        status: boolean;
        statusCode: HttpStatus;
        data: {
            message: string;
            otpExpiresAt: string;
        };
    }>;
    verifyEmail(userId: string, otp: string): Promise<{
        status: boolean;
        statusCode: HttpStatus;
        data: {
            message: string;
            email_verified_at: string;
        };
    } | {
        status: boolean;
        statusCode: HttpStatus;
        data: {
            message: string;
            email_verified_at: Date | null;
        };
    }>;
}
export {};
