export interface SessionMetadata {
    created: Date;
    lastAccessed: Date;
    size: number;
    version: number;
}
export interface SessionData<T> {
    data: T;
    metadata: SessionMetadata;
}
export interface SessionStorageProvider<T> {
    get(sessionId: string): Promise<SessionData<T> | null>;
    set(sessionId: string, data: SessionData<T>): Promise<void>;
    delete(sessionId: string): Promise<void>;
    cleanup(maxAge: number): Promise<void>;
}
export declare class InMemorySessionStorage<T> implements SessionStorageProvider<T> {
    private sessions;
    get(sessionId: string): Promise<SessionData<T> | null>;
    set(sessionId: string, data: SessionData<T>): Promise<void>;
    delete(sessionId: string): Promise<void>;
    cleanup(maxAge: number): Promise<void>;
}
export declare class SessionManager<T> {
    private storage;
    private readonly maxSessionAge;
    private readonly maxSessionSize;
    private cleanupInterval;
    constructor(storage: SessionStorageProvider<T>, options?: {
        maxSessionAge?: number;
        maxSessionSize?: number;
        cleanupIntervalMs?: number;
    });
    private startCleanupInterval;
    getSession(sessionId: string): Promise<SessionData<T>>;
    private createSession;
    updateSession(sessionId: string, data: T): Promise<void>;
    deleteSession(sessionId: string): Promise<void>;
    cleanup(): Promise<void>;
    private calculateSize;
    destroy(): void;
}
