UNPKG

@collight/dns-sd

Version:

A DNS Service Discovery implementation in modern TypeScript

3 lines (2 loc) 1.64 kB
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require("../utils/debug.cjs");const n=require("../utils/dns-utils.cjs");require("events");require("fast-deep-equal");require("multicast-dns");const d=require("../utils/ServiceType.cjs");class l{constructor(r,o,i,e,t,s,a){this.name=r,this.fqdn=o,this.host=i,this.port=e,this.referer=t,this.ttl=s,this.lastSeen=a,this.subtypes=[],this.addresses=[];const c=d.ServiceType.fromString(o.split(".").slice(1,-1).join("."));this.type=c.name,this.protocol=c.protocol}static fromResponse(r,o){const i=[];for(const t of[...r.answers,...r.additionals])"ttl"in t&&t.ttl!==void 0&&t.ttl>0&&i.push(t);const e=[];for(const t of i)if(t.type==="PTR"){const s=this.fromPTR(t,i,o);s&&e.push(s)}return e}static fromPTR(r,o,i){let e;for(const t of o)if(t.type==="SRV"&&n.nameEquals(t.name,r.data)){const s=t.name,a=s.split(".")[0];if(a===void 0)return console.error("Invalid service name",a),null;const c=t.data.target,u=t.data.port;e=new l(a,s,c,u,i,r.ttl,Date.now())}if(!e)return null;for(const t of o)t.type==="TXT"&&n.nameEquals(t.name,r.data)&&(e.txt=n.decodeTXT(t.data,!1),e.binaryTxt=n.decodeTXT(t.data,!0),e.rawTxt=t.data);for(const t of o)if(t.type==="PTR"&&n.nameEquals(t.data,r.data)&&t.name.includes("._sub")){const s=d.ServiceType.fromString(t.name);s.subtype!==void 0&&e.subtypes.push(s.subtype)}for(const t of o)(t.type==="A"||t.type==="AAAA")&&e.host&&n.nameEquals(t.name,e.host)&&e.addresses.push(t.data);return e}get expired(){return this.ttl!==void 0&&Date.now()>this.lastSeen+this.ttl*1e3}}exports.DiscoveredService=l; //# sourceMappingURL=DiscoveredService.cjs.map