/*!
 * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file
 */
/// <reference types="node" />
import { EventEmitter } from 'events';
import type { WebexSDK } from '../SDKConnector/types';
import type { MobiusSocketConfig } from './config';
import type { SocketResponse } from './socket/types';
import type { MobiusSocketCloseOptions, MobiusSocketDisconnectResult, MobiusSocketRequestOptions, MobiusSocketRequestPayload } from './types';
declare class MobiusSocket extends EventEmitter {
    private webex;
    private config;
    private logger;
    private connected;
    private connecting;
    private hasEverConnected;
    private socket;
    private backoffCall;
    private shutdownSwitchoverBackoffCall;
    private seenAsyncEventIds;
    private connectPromise;
    private socketUrl;
    private tokenRefreshTimer;
    private tokenRefreshInFlight;
    constructor(webex: WebexSDK, config?: Partial<MobiusSocketConfig>);
    off(eventName: string, listener?: (...args: unknown[]) => void): this;
    private attachSocketEventListeners;
    private trackAsyncEventAndShouldSuppressDuplicate;
    private handleImminentShutdown;
    getConnectedWebSocketUrl(): string | undefined;
    sendWssRequest(payload: MobiusSocketRequestPayload, options?: MobiusSocketRequestOptions): Promise<SocketResponse>;
    isConnected(): boolean;
    connect(webSocketUrl?: string): Promise<void>;
    disconnect(options?: MobiusSocketCloseOptions): MobiusSocketDisconnectResult;
    private prepareUrl;
    private attemptConnection;
    private prepareAndOpenSocket;
    private connectWithBackoff;
    private emitEvent;
    private startTokenRefreshTimer;
    private stopTokenRefreshTimer;
    private refreshToken;
    private onclose;
    private onmessage;
    private reconnect;
}
export default MobiusSocket;
//# sourceMappingURL=mobius-socket.d.ts.map