import type { EventCallback, ReconnectOptions } from './types'; declare abstract class PulsoidBaseSocket { protected readonly token: string; private static reconnectDefaultOptions; private websocket; private shouldReconnect; private reconnectTryCount; private reconnectTimeout; private reconnectOptions; private eventTypeToEventHandlersMap; private hasOpened; private lastCloseEvent; protected abstract get url(): string; protected abstract getEventTypes(): TEventType[]; protected abstract onMessageHandler(event: MessageEvent): void; protected abstract get requiredScope(): string; protected onFirstCloseCleanup(): void; protected onDisconnect(): void; private onOpenEventHandler; private onCloseEventHandler; private onErrorEventHandler; private onReconnectEventHandler; private boundOnMessageHandler; private assignEventHandlers; private clearEventHandlers; private resetReconnectData; private reconnect; private getReconnectInterval; private static isRetriableTokenError; private static getTokenErrorType; protected validateToken(): Promise; private emitCloseAndCleanup; private emitTokenError; private openSocketConnection; protected constructor(token: string, reconnectOptions?: ReconnectOptions); protected emitEvent(type: TEventType, ...args: unknown[]): void; on(eventType: TEventType, callback: EventCallback): void; off(eventType: TEventType, callback?: EventCallback): void; connect(): Promise; disconnect(): void; isConnected: () => boolean; } export default PulsoidBaseSocket;