/// /// import { IAuthPacket, IConnackPacket, IDisconnectPacket, IPublishPacket, ISubscribePacket, Packet, QoS, IConnectPacket } from 'mqtt-packet'; import { IMessageIdProvider } from './default-message-id-provider'; import { DuplexOptions } from 'readable-stream'; import Store, { IStore } from './store'; import { ClientOptions } from 'ws'; import { ClientRequestArgs } from 'http'; import { DoneCallback, ErrorWithReasonCode, IStream, StreamBuilder, VoidCallback } from './shared'; import { TypedEventEmitter } from './TypedEmitter'; import PingTimer from './PingTimer'; export type MqttProtocol = 'wss' | 'ws' | 'mqtt' | 'mqtts' | 'tcp' | 'ssl' | 'wx' | 'wxs' | 'ali' | 'alis'; export type StorePutCallback = () => void; export interface ISecureClientOptions { key?: string | string[] | Buffer | Buffer[] | any[]; keyPath?: string; cert?: string | string[] | Buffer | Buffer[]; certPath?: string; ca?: string | string[] | Buffer | Buffer[]; caPaths?: string | string[]; rejectUnauthorized?: boolean; ALPNProtocols?: string[] | Buffer[] | Uint8Array[] | Buffer | Uint8Array; } export type AckHandler = (topic: string, message: Buffer, packet: any, cb: (error: Error | number, code?: number) => void) => void; export interface IClientOptions extends ISecureClientOptions { encoding?: BufferEncoding; browserBufferSize?: number; binary?: boolean; my?: any; manualConnect?: boolean; authPacket?: Partial; writeCache?: boolean; servername?: string; defaultProtocol?: MqttProtocol; query?: Record; auth?: string; customHandleAcks?: AckHandler; port?: number; host?: string; hostname?: string; path?: string; protocol?: MqttProtocol; wsOptions?: ClientOptions | ClientRequestArgs | DuplexOptions; reconnectPeriod?: number; connectTimeout?: number; incomingStore?: IStore; outgoingStore?: IStore; queueQoSZero?: boolean; log?: (...args: any[]) => void; autoUseTopicAlias?: boolean; autoAssignTopicAlias?: boolean; reschedulePings?: boolean; servers?: Array<{ host: string; port: number; protocol?: 'wss' | 'ws' | 'mqtt' | 'mqtts' | 'tcp' | 'ssl' | 'wx' | 'wxs'; }>; resubscribe?: boolean; transformWsUrl?: (url: string, options: IClientOptions, client: MqttClient) => string; createWebsocket?: (url: string, websocketSubProtocols: string[], options: IClientOptions) => any; messageIdProvider?: IMessageIdProvider; browserBufferTimeout?: number; objectMode?: boolean; clientId?: string; protocolVersion?: IConnectPacket['protocolVersion']; protocolId?: IConnectPacket['protocolId']; clean?: boolean; keepalive?: number; username?: string; password?: Buffer | string; will?: IConnectPacket['will']; properties?: IConnectPacket['properties']; } export interface IClientPublishOptions { qos?: QoS; retain?: boolean; dup?: boolean; properties?: IPublishPacket['properties']; cbStorePut?: StorePutCallback; } export interface IClientReconnectOptions { incomingStore?: Store; outgoingStore?: Store; } export interface IClientSubscribeProperties { properties?: ISubscribePacket['properties']; } export interface IClientSubscribeOptions extends IClientSubscribeProperties { qos: QoS; nl?: boolean; rap?: boolean; rh?: number; } export interface ISubscriptionRequest extends IClientSubscribeOptions { topic: string; } export interface ISubscriptionGrant extends Omit { qos: QoS | 128; } export type ISubscriptionMap = { [topic: string]: IClientSubscribeOptions; } & { resubscribe?: boolean; }; export { IConnackPacket, IDisconnectPacket, IPublishPacket, Packet }; export type OnConnectCallback = (packet: IConnackPacket) => void; export type OnDisconnectCallback = (packet: IDisconnectPacket) => void; export type ClientSubscribeCallback = (err: Error | null, granted?: ISubscriptionGrant[]) => void; export type OnMessageCallback = (topic: string, payload: Buffer, packet: IPublishPacket) => void; export type OnPacketCallback = (packet: Packet) => void; export type OnCloseCallback = () => void; export type OnErrorCallback = (error: Error | ErrorWithReasonCode) => void; export type PacketCallback = (error?: Error, packet?: Packet) => any; export type CloseCallback = (error?: Error) => void; export interface MqttClientEventCallbacks { connect: OnConnectCallback; message: OnMessageCallback; packetsend: OnPacketCallback; packetreceive: OnPacketCallback; disconnect: OnDisconnectCallback; error: OnErrorCallback; close: OnCloseCallback; end: VoidCallback; reconnect: VoidCallback; offline: VoidCallback; outgoingEmpty: VoidCallback; } export default class MqttClient extends TypedEventEmitter { connected: boolean; disconnecting: boolean; disconnected: boolean; reconnecting: boolean; incomingStore: IStore; outgoingStore: IStore; options: IClientOptions; queueQoSZero: boolean; _reconnectCount: number; log: (...args: any[]) => void; messageIdProvider: IMessageIdProvider; pingResp: boolean; outgoing: Record void; }>; messageIdToTopic: Record; noop: (error?: any) => void; pingTimer: PingTimer; stream: IStream; queue: { packet: Packet; cb: PacketCallback; }[]; private streamBuilder; private _resubscribeTopics; private connackTimer; private reconnectTimer; private _storeProcessing; private _packetIdsDuringStoreProcessing; private _storeProcessingQueue; private _firstConnection; private topicAliasRecv; private topicAliasSend; private _deferredReconnect; private connackPacket; static defaultId(): string; constructor(streamBuilder: StreamBuilder, options: IClientOptions); handleAuth(packet: IAuthPacket, callback: PacketCallback): void; handleMessage(packet: IPublishPacket, callback: DoneCallback): void; private _nextId; getLastMessageId(): number; connect(): this; publish(topic: string, message: string | Buffer): MqttClient; publish(topic: string, message: string | Buffer, callback?: PacketCallback): MqttClient; publish(topic: string, message: string | Buffer, opts?: IClientPublishOptions, callback?: PacketCallback): MqttClient; publishAsync(topic: string, message: string | Buffer): Promise; publishAsync(topic: string, message: string | Buffer, opts?: IClientPublishOptions): Promise; subscribe(topicObject: string | string[] | ISubscriptionMap): MqttClient; subscribe(topicObject: string | string[] | ISubscriptionMap, callback?: ClientSubscribeCallback): MqttClient; subscribe(topicObject: string | string[] | ISubscriptionMap, opts?: IClientSubscribeOptions | IClientSubscribeProperties): MqttClient; subscribe(topicObject: string | string[] | ISubscriptionMap, opts?: IClientSubscribeOptions | IClientSubscribeProperties, callback?: ClientSubscribeCallback): MqttClient; subscribeAsync(topicObject: string | string[] | ISubscriptionMap): Promise; subscribeAsync(topicObject: string | string[] | ISubscriptionMap, opts?: IClientSubscribeOptions | IClientSubscribeProperties): Promise; unsubscribe(topic: string | string[]): MqttClient; unsubscribe(topic: string | string[], opts?: IClientSubscribeOptions): MqttClient; unsubscribe(topic: string | string[], callback?: PacketCallback): MqttClient; unsubscribe(topic: string | string[], opts?: IClientSubscribeOptions, callback?: PacketCallback): MqttClient; unsubscribeAsync(topic: string | string[]): Promise; unsubscribeAsync(topic: string | string[], opts?: IClientSubscribeOptions): Promise; end(cb?: DoneCallback): MqttClient; end(force?: boolean): MqttClient; end(opts?: Partial, cb?: DoneCallback): MqttClient; end(force?: boolean, cb?: DoneCallback): MqttClient; end(force?: boolean, opts?: Partial, cb?: DoneCallback): MqttClient; endAsync(): Promise; endAsync(force?: boolean): Promise; endAsync(opts?: Partial): Promise; endAsync(force?: boolean, opts?: Partial): Promise; removeOutgoingMessage(messageId: number): MqttClient; reconnect(opts?: Pick): MqttClient; private _flushVolatile; private _flush; private _removeTopicAliasAndRecoverTopicName; private _checkDisconnecting; private _reconnect; private _setupReconnect; private _clearReconnect; private _cleanUp; private _storeAndSend; private _applyTopicAlias; private _noop; private _writePacket; private _sendPacket; private _storePacket; private _setupPingTimer; private _shiftPingInterval; private _checkPing; private _resubscribe; private _onConnect; private _invokeStoreProcessingQueue; private _invokeAllStoreProcessingQueue; private _flushStoreProcessingQueue; private _removeOutgoingAndStoreMessage; }