matterbridge-dyson-robot
Version:
A Matterbridge plugin that connects Dyson robot vacuums and air treatment devices to the Matter smart home ecosystem via their local or cloud MQTT APIs.
35 lines • 1.41 kB
JavaScript
// Matterbridge plugin for Dyson robot vacuum and air treatment devices
// Copyright © 2025 Alexander Thoukydides
import { EventEmitter } from 'events';
// Node doesn't use DOMException for AbortError...
class AbortError extends Error {
constructor(cause) {
super('The operation was aborted', { cause });
this.name = 'AbortError';
}
}
// An EventEmitter with well-behaved Promisified listeners
export class AsyncEventEmitter extends EventEmitter {
// Typed event.once() that ignores unrelated errors
async onceAsync(eventName, signal) {
// Handle already-aborted signal immediately
if (signal?.aborted)
throw new AbortError(signal.reason);
// Otherwise return a promise that...
return new Promise((resolve, reject) => {
// ... resolves when the event occurs
const resolver = ((...args) => {
signal?.removeEventListener('abort', abortListener);
resolve(args);
});
this.once(eventName, resolver);
// ... or rejects if the signal is aborted
const abortListener = () => {
this.off(eventName, resolver);
reject(new AbortError(signal?.reason));
};
signal?.addEventListener('abort', abortListener, { once: true });
});
}
}
//# sourceMappingURL=async-eventemitter.js.map