UNPKG

@holusion/product-scanner

Version:

MDNS network scanner for holusion products

44 lines (39 loc) 1.21 kB
'use strict'; export const default_services = [ "_holusion._tcp.local", "_workstation._tcp.local", "_ssh._tcp.local", ]; /** * * @param {object} param0 * @param {import("multicast-dns").MulticastDNS} param0.mdns * @param {string[]} [param0.services] * @param {string} [param0.address] */ export async function query({mdns, services=default_services, address}){ if(typeof mdns?.query !== "function") throw new Error(`Invalid MulticastDns instance : ${mdns}`); return await new Promise((resolve, reject) => mdns.query( /** @type {Array<{type:"PTR"|"A", name: string}>} */ services.map(name => ({ type: "PTR", name, })), address?{port:5353, address}: null, (err)=>err?reject(err):resolve() )); } /** * * @param {import(".").Host} host * @returns {boolean} */ export function isProduct(host, services=default_services){ return !!host.host && !!host.address && host.services?.length && ( //Require either all default services (deprecated as of 4.3.0 ) or _holusion._tcp.local services.slice(1).every(s=>host.services.indexOf(s) !== -1) || host.services.indexOf("_holusion._tcp.local") !==-1 ) || false; }