///
import StickySocketConnection from './stickySocketConnection';
import EventEmitter from '../../tools/eventEmitter';
/**
* Client sticky socket
*/
declare class ClientStickySocket extends EventEmitter {
private _logger;
private _pool;
private _stickyConnectionWaitTimeout?;
private _id;
private _label;
private _stopped;
private _connected;
/**
* Constructs instance
* @param url URL
* @param options options
*/
constructor(url: string, options?: ClientStickySocket.Options);
/**
* Returns socket ID
* @returns socket ID
*/
get id(): string;
/**
* Returns current native socket
* @returns socket.io socket
* @internal intended for tests only
*/
get socket(): SocketIOClient.Socket;
/**
* Returns current transport name, using socket.io internals
* @returns transport name, e.g. "websocket"
* @internal intended for tests only
*/
get transportName(): string;
/**
* Returns first present packet index in last emit history
* @returns first history index
* @internal intended for tests only
*/
get firstHistoryIndex(): number | undefined;
/**
* Returns whether socket connected
* @returns is connected
*/
get connected(): boolean;
/**
* @inheritdoc
* @remarks Socket events `ClientStickySockets.INTERNAL_EVENTS` cannot be subscribed to
* @throws `ValidationError` if attempting to subscribe to an internal event
*/
on>(event: U, callback: ClientStickySocket.Events[U]): void;
/**
* Emits a data event. All events are buffered if no connection
* @param event The event that we're emitting
* @param args Optional arguments to send with the event
*/
send(event: string, ...args: any[]): void;
/**
* Disconnects socket
* @param err error if disconnecting with error
* @returns promise resolving when disconnected
*/
disconnect(err?: Error): Promise;
/**
* Destroys underlying socket, using socket.io internals. The socket must have `websocket` transport
* @param err optional error
* @internal intended for tests only, e.g. to test connection loss
*/
destroyInternalSocket(err?: Error): void;
/**
* Removes expired emit history
* @internal intended for tests only
*/
removeExpiredEmitHistory(): void;
}
declare namespace ClientStickySocket {
/** Constructing options */
type Options = Pick & {
/**
* Emit history buffer TTL. Defaults to `stickyConnectionTtlInSeconds` + `reconnectThrottleDelayInMs`
* (converted to seconds)
*/
emitHistoryTtlInSeconds?: number;
/** Timeout within of which a connection can be restored as previous one. Defaults to `10` */
stickyConnectionTtlInSeconds?: number;
/** Reconnection delay. The delay will be increased by 2x each failed connection attempt. Defaults to `1000` */
reconnectionDelayInMs?: number;
/** Max reconnection delay. Defaults to `10000` */
reconnectionDelayMaxInMs?: number;
/** Reconnection delay randomization factor in range [0; 1]. Defaults to `0.5` */
reconnectionRandomizationFactor?: number;
};
/** Event listeners */
type Events = {
/** Fired only once upon first connection */
connect: () => void;
/** Fired only once upon the last disconnection. Will be fired anyway, even if was never connected */
disconnect: (err?: Error) => void;
/** Custom subscription events */
[event: string]: (...args: any[]) => any;
};
/** Connection events */
const CONNECTION_EVENTS: string[];
/** Internal events */
const INTERNAL_EVENTS: string[];
}
export default ClientStickySocket;