bigassfans
Version: 
A library for discovering and controlling BigAssFans
54 lines (53 loc) • 1.93 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.discover = void 0;
const bigassfan_1 = require("./bigassfan");
const node_dns_sd_1 = __importDefault(require("node-dns-sd"));
async function discover() {
    const results = await node_dns_sd_1.default.discover({
        name: "_api._tcp.local"
    });
    const descriptions = parseMDNS(results);
    return descriptions.map(description => {
        return {
            name: description.name,
            ip: description.ip,
            port: description.port,
            apiVersion: description.apiVersion,
            deviceId: description.deviceId,
            model: description.model,
            initialize: () => {
                return new bigassfan_1.BigAssFan(description.ip, description.port);
            }
        };
    });
}
exports.discover = discover;
// export async function getAdvertisingFans(): Promise<FanDescription[]> {
//     const results = await mDnsSd.discover({
//         name: "_api._tcp.local"
//     })
//     const descriptions = parseMDNS(results)
//     return descriptions
// }
function parseMDNS(responses) {
    const descriptions = [];
    responses.forEach((entry) => {
        if (!entry.fqdn.includes("_api._tcp.local"))
            return; // Only continue parsing correct responses
        const txtRecord = entry.packet.answers.find((record) => record.type === "TXT");
        const description = {
            ip: entry.address,
            port: Number.parseInt(entry.service.port),
            apiVersion: txtRecord.rdata["api version"],
            deviceId: txtRecord.rdata.uuid,
            model: txtRecord.rdata.model,
            name: txtRecord.rdata.name
        };
        descriptions.push(description);
    });
    return descriptions;
}