import { Repository } from 'typeorm';
import { NestAuthUser } from '../../user/entities/user.entity';
import { NestAuthIdentity } from '../../user/entities/identity.entity';
import { IAuthModuleOptions } from '../interfaces/auth-module-options.interface';
import { NestAuthLoginRequestDto } from '../../auth/dto/requests/login.request.dto';
export interface AuthProviderUser {
    userId: string;
    email?: string;
    phone?: string;
    username?: string;
    metadata?: Record<string, any>;
    emailVerified?: boolean;
    phoneVerified?: boolean;
}
export type LinkUserWith = 'email' | 'phone';
export declare abstract class BaseAuthProvider {
    protected readonly userRepository: Repository<NestAuthUser>;
    protected readonly authIdentityRepository: Repository<NestAuthIdentity>;
    abstract providerName: string;
    enabled: boolean;
    options: IAuthModuleOptions;
    skipMfa: boolean;
    constructor(userRepository: Repository<NestAuthUser>, authIdentityRepository: Repository<NestAuthIdentity>);
    linkToUser(userId: string, providerId: string, metadata?: Record<string, any>): Promise<void>;
    findIdentityByUserId(userId: string): Promise<NestAuthIdentity | null>;
    findIdentity(providerId: string, tenantId?: string): Promise<NestAuthIdentity | null>;
    abstract validate(credentials: NestAuthLoginRequestDto['credentials'], tenantId?: string): Promise<AuthProviderUser | null>;
    abstract getRequiredFields(): string[];
    linkUserWith(): LinkUserWith;
}
//# sourceMappingURL=base-auth.provider.d.ts.map