import { Listener } from "./Listener";
import { Dispatcher } from "./Dispatcher";
import { HankoOptions } from "../../Hanko";
/**
 * A class that manages session checks, dispatches events based on session status,
 * and uses broadcast channels for inter-tab communication.
 *
 * @category SDK
 * @subcategory Internal
 * @extends Dispatcher
 * @param {string} api - The API endpoint URL.
 * @param {HankoOptions} options - The internal configuration options of the SDK.
 */
export declare class Relay extends Dispatcher {
    listener: Listener;
    private readonly checkInterval;
    private readonly client;
    private readonly sessionState;
    private readonly windowActivityManager;
    private readonly scheduler;
    private readonly sessionChannel;
    private isLoggedIn;
    constructor(api: string, options: HankoOptions);
    /**
     * Sets up all event listeners and initializes session management.
     * This method is crucial for ensuring the session is monitored across all tabs.
     * @private
     */
    private initializeEventListeners;
    /**
     * Initiates session checking based on the last check time.
     * This method decides when the next check should occur to balance between performance and freshness.
     * @private
     */
    private startSessionCheck;
    /**
     * Validates the current session and updates session information.
     * This method checks if the session is still valid and updates local data accordingly.
     * @returns {Promise<SessionCheckResult>} - A promise that resolves with the session check result.
     * @private
     */
    private checkSession;
    /**
     * Resets session-related states when a session expires.
     * Ensures that authentication state is cleared and an expiration event is dispatched.
     * Assumes the user is logged out by default if the session state is unknown.
     * @private
     */
    private onSessionExpired;
    /**
     * Handles session expired events from broadcast messages.
     * @private
     */
    private onChannelSessionExpired;
    /**
     * Handles session creation events from broadcast messages.
     * @param {BroadcastMessage} msg - The broadcast message containing session details.
     * @private
     */
    private onChannelSessionCreated;
    /**
     * Handles leadership requests from other tabs.
     * @private
     */
    private onChannelLeadershipRequested;
    /**
     * Retrieves or generates the session check channel name based on the session token storage location.
     *
     * - If the `sessionTokenLocation` is `"cookie"`, the provided `sessionCheckChannelName` is returned as-is.
     * - If the `sessionTokenLocation` is `"sessionStorage"`, the function attempts to retrieve the channel name from
     *   `sessionStorage`. If none is found, a new name is generated with the value of `sessionCheckChannelName` as a prefix and a random number,
     *   then stored in `sessionStorage` for future use.
     *
     * @param sessionTokenLocation - Indicates where the session token is stored, either `"cookie"` or `"sessionStorage"`.
     * @param sessionCheckChannelName - The name or prefix used for the session check channel.
     * @returns The resolved session check channel name, or `undefined` if not applicable.
     * @private
     */
    private getSessionCheckChannelName;
}
