matterbridge-roborock-vacuum-plugin
Version:
Matterbridge Roborock Vacuum Plugin
56 lines • 1.73 kB
JavaScript
import { randomBytes, randomInt } from 'node:crypto';
import * as CryptoUtils from '../helper/cryptoHelper.js';
export class MessageContext {
endpoint;
devices = new Map();
nonce;
serializeNonce;
constructor(userdata) {
this.endpoint = CryptoUtils.md5bin(userdata.rriot.k).subarray(8, 14).toString('base64');
this.nonce = randomInt(1000, 1000000);
this.serializeNonce = randomBytes(16);
}
registerDevice(duid, localKey, pv, nonce) {
this.devices.set(duid, { localKey: localKey, localProtocolVersion: pv, mqttProtocolVersion: pv, nonce });
}
unregisterAllDevices() {
this.devices.clear();
}
updateNonce(duid, nonce) {
const device = this.devices.get(duid);
if (device) {
device.nonce = nonce;
}
}
updateLocalProtocolVersion(duid, pv) {
const device = this.devices.get(duid);
if (device) {
device.localProtocolVersion = pv;
}
}
updateMQTTProtocolVersion(duid, pv) {
const device = this.devices.get(duid);
if (device) {
device.mqttProtocolVersion = pv;
}
}
getSerializeNonceAsHex() {
return this.serializeNonce.toString('hex').toUpperCase();
}
getLocalKey(duid) {
return this.devices.get(duid)?.localKey;
}
getLocalProtocolVersion(duid) {
return this.devices.get(duid)?.localProtocolVersion;
}
getMQTTProtocolVersion(duid) {
return this.devices.get(duid)?.mqttProtocolVersion;
}
getDeviceNonce(duid) {
return this.devices.get(duid)?.nonce;
}
getEndpoint() {
return this.endpoint;
}
}
//# sourceMappingURL=messageContext.js.map