import { Backend } from './backend.js';
export declare namespace Session {
    interface Options {
        sessionId: string;
        userId?: string;
        ttl?: number;
    }
}
export declare class Session {
    private readonly _backend;
    private readonly _sessionId;
    private _userId;
    private _ttl;
    private _lastAccess;
    private _expires;
    /**
     *
     * @param {Backend} backend
     * @param {Object} opts
     * @param {string} opts.sessionId
     * @param {string} [opts.userId]
     * @param {number} [opts.ttl]
     * @constructor
     */
    constructor(backend: Backend, opts: Session.Options);
    /**
     * Retrieves session id value
     *
     * @return {string}
     */
    get sessionId(): string;
    /**
     * Retrieves user id value
     *
     * @return {string}
     */
    get userId(): string;
    /**
     * Retrieves Time-To-Live value
     *
     * @return {number}
     */
    get ttl(): number;
    /**
     * Retrieves the time (unix) of last access
     *
     * @return {number}
     */
    get lastAccess(): number;
    /**
     * Retrieves the time (unix) that session be expired.
     *
     * @return {number}
     */
    get expires(): number;
    /**
     * Retrieves duration that session be expired.
     *
     * @return {number}
     */
    get expiresIn(): number;
    get valid(): boolean;
    /**
     * Retrieves idle duration in seconds
     *
     * @return {number}
     */
    get idle(): number;
    /**
     * Reads session info from redis server
     *
     * @return {Promise}
     */
    read(): Promise<void>;
    /**
     * Retrieves user data from session
     *
     * @param {string|Array<String>|Object<String,*>} key
     * @return {Promise<*>}
     */
    get(key: any): Promise<any>;
    /**
     * Stores user data to session
     *
     * @param {Object} values
     * @return {Promise<number>}
     */
    set(values: Record<string, any>): Promise<number>;
    /**
     * Stores user data to session
     *
     * @param {string} [key]
     * @param {*} [value]
     * @return {Promise<number>}
     */
    set(key: string, value: any): Promise<number>;
    /**
     * Kills the session
     *
     * @return {Promise}
     */
    kill(): Promise<void>;
    /**
     *
     * @return {Promise}
     * @private
     */
    write(): Promise<void>;
    private _prepareUserData;
}
