UNPKG

bigassfans

Version:

A library for discovering and controlling BigAssFans

54 lines (53 loc) 1.93 kB
"use strict"; 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; }