dns-message 0.1.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.
@@ -0,0 +1,1504 @@
1
+ Object.defineProperty(exports, "__esModule", {
2
+ value: !0
3
+ });
4
+
5
+ let t = function(t) {
6
+ t[t.QUERY = 0] = "QUERY";
7
+ t[t.RESPONSE = 32768] = "RESPONSE";
8
+ return t;
9
+ }({});
10
+
11
+ let e = function(t) {
12
+ t[t.A = 1] = "A";
13
+ t[t.NS = 2] = "NS";
14
+ t[t.CNAME = 5] = "CNAME";
15
+ t[t.SOA = 6] = "SOA";
16
+ t[t.NULL = 10] = "NULL";
17
+ t[t.PTR = 12] = "PTR";
18
+ t[t.HINFO = 13] = "HINFO";
19
+ t[t.MX = 15] = "MX";
20
+ t[t.TXT = 16] = "TXT";
21
+ t[t.RP = 17] = "RP";
22
+ t[t.AFSDB = 18] = "AFSDB";
23
+ t[t.SIG = 24] = "SIG";
24
+ t[t.KEY = 25] = "KEY";
25
+ t[t.AAAA = 28] = "AAAA";
26
+ t[t.LOC = 29] = "LOC";
27
+ t[t.SRV = 33] = "SRV";
28
+ t[t.NAPTR = 35] = "NAPTR";
29
+ t[t.KX = 36] = "KX";
30
+ t[t.CERT = 37] = "CERT";
31
+ t[t.DNAME = 39] = "DNAME";
32
+ t[t.OPT = 41] = "OPT";
33
+ t[t.APL = 42] = "APL";
34
+ t[t.DS = 43] = "DS";
35
+ t[t.SSHFP = 44] = "SSHFP";
36
+ t[t.IPSECKEY = 45] = "IPSECKEY";
37
+ t[t.RRSIG = 46] = "RRSIG";
38
+ t[t.NSEC = 47] = "NSEC";
39
+ t[t.DNSKEY = 48] = "DNSKEY";
40
+ t[t.DHCID = 49] = "DHCID";
41
+ t[t.NSEC3 = 50] = "NSEC3";
42
+ t[t.NSEC3PARAM = 51] = "NSEC3PARAM";
43
+ t[t.TLSA = 52] = "TLSA";
44
+ t[t.HIP = 55] = "HIP";
45
+ t[t.CDS = 59] = "CDS";
46
+ t[t.CDNSKEY = 60] = "CDNSKEY";
47
+ t[t.SVCB = 64] = "SVCB";
48
+ t[t.HTTPS = 65] = "HTTPS";
49
+ t[t.SPF = 99] = "SPF";
50
+ t[t.TKEY = 249] = "TKEY";
51
+ t[t.TSIG = 250] = "TSIG";
52
+ t[t.IXFR = 251] = "IXFR";
53
+ t[t.AXFR = 252] = "AXFR";
54
+ t[t.ANY = 255] = "ANY";
55
+ t[t.CAA = 257] = "CAA";
56
+ t[t.TA = 32768] = "TA";
57
+ t[t.DLV = 32769] = "DLV";
58
+ return t;
59
+ }({});
60
+
61
+ let n = function(t) {
62
+ t[t.IN = 1] = "IN";
63
+ t[t.CS = 2] = "CS";
64
+ t[t.CH = 3] = "CH";
65
+ t[t.HS = 4] = "HS";
66
+ t[t.ANY = 255] = "ANY";
67
+ return t;
68
+ }({});
69
+
70
+ let r = function(t) {
71
+ t[t.NOERR = 0] = "NOERR";
72
+ t[t.FORMERR = 1] = "FORMERR";
73
+ t[t.SERVFAIL = 2] = "SERVFAIL";
74
+ t[t.NXDOMAIN = 3] = "NXDOMAIN";
75
+ t[t.NOTIMP = 4] = "NOTIMP";
76
+ t[t.REFUSED = 5] = "REFUSED";
77
+ t[t.YXDOMAIN = 6] = "YXDOMAIN";
78
+ t[t.YXRRSET = 7] = "YXRRSET";
79
+ t[t.NXRRSET = 8] = "NXRRSET";
80
+ t[t.NOTAUTH = 9] = "NOTAUTH";
81
+ t[t.NOTZONE = 10] = "NOTZONE";
82
+ t[t.CHECKING_DISABLED = 16] = "CHECKING_DISABLED";
83
+ t[t.AUTHENTIC_DATA = 32] = "AUTHENTIC_DATA";
84
+ t[t.RECURSION_AVAILABLE = 128] = "RECURSION_AVAILABLE";
85
+ t[t.RECURSION_DESIRED = 256] = "RECURSION_DESIRED";
86
+ t[t.TRUNCATED_RESPONSE = 512] = "TRUNCATED_RESPONSE";
87
+ t[t.AUTHORITATIVE_ANSWER = 1024] = "AUTHORITATIVE_ANSWER";
88
+ return t;
89
+ }({});
90
+
91
+ let s = function(t) {
92
+ t[t.OPTION_0 = 0] = "OPTION_0";
93
+ t[t.LLQ = 1] = "LLQ";
94
+ t[t.UL = 2] = "UL";
95
+ t[t.NSID = 3] = "NSID";
96
+ t[t.OPTION_4 = 4] = "OPTION_4";
97
+ t[t.DAU = 5] = "DAU";
98
+ t[t.DHU = 6] = "DHU";
99
+ t[t.N3U = 7] = "N3U";
100
+ t[t.CLIENT_SUBNET = 8] = "CLIENT_SUBNET";
101
+ t[t.EXPIRE = 9] = "EXPIRE";
102
+ t[t.COOKIE = 10] = "COOKIE";
103
+ t[t.TCP_KEEPALIVE = 11] = "TCP_KEEPALIVE";
104
+ t[t.PADDING = 12] = "PADDING";
105
+ t[t.CHAIN = 13] = "CHAIN";
106
+ t[t.KEY_TAG = 14] = "KEY_TAG";
107
+ t[t.DEVICEID = 26946] = "DEVICEID";
108
+ t[t.OPTION_65535 = 65535] = "OPTION_65535";
109
+ return t;
110
+ }({});
111
+
112
+ const a = new TextEncoder;
113
+
114
+ const i = new TextDecoder;
115
+
116
+ const o = "undefined" != typeof Buffer ? t => Buffer.byteLength(t) : t => {
117
+ let e = t.length;
118
+ for (let n = e - 1; n >= 0; n--) {
119
+ const r = t.charCodeAt(n);
120
+ if (r > 127 && r <= 2047) {
121
+ e++;
122
+ } else if (r > 2047 && r <= 65535) {
123
+ e += 2;
124
+ }
125
+ if (r >= 56320 && r <= 57343) {
126
+ n--;
127
+ }
128
+ }
129
+ return e;
130
+ };
131
+
132
+ const c = {
133
+ bytes(t) {
134
+ let e = 2;
135
+ switch (t) {
136
+ case "":
137
+ case ".":
138
+ case "..":
139
+ return 1;
140
+
141
+ default:
142
+ if ("." === t[0]) {
143
+ e--;
144
+ }
145
+ if ("." === t[t.length - 1]) {
146
+ e--;
147
+ }
148
+ return e + t.replace(/\\\./g, ".").length;
149
+ }
150
+ },
151
+ write(t, e, n) {
152
+ const r = a.encode(n);
153
+ for (let n = 46 === r[0] ? 1 : 0, s = 0; n < r.byteLength; n = s + 1) {
154
+ s = r.indexOf(46, n);
155
+ while (s > -1 && 92 === r[s - 1]) {
156
+ s = r.indexOf(46, s + 1);
157
+ }
158
+ if (-1 === s) {
159
+ s = r.byteLength;
160
+ }
161
+ if (s === n) {
162
+ continue;
163
+ }
164
+ let a = e + 1;
165
+ for (let e = n; e < s; e++) {
166
+ if (92 === r[e] && 46 === r[e + 1]) {
167
+ e++;
168
+ }
169
+ t.setUint8(a++, r[e]);
170
+ }
171
+ t.setUint8(e, a - e - 1);
172
+ e = a;
173
+ n = s + 1;
174
+ }
175
+ return e + 1;
176
+ },
177
+ read(t, e) {
178
+ let {offset: n, length: r} = e;
179
+ const s = [];
180
+ while (e.offset - n < r) {
181
+ const a = t.getUint8(e.offset);
182
+ advance(e, 1);
183
+ if (0 === a) {
184
+ break;
185
+ } else if (!(192 & a)) {
186
+ const n = i.decode(sliceView(t, e, a));
187
+ s.push(n.replace(/\./g, "\\."));
188
+ } else if (!(192 & ~a)) {
189
+ const a = e.offset - n;
190
+ n = e.offset;
191
+ r = e.length;
192
+ e.offset = t.getUint16(e.offset - 1) - 49152;
193
+ e.length = r - a;
194
+ const i = c.read(t, e);
195
+ if (i && "." !== i) {
196
+ s.push(i);
197
+ }
198
+ e.offset = n;
199
+ e.length = r;
200
+ break;
201
+ }
202
+ }
203
+ return s.join(".") || ".";
204
+ }
205
+ };
206
+
207
+ const f = {
208
+ bytes: t => "string" == typeof t ? o(t) : t.byteLength,
209
+ write(t, e, n) {
210
+ const r = "string" == typeof n ? a.encode(n) : n;
211
+ new Uint8Array(t.buffer, t.byteOffset + e, r.byteLength).set(r);
212
+ return e += r.byteLength;
213
+ },
214
+ read: (t, e) => sliceView(t, e)
215
+ };
216
+
217
+ const d = {
218
+ bytes: t => o(t) + 1,
219
+ write(t, e, n) {
220
+ const r = a.encode(n);
221
+ t.setUint8(e++, r.byteLength);
222
+ return f.write(t, e, r);
223
+ },
224
+ read(t, e) {
225
+ const n = t.getUint8(e.offset);
226
+ advance(e, 1);
227
+ return i.decode(sliceView(t, e, n));
228
+ }
229
+ };
230
+
231
+ const u = {
232
+ bytes(t) {
233
+ const e = [];
234
+ for (let n = 0; n < t.length; n++) {
235
+ e[t[n] >> 8] = Math.max(e[t[n] >> 8] || 0, 255 & t[n]);
236
+ }
237
+ let n = 0;
238
+ for (let t = 0; t < e.length; t++) {
239
+ if (null != e[t]) {
240
+ n += 2 + Math.ceil((e[t] + 1) / 8);
241
+ }
242
+ }
243
+ return n;
244
+ },
245
+ write(t, e, n) {
246
+ const r = [];
247
+ for (let t = 0; t < n.length; t++) {
248
+ (r[n[t] >> 8] || (r[n[t] >> 8] = []))[n[t] >> 3 & 31] |= 1 << 7 - (7 & n[t]);
249
+ }
250
+ for (let n = 0; n < r.length; n++) {
251
+ const s = r[n];
252
+ if (null != s) {
253
+ t.setUint8(e++, n);
254
+ t.setUint8(e++, s.length);
255
+ for (let n = 0; n < s.length; n++) {
256
+ t.setUint8(e++, s[n]);
257
+ }
258
+ }
259
+ }
260
+ return e;
261
+ },
262
+ read(t, e) {
263
+ const {offset: n, length: r} = e;
264
+ const s = [];
265
+ while (e.offset - n < r) {
266
+ const n = t.getUint8(e.offset);
267
+ const r = t.getUint8(e.offset + 1);
268
+ for (let a = 0; a < r; a++) {
269
+ const r = t.getUint8(e.offset + 2 + a);
270
+ for (let t = 0; t < 8; t++) {
271
+ if (r & 1 << 7 - t) {
272
+ s.push(n << 8 | a << 3 | t);
273
+ }
274
+ }
275
+ }
276
+ advance(e, 2 + r);
277
+ }
278
+ return s;
279
+ }
280
+ };
281
+
282
+ const l = {
283
+ bytes: () => 4,
284
+ write(t, e, n) {
285
+ const r = n.split(".", 4);
286
+ for (let n = 0; n < 4; n++) {
287
+ t.setUint8(e++, parseInt(r[n], 10));
288
+ }
289
+ return e;
290
+ },
291
+ read(t, e) {
292
+ const n = Math.min(e.length, 4);
293
+ const r = new Array(4).fill(0).map((r, s) => s < n ? t.getUint8(e.offset + s) : 0).join(".");
294
+ advance(e, n);
295
+ return r;
296
+ }
297
+ };
298
+
299
+ const g = {
300
+ bytes: () => 2,
301
+ write(t, e, n) {
302
+ t.setUint16(e, n);
303
+ return e + 2;
304
+ },
305
+ read(t, e) {
306
+ const n = t.getUint16(e.offset);
307
+ advance(e, 2);
308
+ return n;
309
+ }
310
+ };
311
+
312
+ const y = {
313
+ bytes: () => 16,
314
+ write(t, e, n) {
315
+ const r = n.indexOf("::");
316
+ const s = (r > -1 ? n.slice(0, r) : n).split(":");
317
+ const a = r > -1 ? n.slice(r + 2).split(":") : [];
318
+ const i = a.length > 0 && a[a.length - 1].includes(".") ? a.pop() : void 0;
319
+ for (let n = 0; n < s.length; n++) {
320
+ t.setUint16(e, parseInt(s[n], 16));
321
+ e += 2;
322
+ }
323
+ for (let n = 8 - (s.length + a.length + (i ? 2 : 0)); n > 0; n--) {
324
+ t.setUint16(e, 0);
325
+ e += 2;
326
+ }
327
+ for (let n = 0; n < a.length; n++) {
328
+ t.setUint16(e, parseInt(a[n], 16));
329
+ e += 2;
330
+ }
331
+ if (i) {
332
+ const n = i.split(".", 4).map(t => parseInt(t, 10));
333
+ t.setUint16(e, n[0] << 8 | n[1]);
334
+ t.setUint16(e + 2, n[2] << 8 | n[3]);
335
+ e += 4;
336
+ }
337
+ return e;
338
+ },
339
+ read(t, e) {
340
+ let n = "";
341
+ const r = Math.min(e.length, 16);
342
+ for (let s = 0; s < r; s += 2) {
343
+ if (0 !== s) {
344
+ n += ":";
345
+ }
346
+ n += t.getUint16(e.offset + s).toString(16);
347
+ }
348
+ advance(e, r);
349
+ return n.replace(/(^|:)0(:0)*:0(:|$)/, "$1::$3").replace(/:{3,4}/, "::");
350
+ }
351
+ };
352
+
353
+ const withRDLength = t => ({
354
+ bytes: e => t.bytes(e) + 2,
355
+ write(e, n, r) {
356
+ const s = n;
357
+ n = t.write(e, n + 2, r);
358
+ e.setUint16(s, n - s - 2);
359
+ return n;
360
+ },
361
+ read(e, n) {
362
+ const {offset: r, length: s} = n;
363
+ const a = n.length = e.getUint16(n.offset);
364
+ n.offset += 2;
365
+ const i = t.read(e, n);
366
+ n.offset = r + 2 + a;
367
+ n.length = s;
368
+ return i;
369
+ }
370
+ });
371
+
372
+ const array = t => ({
373
+ bytes(e) {
374
+ let n = 0;
375
+ for (let r = 0; null != e && r < e.length; r++) {
376
+ n += t.bytes(e[r]);
377
+ }
378
+ return n;
379
+ },
380
+ write(e, n, r) {
381
+ for (let s = 0; null != r && s < r.length; s++) {
382
+ n = t.write(e, n, r[s]);
383
+ }
384
+ return n;
385
+ },
386
+ read(e, n) {
387
+ const {offset: r, length: s} = n;
388
+ const a = [];
389
+ while (n.offset - r < s) {
390
+ a.push(t.read(e, n));
391
+ }
392
+ return a;
393
+ }
394
+ });
395
+
396
+ const advance = (t, e) => {
397
+ t.offset += e;
398
+ t.length -= e;
399
+ };
400
+
401
+ const sliceView = (t, e, n = e.length) => {
402
+ const r = new Uint8Array(t.buffer, t.byteOffset + e.offset, n);
403
+ advance(e, n);
404
+ return r;
405
+ };
406
+
407
+ const U = 32768;
408
+
409
+ const h = {
410
+ bytes: t => c.bytes(t.name) + 4,
411
+ write(t, e, r) {
412
+ let s = r.class || n.IN;
413
+ if (r.qu) {
414
+ s |= U;
415
+ }
416
+ e = c.write(t, e, r.name);
417
+ t.setUint16(e, r.type);
418
+ t.setUint16(e + 2, s);
419
+ return e += 4;
420
+ },
421
+ read(t, e) {
422
+ const r = c.read(t, e);
423
+ const s = t.getUint16(e.offset);
424
+ let a = t.getUint16(e.offset + 2) || n.ANY;
425
+ let i = !1;
426
+ if (a !== n.ANY && a & U) {
427
+ a &= -32769;
428
+ i = !0;
429
+ }
430
+ advance(e, 4);
431
+ return {
432
+ name: r,
433
+ type: s,
434
+ class: a,
435
+ qu: i
436
+ };
437
+ }
438
+ };
439
+
440
+ let p = function(t) {
441
+ t[t.v4 = 1] = "v4";
442
+ t[t.v6 = 2] = "v6";
443
+ return t;
444
+ }({});
445
+
446
+ const w = withRDLength({
447
+ bytes: t => f.bytes(t.data),
448
+ write: (t, e, n) => f.write(t, e, n.data),
449
+ read: (t, e) => ({
450
+ code: s.OPTION_0,
451
+ data: f.read(t, e)
452
+ })
453
+ });
454
+
455
+ const b = "(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])";
456
+
457
+ const E = new RegExp(`^${`(?:${b}\\.){3}${b}`}$`);
458
+
459
+ const A = withRDLength({
460
+ bytes: t => Math.ceil((t.sourcePrefixLength || 0) / 8) + 4,
461
+ write(t, e, n) {
462
+ const r = n.sourcePrefixLength || 0;
463
+ const s = n.scopePrefixLength || 0;
464
+ const a = n.family || (E.test(n.ip) ? p.v4 : p.v6);
465
+ const i = Math.ceil(r / 8);
466
+ t.setUint16(e, a);
467
+ t.setUint8(e + 2, r);
468
+ t.setUint8(e + 3, s);
469
+ e += 4;
470
+ const o = ((t, e) => {
471
+ const n = new ArrayBuffer(t.bytes(e));
472
+ const r = t.write(new DataView(n), 0, e);
473
+ return new Uint8Array(n, 0, r);
474
+ })(a === p.v4 ? l : y, n.ip);
475
+ for (let n = 0; n < i; n++) {
476
+ t.setUint8(e++, o[n]);
477
+ }
478
+ return e;
479
+ },
480
+ read(t, e) {
481
+ const n = t.getUint16(e.offset);
482
+ const r = t.getUint8(e.offset + 2);
483
+ const a = t.getUint8(e.offset + 3);
484
+ advance(e, 4);
485
+ return {
486
+ code: s.CLIENT_SUBNET,
487
+ family: n,
488
+ sourcePrefixLength: r,
489
+ scopePrefixLength: a,
490
+ ip: n === p.v4 ? l.read(t, e) : y.read(t, e)
491
+ };
492
+ }
493
+ });
494
+
495
+ const S = withRDLength({
496
+ bytes: t => t.timeout ? 2 : 0,
497
+ write(t, e, n) {
498
+ if (n.timeout) {
499
+ t.setUint16(e, n.timeout);
500
+ e += 2;
501
+ }
502
+ return e;
503
+ },
504
+ read(t, e) {
505
+ if (e.length) {
506
+ const n = t.getUint16(e.offset);
507
+ advance(e, 2);
508
+ return {
509
+ code: s.TCP_KEEPALIVE,
510
+ timeout: n
511
+ };
512
+ } else {
513
+ return {
514
+ code: s.TCP_KEEPALIVE,
515
+ timeout: void 0
516
+ };
517
+ }
518
+ }
519
+ });
520
+
521
+ const N = withRDLength({
522
+ bytes: t => t.length || 0,
523
+ write: (t, e, n) => e + (n.length || 0),
524
+ read(t, e) {
525
+ const {length: n} = e;
526
+ advance(e, n);
527
+ return {
528
+ code: s.PADDING,
529
+ length: n
530
+ };
531
+ }
532
+ });
533
+
534
+ const T = withRDLength({
535
+ bytes: t => 2 * t.tags.length,
536
+ write(t, e, n) {
537
+ for (let r = 0; r < n.tags.length; r++) {
538
+ t.setUint16(e, n.tags[r]);
539
+ e += 2;
540
+ }
541
+ return e;
542
+ },
543
+ read(t, e) {
544
+ const {offset: n, length: r} = e;
545
+ const a = [];
546
+ while (e.offset - n < r) {
547
+ a.push(t.getUint16(e.offset));
548
+ advance(e, 2);
549
+ }
550
+ return {
551
+ code: s.KEY_TAG,
552
+ tags: a
553
+ };
554
+ }
555
+ });
556
+
557
+ const isUnknownOpt = t => !!t.data;
558
+
559
+ const I = {
560
+ bytes(t) {
561
+ if (isUnknownOpt(t)) {
562
+ return w.bytes(t) + 2;
563
+ }
564
+ switch (t.code) {
565
+ case s.CLIENT_SUBNET:
566
+ return A.bytes(t) + 2;
567
+
568
+ case s.TCP_KEEPALIVE:
569
+ return S.bytes(t) + 2;
570
+
571
+ case s.PADDING:
572
+ return N.bytes(t) + 2;
573
+
574
+ case s.KEY_TAG:
575
+ return T.bytes(t) + 2;
576
+ }
577
+ },
578
+ write(t, e, n) {
579
+ t.setUint16(e, n.code);
580
+ e += 2;
581
+ if (isUnknownOpt(n)) {
582
+ return w.write(t, e, n);
583
+ }
584
+ switch (n.code) {
585
+ case s.CLIENT_SUBNET:
586
+ return A.write(t, e, n);
587
+
588
+ case s.TCP_KEEPALIVE:
589
+ return S.write(t, e, n);
590
+
591
+ case s.PADDING:
592
+ return N.write(t, e, n);
593
+
594
+ case s.KEY_TAG:
595
+ return T.write(t, e, n);
596
+ }
597
+ },
598
+ read(t, e) {
599
+ const n = t.getUint16(e.offset);
600
+ advance(e, 2);
601
+ switch (n) {
602
+ case s.CLIENT_SUBNET:
603
+ return A.read(t, e);
604
+
605
+ case s.TCP_KEEPALIVE:
606
+ return S.read(t, e);
607
+
608
+ case s.PADDING:
609
+ return N.read(t, e);
610
+
611
+ case s.KEY_TAG:
612
+ return T.read(t, e);
613
+
614
+ default:
615
+ const r = w.read(t, e);
616
+ r.code = n;
617
+ return r;
618
+ }
619
+ }
620
+ };
621
+
622
+ let P = function(t) {
623
+ t[t.Mandatory = 0] = "Mandatory";
624
+ t[t.Alpn = 1] = "Alpn";
625
+ t[t.NoDefaultAlpn = 2] = "NoDefaultAlpn";
626
+ t[t.Port = 3] = "Port";
627
+ t[t.Ipv4Hint = 4] = "Ipv4Hint";
628
+ t[t.EchConfig = 5] = "EchConfig";
629
+ t[t.Ipv6Hint = 6] = "Ipv6Hint";
630
+ t[t.DohPath = 7] = "DohPath";
631
+ t[t.Odoh = 32769] = "Odoh";
632
+ return t;
633
+ }({});
634
+
635
+ const R = withRDLength(array(g));
636
+
637
+ const D = withRDLength(array(d));
638
+
639
+ const C = withRDLength(g);
640
+
641
+ const m = withRDLength(array(l));
642
+
643
+ const O = withRDLength(array(y));
644
+
645
+ const L = withRDLength(f);
646
+
647
+ const x = {
648
+ bytes(t) {
649
+ let e = 0;
650
+ if (null != t.mandatory) {
651
+ e += R.bytes(t.mandatory) + 2;
652
+ }
653
+ if (null != t.alpn) {
654
+ e += D.bytes(t.alpn) + 2;
655
+ }
656
+ if (t["no-default-alpn"]) {
657
+ e += 4;
658
+ }
659
+ if (null != t.port) {
660
+ e += C.bytes(t.port) + 2;
661
+ }
662
+ if (t.ipv4hint) {
663
+ e += m.bytes(t.ipv4hint) + 2;
664
+ }
665
+ if (t.ipv6hint) {
666
+ e += O.bytes(t.ipv6hint) + 2;
667
+ }
668
+ if (t.echconfig) {
669
+ e += L.bytes(t.echconfig) + 2;
670
+ }
671
+ if (t.dohpath) {
672
+ e += L.bytes(t.dohpath) + 2;
673
+ }
674
+ if (t.odoh) {
675
+ e += L.bytes(t.odoh) + 2;
676
+ }
677
+ return e;
678
+ },
679
+ write(t, e, n) {
680
+ if (null != n.mandatory) {
681
+ t.setUint16(e, P.Mandatory);
682
+ e = R.write(t, e + 2, n.mandatory);
683
+ }
684
+ if (null != n.alpn) {
685
+ t.setUint16(e, P.Alpn);
686
+ e = D.write(t, e + 2, n.alpn);
687
+ }
688
+ if (n["no-default-alpn"]) {
689
+ t.setUint16(e, P.NoDefaultAlpn);
690
+ e += 4;
691
+ }
692
+ if (null != n.port) {
693
+ t.setUint16(e, P.Port);
694
+ e = C.write(t, e + 2, n.port);
695
+ }
696
+ if (n.ipv4hint) {
697
+ t.setUint16(e, P.Ipv4Hint);
698
+ e = m.write(t, e + 2, n.ipv4hint);
699
+ }
700
+ if (n.ipv6hint) {
701
+ t.setUint16(e, P.Ipv6Hint);
702
+ e = O.write(t, e + 2, n.ipv6hint);
703
+ }
704
+ if (n.echconfig) {
705
+ t.setUint16(e, P.EchConfig);
706
+ e = L.write(t, e + 2, n.echconfig);
707
+ }
708
+ if (n.dohpath) {
709
+ t.setUint16(e, P.DohPath);
710
+ e = L.write(t, e + 2, n.dohpath);
711
+ }
712
+ if (n.odoh) {
713
+ t.setUint16(e, P.Odoh);
714
+ e = L.write(t, e + 2, n.odoh);
715
+ }
716
+ return e;
717
+ },
718
+ read(t, e) {
719
+ const {length: n, offset: r} = e;
720
+ const s = {
721
+ mandatory: void 0,
722
+ alpn: void 0,
723
+ "no-default-alpn": !1,
724
+ port: void 0,
725
+ ipv4hint: void 0,
726
+ ipv6hint: void 0,
727
+ echconfig: void 0,
728
+ dohpath: void 0,
729
+ odoh: void 0
730
+ };
731
+ while (e.offset - r < n) {
732
+ const n = t.getUint16(e.offset);
733
+ advance(e, 2);
734
+ switch (n) {
735
+ case P.Mandatory:
736
+ s.mandatory = R.read(t, e);
737
+ break;
738
+
739
+ case P.Alpn:
740
+ s.alpn = D.read(t, e);
741
+ break;
742
+
743
+ case P.NoDefaultAlpn:
744
+ s["no-default-alpn"] = !0;
745
+ advance(e, 2);
746
+ break;
747
+
748
+ case P.Port:
749
+ s.port = C.read(t, e);
750
+ break;
751
+
752
+ case P.Ipv4Hint:
753
+ s.ipv4hint = m.read(t, e);
754
+ break;
755
+
756
+ case P.Ipv6Hint:
757
+ s.ipv6hint = O.read(t, e);
758
+ break;
759
+
760
+ case P.EchConfig:
761
+ s.echconfig = L.read(t, e);
762
+ break;
763
+
764
+ case P.DohPath:
765
+ s.dohpath = i.decode(L.read(t, e));
766
+ break;
767
+
768
+ case P.Odoh:
769
+ s.odoh = L.read(t, e);
770
+ break;
771
+
772
+ default:
773
+ L.read(t, e);
774
+ }
775
+ }
776
+ return s;
777
+ }
778
+ };
779
+
780
+ const v = withRDLength(f);
781
+
782
+ const H = withRDLength(c);
783
+
784
+ const _ = withRDLength(l);
785
+
786
+ const V = withRDLength(y);
787
+
788
+ const Y = withRDLength(array(d));
789
+
790
+ const K = withRDLength({
791
+ bytes: t => c.bytes(t.target) + 6,
792
+ write(t, e, n) {
793
+ t.setUint16(e, n.priority || 0);
794
+ t.setUint16(e + 2, n.weight || 0);
795
+ t.setUint16(e + 4, n.port || 0);
796
+ return c.write(t, e + 6, n.target);
797
+ },
798
+ read(t, e) {
799
+ const n = {
800
+ priority: 0,
801
+ weight: 0,
802
+ port: 0,
803
+ target: ""
804
+ };
805
+ n.priority = t.getUint16(e.offset);
806
+ n.weight = t.getUint16(e.offset + 2);
807
+ n.port = t.getUint16(e.offset + 4);
808
+ advance(e, 6);
809
+ n.target = c.read(t, e);
810
+ return n;
811
+ }
812
+ });
813
+
814
+ const M = withRDLength({
815
+ bytes: t => d.bytes(t.cpu) + d.bytes(t.os),
816
+ write(t, e, n) {
817
+ e = d.write(t, e, n.cpu);
818
+ return e = d.write(t, e, n.os);
819
+ },
820
+ read: (t, e) => ({
821
+ cpu: d.read(t, e),
822
+ os: d.read(t, e)
823
+ })
824
+ });
825
+
826
+ const toCaaTag = t => {
827
+ switch (t) {
828
+ case "issue":
829
+ case "issuewild":
830
+ case "iodef":
831
+ return t;
832
+
833
+ default:
834
+ return "issue";
835
+ }
836
+ };
837
+
838
+ const X = withRDLength({
839
+ bytes: t => d.bytes(t.tag) + f.bytes(t.value) + 1,
840
+ write(t, e, n) {
841
+ let r = n.flags || 0;
842
+ if (n.issuerCritical) {
843
+ r = 128;
844
+ }
845
+ t.setUint8(e, r);
846
+ e = d.write(t, e + 1, n.tag);
847
+ return e = f.write(t, e, n.value);
848
+ },
849
+ read(t, e) {
850
+ const n = t.getUint8(e.offset);
851
+ advance(e, 1);
852
+ return {
853
+ flags: n,
854
+ tag: toCaaTag(d.read(t, e)),
855
+ value: f.read(t, e),
856
+ issuerCritical: !!(128 & n)
857
+ };
858
+ }
859
+ });
860
+
861
+ const F = withRDLength({
862
+ bytes: t => c.bytes(t.mname) + c.bytes(t.rname) + 20,
863
+ write(t, e, n) {
864
+ e = c.write(t, e, n.mname);
865
+ e = c.write(t, e, n.rname);
866
+ t.setUint32(e, n.serial || 0);
867
+ t.setUint32(e + 4, n.refresh || 0);
868
+ t.setUint32(e + 8, n.retry || 0);
869
+ t.setUint32(e + 12, n.expire || 0);
870
+ t.setUint32(e + 16, n.minimum || 0);
871
+ return e + 20;
872
+ },
873
+ read(t, e) {
874
+ const n = {
875
+ mname: c.read(t, e),
876
+ rname: c.read(t, e),
877
+ serial: t.getUint32(e.offset),
878
+ refresh: t.getUint32(e.offset + 4),
879
+ retry: t.getUint32(e.offset + 8),
880
+ expire: t.getUint32(e.offset + 12),
881
+ minimum: t.getUint32(e.offset + 16)
882
+ };
883
+ e.offset += 20;
884
+ e.length -= 20;
885
+ return n;
886
+ }
887
+ });
888
+
889
+ const G = withRDLength({
890
+ bytes: t => c.bytes(t.exchange) + 2,
891
+ write(t, e, n) {
892
+ t.setUint16(e, n.preference || 0);
893
+ return c.write(t, e + 2, n.exchange);
894
+ },
895
+ read(t, e) {
896
+ const n = {
897
+ preference: t.getUint16(e.offset),
898
+ exchange: ""
899
+ };
900
+ advance(e, 2);
901
+ n.exchange = c.read(t, e);
902
+ return n;
903
+ }
904
+ });
905
+
906
+ const B = withRDLength({
907
+ bytes: t => f.bytes(t.key) + 4,
908
+ write(t, e, n) {
909
+ t.setUint16(e, n.flags);
910
+ t.setUint8(e + 2, 3);
911
+ t.setUint8(e + 3, n.algorithm);
912
+ return f.write(t, e + 4, n.key);
913
+ },
914
+ read(t, e) {
915
+ const n = t.getUint16(e.offset);
916
+ const r = t.getUint8(e.offset + 3);
917
+ advance(e, 4);
918
+ return {
919
+ flags: n,
920
+ algorithm: r,
921
+ key: f.read(t, e)
922
+ };
923
+ }
924
+ });
925
+
926
+ const k = withRDLength({
927
+ bytes: t => 18 + c.bytes(t.signersName) + f.bytes(t.signature),
928
+ write(t, e, n) {
929
+ t.setUint16(e, n.typeCovered);
930
+ t.setUint8(e + 2, n.algorithm);
931
+ t.setUint8(e + 3, n.labels);
932
+ t.setUint32(e + 4, n.originalTTL);
933
+ t.setUint32(e + 8, n.expiration);
934
+ t.setUint32(e + 12, n.inception);
935
+ t.setUint16(e + 16, n.keyTag);
936
+ e = c.write(t, e + 18, n.signersName);
937
+ return e = f.write(t, e, n.signature);
938
+ },
939
+ read(t, e) {
940
+ const n = t.getUint16(e.offset);
941
+ const r = t.getUint8(e.offset + 2);
942
+ const s = t.getUint8(e.offset + 3);
943
+ const a = t.getUint32(e.offset + 4);
944
+ const i = t.getUint32(e.offset + 8);
945
+ const o = t.getUint32(e.offset + 12);
946
+ const d = t.getUint16(e.offset + 16);
947
+ advance(e, 18);
948
+ return {
949
+ typeCovered: n,
950
+ algorithm: r,
951
+ labels: s,
952
+ originalTTL: a,
953
+ expiration: i,
954
+ inception: o,
955
+ keyTag: d,
956
+ signersName: c.read(t, e),
957
+ signature: f.read(t, e)
958
+ };
959
+ }
960
+ });
961
+
962
+ const $ = withRDLength({
963
+ bytes: t => c.bytes(t.mbox) + c.bytes(t.txt),
964
+ write(t, e, n) {
965
+ e = c.write(t, e, n.mbox);
966
+ return e = c.write(t, e, n.txt);
967
+ },
968
+ read: (t, e) => ({
969
+ mbox: c.read(t, e),
970
+ txt: c.read(t, e)
971
+ })
972
+ });
973
+
974
+ const q = withRDLength({
975
+ bytes: t => c.bytes(t.nextDomain) + u.bytes(t.rrtypes),
976
+ write(t, e, n) {
977
+ e = c.write(t, e, n.nextDomain);
978
+ return e = u.write(t, e, n.rrtypes);
979
+ },
980
+ read: (t, e) => ({
981
+ nextDomain: c.read(t, e),
982
+ rrtypes: u.read(t, e)
983
+ })
984
+ });
985
+
986
+ const Q = withRDLength({
987
+ bytes: t => d.bytes(t.salt) + d.bytes(t.nextDomain) + u.bytes(t.rrtypes) + 4,
988
+ write(t, e, n) {
989
+ t.setUint8(e, n.algorithm);
990
+ t.setUint8(e + 1, n.flags);
991
+ t.setUint16(e + 2, n.iterations);
992
+ e = d.write(t, e + 4, n.salt);
993
+ e = d.write(t, e, n.nextDomain);
994
+ return e = u.write(t, e, n.rrtypes);
995
+ },
996
+ read(t, e) {
997
+ const n = t.getUint8(e.offset);
998
+ const r = t.getUint8(e.offset + 1);
999
+ const s = t.getUint16(e.offset + 2);
1000
+ advance(e, 4);
1001
+ return {
1002
+ algorithm: n,
1003
+ flags: r,
1004
+ iterations: s,
1005
+ salt: d.read(t, e),
1006
+ nextDomain: d.read(t, e),
1007
+ rrtypes: u.read(t, e)
1008
+ };
1009
+ }
1010
+ });
1011
+
1012
+ const j = withRDLength({
1013
+ bytes: t => f.bytes(t.fingerprint) + 2,
1014
+ write(t, e, n) {
1015
+ t.setUint8(e, n.algorithm);
1016
+ t.setUint8(e + 1, n.hash);
1017
+ return f.write(t, e + 2, n.fingerprint);
1018
+ },
1019
+ read(t, e) {
1020
+ const n = t.getUint8(e.offset);
1021
+ const r = t.getUint8(e.offset + 1);
1022
+ advance(e, 2);
1023
+ return {
1024
+ algorithm: n,
1025
+ hash: r,
1026
+ fingerprint: f.read(t, e)
1027
+ };
1028
+ }
1029
+ });
1030
+
1031
+ const z = withRDLength({
1032
+ bytes: t => f.bytes(t.digest) + 4,
1033
+ write(t, e, n) {
1034
+ t.setUint16(e, n.keyTag);
1035
+ t.setUint8(e + 2, n.algorithm);
1036
+ t.setUint8(e + 3, n.digestType);
1037
+ return e = f.write(t, e + 4, n.digest);
1038
+ },
1039
+ read(t, e) {
1040
+ const n = t.getUint16(e.offset);
1041
+ const r = t.getUint8(e.offset + 2);
1042
+ const s = t.getUint8(e.offset + 3);
1043
+ advance(e, 4);
1044
+ return {
1045
+ keyTag: n,
1046
+ algorithm: r,
1047
+ digestType: s,
1048
+ digest: f.read(t, e)
1049
+ };
1050
+ }
1051
+ });
1052
+
1053
+ const W = withRDLength({
1054
+ bytes: t => d.bytes(t.flags) + d.bytes(t.services) + d.bytes(t.regexp) + c.bytes(t.replacement) + 4,
1055
+ write(t, e, n) {
1056
+ t.setUint16(e, n.order);
1057
+ t.setUint16(e + 2, n.preference);
1058
+ e = d.write(t, e + 4, n.flags);
1059
+ e = d.write(t, e, n.services);
1060
+ e = d.write(t, e, n.regexp);
1061
+ return e = c.write(t, e, n.replacement);
1062
+ },
1063
+ read(t, e) {
1064
+ const n = t.getUint16(e.offset);
1065
+ const r = t.getUint16(e.offset + 2);
1066
+ advance(e, 4);
1067
+ return {
1068
+ order: n,
1069
+ preference: r,
1070
+ flags: d.read(t, e),
1071
+ services: d.read(t, e),
1072
+ regexp: d.read(t, e),
1073
+ replacement: c.read(t, e)
1074
+ };
1075
+ }
1076
+ });
1077
+
1078
+ const Z = withRDLength({
1079
+ bytes: t => f.bytes(t.certificate) + 3,
1080
+ write(t, e, n) {
1081
+ t.setUint8(e, n.usage);
1082
+ t.setUint8(e + 1, n.selector);
1083
+ t.setUint8(e + 2, n.matchingType);
1084
+ return f.write(t, e + 3, n.certificate);
1085
+ },
1086
+ read(t, e) {
1087
+ const n = t.getUint8(e.offset);
1088
+ const r = t.getUint8(e.offset + 1);
1089
+ const s = t.getUint8(e.offset + 2);
1090
+ advance(e, 3);
1091
+ return {
1092
+ usage: n,
1093
+ selector: r,
1094
+ matchingType: s,
1095
+ certificate: f.read(t, e)
1096
+ };
1097
+ }
1098
+ });
1099
+
1100
+ const J = withRDLength({
1101
+ bytes: t => c.bytes(t.name) + x.bytes(t.params) + 2,
1102
+ write(t, e, n) {
1103
+ t.setUint16(e, n.priority || 0);
1104
+ e = c.write(t, e + 2, n.name);
1105
+ return e = x.write(t, e, n.params);
1106
+ },
1107
+ read(t, e) {
1108
+ const n = t.getUint16(e.offset);
1109
+ advance(e, 2);
1110
+ return {
1111
+ name: c.read(t, e),
1112
+ priority: n,
1113
+ params: x.read(t, e)
1114
+ };
1115
+ }
1116
+ });
1117
+
1118
+ const tt = withRDLength(array(I));
1119
+
1120
+ const et = 32768;
1121
+
1122
+ const nt = {
1123
+ bytes(t) {
1124
+ const n = 8 + c.bytes(t.type === e.OPT ? "." : t.name);
1125
+ switch (t.type) {
1126
+ case e.A:
1127
+ return n + _.bytes(t.data);
1128
+
1129
+ case e.NS:
1130
+ return n + H.bytes(t.data);
1131
+
1132
+ case e.SOA:
1133
+ return n + F.bytes(t.data);
1134
+
1135
+ case e.HINFO:
1136
+ return n + M.bytes(t.data);
1137
+
1138
+ case e.MX:
1139
+ return n + G.bytes(t.data);
1140
+
1141
+ case e.TXT:
1142
+ return n + Y.bytes(t.data);
1143
+
1144
+ case e.RP:
1145
+ return n + $.bytes(t.data);
1146
+
1147
+ case e.AAAA:
1148
+ return n + V.bytes(t.data);
1149
+
1150
+ case e.SRV:
1151
+ return n + K.bytes(t.data);
1152
+
1153
+ case e.NAPTR:
1154
+ return n + W.bytes(t.data);
1155
+
1156
+ case e.OPT:
1157
+ return n + tt.bytes(t.data);
1158
+
1159
+ case e.DS:
1160
+ return n + z.bytes(t.data);
1161
+
1162
+ case e.SSHFP:
1163
+ return n + j.bytes(t.data);
1164
+
1165
+ case e.RRSIG:
1166
+ return n + k.bytes(t.data);
1167
+
1168
+ case e.NSEC:
1169
+ return n + q.bytes(t.data);
1170
+
1171
+ case e.DNSKEY:
1172
+ return n + B.bytes(t.data);
1173
+
1174
+ case e.NSEC3:
1175
+ return n + Q.bytes(t.data);
1176
+
1177
+ case e.TLSA:
1178
+ return n + Z.bytes(t.data);
1179
+
1180
+ case e.SVCB:
1181
+ case e.HTTPS:
1182
+ return n + J.bytes(t.data);
1183
+
1184
+ case e.CAA:
1185
+ return n + X.bytes(t.data);
1186
+
1187
+ default:
1188
+ return n + v.bytes(t.data);
1189
+ }
1190
+ },
1191
+ write(t, n, r) {
1192
+ if (r.type === e.OPT) {
1193
+ n = c.write(t, n, ".");
1194
+ t.setUint16(n, r.type);
1195
+ t.setUint16(n + 2, r.udpPayloadSize || 4096);
1196
+ t.setUint8(n + 4, r.extendedRcode || 0);
1197
+ t.setUint8(n + 5, r.ednsVersion || 0);
1198
+ t.setUint16(n + 6, r.flags || 0);
1199
+ return tt.write(t, n += 8, r.data);
1200
+ }
1201
+ n = c.write(t, n, r.name);
1202
+ t.setUint16(n, r.type);
1203
+ t.setUint16(n + 2, (r.class || 0) | (r.flush ? et : 0));
1204
+ t.setUint32(n + 4, r.ttl || 0);
1205
+ n += 8;
1206
+ switch (r.type) {
1207
+ case e.A:
1208
+ return _.write(t, n, r.data);
1209
+
1210
+ case e.NS:
1211
+ return H.write(t, n, r.data);
1212
+
1213
+ case e.SOA:
1214
+ return F.write(t, n, r.data);
1215
+
1216
+ case e.HINFO:
1217
+ return M.write(t, n, r.data);
1218
+
1219
+ case e.MX:
1220
+ return G.write(t, n, r.data);
1221
+
1222
+ case e.TXT:
1223
+ return Y.write(t, n, r.data);
1224
+
1225
+ case e.RP:
1226
+ return $.write(t, n, r.data);
1227
+
1228
+ case e.AAAA:
1229
+ return V.write(t, n, r.data);
1230
+
1231
+ case e.SRV:
1232
+ return K.write(t, n, r.data);
1233
+
1234
+ case e.NAPTR:
1235
+ return W.write(t, n, r.data);
1236
+
1237
+ case e.DS:
1238
+ return z.write(t, n, r.data);
1239
+
1240
+ case e.SSHFP:
1241
+ return j.write(t, n, r.data);
1242
+
1243
+ case e.RRSIG:
1244
+ return k.write(t, n, r.data);
1245
+
1246
+ case e.NSEC:
1247
+ return q.write(t, n, r.data);
1248
+
1249
+ case e.DNSKEY:
1250
+ return B.write(t, n, r.data);
1251
+
1252
+ case e.NSEC3:
1253
+ return Q.write(t, n, r.data);
1254
+
1255
+ case e.TLSA:
1256
+ return Z.write(t, n, r.data);
1257
+
1258
+ case e.SVCB:
1259
+ case e.HTTPS:
1260
+ return J.write(t, n, r.data);
1261
+
1262
+ case e.CAA:
1263
+ return X.write(t, n, r.data);
1264
+
1265
+ default:
1266
+ return v.write(t, n, r.data);
1267
+ }
1268
+ },
1269
+ read(t, n) {
1270
+ const r = c.read(t, n);
1271
+ const s = t.getUint16(n.offset);
1272
+ if (s === e.OPT) {
1273
+ const e = t.getUint16(n.offset + 2) || 4096;
1274
+ const r = t.getUint8(n.offset + 4);
1275
+ const a = t.getUint8(n.offset + 5);
1276
+ const i = t.getUint16(n.offset + 6);
1277
+ advance(n, 8);
1278
+ return {
1279
+ type: s,
1280
+ udpPayloadSize: e,
1281
+ extendedRcode: r,
1282
+ ednsVersion: a,
1283
+ flags: i,
1284
+ data: tt.read(t, n)
1285
+ };
1286
+ }
1287
+ const a = t.getUint16(n.offset + 2);
1288
+ const i = t.getUint32(n.offset + 4);
1289
+ advance(n, 8);
1290
+ const o = {
1291
+ name: r,
1292
+ type: s,
1293
+ class: -32769 & a,
1294
+ flush: !!(a & et),
1295
+ ttl: i,
1296
+ data: null
1297
+ };
1298
+ switch (o.type) {
1299
+ case e.A:
1300
+ o.data = _.read(t, n);
1301
+ return o;
1302
+
1303
+ case e.NS:
1304
+ o.data = H.read(t, n);
1305
+ return o;
1306
+
1307
+ case e.SOA:
1308
+ o.data = F.read(t, n);
1309
+ return o;
1310
+
1311
+ case e.HINFO:
1312
+ o.data = M.read(t, n);
1313
+ return o;
1314
+
1315
+ case e.MX:
1316
+ o.data = G.read(t, n);
1317
+ return o;
1318
+
1319
+ case e.TXT:
1320
+ o.data = Y.read(t, n);
1321
+ return o;
1322
+
1323
+ case e.RP:
1324
+ o.data = $.read(t, n);
1325
+ return o;
1326
+
1327
+ case e.AAAA:
1328
+ o.data = V.read(t, n);
1329
+ return o;
1330
+
1331
+ case e.SRV:
1332
+ o.data = K.read(t, n);
1333
+ return o;
1334
+
1335
+ case e.NAPTR:
1336
+ o.data = W.read(t, n);
1337
+ return o;
1338
+
1339
+ case e.DS:
1340
+ o.data = z.read(t, n);
1341
+ return o;
1342
+
1343
+ case e.SSHFP:
1344
+ o.data = j.read(t, n);
1345
+ return o;
1346
+
1347
+ case e.RRSIG:
1348
+ o.data = k.read(t, n);
1349
+ return o;
1350
+
1351
+ case e.NSEC:
1352
+ o.data = q.read(t, n);
1353
+ return o;
1354
+
1355
+ case e.DNSKEY:
1356
+ o.data = B.read(t, n);
1357
+ return o;
1358
+
1359
+ case e.NSEC3:
1360
+ o.data = Q.read(t, n);
1361
+ return o;
1362
+
1363
+ case e.TLSA:
1364
+ o.data = Z.read(t, n);
1365
+ return o;
1366
+
1367
+ case e.SVCB:
1368
+ case e.HTTPS:
1369
+ o.data = J.read(t, n);
1370
+ return o;
1371
+
1372
+ case e.CAA:
1373
+ o.data = X.read(t, n);
1374
+ return o;
1375
+
1376
+ default:
1377
+ o.data = v.read(t, n);
1378
+ return o;
1379
+ }
1380
+ }
1381
+ };
1382
+
1383
+ const readList = (t, e, n, r) => {
1384
+ if (!r) {
1385
+ return;
1386
+ }
1387
+ const {offset: s, length: a} = n;
1388
+ const i = [];
1389
+ for (let o = 0; o < r && n.offset - s < a; o++) {
1390
+ i.push(t.read(e, n));
1391
+ }
1392
+ return i;
1393
+ };
1394
+
1395
+ const rt = {
1396
+ bytes(t) {
1397
+ const {questions: e, answers: n, authorities: r, additionals: s} = t;
1398
+ let a = 12;
1399
+ let i = 0;
1400
+ for (i = 0; e && i < e.length; i++) {
1401
+ a += h.bytes(e[i]);
1402
+ }
1403
+ for (i = 0; n && i < n.length; i++) {
1404
+ a += nt.bytes(n[i]);
1405
+ }
1406
+ for (i = 0; r && i < r.length; i++) {
1407
+ a += nt.bytes(r[i]);
1408
+ }
1409
+ for (i = 0; s && i < s.length; i++) {
1410
+ a += nt.bytes(s[i]);
1411
+ }
1412
+ return a;
1413
+ },
1414
+ write(e, n, r) {
1415
+ const {questions: s, answers: a, authorities: i, additionals: o} = r;
1416
+ let c = 32767 & (r.flags || 0) | (r.type || t.QUERY) | (r.rtype || 0);
1417
+ e.setUint16(n, r.id || 0);
1418
+ e.setUint16(n + 2, c);
1419
+ e.setUint16(n + 4, r.questions?.length || 0);
1420
+ e.setUint16(n + 6, r.answers?.length || 0);
1421
+ e.setUint16(n + 8, r.authorities?.length || 0);
1422
+ e.setUint16(n + 10, r.additionals?.length || 0);
1423
+ n += 12;
1424
+ let f = 0;
1425
+ for (f = 0; s && f < s.length; f++) {
1426
+ n = h.write(e, n, s[f]);
1427
+ }
1428
+ for (f = 0; a && f < a.length; f++) {
1429
+ n = nt.write(e, n, a[f]);
1430
+ }
1431
+ for (f = 0; i && f < i.length; f++) {
1432
+ n = nt.write(e, n, i[f]);
1433
+ }
1434
+ for (f = 0; o && f < o.length; f++) {
1435
+ n = nt.write(e, n, o[f]);
1436
+ }
1437
+ return n;
1438
+ },
1439
+ read(e, n) {
1440
+ const r = e.getUint16(n.offset);
1441
+ const s = e.getUint16(n.offset + 2);
1442
+ const a = e.getUint16(n.offset + 4);
1443
+ const i = e.getUint16(n.offset + 6);
1444
+ const o = e.getUint16(n.offset + 8);
1445
+ const c = e.getUint16(n.offset + 10);
1446
+ advance(n, 12);
1447
+ return {
1448
+ id: r,
1449
+ flags: s,
1450
+ rtype: 15 & s,
1451
+ type: s & t.RESPONSE ? t.RESPONSE : t.QUERY,
1452
+ questions: readList(h, e, n, a),
1453
+ answers: readList(nt, e, n, i),
1454
+ authorities: readList(nt, e, n, o),
1455
+ additionals: readList(nt, e, n, c)
1456
+ };
1457
+ }
1458
+ };
1459
+
1460
+ exports.OptCode = s;
1461
+
1462
+ exports.PacketFlag = r;
1463
+
1464
+ exports.PacketType = t;
1465
+
1466
+ exports.RecordClass = n;
1467
+
1468
+ exports.RecordType = e;
1469
+
1470
+ exports.decode = function decode(t) {
1471
+ const e = "buffer" in t ? new DataView(t.buffer, t.byteOffset, t.byteLength) : new DataView(t);
1472
+ return rt.read(e, {
1473
+ offset: 0,
1474
+ length: e.byteLength
1475
+ });
1476
+ };
1477
+
1478
+ exports.encode = function encode(t) {
1479
+ const e = new ArrayBuffer(rt.bytes(t));
1480
+ const n = rt.write(new DataView(e), 0, t);
1481
+ return new Uint8Array(e, 0, n);
1482
+ };
1483
+
1484
+ exports.encodingLength = function encodingLength(t) {
1485
+ return rt.bytes(t);
1486
+ };
1487
+
1488
+ exports.streamDecode = function streamDecode(t) {
1489
+ const e = "buffer" in t ? new DataView(t.buffer, t.byteOffset, t.byteLength) : new DataView(t);
1490
+ const n = Math.min(e.byteLength, e.getUint16(0)) - 2;
1491
+ return rt.read(e, {
1492
+ offset: 2,
1493
+ length: n
1494
+ });
1495
+ };
1496
+
1497
+ exports.streamEncode = function streamEncode(t) {
1498
+ const e = new ArrayBuffer(rt.bytes(t) + 2);
1499
+ const n = new DataView(e);
1500
+ const r = rt.write(n, 2, t);
1501
+ n.setUint16(0, r);
1502
+ return new Uint8Array(e, 0, r);
1503
+ };
1504
+ //# sourceMappingURL=dns-message.js.map