import { PluginOptions, AuthAccessCallback, AuthCallback, Callback, PackageAccess, IPluginAuth, RemoteUser, Logger } from '@verdaccio/types';
import LRU from 'lru-cache';
import { AuthMongoDBConfig } from '../types/index';
/**
 * Custom Verdaccio Authenticate Plugin.
 */
export default class AuthMongoDB implements IPluginAuth<AuthMongoDBConfig> {
    logger: Logger;
    private config;
    cache: LRU<string, unknown>;
    constructor(config: AuthMongoDBConfig, options: PluginOptions<AuthMongoDBConfig>);
    /**
     * Authenticate an user.
     * @param user user to log
     * @param password provided password
     * @param cb callback function
     */
    authenticate(username: string, password: string, cb: AuthCallback): Promise<void>;
    /**
     * Change a user password
     * @param username username to create
     * @param password current/old password
     * @param newPassword new password
     * @param cb callback function
     */
    changePassword(username: string, password: string, newPassword: string, cb: Callback): Promise<void>;
    /**
     * Add a user to the database
     * @param username username to create
     * @param password provided password
     * @param cb callback function
     */
    adduser(username: string, password: string, cb: Callback): Promise<void>;
    /**
     * Check if user is allowed to access a package
     * Triggered on each access request
     * @param user
     * @param pkg
     * @param cb
     */
    allow_access(user: RemoteUser, pkg: PackageAccess, cb: AuthAccessCallback): Promise<void>;
    /**
     * Check if user is allowed to publish a package
     * Triggered on each publish request
     * @param user
     * @param pkg
     * @param cb
     */
    allow_publish(user: RemoteUser, pkg: PackageAccess, cb: AuthAccessCallback): Promise<void>;
    /**
     * Check if user is allowed to remove a package
     * Triggered on each unpublish request
     * @param user
     * @param pkg
     * @param cb
     */
    allow_unpublish(user: RemoteUser, pkg: PackageAccess, cb: AuthAccessCallback): Promise<void>;
}
