1.5.2: send() never rejects (status, error, scene, change report: resolves the topic or "" and reports the failure through the bridge's error event when listened to - 1.5.1 rejected, and an un-caught .send() killed the host on any broker hiccup); types ship (declaration: true, dist/*.d.ts tracked; addSupportedModes takes {value, modeResources}, ActionMapping payload optional, addHealthProp accepts EndpointHealth or the string); disconnect()/connect() re-binds devices to the new client; registerDevice returns the existing device on a duplicate endpointId (warning via the log hook, console.warn without one); ThermostatController discovery lists targetSetpoint and drops adaptiveRecoveryStatus; the UNSUPORTED INTERFACE TYPE stderr spam goes through the log hook. Examples: require("alex2node"), an error listener in each, EndpointHealth.OK, neutral endpoint ids, BlindControl reads correlationToken from the header, the thermostat reports Fahrenheit as Fahrenheit, ExamplePowerController is power-only again + new ExamplePowerControllerWithBrightness. readme (install from Forgejo, 1.5.2 changelog, table syntax), LICENSE (MIT); tests for the non-rejecting send, reconnect, duplicate, thermostat discovery and the shipped declaration signatures (8/8 on an in-process broker).
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
parent
717af632de
commit
275f00f8a7
35 changed files with 1011 additions and 176 deletions
59
dist/Alex2Node.d.ts
vendored
Normal file
59
dist/Alex2Node.d.ts
vendored
Normal file
|
|
@ -0,0 +1,59 @@
|
|||
import { IClientOptions } from "mqtt";
|
||||
import Device from "./Device";
|
||||
import { EventEmitter } from "events";
|
||||
import { DisplayCategory } from "./DisplayCategory";
|
||||
/** Optional settings for the bridge (1.5.1). Everything has the 1.4.0 behaviour as its default. */
|
||||
export interface Alex2MQTTOptions {
|
||||
/** The broker URL. Default: the public Alex2MQTT broker, mqtt://Alex2MQTT.stormysdream.club:1883. */
|
||||
host?: string;
|
||||
/** Extra mqtt.js client options (reconnectPeriod, connectTimeout, clientId, ...). Merged over the defaults. */
|
||||
mqtt?: IClientOptions;
|
||||
/** Where log lines go. Default: console (only when debugLogging is on). */
|
||||
log?: (message: string, detail?: unknown) => void;
|
||||
}
|
||||
export declare const DEFAULT_HOST = "mqtt://Alex2MQTT.stormysdream.club:1883";
|
||||
/**
|
||||
* The Alexa-to-MQTT bridge: one broker connection for a user's root topic, a set of registered devices, discovery and
|
||||
* directive dispatch.
|
||||
*
|
||||
* Events (all optional to listen to - since 1.5.1 a broker outage never throws out of the library):
|
||||
* "connect" connected (or reconnected) and subscribed to <root>/#
|
||||
* "offline" the connection dropped; mqtt.js reconnects on its own (reconnectPeriod, default 1 s)
|
||||
* "reconnect" a reconnect attempt starts
|
||||
* "close" the connection closed
|
||||
* "error" (err) a connection or publish error. Emitted ONLY when a listener is attached (1.4.0 emitted it
|
||||
* unconditionally, and Node kills a process that has an unhandled "error" event)
|
||||
* "discover" (n) a discovery request was answered with n devices
|
||||
* "directive" (info) a directive was dispatched to a device: { endpointId, namespace, name }
|
||||
*/
|
||||
declare class Alex2MQTT extends EventEmitter {
|
||||
private username;
|
||||
private password;
|
||||
private rootTopic;
|
||||
private debugLogging;
|
||||
private client;
|
||||
private devices;
|
||||
private MqttHost;
|
||||
private options;
|
||||
/** true while the broker connection is up. */
|
||||
connected: boolean;
|
||||
/** ISO time of the last discovery request answered, null before the first. */
|
||||
lastDiscoveryAt: string | null;
|
||||
constructor(username: string, password: string, rootTopic: string, debugLogging?: boolean, options?: Alex2MQTTOptions);
|
||||
private log;
|
||||
/** Emit "error" only when somebody listens: an unhandled "error" event would crash the host process. */
|
||||
private fail;
|
||||
connect(): void;
|
||||
/** Close the broker connection (resolves once closed). The devices stay registered; connect() again reuses them. */
|
||||
disconnect(): Promise<void>;
|
||||
registerDevice(name: string, endpointId: string, displayCategory: DisplayCategory | DisplayCategory[] | null): Device;
|
||||
/** Forget a device (its listeners with it). Returns false when there was none. */
|
||||
unregisterDevice(endpointId: string): boolean;
|
||||
/** Forget every device. */
|
||||
clearDevices(): void;
|
||||
getDevices(): Device[];
|
||||
getDevice(endpointId: string): Device | undefined;
|
||||
getRootTopic(): string;
|
||||
getHost(): string;
|
||||
}
|
||||
export default Alex2MQTT;
|
||||
Loading…
Add table
Add a link
Reference in a new issue