@agentdocumentformat/cli 0.7.7 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (102) hide show
  1. package/README.md +1 -1
  2. package/dist/adf.mjs +59 -8
  3. package/dist/chunks/{APEv2Parser-2CNNHMXV.mjs → APEv2Parser-WIXRJLHB.mjs} +2 -2
  4. package/dist/chunks/{AiffParser-7BR4RL6G.mjs → AiffParser-ZC4QFOVJ.mjs} +5 -5
  5. package/dist/chunks/{App-5KXVPMBV.mjs → App-A5GUFCFJ.mjs} +279 -291
  6. package/dist/chunks/{DsdiffParser-CMD4AX7A.mjs → DsdiffParser-UAPAJHFX.mjs} +5 -5
  7. package/dist/chunks/{DsfParser-UOGZDS2M.mjs → DsfParser-NNYZK2QX.mjs} +6 -6
  8. package/dist/chunks/{FlacParser-HB3T3CD4.mjs → FlacParser-MW2W4LO3.mjs} +6 -6
  9. package/dist/chunks/{MP4Parser-66HBRUSX.mjs → MP4Parser-Z57SYOOQ.mjs} +4 -4
  10. package/dist/chunks/{MpegParser-YW6LIUEW.mjs → MpegParser-XIIPAZVM.mjs} +7 -7
  11. package/dist/chunks/{MusepackParser-PAUSXP7D.mjs → MusepackParser-QWNDEYHJ.mjs} +6 -6
  12. package/dist/chunks/{OggParser-NUBV3GWC.mjs → OggParser-WRX53F77.mjs} +9 -9
  13. package/dist/chunks/{WavPackParser-WQAGT7TC.mjs → WavPackParser-MJ7WCSJ5.mjs} +2 -2
  14. package/dist/chunks/{WaveParser-EWLQVDX4.mjs → WaveParser-RAVLHZ5S.mjs} +7 -7
  15. package/dist/chunks/{adf-schema-US4NFHMR.mjs → adf-schema-YJSGLMA4.mjs} +2 -2
  16. package/dist/chunks/auth-manager-AJ32FZWS.mjs +19 -0
  17. package/dist/chunks/auth-manager-C5OBEQK2.mjs +18 -0
  18. package/dist/chunks/auth-manager-TBNKCJ45.mjs +17 -0
  19. package/dist/chunks/{chatgpt-subscription-E4MXTIAT.mjs → chatgpt-subscription-MMGNW5KJ.mjs} +5 -2
  20. package/dist/chunks/chunk-3UGZFWIF.mjs +26 -0
  21. package/dist/chunks/{chunk-5PO5PKRV.mjs → chunk-4OGZFUKA.mjs} +126 -67
  22. package/dist/chunks/{chunk-VN7UH7I5.mjs → chunk-6XQZGYMK.mjs} +246 -67
  23. package/dist/chunks/{chunk-XNPZBLYL.mjs → chunk-75DC5EWN.mjs} +13 -2
  24. package/dist/chunks/chunk-AZYOXXVL.mjs +865 -0
  25. package/dist/chunks/{chunk-6VQEXLE2.mjs → chunk-BHY7QDCM.mjs} +41 -3
  26. package/dist/chunks/chunk-C2S64Y6F.mjs +203 -0
  27. package/dist/chunks/chunk-C4GA5SI4.mjs +12799 -0
  28. package/dist/chunks/chunk-DDTTSKGG.mjs +2443 -0
  29. package/dist/chunks/{chunk-VAUOM3IN.mjs → chunk-DLWCKKIO.mjs} +1 -1
  30. package/dist/chunks/{chunk-HPVFJYXR.mjs → chunk-ESP3VNMX.mjs} +1 -1
  31. package/dist/chunks/{chunk-QPLEAE6V.mjs → chunk-G6NBFYG5.mjs} +152 -824
  32. package/dist/chunks/{chunk-KXEF4F4E.mjs → chunk-GAZO6UMI.mjs} +1 -1
  33. package/dist/chunks/{chunk-XYTWGHFS.mjs → chunk-H3XLRWVE.mjs} +1 -1
  34. package/dist/chunks/{chunk-7T2YMTWL.mjs → chunk-H4C65MTP.mjs} +4 -4
  35. package/dist/chunks/chunk-HBOFZRUS.mjs +738 -0
  36. package/dist/chunks/chunk-JVPZIMXW.mjs +976 -0
  37. package/dist/chunks/{chunk-XYV3VCIX.mjs → chunk-JZFONJSL.mjs} +79 -20
  38. package/dist/chunks/chunk-KDDVQKCG.mjs +65 -0
  39. package/dist/chunks/chunk-KRPKWOMB.mjs +290 -0
  40. package/dist/chunks/{chunk-4N4ASPH6.mjs → chunk-LCMANRYY.mjs} +4 -254
  41. package/dist/chunks/{chunk-TPRZQ7Z4.mjs → chunk-LGL6ML37.mjs} +4 -4
  42. package/dist/chunks/chunk-LKFHERRV.mjs +145 -0
  43. package/dist/chunks/chunk-LTX74NU6.mjs +29 -0
  44. package/dist/chunks/chunk-M2F7C2UJ.mjs +425 -0
  45. package/dist/chunks/{chunk-62NE4LG4.mjs → chunk-MQAMI5BF.mjs} +5 -5
  46. package/dist/chunks/chunk-MZRXFWPQ.mjs +278 -0
  47. package/dist/chunks/{chunk-PRMGZZM5.mjs → chunk-NZLEPJ5M.mjs} +2 -0
  48. package/dist/chunks/{chunk-CD3ATSXE.mjs → chunk-NZO5O4VN.mjs} +1 -1
  49. package/dist/chunks/{chunk-I3UYSITV.mjs → chunk-O7XKQ6CH.mjs} +1 -1
  50. package/dist/chunks/chunk-P3RG5LQA.mjs +244 -0
  51. package/dist/chunks/chunk-PAK5JCO2.mjs +48 -0
  52. package/dist/chunks/chunk-PC63YFB7.mjs +34 -0
  53. package/dist/chunks/{daemon-control-HKFVSQTQ.mjs → chunk-PRPTKMQW.mjs} +67 -26
  54. package/dist/chunks/{chunk-LFMB4PAA.mjs → chunk-TKXIH27X.mjs} +974 -113
  55. package/dist/chunks/{chunk-5W7KES6P.mjs → chunk-UZPDETEU.mjs} +1 -1
  56. package/dist/chunks/chunk-V2T6NZX2.mjs +517 -0
  57. package/dist/chunks/chunk-V3MM6PCH.mjs +366 -0
  58. package/dist/chunks/chunk-WJGPNHGX.mjs +67 -0
  59. package/dist/chunks/chunk-WVTPPOKK.mjs +290 -0
  60. package/dist/chunks/{chunk-J74STFKE.mjs → chunk-WX6QCUWI.mjs} +272 -51
  61. package/dist/chunks/{chunk-Y5ZLKFLE.mjs → chunk-XNNJQCZP.mjs} +196 -165
  62. package/dist/chunks/{chunk-HDBPBORT.mjs → chunk-XT2BJUFC.mjs} +15 -6
  63. package/dist/chunks/chunk-YRMKSHW3.mjs +9076 -0
  64. package/dist/chunks/{chunk-BNXUAOO4.mjs → chunk-ZGXUOAWZ.mjs} +3186 -959
  65. package/dist/chunks/chunk-ZPB3HYM7.mjs +45 -0
  66. package/dist/chunks/claude-subscription-33BMZB6I.mjs +29 -0
  67. package/dist/chunks/{cli-AFHQ2XTN.mjs → cli-I47IFDHJ.mjs} +797 -56
  68. package/dist/chunks/{commands-XNJMCD5L.mjs → commands-E4EQUHE5.mjs} +5 -2
  69. package/dist/chunks/{daemon-CHZHTLGR.mjs → daemon-FQ5BV3AP.mjs} +84550 -70518
  70. package/dist/chunks/daemon-control-L3CLG63P.mjs +59 -0
  71. package/dist/chunks/{daemon-token-WRSULP7G.mjs → daemon-token-L5QKTHU5.mjs} +3 -1
  72. package/dist/chunks/{discord-DSP4HUWI.mjs → discord-IR62565M.mjs} +3 -52
  73. package/dist/chunks/{email-BRG7KUO2.mjs → email-KHHTJBDW.mjs} +4 -2
  74. package/dist/chunks/{environment-NX277MQG.mjs → environment-R47X44GM.mjs} +1 -1
  75. package/dist/chunks/{grok-subscription-4PYX7TBF.mjs → grok-subscription-E74FS5EG.mjs} +5 -2
  76. package/dist/chunks/{lib-N7FCZWKH.mjs → lib-L27L5PXM.mjs} +22 -22
  77. package/dist/chunks/{open-VAU7PXT6.mjs → open-TLGS2Z3Q.mjs} +4 -4
  78. package/dist/chunks/{parser-JVY2PWSM.mjs → parser-7GARNT5L.mjs} +1 -1
  79. package/dist/chunks/{pipeline-executor-U6IMCCP3.mjs → pipeline-executor-FD4FBWQA.mjs} +8 -5
  80. package/dist/chunks/prompt-RRHZX4YT.mjs +13 -0
  81. package/dist/chunks/remote-access-cli-XXAPQWH6.mjs +268 -0
  82. package/dist/chunks/remote-hello-UFWUBDQI.mjs +37 -0
  83. package/dist/chunks/sdk-5FD2ZP7N.mjs +28422 -0
  84. package/dist/chunks/{slack-OCNNF4DX.mjs → slack-IYC5RAB5.mjs} +3 -4
  85. package/dist/chunks/{store-HUVDJPYN.mjs → store-ZRN2WCFB.mjs} +6 -3
  86. package/dist/chunks/tailscale-WLJATFMB.mjs +25 -0
  87. package/dist/chunks/{theme-SFE3JMA2.mjs → theme-HLBDTF6F.mjs} +1 -1
  88. package/dist/chunks/{themes-YLXLOIJF.mjs → themes-BQ72P446.mjs} +2 -2
  89. package/dist/chunks/{token-6G3HCMNX.mjs → token-6D22WECM.mjs} +20 -16
  90. package/dist/chunks/{token-util-UXYSDQIW.mjs → token-util-YF3ZWBZ4.mjs} +1 -2
  91. package/dist/chunks/{tui-4ZWZKD4C.mjs → tui-SPSPDADM.mjs} +17 -14
  92. package/dist/chunks/{welcome-XHXFV7SH.mjs → welcome-J5JZZAM5.mjs} +1 -1
  93. package/dist/chunks/{whatsapp-AVKT3CTJ.mjs → whatsapp-YJFFVN4Q.mjs} +8 -8
  94. package/package.json +1 -1
  95. package/dist/chunks/chunk-GKKCMXIZ.mjs +0 -94
  96. package/dist/chunks/chunk-IHDDCZBS.mjs +0 -112
  97. package/dist/chunks/chunk-KWFOS5WC.mjs +0 -41
  98. package/dist/chunks/chunk-UEZR2CNS.mjs +0 -65
  99. package/dist/chunks/chunk-VMHTYDH4.mjs +0 -172
  100. package/dist/chunks/chunk-ZROSGV65.mjs +0 -3112
  101. package/dist/chunks/{chunk-NBTUWMGP.mjs → chunk-2MTE22CR.mjs} +3 -3
  102. package/dist/chunks/{telegram-YI2OHNTD.mjs → telegram-JYY2VDTI.mjs} +4 -4
