import { Session } from './session.js';
import type { SessionOptions } from './index.js';
export declare class ContextSession {
    ctx: any;
    app: any;
    opts: SessionOptions;
    store: SessionOptions['store'];
    session: Session | false;
    externalKey?: string;
    prevHash?: number;
    /**
     * context session constructor
     */
    constructor(ctx: any, opts: SessionOptions);
    /**
     * internal logic of `ctx.session`
     * @return {Session} session object
     */
    get(): Session | null;
    /**
     * internal logic of `ctx.session=`
     * @param {Object} val session object
     */
    set(val: Record<string, unknown> | null): void;
    /**
     * init session from external store
     * will be called in the front of session middleware
     *
     * @public
     */
    initFromExternal(): Promise<void>;
    /**
     * init session from cookie
     * @private
     */
    initFromCookie(): void;
    /**
     * verify session(expired or custom verification)
     * @param {Object} sessionData session data
     * @param {Object} [key] session externalKey(optional)
     * @private
     */
    protected valid(sessionData: Record<string, unknown>, key?: string): boolean;
    /**
     * @param {String} event event name
     * @param {Object} data event data
     * @private
     */
    emit(event: string, data: unknown): void;
    /**
     * create a new session and attach to ctx.sess
     *
     * @param {Object} [sessionData] session data
     * @param {String} [externalKey] session external key
     */
    protected create(sessionData?: Record<string, unknown>, externalKey?: string): void;
    /**
     * Commit the session changes or removal.
     */
    commit({ save, regenerate }?: {
        save?: boolean | undefined;
        regenerate?: boolean | undefined;
    }): Promise<void>;
    _shouldSaveSession(): "" | "changed" | "rolling" | "renew";
    /**
     * remove session
     * @private
     */
    remove(): Promise<void>;
    /**
     * save session
     * @private
     */
    save(changed: boolean): Promise<void>;
}
