import type { Logger } from '@iota-big3/sdk-types';
import { Redis } from 'ioredis';
import { Knex } from 'knex';
import type { Result } from '@iota-big3/sdk-patterns';
export interface Session {
    id: string;
    userId: string;
    data: SessionData;
    createdAt: Date;
    updatedAt: Date;
    expiresAt: Date;
    lastActivityAt: Date;
    deviceInfo?: DeviceInfo;
}
export interface SessionData {
    userId: string;
    createdAt: Date;
    expiresAt: Date;
    lastAccessedAt: Date;
    data?: Record<string, unknown>;
    roles?: string[];
    permissions?: string[];
    ipAddress?: string;
    userAgent?: string;
}
export interface DeviceInfo {
    id: string;
    type: 'web' | 'mobile' | 'desktop' | 'api';
    name?: string;
    os?: string;
    browser?: string;
    trusted?: boolean;
}
export interface SessionStoreConfig {
    redis?: Redis;
    db?: Knex;
    sessionTTL?: number;
    maxConcurrentSessions?: number;
    extendOnActivity?: boolean;
    cleanupInterval?: number;
}
export declare class SessionStore {
    private redis?;
    private db?;
    private config;
    private logger?;
    private cleanupTimer?;
    constructor(config: SessionStoreConfig, logger?: Logger);
    createAsync(userId: string, data: SessionData, deviceInfo?: DeviceInfo): Promise<Result<Session, Error>>;
    getAsync(sessionId: string): Promise<Session | null>;
    touchAsync(sessionId: string): Promise<void>;
    destroyAsync(sessionId: string): Promise<void>;
    destroyUserSessionsAsync(userId: string): Promise<void>;
    getUserSessionsAsync(userId: string): Promise<Session[]>;
    private enforceSessionLimitAsync;
    private cleanupAsync;
    private startCleanup;
    stopCleanup(): void;
    private generateSessionId;
    private getRedisKey;
    private getUserSessionsKey;
}
//# sourceMappingURL=session-store.d.ts.map