@@ -0,0 +1,2443 @@
1
+ import { createRequire as __adfCreateRequire } from 'node:module';
2
+ import { fileURLToPath as __adfFileURLToPath } from 'node:url';
3
+ import { dirname as __adfDirname } from 'node:path';
4
+ const require = __adfCreateRequire(import.meta.url);
5
+ const __filename = __adfFileURLToPath(import.meta.url);
6
+ const __dirname = __adfDirname(__filename);
7
+ import {
8
+ require_es6
9
+ } from "./chunk-KDDVQKCG.mjs";
10
+ import {
11
+ peerName,
12
+ txtWithinBounds
13
+ } from "./chunk-M2F7C2UJ.mjs";
14
+ import {
15
+ __commonJS,
16
+ __require,
17
+ __toESM
18
+ } from "./chunk-M2RX3S2T.mjs";
19
+
20
+ // node_modules/bonjour-service/dist/lib/utils/dns-equal.js
21
+ var require_dns_equal = __commonJS({
22
+ "node_modules/bonjour-service/dist/lib/utils/dns-equal.js"(exports) {
23
+ "use strict";
24
+ Object.defineProperty(exports, "__esModule", { value: !0 });
25
+ exports.default = dnsEqual;
26
+ var capitalLetterRegex = /[A-Z]/g;
27
+ function toLowerCase(input) {
28
+ return input.toLowerCase();
29
+ }
30
+ function dnsEqual(a, b) {
31
+ let aFormatted = a.replace(capitalLetterRegex, toLowerCase), bFormatted = b.replace(capitalLetterRegex, toLowerCase);
32
+ return aFormatted === bFormatted;
33
+ }
34
+ }
35
+ });
36
+
37
+ // node_modules/bonjour-service/dist/lib/dns-txt.js
38
+ var require_dns_txt = __commonJS({
39
+ "node_modules/bonjour-service/dist/lib/dns-txt.js"(exports) {
40
+ "use strict";
41
+ Object.defineProperty(exports, "__esModule", { value: !0 });
42
+ exports.DnsTxt = void 0;
43
+ var DnsTxt = class {
44
+ constructor(opts = {}) {
45
+ this.binary = opts ? opts.binary : !1;
46
+ }
47
+ encode(data = {}) {
48
+ return Object.entries(data).map(([key, value]) => {
49
+ let item = `${key}=${value}`;
50
+ return Buffer.from(item);
51
+ });
52
+ }
53
+ decode(buffer) {
54
+ var data = {};
55
+ try {
56
+ let parts = buffer.toString().split(/=(.+)/), key = parts[0], value = parts[1];
57
+ data[key] = value;
58
+ } catch {
59
+ }
60
+ return data;
61
+ }
62
+ decodeAll(buffer) {
63
+ return buffer.filter((i) => i.length > 1).map((i) => this.decode(i)).reduce((prev, curr) => {
64
+ var obj = prev;
65
+ let [key] = Object.keys(curr), [value] = Object.values(curr);
66
+ return obj[key] = value, obj;
67
+ }, {});
68
+ }
69
+ };
70
+ exports.DnsTxt = DnsTxt;
71
+ exports.default = DnsTxt;
72
+ }
73
+ });
74
+
75
+ // node_modules/bonjour-service/dist/lib/service-types.js
76
+ var require_service_types = __commonJS({
77
+ "node_modules/bonjour-service/dist/lib/service-types.js"(exports) {
78
+ "use strict";
79
+ Object.defineProperty(exports, "__esModule", { value: !0 });
80
+ exports.toType = exports.toString = void 0;
81
+ var Prefix = (name) => "_" + name, AllowedProp = (key) => ["name", "protocol", "subtype"].includes(key), toString = (data) => {
82
+ let formatted = {
83
+ name: data.name,
84
+ protocol: data.protocol,
85
+ subtype: data.subtype
86
+ };
87
+ return Object.entries(formatted).filter(([key, val]) => AllowedProp(key) && val !== void 0).reduce((prev, [key, val]) => (typeof val === "object" ? val.map((i) => prev.push(Prefix(i))) : prev.push(Prefix(val)), prev), []).join(".");
88
+ };
89
+ exports.toString = toString;
90
+ var toType = (string) => {
91
+ let parts = string.split("."), subtype;
92
+ for (let i in parts)
93
+ parts[i][0] === "_" && (parts[i] = parts[i].slice(1));
94
+ return parts.includes("sub") && (subtype = parts.shift(), parts.shift()), {
95
+ name: parts.shift(),
96
+ protocol: parts.shift() || null,
97
+ subtype
98
+ };
99
+ };
100
+ exports.toType = toType;
101
+ }
102
+ });
103
+
104
+ // node_modules/bonjour-service/dist/lib/service.js
105
+ var require_service = __commonJS({
106
+ "node_modules/bonjour-service/dist/lib/service.js"(exports) {
107
+ "use strict";
108
+ var __importDefault = exports && exports.__importDefault || function(mod) {
109
+ return mod && mod.__esModule ? mod : { default: mod };
110
+ };
111
+ Object.defineProperty(exports, "__esModule", { value: !0 });
112
+ exports.Service = void 0;
113
+ var os_1 = __importDefault(__require("os")), dns_txt_1 = __importDefault(require_dns_txt()), events_1 = __require("events"), service_types_1 = require_service_types(), TLD = ".local", Service = class extends events_1.EventEmitter {
114
+ constructor(config) {
115
+ if (super(), this.probe = !0, this.published = !1, this.activated = !1, this.destroyed = !1, this.txtService = new dns_txt_1.default(), !config.name)
116
+ throw new Error("ServiceConfig requires `name` property to be set");
117
+ if (!config.type)
118
+ throw new Error("ServiceConfig requires `type` property to be set");
119
+ if (!config.port)
120
+ throw new Error("ServiceConfig requires `port` property to be set");
121
+ this.name = config.name.split(".").join("-"), this.protocol = config.protocol || "tcp", this.type = (0, service_types_1.toString)({ name: config.type, protocol: this.protocol }), this.port = config.port, this.host = config.host || os_1.default.hostname(), this.fqdn = `${this.name}.${this.type}${TLD}`, this.txt = config.txt, this.subtypes = config.subtypes, this.disableIPv6 = !!config.disableIPv6;
122
+ }
123
+ records() {
124
+ var records = [this.RecordPTR(this), this.RecordSRV(this), this.RecordTXT(this)];
125
+ for (let subtype of this.subtypes || [])
126
+ records.push(this.RecordSubtypePTR(this, subtype));
127
+ let ifaces = Object.values(os_1.default.networkInterfaces());
128
+ for (let iface of ifaces) {
129
+ let addrs = iface;
130
+ for (let addr of addrs)
131
+ if (!(addr.internal || addr.mac === "00:00:00:00:00:00"))
132
+ switch (addr.family) {
133
+ case "IPv4":
134
+ records.push(this.RecordA(this, addr.address));
135
+ break;
136
+ case "IPv6":
137
+ if (this.disableIPv6)
138
+ break;
139
+ records.push(this.RecordAAAA(this, addr.address));
140
+ break;
141
+ }
142
+ }
143
+ return records;
144
+ }
145
+ RecordPTR(service) {
146
+ return {
147
+ name: `${service.type}${TLD}`,
148
+ type: "PTR",
149
+ ttl: 28800,
150
+ data: service.fqdn
151
+ };
152
+ }
153
+ RecordSubtypePTR(service, subtype) {
154
+ return {
155
+ name: `_${subtype}._sub.${service.type}${TLD}`,
156
+ type: "PTR",
157
+ ttl: 28800,
158
+ data: `${service.name}.${service.type}${TLD}`
159
+ };
160
+ }
161
+ RecordSRV(service) {
162
+ return {
163
+ name: service.fqdn,
164
+ type: "SRV",
165
+ ttl: 120,
166
+ data: {
167
+ port: service.port,
168
+ target: service.host
169
+ }
170
+ };
171
+ }
172
+ RecordTXT(service) {
173
+ return {
174
+ name: service.fqdn,
175
+ type: "TXT",
176
+ ttl: 4500,
177
+ data: this.txtService.encode(service.txt)
178
+ };
179
+ }
180
+ RecordA(service, ip) {
181
+ return {
182
+ name: service.host,
183
+ type: "A",
184
+ ttl: 120,
185
+ data: ip
186
+ };
187
+ }
188
+ RecordAAAA(service, ip) {
189
+ return {
190
+ name: service.host,
191
+ type: "AAAA",
192
+ ttl: 120,
193
+ data: ip
194
+ };
195
+ }
196
+ };
197
+ exports.Service = Service;
198
+ exports.default = Service;
199
+ }
200
+ });
201
+
202
+ // node_modules/bonjour-service/dist/lib/registry.js
203
+ var require_registry = __commonJS({
204
+ "node_modules/bonjour-service/dist/lib/registry.js"(exports) {
205
+ "use strict";
206
+ var __importDefault = exports && exports.__importDefault || function(mod) {
207
+ return mod && mod.__esModule ? mod : { default: mod };
208
+ };
209
+ Object.defineProperty(exports, "__esModule", { value: !0 });
210
+ exports.Registry = void 0;
211
+ var dns_equal_1 = __importDefault(require_dns_equal()), service_1 = __importDefault(require_service()), REANNOUNCE_MAX_MS = 3600 * 1e3, REANNOUNCE_FACTOR = 3, noop = function() {
212
+ }, Registry = class {
213
+ constructor(server) {
214
+ this.services = [], this.server = server;
215
+ }
216
+ publish(config) {
217
+ function start(service2, registry, opts) {
218
+ service2.activated || (service2.activated = !0, registry.services.push(service2), service2 instanceof service_1.default && (opts?.probe ? registry.probe(registry.server.mdns, service2, (exists) => {
219
+ if (exists) {
220
+ service2.stop !== void 0 && service2.stop(), console.log(new Error("Service name is already in use on the network"));
221
+ return;
222
+ }
223
+ registry.announce(registry.server, service2);
224
+ }) : registry.announce(registry.server, service2)));
225
+ }
226
+ function stop(service2, registry, callback) {
227
+ if (callback || (callback = noop), !service2.activated || !(service2 instanceof service_1.default))
228
+ return process.nextTick(callback);
229
+ registry.teardown(registry.server, service2, callback);
230
+ let index = registry.services.indexOf(service2);
231
+ index !== -1 && registry.services.splice(index, 1);
232
+ }
233
+ let service = new service_1.default(config);
234
+ return service.start = start.bind(null, service, this), service.stop = stop.bind(null, service, this), service.start({ probe: config.probe !== !1 }), service;
235
+ }
236
+ unpublishAll(callback) {
237
+ this.teardown(this.server, this.services, callback), this.services = [];
238
+ }
239
+ destroy() {
240
+ this.services.map((service) => service.destroyed = !0);
241
+ }
242
+ probe(mdns, service, callback) {
243
+ var sent = !1, retries = 0, timer;
244
+ let send = () => {
245
+ !service.activated || service.destroyed || mdns.query(service.fqdn, "ANY", function() {
246
+ sent = !0, timer = setTimeout(++retries < 3 ? send : done, 250), timer.unref();
247
+ });
248
+ }, onresponse = (packet) => {
249
+ sent && (packet.answers.some(matchRR) || packet.additionals.some(matchRR)) && done(!0);
250
+ }, matchRR = (rr) => (0, dns_equal_1.default)(rr.name, service.fqdn), done = (exists) => {
251
+ mdns.removeListener("response", onresponse), clearTimeout(timer), callback(!!exists);
252
+ };
253
+ mdns.on("response", onresponse), setTimeout(send, Math.random() * 250);
254
+ }
255
+ announce(server, service) {
256
+ var delay = 1e3, packet = service.records();
257
+ server.register(packet);
258
+ let broadcast = () => {
259
+ !service.activated || service.destroyed || server.mdns.respond(packet, function() {
260
+ service.published || (service.activated = !0, service.published = !0, service.emit("up")), delay = delay * REANNOUNCE_FACTOR, delay < REANNOUNCE_MAX_MS && !service.destroyed && setTimeout(broadcast, delay).unref();
261
+ });
262
+ };
263
+ broadcast();
264
+ }
265
+ teardown(server, services, callback) {
266
+ Array.isArray(services) || (services = [services]), services = services.filter((service) => service.activated);
267
+ var records = services.flatMap(function(service) {
268
+ service.activated = !1;
269
+ var records2 = service.records();
270
+ return records2.forEach((record) => {
271
+ record.ttl = 0;
272
+ }), records2;
273
+ });
274
+ if (records.length === 0)
275
+ return callback && process.nextTick(callback);
276
+ server.unregister(records), server.mdns.respond(records, function() {
277
+ services.forEach(function(service) {
278
+ service.published = !1;
279
+ }), typeof callback == "function" && callback.apply(null, arguments);
280
+ });
281
+ }
282
+ };
283
+ exports.Registry = Registry;
284
+ exports.default = Registry;
285
+ }
286
+ });
287
+
288
+ // node_modules/dns-packet/types.js
289
+ var require_types = __commonJS({
290
+ "node_modules/dns-packet/types.js"(exports) {
291
+ "use strict";
292
+ exports.toString = function(type) {
293
+ switch (type) {
294
+ case 1:
295
+ return "A";
296
+ case 10:
297
+ return "NULL";
298
+ case 28:
299
+ return "AAAA";
300
+ case 18:
301
+ return "AFSDB";
302
+ case 42:
303
+ return "APL";
304
+ case 257:
305
+ return "CAA";
306
+ case 60:
307
+ return "CDNSKEY";
308
+ case 59:
309
+ return "CDS";
310
+ case 37:
311
+ return "CERT";
312
+ case 5:
313
+ return "CNAME";
314
+ case 49:
315
+ return "DHCID";
316
+ case 32769:
317
+ return "DLV";
318
+ case 39:
319
+ return "DNAME";
320
+ case 48:
321
+ return "DNSKEY";
322
+ case 43:
323
+ return "DS";
324
+ case 55:
325
+ return "HIP";
326
+ case 13:
327
+ return "HINFO";
328
+ case 45:
329
+ return "IPSECKEY";
330
+ case 25:
331
+ return "KEY";
332
+ case 36:
333
+ return "KX";
334
+ case 29:
335
+ return "LOC";
336
+ case 15:
337
+ return "MX";
338
+ case 35:
339
+ return "NAPTR";
340
+ case 2:
341
+ return "NS";
342
+ case 47:
343
+ return "NSEC";
344
+ case 50:
345
+ return "NSEC3";
346
+ case 51:
347
+ return "NSEC3PARAM";
348
+ case 12:
349
+ return "PTR";
350
+ case 46:
351
+ return "RRSIG";
352
+ case 17:
353
+ return "RP";
354
+ case 24:
355
+ return "SIG";
356
+ case 6:
357
+ return "SOA";
358
+ case 99:
359
+ return "SPF";
360
+ case 33:
361
+ return "SRV";
362
+ case 44:
363
+ return "SSHFP";
364
+ case 32768:
365
+ return "TA";
366
+ case 249:
367
+ return "TKEY";
368
+ case 52:
369
+ return "TLSA";
370
+ case 250:
371
+ return "TSIG";
372
+ case 16:
373
+ return "TXT";
374
+ case 252:
375
+ return "AXFR";
376
+ case 251:
377
+ return "IXFR";
378
+ case 41:
379
+ return "OPT";
380
+ case 255:
381
+ return "ANY";
382
+ }
383
+ return "UNKNOWN_" + type;
384
+ };
385
+ exports.toType = function(name) {
386
+ switch (name.toUpperCase()) {
387
+ case "A":
388
+ return 1;
389
+ case "NULL":
390
+ return 10;
391
+ case "AAAA":
392
+ return 28;
393
+ case "AFSDB":
394
+ return 18;
395
+ case "APL":
396
+ return 42;
397
+ case "CAA":
398
+ return 257;
399
+ case "CDNSKEY":
400
+ return 60;
401
+ case "CDS":
402
+ return 59;
403
+ case "CERT":
404
+ return 37;
405
+ case "CNAME":
406
+ return 5;
407
+ case "DHCID":
408
+ return 49;
409
+ case "DLV":
410
+ return 32769;
411
+ case "DNAME":
412
+ return 39;
413
+ case "DNSKEY":
414
+ return 48;
415
+ case "DS":
416
+ return 43;
417
+ case "HIP":
418
+ return 55;
419
+ case "HINFO":
420
+ return 13;
421
+ case "IPSECKEY":
422
+ return 45;
423
+ case "KEY":
424
+ return 25;
425
+ case "KX":
426
+ return 36;
427
+ case "LOC":
428
+ return 29;
429
+ case "MX":
430
+ return 15;
431
+ case "NAPTR":
432
+ return 35;
433
+ case "NS":
434
+ return 2;
435
+ case "NSEC":
436
+ return 47;
437
+ case "NSEC3":
438
+ return 50;
439
+ case "NSEC3PARAM":
440
+ return 51;
441
+ case "PTR":
442
+ return 12;
443
+ case "RRSIG":
444
+ return 46;
445
+ case "RP":
446
+ return 17;
447
+ case "SIG":
448
+ return 24;
449
+ case "SOA":
450
+ return 6;
451
+ case "SPF":
452
+ return 99;
453
+ case "SRV":
454
+ return 33;
455
+ case "SSHFP":
456
+ return 44;
457
+ case "TA":
458
+ return 32768;
459
+ case "TKEY":
460
+ return 249;
461
+ case "TLSA":
462
+ return 52;
463
+ case "TSIG":
464
+ return 250;
465
+ case "TXT":
466
+ return 16;
467
+ case "AXFR":
468
+ return 252;
469
+ case "IXFR":
470
+ return 251;
471
+ case "OPT":
472
+ return 41;
473
+ case "ANY":
474
+ return 255;
475
+ case "*":
476
+ return 255;
477
+ }
478
+ return name.toUpperCase().startsWith("UNKNOWN_") ? parseInt(name.slice(8)) : 0;
479
+ };
480
+ }
481
+ });
482
+
483
+ // node_modules/dns-packet/rcodes.js
484
+ var require_rcodes = __commonJS({
485
+ "node_modules/dns-packet/rcodes.js"(exports) {
486
+ "use strict";
487
+ exports.toString = function(rcode) {
488
+ switch (rcode) {
489
+ case 0:
490
+ return "NOERROR";
491
+ case 1:
492
+ return "FORMERR";
493
+ case 2:
494
+ return "SERVFAIL";
495
+ case 3:
496
+ return "NXDOMAIN";
497
+ case 4:
498
+ return "NOTIMP";
499
+ case 5:
500
+ return "REFUSED";
501
+ case 6:
502
+ return "YXDOMAIN";
503
+ case 7:
504
+ return "YXRRSET";
505
+ case 8:
506
+ return "NXRRSET";
507
+ case 9:
508
+ return "NOTAUTH";
509
+ case 10:
510
+ return "NOTZONE";
511
+ case 11:
512
+ return "RCODE_11";
513
+ case 12:
514
+ return "RCODE_12";
515
+ case 13:
516
+ return "RCODE_13";
517
+ case 14:
518
+ return "RCODE_14";
519
+ case 15:
520
+ return "RCODE_15";
521
+ }
522
+ return "RCODE_" + rcode;
523
+ };
524
+ exports.toRcode = function(code) {
525
+ switch (code.toUpperCase()) {
526
+ case "NOERROR":
527
+ return 0;
528
+ case "FORMERR":
529
+ return 1;
530
+ case "SERVFAIL":
531
+ return 2;
532
+ case "NXDOMAIN":
533
+ return 3;
534
+ case "NOTIMP":
535
+ return 4;
536
+ case "REFUSED":
537
+ return 5;
538
+ case "YXDOMAIN":
539
+ return 6;
540
+ case "YXRRSET":
541
+ return 7;
542
+ case "NXRRSET":
543
+ return 8;
544
+ case "NOTAUTH":
545
+ return 9;
546
+ case "NOTZONE":
547
+ return 10;
548
+ case "RCODE_11":
549
+ return 11;
550
+ case "RCODE_12":
551
+ return 12;
552
+ case "RCODE_13":
553
+ return 13;
554
+ case "RCODE_14":
555
+ return 14;
556
+ case "RCODE_15":
557
+ return 15;
558
+ }
559
+ return 0;
560
+ };
561
+ }
562
+ });
563
+
564
+ // node_modules/dns-packet/opcodes.js
565
+ var require_opcodes = __commonJS({
566
+ "node_modules/dns-packet/opcodes.js"(exports) {
567
+ "use strict";
568
+ exports.toString = function(opcode) {
569
+ switch (opcode) {
570
+ case 0:
571
+ return "QUERY";
572
+ case 1:
573
+ return "IQUERY";
574
+ case 2:
575
+ return "STATUS";
576
+ case 3:
577
+ return "OPCODE_3";
578
+ case 4:
579
+ return "NOTIFY";
580
+ case 5:
581
+ return "UPDATE";
582
+ case 6:
583
+ return "OPCODE_6";
584
+ case 7:
585
+ return "OPCODE_7";
586
+ case 8:
587
+ return "OPCODE_8";
588
+ case 9:
589
+ return "OPCODE_9";
590
+ case 10:
591
+ return "OPCODE_10";
592
+ case 11:
593
+ return "OPCODE_11";
594
+ case 12:
595
+ return "OPCODE_12";
596
+ case 13:
597
+ return "OPCODE_13";
598
+ case 14:
599
+ return "OPCODE_14";
600
+ case 15:
601
+ return "OPCODE_15";
602
+ }
603
+ return "OPCODE_" + opcode;
604
+ };
605
+ exports.toOpcode = function(code) {
606
+ switch (code.toUpperCase()) {
607
+ case "QUERY":
608
+ return 0;
609
+ case "IQUERY":
610
+ return 1;
611
+ case "STATUS":
612
+ return 2;
613
+ case "OPCODE_3":
614
+ return 3;
615
+ case "NOTIFY":
616
+ return 4;
617
+ case "UPDATE":
618
+ return 5;
619
+ case "OPCODE_6":
620
+ return 6;
621
+ case "OPCODE_7":
622
+ return 7;
623
+ case "OPCODE_8":
624
+ return 8;
625
+ case "OPCODE_9":
626
+ return 9;
627
+ case "OPCODE_10":
628
+ return 10;
629
+ case "OPCODE_11":
630
+ return 11;
631
+ case "OPCODE_12":
632
+ return 12;
633
+ case "OPCODE_13":
634
+ return 13;
635
+ case "OPCODE_14":
636
+ return 14;
637
+ case "OPCODE_15":
638
+ return 15;
639
+ }
640
+ return 0;
641
+ };
642
+ }
643
+ });
644
+
645
+ // node_modules/dns-packet/classes.js
646
+ var require_classes = __commonJS({
647
+ "node_modules/dns-packet/classes.js"(exports) {
648
+ "use strict";
649
+ exports.toString = function(klass) {
650
+ switch (klass) {
651
+ case 1:
652
+ return "IN";
653
+ case 2:
654
+ return "CS";
655
+ case 3:
656
+ return "CH";
657
+ case 4:
658
+ return "HS";
659
+ case 255:
660
+ return "ANY";
661
+ }
662
+ return "UNKNOWN_" + klass;
663
+ };
664
+ exports.toClass = function(name) {
665
+ switch (name.toUpperCase()) {
666
+ case "IN":
667
+ return 1;
668
+ case "CS":
669
+ return 2;
670
+ case "CH":
671
+ return 3;
672
+ case "HS":
673
+ return 4;
674
+ case "ANY":
675
+ return 255;
676
+ }
677
+ return 0;
678
+ };
679
+ }
680
+ });
681
+
682
+ // node_modules/dns-packet/optioncodes.js
683
+ var require_optioncodes = __commonJS({
684
+ "node_modules/dns-packet/optioncodes.js"(exports) {
685
+ "use strict";
686
+ exports.toString = function(type) {
687
+ switch (type) {
688
+ // list at
689
+ // https://www.iana.org/assignments/dns-parameters/dns-parameters.xhtml#dns-parameters-11
690
+ case 1:
691
+ return "LLQ";
692
+ case 2:
693
+ return "UL";
694
+ case 3:
695
+ return "NSID";
696
+ case 5:
697
+ return "DAU";
698
+ case 6:
699
+ return "DHU";
700
+ case 7:
701
+ return "N3U";
702
+ case 8:
703
+ return "CLIENT_SUBNET";
704
+ case 9:
705
+ return "EXPIRE";
706
+ case 10:
707
+ return "COOKIE";
708
+ case 11:
709
+ return "TCP_KEEPALIVE";
710
+ case 12:
711
+ return "PADDING";
712
+ case 13:
713
+ return "CHAIN";
714
+ case 14:
715
+ return "KEY_TAG";
716
+ case 26946:
717
+ return "DEVICEID";
718
+ }
719
+ return type < 0 ? null : `OPTION_${type}`;
720
+ };
721
+ exports.toCode = function(name) {
722
+ if (typeof name == "number")
723
+ return name;
724
+ if (!name)
725
+ return -1;
726
+ switch (name.toUpperCase()) {
727
+ case "OPTION_0":
728
+ return 0;
729
+ case "LLQ":
730
+ return 1;
731
+ case "UL":
732
+ return 2;
733
+ case "NSID":
734
+ return 3;
735
+ case "OPTION_4":
736
+ return 4;
737
+ case "DAU":
738
+ return 5;
739
+ case "DHU":
740
+ return 6;
741
+ case "N3U":
742
+ return 7;
743
+ case "CLIENT_SUBNET":
744
+ return 8;
745
+ case "EXPIRE":
746
+ return 9;
747
+ case "COOKIE":
748
+ return 10;
749
+ case "TCP_KEEPALIVE":
750
+ return 11;
751
+ case "PADDING":
752
+ return 12;
753
+ case "CHAIN":
754
+ return 13;
755
+ case "KEY_TAG":
756
+ return 14;
757
+ case "DEVICEID":
758
+ return 26946;
759
+ case "OPTION_65535":
760
+ return 65535;
761
+ }
762
+ let m = name.match(/_(\d+)$/);
763
+ return m ? parseInt(m[1], 10) : -1;
764
+ };
765
+ }
766
+ });
767
+
768
+ // node_modules/@leichtgewicht/ip-codec/index.cjs
769
+ var require_ip_codec = __commonJS({
770
+ "node_modules/@leichtgewicht/ip-codec/index.cjs"(exports, module) {
771
+ "use strict";
772
+ var ipCodec = (function(exports2) {
773
+ "use strict";
774
+ Object.defineProperty(exports2, "__esModule", {
775
+ value: !0
776
+ }), exports2.decode = decode, exports2.encode = encode, exports2.familyOf = familyOf, exports2.name = void 0, exports2.sizeOf = sizeOf, exports2.v6 = exports2.v4 = void 0;
777
+ let v4Regex = /^(\d{1,3}\.){3,3}\d{1,3}$/, v4Size = 4, v6Regex = /^(::)?(((\d{1,3}\.){3}(\d{1,3}){1})?([0-9a-f]){0,4}:{0,2}){1,8}(::)?$/i, v6Size = 16, v4 = {
778
+ name: "v4",
779
+ size: v4Size,
780
+ isFormat: (ip) => v4Regex.test(ip),
781
+ encode(ip, buff, offset) {
782
+ offset = ~~offset, buff = buff || new Uint8Array(offset + v4Size);
783
+ let max = ip.length, n = 0;
784
+ for (let i = 0; i < max; ) {
785
+ let c = ip.charCodeAt(i++);
786
+ c === 46 ? (buff[offset++] = n, n = 0) : n = n * 10 + (c - 48);
787
+ }
788
+ return buff[offset] = n, buff;
789
+ },
790
+ decode(buff, offset) {
791
+ return offset = ~~offset, `${buff[offset++]}.${buff[offset++]}.${buff[offset++]}.${buff[offset]}`;
792
+ }
793
+ };
794
+ exports2.v4 = v4;
795
+ let v6 = {
796
+ name: "v6",
797
+ size: v6Size,
798
+ isFormat: (ip) => ip.length > 0 && v6Regex.test(ip),
799
+ encode(ip, buff, offset) {
800
+ offset = ~~offset;
801
+ let end = offset + v6Size, fill = -1, hexN = 0, decN = 0, prevColon = !0, useDec = !1;
802
+ buff = buff || new Uint8Array(offset + v6Size);
803
+ for (let i = 0; i < ip.length; i++) {
804
+ let c = ip.charCodeAt(i);
805
+ c === 58 ? (prevColon ? fill !== -1 ? (offset < end && (buff[offset] = 0), offset < end - 1 && (buff[offset + 1] = 0), offset += 2) : offset < end && (fill = offset) : (useDec === !0 ? (offset < end && (buff[offset] = decN), offset++) : (offset < end && (buff[offset] = hexN >> 8), offset < end - 1 && (buff[offset + 1] = hexN & 255), offset += 2), hexN = 0, decN = 0), prevColon = !0, useDec = !1) : c === 46 ? (offset < end && (buff[offset] = decN), offset++, decN = 0, hexN = 0, prevColon = !1, useDec = !0) : (prevColon = !1, c >= 97 ? c -= 87 : c >= 65 ? c -= 55 : (c -= 48, decN = decN * 10 + c), hexN = (hexN << 4) + c);
806
+ }
807
+ if (prevColon === !1)
808
+ useDec === !0 ? (offset < end && (buff[offset] = decN), offset++) : (offset < end && (buff[offset] = hexN >> 8), offset < end - 1 && (buff[offset + 1] = hexN & 255), offset += 2);
809
+ else if (fill === 0)
810
+ offset < end && (buff[offset] = 0), offset < end - 1 && (buff[offset + 1] = 0), offset += 2;
811
+ else if (fill !== -1) {
812
+ offset += 2;
813
+ for (let i = Math.min(offset - 1, end - 1); i >= fill + 2; i--)
814
+ buff[i] = buff[i - 2];
815
+ buff[fill] = 0, buff[fill + 1] = 0, fill = offset;
816
+ }
817
+ if (fill !== offset && fill !== -1)
818
+ for (offset > end - 2 && (offset = end - 2); end > fill; )
819
+ buff[--end] = offset < end && offset > fill ? buff[--offset] : 0;
820
+ else
821
+ for (; offset < end; )
822
+ buff[offset++] = 0;
823
+ return buff;
824
+ },
825
+ decode(buff, offset) {
826
+ offset = ~~offset;
827
+ let result = "";
828
+ for (let i = 0; i < v6Size; i += 2)
829
+ i !== 0 && (result += ":"), result += (buff[offset + i] << 8 | buff[offset + i + 1]).toString(16);
830
+ return result.replace(/(^|:)0(:0)*:0(:|$)/, "$1::$3").replace(/:{3,4}/, "::");
831
+ }
832
+ };
833
+ exports2.v6 = v6;
834
+ let name = "ip";
835
+ exports2.name = name;
836
+ function sizeOf(ip) {
837
+ if (v4.isFormat(ip)) return v4.size;
838
+ if (v6.isFormat(ip)) return v6.size;
839
+ throw Error(`Invalid ip address: ${ip}`);
840
+ }
841
+ function familyOf(string) {
842
+ return sizeOf(string) === v4.size ? 1 : 2;
843
+ }
844
+ function encode(ip, buff, offset) {
845
+ offset = ~~offset;
846
+ let size = sizeOf(ip);
847
+ return typeof buff == "function" && (buff = buff(offset + size)), size === v4.size ? v4.encode(ip, buff, offset) : v6.encode(ip, buff, offset);
848
+ }
849
+ function decode(buff, offset, length) {
850
+ if (offset = ~~offset, length = length || buff.length - offset, length === v4.size)
851
+ return v4.decode(buff, offset, length);
852
+ if (length === v6.size)
853
+ return v6.decode(buff, offset, length);
854
+ throw Error(`Invalid buffer size needs to be ${v4.size} for v4 or ${v6.size} for v6.`);
855
+ }
856
+ return "default" in exports2 ? exports2.default : exports2;
857
+ })({});
858
+ typeof define == "function" && define.amd ? define([], function() {
859
+ return ipCodec;
860
+ }) : typeof module == "object" && typeof exports == "object" && (module.exports = ipCodec);
861
+ }
862
+ });
863
+
864
+ // node_modules/dns-packet/index.js
865
+ var require_dns_packet = __commonJS({
866
+ "node_modules/dns-packet/index.js"(exports) {
867
+ "use strict";
868
+ var Buffer2 = __require("buffer").Buffer, types = require_types(), rcodes = require_rcodes(), opcodes = require_opcodes(), classes = require_classes(), optioncodes = require_optioncodes(), ip = require_ip_codec(), QUERY_FLAG = 0, RESPONSE_FLAG = 32768, FLUSH_MASK = 32768, NOT_FLUSH_MASK = ~FLUSH_MASK, QU_MASK = 32768, NOT_QU_MASK = ~QU_MASK, name = exports.name = {};
869
+ name.encode = function(str, buf, offset, { mail = !1 } = {}) {
870
+ buf || (buf = Buffer2.alloc(name.encodingLength(str))), offset || (offset = 0);
871
+ let oldOffset = offset, n = str.replace(/^\.|\.$/gm, "");
872
+ if (n.length) {
873
+ let list = [];
874
+ if (mail) {
875
+ let localPart = "";
876
+ n.split(".").forEach((label) => {
877
+ label.endsWith("\\") ? localPart += (localPart.length ? "." : "") + label.slice(0, -1) : list.length === 0 && localPart.length ? list.push(localPart + "." + label) : list.push(label);
878
+ });
879
+ } else
880
+ list = n.split(".");
881
+ for (let i = 0; i < list.length; i++) {
882
+ let len = buf.write(list[i], offset + 1);
883
+ buf[offset] = len, offset += len + 1;
884
+ }
885
+ }
886
+ return buf[offset++] = 0, name.encode.bytes = offset - oldOffset, buf;
887
+ };
888
+ name.encode.bytes = 0;
889
+ name.decode = function(buf, offset, { mail = !1 } = {}) {
890
+ offset || (offset = 0);
891
+ let list = [], oldOffset = offset, totalLength = 0, consumedBytes = 0, jumped = !1;
892
+ for (; ; ) {
893
+ if (offset >= buf.length)
894
+ throw new Error("Cannot decode name (buffer overflow)");
895
+ let len = buf[offset++];
896
+ if (consumedBytes += jumped ? 0 : 1, len === 0)
897
+ break;
898
+ if ((len & 192) === 0) {
899
+ if (offset + len > buf.length)
900
+ throw new Error("Cannot decode name (buffer overflow)");
901
+ if (totalLength += len + 1, totalLength > 254)
902
+ throw new Error("Cannot decode name (name too long)");
903
+ let label = buf.toString("utf-8", offset, offset + len);
904
+ mail && (label = label.replace(/\./g, "\\.")), list.push(label), offset += len, consumedBytes += jumped ? 0 : len;
905
+ } else if ((len & 192) === 192) {
906
+ if (offset + 1 > buf.length)
907
+ throw new Error("Cannot decode name (buffer overflow)");
908
+ let jumpOffset = buf.readUInt16BE(offset - 1) - 49152;
909
+ if (jumpOffset >= oldOffset)
910
+ throw new Error("Cannot decode name (bad pointer)");
911
+ offset = jumpOffset, oldOffset = jumpOffset, consumedBytes += jumped ? 0 : 1, jumped = !0;
912
+ } else
913
+ throw new Error("Cannot decode name (bad label)");
914
+ }
915
+ return name.decode.bytes = consumedBytes, list.length === 0 ? "." : list.join(".");
916
+ };
917
+ name.decode.bytes = 0;
918
+ name.encodingLength = function(n) {
919
+ return n === "." || n === ".." ? 1 : Buffer2.byteLength(n.replace(/^\.|\.$/gm, "")) + 2;
920
+ };
921
+ var string = {};
922
+ string.encode = function(s, buf, offset) {
923
+ buf || (buf = Buffer2.alloc(string.encodingLength(s))), offset || (offset = 0);
924
+ let len = buf.write(s, offset + 1);
925
+ return buf[offset] = len, string.encode.bytes = len + 1, buf;
926
+ };
927
+ string.encode.bytes = 0;
928
+ string.decode = function(buf, offset) {
929
+ offset || (offset = 0);
930
+ let len = buf[offset], s = buf.toString("utf-8", offset + 1, offset + 1 + len);
931
+ return string.decode.bytes = len + 1, s;
932
+ };
933
+ string.decode.bytes = 0;
934
+ string.encodingLength = function(s) {
935
+ return Buffer2.byteLength(s) + 1;
936
+ };
937
+ var header = {};
938
+ header.encode = function(h, buf, offset) {
939
+ buf || (buf = header.encodingLength(h)), offset || (offset = 0);
940
+ let flags = (h.flags || 0) & 32767, type = h.type === "response" ? RESPONSE_FLAG : QUERY_FLAG;
941
+ return buf.writeUInt16BE(h.id || 0, offset), buf.writeUInt16BE(flags | type, offset + 2), buf.writeUInt16BE(h.questions.length, offset + 4), buf.writeUInt16BE(h.answers.length, offset + 6), buf.writeUInt16BE(h.authorities.length, offset + 8), buf.writeUInt16BE(h.additionals.length, offset + 10), buf;
942
+ };
943
+ header.encode.bytes = 12;
944
+ header.decode = function(buf, offset) {
945
+ if (offset || (offset = 0), buf.length < 12) throw new Error("Header must be 12 bytes");
946
+ let flags = buf.readUInt16BE(offset + 2);
947
+ return {
948
+ id: buf.readUInt16BE(offset),
949
+ type: flags & RESPONSE_FLAG ? "response" : "query",
950
+ flags: flags & 32767,
951
+ flag_qr: (flags >> 15 & 1) === 1,
952
+ opcode: opcodes.toString(flags >> 11 & 15),
953
+ flag_aa: (flags >> 10 & 1) === 1,
954
+ flag_tc: (flags >> 9 & 1) === 1,
955
+ flag_rd: (flags >> 8 & 1) === 1,
956
+ flag_ra: (flags >> 7 & 1) === 1,
957
+ flag_z: (flags >> 6 & 1) === 1,
958
+ flag_ad: (flags >> 5 & 1) === 1,
959
+ flag_cd: (flags >> 4 & 1) === 1,
960
+ rcode: rcodes.toString(flags & 15),
961
+ questions: new Array(buf.readUInt16BE(offset + 4)),
962
+ answers: new Array(buf.readUInt16BE(offset + 6)),
963
+ authorities: new Array(buf.readUInt16BE(offset + 8)),
964
+ additionals: new Array(buf.readUInt16BE(offset + 10))
965
+ };
966
+ };
967
+ header.decode.bytes = 12;
968
+ header.encodingLength = function() {
969
+ return 12;
970
+ };
971
+ var runknown = exports.unknown = {};
972
+ runknown.encode = function(data, buf, offset) {
973
+ return buf || (buf = Buffer2.alloc(runknown.encodingLength(data))), offset || (offset = 0), buf.writeUInt16BE(data.length, offset), data.copy(buf, offset + 2), runknown.encode.bytes = data.length + 2, buf;
974
+ };
975
+ runknown.encode.bytes = 0;
976
+ runknown.decode = function(buf, offset) {
977
+ offset || (offset = 0);
978
+ let len = buf.readUInt16BE(offset), data = buf.slice(offset + 2, offset + 2 + len);
979
+ return runknown.decode.bytes = len + 2, data;
980
+ };
981
+ runknown.decode.bytes = 0;
982
+ runknown.encodingLength = function(data) {
983
+ return data.length + 2;
984
+ };
985
+ var rns = exports.ns = {};
986
+ rns.encode = function(data, buf, offset) {
987
+ return buf || (buf = Buffer2.alloc(rns.encodingLength(data))), offset || (offset = 0), name.encode(data, buf, offset + 2), buf.writeUInt16BE(name.encode.bytes, offset), rns.encode.bytes = name.encode.bytes + 2, buf;
988
+ };
989
+ rns.encode.bytes = 0;
990
+ rns.decode = function(buf, offset) {
991
+ offset || (offset = 0);
992
+ let len = buf.readUInt16BE(offset), dd = name.decode(buf, offset + 2);
993
+ return rns.decode.bytes = len + 2, dd;
994
+ };
995
+ rns.decode.bytes = 0;
996
+ rns.encodingLength = function(data) {
997
+ return name.encodingLength(data) + 2;
998
+ };
999
+ var rsoa = exports.soa = {};
1000
+ rsoa.encode = function(data, buf, offset) {
1001
+ buf || (buf = Buffer2.alloc(rsoa.encodingLength(data))), offset || (offset = 0);
1002
+ let oldOffset = offset;
1003
+ return offset += 2, name.encode(data.mname, buf, offset), offset += name.encode.bytes, name.encode(data.rname, buf, offset, { mail: !0 }), offset += name.encode.bytes, buf.writeUInt32BE(data.serial || 0, offset), offset += 4, buf.writeUInt32BE(data.refresh || 0, offset), offset += 4, buf.writeUInt32BE(data.retry || 0, offset), offset += 4, buf.writeUInt32BE(data.expire || 0, offset), offset += 4, buf.writeUInt32BE(data.minimum || 0, offset), offset += 4, buf.writeUInt16BE(offset - oldOffset - 2, oldOffset), rsoa.encode.bytes = offset - oldOffset, buf;
1004
+ };
1005
+ rsoa.encode.bytes = 0;
1006
+ rsoa.decode = function(buf, offset) {
1007
+ offset || (offset = 0);
1008
+ let oldOffset = offset, data = {};
1009
+ return offset += 2, data.mname = name.decode(buf, offset), offset += name.decode.bytes, data.rname = name.decode(buf, offset, { mail: !0 }), offset += name.decode.bytes, data.serial = buf.readUInt32BE(offset), offset += 4, data.refresh = buf.readUInt32BE(offset), offset += 4, data.retry = buf.readUInt32BE(offset), offset += 4, data.expire = buf.readUInt32BE(offset), offset += 4, data.minimum = buf.readUInt32BE(offset), offset += 4, rsoa.decode.bytes = offset - oldOffset, data;
1010
+ };
1011
+ rsoa.decode.bytes = 0;
1012
+ rsoa.encodingLength = function(data) {
1013
+ return 22 + name.encodingLength(data.mname) + name.encodingLength(data.rname);
1014
+ };
1015
+ var rtxt = exports.txt = {};
1016
+ rtxt.encode = function(data, buf, offset) {
1017
+ Array.isArray(data) || (data = [data]);
1018
+ for (let i = 0; i < data.length; i++)
1019
+ if (typeof data[i] == "string" && (data[i] = Buffer2.from(data[i])), !Buffer2.isBuffer(data[i]))
1020
+ throw new Error("Must be a Buffer");
1021
+ buf || (buf = Buffer2.alloc(rtxt.encodingLength(data))), offset || (offset = 0);
1022
+ let oldOffset = offset;
1023
+ return offset += 2, data.forEach(function(d) {
1024
+ buf[offset++] = d.length, d.copy(buf, offset, 0, d.length), offset += d.length;
1025
+ }), buf.writeUInt16BE(offset - oldOffset - 2, oldOffset), rtxt.encode.bytes = offset - oldOffset, buf;
1026
+ };
1027
+ rtxt.encode.bytes = 0;
1028
+ rtxt.decode = function(buf, offset) {
1029
+ offset || (offset = 0);
1030
+ let oldOffset = offset, remaining = buf.readUInt16BE(offset);
1031
+ offset += 2;
1032
+ let data = [];
1033
+ for (; remaining > 0; ) {
1034
+ let len = buf[offset++];
1035
+ if (--remaining, remaining < len)
1036
+ throw new Error("Buffer overflow");
1037
+ data.push(buf.slice(offset, offset + len)), offset += len, remaining -= len;
1038
+ }
1039
+ return rtxt.decode.bytes = offset - oldOffset, data;
1040
+ };
1041
+ rtxt.decode.bytes = 0;
1042
+ rtxt.encodingLength = function(data) {
1043
+ Array.isArray(data) || (data = [data]);
1044
+ let length = 2;
1045
+ return data.forEach(function(buf) {
1046
+ typeof buf == "string" ? length += Buffer2.byteLength(buf) + 1 : length += buf.length + 1;
1047
+ }), length;
1048
+ };
1049
+ var rnull = exports.null = {};
1050
+ rnull.encode = function(data, buf, offset) {
1051
+ buf || (buf = Buffer2.alloc(rnull.encodingLength(data))), offset || (offset = 0), typeof data == "string" && (data = Buffer2.from(data)), data || (data = Buffer2.alloc(0));
1052
+ let oldOffset = offset;
1053
+ offset += 2;
1054
+ let len = data.length;
1055
+ return data.copy(buf, offset, 0, len), offset += len, buf.writeUInt16BE(offset - oldOffset - 2, oldOffset), rnull.encode.bytes = offset - oldOffset, buf;
1056
+ };
1057
+ rnull.encode.bytes = 0;
1058
+ rnull.decode = function(buf, offset) {
1059
+ offset || (offset = 0);
1060
+ let oldOffset = offset, len = buf.readUInt16BE(offset);
1061
+ offset += 2;
1062
+ let data = buf.slice(offset, offset + len);
1063
+ return offset += len, rnull.decode.bytes = offset - oldOffset, data;
1064
+ };
1065
+ rnull.decode.bytes = 0;
1066
+ rnull.encodingLength = function(data) {
1067
+ return data ? (Buffer2.isBuffer(data) ? data.length : Buffer2.byteLength(data)) + 2 : 2;
1068
+ };
1069
+ var rhinfo = exports.hinfo = {};
1070
+ rhinfo.encode = function(data, buf, offset) {
1071
+ buf || (buf = Buffer2.alloc(rhinfo.encodingLength(data))), offset || (offset = 0);
1072
+ let oldOffset = offset;
1073
+ return offset += 2, string.encode(data.cpu, buf, offset), offset += string.encode.bytes, string.encode(data.os, buf, offset), offset += string.encode.bytes, buf.writeUInt16BE(offset - oldOffset - 2, oldOffset), rhinfo.encode.bytes = offset - oldOffset, buf;
1074
+ };
1075
+ rhinfo.encode.bytes = 0;
1076
+ rhinfo.decode = function(buf, offset) {
1077
+ offset || (offset = 0);
1078
+ let oldOffset = offset, data = {};
1079
+ return offset += 2, data.cpu = string.decode(buf, offset), offset += string.decode.bytes, data.os = string.decode(buf, offset), offset += string.decode.bytes, rhinfo.decode.bytes = offset - oldOffset, data;
1080
+ };
1081
+ rhinfo.decode.bytes = 0;
1082
+ rhinfo.encodingLength = function(data) {
1083
+ return string.encodingLength(data.cpu) + string.encodingLength(data.os) + 2;
1084
+ };
1085
+ var rptr = exports.ptr = {}, rcname = exports.cname = rptr, rdname = exports.dname = rptr;
1086
+ rptr.encode = function(data, buf, offset) {
1087
+ return buf || (buf = Buffer2.alloc(rptr.encodingLength(data))), offset || (offset = 0), name.encode(data, buf, offset + 2), buf.writeUInt16BE(name.encode.bytes, offset), rptr.encode.bytes = name.encode.bytes + 2, buf;
1088
+ };
1089
+ rptr.encode.bytes = 0;
1090
+ rptr.decode = function(buf, offset) {
1091
+ offset || (offset = 0);
1092
+ let data = name.decode(buf, offset + 2);
1093
+ return rptr.decode.bytes = name.decode.bytes + 2, data;
1094
+ };
1095
+ rptr.decode.bytes = 0;
1096
+ rptr.encodingLength = function(data) {
1097
+ return name.encodingLength(data) + 2;
1098
+ };
1099
+ var rsrv = exports.srv = {};
1100
+ rsrv.encode = function(data, buf, offset) {
1101
+ buf || (buf = Buffer2.alloc(rsrv.encodingLength(data))), offset || (offset = 0), buf.writeUInt16BE(data.priority || 0, offset + 2), buf.writeUInt16BE(data.weight || 0, offset + 4), buf.writeUInt16BE(data.port || 0, offset + 6), name.encode(data.target, buf, offset + 8);
1102
+ let len = name.encode.bytes + 6;
1103
+ return buf.writeUInt16BE(len, offset), rsrv.encode.bytes = len + 2, buf;
1104
+ };
1105
+ rsrv.encode.bytes = 0;
1106
+ rsrv.decode = function(buf, offset) {
1107
+ offset || (offset = 0);
1108
+ let len = buf.readUInt16BE(offset), data = {};
1109
+ return data.priority = buf.readUInt16BE(offset + 2), data.weight = buf.readUInt16BE(offset + 4), data.port = buf.readUInt16BE(offset + 6), data.target = name.decode(buf, offset + 8), rsrv.decode.bytes = len + 2, data;
1110
+ };
1111
+ rsrv.decode.bytes = 0;
1112
+ rsrv.encodingLength = function(data) {
1113
+ return 8 + name.encodingLength(data.target);
1114
+ };
1115
+ var rcaa = exports.caa = {};
1116
+ rcaa.ISSUER_CRITICAL = 128;
1117
+ rcaa.encode = function(data, buf, offset) {
1118
+ let len = rcaa.encodingLength(data);
1119
+ return buf || (buf = Buffer2.alloc(rcaa.encodingLength(data))), offset || (offset = 0), data.issuerCritical && (data.flags = rcaa.ISSUER_CRITICAL), buf.writeUInt16BE(len - 2, offset), offset += 2, buf.writeUInt8(data.flags || 0, offset), offset += 1, string.encode(data.tag, buf, offset), offset += string.encode.bytes, buf.write(data.value, offset), offset += Buffer2.byteLength(data.value), rcaa.encode.bytes = len, buf;
1120
+ };
1121
+ rcaa.encode.bytes = 0;
1122
+ rcaa.decode = function(buf, offset) {
1123
+ offset || (offset = 0);
1124
+ let len = buf.readUInt16BE(offset);
1125
+ offset += 2;
1126
+ let oldOffset = offset, data = {};
1127
+ return data.flags = buf.readUInt8(offset), offset += 1, data.tag = string.decode(buf, offset), offset += string.decode.bytes, data.value = buf.toString("utf-8", offset, oldOffset + len), data.issuerCritical = !!(data.flags & rcaa.ISSUER_CRITICAL), rcaa.decode.bytes = len + 2, data;
1128
+ };
1129
+ rcaa.decode.bytes = 0;
1130
+ rcaa.encodingLength = function(data) {
1131
+ return string.encodingLength(data.tag) + string.encodingLength(data.value) + 2;
1132
+ };
1133
+ var rmx = exports.mx = {};
1134
+ rmx.encode = function(data, buf, offset) {
1135
+ buf || (buf = Buffer2.alloc(rmx.encodingLength(data))), offset || (offset = 0);
1136
+ let oldOffset = offset;
1137
+ return offset += 2, buf.writeUInt16BE(data.preference || 0, offset), offset += 2, name.encode(data.exchange, buf, offset), offset += name.encode.bytes, buf.writeUInt16BE(offset - oldOffset - 2, oldOffset), rmx.encode.bytes = offset - oldOffset, buf;
1138
+ };
1139
+ rmx.encode.bytes = 0;
1140
+ rmx.decode = function(buf, offset) {
1141
+ offset || (offset = 0);
1142
+ let oldOffset = offset, data = {};
1143
+ return offset += 2, data.preference = buf.readUInt16BE(offset), offset += 2, data.exchange = name.decode(buf, offset), offset += name.decode.bytes, rmx.decode.bytes = offset - oldOffset, data;
1144
+ };
1145
+ rmx.encodingLength = function(data) {
1146
+ return 4 + name.encodingLength(data.exchange);
1147
+ };
1148
+ var ra = exports.a = {};
1149
+ ra.encode = function(host, buf, offset) {
1150
+ return buf || (buf = Buffer2.alloc(ra.encodingLength(host))), offset || (offset = 0), buf.writeUInt16BE(4, offset), offset += 2, ip.v4.encode(host, buf, offset), ra.encode.bytes = 6, buf;
1151
+ };
1152
+ ra.encode.bytes = 0;
1153
+ ra.decode = function(buf, offset) {
1154
+ offset || (offset = 0), offset += 2;
1155
+ let host = ip.v4.decode(buf, offset);
1156
+ return ra.decode.bytes = 6, host;
1157
+ };
1158
+ ra.decode.bytes = 0;
1159
+ ra.encodingLength = function() {
1160
+ return 6;
1161
+ };
1162
+ var raaaa = exports.aaaa = {};
1163
+ raaaa.encode = function(host, buf, offset) {
1164
+ return buf || (buf = Buffer2.alloc(raaaa.encodingLength(host))), offset || (offset = 0), buf.writeUInt16BE(16, offset), offset += 2, ip.v6.encode(host, buf, offset), raaaa.encode.bytes = 18, buf;
1165
+ };
1166
+ raaaa.encode.bytes = 0;
1167
+ raaaa.decode = function(buf, offset) {
1168
+ offset || (offset = 0), offset += 2;
1169
+ let host = ip.v6.decode(buf, offset);
1170
+ return raaaa.decode.bytes = 18, host;
1171
+ };
1172
+ raaaa.decode.bytes = 0;
1173
+ raaaa.encodingLength = function() {
1174
+ return 18;
1175
+ };
1176
+ var roption = exports.option = {};
1177
+ roption.encode = function(option, buf, offset) {
1178
+ buf || (buf = Buffer2.alloc(roption.encodingLength(option))), offset || (offset = 0);
1179
+ let oldOffset = offset, code = optioncodes.toCode(option.code);
1180
+ if (buf.writeUInt16BE(code, offset), offset += 2, option.data)
1181
+ buf.writeUInt16BE(option.data.length, offset), offset += 2, option.data.copy(buf, offset), offset += option.data.length;
1182
+ else
1183
+ switch (code) {
1184
+ // case 3: NSID. No encode makes sense.
1185
+ // case 5,6,7: Not implementable
1186
+ case 8:
1187
+ let spl = option.sourcePrefixLength || 0, fam = option.family || ip.familyOf(option.ip), ipBuf = ip.encode(option.ip, Buffer2.alloc), ipLen = Math.ceil(spl / 8);
1188
+ buf.writeUInt16BE(ipLen + 4, offset), offset += 2, buf.writeUInt16BE(fam, offset), offset += 2, buf.writeUInt8(spl, offset++), buf.writeUInt8(option.scopePrefixLength || 0, offset++), ipBuf.copy(buf, offset, 0, ipLen), offset += ipLen;
1189
+ break;
1190
+ // case 9: EXPIRE (experimental)
1191
+ // case 10: COOKIE. No encode makes sense.
1192
+ case 11:
1193
+ option.timeout ? (buf.writeUInt16BE(2, offset), offset += 2, buf.writeUInt16BE(option.timeout, offset), offset += 2) : (buf.writeUInt16BE(0, offset), offset += 2);
1194
+ break;
1195
+ case 12:
1196
+ let len = option.length || 0;
1197
+ buf.writeUInt16BE(len, offset), offset += 2, buf.fill(0, offset, offset + len), offset += len;
1198
+ break;
1199
+ // case 13: CHAIN. Experimental.
1200
+ case 14:
1201
+ let tagsLen = option.tags.length * 2;
1202
+ buf.writeUInt16BE(tagsLen, offset), offset += 2;
1203
+ for (let tag of option.tags)
1204
+ buf.writeUInt16BE(tag, offset), offset += 2;
1205
+ break;
1206
+ default:
1207
+ throw new Error(`Unknown roption code: ${option.code}`);
1208
+ }
1209
+ return roption.encode.bytes = offset - oldOffset, buf;
1210
+ };
1211
+ roption.encode.bytes = 0;
1212
+ roption.decode = function(buf, offset) {
1213
+ offset || (offset = 0);
1214
+ let option = {};
1215
+ option.code = buf.readUInt16BE(offset), option.type = optioncodes.toString(option.code), offset += 2;
1216
+ let len = buf.readUInt16BE(offset);
1217
+ switch (offset += 2, option.data = buf.slice(offset, offset + len), option.code) {
1218
+ // case 3: NSID. No decode makes sense.
1219
+ case 8:
1220
+ option.family = buf.readUInt16BE(offset), offset += 2, option.sourcePrefixLength = buf.readUInt8(offset++), option.scopePrefixLength = buf.readUInt8(offset++);
1221
+ let padded = Buffer2.alloc(option.family === 1 ? 4 : 16);
1222
+ buf.copy(padded, 0, offset, offset + len - 4), option.ip = ip.decode(padded);
1223
+ break;
1224
+ // case 12: Padding. No decode makes sense.
1225
+ case 11:
1226
+ len > 0 && (option.timeout = buf.readUInt16BE(offset), offset += 2);
1227
+ break;
1228
+ case 14:
1229
+ option.tags = [];
1230
+ for (let i = 0; i < len; i += 2)
1231
+ option.tags.push(buf.readUInt16BE(offset)), offset += 2;
1232
+ }
1233
+ return roption.decode.bytes = len + 4, option;
1234
+ };
1235
+ roption.decode.bytes = 0;
1236
+ roption.encodingLength = function(option) {
1237
+ if (option.data)
1238
+ return option.data.length + 4;
1239
+ switch (optioncodes.toCode(option.code)) {
1240
+ case 8:
1241
+ let spl = option.sourcePrefixLength || 0;
1242
+ return Math.ceil(spl / 8) + 8;
1243
+ case 11:
1244
+ return typeof option.timeout == "number" ? 6 : 4;
1245
+ case 12:
1246
+ return option.length + 4;
1247
+ case 14:
1248
+ return 4 + option.tags.length * 2;
1249
+ }
1250
+ throw new Error(`Unknown roption code: ${option.code}`);
1251
+ };
1252
+ var ropt = exports.opt = {};
1253
+ ropt.encode = function(options, buf, offset) {
1254
+ buf || (buf = Buffer2.alloc(ropt.encodingLength(options))), offset || (offset = 0);
1255
+ let oldOffset = offset, rdlen = encodingLengthList(options, roption);
1256
+ return buf.writeUInt16BE(rdlen, offset), offset = encodeList(options, roption, buf, offset + 2), ropt.encode.bytes = offset - oldOffset, buf;
1257
+ };
1258
+ ropt.encode.bytes = 0;
1259
+ ropt.decode = function(buf, offset) {
1260
+ offset || (offset = 0);
1261
+ let oldOffset = offset, options = [], rdlen = buf.readUInt16BE(offset);
1262
+ offset += 2;
1263
+ let o = 0;
1264
+ for (; rdlen > 0; )
1265
+ options[o++] = roption.decode(buf, offset), offset += roption.decode.bytes, rdlen -= roption.decode.bytes;
1266
+ return ropt.decode.bytes = offset - oldOffset, options;
1267
+ };
1268
+ ropt.decode.bytes = 0;
1269
+ ropt.encodingLength = function(options) {
1270
+ return 2 + encodingLengthList(options || [], roption);
1271
+ };
1272
+ var rdnskey = exports.dnskey = {};
1273
+ rdnskey.PROTOCOL_DNSSEC = 3;
1274
+ rdnskey.ZONE_KEY = 128;
1275
+ rdnskey.SECURE_ENTRYPOINT = 32768;
1276
+ rdnskey.encode = function(key, buf, offset) {
1277
+ buf || (buf = Buffer2.alloc(rdnskey.encodingLength(key))), offset || (offset = 0);
1278
+ let oldOffset = offset, keydata = key.key;
1279
+ if (!Buffer2.isBuffer(keydata))
1280
+ throw new Error("Key must be a Buffer");
1281
+ return offset += 2, buf.writeUInt16BE(key.flags, offset), offset += 2, buf.writeUInt8(rdnskey.PROTOCOL_DNSSEC, offset), offset += 1, buf.writeUInt8(key.algorithm, offset), offset += 1, keydata.copy(buf, offset, 0, keydata.length), offset += keydata.length, rdnskey.encode.bytes = offset - oldOffset, buf.writeUInt16BE(rdnskey.encode.bytes - 2, oldOffset), buf;
1282
+ };
1283
+ rdnskey.encode.bytes = 0;
1284
+ rdnskey.decode = function(buf, offset) {
1285
+ offset || (offset = 0);
1286
+ let oldOffset = offset;
1287
+ var key = {}, length = buf.readUInt16BE(offset);
1288
+ if (offset += 2, key.flags = buf.readUInt16BE(offset), offset += 2, buf.readUInt8(offset) !== rdnskey.PROTOCOL_DNSSEC)
1289
+ throw new Error("Protocol must be 3");
1290
+ return offset += 1, key.algorithm = buf.readUInt8(offset), offset += 1, key.key = buf.slice(offset, oldOffset + length + 2), offset += key.key.length, rdnskey.decode.bytes = offset - oldOffset, key;
1291
+ };
1292
+ rdnskey.decode.bytes = 0;
1293
+ rdnskey.encodingLength = function(key) {
1294
+ return 6 + Buffer2.byteLength(key.key);
1295
+ };
1296
+ var rrrsig = exports.rrsig = {};
1297
+ rrrsig.encode = function(sig, buf, offset) {
1298
+ buf || (buf = Buffer2.alloc(rrrsig.encodingLength(sig))), offset || (offset = 0);
1299
+ let oldOffset = offset, signature = sig.signature;
1300
+ if (!Buffer2.isBuffer(signature))
1301
+ throw new Error("Signature must be a Buffer");
1302
+ return offset += 2, buf.writeUInt16BE(types.toType(sig.typeCovered), offset), offset += 2, buf.writeUInt8(sig.algorithm, offset), offset += 1, buf.writeUInt8(sig.labels, offset), offset += 1, buf.writeUInt32BE(sig.originalTTL, offset), offset += 4, buf.writeUInt32BE(sig.expiration, offset), offset += 4, buf.writeUInt32BE(sig.inception, offset), offset += 4, buf.writeUInt16BE(sig.keyTag, offset), offset += 2, name.encode(sig.signersName, buf, offset), offset += name.encode.bytes, signature.copy(buf, offset, 0, signature.length), offset += signature.length, rrrsig.encode.bytes = offset - oldOffset, buf.writeUInt16BE(rrrsig.encode.bytes - 2, oldOffset), buf;
1303
+ };
1304
+ rrrsig.encode.bytes = 0;
1305
+ rrrsig.decode = function(buf, offset) {
1306
+ offset || (offset = 0);
1307
+ let oldOffset = offset;
1308
+ var sig = {}, length = buf.readUInt16BE(offset);
1309
+ return offset += 2, sig.typeCovered = types.toString(buf.readUInt16BE(offset)), offset += 2, sig.algorithm = buf.readUInt8(offset), offset += 1, sig.labels = buf.readUInt8(offset), offset += 1, sig.originalTTL = buf.readUInt32BE(offset), offset += 4, sig.expiration = buf.readUInt32BE(offset), offset += 4, sig.inception = buf.readUInt32BE(offset), offset += 4, sig.keyTag = buf.readUInt16BE(offset), offset += 2, sig.signersName = name.decode(buf, offset), offset += name.decode.bytes, sig.signature = buf.slice(offset, oldOffset + length + 2), offset += sig.signature.length, rrrsig.decode.bytes = offset - oldOffset, sig;
1310
+ };
1311
+ rrrsig.decode.bytes = 0;
1312
+ rrrsig.encodingLength = function(sig) {
1313
+ return 20 + name.encodingLength(sig.signersName) + Buffer2.byteLength(sig.signature);
1314
+ };
1315
+ var rrp = exports.rp = {};
1316
+ rrp.encode = function(data, buf, offset) {
1317
+ buf || (buf = Buffer2.alloc(rrp.encodingLength(data))), offset || (offset = 0);
1318
+ let oldOffset = offset;
1319
+ return offset += 2, name.encode(data.mbox || ".", buf, offset, { mail: !0 }), offset += name.encode.bytes, name.encode(data.txt || ".", buf, offset), offset += name.encode.bytes, rrp.encode.bytes = offset - oldOffset, buf.writeUInt16BE(rrp.encode.bytes - 2, oldOffset), buf;
1320
+ };
1321
+ rrp.encode.bytes = 0;
1322
+ rrp.decode = function(buf, offset) {
1323
+ offset || (offset = 0);
1324
+ let oldOffset = offset, data = {};
1325
+ return offset += 2, data.mbox = name.decode(buf, offset, { mail: !0 }) || ".", offset += name.decode.bytes, data.txt = name.decode(buf, offset) || ".", offset += name.decode.bytes, rrp.decode.bytes = offset - oldOffset, data;
1326
+ };
1327
+ rrp.decode.bytes = 0;
1328
+ rrp.encodingLength = function(data) {
1329
+ return 2 + name.encodingLength(data.mbox || ".") + name.encodingLength(data.txt || ".");
1330
+ };
1331
+ var typebitmap = {};
1332
+ typebitmap.encode = function(typelist, buf, offset) {
1333
+ buf || (buf = Buffer2.alloc(typebitmap.encodingLength(typelist))), offset || (offset = 0);
1334
+ let oldOffset = offset;
1335
+ for (var typesByWindow = [], i = 0; i < typelist.length; i++) {
1336
+ var typeid = types.toType(typelist[i]);
1337
+ typesByWindow[typeid >> 8] === void 0 && (typesByWindow[typeid >> 8] = []), typesByWindow[typeid >> 8][typeid >> 3 & 31] |= 1 << 7 - (typeid & 7);
1338
+ }
1339
+ for (i = 0; i < typesByWindow.length; i++)
1340
+ if (typesByWindow[i] !== void 0) {
1341
+ var windowBuf = Buffer2.from(typesByWindow[i]);
1342
+ buf.writeUInt8(i, offset), offset += 1, buf.writeUInt8(windowBuf.length, offset), offset += 1, windowBuf.copy(buf, offset), offset += windowBuf.length;
1343
+ }
1344
+ return typebitmap.encode.bytes = offset - oldOffset, buf;
1345
+ };
1346
+ typebitmap.encode.bytes = 0;
1347
+ typebitmap.decode = function(buf, offset, length) {
1348
+ offset || (offset = 0);
1349
+ let oldOffset = offset;
1350
+ for (var typelist = []; offset - oldOffset < length; ) {
1351
+ var window = buf.readUInt8(offset);
1352
+ offset += 1;
1353
+ var windowLength = buf.readUInt8(offset);
1354
+ offset += 1;
1355
+ for (var i = 0; i < windowLength; i++)
1356
+ for (var b = buf.readUInt8(offset + i), j = 0; j < 8; j++)
1357
+ if (b & 1 << 7 - j) {
1358
+ var typeid = types.toString(window << 8 | i << 3 | j);
1359
+ typelist.push(typeid);
1360
+ }
1361
+ offset += windowLength;
1362
+ }
1363
+ return typebitmap.decode.bytes = offset - oldOffset, typelist;
1364
+ };
1365
+ typebitmap.decode.bytes = 0;
1366
+ typebitmap.encodingLength = function(typelist) {
1367
+ for (var extents = [], i = 0; i < typelist.length; i++) {
1368
+ var typeid = types.toType(typelist[i]);
1369
+ extents[typeid >> 8] = Math.max(extents[typeid >> 8] || 0, typeid & 255);
1370
+ }
1371
+ var len = 0;
1372
+ for (i = 0; i < extents.length; i++)
1373
+ extents[i] !== void 0 && (len += 2 + Math.ceil((extents[i] + 1) / 8));
1374
+ return len;
1375
+ };
1376
+ var rnsec = exports.nsec = {};
1377
+ rnsec.encode = function(record, buf, offset) {
1378
+ buf || (buf = Buffer2.alloc(rnsec.encodingLength(record))), offset || (offset = 0);
1379
+ let oldOffset = offset;
1380
+ return offset += 2, name.encode(record.nextDomain, buf, offset), offset += name.encode.bytes, typebitmap.encode(record.rrtypes, buf, offset), offset += typebitmap.encode.bytes, rnsec.encode.bytes = offset - oldOffset, buf.writeUInt16BE(rnsec.encode.bytes - 2, oldOffset), buf;
1381
+ };
1382
+ rnsec.encode.bytes = 0;
1383
+ rnsec.decode = function(buf, offset) {
1384
+ offset || (offset = 0);
1385
+ let oldOffset = offset;
1386
+ var record = {}, length = buf.readUInt16BE(offset);
1387
+ return offset += 2, record.nextDomain = name.decode(buf, offset), offset += name.decode.bytes, record.rrtypes = typebitmap.decode(buf, offset, length - (offset - oldOffset)), offset += typebitmap.decode.bytes, rnsec.decode.bytes = offset - oldOffset, record;
1388
+ };
1389
+ rnsec.decode.bytes = 0;
1390
+ rnsec.encodingLength = function(record) {
1391
+ return 2 + name.encodingLength(record.nextDomain) + typebitmap.encodingLength(record.rrtypes);
1392
+ };
1393
+ var rnsec3 = exports.nsec3 = {};
1394
+ rnsec3.encode = function(record, buf, offset) {
1395
+ buf || (buf = Buffer2.alloc(rnsec3.encodingLength(record))), offset || (offset = 0);
1396
+ let oldOffset = offset, salt = record.salt;
1397
+ if (!Buffer2.isBuffer(salt))
1398
+ throw new Error("salt must be a Buffer");
1399
+ let nextDomain = record.nextDomain;
1400
+ if (!Buffer2.isBuffer(nextDomain))
1401
+ throw new Error("nextDomain must be a Buffer");
1402
+ return offset += 2, buf.writeUInt8(record.algorithm, offset), offset += 1, buf.writeUInt8(record.flags, offset), offset += 1, buf.writeUInt16BE(record.iterations, offset), offset += 2, buf.writeUInt8(salt.length, offset), offset += 1, salt.copy(buf, offset, 0, salt.length), offset += salt.length, buf.writeUInt8(nextDomain.length, offset), offset += 1, nextDomain.copy(buf, offset, 0, nextDomain.length), offset += nextDomain.length, typebitmap.encode(record.rrtypes, buf, offset), offset += typebitmap.encode.bytes, rnsec3.encode.bytes = offset - oldOffset, buf.writeUInt16BE(rnsec3.encode.bytes - 2, oldOffset), buf;
1403
+ };
1404
+ rnsec3.encode.bytes = 0;
1405
+ rnsec3.decode = function(buf, offset) {
1406
+ offset || (offset = 0);
1407
+ let oldOffset = offset;
1408
+ var record = {}, length = buf.readUInt16BE(offset);
1409
+ offset += 2, record.algorithm = buf.readUInt8(offset), offset += 1, record.flags = buf.readUInt8(offset), offset += 1, record.iterations = buf.readUInt16BE(offset), offset += 2;
1410
+ let saltLength = buf.readUInt8(offset);
1411
+ offset += 1, record.salt = buf.slice(offset, offset + saltLength), offset += saltLength;
1412
+ let hashLength = buf.readUInt8(offset);
1413
+ return offset += 1, record.nextDomain = buf.slice(offset, offset + hashLength), offset += hashLength, record.rrtypes = typebitmap.decode(buf, offset, length - (offset - oldOffset)), offset += typebitmap.decode.bytes, rnsec3.decode.bytes = offset - oldOffset, record;
1414
+ };
1415
+ rnsec3.decode.bytes = 0;
1416
+ rnsec3.encodingLength = function(record) {
1417
+ return 8 + record.salt.length + record.nextDomain.length + typebitmap.encodingLength(record.rrtypes);
1418
+ };
1419
+ var rds = exports.ds = {};
1420
+ rds.encode = function(digest, buf, offset) {
1421
+ buf || (buf = Buffer2.alloc(rds.encodingLength(digest))), offset || (offset = 0);
1422
+ let oldOffset = offset, digestdata = digest.digest;
1423
+ if (!Buffer2.isBuffer(digestdata))
1424
+ throw new Error("Digest must be a Buffer");
1425
+ return offset += 2, buf.writeUInt16BE(digest.keyTag, offset), offset += 2, buf.writeUInt8(digest.algorithm, offset), offset += 1, buf.writeUInt8(digest.digestType, offset), offset += 1, digestdata.copy(buf, offset, 0, digestdata.length), offset += digestdata.length, rds.encode.bytes = offset - oldOffset, buf.writeUInt16BE(rds.encode.bytes - 2, oldOffset), buf;
1426
+ };
1427
+ rds.encode.bytes = 0;
1428
+ rds.decode = function(buf, offset) {
1429
+ offset || (offset = 0);
1430
+ let oldOffset = offset;
1431
+ var digest = {}, length = buf.readUInt16BE(offset);
1432
+ return offset += 2, digest.keyTag = buf.readUInt16BE(offset), offset += 2, digest.algorithm = buf.readUInt8(offset), offset += 1, digest.digestType = buf.readUInt8(offset), offset += 1, digest.digest = buf.slice(offset, oldOffset + length + 2), offset += digest.digest.length, rds.decode.bytes = offset - oldOffset, digest;
1433
+ };
1434
+ rds.decode.bytes = 0;
1435
+ rds.encodingLength = function(digest) {
1436
+ return 6 + Buffer2.byteLength(digest.digest);
1437
+ };
1438
+ var rsshfp = exports.sshfp = {};
1439
+ rsshfp.getFingerprintLengthForHashType = function(hashType) {
1440
+ switch (hashType) {
1441
+ case 1:
1442
+ return 20;
1443
+ case 2:
1444
+ return 32;
1445
+ }
1446
+ };
1447
+ rsshfp.encode = function(record, buf, offset) {
1448
+ buf || (buf = Buffer2.alloc(rsshfp.encodingLength(record))), offset || (offset = 0);
1449
+ let oldOffset = offset;
1450
+ offset += 2, buf[offset] = record.algorithm, offset += 1, buf[offset] = record.hash, offset += 1;
1451
+ let fingerprintBuf = Buffer2.from(record.fingerprint.toUpperCase(), "hex");
1452
+ if (fingerprintBuf.length !== rsshfp.getFingerprintLengthForHashType(record.hash))
1453
+ throw new Error("Invalid fingerprint length");
1454
+ return fingerprintBuf.copy(buf, offset), offset += fingerprintBuf.byteLength, rsshfp.encode.bytes = offset - oldOffset, buf.writeUInt16BE(rsshfp.encode.bytes - 2, oldOffset), buf;
1455
+ };
1456
+ rsshfp.encode.bytes = 0;
1457
+ rsshfp.decode = function(buf, offset) {
1458
+ offset || (offset = 0);
1459
+ let oldOffset = offset, record = {};
1460
+ offset += 2, record.algorithm = buf[offset], offset += 1, record.hash = buf[offset], offset += 1;
1461
+ let fingerprintLength = rsshfp.getFingerprintLengthForHashType(record.hash);
1462
+ return record.fingerprint = buf.slice(offset, offset + fingerprintLength).toString("hex").toUpperCase(), offset += fingerprintLength, rsshfp.decode.bytes = offset - oldOffset, record;
1463
+ };
1464
+ rsshfp.decode.bytes = 0;
1465
+ rsshfp.encodingLength = function(record) {
1466
+ return 4 + Buffer2.from(record.fingerprint, "hex").byteLength;
1467
+ };
1468
+ var rnaptr = exports.naptr = {};
1469
+ rnaptr.encode = function(data, buf, offset) {
1470
+ buf || (buf = Buffer2.alloc(rnaptr.encodingLength(data))), offset || (offset = 0);
1471
+ let oldOffset = offset;
1472
+ return offset += 2, buf.writeUInt16BE(data.order || 0, offset), offset += 2, buf.writeUInt16BE(data.preference || 0, offset), offset += 2, string.encode(data.flags, buf, offset), offset += string.encode.bytes, string.encode(data.services, buf, offset), offset += string.encode.bytes, string.encode(data.regexp, buf, offset), offset += string.encode.bytes, name.encode(data.replacement, buf, offset), offset += name.encode.bytes, rnaptr.encode.bytes = offset - oldOffset, buf.writeUInt16BE(rnaptr.encode.bytes - 2, oldOffset), buf;
1473
+ };
1474
+ rnaptr.encode.bytes = 0;
1475
+ rnaptr.decode = function(buf, offset) {
1476
+ offset || (offset = 0);
1477
+ let oldOffset = offset, data = {};
1478
+ return offset += 2, data.order = buf.readUInt16BE(offset), offset += 2, data.preference = buf.readUInt16BE(offset), offset += 2, data.flags = string.decode(buf, offset), offset += string.decode.bytes, data.services = string.decode(buf, offset), offset += string.decode.bytes, data.regexp = string.decode(buf, offset), offset += string.decode.bytes, data.replacement = name.decode(buf, offset), offset += name.decode.bytes, rnaptr.decode.bytes = offset - oldOffset, data;
1479
+ };
1480
+ rnaptr.decode.bytes = 0;
1481
+ rnaptr.encodingLength = function(data) {
1482
+ return string.encodingLength(data.flags) + string.encodingLength(data.services) + string.encodingLength(data.regexp) + name.encodingLength(data.replacement) + 6;
1483
+ };
1484
+ var rtlsa = exports.tlsa = {};
1485
+ rtlsa.encode = function(cert, buf, offset) {
1486
+ buf || (buf = Buffer2.alloc(rtlsa.encodingLength(cert))), offset || (offset = 0);
1487
+ let oldOffset = offset, certdata = cert.certificate;
1488
+ if (!Buffer2.isBuffer(certdata))
1489
+ throw new Error("Certificate must be a Buffer");
1490
+ return offset += 2, buf.writeUInt8(cert.usage, offset), offset += 1, buf.writeUInt8(cert.selector, offset), offset += 1, buf.writeUInt8(cert.matchingType, offset), offset += 1, certdata.copy(buf, offset, 0, certdata.length), offset += certdata.length, rtlsa.encode.bytes = offset - oldOffset, buf.writeUInt16BE(rtlsa.encode.bytes - 2, oldOffset), buf;
1491
+ };
1492
+ rtlsa.encode.bytes = 0;
1493
+ rtlsa.decode = function(buf, offset) {
1494
+ offset || (offset = 0);
1495
+ let oldOffset = offset, cert = {}, length = buf.readUInt16BE(offset);
1496
+ return offset += 2, cert.usage = buf.readUInt8(offset), offset += 1, cert.selector = buf.readUInt8(offset), offset += 1, cert.matchingType = buf.readUInt8(offset), offset += 1, cert.certificate = buf.slice(offset, oldOffset + length + 2), offset += cert.certificate.length, rtlsa.decode.bytes = offset - oldOffset, cert;
1497
+ };
1498
+ rtlsa.decode.bytes = 0;
1499
+ rtlsa.encodingLength = function(cert) {
1500
+ return 5 + Buffer2.byteLength(cert.certificate);
1501
+ };
1502
+ var renc = exports.record = function(type) {
1503
+ switch (type.toUpperCase()) {
1504
+ case "A":
1505
+ return ra;
1506
+ case "PTR":
1507
+ return rptr;
1508
+ case "CNAME":
1509
+ return rcname;
1510
+ case "DNAME":
1511
+ return rdname;
1512
+ case "TXT":
1513
+ return rtxt;
1514
+ case "NULL":
1515
+ return rnull;
1516
+ case "AAAA":
1517
+ return raaaa;
1518
+ case "SRV":
1519
+ return rsrv;
1520
+ case "HINFO":
1521
+ return rhinfo;
1522
+ case "CAA":
1523
+ return rcaa;
1524
+ case "NS":
1525
+ return rns;
1526
+ case "SOA":
1527
+ return rsoa;
1528
+ case "MX":
1529
+ return rmx;
1530
+ case "OPT":
1531
+ return ropt;
1532
+ case "DNSKEY":
1533
+ return rdnskey;
1534
+ case "RRSIG":
1535
+ return rrrsig;
1536
+ case "RP":
1537
+ return rrp;
1538
+ case "NSEC":
1539
+ return rnsec;
1540
+ case "NSEC3":
1541
+ return rnsec3;
1542
+ case "SSHFP":
1543
+ return rsshfp;
1544
+ case "DS":
1545
+ return rds;
1546
+ case "NAPTR":
1547
+ return rnaptr;
1548
+ case "TLSA":
1549
+ return rtlsa;
1550
+ }
1551
+ return runknown;
1552
+ }, answer = exports.answer = {};
1553
+ answer.encode = function(a, buf, offset) {
1554
+ buf || (buf = Buffer2.alloc(answer.encodingLength(a))), offset || (offset = 0);
1555
+ let oldOffset = offset;
1556
+ if (name.encode(a.name, buf, offset), offset += name.encode.bytes, buf.writeUInt16BE(types.toType(a.type), offset), a.type.toUpperCase() === "OPT") {
1557
+ if (a.name !== ".")
1558
+ throw new Error("OPT name must be root.");
1559
+ buf.writeUInt16BE(a.udpPayloadSize || 4096, offset + 2), buf.writeUInt8(a.extendedRcode || 0, offset + 4), buf.writeUInt8(a.ednsVersion || 0, offset + 5), buf.writeUInt16BE(a.flags || 0, offset + 6), offset += 8, ropt.encode(a.options || [], buf, offset), offset += ropt.encode.bytes;
1560
+ } else {
1561
+ let klass = classes.toClass(a.class === void 0 ? "IN" : a.class);
1562
+ a.flush && (klass |= FLUSH_MASK), buf.writeUInt16BE(klass, offset + 2), buf.writeUInt32BE(a.ttl || 0, offset + 4), offset += 8;
1563
+ let enc = renc(a.type);
1564
+ enc.encode(a.data, buf, offset), offset += enc.encode.bytes;
1565
+ }
1566
+ return answer.encode.bytes = offset - oldOffset, buf;
1567
+ };
1568
+ answer.encode.bytes = 0;
1569
+ answer.decode = function(buf, offset) {
1570
+ offset || (offset = 0);
1571
+ let a = {}, oldOffset = offset;
1572
+ if (a.name = name.decode(buf, offset), offset += name.decode.bytes, a.type = types.toString(buf.readUInt16BE(offset)), a.type === "OPT")
1573
+ a.udpPayloadSize = buf.readUInt16BE(offset + 2), a.extendedRcode = buf.readUInt8(offset + 4), a.ednsVersion = buf.readUInt8(offset + 5), a.flags = buf.readUInt16BE(offset + 6), a.flag_do = (a.flags >> 15 & 1) === 1, a.options = ropt.decode(buf, offset + 8), offset += 8 + ropt.decode.bytes;
1574
+ else {
1575
+ let klass = buf.readUInt16BE(offset + 2);
1576
+ a.ttl = buf.readUInt32BE(offset + 4), a.class = classes.toString(klass & NOT_FLUSH_MASK), a.flush = !!(klass & FLUSH_MASK);
1577
+ let enc = renc(a.type);
1578
+ a.data = enc.decode(buf, offset + 8), offset += 8 + enc.decode.bytes;
1579
+ }
1580
+ return answer.decode.bytes = offset - oldOffset, a;
1581
+ };
1582
+ answer.decode.bytes = 0;
1583
+ answer.encodingLength = function(a) {
1584
+ let data = a.data !== null && a.data !== void 0 ? a.data : a.options;
1585
+ return name.encodingLength(a.name) + 8 + renc(a.type).encodingLength(data);
1586
+ };
1587
+ var question = exports.question = {};
1588
+ question.encode = function(q, buf, offset) {
1589
+ buf || (buf = Buffer2.alloc(question.encodingLength(q))), offset || (offset = 0);
1590
+ let oldOffset = offset;
1591
+ return name.encode(q.name, buf, offset), offset += name.encode.bytes, buf.writeUInt16BE(types.toType(q.type), offset), offset += 2, buf.writeUInt16BE(classes.toClass(q.class === void 0 ? "IN" : q.class), offset), offset += 2, question.encode.bytes = offset - oldOffset, q;
1592
+ };
1593
+ question.encode.bytes = 0;
1594
+ question.decode = function(buf, offset) {
1595
+ offset || (offset = 0);
1596
+ let oldOffset = offset, q = {};
1597
+ return q.name = name.decode(buf, offset), offset += name.decode.bytes, q.type = types.toString(buf.readUInt16BE(offset)), offset += 2, q.class = classes.toString(buf.readUInt16BE(offset)), offset += 2, q.class & QU_MASK && (q.class &= NOT_QU_MASK), question.decode.bytes = offset - oldOffset, q;
1598
+ };
1599
+ question.decode.bytes = 0;
1600
+ question.encodingLength = function(q) {
1601
+ return name.encodingLength(q.name) + 4;
1602
+ };
1603
+ exports.AUTHORITATIVE_ANSWER = 1024;
1604
+ exports.TRUNCATED_RESPONSE = 512;
1605
+ exports.RECURSION_DESIRED = 256;
1606
+ exports.RECURSION_AVAILABLE = 128;
1607
+ exports.AUTHENTIC_DATA = 32;
1608
+ exports.CHECKING_DISABLED = 16;
1609
+ exports.DNSSEC_OK = 32768;
1610
+ exports.encode = function(result, buf, offset) {
1611
+ let allocing = !buf;
1612
+ allocing && (buf = Buffer2.alloc(exports.encodingLength(result))), offset || (offset = 0);
1613
+ let oldOffset = offset;
1614
+ return result.questions || (result.questions = []), result.answers || (result.answers = []), result.authorities || (result.authorities = []), result.additionals || (result.additionals = []), header.encode(result, buf, offset), offset += header.encode.bytes, offset = encodeList(result.questions, question, buf, offset), offset = encodeList(result.answers, answer, buf, offset), offset = encodeList(result.authorities, answer, buf, offset), offset = encodeList(result.additionals, answer, buf, offset), exports.encode.bytes = offset - oldOffset, allocing && exports.encode.bytes !== buf.length ? buf.slice(0, exports.encode.bytes) : buf;
1615
+ };
1616
+ exports.encode.bytes = 0;
1617
+ exports.decode = function(buf, offset) {
1618
+ offset || (offset = 0);
1619
+ let oldOffset = offset, result = header.decode(buf, offset);
1620
+ return offset += header.decode.bytes, offset = decodeList(result.questions, question, buf, offset), offset = decodeList(result.answers, answer, buf, offset), offset = decodeList(result.authorities, answer, buf, offset), offset = decodeList(result.additionals, answer, buf, offset), exports.decode.bytes = offset - oldOffset, result;
1621
+ };
1622
+ exports.decode.bytes = 0;
1623
+ exports.encodingLength = function(result) {
1624
+ return header.encodingLength(result) + encodingLengthList(result.questions || [], question) + encodingLengthList(result.answers || [], answer) + encodingLengthList(result.authorities || [], answer) + encodingLengthList(result.additionals || [], answer);
1625
+ };
1626
+ exports.streamEncode = function(result) {
1627
+ let buf = exports.encode(result), sbuf = Buffer2.alloc(2);
1628
+ sbuf.writeUInt16BE(buf.byteLength);
1629
+ let combine = Buffer2.concat([sbuf, buf]);
1630
+ return exports.streamEncode.bytes = combine.byteLength, combine;
1631
+ };
1632
+ exports.streamEncode.bytes = 0;
1633
+ exports.streamDecode = function(sbuf) {
1634
+ let len = sbuf.readUInt16BE(0);
1635
+ if (sbuf.byteLength < len + 2)
1636
+ return null;
1637
+ let result = exports.decode(sbuf.slice(2));
1638
+ return exports.streamDecode.bytes = exports.decode.bytes, result;
1639
+ };
1640
+ exports.streamDecode.bytes = 0;
1641
+ function encodingLengthList(list, enc) {
1642
+ let len = 0;
1643
+ for (let i = 0; i < list.length; i++) len += enc.encodingLength(list[i]);
1644
+ return len;
1645
+ }
1646
+ function encodeList(list, enc, buf, offset) {
1647
+ for (let i = 0; i < list.length; i++)
1648
+ enc.encode(list[i], buf, offset), offset += enc.encode.bytes;
1649
+ return offset;
1650
+ }
1651
+ function decodeList(list, enc, buf, offset) {
1652
+ for (let i = 0; i < list.length; i++)
1653
+ list[i] = enc.decode(buf, offset), offset += enc.decode.bytes;
1654
+ return offset;
1655
+ }
1656
+ }
1657
+ });
1658
+
1659
+ // node_modules/thunky/index.js
1660
+ var require_thunky = __commonJS({
1661
+ "node_modules/thunky/index.js"(exports, module) {
1662
+ "use strict";
1663
+ var nextTick = nextTickArgs;
1664
+ process.nextTick(upgrade, 42);
1665
+ module.exports = thunky;
1666
+ function thunky(fn) {
1667
+ var state = run;
1668
+ return thunk;
1669
+ function thunk(callback) {
1670
+ state(callback || noop);
1671
+ }
1672
+ function run(callback) {
1673
+ var stack = [callback];
1674
+ state = wait, fn(done);
1675
+ function wait(callback2) {
1676
+ stack.push(callback2);
1677
+ }
1678
+ function done(err) {
1679
+ var args = arguments;
1680
+ for (state = isError(err) ? run : finished; stack.length; ) finished(stack.shift());
1681
+ function finished(callback2) {
1682
+ nextTick(apply, callback2, args);
1683
+ }
1684
+ }
1685
+ }
1686
+ }
1687
+ function isError(err) {
1688
+ return Object.prototype.toString.call(err) === "[object Error]";
1689
+ }
1690
+ function noop() {
1691
+ }
1692
+ function apply(callback, args) {
1693
+ callback.apply(null, args);
1694
+ }
1695
+ function upgrade(val) {
1696
+ val === 42 && (nextTick = process.nextTick);
1697
+ }
1698
+ function nextTickArgs(fn, a, b) {
1699
+ process.nextTick(function() {
1700
+ fn(a, b);
1701
+ });
1702
+ }
1703
+ }
1704
+ });
1705
+
1706
+ // node_modules/multicast-dns/index.js
1707
+ var require_multicast_dns = __commonJS({
1708
+ "node_modules/multicast-dns/index.js"(exports, module) {
1709
+ "use strict";
1710
+ var packet = require_dns_packet(), dgram = __require("dgram"), thunky = require_thunky(), events = __require("events"), os = __require("os"), noop = function() {
1711
+ };
1712
+ module.exports = function(opts) {
1713
+ opts || (opts = {});
1714
+ var that = new events.EventEmitter(), port = typeof opts.port == "number" ? opts.port : 5353, type = opts.type || "udp4", ip = opts.ip || opts.host || (type === "udp4" ? "224.0.0.251" : null), me = { address: ip, port }, memberships = {}, destroyed = !1, interval = null;
1715
+ if (type === "udp6" && (!ip || !opts.interface))
1716
+ throw new Error("For IPv6 multicast you must specify `ip` and `interface`");
1717
+ var socket = opts.socket || dgram.createSocket({
1718
+ type,
1719
+ reuseAddr: opts.reuseAddr !== !1,
1720
+ toString: function() {
1721
+ return type;
1722
+ }
1723
+ });
1724
+ socket.on("error", function(err) {
1725
+ err.code === "EACCES" || err.code === "EADDRINUSE" ? that.emit("error", err) : that.emit("warning", err);
1726
+ }), socket.on("message", function(message, rinfo) {
1727
+ try {
1728
+ message = packet.decode(message);
1729
+ } catch (err) {
1730
+ that.emit("warning", err);
1731
+ return;
1732
+ }
1733
+ that.emit("packet", message, rinfo), message.type === "query" && that.emit("query", message, rinfo), message.type === "response" && that.emit("response", message, rinfo);
1734
+ }), socket.on("listening", function() {
1735
+ port || (port = me.port = socket.address().port), opts.multicast !== !1 && (that.update(), interval = setInterval(that.update, 5e3), socket.setMulticastTTL(opts.ttl || 255), socket.setMulticastLoopback(opts.loopback !== !1));
1736
+ });
1737
+ var bind = thunky(function(cb) {
1738
+ if (!port || opts.bind === !1) return cb(null);
1739
+ socket.once("error", cb), socket.bind(port, opts.bind || opts.interface, function() {
1740
+ socket.removeListener("error", cb), cb(null);
1741
+ });
1742
+ });
1743
+ return bind(function(err) {
1744
+ if (err) return that.emit("error", err);
1745
+ that.emit("ready");
1746
+ }), that.send = function(value, rinfo, cb) {
1747
+ if (typeof rinfo == "function") return that.send(value, null, rinfo);
1748
+ cb || (cb = noop), rinfo ? !rinfo.host && !rinfo.address && (rinfo.address = me.address) : rinfo = me, bind(onbind);
1749
+ function onbind(err) {
1750
+ if (destroyed) return cb();
1751
+ if (err) return cb(err);
1752
+ var message = packet.encode(value);
1753
+ socket.send(message, 0, message.length, rinfo.port, rinfo.address || rinfo.host, cb);
1754
+ }
1755
+ }, that.response = that.respond = function(res, rinfo, cb) {
1756
+ Array.isArray(res) && (res = { answers: res }), res.type = "response", res.flags = (res.flags || 0) | packet.AUTHORITATIVE_ANSWER, that.send(res, rinfo, cb);
1757
+ }, that.query = function(q, type2, rinfo, cb) {
1758
+ if (typeof type2 == "function") return that.query(q, null, null, type2);
1759
+ if (typeof type2 == "object" && type2 && type2.port) return that.query(q, null, type2, rinfo);
1760
+ if (typeof rinfo == "function") return that.query(q, type2, null, rinfo);
1761
+ cb || (cb = noop), typeof q == "string" && (q = [{ name: q, type: type2 || "ANY" }]), Array.isArray(q) && (q = { type: "query", questions: q }), q.type = "query", that.send(q, rinfo, cb);
1762
+ }, that.destroy = function(cb) {
1763
+ if (cb || (cb = noop), destroyed) return process.nextTick(cb);
1764
+ destroyed = !0, clearInterval(interval);
1765
+ for (var iface in memberships)
1766
+ try {
1767
+ socket.dropMembership(ip, iface);
1768
+ } catch {
1769
+ }
1770
+ memberships = {}, socket.close(cb);
1771
+ }, that.update = function() {
1772
+ for (var ifaces = opts.interface ? [].concat(opts.interface) : allInterfaces(), updated = !1, i = 0; i < ifaces.length; i++) {
1773
+ var addr = ifaces[i];
1774
+ if (!memberships[addr])
1775
+ try {
1776
+ socket.addMembership(ip, addr), memberships[addr] = !0, updated = !0;
1777
+ } catch (err) {
1778
+ that.emit("warning", err);
1779
+ }
1780
+ }
1781
+ if (updated) {
1782
+ if (socket.setMulticastInterface)
1783
+ try {
1784
+ socket.setMulticastInterface(opts.interface || defaultInterface());
1785
+ } catch (err) {
1786
+ that.emit("warning", err);
1787
+ }
1788
+ that.emit("networkInterface");
1789
+ }
1790
+ }, that;
1791
+ };
1792
+ function defaultInterface() {
1793
+ for (var networks = os.networkInterfaces(), names = Object.keys(networks), i = 0; i < names.length; i++)
1794
+ for (var net = networks[names[i]], j = 0; j < net.length; j++) {
1795
+ var iface = net[j];
1796
+ if (isIPv4(iface.family) && !iface.internal)
1797
+ return os.platform() === "darwin" && names[i] === "en0" ? iface.address : "0.0.0.0";
1798
+ }
1799
+ return "127.0.0.1";
1800
+ }
1801
+ function allInterfaces() {
1802
+ for (var networks = os.networkInterfaces(), names = Object.keys(networks), res = [], i = 0; i < names.length; i++)
1803
+ for (var net = networks[names[i]], j = 0; j < net.length; j++) {
1804
+ var iface = net[j];
1805
+ if (isIPv4(iface.family)) {
1806
+ res.push(iface.address);
1807
+ break;
1808
+ }
1809
+ }
1810
+ return res;
1811
+ }
1812
+ function isIPv4(family) {
1813
+ return family === 4 || family === "IPv4";
1814
+ }
1815
+ }
1816
+ });
1817
+
1818
+ // node_modules/bonjour-service/dist/lib/mdns-server.js
1819
+ var require_mdns_server = __commonJS({
1820
+ "node_modules/bonjour-service/dist/lib/mdns-server.js"(exports) {
1821
+ "use strict";
1822
+ var __importDefault = exports && exports.__importDefault || function(mod) {
1823
+ return mod && mod.__esModule ? mod : { default: mod };
1824
+ };
1825
+ Object.defineProperty(exports, "__esModule", { value: !0 });
1826
+ exports.Server = void 0;
1827
+ var multicast_dns_1 = __importDefault(require_multicast_dns()), es6_1 = __importDefault(require_es6()), dns_equal_1 = __importDefault(require_dns_equal()), Server = class {
1828
+ constructor(opts, errorCallback) {
1829
+ this.registry = {}, this.mdns = (0, multicast_dns_1.default)(opts), this.mdns.setMaxListeners(0), this.mdns.on("query", this.respondToQuery.bind(this)), this.errorCallback = errorCallback ?? function(err) {
1830
+ throw err;
1831
+ };
1832
+ }
1833
+ register(records) {
1834
+ let shouldRegister = (record) => {
1835
+ var subRegistry = this.registry[record.type];
1836
+ if (!subRegistry)
1837
+ subRegistry = this.registry[record.type] = [];
1838
+ else if (subRegistry.some(this.isDuplicateRecord(record)))
1839
+ return;
1840
+ subRegistry.push(record);
1841
+ };
1842
+ Array.isArray(records) ? records.forEach(shouldRegister) : shouldRegister(records);
1843
+ }
1844
+ unregister(records) {
1845
+ let shouldUnregister = (record) => {
1846
+ let type = record.type;
1847
+ type in this.registry && (this.registry[type] = this.registry[type].filter((i) => i.name !== record.name));
1848
+ };
1849
+ Array.isArray(records) ? records.forEach(shouldUnregister) : shouldUnregister(records);
1850
+ }
1851
+ respondToQuery(query) {
1852
+ let self = this;
1853
+ query.questions.forEach((question) => {
1854
+ var type = question.type, name = question.name, answers = type === "ANY" ? Object.keys(self.registry).map(self.recordsFor.bind(self, name)).flat(1) : self.recordsFor(name, type);
1855
+ if (answers.length !== 0) {
1856
+ var additionals = [];
1857
+ type !== "ANY" && (answers.forEach((answer) => {
1858
+ answer.type === "PTR" && (additionals = additionals.concat(self.recordsFor(answer.data, "SRV")).concat(self.recordsFor(answer.data, "TXT")));
1859
+ }), additionals.filter(function(record) {
1860
+ return record.type === "SRV";
1861
+ }).map(function(record) {
1862
+ return record.data.target;
1863
+ }).filter(this.unique()).forEach(function(target) {
1864
+ additionals = additionals.concat(self.recordsFor(target, "A")).concat(self.recordsFor(target, "AAAA"));
1865
+ })), self.mdns.respond({ answers, additionals }, (err) => {
1866
+ err && this.errorCallback(err);
1867
+ });
1868
+ }
1869
+ });
1870
+ }
1871
+ recordsFor(name, type) {
1872
+ return type in this.registry ? this.registry[type].filter((record) => {
1873
+ var _name = ~name.indexOf(".") ? record.name : record.name.split(".")[0];
1874
+ return (0, dns_equal_1.default)(_name, name);
1875
+ }) : [];
1876
+ }
1877
+ isDuplicateRecord(a) {
1878
+ return (b) => a.type === b.type && a.name === b.name && (0, es6_1.default)(a.data, b.data);
1879
+ }
1880
+ unique() {
1881
+ var set = [];
1882
+ return (obj) => ~set.indexOf(obj) ? !1 : (set.push(obj), !0);
1883
+ }
1884
+ };
1885
+ exports.Server = Server;
1886
+ exports.default = Server;
1887
+ }
1888
+ });
1889
+
1890
+ // node_modules/bonjour-service/dist/lib/utils/filter-service.js
1891
+ var require_filter_service = __commonJS({
1892
+ "node_modules/bonjour-service/dist/lib/utils/filter-service.js"(exports) {
1893
+ "use strict";
1894
+ Object.defineProperty(exports, "__esModule", { value: !0 });
1895
+ exports.default = (service, txtQuery) => {
1896
+ if (txtQuery === void 0)
1897
+ return !0;
1898
+ let serviceTxt = service.txt, query = Object.entries(txtQuery).map(([key, value]) => {
1899
+ let queryValue = serviceTxt[key];
1900
+ return !(queryValue === void 0 || value != queryValue);
1901
+ });
1902
+ return query.length == 0 ? !0 : !query.includes(!1);
1903
+ };
1904
+ }
1905
+ });
1906
+
1907
+ // node_modules/bonjour-service/dist/lib/utils/filter-txt.js
1908
+ var require_filter_txt = __commonJS({
1909
+ "node_modules/bonjour-service/dist/lib/utils/filter-txt.js"(exports) {
1910
+ "use strict";
1911
+ Object.defineProperty(exports, "__esModule", { value: !0 });
1912
+ exports.default = (data) => Object.keys(data).filter((key) => !key.includes("binary")).reduce((cur, key) => Object.assign(cur, { [key]: data[key] }), {});
1913
+ }
1914
+ });
1915
+
1916
+ // node_modules/bonjour-service/dist/lib/utils/equal-txt.js
1917
+ var require_equal_txt = __commonJS({
1918
+ "node_modules/bonjour-service/dist/lib/utils/equal-txt.js"(exports) {
1919
+ "use strict";
1920
+ Object.defineProperty(exports, "__esModule", { value: !0 });
1921
+ exports.default = equalTxt;
1922
+ function equalTxt(a, b) {
1923
+ if (a === void 0 || b === void 0)
1924
+ return !1;
1925
+ let aKeys = Object.keys(a), bKeys = Object.keys(b);
1926
+ if (aKeys.length != bKeys.length)
1927
+ return !1;
1928
+ for (let key of aKeys)
1929
+ if (a[key] != b[key])
1930
+ return !1;
1931
+ return !0;
1932
+ }
1933
+ }
1934
+ });
1935
+
1936
+ // node_modules/bonjour-service/dist/lib/browser.js
1937
+ var require_browser = __commonJS({
1938
+ "node_modules/bonjour-service/dist/lib/browser.js"(exports) {
1939
+ "use strict";
1940
+ var __importDefault = exports && exports.__importDefault || function(mod) {
1941
+ return mod && mod.__esModule ? mod : { default: mod };
1942
+ };
1943
+ Object.defineProperty(exports, "__esModule", { value: !0 });
1944
+ exports.Browser = void 0;
1945
+ var dns_txt_1 = __importDefault(require_dns_txt()), dns_equal_1 = __importDefault(require_dns_equal()), events_1 = __require("events"), service_types_1 = require_service_types(), filter_service_1 = __importDefault(require_filter_service()), filter_txt_1 = __importDefault(require_filter_txt()), equal_txt_1 = __importDefault(require_equal_txt()), TLD = ".local", WILDCARD = "_services._dns-sd._udp" + TLD, Browser = class _Browser extends events_1.EventEmitter {
1946
+ constructor(mdns, opts, onup) {
1947
+ if (super(), this.onresponse = void 0, this.serviceMap = {}, this.wildcard = !1, this._services = [], typeof opts == "function")
1948
+ return new _Browser(mdns, null, opts);
1949
+ this.mdns = mdns, this.txt = new dns_txt_1.default(opts !== null && opts.txt != null ? opts.txt : void 0), opts === null || opts.type === void 0 ? (this.name = WILDCARD, this.wildcard = !0) : (this.name = (0, service_types_1.toString)({ name: opts.type, protocol: opts.protocol || "tcp" }) + TLD, opts.name && (this.name = opts.name + "." + this.name), this.wildcard = !1), opts != null && opts.txt !== void 0 && (this.txtQuery = (0, filter_txt_1.default)(opts.txt)), onup && this.on("up", onup), this.start();
1950
+ }
1951
+ start() {
1952
+ if (!(this.onresponse || this.name === void 0)) {
1953
+ var self = this, nameMap = {};
1954
+ this.wildcard || (nameMap[this.name] = !0), this.onresponse = (packet, rinfo) => {
1955
+ self.wildcard && packet.answers.forEach((answer) => {
1956
+ answer.type !== "PTR" || answer.name !== self.name || answer.name in nameMap || (nameMap[answer.data] = !0, self.mdns.query(answer.data, "PTR"));
1957
+ }), Object.keys(nameMap).forEach(function(name) {
1958
+ self.goodbyes(name, packet).forEach(self.removeService.bind(self));
1959
+ var matches = self.buildServicesFor(name, packet, self.txt, rinfo);
1960
+ matches.length !== 0 && matches.forEach((service) => {
1961
+ if (self.serviceMap[service.fqdn]) {
1962
+ self.updateService(service);
1963
+ return;
1964
+ }
1965
+ self.addService(service);
1966
+ });
1967
+ });
1968
+ }, this.mdns.on("response", this.onresponse), this.update();
1969
+ }
1970
+ }
1971
+ stop() {
1972
+ this.onresponse && (this.mdns.removeListener("response", this.onresponse), this.onresponse = void 0);
1973
+ }
1974
+ update() {
1975
+ this.mdns.query(this.name, "PTR");
1976
+ }
1977
+ get services() {
1978
+ return this._services;
1979
+ }
1980
+ addService(service) {
1981
+ (0, filter_service_1.default)(service, this.txtQuery) !== !1 && (this._services.push(service), this.serviceMap[service.fqdn] = !0, this.emit("up", service));
1982
+ }
1983
+ updateService(service) {
1984
+ var _a;
1985
+ if (!(0, equal_txt_1.default)(service.txt, ((_a = this._services.find((s) => (0, dns_equal_1.default)(s.fqdn, service.fqdn))) === null || _a === void 0 ? void 0 : _a.txt) || {})) {
1986
+ if (!(0, filter_service_1.default)(service, this.txtQuery)) {
1987
+ this.removeService(service.fqdn);
1988
+ return;
1989
+ }
1990
+ this._services = this._services.map(function(s) {
1991
+ return (0, dns_equal_1.default)(s.fqdn, service.fqdn) ? service : s;
1992
+ }), this.emit("txt-update", service);
1993
+ }
1994
+ }
1995
+ removeService(fqdn) {
1996
+ var service, index;
1997
+ this._services.some(function(s, i) {
1998
+ if ((0, dns_equal_1.default)(s.fqdn, fqdn))
1999
+ return service = s, index = i, !0;
2000
+ }), !(!service || index === void 0) && (this._services.splice(index, 1), delete this.serviceMap[fqdn], this.emit("down", service));
2001
+ }
2002
+ goodbyes(name, packet) {
2003
+ return packet.answers.concat(packet.additionals).filter((rr) => rr.type === "PTR" && rr.ttl === 0 && (0, dns_equal_1.default)(rr.name, name)).map((rr) => rr.data);
2004
+ }
2005
+ buildServicesFor(name, packet, txt, referer) {
2006
+ var records = packet.answers.concat(packet.additionals).filter((rr) => rr.ttl > 0);
2007
+ return records.filter((rr) => rr.type === "PTR" && (0, dns_equal_1.default)(rr.name, name)).map((ptr) => {
2008
+ let service = {
2009
+ addresses: [],
2010
+ subtypes: []
2011
+ };
2012
+ if (records.filter((rr) => rr.type === "PTR" && (0, dns_equal_1.default)(rr.data, ptr.data) && rr.name.includes("._sub")).forEach((rr) => {
2013
+ let types = (0, service_types_1.toType)(rr.name);
2014
+ service.subtypes.push(types.subtype);
2015
+ }), records.filter((rr) => (rr.type === "SRV" || rr.type === "TXT") && (0, dns_equal_1.default)(rr.name, ptr.data)).forEach((rr) => {
2016
+ if (rr.type === "SRV") {
2017
+ var parts = rr.name.split("."), name2 = parts[0], types = (0, service_types_1.toType)(parts.slice(1, -1).join("."));
2018
+ service.name = name2, service.fqdn = rr.name, service.host = rr.data.target, service.referer = referer, service.port = rr.data.port, service.type = types.name, service.protocol = types.protocol;
2019
+ } else rr.type === "TXT" && (service.rawTxt = rr.data, service.txt = this.txt.decodeAll(rr.data));
2020
+ }), !!service.name)
2021
+ return records.filter((rr) => (rr.type === "A" || rr.type === "AAAA") && (0, dns_equal_1.default)(rr.name, service.host)).forEach((rr) => service.addresses.push(rr.data)), service;
2022
+ }).filter((rr) => !!rr);
2023
+ }
2024
+ };
2025
+ exports.Browser = Browser;
2026
+ exports.default = Browser;
2027
+ }
2028
+ });
2029
+
2030
+ // node_modules/bonjour-service/dist/index.js
2031
+ var require_dist = __commonJS({
2032
+ "node_modules/bonjour-service/dist/index.js"(exports) {
2033
+ "use strict";
2034
+ var __importDefault = exports && exports.__importDefault || function(mod) {
2035
+ return mod && mod.__esModule ? mod : { default: mod };
2036
+ };
2037
+ Object.defineProperty(exports, "__esModule", { value: !0 });
2038
+ exports.Browser = exports.Service = exports.Bonjour = void 0;
2039
+ var registry_1 = __importDefault(require_registry()), mdns_server_1 = __importDefault(require_mdns_server()), browser_1 = __importDefault(require_browser());
2040
+ exports.Browser = browser_1.default;
2041
+ var service_1 = __importDefault(require_service());
2042
+ exports.Service = service_1.default;
2043
+ var Bonjour2 = class {
2044
+ constructor(opts = {}, errorCallback) {
2045
+ this.server = new mdns_server_1.default(opts, errorCallback), this.registry = new registry_1.default(this.server);
2046
+ }
2047
+ publish(opts) {
2048
+ return this.registry.publish(opts);
2049
+ }
2050
+ unpublishAll(callback) {
2051
+ return this.registry.unpublishAll(callback);
2052
+ }
2053
+ find(opts = null, onup) {
2054
+ return new browser_1.default(this.server.mdns, opts, onup);
2055
+ }
2056
+ findOne(opts = null, timeout = 1e4, callback) {
2057
+ let browser = new browser_1.default(this.server.mdns, opts);
2058
+ var timer;
2059
+ return browser.once("up", (service) => {
2060
+ timer !== void 0 && clearTimeout(timer), browser.stop(), callback && callback(service);
2061
+ }), timer = setTimeout(() => {
2062
+ browser.stop(), callback && callback(null);
2063
+ }, timeout), browser;
2064
+ }
2065
+ destroy(callback) {
2066
+ this.registry.destroy(), this.server.mdns.destroy(callback);
2067
+ }
2068
+ };
2069
+ exports.Bonjour = Bonjour2;
2070
+ exports.default = Bonjour2;
2071
+ }
2072
+ });
2073
+
2074
+ // src/main/services/mdns-service.ts
2075
+ var import_bonjour_service = __toESM(require_dist());
2076
+ import { randomBytes } from "crypto";
2077
+ import { EventEmitter } from "events";
2078
+ import { isIP } from "net";
2079
+ import { hostname, networkInterfaces } from "os";
2080
+ var MAX_TS_ADDRESSES = 4, SERVICE_TYPE = "adf-runtime", LEGACY_DAEMON_SERVICE_TYPE = "adf-daemon", FINGERPRINT = /^[A-Z2-7]{4}-[A-Z2-7]{4}$/, PROTO_VERSION = "alf/0.2", DIRECTORY_PATH = "/agents", GOODBYE_FLUSH_MS = 100, MdnsService = class extends EventEmitter {
2081
+ bonjour = null;
2082
+ published = null;
2083
+ discovered = /* @__PURE__ */ new Map();
2084
+ /** Remote-access sightings: fingerprint → source (`mdns:<instance>`, `legacy:<instance>`, `tailnet:<address>`) → sighting. */
2085
+ remotes = /* @__PURE__ */ new Map();
2086
+ selfRuntimeId = null;
2087
+ selfFingerprint = null;
2088
+ base = null;
2089
+ announced = null;
2090
+ announcedRemote = !1;
2091
+ /**
2092
+ * The instance name of a record without the mesh when no alias is set: random
2093
+ * per service, so per network (a network change restarts the service). Nothing
2094
+ * in such a record links it to this runtime on another network.
2095
+ */
2096
+ hiddenToken = randomBytes(6).toString("hex");
2097
+ /** True iff we've successfully published our own service record. */
2098
+ isAnnouncing() {
2099
+ return this.published !== null;
2100
+ }
2101
+ /** True while the published record carries remote access. */
2102
+ isAnnouncingRemote() {
2103
+ return this.published !== null && this.announcedRemote;
2104
+ }
2105
+ async start(opts) {
2106
+ let iface = opts.iface ?? pickMdnsInterface();
2107
+ try {
2108
+ let bonjourOpts = iface ? { interface: iface, bind: "0.0.0.0" } : void 0;
2109
+ this.bonjour = new import_bonjour_service.Bonjour(bonjourOpts);
2110
+ } catch (err) {
2111
+ this.emitUnavailable(err);
2112
+ return;
2113
+ }
2114
+ if (console.log(`[mdns] using interface=${iface ?? "<default/all>"} (bind=${iface ? "0.0.0.0" : "<default>"})`), this.selfRuntimeId = opts.runtimeId, this.base = { port: opts.port, runtimeId: opts.runtimeId, ...opts.runtimeDid ? { runtimeDid: opts.runtimeDid } : {} }, await this.updateAnnouncement(opts), opts.browse)
2115
+ try {
2116
+ let browser = this.bonjour.find({ type: SERVICE_TYPE, protocol: "tcp" });
2117
+ browser.on("up", (service) => this.onServiceUp(service)), browser.on("down", (service) => this.onServiceDown(service));
2118
+ let legacy = this.bonjour.find({ type: LEGACY_DAEMON_SERVICE_TYPE, protocol: "tcp" });
2119
+ legacy.on("up", (service) => this.onLegacyDaemonUp(service)), legacy.on("down", (service) => this.onLegacyDaemonDown(service)), console.log(`[mdns] browsing for _${SERVICE_TYPE}._tcp peers (and legacy _${LEGACY_DAEMON_SERVICE_TYPE}._tcp)`);
2120
+ } catch (err) {
2121
+ console.error("[mdns] browse failed:", err);
2122
+ }
2123
+ }
2124
+ /**
2125
+ * Publish, change or withdraw the one announcement without touching the
2126
+ * browser. bonjour-service cannot change a published TXT record, so a
2127
+ * change (pairing window opened, remote access on) re-publishes.
2128
+ */
2129
+ async updateAnnouncement(next) {
2130
+ let bonjour = this.bonjour, base = this.base;
2131
+ if (!bonjour || !base) return;
2132
+ let mesh = next.mesh ?? !0, remote = next.announce ? next.remote ?? null : null, key = next.announce ? JSON.stringify({ mesh, remote }) : null;
2133
+ if (key !== this.announced) {
2134
+ if (this.published) {
2135
+ let old = this.published;
2136
+ this.published = null, await new Promise((resolve) => {
2137
+ try {
2138
+ old.stop?.(() => resolve()) ?? resolve();
2139
+ } catch {
2140
+ resolve();
2141
+ }
2142
+ setTimeout(resolve, GOODBYE_FLUSH_MS);
2143
+ });
2144
+ }
2145
+ if (this.announced = key, this.announcedRemote = !1, this.selfFingerprint = remote?.fingerprint ?? this.selfFingerprint, !!next.announce)
2146
+ try {
2147
+ let host = ensureLocalSuffix(hostname()), hidden = !mesh && !!remote, txt = hidden ? {} : {
2148
+ runtime_id: base.runtimeId,
2149
+ proto: PROTO_VERSION,
2150
+ directory: DIRECTORY_PATH
2151
+ };
2152
+ if (!hidden && base.runtimeDid && (txt.runtime_did = base.runtimeDid), remote) {
2153
+ txt.v = "1", txt.fp = remote.fingerprint, txt.pair = remote.pairingOpen ? "1" : "0", txt.daemon_port = String(remote.port);
2154
+ let ts = (remote.tailnet ?? []).filter((a) => isIP(a) !== 0).slice(0, MAX_TS_ADDRESSES);
2155
+ ts.length > 0 && (txt.ts = ts.join(",")), hidden || (txt.api = remote.api, txt.name = remote.name);
2156
+ }
2157
+ this.published = bonjour.publish({
2158
+ name: hidden ? remote.alias || `adf-${this.hiddenToken}` : `adf-${base.runtimeId}`,
2159
+ type: SERVICE_TYPE,
2160
+ protocol: "tcp",
2161
+ // A mesh that is not LAN-visible has nothing to reach on its port: the daemon's then.
2162
+ port: hidden ? remote.port : base.port,
2163
+ host,
2164
+ txt,
2165
+ // The name is runtime_id-unique, so the only record that can hold
2166
+ // it is our OWN stale announcement from before a restart — probing
2167
+ // sees that ghost within its TTL and throws "Service name is
2168
+ // already in use on the network" (async, from multicast-dns'
2169
+ // onresponse, so no try/catch reaches it). Skip the probe.
2170
+ probe: !1
2171
+ }), this.announcedRemote = !!remote, console.log(`[mdns] announcing _${SERVICE_TYPE}._tcp as ${host}:${base.port} (runtime_id=${base.runtimeId}${mesh ? "" : ", mesh not visible"}${remote ? `, remote access fp ${remote.fingerprint} on ${remote.port}, pairing ${remote.pairingOpen ? "open" : "closed"}` : ""})`);
2172
+ } catch (err) {
2173
+ console.error("[mdns] publish failed:", err);
2174
+ }
2175
+ }
2176
+ }
2177
+ async stop() {
2178
+ let b = this.bonjour;
2179
+ if (b) {
2180
+ this.bonjour = null;
2181
+ try {
2182
+ await new Promise((resolve) => {
2183
+ try {
2184
+ b.unpublishAll(() => resolve());
2185
+ } catch {
2186
+ resolve();
2187
+ }
2188
+ });
2189
+ } catch {
2190
+ }
2191
+ await new Promise((resolve) => setTimeout(resolve, GOODBYE_FLUSH_MS));
2192
+ try {
2193
+ b.destroy();
2194
+ } catch {
2195
+ }
2196
+ this.published = null, this.announced = null, this.announcedRemote = !1, this.discovered.clear(), this.remotes.clear();
2197
+ }
2198
+ }
2199
+ /**
2200
+ * The feed: every ADF computer found, with both capabilities. The mesh
2201
+ * list is the entries with a mesh; Studio's Discovered list and
2202
+ * `adf pair` are the entries with remote access.
2203
+ */
2204
+ peers() {
2205
+ let out = [], byAddress = /* @__PURE__ */ new Map(), clashEntry = (fp, sighting, count) => ({
2206
+ key: `fp:${fp}@${sighting.address}`,
2207
+ name: sighting.name,
2208
+ source: sighting.kind === "tailnet" ? "tailnet" : "mdns",
2209
+ mesh: null,
2210
+ remote: { url: buildBaseUrl(sighting.address, sighting.port), port: sighting.port, fingerprint: fp, pairingOpen: sighting.pairingOpen, kind: sighting.kind, clash: count }
2211
+ });
2212
+ for (let [fp, sightings] of this.remotes) {
2213
+ let list = [...sightings.values()];
2214
+ if (list.length === 0) continue;
2215
+ let lan = list.filter((s) => s.kind === "lan"), tailnet = list.filter((s) => s.kind === "tailnet"), merged = lan.length === 1 && tailnet.length === 1 && lan[0].listed.includes(tailnet[0].address.toLowerCase());
2216
+ if (!merged && list.length > 1) {
2217
+ for (let s of list) out.push(clashEntry(fp, s, list.length));
2218
+ continue;
2219
+ }
2220
+ let best = merged ? tailnet[0] : list[0], entry = {
2221
+ key: `fp:${fp}`,
2222
+ // Merged: the tailnet host's own name (authenticated address), not the LAN record's.
2223
+ name: best.name,
2224
+ source: best.kind === "tailnet" ? "tailnet" : "mdns",
2225
+ mesh: null,
2226
+ remote: { url: buildBaseUrl(best.address, best.port), port: best.port, fingerprint: fp, pairingOpen: list.some((s) => s.pairingOpen), kind: best.kind, clash: null }
2227
+ };
2228
+ out.push(entry), byAddress.set(best.address.toLowerCase(), entry);
2229
+ }
2230
+ for (let runtime of this.discovered.values()) {
2231
+ let host = "";
2232
+ try {
2233
+ host = new URL(runtime.url).hostname.replace(/^\[|\]$/g, "").toLowerCase();
2234
+ } catch {
2235
+ }
2236
+ let entry = host ? byAddress.get(host) : void 0;
2237
+ if (entry && !entry.mesh) {
2238
+ entry.key = runtime.runtime_id, entry.mesh = { url: runtime.url, port: runtime.port }, entry.source === "mdns" && (entry.source = runtime.source ?? "mdns");
2239
+ continue;
2240
+ }
2241
+ out.push({
2242
+ key: runtime.runtime_id,
2243
+ name: runtime.host.replace(/\.local\.?$/, ""),
2244
+ source: runtime.source ?? "mdns",
2245
+ mesh: { url: runtime.url, port: runtime.port },
2246
+ remote: null
2247
+ });
2248
+ }
2249
+ return out.sort((a, b) => a.name.localeCompare(b.name) || a.key.localeCompare(b.key));
2250
+ }
2251
+ /** The tailnet sweep found an ADF daemon with remote access on (GET /remote/hello, already bounded and checked). */
2252
+ upsertTailnetDaemon(found) {
2253
+ if (!FINGERPRINT.test(found.fingerprint) || found.fingerprint === this.selfFingerprint) return;
2254
+ let name = peerName(found.name) ?? found.fingerprint;
2255
+ this.setSighting(found.fingerprint, `tailnet:${found.address}`, { name, address: found.address, port: found.port, pairingOpen: found.pairingOpen, kind: "tailnet", runtimeId: null, listed: [] }) && this.emit("peers_changed");
2256
+ }
2257
+ /** After a tailnet sweep: sightings it no longer found (`<fingerprint>@<address>`) go. */
2258
+ expireTailnetDaemons(seen) {
2259
+ let changed = !1;
2260
+ for (let [fp, sightings] of this.remotes) {
2261
+ for (let [source, s] of sightings)
2262
+ s.kind !== "tailnet" || seen.has(`${fp}@${s.address}`) || (sightings.delete(source), changed = !0);
2263
+ sightings.size === 0 && this.remotes.delete(fp);
2264
+ }
2265
+ changed && this.emit("peers_changed");
2266
+ }
2267
+ /** Store a sighting; true when something changed. */
2268
+ setSighting(fp, source, sighting) {
2269
+ let sightings = this.remotes.get(fp) ?? /* @__PURE__ */ new Map(), before = JSON.stringify(sightings.get(source) ?? null);
2270
+ return sightings.set(source, sighting), this.remotes.set(fp, sightings), before !== JSON.stringify(sighting);
2271
+ }
2272
+ /** Drop sightings that match; true when something went. */
2273
+ dropSightings(match) {
2274
+ let changed = !1;
2275
+ for (let [fp, sightings] of this.remotes) {
2276
+ for (let [source, s] of sightings)
2277
+ match(fp, source, s) && (sightings.delete(source), changed = !0);
2278
+ sightings.size === 0 && this.remotes.delete(fp);
2279
+ }
2280
+ return changed;
2281
+ }
2282
+ getDiscoveredRuntimes() {
2283
+ return [...this.discovered.values()];
2284
+ }
2285
+ getDiscovered(runtimeId) {
2286
+ return this.discovered.get(runtimeId);
2287
+ }
2288
+ /**
2289
+ * Insert/refresh a peer found outside mDNS (tailnet sweep, manual list).
2290
+ * mDNS entries win by default — a same-broadcast-domain route beats an
2291
+ * overlay route to the same runtime — so an external upsert never clobbers
2292
+ * one. `force` overrides that: the browser only ever removes an entry on an
2293
+ * explicit goodbye packet, so after a network move a dead LAN entry would
2294
+ * shadow a working overlay route forever. The tailnet sweep passes `force`
2295
+ * once it has probed the mDNS route and found it dead.
2296
+ */
2297
+ upsertExternalPeer(entry, opts) {
2298
+ if (entry.runtime_id === this.selfRuntimeId) return;
2299
+ let now = Date.now(), existing = this.discovered.get(entry.runtime_id);
2300
+ if (existing && (existing.source ?? "mdns") === "mdns" && !opts?.force)
2301
+ return;
2302
+ let next = {
2303
+ runtime_id: entry.runtime_id,
2304
+ runtime_did: entry.runtime_did ?? existing?.runtime_did,
2305
+ proto: entry.proto ?? PROTO_VERSION,
2306
+ directory_path: DIRECTORY_PATH,
2307
+ host: entry.host,
2308
+ port: entry.port,
2309
+ url: entry.url,
2310
+ first_seen: existing?.first_seen ?? now,
2311
+ last_seen: now,
2312
+ source: entry.source
2313
+ }, isNew = !existing || existing.url !== next.url;
2314
+ this.discovered.set(entry.runtime_id, next), isNew && (this.emit("discovered", next), this.emit("peers_changed"));
2315
+ }
2316
+ /** Remove an externally-sourced peer (never touches mDNS entries). */
2317
+ removeExternalPeer(runtimeId) {
2318
+ let entry = this.discovered.get(runtimeId);
2319
+ !entry || (entry.source ?? "mdns") === "mdns" || (this.discovered.delete(runtimeId), this.emit("expired", entry), this.emit("peers_changed"));
2320
+ }
2321
+ // --- Internal ---
2322
+ onServiceUp(service) {
2323
+ let txt = service.txt ?? {}, runtimeId = typeof txt.runtime_id == "string" ? txt.runtime_id : void 0;
2324
+ if (!txtWithinBounds(txt)) return;
2325
+ if (!runtimeId) {
2326
+ this.onRemoteOnlyUp(service, txt);
2327
+ return;
2328
+ }
2329
+ if (runtimeId === this.selfRuntimeId) return;
2330
+ let runtimeDid = typeof txt.runtime_did == "string" ? txt.runtime_did : void 0, proto = typeof txt.proto == "string" ? txt.proto : PROTO_VERSION, directoryPath = typeof txt.directory == "string" ? txt.directory : DIRECTORY_PATH, host = service.host || service.fqdn || "", port = service.port;
2331
+ if (!host || !port) return;
2332
+ let referer = service.referer, isPrivateV4 = (ip) => /^(10\.|192\.168\.|172\.(1[6-9]|2\d|3[01])\.)/.test(ip), addresses = service.addresses ?? [], reachHost = referer?.address ?? addresses.find(isPrivateV4) ?? host, fp = txtString(txt, "fp"), daemonPort = Number(txtString(txt, "daemon_port")), source = `mdns:${service.name}`, remoteAccess = !!fp && FINGERPRINT.test(fp) && txtString(txt, "v") === "1" && Number.isInteger(daemonPort) && daemonPort > 0 && daemonPort < 65536;
2333
+ if (remoteAccess) {
2334
+ let name = peerName(txtString(txt, "name")) ?? peerName(host.replace(/\.local\.?$/, "")) ?? fp;
2335
+ this.dropSightings((f, src) => src === source && f !== fp), this.setSighting(fp, source, { name, address: reachHost, port: daemonPort, pairingOpen: txtString(txt, "pair") === "1", kind: "lan", runtimeId, listed: listedAddresses(service) });
2336
+ } else
2337
+ this.dropSightings((_f, src, s) => src === source || s.runtimeId === runtimeId);
2338
+ let now = Date.now(), existing = this.discovered.get(runtimeId);
2339
+ if (txtString(txt, "mesh") === "0") {
2340
+ existing && (this.discovered.delete(runtimeId), this.emit("expired", existing)), this.emit("peers_changed");
2341
+ return;
2342
+ }
2343
+ let entry = {
2344
+ runtime_id: runtimeId,
2345
+ runtime_did: runtimeDid,
2346
+ proto,
2347
+ directory_path: directoryPath,
2348
+ host,
2349
+ port,
2350
+ url: buildBaseUrl(reachHost, port),
2351
+ first_seen: existing?.first_seen ?? now,
2352
+ last_seen: now,
2353
+ ...remoteAccess ? { fingerprint: fp, daemon_port: daemonPort } : {}
2354
+ };
2355
+ this.discovered.set(runtimeId, entry), this.emit("discovered", entry), this.emit("peers_changed");
2356
+ }
2357
+ /** TODO(remove after the next release): `_adf-daemon._tcp` of this PR's intermediate commits. */
2358
+ onLegacyDaemonUp(service) {
2359
+ let txt = service.txt ?? {};
2360
+ if (!txtWithinBounds(txt)) return;
2361
+ let fp = txtString(txt, "fp");
2362
+ if (!fp || !FINGERPRINT.test(fp) || txtString(txt, "v") !== "1" || !service.port || fp === this.selfFingerprint) return;
2363
+ let address = sourceAddress(service);
2364
+ if (!address) return;
2365
+ let name = peerName(service.name) ?? fp;
2366
+ this.setSighting(fp, `legacy:${service.name}`, { name, address, port: service.port, pairingOpen: txtString(txt, "pair") === "1", kind: "lan", runtimeId: null, listed: listedAddresses(service) }), this.emit("peers_changed");
2367
+ }
2368
+ onLegacyDaemonDown(service) {
2369
+ let fp = txtString(service.txt ?? {}, "fp");
2370
+ this.dropSightings((f, src) => service.name ? src === `legacy:${service.name}` : f === fp && src.startsWith("legacy:")) && this.emit("peers_changed");
2371
+ }
2372
+ /** A record with remote access only (the mesh hidden): no runtime id, keyed by fingerprint. */
2373
+ onRemoteOnlyUp(service, txt) {
2374
+ let fp = txtString(txt, "fp"), daemonPort = Number(txtString(txt, "daemon_port"));
2375
+ if (!fp || !FINGERPRINT.test(fp) || txtString(txt, "v") !== "1" || !Number.isInteger(daemonPort) || daemonPort <= 0 || daemonPort >= 65536 || fp === this.selfFingerprint) return;
2376
+ let address = sourceAddress(service);
2377
+ if (!address) return;
2378
+ let host = (service.host || "").replace(/\.local\.?$/, ""), name = (/^adf-[0-9a-f]{12}$/.test(service.name ?? "") ? null : peerName(service.name)) ?? peerName(host) ?? fp, source = `mdns:${service.name}`;
2379
+ this.dropSightings((f, src) => src === source && f !== fp), this.setSighting(fp, source, { name, address, port: daemonPort, pairingOpen: txtString(txt, "pair") === "1", kind: "lan", runtimeId: null, listed: listedAddresses(service) }), this.emit("peers_changed");
2380
+ }
2381
+ onServiceDown(service) {
2382
+ let txt = service.txt ?? {}, runtimeId = typeof txt.runtime_id == "string" ? txt.runtime_id : void 0, fp = txtString(txt, "fp");
2383
+ this.dropSightings((f, src, s) => (service.name ? src === `mdns:${service.name}` : !1) || !!runtimeId && s.runtimeId === runtimeId || !service.name && !runtimeId && f === fp && src.startsWith("mdns:"));
2384
+ let entry = runtimeId ? this.discovered.get(runtimeId) : void 0;
2385
+ runtimeId && entry && (this.discovered.delete(runtimeId), this.emit("expired", entry)), this.emit("peers_changed");
2386
+ }
2387
+ emitUnavailable(err) {
2388
+ let reason = err instanceof Error ? err.message : String(err);
2389
+ console.log(`[mdns] unavailable: ${reason}. LAN discovery disabled; direct-address messaging still works.`), this.emit("unavailable", { reason });
2390
+ }
2391
+ }, VIRTUAL_IFACE_RE = /^(lo\d*|gif\d*|stf\d*|awdl\d*|llw\d*|anpi\d*|ap\d+|bridge\d*|utun\d*|ipsec\d*|ppp\d*|tun\d*|tap\d*|veth|vmnet\d*|vboxnet\d*|docker\d*|br-|wg\d*|tailscale\d*|zt[a-z0-9]+)/i, VIRTUAL_IFACE_WIN_RE = /(vEthernet|VMware|VirtualBox|Hyper-?V|WSL|Bluetooth|Loopback|Npcap|Pseudo-|Wintun|Tailscale|TAP-Windows|OpenVPN)/i;
2392
+ function isRFC1918(ipv4) {
2393
+ let [o1, o2] = ipv4.split(".").map(Number);
2394
+ return o1 === 10 || o1 === 172 && o2 >= 16 && o2 <= 31 || o1 === 192 && o2 === 168;
2395
+ }
2396
+ function isCGNAT(ipv4) {
2397
+ let [o1, o2] = ipv4.split(".").map(Number);
2398
+ return o1 === 100 && o2 >= 64 && o2 <= 127;
2399
+ }
2400
+ function pickMdnsInterface(ifaces = networkInterfaces(), envOverride = process.env.ADF_MDNS_INTERFACE) {
2401
+ if (envOverride && envOverride.trim()) return envOverride.trim();
2402
+ let candidates = [];
2403
+ for (let [name, addrs] of Object.entries(ifaces))
2404
+ if (addrs && !(VIRTUAL_IFACE_RE.test(name) || VIRTUAL_IFACE_WIN_RE.test(name)))
2405
+ for (let a of addrs) {
2406
+ if (a.internal || a.family !== "IPv4" || isCGNAT(a.address) || !isRFC1918(a.address)) continue;
2407
+ let score = 0;
2408
+ /^en\d|^eth\d|^wl/i.test(name) && (score += 10), /^(Ethernet|Wi-?Fi)/i.test(name) && (score += 10), candidates.push({ name, address: a.address, score });
2409
+ }
2410
+ if (candidates.length !== 0)
2411
+ return candidates.sort((a, b) => b.score - a.score), candidates[0].address;
2412
+ }
2413
+ function ensureLocalSuffix(host) {
2414
+ if (!host) return "adf-runtime.local";
2415
+ let lower = host.toLowerCase();
2416
+ return lower.endsWith(".local") || lower.endsWith(".local.") || host.includes(":") ? host : `${host}.local`;
2417
+ }
2418
+ function txtString(txt, key) {
2419
+ let value = txt[key];
2420
+ return typeof value == "string" ? value : typeof value == "number" || typeof value == "boolean" ? String(value) : value instanceof Uint8Array ? Buffer.from(value).toString("utf8") : null;
2421
+ }
2422
+ function listedAddresses(service) {
2423
+ return [...(service.addresses ?? []).filter((a) => typeof a == "string" && a.length <= 64).slice(0, 32), ...tsAddresses(service.txt ?? {})].map((a) => a.toLowerCase());
2424
+ }
2425
+ function tsAddresses(txt) {
2426
+ let raw = txtString(txt, "ts");
2427
+ return raw ? raw.split(",").map((a) => a.trim()).filter((a) => a.length > 0 && a.length <= 64 && isIP(a) !== 0).slice(0, MAX_TS_ADDRESSES) : [];
2428
+ }
2429
+ function sourceAddress(service) {
2430
+ let referer = service.referer?.address, addresses = (service.addresses ?? []).filter((a) => typeof a == "string" && a.length <= 64), address = referer ?? addresses.find((ip) => /^(10\.|192\.168\.|172\.(1[6-9]|2\d|3[01])\.)/.test(ip)) ?? addresses[0];
2431
+ return address && address.length <= 64 ? address : null;
2432
+ }
2433
+ function buildBaseUrl(host, port) {
2434
+ return `http://${host.includes(":") && !/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/.test(host) ? `[${host}]` : host}:${port}`;
2435
+ }
2436
+
2437
+ export {
2438
+ MdnsService,
2439
+ VIRTUAL_IFACE_RE,
2440
+ VIRTUAL_IFACE_WIN_RE,
2441
+ isRFC1918,
2442
+ isCGNAT
2443
+ };