import { AuthProvider } from "../AuthProvider";
import { User } from "../../realms/AdminRealm";
export interface PasswordAuthProviderConfig {
    autoCreateAdminUser?: boolean;
    saltLength?: number;
    iterations?: number;
    keyLength?: number;
    digest?: string;
    emailHandler?: PasswordEmailHandler;
    emailHandlerConfig?: BasicEmailHandlerConfig;
    hashBufferSize?: number;
}
export interface BasicEmailHandlerConfig {
    connectionString: string;
    from: string;
    baseUrl?: string;
    resetActionConfig?: EmailActionConfig;
    confirmActionConfig?: EmailActionConfig;
}
export interface EmailActionConfig {
    subject: string;
    textTemplate: string;
    htmlTemplate: string;
}
export interface PasswordEmailHandler {
    resetPassword?: (email: string, token: string, userAgent: any, remoteIp: string) => Promise<void>;
    confirmEmail?: (email: string, token: string) => Promise<void>;
}
export interface ResetPasswordRequest {
    action: "reset_password";
}
export interface CompleteResetRequest {
    action: "complete_reset";
    token: string;
    new_password: string;
}
export interface RequestEmailConfirmation {
    action: "request_email_confirmation";
}
export interface CompleteEmailConfirmation {
    action: "confirm_email";
    token: string;
}
export declare class PasswordAuthProvider extends AuthProvider {
    name: string;
    private readonly autoCreateAdminUser;
    private readonly saltLength;
    private readonly hashBuffer;
    private readonly config;
    private emailHandler?;
    private iterations;
    private keyLength;
    private digest;
    private passwordRealm;
    constructor(config?: PasswordAuthProviderConfig);
    start(): Promise<void>;
    stop(): Promise<void>;
    authenticateOrCreateUser(body: any): Promise<User>;
    update(user: User, data: any): Promise<{}>;
    updateProviderAccount(providerId: string, user: User, data: ResetPasswordRequest | CompleteResetRequest | RequestEmailConfirmation | CompleteEmailConfirmation, isAuthenticated: boolean, userAgent: any, remoteIp: string): Promise<any>;
    deleteUser(userId: string): Promise<boolean>;
    enhanceLog(body: any): string;
    private updatePassword;
    private requestEmailConfirmation;
    private hashPassword;
    private createSalt;
    private comparePassword;
    private attemptToRegister;
    private attemptToLogin;
    private fakeHash;
}
