import { Application, Database } from '@tego/server';
export declare class PasswordPolicyService {
    db: Database;
    app: Application;
    private logger;
    private config;
    private failureRecords;
    private readonly CACHE_PREFIX;
    private readonly CACHE_TTL;
    load(): Promise<void>;
    /**
     * 获取用户锁定信息的缓存键
     * @param userId 用户ID
     * @returns 缓存键
     */
    private getUserLockCacheKey;
    /**
     * 初始化被锁定用户的缓存
     */
    private initLockedUsersCache;
    /**
     * 设置监听userLocks表变动的事件
     */
    private setupLockedUsersListener;
    /**
     * 清空用户的登录失败记录
     * @param userId 用户ID
     */
    private clearUserFailRecords;
    /**
     * 检查用户是否被锁定
     * @param userId 用户ID
     * @returns 如果用户被锁定，返回true；否则返回false
     */
    private isUserLocked;
    /**
     * 从数据库检查并缓存用户锁定状态
     * @param userId 用户ID
     * @returns 如果用户被锁定，返回true；否则返回false
     */
    private checkAndCacheLockedUser;
    /**
     * 在后台刷新用户锁定缓存
     * @param userId 用户ID
     */
    private refreshLockedUserCache;
    refreshConfig(config: any): Promise<void>;
    addMiddleWare(): void;
    /**
     * 从数据库加载最近的失败记录到内存
     */
    private loadRecentRecords;
    /**
     * 获取IP地址的地理位置信息
     * @param ip IP地址
     * @returns 地理位置信息
     */
    private getGeoLocation;
    /**
     * 记录登录失败
     * @param username 用户名
     */
    recordFailedAttempt(user: any, ip: string): Promise<void>;
    private recordFailedAttemptToDb;
    /**
     * 获取最近的失败次数（从内存缓存中获取）
     */
    private getRecentFailureCount;
    /**
     * 重置用户的失败记录
     * @param username 用户名
     */
    resetFailedAttempts(userId: number): Promise<void>;
}
