import { Service } from '../core/nqs/Services';
export default class Session {
    private static BEAT_INTERVAL;
    private core;
    private coreStorage;
    private options;
    private accountCode;
    private requestHandler;
    private requestBuilder;
    private listenerBus;
    private registeredPropertiesStore;
    private metricsDiffer;
    private beatScheduler;
    private pluginLogger;
    private paramsAssembler;
    private requestDispatcher;
    private _lastNavigation;
    /**
     * Constructs the Sessions class
     */
    constructor(accountCode: string);
    /**
     * Destroy session object
     */
    destroy(): void;
    /**
     * Starts a new session. If a session exists, stops it and starts a new one.
     *
     * @param options - Object of key:value options (optional).
     * @param dimensions - Object of key:value params to add to the request (optional).
     * @param onSuccess - Optional callback function to be executed if the session start is successful.
     * @param onFail - Optional callback function to be executed if the session start fails.
     * @param forceStart - Optional parameter to force sending the /start NQS event
     */
    start(options?: object, dimensions?: object, onSuccess?: () => void, onFail?: () => void, forceStart?: boolean): void;
    /**
     * Stop session
     * @param params
     * @param onSuccess
     * @param onFail
     * @param forceStop
     * @returns
     */
    stop(params?: any, onSuccess?: () => void, onFail?: () => void, forceStop?: boolean): void;
    /**
     * Sends session event
     * @param eventName
     * @param dimensions
     * @param values
     * @param topLevelDimensions
     * @param hasEndDatetime
     * @param onSuccess
     * @param onFail
     * @returns
     */
    sendEvent(eventName?: string, dimensions?: object, values?: object, topLevelDimensions?: object, hasEndDatetime?: boolean, onSuccess?: () => void, onFail?: () => void): void;
    /**
     * Sends session custom event end/stop
     * @param eventName
     * @param topLevelDimensions
     * @param onSuccess
     * @param onFail
     * @returns
     */
    sendEventEnd(eventName?: string, topLevelDimensions?: object, onSuccess?: () => void, onFail?: () => void): void;
    /**
     * Emits session start request.
     *
     * @param dimensions - Object of key:value params to add to the request.
     * @param onSuccess - Optional callback function to be executed if the request is successful.
     * @param onFail - Optional callback function to be executed if the request fails.
     */
    fireNav(dimensions?: object, onSuccess?: () => void, onFail?: () => void): void;
    /**
     * Emits session error
     * @param code
     * @param msg
     * @param errorType
     * @param metadata
     * @param duration
     * @param dimensions
     * @param values
     * @param onSuccess
     * @param onFail
     * @returns
     */
    fireError(code: string, msg: string, errorType?: string, metadata?: string, duration?: number, dimensions?: object, values?: object, onSuccess?: () => void, onFail?: () => void): void;
    /**
     * Sends beat request
     *
     * @param diffTime - Time since the last ping
     *
     * @private
     */
    private _sendBeat;
    /**
     * Check if change page/route (to avoid duplicated navigations)
     * @param params
     * @returns {boolean}
     * @private
     */
    private _checkDifferentNavigation;
    /**
     * Suspend session
     */
    suspend(): void;
    /**
     * Resume session
     */
    resume(): void;
    /**
     * Sets Analytics options. See {@link Options.setOptions}.
     *
     * @internal
     * @param options
     */
    setOptions(options: any): void;
    /**
     * Gets Analytics options. See {@link Options}.
     */
    getOptions(): any;
    /**
     * Checks whether the session is using legacy
     * @returns
     */
    isUsingLegacy(): boolean;
    /**
     * Get account code
     * @returns
     */
    protected getAccountCode(): string;
    /**
     * Session is active if there is a start request in the queue or the session is already started
     * @returns
     */
    isActive(): boolean;
    /**
     * Checks whether session has expired or not
     * @returns
     */
    expiredSession(): boolean;
    /**
     * Flush the request queue
     * @param timeoutMs - Timeout in milliseconds (default: 30000)
     * @returns Promise that resolves when the request queue is flushed
     */
    flush(timeoutMs: number): Promise<unknown>;
    /**
     * Destroys the active session synchronously: drops queued events, wipes session
     * storage and refreshes the session token. Does NOT trigger a SESSION_EXPIRE event
     * nor an automatic recovery — call start() afterwards to begin a new session.
     */
    destroySession(): void;
    /**
     * Register properties sent by the User, to send in all the events
     *
     * @param dimensions - Object of key:value dimensions.
     * @param values - Object of key:value values.
     */
    register(dimensions?: object, values?: object): void;
    /**
     * Calls register if registeredProperties is empty
     *
     * @param dimensions - Object of key:value dimensions.
     * @param values - Object of key:value values.
     */
    registerOnce(dimensions: object, values: object): void;
    /**
     * Unregister all properties registered with register()
     */
    unregister(): void;
    /**
     * On queue request listener
     * @param serviceName
     * @param params
     */
    private onRequestQueued;
    /**
     * On will send request listener
     * @param serviceName
     * @param params
     */
    private onWillSendRequest;
    /**
     * On sent request listener
     * @param serviceName
     * @param params
     */
    private onRequestSent;
    /**
     * Add listener
     * @param eventName
     * @param callback
     */
    addListenerRequestQueued(listener: (sessionRequest: any) => void): void;
    /**
     * Add listener
     * @param eventName
     * @param callback
     */
    addListenerRequestWillSend(listener: (sessionRequest: any) => void): void;
    /**
     * Add listener
     * @param eventName
     * @param callback
     */
    addListenerRequestSent(listener: (sessionRequest: any) => void): void;
    /**
     * Returns a json with the metrics to be reported in beats when changed
     */
    getSessionMetrics(): object;
    /**
     * Is player event logs enabled (to report QA Tools additional info)
     *
     * @internal
     * @returns {boolean}
     */
    isPlayerLogsEnabled(): boolean;
    /**
     * Check if is set protection on newSession method, to avoid stop the active session on newSession call
     *
     * @internal
     * @returns {boolean}
     */
    isSimpleNewSession(): boolean;
    /**
     * Is plugin logs enabled (to report QA Tools additional info)
     *
     * @internal
     * @returns {boolean}
     */
    isPluginLogsEnabled(): boolean;
    /**
     * Is post method enabled
     * @returns {boolean}
     */
    isMethodPostEnabled(): boolean;
    getSessionRoot(): string;
    getSessionHost(): string;
    /**
     * Send plugin logs (public for compatibility)
     *
     * @param willSendLog
     * @param service
     * @param params
     */
    _sendPluginLogs(willSendLog: string, service: Service, params: object): void;
    _logFireSessionStartEvent(dimensions: object): void;
    _logFireSessionErrorEvent(code: string, msg: string, errorType?: string, metadata?: string, duration?: number, dimensions?: object, values?: object): void;
    private _logFireSessionStopEvent;
    private _logFireEventListener;
    private _logFireEventEndListener;
    private _logFireNavListener;
}
