UNPKG

@robot.com/better-mqtt

Version:

A modern, TypeScript-first MQTT client library that provides a better developer experience with async iterators, shared subscriptions, and React hooks. Better MQTT is a wrapper around the excellent [mqtt.js](https://github.com/mqttjs/MQTT.js) library, enh

101 lines (95 loc) 3.95 kB
import { EventEmitter } from 'ee-ts'; import { IClientOptions, ErrorWithReasonCode, MqttClient } from 'mqtt'; interface BetterMQTTMessage<T> { topic: string; content: T; params: string[]; } /** * MQTT subscription options */ interface SubscriptionOptions { /** * MQTT QoS. Default: 2 */ qos: 0 | 1 | 2; /** * MQTT Retain handling. Default: 2 */ rh: 0 | 1 | 2; /** * MQTT Retain as published. Default: false */ rap: boolean; /** * MQTT No local. Default: false */ nl: boolean; } interface SubscriptionEvents<T> { message(message: BetterMQTTMessage<T>): void; end(): void; error(error: Error): void; } declare class Subscription<T = string> extends EventEmitter<SubscriptionEvents<T>> { private mqtt; private generator; topic: string; /** Subscription options */ options: SubscriptionOptions; parser: (message: Buffer) => T; constructor(opts: { mqtt: BetterMQTT; topic: string; parser: (message: Buffer) => T; options?: Partial<SubscriptionOptions>; }); handleMessage(message: Buffer<ArrayBufferLike>, topic: string, params: string[]): void; [Symbol.asyncIterator](): AsyncGenerator<BetterMQTTMessage<T>>; end(): void; } /** biome-ignore-all lint/suspicious/noExplicitAny: I'm sure it is fine */ type ConnectArgs = [brokerUrl: string] | [brokerUrl: string, opts?: IClientOptions] | [opts: IClientOptions]; interface BetterMQTTEvents { status(status: 'online' | 'offline'): void; error(error: Error | ErrorWithReasonCode): void; end(): void; } type MessageParser<T = string> = (message: Buffer) => T; declare function stringParser(message: Buffer): string; declare function jsonParser<T = unknown>(message: Buffer): T; declare function binaryParser(message: Buffer): Buffer; declare class BetterMQTT extends EventEmitter<BetterMQTTEvents> { readonly client: MqttClient; error: Error | ErrorWithReasonCode | null; get status(): "online" | "offline"; private subscriptions; constructor(client: MqttClient); publish(topic: string, message: string | Buffer, opts?: { qos?: 0 | 1 | 2; dup?: boolean; retain?: boolean; }): void; publishAsync(topic: string, message: string | Buffer, opts?: { qos?: 0 | 1 | 2; dup?: boolean; retain?: boolean; }): Promise<void>; publishJson<T>(topic: string, message: T): void; publishJsonAsync<T>(topic: string, message: T): Promise<void>; unsubscribe(sub: Subscription<unknown>): void; subscribe<T>(topic: string, parser: MessageParser<T>, options?: Partial<SubscriptionOptions>): Subscription<T>; subscribeString(topic: string, options?: Partial<SubscriptionOptions>): Subscription<string>; subscribeJson<T>(topic: string, options?: Partial<SubscriptionOptions>): Subscription<T>; subscribeBinary(topic: string, options?: Partial<SubscriptionOptions>): Subscription<Buffer>; unsubscribeAsync(sub: Subscription<unknown>): Promise<void>; subscribeAsync<T>(topic: string, parser: MessageParser<T>, options?: Partial<SubscriptionOptions>): Promise<Subscription<T>>; subscribeStringAsync(topic: string, options?: Partial<SubscriptionOptions>): Promise<Subscription<string>>; subscribeJsonAsync<T>(topic: string, options?: Partial<SubscriptionOptions>): Promise<Subscription<T>>; subscribeBinaryAsync(topic: string, options?: Partial<SubscriptionOptions>): Promise<Subscription<Buffer>>; static connectAsync(...args: ConnectArgs): Promise<BetterMQTT>; static connect(...args: ConnectArgs): BetterMQTT; end(endClient?: boolean): void; endAsync(endClient?: boolean): Promise<void>; } export { BetterMQTT, type BetterMQTTEvents, type BetterMQTTMessage, type ConnectArgs, type MessageParser, Subscription, type SubscriptionEvents, type SubscriptionOptions, binaryParser, jsonParser, stringParser };