import { Result, ValueObject } from 'rich-domain';
import { ILength } from './utils';
declare class Password extends ValueObject<string> {
    protected static readonly MAX_LENGTH = 22;
    protected static readonly MIN_LENGTH = 5;
    protected static readonly REGEX: RegExp;
    protected static readonly MESSAGE: string;
    private constructor();
    /**
     * @returns value as string
     */
    value(): string;
    /**
     *
     * @description compare plainText with encrypted password
     * @param plainText plainText not encrypted to compare with encrypted password
     * @returns true if match else false
     */
    compare(plainText: string): boolean;
    /**
     *
     * @returns true if instance value is encrypted else false
     */
    isEncrypted(): boolean;
    /**
     *
     * @returns true if provided value is encrypted else false
     */
    static isEncrypted(value: string): boolean;
    /**
     *
     * @param length password length as number 8/10/12/14/16/18
     * @returns PasswordValueObject
     * @default 12 chars or greater is recommended for strongest password
     */
    static random(length?: ILength): Password;
    /**
     * @summary Encrypts the password.
     * @description This method encrypts the password using bcrypt hashing algorithm. If the password is already encrypted, it returns the encrypted password as it is. Otherwise, it generates a salt, hashes the password with the salt, and returns the encrypted password.
     * @returns A Password object representing the encrypted password.
     */
    encrypt(): Password;
    /**
     *
     * @param value check if password has a valid value length
     * @returns true if is all ok or false else not
     */
    static isValid(value: string): boolean;
    /**
     *
     * @param value check if password has a valid value length
     * @returns true if is all ok or false else not
     */
    static isValidProps(value: string): boolean;
    /**
     *
     * @param value value as string
     * @returns instance of Password or throw an error
     */
    static init(value: string): Password;
    /**
     *
     * @param value password to create
     * @returns Result of PasswordValueObject
     */
    static create(value: string): Result<Password | null>;
}
export { Password };
export default Password;
