import { RequestContext, ResponseContext } from './request-watcher.interceptor';
export interface SessionInfo {
    id: string;
    userId?: string;
    startTime: Date;
    lastActivity: Date;
    requestCount: number;
    totalDuration: number;
    averageResponseTime: number;
    errorCount: number;
    pages: string[];
    userAgent: string;
    ipAddress: string;
    isActive: boolean;
}
export interface UserSession {
    sessionId: string;
    userId?: string;
    requests: SessionRequest[];
    startTime: Date;
    endTime?: Date;
    duration: number;
    isActive: boolean;
    metadata: SessionMetadata;
}
export interface SessionRequest {
    id: string;
    method: string;
    url: string;
    statusCode: number;
    duration: number;
    timestamp: Date;
    error?: string;
}
export interface SessionMetadata {
    userAgent: string;
    ipAddress: string;
    initialReferrer?: string;
    totalPages: number;
    uniquePages: number;
    bounceRate: number;
    avgTimePerPage: number;
}
export declare class RequestSessionTracker {
    private readonly logger;
    private readonly sessions;
    private readonly userSessions;
    private readonly sessionTimeout;
    private readonly cleanupInterval;
    constructor();
    trackRequest(requestContext: RequestContext, responseContext: ResponseContext, error: Error | null): void;
    private trackSessionRequest;
    private trackUserSession;
    private updateSessionMetadata;
    private extractPageFromUrl;
    private generateSessionId;
    private startCleanupTimer;
    private cleanupInactiveSessions;
    getSessionInfo(sessionId: string): SessionInfo | undefined;
    getUserSession(userId: string, sessionId?: string): UserSession | undefined;
    getActiveSessions(): SessionInfo[];
    getActiveUserSessions(): UserSession[];
    getSessionsByUser(userId: string): UserSession[];
    getSessionStats(): {
        totalSessions: number;
        activeSessions: number;
        averageSessionDuration: number;
        averageRequestsPerSession: number;
        bounceRate: number;
        topPages: Array<{
            page: string;
            visits: number;
        }>;
    };
    invalidateSession(sessionId: string): void;
    clearAllSessions(): void;
}
