import { StorageService } from '../storage-service';
export interface SessionInfo<T> {
    id: T;
    tab: number;
}
export declare type SessionIdGenerator<T> = () => T;
export declare type SessionStartedCallback<T> = (sessionId: T, tabId: number) => void;
export declare type NewTabOpenedCallback<T> = (tabId: number) => void;
export declare class BrowserTabTracker<T> {
    private storageService;
    private storageKeyName;
    private sessionInfo;
    private sessionIdGenerator;
    private sessionStartedCallback?;
    private newTabOpenedCallback?;
    private newSessionCreated;
    constructor(storageService: StorageService);
    /**
     * The current tab ID.
     * The tab ID starts from 1, and increments for every tab opened in the session.
     * @returns a number
     */
    readonly tabId: number;
    /**
     * The current session ID.
     * The session ID is shared across multiple browser tabs for a given session.
     * @returns a value returned by the SessionIdGenerator
     */
    readonly sessionId: T;
    /**
     * The name used for the `session storage` item and `cookie`
     */
    readonly storageKey: string;
    /**
     * This should be called only after the following`sessionIdGenerator` and `storageKey` are set.
     */
    initialize(options: {
        sessionIdGenerator: SessionIdGenerator<T>;
        sessionStartedCallback?: SessionStartedCallback<T>;
        newTabOpenedCallback?: NewTabOpenedCallback<T>;
        storageKey?: string;
    }): void;
    private generateSessionInfo;
    private onTabClosed;
    private generateNewTabId;
    private validateKey;
    private startNewSession;
    private validateSessionIdGenerator;
}
