import Redis, { Cluster } from 'ioredis';
import { RedisScript } from './redis-script.js';
import { Session } from './session.js';
export declare namespace SessionManager {
    interface Options {
        namespace?: string;
        ttl?: number;
        wipeInterval?: number;
        additionalFields?: string[];
    }
}
export type ResultSession = Session & Record<string, any>;
/**
 *
 * @class
 */
export declare class Backend {
    readonly client: Redis | Cluster;
    readonly ns?: string;
    readonly ttl?: number;
    readonly additionalFields?: string[];
    readonly killScript: RedisScript;
    readonly writeScript: RedisScript;
    readonly wipeScript: RedisScript;
    readonly killAllScript: RedisScript;
    private wipeInterval?;
    private _wipeTimer?;
    private _timeDiff;
    /**
     *
     * @param {Object} client
     * @param {Object} [props]
     * @param {Object} [props.namespace='sm']
     * @param {number} [props.ttl] Time-To-Live value in seconds
     * @param {number} [props.wipeInterval=1000]
     * @param {Array<String>} [props.additionalFields]
     */
    constructor(client: Redis | Cluster, props?: SessionManager.Options);
    /**
     * Stops wipe timer
     */
    quit(): void;
    wipe(): Promise<void>;
    getClient(): Promise<Redis | Cluster>;
    now(): number;
    private _stopWipeTimer;
    private _startWipeTimer;
    syncTime(client: Redis | Cluster): Promise<number>;
}
