dns-message 1.0.1-canary-de720c7dcdc03fb7dc3f7b6f6df698ba0169f9d8 → 1.0.1-canary-e30ae7317ba5298ba0dbe33fc2f54ef234fb28cb

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.
package/CHANGELOG.md CHANGED
@@ -1,11 +1,13 @@
1
1
  # dns-message
2
2
 
3
- ## 1.0.1-canary-de720c7dcdc03fb7dc3f7b6f6df698ba0169f9d8
3
+ ## 1.0.1-canary-e30ae7317ba5298ba0dbe33fc2f54ef234fb28cb
4
4
 
5
5
  ### Patch Changes
6
6
 
7
7
  - Clamp `position.length` to `>=0` to be defensive
8
8
  Submitted by [@kitten](https://github.com/kitten) (See [#2](https://github.com/kitten/dns-message/pull/2))
9
+ - ⚠️ Fix `issuerCritical` overriding CAA flags
10
+ Submitted by [@kitten](https://github.com/kitten) (See [#8](https://github.com/kitten/dns-message/pull/8))
9
11
  - Constrain message compression (name) pointer references
10
12
  Submitted by [@kitten](https://github.com/kitten) (See [#4](https://github.com/kitten/dns-message/pull/4))
11
13
  - Encode/decode PTR, CNAME, and DNAME as names
@@ -202,7 +202,6 @@ const c = {
202
202
  length: 0
203
203
  };
204
204
  } else {
205
- advance(s, 2);
206
205
  break;
207
206
  }
208
207
  }
@@ -330,7 +329,7 @@ const y = {
330
329
  }
331
330
  };
332
331
 
333
- const h = {
332
+ const U = {
334
333
  bytes: () => 16,
335
334
  write(t, e, r) {
336
335
  const n = r.indexOf("::");
@@ -426,14 +425,14 @@ const sliceView = (t, e, r = e.length) => {
426
425
  return n;
427
426
  };
428
427
 
429
- const U = 32768;
428
+ const h = 32768;
430
429
 
431
430
  const w = {
432
431
  bytes: t => c.bytes(t.name) + 4,
433
432
  write(t, e, n) {
434
433
  let s = n.class || r.IN;
435
434
  if (n.qu) {
436
- s |= U;
435
+ s |= h;
437
436
  }
438
437
  e = c.write(t, e, n.name);
439
438
  t.setUint16(e, n.type);
@@ -445,7 +444,7 @@ const w = {
445
444
  const s = t.getUint16(e.offset);
446
445
  let a = t.getUint16(e.offset + 2) || r.ANY;
447
446
  let i = !1;
448
- if (a !== r.ANY && a & U) {
447
+ if (a !== r.ANY && a & h) {
449
448
  a &= -32769;
450
449
  i = !0;
451
450
  }
@@ -493,7 +492,7 @@ const N = withRDLength({
493
492
  const r = new ArrayBuffer(t.bytes(e));
494
493
  const n = t.write(new DataView(r), 0, e);
495
494
  return new Uint8Array(r, 0, n);
496
- })(a === b.v4 ? g : h, r.ip);
495
+ })(a === b.v4 ? g : U, r.ip);
497
496
  for (let r = 0; r < i; r++) {
498
497
  t.setUint8(e++, o[r]);
499
498
  }
@@ -509,7 +508,7 @@ const N = withRDLength({
509
508
  family: r,
510
509
  sourcePrefixLength: n,
511
510
  scopePrefixLength: a,
512
- ip: r === b.v4 ? g.read(t, e) : h.read(t, e)
511
+ ip: r === b.v4 ? g.read(t, e) : U.read(t, e)
513
512
  };
514
513
  }
515
514
  });
@@ -662,7 +661,7 @@ const m = withRDLength(y);
662
661
 
663
662
  const O = withRDLength(array(g));
664
663
 
665
- const L = withRDLength(array(h));
664
+ const L = withRDLength(array(U));
666
665
 
667
666
  const v = withRDLength(f);
668
667
 
@@ -709,6 +708,7 @@ const x = {
709
708
  }
710
709
  if (r["no-default-alpn"]) {
711
710
  t.setUint16(e, R.NoDefaultAlpn);
711
+ t.setUint16(e + 2, 0);
712
712
  e += 4;
713
713
  }
714
714
  if (null != r.port) {
@@ -805,7 +805,7 @@ const _ = withRDLength(c);
805
805
 
806
806
  const M = withRDLength(g);
807
807
 
808
- const V = withRDLength(h);
808
+ const V = withRDLength(U);
809
809
 
810
810
  const Y = withRDLength(array(u));
811
811
 
@@ -862,7 +862,7 @@ const F = withRDLength({
862
862
  write(t, e, r) {
863
863
  let n = r.flags || 0;
864
864
  if (r.issuerCritical) {
865
- n = 128;
865
+ n |= 128;
866
866
  }
867
867
  t.setUint8(e, n);
868
868
  e = u.write(t, e + 1, r.tag);
@@ -1 +1 @@
1
- {"version":3,"file":"dns-message.js","sources":["../src/constants.ts","../src/encoders.ts","../src/questions.ts","../src/options.ts","../src/svcparams.ts","../src/answers.ts","../src/packets.ts","../src/index.ts"],"sourcesContent":["export const enum PacketType {\n QUERY = 0,\n RESPONSE = 1 << 15,\n}\n\nexport const enum RecordType {\n A = 1,\n NS = 2,\n CNAME = 5,\n SOA = 6,\n NULL = 10,\n PTR = 12,\n HINFO = 13,\n MX = 15,\n TXT = 16,\n RP = 17,\n AFSDB = 18,\n SIG = 24,\n KEY = 25,\n AAAA = 28,\n LOC = 29,\n SRV = 33,\n NAPTR = 35,\n KX = 36,\n CERT = 37,\n DNAME = 39,\n OPT = 41,\n APL = 42,\n DS = 43,\n SSHFP = 44,\n IPSECKEY = 45,\n RRSIG = 46,\n NSEC = 47,\n DNSKEY = 48,\n DHCID = 49,\n NSEC3 = 50,\n NSEC3PARAM = 51,\n TLSA = 52,\n HIP = 55,\n CDS = 59,\n CDNSKEY = 60,\n SVCB = 64,\n HTTPS = 65,\n SPF = 99,\n TKEY = 249,\n TSIG = 250,\n IXFR = 251,\n AXFR = 252,\n ANY = 255,\n CAA = 257,\n TA = 32768,\n DLV = 32769,\n}\n\nexport const enum RecordClass {\n IN = 1,\n CS = 2,\n CH = 3,\n HS = 4,\n ANY = 255,\n}\n\nexport const enum PacketFlag {\n NOERR = 0,\n FORMERR = 1,\n SERVFAIL = 2,\n NXDOMAIN = 3,\n NOTIMP = 4,\n REFUSED = 5,\n YXDOMAIN = 6,\n YXRRSET = 7,\n NXRRSET = 8,\n NOTAUTH = 9,\n NOTZONE = 10,\n\n CHECKING_DISABLED = 1 << 4,\n AUTHENTIC_DATA = 1 << 5,\n RECURSION_AVAILABLE = 1 << 7,\n RECURSION_DESIRED = 1 << 8,\n TRUNCATED_RESPONSE = 1 << 9,\n AUTHORITATIVE_ANSWER = 1 << 10,\n}\n\nexport type PacketRType =\n | PacketFlag.NOERR\n | PacketFlag.FORMERR\n | PacketFlag.SERVFAIL\n | PacketFlag.NXDOMAIN\n | PacketFlag.NOTIMP\n | PacketFlag.REFUSED\n | PacketFlag.YXDOMAIN\n | PacketFlag.YXRRSET\n | PacketFlag.NXRRSET\n | PacketFlag.NOTAUTH\n | PacketFlag.NOTZONE;\n\nexport const enum OptCode {\n OPTION_0 = 0,\n LLQ = 1,\n UL = 2,\n NSID = 3,\n OPTION_4 = 4,\n DAU = 5,\n DHU = 6,\n N3U = 7,\n CLIENT_SUBNET = 8,\n EXPIRE = 9,\n COOKIE = 10,\n TCP_KEEPALIVE = 11,\n PADDING = 12,\n CHAIN = 13,\n KEY_TAG = 14,\n DEVICEID = 26946,\n OPTION_65535 = 65535,\n}\n","import type { RecordType } from './constants';\n\nexport interface ReadPosition {\n offset: number;\n length: number;\n}\n\nexport interface Encoder<T, R = T> {\n bytes(input: T): number;\n write(view: DataView, offset: number, input: T): number;\n read(view: DataView, position: ReadPosition): R;\n}\n\nexport const textEncoder = new TextEncoder();\nexport const textDecoder = new TextDecoder();\n\nconst utf8ByteLength =\n typeof Buffer !== 'undefined'\n ? (str: string) => Buffer.byteLength(str)\n : (str: string) => {\n let length = str.length;\n for (let i = length - 1; i >= 0; i--) {\n const code = str.charCodeAt(i);\n if (code > 0x7f && code <= 0x7ff) {\n length++;\n } else if (code > 0x7ff && code <= 0xffff) {\n length += 2;\n }\n // UTF-16 Trail Surrogate\n if (code >= 0xdc00 && code <= 0xdfff) {\n i--;\n }\n }\n return length;\n };\n\nconst LABEL_LIMIT = 63;\nconst NAME_LIMIT = 255;\n\nexport const name: Encoder<string> = {\n bytes(str) {\n let length = 2;\n switch (str) {\n case '':\n case '.':\n case '..':\n return 1;\n default:\n if (str[0] === '.') length--;\n if (str[str.length - 1] === '.') length--;\n length += str.replace(/\\\\\\./g, '.').length;\n if (length > NAME_LIMIT)\n throw new RangeError(\n `Name \"${str}\" is above ${NAME_LIMIT} byte limit.`\n );\n return length;\n }\n },\n write(view, offset, str) {\n const encoded = textEncoder.encode(str);\n for (\n let startIdx = encoded[0] === 46 /*'.'*/ ? 1 : 0, endIdx = 0;\n startIdx < encoded.byteLength;\n startIdx = endIdx + 1\n ) {\n endIdx = encoded.indexOf(46 /*'.'*/, startIdx);\n while (endIdx > -1 && encoded[endIdx - 1] === 92 /*'\\\\'*/)\n endIdx = encoded.indexOf(46 /*'.'*/, endIdx + 1);\n if (endIdx === -1) endIdx = encoded.byteLength;\n if (endIdx === startIdx) {\n continue;\n } else if (endIdx - startIdx > LABEL_LIMIT) {\n throw new RangeError(\n `Label in \"${str}\" is above ${LABEL_LIMIT} byte limit.`\n );\n }\n let byteIdx = offset + 1;\n for (let idx = startIdx; idx < endIdx; idx++) {\n if (encoded[idx] === 92 /*'\\\\'*/ && encoded[idx + 1] === 46 /*'.'*/)\n idx++;\n view.setUint8(byteIdx++, encoded[idx]);\n }\n view.setUint8(offset, byteIdx - offset - 1);\n offset = byteIdx;\n startIdx = endIdx + 1;\n }\n return offset + 1;\n },\n read(view, outerPosition) {\n const labels: string[] = [];\n let maxOffset = outerPosition.offset;\n let innerPosition = outerPosition;\n while (true) {\n const labelLength = view.getUint8(innerPosition.offset);\n if (labelLength === 0) {\n advance(innerPosition, 1);\n break;\n } else if ((labelLength & 0xc0) === 0) {\n advance(innerPosition, 1);\n const label = sliceView(view, innerPosition, labelLength);\n labels.push(textDecoder.decode(label).replace(/\\./g, '\\\\.'));\n } else {\n const jumpTo = view.getUint16(innerPosition.offset) - 0xc000;\n advance(innerPosition, 2);\n if (jumpTo < maxOffset) {\n innerPosition = { offset: (maxOffset = jumpTo), length: 0 };\n } else {\n advance(innerPosition, 2);\n break;\n }\n }\n }\n return labels.join('.') || '.';\n },\n};\n\nexport const bytes: Encoder<Uint8Array | string, Uint8Array> = {\n bytes(data) {\n return typeof data === 'string' ? utf8ByteLength(data) : data.byteLength;\n },\n write(view, offset, data) {\n const bytes = typeof data === 'string' ? textEncoder.encode(data) : data;\n const target = new Uint8Array(\n view.buffer,\n view.byteOffset + offset,\n bytes.byteLength\n );\n target.set(bytes);\n offset += bytes.byteLength;\n return offset;\n },\n read(view, position) {\n return sliceView(view, position);\n },\n};\n\nexport const octets: Encoder<Uint8Array> = {\n bytes(data) {\n return data.byteLength + 1;\n },\n write(view, offset, bytes) {\n view.setUint8(offset++, bytes.byteLength);\n const target = new Uint8Array(\n view.buffer,\n view.byteOffset + offset,\n bytes.byteLength\n );\n target.set(bytes);\n offset += bytes.byteLength;\n return offset;\n },\n read(view, position) {\n const length = view.getUint8(position.offset);\n advance(position, 1);\n return sliceView(view, position, length);\n },\n};\n\nexport const string: Encoder<string> = {\n bytes(str) {\n return utf8ByteLength(str) + 1;\n },\n write(view, offset, data) {\n const buffer = textEncoder.encode(data);\n view.setUint8(offset++, buffer.byteLength);\n return bytes.write(view, offset, buffer);\n },\n read(view, position) {\n const length = view.getUint8(position.offset);\n advance(position, 1);\n return textDecoder.decode(sliceView(view, position, length));\n },\n};\n\nexport const typeBitmap: Encoder<RecordType[]> = {\n bytes(types) {\n const extents: number[] = [];\n for (let idx = 0; idx < types.length; idx++)\n extents[types[idx] >> 8] = Math.max(\n extents[types[idx] >> 8] || 0,\n types[idx] & 0xff\n );\n let length = 0;\n for (let idx = 0; idx < extents.length; idx++)\n if (extents[idx] != null) length += 2 + Math.ceil((extents[idx] + 1) / 8);\n return length;\n },\n write(view, offset, types) {\n const typesByWindow: number[][] = [];\n for (let idx = 0; idx < types.length; idx++) {\n const window =\n typesByWindow[types[idx] >> 8] || (typesByWindow[types[idx] >> 8] = []);\n window[(types[idx] >> 3) & 0x1f] |= 1 << (7 - (types[idx] & 0x7));\n }\n for (let idx = 0; idx < typesByWindow.length; idx++) {\n const window = typesByWindow[idx];\n if (window != null) {\n view.setUint8(offset++, idx);\n view.setUint8(offset++, window.length);\n for (let byteIdx = 0; byteIdx < window.length; byteIdx++) {\n view.setUint8(offset++, window[byteIdx]);\n }\n }\n }\n return offset;\n },\n read(view, position) {\n const { offset, length } = position;\n const typelist: RecordType[] = [];\n while (position.offset - offset < length) {\n const window = view.getUint8(position.offset);\n const windowLength = view.getUint8(position.offset + 1);\n for (let idx = 0; idx < windowLength; idx++) {\n const bitmap = view.getUint8(position.offset + 2 + idx);\n for (let bit = 0; bit < 8; bit++) {\n if (bitmap & (1 << (7 - bit))) {\n typelist.push((window << 8) | (idx << 3) | bit);\n }\n }\n }\n advance(position, 2 + windowLength);\n }\n return typelist;\n },\n};\n\nexport const ipv4: Encoder<string> = {\n bytes() {\n return 4;\n },\n write(view, offset, ip) {\n const octets = ip.split('.', 4);\n for (let octetIdx = 0; octetIdx < 4; octetIdx++)\n view.setUint8(offset++, parseInt(octets[octetIdx], 10));\n return offset;\n },\n read(view, position) {\n const length = Math.min(position.length, 4);\n const ip = new Array(4)\n .fill(0)\n .map((_, index) =>\n index < length ? view.getUint8(position.offset + index) : 0\n )\n .join('.');\n advance(position, length);\n return ip;\n },\n};\n\nexport const uint16: Encoder<number> = {\n bytes() {\n return 2;\n },\n write(view, offset, key) {\n view.setUint16(offset, key);\n return offset + 2;\n },\n read(view, position) {\n const key = view.getUint16(position.offset);\n advance(position, 2);\n return key;\n },\n};\n\nexport const ipv6: Encoder<string> = {\n bytes() {\n return 16;\n },\n write(view, offset, ip) {\n const middleIdx = ip.indexOf('::');\n const head = (middleIdx > -1 ? ip.slice(0, middleIdx) : ip).split(':');\n const tail = middleIdx > -1 ? ip.slice(middleIdx + 2).split(':') : [];\n const ipv4 =\n tail.length > 0 && tail[tail.length - 1].includes('.')\n ? tail.pop()\n : undefined;\n for (let headIdx = 0; headIdx < head.length; headIdx++) {\n view.setUint16(offset, parseInt(head[headIdx], 16));\n offset += 2;\n }\n const middleLength = 8 - (head.length + tail.length + (ipv4 ? 2 : 0));\n for (let pad = middleLength; pad > 0; pad--) {\n view.setUint16(offset, 0);\n offset += 2;\n }\n for (let tailIdx = 0; tailIdx < tail.length; tailIdx++) {\n view.setUint16(offset, parseInt(tail[tailIdx], 16));\n offset += 2;\n }\n if (ipv4) {\n const v4Parts = ipv4.split('.', 4).map(part => parseInt(part, 10));\n view.setUint16(offset, (v4Parts[0] << 8) | v4Parts[1]);\n view.setUint16(offset + 2, (v4Parts[2] << 8) | v4Parts[3]);\n offset += 4;\n }\n return offset;\n },\n read(view, position) {\n let output = '';\n const length = Math.min(position.length, 16);\n for (let idx = 0; idx < length; idx += 2) {\n if (idx !== 0) output += ':';\n output += view.getUint16(position.offset + idx).toString(16);\n }\n advance(position, length);\n return output\n .replace(/(^|:)0(:0)*:0(:|$)/, '$1::$3')\n .replace(/:{3,4}/, '::');\n },\n};\n\nexport const withRDLength = <T, R = T>(\n encoder: Encoder<T, R>\n): Encoder<T, R> => ({\n bytes(data) {\n return encoder.bytes(data) + 2;\n },\n write(view, offset, data) {\n const startOffset = offset;\n offset = encoder.write(view, offset + 2, data);\n view.setUint16(startOffset, offset - startOffset - 2);\n return offset;\n },\n read(view, position) {\n const { offset, length } = position;\n const rdlength = (position.length = view.getUint16(position.offset));\n position.offset += 2;\n const data = encoder.read(view, position);\n // Restore original position and advance by specified size after\n position.offset = offset + 2 + rdlength;\n position.length = length;\n return data;\n },\n});\n\nexport const array = <T>(encoder: Encoder<T>): Encoder<T[]> => ({\n bytes(data) {\n let byteLength = 0;\n for (let idx = 0; data != null && idx < data.length; idx++)\n byteLength += encoder.bytes(data[idx]);\n return byteLength;\n },\n write(view, offset, data) {\n for (let idx = 0; data != null && idx < data.length; idx++)\n offset = encoder.write(view, offset, data[idx]);\n return offset;\n },\n read(view, position) {\n const { offset, length } = position;\n const data: T[] = [];\n while (position.offset - offset < length)\n data.push(encoder.read(view, position));\n return data;\n },\n});\n\nexport const advance = (position: ReadPosition, bytes: number) => {\n position.offset += bytes | 0;\n position.length -= bytes | 0;\n position.length &= ~(position.length >> 31);\n};\n\nexport const encodeIntoBuffer = <T>(\n encoder: Encoder<T>,\n input: T\n): Uint8Array => {\n const buffer = new ArrayBuffer(encoder.bytes(input));\n const endOffset = encoder.write(new DataView(buffer), 0, input);\n return new Uint8Array(buffer, 0, endOffset);\n};\n\nexport const sliceView = (\n view: DataView,\n position: ReadPosition,\n length = position.length\n) => {\n const slice = new Uint8Array(\n view.buffer,\n view.byteOffset + position.offset,\n length\n );\n advance(position, length);\n return slice;\n};\n","import { RecordClass, RecordType } from './constants';\nimport { Encoder, name, advance } from './encoders';\n\nexport interface Question {\n name: string;\n type: RecordType;\n class?: RecordClass;\n qu?: boolean;\n}\n\nconst QU_BIT = 1 << 15;\n\nexport const question: Encoder<Question> = {\n bytes(question) {\n return name.bytes(question.name) + 4;\n },\n write(view, offset, question) {\n let _class = question.class || RecordClass.IN;\n if (question.qu) _class |= QU_BIT;\n offset = name.write(view, offset, question.name);\n view.setUint16(offset, question.type);\n view.setUint16(offset + 2, _class);\n offset += 4;\n return offset;\n },\n read(view, position) {\n const _name = name.read(view, position);\n const type = view.getUint16(position.offset);\n let _class = view.getUint16(position.offset + 2) || RecordClass.ANY;\n let qu = false;\n if (_class !== RecordClass.ANY && _class & QU_BIT) {\n _class &= ~QU_BIT;\n qu = true;\n }\n advance(position, 4);\n return {\n name: _name,\n type,\n class: _class,\n qu,\n };\n },\n};\n","import { OptCode } from './constants';\nimport {\n type Encoder,\n withRDLength,\n encodeIntoBuffer,\n advance,\n bytes,\n ipv4,\n ipv6,\n} from './encoders';\n\nexport const enum IPType {\n v4 = 1,\n v6 = 2,\n}\n\nexport interface BaseOpt {\n code: number;\n}\n\nexport interface ClientSubnetOpt extends BaseOpt {\n code: OptCode.CLIENT_SUBNET;\n family?: IPType | (number & {});\n sourcePrefixLength?: number;\n scopePrefixLength?: number;\n ip: string;\n}\n\nexport interface KeepAliveOpt extends BaseOpt {\n code: OptCode.TCP_KEEPALIVE;\n timeout?: number;\n}\n\nexport interface PaddingOpt extends BaseOpt {\n code: OptCode.PADDING;\n length?: number;\n}\n\nexport interface TagOpt extends BaseOpt {\n code: OptCode.KEY_TAG;\n tags: number[];\n}\n\nexport interface UnknownOpt extends BaseOpt {\n data: Uint8Array;\n}\n\nexport type PacketOpt =\n | ClientSubnetOpt\n | KeepAliveOpt\n | PaddingOpt\n | TagOpt\n | UnknownOpt;\n\nexport const unknownOpt: Encoder<UnknownOpt> = withRDLength({\n bytes(option) {\n return bytes.bytes(option.data);\n },\n write(view, offset, option) {\n return bytes.write(view, offset, option.data);\n },\n read(view, position) {\n return {\n code: OptCode.OPTION_0,\n data: bytes.read(view, position),\n };\n },\n});\n\n// See: https://github.com/nodejs/node/blob/842448b/lib/internal/net.js#L15-L18\nconst v4Seg = '(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])';\nconst v4Str = `(?:${v4Seg}\\\\.){3}${v4Seg}`;\nconst ipv4Re = new RegExp(`^${v4Str}$`);\n\nconst isIPv4 = (ip: string) => ipv4Re.test(ip);\n\nexport const clientSubnetOpt: Encoder<ClientSubnetOpt> = withRDLength({\n bytes(option) {\n const sourcePrefixLength = option.sourcePrefixLength || 0;\n return Math.ceil(sourcePrefixLength / 8) + 4;\n },\n write(view, offset, option) {\n const sourcePrefixLength = option.sourcePrefixLength || 0;\n const scopePrefixLength = option.scopePrefixLength || 0;\n const family = option.family || (isIPv4(option.ip) ? IPType.v4 : IPType.v6);\n const maskLength = Math.ceil(sourcePrefixLength / 8);\n view.setUint16(offset, family);\n view.setUint8(offset + 2, sourcePrefixLength);\n view.setUint8(offset + 3, scopePrefixLength);\n offset += 4;\n const ipBuffer = encodeIntoBuffer(\n family === IPType.v4 ? ipv4 : ipv6,\n option.ip\n );\n for (let byteIdx = 0; byteIdx < maskLength; byteIdx++)\n view.setUint8(offset++, ipBuffer[byteIdx]);\n return offset;\n },\n read(view, position) {\n const family = view.getUint16(position.offset);\n const sourcePrefixLength = view.getUint8(position.offset + 2);\n const scopePrefixLength = view.getUint8(position.offset + 3);\n advance(position, 4);\n return {\n code: OptCode.CLIENT_SUBNET,\n family,\n sourcePrefixLength,\n scopePrefixLength,\n ip:\n family === IPType.v4\n ? ipv4.read(view, position)\n : ipv6.read(view, position),\n };\n },\n});\n\nexport const keepAliveOpt: Encoder<KeepAliveOpt> = withRDLength({\n bytes(option) {\n return option.timeout ? 2 : 0;\n },\n write(view, offset, option) {\n if (option.timeout) {\n view.setUint16(offset, option.timeout);\n offset += 2;\n }\n return offset;\n },\n read(view, position) {\n if (position.length) {\n const timeout = view.getUint16(position.offset);\n advance(position, 2);\n return { code: OptCode.TCP_KEEPALIVE, timeout };\n } else {\n return { code: OptCode.TCP_KEEPALIVE, timeout: undefined };\n }\n },\n});\n\nexport const paddingOpt: Encoder<PaddingOpt> = withRDLength({\n bytes(option) {\n return option.length || 0;\n },\n write(_view, offset, option) {\n return offset + (option.length || 0);\n },\n read(_view, position) {\n const { length } = position;\n advance(position, length);\n return { code: OptCode.PADDING, length };\n },\n});\n\nexport const tagOpt: Encoder<TagOpt> = withRDLength({\n bytes(option) {\n return option.tags.length * 2;\n },\n write(view, offset, option) {\n for (let idx = 0; idx < option.tags.length; idx++) {\n view.setUint16(offset, option.tags[idx]);\n offset += 2;\n }\n return offset;\n },\n read(view, position) {\n const { offset, length } = position;\n const tags: number[] = [];\n while (position.offset - offset < length) {\n tags.push(view.getUint16(position.offset));\n advance(position, 2);\n }\n return {\n code: OptCode.KEY_TAG,\n tags,\n };\n },\n});\n\nconst isUnknownOpt = (option: PacketOpt): option is UnknownOpt =>\n !!(option as UnknownOpt).data;\n\nexport const option: Encoder<PacketOpt> = {\n bytes(option) {\n if (isUnknownOpt(option)) {\n return unknownOpt.bytes(option) + 2;\n }\n switch (option.code) {\n case OptCode.CLIENT_SUBNET:\n return clientSubnetOpt.bytes(option) + 2;\n case OptCode.TCP_KEEPALIVE:\n return keepAliveOpt.bytes(option) + 2;\n case OptCode.PADDING:\n return paddingOpt.bytes(option) + 2;\n case OptCode.KEY_TAG:\n return tagOpt.bytes(option) + 2;\n }\n },\n write(view, offset, option) {\n view.setUint16(offset, option.code);\n offset += 2;\n if (isUnknownOpt(option)) {\n return unknownOpt.write(view, offset, option);\n }\n switch (option.code) {\n case OptCode.CLIENT_SUBNET:\n return clientSubnetOpt.write(view, offset, option);\n case OptCode.TCP_KEEPALIVE:\n return keepAliveOpt.write(view, offset, option);\n case OptCode.PADDING:\n return paddingOpt.write(view, offset, option);\n case OptCode.KEY_TAG:\n return tagOpt.write(view, offset, option);\n }\n },\n read(view, position) {\n const code = view.getUint16(position.offset);\n advance(position, 2);\n switch (code) {\n case OptCode.CLIENT_SUBNET:\n return clientSubnetOpt.read(view, position);\n case OptCode.TCP_KEEPALIVE:\n return keepAliveOpt.read(view, position);\n case OptCode.PADDING:\n return paddingOpt.read(view, position);\n case OptCode.KEY_TAG:\n return tagOpt.read(view, position);\n default:\n const opt = unknownOpt.read(view, position);\n opt.code = code;\n return opt;\n }\n },\n};\n","import {\n type Encoder,\n withRDLength,\n array,\n textDecoder,\n advance,\n uint16,\n bytes,\n ipv4,\n ipv6,\n string,\n} from './encoders';\n\nexport const enum SvcParamCode {\n Mandatory = 0,\n Alpn = 1,\n NoDefaultAlpn = 2,\n Port = 3,\n Ipv4Hint = 4,\n EchConfig = 5,\n Ipv6Hint = 6,\n DohPath = 7,\n Odoh = 32769,\n}\n\nexport interface SvcParams {\n mandatory?: (SvcParamCode | (number & {}))[];\n alpn?: string[];\n 'no-default-alpn'?: boolean;\n port?: number;\n ipv4hint?: string[];\n ipv6hint?: string[];\n echconfig?: Uint8Array;\n dohpath?: string;\n odoh?: Uint8Array;\n}\n\nconst mandatorySvcParam: Encoder<(SvcParamCode | (number & {}))[]> =\n withRDLength(array(uint16));\nconst alpnSvcParam = withRDLength(array(string));\nconst portSvcParam = withRDLength(uint16);\nconst ipv4HintSvcParam = withRDLength(array(ipv4));\nconst ipv6HintSvcParam = withRDLength(array(ipv6));\nconst bytesSvcParam = withRDLength(bytes);\n\nexport const svcParams: Encoder<SvcParams> = {\n bytes(params) {\n let byteLength = 0;\n if (params.mandatory != null)\n byteLength += mandatorySvcParam.bytes(params.mandatory) + 2;\n if (params.alpn != null) byteLength += alpnSvcParam.bytes(params.alpn) + 2;\n if (params['no-default-alpn']) byteLength += 4;\n if (params.port != null) byteLength += portSvcParam.bytes(params.port) + 2;\n if (params.ipv4hint)\n byteLength += ipv4HintSvcParam.bytes(params.ipv4hint) + 2;\n if (params.ipv6hint)\n byteLength += ipv6HintSvcParam.bytes(params.ipv6hint) + 2;\n if (params.echconfig)\n byteLength += bytesSvcParam.bytes(params.echconfig) + 2;\n if (params.dohpath) byteLength += bytesSvcParam.bytes(params.dohpath) + 2;\n if (params.odoh) byteLength += bytesSvcParam.bytes(params.odoh) + 2;\n return byteLength;\n },\n write(view, offset, params) {\n if (params.mandatory != null) {\n view.setUint16(offset, SvcParamCode.Mandatory);\n offset = mandatorySvcParam.write(view, offset + 2, params.mandatory);\n }\n if (params.alpn != null) {\n view.setUint16(offset, SvcParamCode.Alpn);\n offset = alpnSvcParam.write(view, offset + 2, params.alpn);\n }\n if (params['no-default-alpn']) {\n view.setUint16(offset, SvcParamCode.NoDefaultAlpn);\n offset += 4;\n }\n if (params.port != null) {\n view.setUint16(offset, SvcParamCode.Port);\n offset = portSvcParam.write(view, offset + 2, params.port);\n }\n if (params.ipv4hint) {\n view.setUint16(offset, SvcParamCode.Ipv4Hint);\n offset = ipv4HintSvcParam.write(view, offset + 2, params.ipv4hint);\n }\n if (params.ipv6hint) {\n view.setUint16(offset, SvcParamCode.Ipv6Hint);\n offset = ipv6HintSvcParam.write(view, offset + 2, params.ipv6hint);\n }\n if (params.echconfig) {\n view.setUint16(offset, SvcParamCode.EchConfig);\n offset = bytesSvcParam.write(view, offset + 2, params.echconfig);\n }\n if (params.dohpath) {\n view.setUint16(offset, SvcParamCode.DohPath);\n offset = bytesSvcParam.write(view, offset + 2, params.dohpath);\n }\n if (params.odoh) {\n view.setUint16(offset, SvcParamCode.Odoh);\n offset = bytesSvcParam.write(view, offset + 2, params.odoh);\n }\n return offset;\n },\n read(view, position) {\n const { length, offset } = position;\n const params: SvcParams = {\n mandatory: undefined,\n alpn: undefined,\n 'no-default-alpn': false,\n port: undefined,\n ipv4hint: undefined,\n ipv6hint: undefined,\n echconfig: undefined,\n dohpath: undefined,\n odoh: undefined,\n };\n while (position.offset - offset < length) {\n const code = view.getUint16(position.offset) as\n | SvcParamCode\n | (number & {});\n advance(position, 2);\n switch (code) {\n case SvcParamCode.Mandatory:\n params.mandatory = mandatorySvcParam.read(view, position);\n break;\n case SvcParamCode.Alpn:\n params.alpn = alpnSvcParam.read(view, position);\n break;\n case SvcParamCode.NoDefaultAlpn:\n params['no-default-alpn'] = true;\n advance(position, 2);\n break;\n case SvcParamCode.Port:\n params.port = portSvcParam.read(view, position);\n break;\n case SvcParamCode.Ipv4Hint:\n params.ipv4hint = ipv4HintSvcParam.read(view, position);\n break;\n case SvcParamCode.Ipv6Hint:\n params.ipv6hint = ipv6HintSvcParam.read(view, position);\n break;\n case SvcParamCode.EchConfig:\n params.echconfig = bytesSvcParam.read(view, position);\n break;\n case SvcParamCode.DohPath:\n params.dohpath = textDecoder.decode(\n bytesSvcParam.read(view, position)\n );\n break;\n case SvcParamCode.Odoh:\n params.odoh = bytesSvcParam.read(view, position);\n break;\n default:\n // NOTE: We discard other parameters using the required RDLENGTH field\n bytesSvcParam.read(view, position);\n }\n }\n return params;\n },\n};\n","import { RecordClass, RecordType } from './constants';\nimport { Encoder, advance, octets } from './encoders';\nimport { option, PacketOpt } from './options';\nimport { svcParams, SvcParams } from './svcparams';\nimport {\n withRDLength,\n typeBitmap,\n string,\n bytes,\n name,\n ipv4,\n ipv6,\n array,\n} from './encoders';\n\nexport interface BaseAnswer {\n type: RecordType;\n name: string;\n ttl?: number;\n class?: RecordClass;\n flush?: boolean;\n}\n\nconst answerBytes = withRDLength(bytes);\n\nexport interface NsAnswer extends BaseAnswer {\n type: RecordType.NS;\n data: string;\n}\n\nconst answerName = withRDLength(name);\n\nexport interface AAnswer extends BaseAnswer {\n type: RecordType.A;\n data: string;\n}\n\nconst answerIPv4 = withRDLength(ipv4);\n\nexport interface AAAAAnswer extends BaseAnswer {\n type: RecordType.AAAA;\n data: string;\n}\n\nconst answerIPv6 = withRDLength(ipv6);\n\nexport interface TxtAnswer extends BaseAnswer {\n type: RecordType.TXT;\n data: string[];\n}\n\nexport const answerTxt: Encoder<string[]> = withRDLength(array(string));\n\nexport interface SrvData {\n priority?: number;\n weight?: number;\n port: number;\n target: string;\n}\n\nexport interface SrvAnswer extends BaseAnswer {\n type: RecordType.SRV;\n data: SrvData;\n}\n\nexport const answerSrv: Encoder<SrvData> = withRDLength({\n bytes(data) {\n return name.bytes(data.target) + 6;\n },\n write(view, offset, data) {\n view.setUint16(offset, data.priority || 0);\n view.setUint16(offset + 2, data.weight || 0);\n view.setUint16(offset + 4, data.port || 0);\n return name.write(view, offset + 6, data.target);\n },\n read(view, position) {\n const data: SrvData = { priority: 0, weight: 0, port: 0, target: '' };\n data.priority = view.getUint16(position.offset);\n data.weight = view.getUint16(position.offset + 2);\n data.port = view.getUint16(position.offset + 4);\n advance(position, 6);\n data.target = name.read(view, position);\n return data;\n },\n});\n\nexport interface HInfoData {\n cpu: string;\n os: string;\n}\n\nexport interface HInfoAnswer extends BaseAnswer {\n type: RecordType.HINFO;\n data: HInfoData;\n}\n\nexport const answerHInfo: Encoder<HInfoData> = withRDLength({\n bytes(data) {\n return string.bytes(data.cpu) + string.bytes(data.os);\n },\n write(view, offset, data) {\n offset = string.write(view, offset, data.cpu);\n offset = string.write(view, offset, data.os);\n return offset;\n },\n read(view, position) {\n return {\n cpu: string.read(view, position),\n os: string.read(view, position),\n };\n },\n});\n\nexport interface CaaData {\n flags?: number;\n tag: 'issue' | 'issuewild' | 'iodef';\n value: Uint8Array;\n issuerCritical?: boolean;\n}\n\nexport interface CaaAnswer extends BaseAnswer {\n type: RecordType.CAA;\n data: CaaData;\n}\n\nconst ISSUER_CRITICAL = 1 << 7;\n\nconst toCaaTag = (input: string) => {\n switch (input) {\n case 'issue':\n case 'issuewild':\n case 'iodef':\n return input;\n default:\n return 'issue';\n }\n};\n\nexport const answerCaa: Encoder<CaaData> = withRDLength({\n bytes(data) {\n return string.bytes(data.tag) + bytes.bytes(data.value) + 1;\n },\n write(view, offset, data) {\n let flags = data.flags || 0;\n if (data.issuerCritical) flags = ISSUER_CRITICAL;\n view.setUint8(offset, flags);\n offset = string.write(view, offset + 1, data.tag);\n offset = bytes.write(view, offset, data.value);\n return offset;\n },\n read(view, position) {\n const flags = view.getUint8(position.offset);\n advance(position, 1);\n return {\n flags,\n tag: toCaaTag(string.read(view, position)),\n value: bytes.read(view, position),\n issuerCritical: !!(flags & ISSUER_CRITICAL),\n };\n },\n});\n\nexport interface SoaData {\n mname: string;\n rname: string;\n serial?: number;\n refresh?: number;\n retry?: number;\n expire?: number;\n minimum?: number;\n}\n\nexport interface SoaAnswer extends BaseAnswer {\n type: RecordType.SOA;\n data: SoaData;\n}\n\nexport const answerSoa: Encoder<SoaData> = withRDLength({\n bytes(data) {\n return name.bytes(data.mname) + name.bytes(data.rname) + 20;\n },\n write(view, offset, data) {\n offset = name.write(view, offset, data.mname);\n offset = name.write(view, offset, data.rname);\n view.setUint32(offset, data.serial || 0);\n view.setUint32(offset + 4, data.refresh || 0);\n view.setUint32(offset + 8, data.retry || 0);\n view.setUint32(offset + 12, data.expire || 0);\n view.setUint32(offset + 16, data.minimum || 0);\n return offset + 20;\n },\n read(view, position) {\n const data: SoaData = {\n mname: name.read(view, position),\n rname: name.read(view, position),\n serial: view.getUint32(position.offset),\n refresh: view.getUint32(position.offset + 4),\n retry: view.getUint32(position.offset + 8),\n expire: view.getUint32(position.offset + 12),\n minimum: view.getUint32(position.offset + 16),\n };\n position.offset += 20;\n position.length -= 20;\n return data;\n },\n});\n\nexport interface MxData {\n preference?: number;\n exchange: string;\n}\n\nexport interface MxAnswer extends BaseAnswer {\n type: RecordType.MX;\n data: MxData;\n}\n\nexport const answerMx: Encoder<MxData> = withRDLength({\n bytes(data) {\n return name.bytes(data.exchange) + 2;\n },\n write(view, offset, data) {\n view.setUint16(offset, data.preference || 0);\n return name.write(view, offset + 2, data.exchange);\n },\n read(view, position) {\n const data: MxData = {\n preference: view.getUint16(position.offset),\n exchange: '',\n };\n advance(position, 2);\n data.exchange = name.read(view, position);\n return data;\n },\n});\n\nexport interface DnskeyData {\n flags: number;\n algorithm: number;\n key: Uint8Array;\n}\n\nexport interface DnskeyAnswer extends BaseAnswer {\n type: RecordType.DNSKEY;\n data: DnskeyData;\n}\n\nexport const answerDnskey: Encoder<DnskeyData> = withRDLength({\n bytes(data) {\n return bytes.bytes(data.key) + 4;\n },\n write(view, offset, data) {\n const PROTOCOL_DNSSEC = 3;\n view.setUint16(offset, data.flags);\n view.setUint8(offset + 2, PROTOCOL_DNSSEC);\n view.setUint8(offset + 3, data.algorithm);\n return bytes.write(view, offset + 4, data.key);\n },\n read(view, position) {\n const flags = view.getUint16(position.offset);\n const algorithm = view.getUint8(position.offset + 3);\n advance(position, 4);\n return {\n flags,\n algorithm,\n key: bytes.read(view, position),\n };\n },\n});\n\nexport interface RrsigData {\n typeCovered: RecordType;\n algorithm: number;\n labels: number;\n originalTTL: number;\n expiration: number;\n inception: number;\n keyTag: number;\n signersName: string;\n signature: Uint8Array;\n}\n\nexport interface RrsigAnswer extends BaseAnswer {\n type: RecordType.RRSIG;\n data: RrsigData;\n}\n\nexport const answerRrsig: Encoder<RrsigData> = withRDLength({\n bytes(data) {\n return 18 + name.bytes(data.signersName) + bytes.bytes(data.signature);\n },\n write(view, offset, data) {\n view.setUint16(offset, data.typeCovered);\n view.setUint8(offset + 2, data.algorithm);\n view.setUint8(offset + 3, data.labels);\n view.setUint32(offset + 4, data.originalTTL);\n view.setUint32(offset + 8, data.expiration);\n view.setUint32(offset + 12, data.inception);\n view.setUint16(offset + 16, data.keyTag);\n offset = name.write(view, offset + 18, data.signersName);\n offset = bytes.write(view, offset, data.signature);\n return offset;\n },\n read(view, position) {\n const typeCovered = view.getUint16(position.offset);\n const algorithm = view.getUint8(position.offset + 2);\n const labels = view.getUint8(position.offset + 3);\n const originalTTL = view.getUint32(position.offset + 4);\n const expiration = view.getUint32(position.offset + 8);\n const inception = view.getUint32(position.offset + 12);\n const keyTag = view.getUint16(position.offset + 16);\n advance(position, 18);\n return {\n typeCovered,\n algorithm,\n labels,\n originalTTL,\n expiration,\n inception,\n keyTag,\n signersName: name.read(view, position),\n signature: bytes.read(view, position),\n };\n },\n});\n\nexport interface RpData {\n mbox: string;\n txt: string;\n}\n\nexport interface RpAnswer extends BaseAnswer {\n type: RecordType.RP;\n data: RpData;\n}\n\nexport const answerRp: Encoder<RpData> = withRDLength({\n bytes(data) {\n return name.bytes(data.mbox) + name.bytes(data.txt);\n },\n write(view, offset, data) {\n offset = name.write(view, offset, data.mbox);\n offset = name.write(view, offset, data.txt);\n return offset;\n },\n read(view, position) {\n return {\n mbox: name.read(view, position),\n txt: name.read(view, position),\n };\n },\n});\n\nexport interface NsecData {\n nextDomain: string;\n rrtypes: RecordType[];\n}\n\nexport interface NsecAnswer extends BaseAnswer {\n type: RecordType.NSEC;\n data: NsecData;\n}\n\nexport const answerNsec: Encoder<NsecData> = withRDLength({\n bytes(data) {\n return name.bytes(data.nextDomain) + typeBitmap.bytes(data.rrtypes);\n },\n write(view, offset, data) {\n offset = name.write(view, offset, data.nextDomain);\n offset = typeBitmap.write(view, offset, data.rrtypes);\n return offset;\n },\n read(view, position) {\n return {\n nextDomain: name.read(view, position),\n rrtypes: typeBitmap.read(view, position),\n };\n },\n});\n\nexport interface Nsec3Data {\n algorithm: number;\n flags: number;\n iterations: number;\n salt: Uint8Array;\n nextDomain: Uint8Array;\n rrtypes: RecordType[];\n}\n\nexport interface Nsec3Answer extends BaseAnswer {\n type: RecordType.NSEC3;\n data: Nsec3Data;\n}\n\nexport const answerNsec3: Encoder<Nsec3Data> = withRDLength({\n bytes(data) {\n return (\n octets.bytes(data.salt) +\n octets.bytes(data.nextDomain) +\n typeBitmap.bytes(data.rrtypes) +\n 4\n );\n },\n write(view, offset, data) {\n view.setUint8(offset, data.algorithm);\n view.setUint8(offset + 1, data.flags);\n view.setUint16(offset + 2, data.iterations);\n offset = octets.write(view, offset + 4, data.salt);\n offset = octets.write(view, offset, data.nextDomain);\n offset = typeBitmap.write(view, offset, data.rrtypes);\n return offset;\n },\n read(view, position) {\n const algorithm = view.getUint8(position.offset);\n const flags = view.getUint8(position.offset + 1);\n const iterations = view.getUint16(position.offset + 2);\n advance(position, 4);\n return {\n algorithm,\n flags,\n iterations,\n salt: octets.read(view, position),\n nextDomain: octets.read(view, position),\n rrtypes: typeBitmap.read(view, position),\n };\n },\n});\n\nexport interface SshfpData {\n algorithm: number;\n hash: number;\n fingerprint: Uint8Array;\n}\n\nexport interface SshfpAnswer extends BaseAnswer {\n type: RecordType.SSHFP;\n data: SshfpData;\n}\n\nexport const answerSshfp: Encoder<SshfpData> = withRDLength({\n bytes(data) {\n return bytes.bytes(data.fingerprint) + 2;\n },\n write(view, offset, data) {\n view.setUint8(offset, data.algorithm);\n view.setUint8(offset + 1, data.hash);\n return bytes.write(view, offset + 2, data.fingerprint);\n },\n read(view, position) {\n const algorithm = view.getUint8(position.offset);\n const hash = view.getUint8(position.offset + 1);\n advance(position, 2);\n return {\n algorithm,\n hash,\n fingerprint: bytes.read(view, position),\n };\n },\n});\n\nexport interface DsData {\n keyTag: number;\n algorithm: number;\n digestType: number;\n digest: Uint8Array;\n}\n\nexport interface DsAnswer extends BaseAnswer {\n type: RecordType.DS;\n data: DsData;\n}\n\nexport const answerDs: Encoder<DsData> = withRDLength({\n bytes(data) {\n return bytes.bytes(data.digest) + 4;\n },\n write(view, offset, data) {\n view.setUint16(offset, data.keyTag);\n view.setUint8(offset + 2, data.algorithm);\n view.setUint8(offset + 3, data.digestType);\n offset = bytes.write(view, offset + 4, data.digest);\n return offset;\n },\n read(view, position) {\n const keyTag = view.getUint16(position.offset);\n const algorithm = view.getUint8(position.offset + 2);\n const digestType = view.getUint8(position.offset + 3);\n advance(position, 4);\n return {\n keyTag,\n algorithm,\n digestType,\n digest: bytes.read(view, position),\n };\n },\n});\n\nexport interface NaptrData {\n order: number;\n preference: number;\n flags: string;\n services: string;\n regexp: string;\n replacement: string;\n}\n\nexport interface NaptrAnswer extends BaseAnswer {\n type: RecordType.NAPTR;\n data: NaptrData;\n}\n\nexport const answerNaptr: Encoder<NaptrData> = withRDLength({\n bytes(data) {\n return (\n string.bytes(data.flags) +\n string.bytes(data.services) +\n string.bytes(data.regexp) +\n name.bytes(data.replacement) +\n 4\n );\n },\n write(view, offset, data) {\n view.setUint16(offset, data.order);\n view.setUint16(offset + 2, data.preference);\n offset = string.write(view, offset + 4, data.flags);\n offset = string.write(view, offset, data.services);\n offset = string.write(view, offset, data.regexp);\n offset = name.write(view, offset, data.replacement);\n return offset;\n },\n read(view, position) {\n const order = view.getUint16(position.offset);\n const preference = view.getUint16(position.offset + 2);\n advance(position, 4);\n return {\n order,\n preference,\n flags: string.read(view, position),\n services: string.read(view, position),\n regexp: string.read(view, position),\n replacement: name.read(view, position),\n };\n },\n});\n\nexport interface TlsaData {\n usage: number;\n selector: number;\n matchingType: number;\n certificate: Uint8Array;\n}\n\nexport interface TlsaAnswer extends BaseAnswer {\n type: RecordType.TLSA;\n data: TlsaData;\n}\n\nexport const answerTlsa: Encoder<TlsaData> = withRDLength({\n bytes(data) {\n return bytes.bytes(data.certificate) + 3;\n },\n write(view, offset, data) {\n view.setUint8(offset, data.usage);\n view.setUint8(offset + 1, data.selector);\n view.setUint8(offset + 2, data.matchingType);\n return bytes.write(view, offset + 3, data.certificate);\n },\n read(view, position) {\n const usage = view.getUint8(position.offset);\n const selector = view.getUint8(position.offset + 1);\n const matchingType = view.getUint8(position.offset + 2);\n advance(position, 3);\n return {\n usage,\n selector,\n matchingType,\n certificate: bytes.read(view, position),\n };\n },\n});\n\nexport interface SvcbData {\n name: string;\n priority?: number;\n params: SvcParams;\n}\n\nexport interface SvcbAnswer extends BaseAnswer {\n type: RecordType.SVCB;\n data: SvcbData;\n}\n\nexport interface HttpsAnswer extends BaseAnswer {\n type: RecordType.HTTPS;\n data: SvcbData;\n}\n\nexport const answerSvcb: Encoder<SvcbData> = withRDLength({\n bytes(data) {\n return name.bytes(data.name) + svcParams.bytes(data.params) + 2;\n },\n write(view, offset, data) {\n view.setUint16(offset, data.priority || 0);\n offset = name.write(view, offset + 2, data.name);\n offset = svcParams.write(view, offset, data.params);\n return offset;\n },\n read(view, position) {\n const priority = view.getUint16(position.offset);\n advance(position, 2);\n return {\n name: name.read(view, position),\n priority,\n params: svcParams.read(view, position),\n };\n },\n});\n\nexport interface OptAnswer {\n type: RecordType.OPT;\n name?: '.';\n udpPayloadSize: number;\n extendedRcode: number;\n ednsVersion: number;\n flags: number;\n data: PacketOpt[];\n}\n\nexport const answerOpt: Encoder<PacketOpt[]> = withRDLength(array(option));\n\nexport interface PtrAnswer extends BaseAnswer {\n type: RecordType.PTR;\n data: string;\n}\n\nexport interface CnameAnswer extends BaseAnswer {\n type: RecordType.CNAME;\n data: string;\n}\n\nexport interface DnameAnswer extends BaseAnswer {\n type: RecordType.DNAME;\n data: string;\n}\n\nexport interface NullAnswer extends BaseAnswer {\n type: RecordType.NULL;\n data: Uint8Array | string;\n}\n\nexport interface UnknownAnswer extends BaseAnswer {\n type:\n | RecordType.AFSDB\n | RecordType.APL\n | RecordType.AXFR\n | RecordType.CDNSKEY\n | RecordType.CDS\n | RecordType.CERT\n | RecordType.DHCID\n | RecordType.DLV\n | RecordType.HIP\n | RecordType.IPSECKEY\n | RecordType.IXFR\n | RecordType.KEY\n | RecordType.KX\n | RecordType.LOC\n | RecordType.NSEC3PARAM\n | RecordType.NULL\n | RecordType.SIG\n | RecordType.TA\n | RecordType.TKEY\n | RecordType.TSIG;\n data: Uint8Array | string;\n}\n\nexport type Answer =\n | AAnswer\n | AAAAAnswer\n | TxtAnswer\n | SrvAnswer\n | HInfoAnswer\n | CaaAnswer\n | NsAnswer\n | SoaAnswer\n | MxAnswer\n | OptAnswer\n | DnskeyAnswer\n | RrsigAnswer\n | RpAnswer\n | NsecAnswer\n | Nsec3Answer\n | SshfpAnswer\n | DsAnswer\n | NaptrAnswer\n | TlsaAnswer\n | PtrAnswer\n | CnameAnswer\n | DnameAnswer\n | SvcbAnswer\n | HttpsAnswer\n | NullAnswer\n | UnknownAnswer;\n\nconst FLUSH_MASK = 1 << 15;\n\nexport const answer: Encoder<Answer> = {\n bytes(answer) {\n const byteLength =\n 8 + name.bytes(answer.type === RecordType.OPT ? '.' : answer.name);\n switch (answer.type) {\n case RecordType.A:\n return byteLength + answerIPv4.bytes(answer.data);\n case RecordType.NS:\n return byteLength + answerName.bytes(answer.data);\n case RecordType.SOA:\n return byteLength + answerSoa.bytes(answer.data);\n case RecordType.HINFO:\n return byteLength + answerHInfo.bytes(answer.data);\n case RecordType.MX:\n return byteLength + answerMx.bytes(answer.data);\n case RecordType.TXT:\n return byteLength + answerTxt.bytes(answer.data);\n case RecordType.RP:\n return byteLength + answerRp.bytes(answer.data);\n case RecordType.AAAA:\n return byteLength + answerIPv6.bytes(answer.data);\n case RecordType.SRV:\n return byteLength + answerSrv.bytes(answer.data);\n case RecordType.NAPTR:\n return byteLength + answerNaptr.bytes(answer.data);\n case RecordType.OPT:\n return byteLength + answerOpt.bytes(answer.data);\n case RecordType.DS:\n return byteLength + answerDs.bytes(answer.data);\n case RecordType.SSHFP:\n return byteLength + answerSshfp.bytes(answer.data);\n case RecordType.RRSIG:\n return byteLength + answerRrsig.bytes(answer.data);\n case RecordType.NSEC:\n return byteLength + answerNsec.bytes(answer.data);\n case RecordType.DNSKEY:\n return byteLength + answerDnskey.bytes(answer.data);\n case RecordType.NSEC3:\n return byteLength + answerNsec3.bytes(answer.data);\n case RecordType.TLSA:\n return byteLength + answerTlsa.bytes(answer.data);\n case RecordType.SVCB:\n case RecordType.HTTPS:\n return byteLength + answerSvcb.bytes(answer.data);\n case RecordType.CAA:\n return byteLength + answerCaa.bytes(answer.data);\n case RecordType.PTR:\n case RecordType.CNAME:\n case RecordType.DNAME:\n return byteLength + answerName.bytes(answer.data);\n default:\n return byteLength + answerBytes.bytes(answer.data);\n }\n },\n write(view, offset, answer) {\n if (answer.type === RecordType.OPT) {\n offset = name.write(view, offset, '.');\n view.setUint16(offset, answer.type);\n view.setUint16(offset + 2, answer.udpPayloadSize || 4_096);\n view.setUint8(offset + 4, answer.extendedRcode || 0);\n view.setUint8(offset + 5, answer.ednsVersion || 0);\n view.setUint16(offset + 6, answer.flags || 0);\n offset += 8;\n return answerOpt.write(view, offset, answer.data);\n }\n offset = name.write(view, offset, answer.name);\n view.setUint16(offset, answer.type);\n view.setUint16(\n offset + 2,\n (answer.class || 0) | (answer.flush ? FLUSH_MASK : 0)\n );\n view.setUint32(offset + 4, answer.ttl || 0);\n offset += 8;\n switch (answer.type) {\n case RecordType.A:\n return answerIPv4.write(view, offset, answer.data);\n case RecordType.NS:\n return answerName.write(view, offset, answer.data);\n case RecordType.SOA:\n return answerSoa.write(view, offset, answer.data);\n case RecordType.HINFO:\n return answerHInfo.write(view, offset, answer.data);\n case RecordType.MX:\n return answerMx.write(view, offset, answer.data);\n case RecordType.TXT:\n return answerTxt.write(view, offset, answer.data);\n case RecordType.RP:\n return answerRp.write(view, offset, answer.data);\n case RecordType.AAAA:\n return answerIPv6.write(view, offset, answer.data);\n case RecordType.SRV:\n return answerSrv.write(view, offset, answer.data);\n case RecordType.NAPTR:\n return answerNaptr.write(view, offset, answer.data);\n case RecordType.DS:\n return answerDs.write(view, offset, answer.data);\n case RecordType.SSHFP:\n return answerSshfp.write(view, offset, answer.data);\n case RecordType.RRSIG:\n return answerRrsig.write(view, offset, answer.data);\n case RecordType.NSEC:\n return answerNsec.write(view, offset, answer.data);\n case RecordType.DNSKEY:\n return answerDnskey.write(view, offset, answer.data);\n case RecordType.NSEC3:\n return answerNsec3.write(view, offset, answer.data);\n case RecordType.TLSA:\n return answerTlsa.write(view, offset, answer.data);\n case RecordType.SVCB:\n case RecordType.HTTPS:\n return answerSvcb.write(view, offset, answer.data);\n case RecordType.CAA:\n return answerCaa.write(view, offset, answer.data);\n case RecordType.PTR:\n case RecordType.CNAME:\n case RecordType.DNAME:\n return answerName.write(view, offset, answer.data);\n default:\n return answerBytes.write(view, offset, answer.data);\n }\n },\n read(view, position) {\n const _name = name.read(view, position);\n const type = view.getUint16(position.offset);\n if (type === RecordType.OPT) {\n const udpPayloadSize = view.getUint16(position.offset + 2) || 4_096;\n const extendedRcode = view.getUint8(position.offset + 4);\n const ednsVersion = view.getUint8(position.offset + 5);\n const flags = view.getUint16(position.offset + 6);\n advance(position, 8);\n return {\n type,\n udpPayloadSize,\n extendedRcode,\n ednsVersion,\n flags,\n data: answerOpt.read(view, position),\n };\n }\n const _class = view.getUint16(position.offset + 2);\n const ttl = view.getUint32(position.offset + 4);\n advance(position, 8);\n const answer: Answer = {\n name: _name,\n type,\n class: _class & ~FLUSH_MASK,\n flush: !!(_class & FLUSH_MASK),\n ttl,\n data: null as any,\n };\n switch (answer.type) {\n case RecordType.A:\n answer.data = answerIPv4.read(view, position);\n return answer;\n case RecordType.NS:\n answer.data = answerName.read(view, position);\n return answer;\n case RecordType.SOA:\n answer.data = answerSoa.read(view, position);\n return answer;\n case RecordType.HINFO:\n answer.data = answerHInfo.read(view, position);\n return answer;\n case RecordType.MX:\n answer.data = answerMx.read(view, position);\n return answer;\n case RecordType.TXT:\n answer.data = answerTxt.read(view, position);\n return answer;\n case RecordType.RP:\n answer.data = answerRp.read(view, position);\n return answer;\n case RecordType.AAAA:\n answer.data = answerIPv6.read(view, position);\n return answer;\n case RecordType.SRV:\n answer.data = answerSrv.read(view, position);\n return answer;\n case RecordType.NAPTR:\n answer.data = answerNaptr.read(view, position);\n return answer;\n case RecordType.DS:\n answer.data = answerDs.read(view, position);\n return answer;\n case RecordType.SSHFP:\n answer.data = answerSshfp.read(view, position);\n return answer;\n case RecordType.RRSIG:\n answer.data = answerRrsig.read(view, position);\n return answer;\n case RecordType.NSEC:\n answer.data = answerNsec.read(view, position);\n return answer;\n case RecordType.DNSKEY:\n answer.data = answerDnskey.read(view, position);\n return answer;\n case RecordType.NSEC3:\n answer.data = answerNsec3.read(view, position);\n return answer;\n case RecordType.TLSA:\n answer.data = answerTlsa.read(view, position);\n return answer;\n case RecordType.SVCB:\n case RecordType.HTTPS:\n answer.data = answerSvcb.read(view, position);\n return answer;\n case RecordType.CAA:\n answer.data = answerCaa.read(view, position);\n return answer;\n case RecordType.PTR:\n case RecordType.CNAME:\n case RecordType.DNAME:\n answer.data = answerName.read(view, position);\n return answer;\n default:\n answer.data = answerBytes.read(view, position);\n return answer;\n }\n },\n};\n","import { type PacketFlag, PacketRType, PacketType } from './constants';\nimport { type Encoder, type ReadPosition, advance } from './encoders';\nimport { type Question, question } from './questions';\nimport { type Answer, answer } from './answers';\n\nconst readList = <T>(\n encoder: Encoder<T>,\n view: DataView,\n position: ReadPosition,\n limit: number\n): T[] | undefined => {\n if (!limit) {\n return undefined;\n }\n const { offset, length } = position;\n const data: T[] = [];\n for (let idx = 0; idx < limit && position.offset - offset < length; idx++)\n data.push(encoder.read(view, position));\n return data;\n};\n\nexport interface Packet {\n id?: number;\n type?: PacketType;\n rtype?: PacketRType;\n flags?: PacketFlag | (number & {});\n questions?: Question[];\n answers?: Answer[];\n additionals?: Answer[];\n authorities?: Answer[];\n}\n\nconst PACKET_FLAG_MASK = 32767;\n\nexport const packet: Encoder<Packet> = {\n bytes(packet) {\n const { questions, answers, authorities, additionals } = packet;\n let byteLength = 12;\n let idx = 0;\n for (idx = 0; questions && idx < questions.length; idx++)\n byteLength += question.bytes(questions[idx]);\n for (idx = 0; answers && idx < answers.length; idx++)\n byteLength += answer.bytes(answers[idx]);\n for (idx = 0; authorities && idx < authorities.length; idx++)\n byteLength += answer.bytes(authorities[idx]);\n for (idx = 0; additionals && idx < additionals.length; idx++)\n byteLength += answer.bytes(additionals[idx]);\n return byteLength;\n },\n write(view, offset, packet) {\n const { questions, answers, authorities, additionals } = packet;\n let flags =\n ((packet.flags || 0) & PACKET_FLAG_MASK) |\n (packet.type || PacketType.QUERY) |\n (packet.rtype || 0);\n view.setUint16(offset, packet.id || 0);\n view.setUint16(offset + 2, flags);\n view.setUint16(offset + 4, packet.questions?.length || 0);\n view.setUint16(offset + 6, packet.answers?.length || 0);\n view.setUint16(offset + 8, packet.authorities?.length || 0);\n view.setUint16(offset + 10, packet.additionals?.length || 0);\n offset += 12;\n let idx = 0;\n for (idx = 0; questions && idx < questions.length; idx++)\n offset = question.write(view, offset, questions[idx]);\n for (idx = 0; answers && idx < answers.length; idx++)\n offset = answer.write(view, offset, answers[idx]);\n for (idx = 0; authorities && idx < authorities.length; idx++)\n offset = answer.write(view, offset, authorities[idx]);\n for (idx = 0; additionals && idx < additionals.length; idx++)\n offset = answer.write(view, offset, additionals[idx]);\n return offset;\n },\n read(view, position) {\n const id = view.getUint16(position.offset);\n const flags = view.getUint16(position.offset + 2);\n const questionsLength = view.getUint16(position.offset + 4);\n const answersLength = view.getUint16(position.offset + 6);\n const authoritiesLength = view.getUint16(position.offset + 8);\n const additionalsLength = view.getUint16(position.offset + 10);\n advance(position, 12);\n return {\n id,\n flags,\n rtype: flags & 0xf,\n type:\n flags & PacketType.RESPONSE ? PacketType.RESPONSE : PacketType.QUERY,\n questions: readList(question, view, position, questionsLength),\n answers: readList(answer, view, position, answersLength),\n authorities: readList(answer, view, position, authoritiesLength),\n additionals: readList(answer, view, position, additionalsLength),\n };\n },\n};\n","import { type Packet, packet } from './packets';\n\nexport type {\n NsAnswer,\n AAnswer,\n AAAAAnswer,\n TxtAnswer,\n SrvAnswer,\n HInfoAnswer,\n CaaAnswer,\n SoaAnswer,\n MxAnswer,\n DnskeyAnswer,\n RrsigAnswer,\n RpAnswer,\n NsecAnswer,\n Nsec3Answer,\n SshfpAnswer,\n DsAnswer,\n NaptrAnswer,\n TlsaAnswer,\n PtrAnswer,\n CnameAnswer,\n DnameAnswer,\n NullAnswer,\n UnknownAnswer,\n Answer,\n} from './answers';\n\nexport type {\n IPType,\n ClientSubnetOpt,\n KeepAliveOpt,\n PaddingOpt,\n TagOpt,\n UnknownOpt,\n PacketOpt,\n} from './options';\nexport type { Packet } from './packets';\nexport type { Question } from './questions';\nexport * from './constants';\n\nexport function decode(bytes: ArrayBufferView | ArrayBufferLike): Packet {\n const view =\n 'buffer' in bytes\n ? new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength)\n : new DataView(bytes);\n return packet.read(view, { offset: 0, length: view.byteLength });\n}\n\nexport function streamDecode(bytes: ArrayBufferView | ArrayBufferLike): Packet {\n const view =\n 'buffer' in bytes\n ? new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength)\n : new DataView(bytes);\n const length = Math.min(view.byteLength - 2, view.getUint16(0));\n return packet.read(view, { offset: 2, length });\n}\n\nexport function encodingLength(input: Packet): number {\n return packet.bytes(input);\n}\n\nexport function encode(input: Packet): Uint8Array {\n const buffer = new ArrayBuffer(packet.bytes(input));\n const length = packet.write(new DataView(buffer), 0, input);\n return new Uint8Array(buffer, 0, length);\n}\n\nexport function streamEncode(input: Packet): Uint8Array {\n const buffer = new ArrayBuffer(packet.bytes(input) + 2);\n const view = new DataView(buffer);\n const length = packet.write(view, 2, input);\n view.setUint16(0, length - 2);\n return new Uint8Array(buffer, 0, length);\n}\n"],"names":["PacketType","RecordType","RecordClass","PacketFlag","OptCode","textEncoder","TextEncoder","textDecoder","TextDecoder","utf8ByteLength","Buffer","str","byteLength","length","i","code","charCodeAt","name","bytes","replace","RangeError","write","view","offset","encoded","encode","startIdx","endIdx","indexOf","byteIdx","idx","setUint8","read","outerPosition","labels","maxOffset","innerPosition","labelLength","getUint8","advance","label","sliceView","push","decode","jumpTo","getUint16","join","data","Uint8Array","buffer","byteOffset","set","position","octets","string","typeBitmap","types","extents","Math","max","ceil","typesByWindow","window","typelist","windowLength","bitmap","bit","ipv4","ip","split","octetIdx","parseInt","min","Array","fill","map","_","index","uint16","key","setUint16","ipv6","middleIdx","head","slice","tail","includes","pop","undefined","headIdx","pad","tailIdx","v4Parts","part","output","toString","withRDLength","encoder","startOffset","rdlength","array","QU_BIT","question","_class","class","IN","qu","type","_name","ANY","IPType","unknownOpt","option","OPTION_0","v4Seg","ipv4Re","RegExp","clientSubnetOpt","sourcePrefixLength","scopePrefixLength","family","test","v4","v6","maskLength","ipBuffer","encodeIntoBuffer","input","ArrayBuffer","endOffset","DataView","CLIENT_SUBNET","keepAliveOpt","timeout","TCP_KEEPALIVE","paddingOpt","_view","PADDING","tagOpt","tags","KEY_TAG","isUnknownOpt","opt","SvcParamCode","mandatorySvcParam","alpnSvcParam","portSvcParam","ipv4HintSvcParam","ipv6HintSvcParam","bytesSvcParam","svcParams","params","mandatory","alpn","port","ipv4hint","ipv6hint","echconfig","dohpath","odoh","Mandatory","Alpn","NoDefaultAlpn","Port","Ipv4Hint","Ipv6Hint","EchConfig","DohPath","Odoh","answerBytes","answerName","answerIPv4","answerIPv6","answerTxt","answerSrv","target","priority","weight","answerHInfo","cpu","os","toCaaTag","answerCaa","tag","value","flags","issuerCritical","answerSoa","mname","rname","setUint32","serial","refresh","retry","expire","minimum","getUint32","answerMx","exchange","preference","answerDnskey","algorithm","answerRrsig","signersName","signature","typeCovered","originalTTL","expiration","inception","keyTag","answerRp","mbox","txt","answerNsec","nextDomain","rrtypes","answerNsec3","salt","iterations","answerSshfp","fingerprint","hash","answerDs","digest","digestType","answerNaptr","services","regexp","replacement","order","answerTlsa","certificate","usage","selector","matchingType","answerSvcb","answerOpt","FLUSH_MASK","answer","OPT","A","NS","SOA","HINFO","MX","TXT","RP","AAAA","SRV","NAPTR","DS","SSHFP","RRSIG","NSEC","DNSKEY","NSEC3","TLSA","SVCB","HTTPS","CAA","PTR","CNAME","DNAME","udpPayloadSize","extendedRcode","ednsVersion","flush","ttl","readList","limit","packet","questions","answers","authorities","additionals","QUERY","rtype","id","questionsLength","answersLength","authoritiesLength","additionalsLength","RESPONSE","encodingLength","streamDecode","streamEncode"],"mappings":"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"}
1
+ {"version":3,"file":"dns-message.js","sources":["../src/constants.ts","../src/encoders.ts","../src/questions.ts","../src/options.ts","../src/svcparams.ts","../src/answers.ts","../src/packets.ts","../src/index.ts"],"sourcesContent":["export const enum PacketType {\n QUERY = 0,\n RESPONSE = 1 << 15,\n}\n\nexport const enum RecordType {\n A = 1,\n NS = 2,\n CNAME = 5,\n SOA = 6,\n NULL = 10,\n PTR = 12,\n HINFO = 13,\n MX = 15,\n TXT = 16,\n RP = 17,\n AFSDB = 18,\n SIG = 24,\n KEY = 25,\n AAAA = 28,\n LOC = 29,\n SRV = 33,\n NAPTR = 35,\n KX = 36,\n CERT = 37,\n DNAME = 39,\n OPT = 41,\n APL = 42,\n DS = 43,\n SSHFP = 44,\n IPSECKEY = 45,\n RRSIG = 46,\n NSEC = 47,\n DNSKEY = 48,\n DHCID = 49,\n NSEC3 = 50,\n NSEC3PARAM = 51,\n TLSA = 52,\n HIP = 55,\n CDS = 59,\n CDNSKEY = 60,\n SVCB = 64,\n HTTPS = 65,\n SPF = 99,\n TKEY = 249,\n TSIG = 250,\n IXFR = 251,\n AXFR = 252,\n ANY = 255,\n CAA = 257,\n TA = 32768,\n DLV = 32769,\n}\n\nexport const enum RecordClass {\n IN = 1,\n CS = 2,\n CH = 3,\n HS = 4,\n ANY = 255,\n}\n\nexport const enum PacketFlag {\n NOERR = 0,\n FORMERR = 1,\n SERVFAIL = 2,\n NXDOMAIN = 3,\n NOTIMP = 4,\n REFUSED = 5,\n YXDOMAIN = 6,\n YXRRSET = 7,\n NXRRSET = 8,\n NOTAUTH = 9,\n NOTZONE = 10,\n\n CHECKING_DISABLED = 1 << 4,\n AUTHENTIC_DATA = 1 << 5,\n RECURSION_AVAILABLE = 1 << 7,\n RECURSION_DESIRED = 1 << 8,\n TRUNCATED_RESPONSE = 1 << 9,\n AUTHORITATIVE_ANSWER = 1 << 10,\n}\n\nexport type PacketRType =\n | PacketFlag.NOERR\n | PacketFlag.FORMERR\n | PacketFlag.SERVFAIL\n | PacketFlag.NXDOMAIN\n | PacketFlag.NOTIMP\n | PacketFlag.REFUSED\n | PacketFlag.YXDOMAIN\n | PacketFlag.YXRRSET\n | PacketFlag.NXRRSET\n | PacketFlag.NOTAUTH\n | PacketFlag.NOTZONE;\n\nexport const enum OptCode {\n OPTION_0 = 0,\n LLQ = 1,\n UL = 2,\n NSID = 3,\n OPTION_4 = 4,\n DAU = 5,\n DHU = 6,\n N3U = 7,\n CLIENT_SUBNET = 8,\n EXPIRE = 9,\n COOKIE = 10,\n TCP_KEEPALIVE = 11,\n PADDING = 12,\n CHAIN = 13,\n KEY_TAG = 14,\n DEVICEID = 26946,\n OPTION_65535 = 65535,\n}\n","import type { RecordType } from './constants';\n\nexport interface ReadPosition {\n offset: number;\n length: number;\n}\n\nexport interface Encoder<T, R = T> {\n bytes(input: T): number;\n write(view: DataView, offset: number, input: T): number;\n read(view: DataView, position: ReadPosition): R;\n}\n\nexport const textEncoder = new TextEncoder();\nexport const textDecoder = new TextDecoder();\n\nconst utf8ByteLength =\n typeof Buffer !== 'undefined'\n ? (str: string) => Buffer.byteLength(str)\n : (str: string) => {\n let length = str.length;\n for (let i = length - 1; i >= 0; i--) {\n const code = str.charCodeAt(i);\n if (code > 0x7f && code <= 0x7ff) {\n length++;\n } else if (code > 0x7ff && code <= 0xffff) {\n length += 2;\n }\n // UTF-16 Trail Surrogate\n if (code >= 0xdc00 && code <= 0xdfff) {\n i--;\n }\n }\n return length;\n };\n\nconst LABEL_LIMIT = 63;\nconst NAME_LIMIT = 255;\n\nexport const name: Encoder<string> = {\n bytes(str) {\n let length = 2;\n switch (str) {\n case '':\n case '.':\n case '..':\n return 1;\n default:\n if (str[0] === '.') length--;\n if (str[str.length - 1] === '.') length--;\n length += str.replace(/\\\\\\./g, '.').length;\n if (length > NAME_LIMIT)\n throw new RangeError(\n `Name \"${str}\" is above ${NAME_LIMIT} byte limit.`\n );\n return length;\n }\n },\n write(view, offset, str) {\n const encoded = textEncoder.encode(str);\n for (\n let startIdx = encoded[0] === 46 /*'.'*/ ? 1 : 0, endIdx = 0;\n startIdx < encoded.byteLength;\n startIdx = endIdx + 1\n ) {\n endIdx = encoded.indexOf(46 /*'.'*/, startIdx);\n while (endIdx > -1 && encoded[endIdx - 1] === 92 /*'\\\\'*/)\n endIdx = encoded.indexOf(46 /*'.'*/, endIdx + 1);\n if (endIdx === -1) endIdx = encoded.byteLength;\n if (endIdx === startIdx) {\n continue;\n } else if (endIdx - startIdx > LABEL_LIMIT) {\n throw new RangeError(\n `Label in \"${str}\" is above ${LABEL_LIMIT} byte limit.`\n );\n }\n let byteIdx = offset + 1;\n for (let idx = startIdx; idx < endIdx; idx++) {\n if (encoded[idx] === 92 /*'\\\\'*/ && encoded[idx + 1] === 46 /*'.'*/)\n idx++;\n view.setUint8(byteIdx++, encoded[idx]);\n }\n view.setUint8(offset, byteIdx - offset - 1);\n offset = byteIdx;\n startIdx = endIdx + 1;\n }\n return offset + 1;\n },\n read(view, outerPosition) {\n const labels: string[] = [];\n let maxOffset = outerPosition.offset;\n let innerPosition = outerPosition;\n while (true) {\n const labelLength = view.getUint8(innerPosition.offset);\n if (labelLength === 0) {\n advance(innerPosition, 1);\n break;\n } else if ((labelLength & 0xc0) === 0) {\n advance(innerPosition, 1);\n const label = sliceView(view, innerPosition, labelLength);\n labels.push(textDecoder.decode(label).replace(/\\./g, '\\\\.'));\n } else {\n const jumpTo = view.getUint16(innerPosition.offset) - 0xc000;\n advance(innerPosition, 2);\n if (jumpTo < maxOffset) {\n innerPosition = { offset: (maxOffset = jumpTo), length: 0 };\n } else {\n break;\n }\n }\n }\n return labels.join('.') || '.';\n },\n};\n\nexport const bytes: Encoder<Uint8Array | string, Uint8Array> = {\n bytes(data) {\n return typeof data === 'string' ? utf8ByteLength(data) : data.byteLength;\n },\n write(view, offset, data) {\n const bytes = typeof data === 'string' ? textEncoder.encode(data) : data;\n const target = new Uint8Array(\n view.buffer,\n view.byteOffset + offset,\n bytes.byteLength\n );\n target.set(bytes);\n offset += bytes.byteLength;\n return offset;\n },\n read(view, position) {\n return sliceView(view, position);\n },\n};\n\nexport const octets: Encoder<Uint8Array> = {\n bytes(data) {\n return data.byteLength + 1;\n },\n write(view, offset, bytes) {\n view.setUint8(offset++, bytes.byteLength);\n const target = new Uint8Array(\n view.buffer,\n view.byteOffset + offset,\n bytes.byteLength\n );\n target.set(bytes);\n offset += bytes.byteLength;\n return offset;\n },\n read(view, position) {\n const length = view.getUint8(position.offset);\n advance(position, 1);\n return sliceView(view, position, length);\n },\n};\n\nexport const string: Encoder<string> = {\n bytes(str) {\n return utf8ByteLength(str) + 1;\n },\n write(view, offset, data) {\n const buffer = textEncoder.encode(data);\n view.setUint8(offset++, buffer.byteLength);\n return bytes.write(view, offset, buffer);\n },\n read(view, position) {\n const length = view.getUint8(position.offset);\n advance(position, 1);\n return textDecoder.decode(sliceView(view, position, length));\n },\n};\n\nexport const typeBitmap: Encoder<RecordType[]> = {\n bytes(types) {\n const extents: number[] = [];\n for (let idx = 0; idx < types.length; idx++)\n extents[types[idx] >> 8] = Math.max(\n extents[types[idx] >> 8] || 0,\n types[idx] & 0xff\n );\n let length = 0;\n for (let idx = 0; idx < extents.length; idx++)\n if (extents[idx] != null) length += 2 + Math.ceil((extents[idx] + 1) / 8);\n return length;\n },\n write(view, offset, types) {\n const typesByWindow: number[][] = [];\n for (let idx = 0; idx < types.length; idx++) {\n const window =\n typesByWindow[types[idx] >> 8] || (typesByWindow[types[idx] >> 8] = []);\n window[(types[idx] >> 3) & 0x1f] |= 1 << (7 - (types[idx] & 0x7));\n }\n for (let idx = 0; idx < typesByWindow.length; idx++) {\n const window = typesByWindow[idx];\n if (window != null) {\n view.setUint8(offset++, idx);\n view.setUint8(offset++, window.length);\n for (let byteIdx = 0; byteIdx < window.length; byteIdx++) {\n view.setUint8(offset++, window[byteIdx]);\n }\n }\n }\n return offset;\n },\n read(view, position) {\n const { offset, length } = position;\n const typelist: RecordType[] = [];\n while (position.offset - offset < length) {\n const window = view.getUint8(position.offset);\n const windowLength = view.getUint8(position.offset + 1);\n for (let idx = 0; idx < windowLength; idx++) {\n const bitmap = view.getUint8(position.offset + 2 + idx);\n for (let bit = 0; bit < 8; bit++) {\n if (bitmap & (1 << (7 - bit))) {\n typelist.push((window << 8) | (idx << 3) | bit);\n }\n }\n }\n advance(position, 2 + windowLength);\n }\n return typelist;\n },\n};\n\nexport const ipv4: Encoder<string> = {\n bytes() {\n return 4;\n },\n write(view, offset, ip) {\n const octets = ip.split('.', 4);\n for (let octetIdx = 0; octetIdx < 4; octetIdx++)\n view.setUint8(offset++, parseInt(octets[octetIdx], 10));\n return offset;\n },\n read(view, position) {\n const length = Math.min(position.length, 4);\n const ip = new Array(4)\n .fill(0)\n .map((_, index) =>\n index < length ? view.getUint8(position.offset + index) : 0\n )\n .join('.');\n advance(position, length);\n return ip;\n },\n};\n\nexport const uint16: Encoder<number> = {\n bytes() {\n return 2;\n },\n write(view, offset, key) {\n view.setUint16(offset, key);\n return offset + 2;\n },\n read(view, position) {\n const key = view.getUint16(position.offset);\n advance(position, 2);\n return key;\n },\n};\n\nexport const ipv6: Encoder<string> = {\n bytes() {\n return 16;\n },\n write(view, offset, ip) {\n const middleIdx = ip.indexOf('::');\n const head = (middleIdx > -1 ? ip.slice(0, middleIdx) : ip).split(':');\n const tail = middleIdx > -1 ? ip.slice(middleIdx + 2).split(':') : [];\n const ipv4 =\n tail.length > 0 && tail[tail.length - 1].includes('.')\n ? tail.pop()\n : undefined;\n for (let headIdx = 0; headIdx < head.length; headIdx++) {\n view.setUint16(offset, parseInt(head[headIdx], 16));\n offset += 2;\n }\n const middleLength = 8 - (head.length + tail.length + (ipv4 ? 2 : 0));\n for (let pad = middleLength; pad > 0; pad--) {\n view.setUint16(offset, 0);\n offset += 2;\n }\n for (let tailIdx = 0; tailIdx < tail.length; tailIdx++) {\n view.setUint16(offset, parseInt(tail[tailIdx], 16));\n offset += 2;\n }\n if (ipv4) {\n const v4Parts = ipv4.split('.', 4).map(part => parseInt(part, 10));\n view.setUint16(offset, (v4Parts[0] << 8) | v4Parts[1]);\n view.setUint16(offset + 2, (v4Parts[2] << 8) | v4Parts[3]);\n offset += 4;\n }\n return offset;\n },\n read(view, position) {\n let output = '';\n const length = Math.min(position.length, 16);\n for (let idx = 0; idx < length; idx += 2) {\n if (idx !== 0) output += ':';\n output += view.getUint16(position.offset + idx).toString(16);\n }\n advance(position, length);\n return output\n .replace(/(^|:)0(:0)*:0(:|$)/, '$1::$3')\n .replace(/:{3,4}/, '::');\n },\n};\n\nexport const withRDLength = <T, R = T>(\n encoder: Encoder<T, R>\n): Encoder<T, R> => ({\n bytes(data) {\n return encoder.bytes(data) + 2;\n },\n write(view, offset, data) {\n const startOffset = offset;\n offset = encoder.write(view, offset + 2, data);\n view.setUint16(startOffset, offset - startOffset - 2);\n return offset;\n },\n read(view, position) {\n const { offset, length } = position;\n const rdlength = (position.length = view.getUint16(position.offset));\n position.offset += 2;\n const data = encoder.read(view, position);\n // Restore original position and advance by specified size after\n position.offset = offset + 2 + rdlength;\n position.length = length;\n return data;\n },\n});\n\nexport const array = <T>(encoder: Encoder<T>): Encoder<T[]> => ({\n bytes(data) {\n let byteLength = 0;\n for (let idx = 0; data != null && idx < data.length; idx++)\n byteLength += encoder.bytes(data[idx]);\n return byteLength;\n },\n write(view, offset, data) {\n for (let idx = 0; data != null && idx < data.length; idx++)\n offset = encoder.write(view, offset, data[idx]);\n return offset;\n },\n read(view, position) {\n const { offset, length } = position;\n const data: T[] = [];\n while (position.offset - offset < length)\n data.push(encoder.read(view, position));\n return data;\n },\n});\n\nexport const advance = (position: ReadPosition, bytes: number) => {\n position.offset += bytes | 0;\n position.length -= bytes | 0;\n position.length &= ~(position.length >> 31);\n};\n\nexport const encodeIntoBuffer = <T>(\n encoder: Encoder<T>,\n input: T\n): Uint8Array => {\n const buffer = new ArrayBuffer(encoder.bytes(input));\n const endOffset = encoder.write(new DataView(buffer), 0, input);\n return new Uint8Array(buffer, 0, endOffset);\n};\n\nexport const sliceView = (\n view: DataView,\n position: ReadPosition,\n length = position.length\n) => {\n const slice = new Uint8Array(\n view.buffer,\n view.byteOffset + position.offset,\n length\n );\n advance(position, length);\n return slice;\n};\n","import { RecordClass, RecordType } from './constants';\nimport { Encoder, name, advance } from './encoders';\n\nexport interface Question {\n name: string;\n type: RecordType;\n class?: RecordClass;\n qu?: boolean;\n}\n\nconst QU_BIT = 1 << 15;\n\nexport const question: Encoder<Question> = {\n bytes(question) {\n return name.bytes(question.name) + 4;\n },\n write(view, offset, question) {\n let _class = question.class || RecordClass.IN;\n if (question.qu) _class |= QU_BIT;\n offset = name.write(view, offset, question.name);\n view.setUint16(offset, question.type);\n view.setUint16(offset + 2, _class);\n offset += 4;\n return offset;\n },\n read(view, position) {\n const _name = name.read(view, position);\n const type = view.getUint16(position.offset);\n let _class = view.getUint16(position.offset + 2) || RecordClass.ANY;\n let qu = false;\n if (_class !== RecordClass.ANY && _class & QU_BIT) {\n _class &= ~QU_BIT;\n qu = true;\n }\n advance(position, 4);\n return {\n name: _name,\n type,\n class: _class,\n qu,\n };\n },\n};\n","import { OptCode } from './constants';\nimport {\n type Encoder,\n withRDLength,\n encodeIntoBuffer,\n advance,\n bytes,\n ipv4,\n ipv6,\n} from './encoders';\n\nexport const enum IPType {\n v4 = 1,\n v6 = 2,\n}\n\nexport interface BaseOpt {\n code: number;\n}\n\nexport interface ClientSubnetOpt extends BaseOpt {\n code: OptCode.CLIENT_SUBNET;\n family?: IPType | (number & {});\n sourcePrefixLength?: number;\n scopePrefixLength?: number;\n ip: string;\n}\n\nexport interface KeepAliveOpt extends BaseOpt {\n code: OptCode.TCP_KEEPALIVE;\n timeout?: number;\n}\n\nexport interface PaddingOpt extends BaseOpt {\n code: OptCode.PADDING;\n length?: number;\n}\n\nexport interface TagOpt extends BaseOpt {\n code: OptCode.KEY_TAG;\n tags: number[];\n}\n\nexport interface UnknownOpt extends BaseOpt {\n data: Uint8Array;\n}\n\nexport type PacketOpt =\n | ClientSubnetOpt\n | KeepAliveOpt\n | PaddingOpt\n | TagOpt\n | UnknownOpt;\n\nexport const unknownOpt: Encoder<UnknownOpt> = withRDLength({\n bytes(option) {\n return bytes.bytes(option.data);\n },\n write(view, offset, option) {\n return bytes.write(view, offset, option.data);\n },\n read(view, position) {\n return {\n code: OptCode.OPTION_0,\n data: bytes.read(view, position),\n };\n },\n});\n\n// See: https://github.com/nodejs/node/blob/842448b/lib/internal/net.js#L15-L18\nconst v4Seg = '(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])';\nconst v4Str = `(?:${v4Seg}\\\\.){3}${v4Seg}`;\nconst ipv4Re = new RegExp(`^${v4Str}$`);\n\nconst isIPv4 = (ip: string) => ipv4Re.test(ip);\n\nexport const clientSubnetOpt: Encoder<ClientSubnetOpt> = withRDLength({\n bytes(option) {\n const sourcePrefixLength = option.sourcePrefixLength || 0;\n return Math.ceil(sourcePrefixLength / 8) + 4;\n },\n write(view, offset, option) {\n const sourcePrefixLength = option.sourcePrefixLength || 0;\n const scopePrefixLength = option.scopePrefixLength || 0;\n const family = option.family || (isIPv4(option.ip) ? IPType.v4 : IPType.v6);\n const maskLength = Math.ceil(sourcePrefixLength / 8);\n view.setUint16(offset, family);\n view.setUint8(offset + 2, sourcePrefixLength);\n view.setUint8(offset + 3, scopePrefixLength);\n offset += 4;\n const ipBuffer = encodeIntoBuffer(\n family === IPType.v4 ? ipv4 : ipv6,\n option.ip\n );\n for (let byteIdx = 0; byteIdx < maskLength; byteIdx++)\n view.setUint8(offset++, ipBuffer[byteIdx]);\n return offset;\n },\n read(view, position) {\n const family = view.getUint16(position.offset);\n const sourcePrefixLength = view.getUint8(position.offset + 2);\n const scopePrefixLength = view.getUint8(position.offset + 3);\n advance(position, 4);\n return {\n code: OptCode.CLIENT_SUBNET,\n family,\n sourcePrefixLength,\n scopePrefixLength,\n ip:\n family === IPType.v4\n ? ipv4.read(view, position)\n : ipv6.read(view, position),\n };\n },\n});\n\nexport const keepAliveOpt: Encoder<KeepAliveOpt> = withRDLength({\n bytes(option) {\n return option.timeout ? 2 : 0;\n },\n write(view, offset, option) {\n if (option.timeout) {\n view.setUint16(offset, option.timeout);\n offset += 2;\n }\n return offset;\n },\n read(view, position) {\n if (position.length) {\n const timeout = view.getUint16(position.offset);\n advance(position, 2);\n return { code: OptCode.TCP_KEEPALIVE, timeout };\n } else {\n return { code: OptCode.TCP_KEEPALIVE, timeout: undefined };\n }\n },\n});\n\nexport const paddingOpt: Encoder<PaddingOpt> = withRDLength({\n bytes(option) {\n return option.length || 0;\n },\n write(_view, offset, option) {\n return offset + (option.length || 0);\n },\n read(_view, position) {\n const { length } = position;\n advance(position, length);\n return { code: OptCode.PADDING, length };\n },\n});\n\nexport const tagOpt: Encoder<TagOpt> = withRDLength({\n bytes(option) {\n return option.tags.length * 2;\n },\n write(view, offset, option) {\n for (let idx = 0; idx < option.tags.length; idx++) {\n view.setUint16(offset, option.tags[idx]);\n offset += 2;\n }\n return offset;\n },\n read(view, position) {\n const { offset, length } = position;\n const tags: number[] = [];\n while (position.offset - offset < length) {\n tags.push(view.getUint16(position.offset));\n advance(position, 2);\n }\n return {\n code: OptCode.KEY_TAG,\n tags,\n };\n },\n});\n\nconst isUnknownOpt = (option: PacketOpt): option is UnknownOpt =>\n !!(option as UnknownOpt).data;\n\nexport const option: Encoder<PacketOpt> = {\n bytes(option) {\n if (isUnknownOpt(option)) {\n return unknownOpt.bytes(option) + 2;\n }\n switch (option.code) {\n case OptCode.CLIENT_SUBNET:\n return clientSubnetOpt.bytes(option) + 2;\n case OptCode.TCP_KEEPALIVE:\n return keepAliveOpt.bytes(option) + 2;\n case OptCode.PADDING:\n return paddingOpt.bytes(option) + 2;\n case OptCode.KEY_TAG:\n return tagOpt.bytes(option) + 2;\n }\n },\n write(view, offset, option) {\n view.setUint16(offset, option.code);\n offset += 2;\n if (isUnknownOpt(option)) {\n return unknownOpt.write(view, offset, option);\n }\n switch (option.code) {\n case OptCode.CLIENT_SUBNET:\n return clientSubnetOpt.write(view, offset, option);\n case OptCode.TCP_KEEPALIVE:\n return keepAliveOpt.write(view, offset, option);\n case OptCode.PADDING:\n return paddingOpt.write(view, offset, option);\n case OptCode.KEY_TAG:\n return tagOpt.write(view, offset, option);\n }\n },\n read(view, position) {\n const code = view.getUint16(position.offset);\n advance(position, 2);\n switch (code) {\n case OptCode.CLIENT_SUBNET:\n return clientSubnetOpt.read(view, position);\n case OptCode.TCP_KEEPALIVE:\n return keepAliveOpt.read(view, position);\n case OptCode.PADDING:\n return paddingOpt.read(view, position);\n case OptCode.KEY_TAG:\n return tagOpt.read(view, position);\n default:\n const opt = unknownOpt.read(view, position);\n opt.code = code;\n return opt;\n }\n },\n};\n","import {\n type Encoder,\n withRDLength,\n array,\n textDecoder,\n advance,\n uint16,\n bytes,\n ipv4,\n ipv6,\n string,\n} from './encoders';\n\nexport const enum SvcParamCode {\n Mandatory = 0,\n Alpn = 1,\n NoDefaultAlpn = 2,\n Port = 3,\n Ipv4Hint = 4,\n EchConfig = 5,\n Ipv6Hint = 6,\n DohPath = 7,\n Odoh = 32769,\n}\n\nexport interface SvcParams {\n mandatory?: (SvcParamCode | (number & {}))[];\n alpn?: string[];\n 'no-default-alpn'?: boolean;\n port?: number;\n ipv4hint?: string[];\n ipv6hint?: string[];\n echconfig?: Uint8Array;\n dohpath?: string;\n odoh?: Uint8Array;\n}\n\nconst mandatorySvcParam: Encoder<(SvcParamCode | (number & {}))[]> =\n withRDLength(array(uint16));\nconst alpnSvcParam = withRDLength(array(string));\nconst portSvcParam = withRDLength(uint16);\nconst ipv4HintSvcParam = withRDLength(array(ipv4));\nconst ipv6HintSvcParam = withRDLength(array(ipv6));\nconst bytesSvcParam = withRDLength(bytes);\n\nexport const svcParams: Encoder<SvcParams> = {\n bytes(params) {\n let byteLength = 0;\n if (params.mandatory != null)\n byteLength += mandatorySvcParam.bytes(params.mandatory) + 2;\n if (params.alpn != null) byteLength += alpnSvcParam.bytes(params.alpn) + 2;\n if (params['no-default-alpn']) byteLength += 4;\n if (params.port != null) byteLength += portSvcParam.bytes(params.port) + 2;\n if (params.ipv4hint)\n byteLength += ipv4HintSvcParam.bytes(params.ipv4hint) + 2;\n if (params.ipv6hint)\n byteLength += ipv6HintSvcParam.bytes(params.ipv6hint) + 2;\n if (params.echconfig)\n byteLength += bytesSvcParam.bytes(params.echconfig) + 2;\n if (params.dohpath) byteLength += bytesSvcParam.bytes(params.dohpath) + 2;\n if (params.odoh) byteLength += bytesSvcParam.bytes(params.odoh) + 2;\n return byteLength;\n },\n write(view, offset, params) {\n if (params.mandatory != null) {\n view.setUint16(offset, SvcParamCode.Mandatory);\n offset = mandatorySvcParam.write(view, offset + 2, params.mandatory);\n }\n if (params.alpn != null) {\n view.setUint16(offset, SvcParamCode.Alpn);\n offset = alpnSvcParam.write(view, offset + 2, params.alpn);\n }\n if (params['no-default-alpn']) {\n view.setUint16(offset, SvcParamCode.NoDefaultAlpn);\n view.setUint16(offset + 2, 0);\n offset += 4;\n }\n if (params.port != null) {\n view.setUint16(offset, SvcParamCode.Port);\n offset = portSvcParam.write(view, offset + 2, params.port);\n }\n if (params.ipv4hint) {\n view.setUint16(offset, SvcParamCode.Ipv4Hint);\n offset = ipv4HintSvcParam.write(view, offset + 2, params.ipv4hint);\n }\n if (params.ipv6hint) {\n view.setUint16(offset, SvcParamCode.Ipv6Hint);\n offset = ipv6HintSvcParam.write(view, offset + 2, params.ipv6hint);\n }\n if (params.echconfig) {\n view.setUint16(offset, SvcParamCode.EchConfig);\n offset = bytesSvcParam.write(view, offset + 2, params.echconfig);\n }\n if (params.dohpath) {\n view.setUint16(offset, SvcParamCode.DohPath);\n offset = bytesSvcParam.write(view, offset + 2, params.dohpath);\n }\n if (params.odoh) {\n view.setUint16(offset, SvcParamCode.Odoh);\n offset = bytesSvcParam.write(view, offset + 2, params.odoh);\n }\n return offset;\n },\n read(view, position) {\n const { length, offset } = position;\n const params: SvcParams = {\n mandatory: undefined,\n alpn: undefined,\n 'no-default-alpn': false,\n port: undefined,\n ipv4hint: undefined,\n ipv6hint: undefined,\n echconfig: undefined,\n dohpath: undefined,\n odoh: undefined,\n };\n while (position.offset - offset < length) {\n const code = view.getUint16(position.offset) as\n | SvcParamCode\n | (number & {});\n advance(position, 2);\n switch (code) {\n case SvcParamCode.Mandatory:\n params.mandatory = mandatorySvcParam.read(view, position);\n break;\n case SvcParamCode.Alpn:\n params.alpn = alpnSvcParam.read(view, position);\n break;\n case SvcParamCode.NoDefaultAlpn:\n params['no-default-alpn'] = true;\n advance(position, 2);\n break;\n case SvcParamCode.Port:\n params.port = portSvcParam.read(view, position);\n break;\n case SvcParamCode.Ipv4Hint:\n params.ipv4hint = ipv4HintSvcParam.read(view, position);\n break;\n case SvcParamCode.Ipv6Hint:\n params.ipv6hint = ipv6HintSvcParam.read(view, position);\n break;\n case SvcParamCode.EchConfig:\n params.echconfig = bytesSvcParam.read(view, position);\n break;\n case SvcParamCode.DohPath:\n params.dohpath = textDecoder.decode(\n bytesSvcParam.read(view, position)\n );\n break;\n case SvcParamCode.Odoh:\n params.odoh = bytesSvcParam.read(view, position);\n break;\n default:\n // NOTE: We discard other parameters using the required RDLENGTH field\n bytesSvcParam.read(view, position);\n }\n }\n return params;\n },\n};\n","import { RecordClass, RecordType } from './constants';\nimport { Encoder, advance, octets } from './encoders';\nimport { option, PacketOpt } from './options';\nimport { svcParams, SvcParams } from './svcparams';\nimport {\n withRDLength,\n typeBitmap,\n string,\n bytes,\n name,\n ipv4,\n ipv6,\n array,\n} from './encoders';\n\nexport interface BaseAnswer {\n type: RecordType;\n name: string;\n ttl?: number;\n class?: RecordClass;\n flush?: boolean;\n}\n\nconst answerBytes = withRDLength(bytes);\n\nexport interface NsAnswer extends BaseAnswer {\n type: RecordType.NS;\n data: string;\n}\n\nconst answerName = withRDLength(name);\n\nexport interface AAnswer extends BaseAnswer {\n type: RecordType.A;\n data: string;\n}\n\nconst answerIPv4 = withRDLength(ipv4);\n\nexport interface AAAAAnswer extends BaseAnswer {\n type: RecordType.AAAA;\n data: string;\n}\n\nconst answerIPv6 = withRDLength(ipv6);\n\nexport interface TxtAnswer extends BaseAnswer {\n type: RecordType.TXT;\n data: string[];\n}\n\nexport const answerTxt: Encoder<string[]> = withRDLength(array(string));\n\nexport interface SrvData {\n priority?: number;\n weight?: number;\n port: number;\n target: string;\n}\n\nexport interface SrvAnswer extends BaseAnswer {\n type: RecordType.SRV;\n data: SrvData;\n}\n\nexport const answerSrv: Encoder<SrvData> = withRDLength({\n bytes(data) {\n return name.bytes(data.target) + 6;\n },\n write(view, offset, data) {\n view.setUint16(offset, data.priority || 0);\n view.setUint16(offset + 2, data.weight || 0);\n view.setUint16(offset + 4, data.port || 0);\n return name.write(view, offset + 6, data.target);\n },\n read(view, position) {\n const data: SrvData = { priority: 0, weight: 0, port: 0, target: '' };\n data.priority = view.getUint16(position.offset);\n data.weight = view.getUint16(position.offset + 2);\n data.port = view.getUint16(position.offset + 4);\n advance(position, 6);\n data.target = name.read(view, position);\n return data;\n },\n});\n\nexport interface HInfoData {\n cpu: string;\n os: string;\n}\n\nexport interface HInfoAnswer extends BaseAnswer {\n type: RecordType.HINFO;\n data: HInfoData;\n}\n\nexport const answerHInfo: Encoder<HInfoData> = withRDLength({\n bytes(data) {\n return string.bytes(data.cpu) + string.bytes(data.os);\n },\n write(view, offset, data) {\n offset = string.write(view, offset, data.cpu);\n offset = string.write(view, offset, data.os);\n return offset;\n },\n read(view, position) {\n return {\n cpu: string.read(view, position),\n os: string.read(view, position),\n };\n },\n});\n\nexport interface CaaData {\n flags?: number;\n tag: 'issue' | 'issuewild' | 'iodef';\n value: Uint8Array;\n issuerCritical?: boolean;\n}\n\nexport interface CaaAnswer extends BaseAnswer {\n type: RecordType.CAA;\n data: CaaData;\n}\n\nconst ISSUER_CRITICAL = 1 << 7;\n\nconst toCaaTag = (input: string) => {\n switch (input) {\n case 'issue':\n case 'issuewild':\n case 'iodef':\n return input;\n default:\n return 'issue';\n }\n};\n\nexport const answerCaa: Encoder<CaaData> = withRDLength({\n bytes(data) {\n return string.bytes(data.tag) + bytes.bytes(data.value) + 1;\n },\n write(view, offset, data) {\n let flags = data.flags || 0;\n if (data.issuerCritical) flags |= ISSUER_CRITICAL;\n view.setUint8(offset, flags);\n offset = string.write(view, offset + 1, data.tag);\n offset = bytes.write(view, offset, data.value);\n return offset;\n },\n read(view, position) {\n const flags = view.getUint8(position.offset);\n advance(position, 1);\n return {\n flags,\n tag: toCaaTag(string.read(view, position)),\n value: bytes.read(view, position),\n issuerCritical: !!(flags & ISSUER_CRITICAL),\n };\n },\n});\n\nexport interface SoaData {\n mname: string;\n rname: string;\n serial?: number;\n refresh?: number;\n retry?: number;\n expire?: number;\n minimum?: number;\n}\n\nexport interface SoaAnswer extends BaseAnswer {\n type: RecordType.SOA;\n data: SoaData;\n}\n\nexport const answerSoa: Encoder<SoaData> = withRDLength({\n bytes(data) {\n return name.bytes(data.mname) + name.bytes(data.rname) + 20;\n },\n write(view, offset, data) {\n offset = name.write(view, offset, data.mname);\n offset = name.write(view, offset, data.rname);\n view.setUint32(offset, data.serial || 0);\n view.setUint32(offset + 4, data.refresh || 0);\n view.setUint32(offset + 8, data.retry || 0);\n view.setUint32(offset + 12, data.expire || 0);\n view.setUint32(offset + 16, data.minimum || 0);\n return offset + 20;\n },\n read(view, position) {\n const data: SoaData = {\n mname: name.read(view, position),\n rname: name.read(view, position),\n serial: view.getUint32(position.offset),\n refresh: view.getUint32(position.offset + 4),\n retry: view.getUint32(position.offset + 8),\n expire: view.getUint32(position.offset + 12),\n minimum: view.getUint32(position.offset + 16),\n };\n position.offset += 20;\n position.length -= 20;\n return data;\n },\n});\n\nexport interface MxData {\n preference?: number;\n exchange: string;\n}\n\nexport interface MxAnswer extends BaseAnswer {\n type: RecordType.MX;\n data: MxData;\n}\n\nexport const answerMx: Encoder<MxData> = withRDLength({\n bytes(data) {\n return name.bytes(data.exchange) + 2;\n },\n write(view, offset, data) {\n view.setUint16(offset, data.preference || 0);\n return name.write(view, offset + 2, data.exchange);\n },\n read(view, position) {\n const data: MxData = {\n preference: view.getUint16(position.offset),\n exchange: '',\n };\n advance(position, 2);\n data.exchange = name.read(view, position);\n return data;\n },\n});\n\nexport interface DnskeyData {\n flags: number;\n algorithm: number;\n key: Uint8Array;\n}\n\nexport interface DnskeyAnswer extends BaseAnswer {\n type: RecordType.DNSKEY;\n data: DnskeyData;\n}\n\nexport const answerDnskey: Encoder<DnskeyData> = withRDLength({\n bytes(data) {\n return bytes.bytes(data.key) + 4;\n },\n write(view, offset, data) {\n const PROTOCOL_DNSSEC = 3;\n view.setUint16(offset, data.flags);\n view.setUint8(offset + 2, PROTOCOL_DNSSEC);\n view.setUint8(offset + 3, data.algorithm);\n return bytes.write(view, offset + 4, data.key);\n },\n read(view, position) {\n const flags = view.getUint16(position.offset);\n const algorithm = view.getUint8(position.offset + 3);\n advance(position, 4);\n return {\n flags,\n algorithm,\n key: bytes.read(view, position),\n };\n },\n});\n\nexport interface RrsigData {\n typeCovered: RecordType;\n algorithm: number;\n labels: number;\n originalTTL: number;\n expiration: number;\n inception: number;\n keyTag: number;\n signersName: string;\n signature: Uint8Array;\n}\n\nexport interface RrsigAnswer extends BaseAnswer {\n type: RecordType.RRSIG;\n data: RrsigData;\n}\n\nexport const answerRrsig: Encoder<RrsigData> = withRDLength({\n bytes(data) {\n return 18 + name.bytes(data.signersName) + bytes.bytes(data.signature);\n },\n write(view, offset, data) {\n view.setUint16(offset, data.typeCovered);\n view.setUint8(offset + 2, data.algorithm);\n view.setUint8(offset + 3, data.labels);\n view.setUint32(offset + 4, data.originalTTL);\n view.setUint32(offset + 8, data.expiration);\n view.setUint32(offset + 12, data.inception);\n view.setUint16(offset + 16, data.keyTag);\n offset = name.write(view, offset + 18, data.signersName);\n offset = bytes.write(view, offset, data.signature);\n return offset;\n },\n read(view, position) {\n const typeCovered = view.getUint16(position.offset);\n const algorithm = view.getUint8(position.offset + 2);\n const labels = view.getUint8(position.offset + 3);\n const originalTTL = view.getUint32(position.offset + 4);\n const expiration = view.getUint32(position.offset + 8);\n const inception = view.getUint32(position.offset + 12);\n const keyTag = view.getUint16(position.offset + 16);\n advance(position, 18);\n return {\n typeCovered,\n algorithm,\n labels,\n originalTTL,\n expiration,\n inception,\n keyTag,\n signersName: name.read(view, position),\n signature: bytes.read(view, position),\n };\n },\n});\n\nexport interface RpData {\n mbox: string;\n txt: string;\n}\n\nexport interface RpAnswer extends BaseAnswer {\n type: RecordType.RP;\n data: RpData;\n}\n\nexport const answerRp: Encoder<RpData> = withRDLength({\n bytes(data) {\n return name.bytes(data.mbox) + name.bytes(data.txt);\n },\n write(view, offset, data) {\n offset = name.write(view, offset, data.mbox);\n offset = name.write(view, offset, data.txt);\n return offset;\n },\n read(view, position) {\n return {\n mbox: name.read(view, position),\n txt: name.read(view, position),\n };\n },\n});\n\nexport interface NsecData {\n nextDomain: string;\n rrtypes: RecordType[];\n}\n\nexport interface NsecAnswer extends BaseAnswer {\n type: RecordType.NSEC;\n data: NsecData;\n}\n\nexport const answerNsec: Encoder<NsecData> = withRDLength({\n bytes(data) {\n return name.bytes(data.nextDomain) + typeBitmap.bytes(data.rrtypes);\n },\n write(view, offset, data) {\n offset = name.write(view, offset, data.nextDomain);\n offset = typeBitmap.write(view, offset, data.rrtypes);\n return offset;\n },\n read(view, position) {\n return {\n nextDomain: name.read(view, position),\n rrtypes: typeBitmap.read(view, position),\n };\n },\n});\n\nexport interface Nsec3Data {\n algorithm: number;\n flags: number;\n iterations: number;\n salt: Uint8Array;\n nextDomain: Uint8Array;\n rrtypes: RecordType[];\n}\n\nexport interface Nsec3Answer extends BaseAnswer {\n type: RecordType.NSEC3;\n data: Nsec3Data;\n}\n\nexport const answerNsec3: Encoder<Nsec3Data> = withRDLength({\n bytes(data) {\n return (\n octets.bytes(data.salt) +\n octets.bytes(data.nextDomain) +\n typeBitmap.bytes(data.rrtypes) +\n 4\n );\n },\n write(view, offset, data) {\n view.setUint8(offset, data.algorithm);\n view.setUint8(offset + 1, data.flags);\n view.setUint16(offset + 2, data.iterations);\n offset = octets.write(view, offset + 4, data.salt);\n offset = octets.write(view, offset, data.nextDomain);\n offset = typeBitmap.write(view, offset, data.rrtypes);\n return offset;\n },\n read(view, position) {\n const algorithm = view.getUint8(position.offset);\n const flags = view.getUint8(position.offset + 1);\n const iterations = view.getUint16(position.offset + 2);\n advance(position, 4);\n return {\n algorithm,\n flags,\n iterations,\n salt: octets.read(view, position),\n nextDomain: octets.read(view, position),\n rrtypes: typeBitmap.read(view, position),\n };\n },\n});\n\nexport interface SshfpData {\n algorithm: number;\n hash: number;\n fingerprint: Uint8Array;\n}\n\nexport interface SshfpAnswer extends BaseAnswer {\n type: RecordType.SSHFP;\n data: SshfpData;\n}\n\nexport const answerSshfp: Encoder<SshfpData> = withRDLength({\n bytes(data) {\n return bytes.bytes(data.fingerprint) + 2;\n },\n write(view, offset, data) {\n view.setUint8(offset, data.algorithm);\n view.setUint8(offset + 1, data.hash);\n return bytes.write(view, offset + 2, data.fingerprint);\n },\n read(view, position) {\n const algorithm = view.getUint8(position.offset);\n const hash = view.getUint8(position.offset + 1);\n advance(position, 2);\n return {\n algorithm,\n hash,\n fingerprint: bytes.read(view, position),\n };\n },\n});\n\nexport interface DsData {\n keyTag: number;\n algorithm: number;\n digestType: number;\n digest: Uint8Array;\n}\n\nexport interface DsAnswer extends BaseAnswer {\n type: RecordType.DS;\n data: DsData;\n}\n\nexport const answerDs: Encoder<DsData> = withRDLength({\n bytes(data) {\n return bytes.bytes(data.digest) + 4;\n },\n write(view, offset, data) {\n view.setUint16(offset, data.keyTag);\n view.setUint8(offset + 2, data.algorithm);\n view.setUint8(offset + 3, data.digestType);\n offset = bytes.write(view, offset + 4, data.digest);\n return offset;\n },\n read(view, position) {\n const keyTag = view.getUint16(position.offset);\n const algorithm = view.getUint8(position.offset + 2);\n const digestType = view.getUint8(position.offset + 3);\n advance(position, 4);\n return {\n keyTag,\n algorithm,\n digestType,\n digest: bytes.read(view, position),\n };\n },\n});\n\nexport interface NaptrData {\n order: number;\n preference: number;\n flags: string;\n services: string;\n regexp: string;\n replacement: string;\n}\n\nexport interface NaptrAnswer extends BaseAnswer {\n type: RecordType.NAPTR;\n data: NaptrData;\n}\n\nexport const answerNaptr: Encoder<NaptrData> = withRDLength({\n bytes(data) {\n return (\n string.bytes(data.flags) +\n string.bytes(data.services) +\n string.bytes(data.regexp) +\n name.bytes(data.replacement) +\n 4\n );\n },\n write(view, offset, data) {\n view.setUint16(offset, data.order);\n view.setUint16(offset + 2, data.preference);\n offset = string.write(view, offset + 4, data.flags);\n offset = string.write(view, offset, data.services);\n offset = string.write(view, offset, data.regexp);\n offset = name.write(view, offset, data.replacement);\n return offset;\n },\n read(view, position) {\n const order = view.getUint16(position.offset);\n const preference = view.getUint16(position.offset + 2);\n advance(position, 4);\n return {\n order,\n preference,\n flags: string.read(view, position),\n services: string.read(view, position),\n regexp: string.read(view, position),\n replacement: name.read(view, position),\n };\n },\n});\n\nexport interface TlsaData {\n usage: number;\n selector: number;\n matchingType: number;\n certificate: Uint8Array;\n}\n\nexport interface TlsaAnswer extends BaseAnswer {\n type: RecordType.TLSA;\n data: TlsaData;\n}\n\nexport const answerTlsa: Encoder<TlsaData> = withRDLength({\n bytes(data) {\n return bytes.bytes(data.certificate) + 3;\n },\n write(view, offset, data) {\n view.setUint8(offset, data.usage);\n view.setUint8(offset + 1, data.selector);\n view.setUint8(offset + 2, data.matchingType);\n return bytes.write(view, offset + 3, data.certificate);\n },\n read(view, position) {\n const usage = view.getUint8(position.offset);\n const selector = view.getUint8(position.offset + 1);\n const matchingType = view.getUint8(position.offset + 2);\n advance(position, 3);\n return {\n usage,\n selector,\n matchingType,\n certificate: bytes.read(view, position),\n };\n },\n});\n\nexport interface SvcbData {\n name: string;\n priority?: number;\n params: SvcParams;\n}\n\nexport interface SvcbAnswer extends BaseAnswer {\n type: RecordType.SVCB;\n data: SvcbData;\n}\n\nexport interface HttpsAnswer extends BaseAnswer {\n type: RecordType.HTTPS;\n data: SvcbData;\n}\n\nexport const answerSvcb: Encoder<SvcbData> = withRDLength({\n bytes(data) {\n return name.bytes(data.name) + svcParams.bytes(data.params) + 2;\n },\n write(view, offset, data) {\n view.setUint16(offset, data.priority || 0);\n offset = name.write(view, offset + 2, data.name);\n offset = svcParams.write(view, offset, data.params);\n return offset;\n },\n read(view, position) {\n const priority = view.getUint16(position.offset);\n advance(position, 2);\n return {\n name: name.read(view, position),\n priority,\n params: svcParams.read(view, position),\n };\n },\n});\n\nexport interface OptAnswer {\n type: RecordType.OPT;\n name?: '.';\n udpPayloadSize: number;\n extendedRcode: number;\n ednsVersion: number;\n flags: number;\n data: PacketOpt[];\n}\n\nexport const answerOpt: Encoder<PacketOpt[]> = withRDLength(array(option));\n\nexport interface PtrAnswer extends BaseAnswer {\n type: RecordType.PTR;\n data: string;\n}\n\nexport interface CnameAnswer extends BaseAnswer {\n type: RecordType.CNAME;\n data: string;\n}\n\nexport interface DnameAnswer extends BaseAnswer {\n type: RecordType.DNAME;\n data: string;\n}\n\nexport interface NullAnswer extends BaseAnswer {\n type: RecordType.NULL;\n data: Uint8Array | string;\n}\n\nexport interface UnknownAnswer extends BaseAnswer {\n type:\n | RecordType.AFSDB\n | RecordType.APL\n | RecordType.AXFR\n | RecordType.CDNSKEY\n | RecordType.CDS\n | RecordType.CERT\n | RecordType.DHCID\n | RecordType.DLV\n | RecordType.HIP\n | RecordType.IPSECKEY\n | RecordType.IXFR\n | RecordType.KEY\n | RecordType.KX\n | RecordType.LOC\n | RecordType.NSEC3PARAM\n | RecordType.NULL\n | RecordType.SIG\n | RecordType.TA\n | RecordType.TKEY\n | RecordType.TSIG;\n data: Uint8Array | string;\n}\n\nexport type Answer =\n | AAnswer\n | AAAAAnswer\n | TxtAnswer\n | SrvAnswer\n | HInfoAnswer\n | CaaAnswer\n | NsAnswer\n | SoaAnswer\n | MxAnswer\n | OptAnswer\n | DnskeyAnswer\n | RrsigAnswer\n | RpAnswer\n | NsecAnswer\n | Nsec3Answer\n | SshfpAnswer\n | DsAnswer\n | NaptrAnswer\n | TlsaAnswer\n | PtrAnswer\n | CnameAnswer\n | DnameAnswer\n | SvcbAnswer\n | HttpsAnswer\n | NullAnswer\n | UnknownAnswer;\n\nconst FLUSH_MASK = 1 << 15;\n\nexport const answer: Encoder<Answer> = {\n bytes(answer) {\n const byteLength =\n 8 + name.bytes(answer.type === RecordType.OPT ? '.' : answer.name);\n switch (answer.type) {\n case RecordType.A:\n return byteLength + answerIPv4.bytes(answer.data);\n case RecordType.NS:\n return byteLength + answerName.bytes(answer.data);\n case RecordType.SOA:\n return byteLength + answerSoa.bytes(answer.data);\n case RecordType.HINFO:\n return byteLength + answerHInfo.bytes(answer.data);\n case RecordType.MX:\n return byteLength + answerMx.bytes(answer.data);\n case RecordType.TXT:\n return byteLength + answerTxt.bytes(answer.data);\n case RecordType.RP:\n return byteLength + answerRp.bytes(answer.data);\n case RecordType.AAAA:\n return byteLength + answerIPv6.bytes(answer.data);\n case RecordType.SRV:\n return byteLength + answerSrv.bytes(answer.data);\n case RecordType.NAPTR:\n return byteLength + answerNaptr.bytes(answer.data);\n case RecordType.OPT:\n return byteLength + answerOpt.bytes(answer.data);\n case RecordType.DS:\n return byteLength + answerDs.bytes(answer.data);\n case RecordType.SSHFP:\n return byteLength + answerSshfp.bytes(answer.data);\n case RecordType.RRSIG:\n return byteLength + answerRrsig.bytes(answer.data);\n case RecordType.NSEC:\n return byteLength + answerNsec.bytes(answer.data);\n case RecordType.DNSKEY:\n return byteLength + answerDnskey.bytes(answer.data);\n case RecordType.NSEC3:\n return byteLength + answerNsec3.bytes(answer.data);\n case RecordType.TLSA:\n return byteLength + answerTlsa.bytes(answer.data);\n case RecordType.SVCB:\n case RecordType.HTTPS:\n return byteLength + answerSvcb.bytes(answer.data);\n case RecordType.CAA:\n return byteLength + answerCaa.bytes(answer.data);\n case RecordType.PTR:\n case RecordType.CNAME:\n case RecordType.DNAME:\n return byteLength + answerName.bytes(answer.data);\n default:\n return byteLength + answerBytes.bytes(answer.data);\n }\n },\n write(view, offset, answer) {\n if (answer.type === RecordType.OPT) {\n offset = name.write(view, offset, '.');\n view.setUint16(offset, answer.type);\n view.setUint16(offset + 2, answer.udpPayloadSize || 4_096);\n view.setUint8(offset + 4, answer.extendedRcode || 0);\n view.setUint8(offset + 5, answer.ednsVersion || 0);\n view.setUint16(offset + 6, answer.flags || 0);\n offset += 8;\n return answerOpt.write(view, offset, answer.data);\n }\n offset = name.write(view, offset, answer.name);\n view.setUint16(offset, answer.type);\n view.setUint16(\n offset + 2,\n (answer.class || 0) | (answer.flush ? FLUSH_MASK : 0)\n );\n view.setUint32(offset + 4, answer.ttl || 0);\n offset += 8;\n switch (answer.type) {\n case RecordType.A:\n return answerIPv4.write(view, offset, answer.data);\n case RecordType.NS:\n return answerName.write(view, offset, answer.data);\n case RecordType.SOA:\n return answerSoa.write(view, offset, answer.data);\n case RecordType.HINFO:\n return answerHInfo.write(view, offset, answer.data);\n case RecordType.MX:\n return answerMx.write(view, offset, answer.data);\n case RecordType.TXT:\n return answerTxt.write(view, offset, answer.data);\n case RecordType.RP:\n return answerRp.write(view, offset, answer.data);\n case RecordType.AAAA:\n return answerIPv6.write(view, offset, answer.data);\n case RecordType.SRV:\n return answerSrv.write(view, offset, answer.data);\n case RecordType.NAPTR:\n return answerNaptr.write(view, offset, answer.data);\n case RecordType.DS:\n return answerDs.write(view, offset, answer.data);\n case RecordType.SSHFP:\n return answerSshfp.write(view, offset, answer.data);\n case RecordType.RRSIG:\n return answerRrsig.write(view, offset, answer.data);\n case RecordType.NSEC:\n return answerNsec.write(view, offset, answer.data);\n case RecordType.DNSKEY:\n return answerDnskey.write(view, offset, answer.data);\n case RecordType.NSEC3:\n return answerNsec3.write(view, offset, answer.data);\n case RecordType.TLSA:\n return answerTlsa.write(view, offset, answer.data);\n case RecordType.SVCB:\n case RecordType.HTTPS:\n return answerSvcb.write(view, offset, answer.data);\n case RecordType.CAA:\n return answerCaa.write(view, offset, answer.data);\n case RecordType.PTR:\n case RecordType.CNAME:\n case RecordType.DNAME:\n return answerName.write(view, offset, answer.data);\n default:\n return answerBytes.write(view, offset, answer.data);\n }\n },\n read(view, position) {\n const _name = name.read(view, position);\n const type = view.getUint16(position.offset);\n if (type === RecordType.OPT) {\n const udpPayloadSize = view.getUint16(position.offset + 2) || 4_096;\n const extendedRcode = view.getUint8(position.offset + 4);\n const ednsVersion = view.getUint8(position.offset + 5);\n const flags = view.getUint16(position.offset + 6);\n advance(position, 8);\n return {\n type,\n udpPayloadSize,\n extendedRcode,\n ednsVersion,\n flags,\n data: answerOpt.read(view, position),\n };\n }\n const _class = view.getUint16(position.offset + 2);\n const ttl = view.getUint32(position.offset + 4);\n advance(position, 8);\n const answer: Answer = {\n name: _name,\n type,\n class: _class & ~FLUSH_MASK,\n flush: !!(_class & FLUSH_MASK),\n ttl,\n data: null as any,\n };\n switch (answer.type) {\n case RecordType.A:\n answer.data = answerIPv4.read(view, position);\n return answer;\n case RecordType.NS:\n answer.data = answerName.read(view, position);\n return answer;\n case RecordType.SOA:\n answer.data = answerSoa.read(view, position);\n return answer;\n case RecordType.HINFO:\n answer.data = answerHInfo.read(view, position);\n return answer;\n case RecordType.MX:\n answer.data = answerMx.read(view, position);\n return answer;\n case RecordType.TXT:\n answer.data = answerTxt.read(view, position);\n return answer;\n case RecordType.RP:\n answer.data = answerRp.read(view, position);\n return answer;\n case RecordType.AAAA:\n answer.data = answerIPv6.read(view, position);\n return answer;\n case RecordType.SRV:\n answer.data = answerSrv.read(view, position);\n return answer;\n case RecordType.NAPTR:\n answer.data = answerNaptr.read(view, position);\n return answer;\n case RecordType.DS:\n answer.data = answerDs.read(view, position);\n return answer;\n case RecordType.SSHFP:\n answer.data = answerSshfp.read(view, position);\n return answer;\n case RecordType.RRSIG:\n answer.data = answerRrsig.read(view, position);\n return answer;\n case RecordType.NSEC:\n answer.data = answerNsec.read(view, position);\n return answer;\n case RecordType.DNSKEY:\n answer.data = answerDnskey.read(view, position);\n return answer;\n case RecordType.NSEC3:\n answer.data = answerNsec3.read(view, position);\n return answer;\n case RecordType.TLSA:\n answer.data = answerTlsa.read(view, position);\n return answer;\n case RecordType.SVCB:\n case RecordType.HTTPS:\n answer.data = answerSvcb.read(view, position);\n return answer;\n case RecordType.CAA:\n answer.data = answerCaa.read(view, position);\n return answer;\n case RecordType.PTR:\n case RecordType.CNAME:\n case RecordType.DNAME:\n answer.data = answerName.read(view, position);\n return answer;\n default:\n answer.data = answerBytes.read(view, position);\n return answer;\n }\n },\n};\n","import { type PacketFlag, PacketRType, PacketType } from './constants';\nimport { type Encoder, type ReadPosition, advance } from './encoders';\nimport { type Question, question } from './questions';\nimport { type Answer, answer } from './answers';\n\nconst readList = <T>(\n encoder: Encoder<T>,\n view: DataView,\n position: ReadPosition,\n limit: number\n): T[] | undefined => {\n if (!limit) {\n return undefined;\n }\n const { offset, length } = position;\n const data: T[] = [];\n for (let idx = 0; idx < limit && position.offset - offset < length; idx++)\n data.push(encoder.read(view, position));\n return data;\n};\n\nexport interface Packet {\n id?: number;\n type?: PacketType;\n rtype?: PacketRType;\n flags?: PacketFlag | (number & {});\n questions?: Question[];\n answers?: Answer[];\n additionals?: Answer[];\n authorities?: Answer[];\n}\n\nconst PACKET_FLAG_MASK = 32767;\n\nexport const packet: Encoder<Packet> = {\n bytes(packet) {\n const { questions, answers, authorities, additionals } = packet;\n let byteLength = 12;\n let idx = 0;\n for (idx = 0; questions && idx < questions.length; idx++)\n byteLength += question.bytes(questions[idx]);\n for (idx = 0; answers && idx < answers.length; idx++)\n byteLength += answer.bytes(answers[idx]);\n for (idx = 0; authorities && idx < authorities.length; idx++)\n byteLength += answer.bytes(authorities[idx]);\n for (idx = 0; additionals && idx < additionals.length; idx++)\n byteLength += answer.bytes(additionals[idx]);\n return byteLength;\n },\n write(view, offset, packet) {\n const { questions, answers, authorities, additionals } = packet;\n let flags =\n ((packet.flags || 0) & PACKET_FLAG_MASK) |\n (packet.type || PacketType.QUERY) |\n (packet.rtype || 0);\n view.setUint16(offset, packet.id || 0);\n view.setUint16(offset + 2, flags);\n view.setUint16(offset + 4, packet.questions?.length || 0);\n view.setUint16(offset + 6, packet.answers?.length || 0);\n view.setUint16(offset + 8, packet.authorities?.length || 0);\n view.setUint16(offset + 10, packet.additionals?.length || 0);\n offset += 12;\n let idx = 0;\n for (idx = 0; questions && idx < questions.length; idx++)\n offset = question.write(view, offset, questions[idx]);\n for (idx = 0; answers && idx < answers.length; idx++)\n offset = answer.write(view, offset, answers[idx]);\n for (idx = 0; authorities && idx < authorities.length; idx++)\n offset = answer.write(view, offset, authorities[idx]);\n for (idx = 0; additionals && idx < additionals.length; idx++)\n offset = answer.write(view, offset, additionals[idx]);\n return offset;\n },\n read(view, position) {\n const id = view.getUint16(position.offset);\n const flags = view.getUint16(position.offset + 2);\n const questionsLength = view.getUint16(position.offset + 4);\n const answersLength = view.getUint16(position.offset + 6);\n const authoritiesLength = view.getUint16(position.offset + 8);\n const additionalsLength = view.getUint16(position.offset + 10);\n advance(position, 12);\n return {\n id,\n flags,\n rtype: flags & 0xf,\n type:\n flags & PacketType.RESPONSE ? PacketType.RESPONSE : PacketType.QUERY,\n questions: readList(question, view, position, questionsLength),\n answers: readList(answer, view, position, answersLength),\n authorities: readList(answer, view, position, authoritiesLength),\n additionals: readList(answer, view, position, additionalsLength),\n };\n },\n};\n","import { type Packet, packet } from './packets';\n\nexport type {\n NsAnswer,\n AAnswer,\n AAAAAnswer,\n TxtAnswer,\n SrvAnswer,\n HInfoAnswer,\n CaaAnswer,\n SoaAnswer,\n MxAnswer,\n DnskeyAnswer,\n RrsigAnswer,\n RpAnswer,\n NsecAnswer,\n Nsec3Answer,\n SshfpAnswer,\n DsAnswer,\n NaptrAnswer,\n TlsaAnswer,\n PtrAnswer,\n CnameAnswer,\n DnameAnswer,\n NullAnswer,\n UnknownAnswer,\n Answer,\n} from './answers';\n\nexport type {\n IPType,\n ClientSubnetOpt,\n KeepAliveOpt,\n PaddingOpt,\n TagOpt,\n UnknownOpt,\n PacketOpt,\n} from './options';\nexport type { Packet } from './packets';\nexport type { Question } from './questions';\nexport * from './constants';\n\nexport function decode(bytes: ArrayBufferView | ArrayBufferLike): Packet {\n const view =\n 'buffer' in bytes\n ? new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength)\n : new DataView(bytes);\n return packet.read(view, { offset: 0, length: view.byteLength });\n}\n\nexport function streamDecode(bytes: ArrayBufferView | ArrayBufferLike): Packet {\n const view =\n 'buffer' in bytes\n ? new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength)\n : new DataView(bytes);\n const length = Math.min(view.byteLength - 2, view.getUint16(0));\n return packet.read(view, { offset: 2, length });\n}\n\nexport function encodingLength(input: Packet): number {\n return packet.bytes(input);\n}\n\nexport function encode(input: Packet): Uint8Array {\n const buffer = new ArrayBuffer(packet.bytes(input));\n const length = packet.write(new DataView(buffer), 0, input);\n return new Uint8Array(buffer, 0, length);\n}\n\nexport function streamEncode(input: Packet): Uint8Array {\n const buffer = new ArrayBuffer(packet.bytes(input) + 2);\n const view = new DataView(buffer);\n const length = packet.write(view, 2, input);\n view.setUint16(0, length - 2);\n return new Uint8Array(buffer, 0, length);\n}\n"],"names":["PacketType","RecordType","RecordClass","PacketFlag","OptCode","textEncoder","TextEncoder","textDecoder","TextDecoder","utf8ByteLength","Buffer","str","byteLength","length","i","code","charCodeAt","name","bytes","replace","RangeError","write","view","offset","encoded","encode","startIdx","endIdx","indexOf","byteIdx","idx","setUint8","read","outerPosition","labels","maxOffset","innerPosition","labelLength","getUint8","advance","label","sliceView","push","decode","jumpTo","getUint16","join","data","Uint8Array","buffer","byteOffset","set","position","octets","string","typeBitmap","types","extents","Math","max","ceil","typesByWindow","window","typelist","windowLength","bitmap","bit","ipv4","ip","split","octetIdx","parseInt","min","Array","fill","map","_","index","uint16","key","setUint16","ipv6","middleIdx","head","slice","tail","includes","pop","undefined","headIdx","pad","tailIdx","v4Parts","part","output","toString","withRDLength","encoder","startOffset","rdlength","array","QU_BIT","question","_class","class","IN","qu","type","_name","ANY","IPType","unknownOpt","option","OPTION_0","v4Seg","ipv4Re","RegExp","clientSubnetOpt","sourcePrefixLength","scopePrefixLength","family","test","v4","v6","maskLength","ipBuffer","encodeIntoBuffer","input","ArrayBuffer","endOffset","DataView","CLIENT_SUBNET","keepAliveOpt","timeout","TCP_KEEPALIVE","paddingOpt","_view","PADDING","tagOpt","tags","KEY_TAG","isUnknownOpt","opt","SvcParamCode","mandatorySvcParam","alpnSvcParam","portSvcParam","ipv4HintSvcParam","ipv6HintSvcParam","bytesSvcParam","svcParams","params","mandatory","alpn","port","ipv4hint","ipv6hint","echconfig","dohpath","odoh","Mandatory","Alpn","NoDefaultAlpn","Port","Ipv4Hint","Ipv6Hint","EchConfig","DohPath","Odoh","answerBytes","answerName","answerIPv4","answerIPv6","answerTxt","answerSrv","target","priority","weight","answerHInfo","cpu","os","toCaaTag","answerCaa","tag","value","flags","issuerCritical","answerSoa","mname","rname","setUint32","serial","refresh","retry","expire","minimum","getUint32","answerMx","exchange","preference","answerDnskey","algorithm","answerRrsig","signersName","signature","typeCovered","originalTTL","expiration","inception","keyTag","answerRp","mbox","txt","answerNsec","nextDomain","rrtypes","answerNsec3","salt","iterations","answerSshfp","fingerprint","hash","answerDs","digest","digestType","answerNaptr","services","regexp","replacement","order","answerTlsa","certificate","usage","selector","matchingType","answerSvcb","answerOpt","FLUSH_MASK","answer","OPT","A","NS","SOA","HINFO","MX","TXT","RP","AAAA","SRV","NAPTR","DS","SSHFP","RRSIG","NSEC","DNSKEY","NSEC3","TLSA","SVCB","HTTPS","CAA","PTR","CNAME","DNAME","udpPayloadSize","extendedRcode","ednsVersion","flush","ttl","readList","limit","packet","questions","answers","authorities","additionals","QUERY","rtype","id","questionsLength","answersLength","authoritiesLength","additionalsLength","RESPONSE","encodingLength","streamDecode","streamEncode"],"mappings":";;;;AAAA,IAAkBA,aAAAA;EAAAA,EAAAA,EAAU,QAAA,KAAA;EAAVA,EAAAA,EAAU,WAAA,SAAA;EAAA,OAAVA;AAAU,EAAA,CAAA;;AAK5B,IAAkBC,aAAAA;EAAAA,EAAAA,EAAU,IAAA,KAAA;EAAVA,EAAAA,EAAU,KAAA,KAAA;EAAVA,EAAAA,EAAU,QAAA,KAAA;EAAVA,EAAAA,EAAU,MAAA,KAAA;EAAVA,EAAAA,EAAU,OAAA,MAAA;EAAVA,EAAAA,EAAU,MAAA,MAAA;EAAVA,EAAAA,EAAU,QAAA,MAAA;EAAVA,EAAAA,EAAU,KAAA,MAAA;EAAVA,EAAAA,EAAU,MAAA,MAAA;EAAVA,EAAAA,EAAU,KAAA,MAAA;EAAVA,EAAAA,EAAU,QAAA,MAAA;EAAVA,EAAAA,EAAU,MAAA,MAAA;EAAVA,EAAAA,EAAU,MAAA,MAAA;EAAVA,EAAAA,EAAU,OAAA,MAAA;EAAVA,EAAAA,EAAU,MAAA,MAAA;EAAVA,EAAAA,EAAU,MAAA,MAAA;EAAVA,EAAAA,EAAU,QAAA,MAAA;EAAVA,EAAAA,EAAU,KAAA,MAAA;EAAVA,EAAAA,EAAU,OAAA,MAAA;EAAVA,EAAAA,EAAU,QAAA,MAAA;EAAVA,EAAAA,EAAU,MAAA,MAAA;EAAVA,EAAAA,EAAU,MAAA,MAAA;EAAVA,EAAAA,EAAU,KAAA,MAAA;EAAVA,EAAAA,EAAU,QAAA,MAAA;EAAVA,EAAAA,EAAU,WAAA,MAAA;EAAVA,EAAAA,EAAU,QAAA,MAAA;EAAVA,EAAAA,EAAU,OAAA,MAAA;EAAVA,EAAAA,EAAU,SAAA,MAAA;EAAVA,EAAAA,EAAU,QAAA,MAAA;EAAVA,EAAAA,EAAU,QAAA,MAAA;EAAVA,EAAAA,EAAU,aAAA,MAAA;EAAVA,EAAAA,EAAU,OAAA,MAAA;EAAVA,EAAAA,EAAU,MAAA,MAAA;EAAVA,EAAAA,EAAU,MAAA,MAAA;EAAVA,EAAAA,EAAU,UAAA,MAAA;EAAVA,EAAAA,EAAU,OAAA,MAAA;EAAVA,EAAAA,EAAU,QAAA,MAAA;EAAVA,EAAAA,EAAU,MAAA,MAAA;EAAVA,EAAAA,EAAU,OAAA,OAAA;EAAVA,EAAAA,EAAU,OAAA,OAAA;EAAVA,EAAAA,EAAU,OAAA,OAAA;EAAVA,EAAAA,EAAU,OAAA,OAAA;EAAVA,EAAAA,EAAU,MAAA,OAAA;EAAVA,EAAAA,EAAU,MAAA,OAAA;EAAVA,EAAAA,EAAU,KAAA,SAAA;EAAVA,EAAAA,EAAU,MAAA,SAAA;EAAA,OAAVA;AAAU,EAAA,CAAA;;AAiD5B,IAAkBC,aAAAA;EAAAA,EAAAA,EAAW,KAAA,KAAA;EAAXA,EAAAA,EAAW,KAAA,KAAA;EAAXA,EAAAA,EAAW,KAAA,KAAA;EAAXA,EAAAA,EAAW,KAAA,KAAA;EAAXA,EAAAA,EAAW,MAAA,OAAA;EAAA,OAAXA;AAAW,EAAA,CAAA;;AAQ7B,IAAkBC,aAAAA;EAAAA,EAAAA,EAAU,QAAA,KAAA;EAAVA,EAAAA,EAAU,UAAA,KAAA;EAAVA,EAAAA,EAAU,WAAA,KAAA;EAAVA,EAAAA,EAAU,WAAA,KAAA;EAAVA,EAAAA,EAAU,SAAA,KAAA;EAAVA,EAAAA,EAAU,UAAA,KAAA;EAAVA,EAAAA,EAAU,WAAA,KAAA;EAAVA,EAAAA,EAAU,UAAA,KAAA;EAAVA,EAAAA,EAAU,UAAA,KAAA;EAAVA,EAAAA,EAAU,UAAA,KAAA;EAAVA,EAAAA,EAAU,UAAA,MAAA;EAAVA,EAAAA,EAAU,oBAAA,MAAA;EAAVA,EAAAA,EAAU,iBAAA,MAAA;EAAVA,EAAAA,EAAU,sBAAA,OAAA;EAAVA,EAAAA,EAAU,oBAAA,OAAA;EAAVA,EAAAA,EAAU,qBAAA,OAAA;EAAVA,EAAAA,EAAU,uBAAA,QAAA;EAAA,OAAVA;AAAU,EAAA,CAAA;;AAkC5B,IAAkBC,aAAAA;EAAAA,EAAAA,EAAO,WAAA,KAAA;EAAPA,EAAAA,EAAO,MAAA,KAAA;EAAPA,EAAAA,EAAO,KAAA,KAAA;EAAPA,EAAAA,EAAO,OAAA,KAAA;EAAPA,EAAAA,EAAO,WAAA,KAAA;EAAPA,EAAAA,EAAO,MAAA,KAAA;EAAPA,EAAAA,EAAO,MAAA,KAAA;EAAPA,EAAAA,EAAO,MAAA,KAAA;EAAPA,EAAAA,EAAO,gBAAA,KAAA;EAAPA,EAAAA,EAAO,SAAA,KAAA;EAAPA,EAAAA,EAAO,SAAA,MAAA;EAAPA,EAAAA,EAAO,gBAAA,MAAA;EAAPA,EAAAA,EAAO,UAAA,MAAA;EAAPA,EAAAA,EAAO,QAAA,MAAA;EAAPA,EAAAA,EAAO,UAAA,MAAA;EAAPA,EAAAA,EAAO,WAAA,SAAA;EAAPA,EAAAA,EAAO,eAAA,SAAA;EAAA,OAAPA;AAAO,EAAA,CAAA;;ACnFlB,MAAMC,IAAc,IAAIC;;AACxB,MAAMC,IAAc,IAAIC;;AAE/B,MAAMC,IACc,sBAAXC,SACFC,KAAgBD,OAAOE,WAAWD,KAClCA;EACC,IAAIE,IAASF,EAAIE;EACjB,KAAK,IAAIC,IAAID,IAAS,GAAGC,KAAK,GAAGA,KAAK;IACpC,MAAMC,IAAOJ,EAAIK,WAAWF;IAC5B,IAAIC,IAAO,OAAQA,KAAQ;MACzBF;WACK,IAAIE,IAAO,QAASA,KAAQ;MACjCF,KAAU;;IAGZ,IAAIE,KAAQ,SAAUA,KAAQ;MAC5BD;;AAEJ;EACA,OAAOD;;;AAMR,MAAMI,IAAwB;EACnCC,KAAAA,CAAMP;IACJ,IAAIE,IAAS;IACb,QAAQF;KACN,KAAK;KACL,KAAK;KACL,KAAK;MACH,OAAO;;KACT;MACE,IAAe,QAAXA,EAAI;QAAYE;;MACpB,IAA4B,QAAxBF,EAAIA,EAAIE,SAAS;QAAYA;;MACjCA,KAAUF,EAAIQ,QAAQ,SAAS,KAAKN;MACpC,IAAIA,IAdO;QAeT,MAAM,IAAIO,WACR,SAAST;;MAEb,OAAOE;;AAEb;EACAQ,KAAAA,CAAMC,GAAMC,GAAQZ;IAClB,MAAMa,IAAUnB,EAAYoB,OAAOd;IACnC,KACE,IAAIe,IAA0B,OAAfF,EAAQ,KAAoB,IAAI,GAAGG,IAAS,GAC3DD,IAAWF,EAAQZ,YACnBc,IAAWC,IAAS,GACpB;MACAA,IAASH,EAAQI,QAAQ,IAAYF;MACrC,OAAOC,KAAS,KAA8B,OAAxBH,EAAQG,IAAS;QACrCA,IAASH,EAAQI,QAAQ,IAAYD,IAAS;;MAChD,KAAe,MAAXA;QAAeA,IAASH,EAAQZ;;MACpC,IAAIe,MAAWD;QACb;aACK,IAAIC,IAASD,IAnCN;QAoCZ,MAAM,IAAIN,WACR,aAAaT;;MAGjB,IAAIkB,IAAUN,IAAS;MACvB,KAAK,IAAIO,IAAMJ,GAAUI,IAAMH,GAAQG,KAAO;QAC5C,IAAqB,OAAjBN,EAAQM,MAA6C,OAArBN,EAAQM,IAAM;UAChDA;;QACFR,EAAKS,SAASF,KAAWL,EAAQM;AACnC;MACAR,EAAKS,SAASR,GAAQM,IAAUN,IAAS;MACzCA,IAASM;MACTH,IAAWC,IAAS;AACtB;IACA,OAAOJ,IAAS;AAClB;EACAS,IAAAA,CAAKV,GAAMW;IACT,MAAMC,IAAmB;IACzB,IAAIC,IAAYF,EAAcV;IAC9B,IAAIa,IAAgBH;IACpB,OAAO,GAAM;MACX,MAAMI,IAAcf,EAAKgB,SAASF,EAAcb;MAChD,IAAoB,MAAhBc,GAAmB;QACrBE,QAAQH,GAAe;QACvB;AACF,aAAO,MAAmB,MAAdC,IAA2B;QACrCE,QAAQH,GAAe;QACvB,MAAMI,IAAQC,UAAUnB,GAAMc,GAAeC;QAC7CH,EAAOQ,KAAKnC,EAAYoC,OAAOH,GAAOrB,QAAQ,OAAO;AACvD,aAAO;QACL,MAAMyB,IAAStB,EAAKuB,UAAUT,EAAcb,UAAU;QACtDgB,QAAQH,GAAe;QACvB,IAAIQ,IAAST;UACXC,IAAgB;YAAEb,QAASY,IAAYS;YAAS/B,QAAQ;;;UAExD;;AAEJ;AACF;IACA,OAAOqB,EAAOY,KAAK,QAAQ;AAC7B;;;AAGK,MAAM5B,IAAkD;EAC7DA,OAAM6B,KACmB,mBAATA,IAAoBtC,EAAesC,KAAQA,EAAKnC;EAEhES,KAAAA,CAAMC,GAAMC,GAAQwB;IAClB,MAAM7B,IAAwB,mBAAT6B,IAAoB1C,EAAYoB,OAAOsB,KAAQA;IACrD,IAAIC,WACjB1B,EAAK2B,QACL3B,EAAK4B,aAAa3B,GAClBL,EAAMN,YAEDuC,IAAIjC;IAEX,OADAK,KAAUL,EAAMN;AAElB;EACAoB,MAAIA,CAACV,GAAM8B,MACFX,UAAUnB,GAAM8B;;;AAIpB,MAAMC,IAA8B;EACzCnC,OAAM6B,KACGA,EAAKnC,aAAa;EAE3BS,KAAAA,CAAMC,GAAMC,GAAQL;IAClBI,EAAKS,SAASR,KAAUL,EAAMN;IACf,IAAIoC,WACjB1B,EAAK2B,QACL3B,EAAK4B,aAAa3B,GAClBL,EAAMN,YAEDuC,IAAIjC;IAEX,OADAK,KAAUL,EAAMN;AAElB;EACAoB,IAAAA,CAAKV,GAAM8B;IACT,MAAMvC,IAASS,EAAKgB,SAASc,EAAS7B;IACtCgB,QAAQa,GAAU;IAClB,OAAOX,UAAUnB,GAAM8B,GAAUvC;AACnC;;;AAGK,MAAMyC,IAA0B;EACrCpC,OAAMP,KACGF,EAAeE,KAAO;EAE/BU,KAAAA,CAAMC,GAAMC,GAAQwB;IAClB,MAAME,IAAS5C,EAAYoB,OAAOsB;IAClCzB,EAAKS,SAASR,KAAU0B,EAAOrC;IAC/B,OAAOM,EAAMG,MAAMC,GAAMC,GAAQ0B;AACnC;EACAjB,IAAAA,CAAKV,GAAM8B;IACT,MAAMvC,IAASS,EAAKgB,SAASc,EAAS7B;IACtCgB,QAAQa,GAAU;IAClB,OAAO7C,EAAYoC,OAAOF,UAAUnB,GAAM8B,GAAUvC;AACtD;;;AAGK,MAAM0C,IAAoC;EAC/CrC,KAAAA,CAAMsC;IACJ,MAAMC,IAAoB;IAC1B,KAAK,IAAI3B,IAAM,GAAGA,IAAM0B,EAAM3C,QAAQiB;MACpC2B,EAAQD,EAAM1B,MAAQ,KAAK4B,KAAKC,IAC9BF,EAAQD,EAAM1B,MAAQ,MAAM,GACf,MAAb0B,EAAM1B;;IAEV,IAAIjB,IAAS;IACb,KAAK,IAAIiB,IAAM,GAAGA,IAAM2B,EAAQ5C,QAAQiB;MACtC,IAAoB,QAAhB2B,EAAQ3B;QAAcjB,KAAU,IAAI6C,KAAKE,MAAMH,EAAQ3B,KAAO,KAAK;;;IACzE,OAAOjB;AACT;EACAQ,KAAAA,CAAMC,GAAMC,GAAQiC;IAClB,MAAMK,IAA4B;IAClC,KAAK,IAAI/B,IAAM,GAAGA,IAAM0B,EAAM3C,QAAQiB,KAAO;OAEzC+B,EAAcL,EAAM1B,MAAQ,OAAO+B,EAAcL,EAAM1B,MAAQ,KAAK,KAC9D0B,EAAM1B,MAAQ,IAAK,OAAS,KAAM,KAAkB,IAAb0B,EAAM1B;AACvD;IACA,KAAK,IAAIA,IAAM,GAAGA,IAAM+B,EAAchD,QAAQiB,KAAO;MACnD,MAAMgC,IAASD,EAAc/B;MAC7B,IAAc,QAAVgC,GAAgB;QAClBxC,EAAKS,SAASR,KAAUO;QACxBR,EAAKS,SAASR,KAAUuC,EAAOjD;QAC/B,KAAK,IAAIgB,IAAU,GAAGA,IAAUiC,EAAOjD,QAAQgB;UAC7CP,EAAKS,SAASR,KAAUuC,EAAOjC;;AAEnC;AACF;IACA,OAAON;AACT;EACAS,IAAAA,CAAKV,GAAM8B;IACT,OAAM7B,QAAEA,GAAMV,QAAEA,KAAWuC;IAC3B,MAAMW,IAAyB;IAC/B,OAAOX,EAAS7B,SAASA,IAASV,GAAQ;MACxC,MAAMiD,IAASxC,EAAKgB,SAASc,EAAS7B;MACtC,MAAMyC,IAAe1C,EAAKgB,SAASc,EAAS7B,SAAS;MACrD,KAAK,IAAIO,IAAM,GAAGA,IAAMkC,GAAclC,KAAO;QAC3C,MAAMmC,IAAS3C,EAAKgB,SAASc,EAAS7B,SAAS,IAAIO;QACnD,KAAK,IAAIoC,IAAM,GAAGA,IAAM,GAAGA;UACzB,IAAID,IAAU,KAAM,IAAIC;YACtBH,EAASrB,KAAMoB,KAAU,IAAMhC,KAAO,IAAKoC;;;AAGjD;MACA3B,QAAQa,GAAU,IAAIY;AACxB;IACA,OAAOD;AACT;;;AAGK,MAAMI,IAAwB;EACnCjD,OAAKA,MACI;EAETG,KAAAA,CAAMC,GAAMC,GAAQ6C;IAClB,MAAMf,IAASe,EAAGC,MAAM,KAAK;IAC7B,KAAK,IAAIC,IAAW,GAAGA,IAAW,GAAGA;MACnChD,EAAKS,SAASR,KAAUgD,SAASlB,EAAOiB,IAAW;;IACrD,OAAO/C;AACT;EACAS,IAAAA,CAAKV,GAAM8B;IACT,MAAMvC,IAAS6C,KAAKc,IAAIpB,EAASvC,QAAQ;IACzC,MAAMuD,IAAK,IAAIK,MAAM,GAClBC,KAAK,GACLC,IAAI,CAACC,GAAGC,MACPA,IAAQhE,IAASS,EAAKgB,SAASc,EAAS7B,SAASsD,KAAS,GAE3D/B,KAAK;IACRP,QAAQa,GAAUvC;IAClB,OAAOuD;AACT;;;AAGK,MAAMU,IAA0B;EACrC5D,OAAKA,MACI;EAETG,KAAAA,CAAMC,GAAMC,GAAQwD;IAClBzD,EAAK0D,UAAUzD,GAAQwD;IACvB,OAAOxD,IAAS;AAClB;EACAS,IAAAA,CAAKV,GAAM8B;IACT,MAAM2B,IAAMzD,EAAKuB,UAAUO,EAAS7B;IACpCgB,QAAQa,GAAU;IAClB,OAAO2B;AACT;;;AAGK,MAAME,IAAwB;EACnC/D,OAAKA,MACI;EAETG,KAAAA,CAAMC,GAAMC,GAAQ6C;IAClB,MAAMc,IAAYd,EAAGxC,QAAQ;IAC7B,MAAMuD,KAAQD,KAAY,IAAKd,EAAGgB,MAAM,GAAGF,KAAad,GAAIC,MAAM;IAClE,MAAMgB,IAAOH,KAAY,IAAKd,EAAGgB,MAAMF,IAAY,GAAGb,MAAM,OAAO;IACnE,MAAMF,IACJkB,EAAKxE,SAAS,KAAKwE,EAAKA,EAAKxE,SAAS,GAAGyE,SAAS,OAC9CD,EAAKE,aACLC;IACN,KAAK,IAAIC,IAAU,GAAGA,IAAUN,EAAKtE,QAAQ4E,KAAW;MACtDnE,EAAK0D,UAAUzD,GAAQgD,SAASY,EAAKM,IAAU;MAC/ClE,KAAU;AACZ;IAEA,KAAK,IAAImE,IADY,KAAKP,EAAKtE,SAASwE,EAAKxE,UAAUsD,IAAO,IAAI,KACrCuB,IAAM,GAAGA,KAAO;MAC3CpE,EAAK0D,UAAUzD,GAAQ;MACvBA,KAAU;AACZ;IACA,KAAK,IAAIoE,IAAU,GAAGA,IAAUN,EAAKxE,QAAQ8E,KAAW;MACtDrE,EAAK0D,UAAUzD,GAAQgD,SAASc,EAAKM,IAAU;MAC/CpE,KAAU;AACZ;IACA,IAAI4C,GAAM;MACR,MAAMyB,IAAUzB,EAAKE,MAAM,KAAK,GAAGM,IAAIkB,KAAQtB,SAASsB,GAAM;MAC9DvE,EAAK0D,UAAUzD,GAASqE,EAAQ,MAAM,IAAKA,EAAQ;MACnDtE,EAAK0D,UAAUzD,IAAS,GAAIqE,EAAQ,MAAM,IAAKA,EAAQ;MACvDrE,KAAU;AACZ;IACA,OAAOA;AACT;EACAS,IAAAA,CAAKV,GAAM8B;IACT,IAAI0C,IAAS;IACb,MAAMjF,IAAS6C,KAAKc,IAAIpB,EAASvC,QAAQ;IACzC,KAAK,IAAIiB,IAAM,GAAGA,IAAMjB,GAAQiB,KAAO,GAAG;MACxC,IAAY,MAARA;QAAWgE,KAAU;;MACzBA,KAAUxE,EAAKuB,UAAUO,EAAS7B,SAASO,GAAKiE,SAAS;AAC3D;IACAxD,QAAQa,GAAUvC;IAClB,OAAOiF,EACJ3E,QAAQ,sBAAsB,UAC9BA,QAAQ,UAAU;AACvB;;;AAGK,MAAM6E,eACXC,MAAsB;EAEtB/E,OAAM6B,KACGkD,EAAQ/E,MAAM6B,KAAQ;EAE/B1B,KAAAA,CAAMC,GAAMC,GAAQwB;IAClB,MAAMmD,IAAc3E;IACpBA,IAAS0E,EAAQ5E,MAAMC,GAAMC,IAAS,GAAGwB;IACzCzB,EAAK0D,UAAUkB,GAAa3E,IAAS2E,IAAc;IACnD,OAAO3E;AACT;EACAS,IAAAA,CAAKV,GAAM8B;IACT,OAAM7B,QAAEA,GAAMV,QAAEA,KAAWuC;IAC3B,MAAM+C,IAAY/C,EAASvC,SAASS,EAAKuB,UAAUO,EAAS7B;IAC5D6B,EAAS7B,UAAU;IACnB,MAAMwB,IAAOkD,EAAQjE,KAAKV,GAAM8B;IAEhCA,EAAS7B,SAASA,IAAS,IAAI4E;IAC/B/C,EAASvC,SAASA;IAClB,OAAOkC;AACT;;;AAGK,MAAMqD,QAAYH,MAAmB;EAC1C/E,KAAAA,CAAM6B;IACJ,IAAInC,IAAa;IACjB,KAAK,IAAIkB,IAAM,GAAW,QAARiB,KAAgBjB,IAAMiB,EAAKlC,QAAQiB;MACnDlB,KAAcqF,EAAQ/E,MAAM6B,EAAKjB;;IACnC,OAAOlB;AACT;EACAS,KAAAA,CAAMC,GAAMC,GAAQwB;IAClB,KAAK,IAAIjB,IAAM,GAAW,QAARiB,KAAgBjB,IAAMiB,EAAKlC,QAAQiB;MACnDP,IAAS0E,EAAQ5E,MAAMC,GAAMC,GAAQwB,EAAKjB;;IAC5C,OAAOP;AACT;EACAS,IAAAA,CAAKV,GAAM8B;IACT,OAAM7B,QAAEA,GAAMV,QAAEA,KAAWuC;IAC3B,MAAML,IAAY;IAClB,OAAOK,EAAS7B,SAASA,IAASV;MAChCkC,EAAKL,KAAKuD,EAAQjE,KAAKV,GAAM8B;;IAC/B,OAAOL;AACT;;;AAGK,MAAMR,UAAUA,CAACa,GAAwBlC;EAC9CkC,EAAS7B,UAAkB,IAARL;EACnBkC,EAASvC,UAAkB,IAARK;EACnBkC,EAASvC,YAAYuC,EAASvC,UAAU;;;AAYnC,MAAM4B,YAAYA,CACvBnB,GACA8B,GACAvC,IAASuC,EAASvC;EAElB,MAAMuE,IAAQ,IAAIpC,WAChB1B,EAAK2B,QACL3B,EAAK4B,aAAaE,EAAS7B,QAC3BV;EAEF0B,QAAQa,GAAUvC;EAClB,OAAOuE;;;ACnXT,MAAMiB,IAAS;;AAER,MAAMC,IAA8B;EACzCpF,OAAMoF,KACGrF,EAAKC,MAAMoF,EAASrF,QAAQ;EAErCI,KAAAA,CAAMC,GAAMC,GAAQ+E;IAClB,IAAIC,IAASD,EAASE,SAAStG,EAAYuG;IAC3C,IAAIH,EAASI;MAAIH,KAAUF;;IAC3B9E,IAASN,EAAKI,MAAMC,GAAMC,GAAQ+E,EAASrF;IAC3CK,EAAK0D,UAAUzD,GAAQ+E,EAASK;IAChCrF,EAAK0D,UAAUzD,IAAS,GAAGgF;IAE3B,OADAhF,KAAU;AAEZ;EACAS,IAAAA,CAAKV,GAAM8B;IACT,MAAMwD,IAAQ3F,EAAKe,KAAKV,GAAM8B;IAC9B,MAAMuD,IAAOrF,EAAKuB,UAAUO,EAAS7B;IACrC,IAAIgF,IAASjF,EAAKuB,UAAUO,EAAS7B,SAAS,MAAMrB,EAAY2G;IAChE,IAAIH,KAAK;IACT,IAAIH,MAAWrG,EAAY2G,OAAON,IAASF,GAAQ;MACjDE,MAAU;MACVG,KAAK;AACP;IACAnE,QAAQa,GAAU;IAClB,OAAO;MACLnC,MAAM2F;MACND;MACAH,OAAOD;MACPG;;AAEJ;;;AC9BF,IAAkBI,aAAAA;EAAAA,EAAAA,EAAM,KAAA,KAAA;EAANA,EAAAA,EAAM,KAAA,KAAA;EAAA,OAANA;AAAM,EAAA;;AA2CjB,MAAMC,IAAkCf,aAAa;EAC1D9E,OAAM8F,KACG9F,EAAMA,MAAM8F,EAAOjE;EAE5B1B,OAAKA,CAACC,GAAMC,GAAQyF,MACX9F,EAAMG,MAAMC,GAAMC,GAAQyF,EAAOjE;EAE1Cf,MAAIA,CAACV,GAAM8B,OACF;IACLrC,MAAMX,EAAQ6G;IACdlE,MAAM7B,EAAMc,KAAKV,GAAM8B;;;;AAM7B,MAAM8D,IAAQ;;AAEd,MAAMC,IAAS,IAAIC,OAAO,IADZ,MAAMF,WAAeA;;AAK5B,MAAMG,IAA4CrB,aAAa;EACpE9E,OAAM8F,KAEGtD,KAAKE,MADeoD,EAAOM,sBAAsB,KAClB,KAAK;EAE7CjG,KAAAA,CAAMC,GAAMC,GAAQyF;IAClB,MAAMM,IAAqBN,EAAOM,sBAAsB;IACxD,MAAMC,IAAoBP,EAAOO,qBAAqB;IACtD,MAAMC,IAASR,EAAOQ,WAVKL,EAAOM,KAUMT,EAAO5C,MAAM0C,EAAOY,KAAKZ,EAAOa;IACxE,MAAMC,IAAalE,KAAKE,KAAK0D,IAAqB;IAClDhG,EAAK0D,UAAUzD,GAAQiG;IACvBlG,EAAKS,SAASR,IAAS,GAAG+F;IAC1BhG,EAAKS,SAASR,IAAS,GAAGgG;IAC1BhG,KAAU;IACV,MAAMsG,IF+QsBC,EAC9B7B,GACA8B;MAEA,MAAM9E,IAAS,IAAI+E,YAAY/B,EAAQ/E,MAAM6G;MAC7C,MAAME,IAAYhC,EAAQ5E,MAAM,IAAI6G,SAASjF,IAAS,GAAG8E;MACzD,OAAO,IAAI/E,WAAWC,GAAQ,GAAGgF;MErRdH,CACfN,MAAWV,EAAOY,KAAKvD,IAAOc,GAC9B+B,EAAO5C;IAET,KAAK,IAAIvC,IAAU,GAAGA,IAAU+F,GAAY/F;MAC1CP,EAAKS,SAASR,KAAUsG,EAAShG;;IACnC,OAAON;AACT;EACAS,IAAAA,CAAKV,GAAM8B;IACT,MAAMoE,IAASlG,EAAKuB,UAAUO,EAAS7B;IACvC,MAAM+F,IAAqBhG,EAAKgB,SAASc,EAAS7B,SAAS;IAC3D,MAAMgG,IAAoBjG,EAAKgB,SAASc,EAAS7B,SAAS;IAC1DgB,QAAQa,GAAU;IAClB,OAAO;MACLrC,MAAMX,EAAQ+H;MACdX;MACAF;MACAC;MACAnD,IACEoD,MAAWV,EAAOY,KACdvD,EAAKnC,KAAKV,GAAM8B,KAChB6B,EAAKjD,KAAKV,GAAM8B;;AAE1B;;;AAGK,MAAMgF,IAAsCpC,aAAa;EAC9D9E,OAAM8F,KACGA,EAAOqB,UAAU,IAAI;EAE9BhH,KAAAA,CAAMC,GAAMC,GAAQyF;IAClB,IAAIA,EAAOqB,SAAS;MAClB/G,EAAK0D,UAAUzD,GAAQyF,EAAOqB;MAC9B9G,KAAU;AACZ;IACA,OAAOA;AACT;EACAS,IAAAA,CAAKV,GAAM8B;IACT,IAAIA,EAASvC,QAAQ;MACnB,MAAMwH,IAAU/G,EAAKuB,UAAUO,EAAS7B;MACxCgB,QAAQa,GAAU;MAClB,OAAO;QAAErC,MAAMX,EAAQkI;QAAeD;;AACxC;MACE,OAAO;QAAEtH,MAAMX,EAAQkI;QAAeD,cAAS7C;;;AAEnD;;;AAGK,MAAM+C,IAAkCvC,aAAa;EAC1D9E,OAAM8F,KACGA,EAAOnG,UAAU;EAE1BQ,OAAKA,CAACmH,GAAOjH,GAAQyF,MACZzF,KAAUyF,EAAOnG,UAAU;EAEpCmB,IAAAA,CAAKwG,GAAOpF;IACV,OAAMvC,QAAEA,KAAWuC;IACnBb,QAAQa,GAAUvC;IAClB,OAAO;MAAEE,MAAMX,EAAQqI;MAAS5H;;AAClC;;;AAGK,MAAM6H,IAA0B1C,aAAa;EAClD9E,OAAM8F,KACwB,IAArBA,EAAO2B,KAAK9H;EAErBQ,KAAAA,CAAMC,GAAMC,GAAQyF;IAClB,KAAK,IAAIlF,IAAM,GAAGA,IAAMkF,EAAO2B,KAAK9H,QAAQiB,KAAO;MACjDR,EAAK0D,UAAUzD,GAAQyF,EAAO2B,KAAK7G;MACnCP,KAAU;AACZ;IACA,OAAOA;AACT;EACAS,IAAAA,CAAKV,GAAM8B;IACT,OAAM7B,QAAEA,GAAMV,QAAEA,KAAWuC;IAC3B,MAAMuF,IAAiB;IACvB,OAAOvF,EAAS7B,SAASA,IAASV,GAAQ;MACxC8H,EAAKjG,KAAKpB,EAAKuB,UAAUO,EAAS7B;MAClCgB,QAAQa,GAAU;AACpB;IACA,OAAO;MACLrC,MAAMX,EAAQwI;MACdD;;AAEJ;;;AAGF,MAAME,eAAgB7B,OACjBA,EAAsBjE;;AAEpB,MAAMiE,IAA6B;EACxC9F,KAAAA,CAAM8F;IACJ,IAAI6B,aAAa7B;MACf,OAAOD,EAAW7F,MAAM8F,KAAU;;IAEpC,QAAQA,EAAOjG;KACb,KAAKX,EAAQ+H;MACX,OAAOd,EAAgBnG,MAAM8F,KAAU;;KACzC,KAAK5G,EAAQkI;MACX,OAAOF,EAAalH,MAAM8F,KAAU;;KACtC,KAAK5G,EAAQqI;MACX,OAAOF,EAAWrH,MAAM8F,KAAU;;KACpC,KAAK5G,EAAQwI;MACX,OAAOF,EAAOxH,MAAM8F,KAAU;;AAEpC;EACA3F,KAAAA,CAAMC,GAAMC,GAAQyF;IAClB1F,EAAK0D,UAAUzD,GAAQyF,EAAOjG;IAC9BQ,KAAU;IACV,IAAIsH,aAAa7B;MACf,OAAOD,EAAW1F,MAAMC,GAAMC,GAAQyF;;IAExC,QAAQA,EAAOjG;KACb,KAAKX,EAAQ+H;MACX,OAAOd,EAAgBhG,MAAMC,GAAMC,GAAQyF;;KAC7C,KAAK5G,EAAQkI;MACX,OAAOF,EAAa/G,MAAMC,GAAMC,GAAQyF;;KAC1C,KAAK5G,EAAQqI;MACX,OAAOF,EAAWlH,MAAMC,GAAMC,GAAQyF;;KACxC,KAAK5G,EAAQwI;MACX,OAAOF,EAAOrH,MAAMC,GAAMC,GAAQyF;;AAExC;EACAhF,IAAAA,CAAKV,GAAM8B;IACT,MAAMrC,IAAOO,EAAKuB,UAAUO,EAAS7B;IACrCgB,QAAQa,GAAU;IAClB,QAAQrC;KACN,KAAKX,EAAQ+H;MACX,OAAOd,EAAgBrF,KAAKV,GAAM8B;;KACpC,KAAKhD,EAAQkI;MACX,OAAOF,EAAapG,KAAKV,GAAM8B;;KACjC,KAAKhD,EAAQqI;MACX,OAAOF,EAAWvG,KAAKV,GAAM8B;;KAC/B,KAAKhD,EAAQwI;MACX,OAAOF,EAAO1G,KAAKV,GAAM8B;;KAC3B;MACE,MAAM0F,IAAM/B,EAAW/E,KAAKV,GAAM8B;MAClC0F,EAAI/H,OAAOA;MACX,OAAO+H;;AAEb;;;ACzNF,IAAkBC,aAAAA;EAAAA,EAAAA,EAAY,YAAA,KAAA;EAAZA,EAAAA,EAAY,OAAA,KAAA;EAAZA,EAAAA,EAAY,gBAAA,KAAA;EAAZA,EAAAA,EAAY,OAAA,KAAA;EAAZA,EAAAA,EAAY,WAAA,KAAA;EAAZA,EAAAA,EAAY,YAAA,KAAA;EAAZA,EAAAA,EAAY,WAAA,KAAA;EAAZA,EAAAA,EAAY,UAAA,KAAA;EAAZA,EAAAA,EAAY,OAAA,SAAA;EAAA,OAAZA;AAAY,EAAA;;AAwB9B,MAAMC,IACJhD,aAAaI,MAAMtB;;AACrB,MAAMmE,IAAejD,aAAaI,MAAM9C;;AACxC,MAAM4F,IAAelD,aAAalB;;AAClC,MAAMqE,IAAmBnD,aAAaI,MAAMjC;;AAC5C,MAAMiF,IAAmBpD,aAAaI,MAAMnB;;AAC5C,MAAMoE,IAAgBrD,aAAa9E;;AAE5B,MAAMoI,IAAgC;EAC3CpI,KAAAA,CAAMqI;IACJ,IAAI3I,IAAa;IACjB,IAAwB,QAApB2I,EAAOC;MACT5I,KAAcoI,EAAkB9H,MAAMqI,EAAOC,aAAa;;IAC5D,IAAmB,QAAfD,EAAOE;MAAc7I,KAAcqI,EAAa/H,MAAMqI,EAAOE,QAAQ;;IACzE,IAAIF,EAAO;MAAoB3I,KAAc;;IAC7C,IAAmB,QAAf2I,EAAOG;MAAc9I,KAAcsI,EAAahI,MAAMqI,EAAOG,QAAQ;;IACzE,IAAIH,EAAOI;MACT/I,KAAcuI,EAAiBjI,MAAMqI,EAAOI,YAAY;;IAC1D,IAAIJ,EAAOK;MACThJ,KAAcwI,EAAiBlI,MAAMqI,EAAOK,YAAY;;IAC1D,IAAIL,EAAOM;MACTjJ,KAAcyI,EAAcnI,MAAMqI,EAAOM,aAAa;;IACxD,IAAIN,EAAOO;MAASlJ,KAAcyI,EAAcnI,MAAMqI,EAAOO,WAAW;;IACxE,IAAIP,EAAOQ;MAAMnJ,KAAcyI,EAAcnI,MAAMqI,EAAOQ,QAAQ;;IAClE,OAAOnJ;AACT;EACAS,KAAAA,CAAMC,GAAMC,GAAQgI;IAClB,IAAwB,QAApBA,EAAOC,WAAmB;MAC5BlI,EAAK0D,UAAUzD,GAAQwH,EAAaiB;MACpCzI,IAASyH,EAAkB3H,MAAMC,GAAMC,IAAS,GAAGgI,EAAOC;AAC5D;IACA,IAAmB,QAAfD,EAAOE,MAAc;MACvBnI,EAAK0D,UAAUzD,GAAQwH,EAAakB;MACpC1I,IAAS0H,EAAa5H,MAAMC,GAAMC,IAAS,GAAGgI,EAAOE;AACvD;IACA,IAAIF,EAAO,oBAAoB;MAC7BjI,EAAK0D,UAAUzD,GAAQwH,EAAamB;MACpC5I,EAAK0D,UAAUzD,IAAS,GAAG;MAC3BA,KAAU;AACZ;IACA,IAAmB,QAAfgI,EAAOG,MAAc;MACvBpI,EAAK0D,UAAUzD,GAAQwH,EAAaoB;MACpC5I,IAAS2H,EAAa7H,MAAMC,GAAMC,IAAS,GAAGgI,EAAOG;AACvD;IACA,IAAIH,EAAOI,UAAU;MACnBrI,EAAK0D,UAAUzD,GAAQwH,EAAaqB;MACpC7I,IAAS4H,EAAiB9H,MAAMC,GAAMC,IAAS,GAAGgI,EAAOI;AAC3D;IACA,IAAIJ,EAAOK,UAAU;MACnBtI,EAAK0D,UAAUzD,GAAQwH,EAAasB;MACpC9I,IAAS6H,EAAiB/H,MAAMC,GAAMC,IAAS,GAAGgI,EAAOK;AAC3D;IACA,IAAIL,EAAOM,WAAW;MACpBvI,EAAK0D,UAAUzD,GAAQwH,EAAauB;MACpC/I,IAAS8H,EAAchI,MAAMC,GAAMC,IAAS,GAAGgI,EAAOM;AACxD;IACA,IAAIN,EAAOO,SAAS;MAClBxI,EAAK0D,UAAUzD,GAAQwH,EAAawB;MACpChJ,IAAS8H,EAAchI,MAAMC,GAAMC,IAAS,GAAGgI,EAAOO;AACxD;IACA,IAAIP,EAAOQ,MAAM;MACfzI,EAAK0D,UAAUzD,GAAQwH,EAAayB;MACpCjJ,IAAS8H,EAAchI,MAAMC,GAAMC,IAAS,GAAGgI,EAAOQ;AACxD;IACA,OAAOxI;AACT;EACAS,IAAAA,CAAKV,GAAM8B;IACT,OAAMvC,QAAEA,GAAMU,QAAEA,KAAW6B;IAC3B,MAAMmG,IAAoB;MACxBC,gBAAWhE;MACXiE,WAAMjE;MACN,oBAAmB;MACnBkE,WAAMlE;MACNmE,eAAUnE;MACVoE,eAAUpE;MACVqE,gBAAWrE;MACXsE,cAAStE;MACTuE,WAAMvE;;IAER,OAAOpC,EAAS7B,SAASA,IAASV,GAAQ;MACxC,MAAME,IAAOO,EAAKuB,UAAUO,EAAS7B;MAGrCgB,QAAQa,GAAU;MAClB,QAAQrC;OACN,KAAKgI,EAAaiB;QAChBT,EAAOC,YAAYR,EAAkBhH,KAAKV,GAAM8B;QAChD;;OACF,KAAK2F,EAAakB;QAChBV,EAAOE,OAAOR,EAAajH,KAAKV,GAAM8B;QACtC;;OACF,KAAK2F,EAAamB;QAChBX,EAAO,sBAAqB;QAC5BhH,QAAQa,GAAU;QAClB;;OACF,KAAK2F,EAAaoB;QAChBZ,EAAOG,OAAOR,EAAalH,KAAKV,GAAM8B;QACtC;;OACF,KAAK2F,EAAaqB;QAChBb,EAAOI,WAAWR,EAAiBnH,KAAKV,GAAM8B;QAC9C;;OACF,KAAK2F,EAAasB;QAChBd,EAAOK,WAAWR,EAAiBpH,KAAKV,GAAM8B;QAC9C;;OACF,KAAK2F,EAAauB;QAChBf,EAAOM,YAAYR,EAAcrH,KAAKV,GAAM8B;QAC5C;;OACF,KAAK2F,EAAawB;QAChBhB,EAAOO,UAAUvJ,EAAYoC,OAC3B0G,EAAcrH,KAAKV,GAAM8B;QAE3B;;OACF,KAAK2F,EAAayB;QAChBjB,EAAOQ,OAAOV,EAAcrH,KAAKV,GAAM8B;QACvC;;OACF;QAEEiG,EAAcrH,KAAKV,GAAM8B;;AAE/B;IACA,OAAOmG;AACT;;;ACvIF,MAAMkB,IAAczE,aAAa9E;;AAOjC,MAAMwJ,IAAa1E,aAAa/E;;AAOhC,MAAM0J,IAAa3E,aAAa7B;;AAOhC,MAAMyG,IAAa5E,aAAaf;;AAOzB,MAAM4F,IAA+B7E,aAAaI,MAAM9C;;AAcxD,MAAMwH,IAA8B9E,aAAa;EACtD9E,OAAM6B,KACG9B,EAAKC,MAAM6B,EAAKgI,UAAU;EAEnC1J,KAAAA,CAAMC,GAAMC,GAAQwB;IAClBzB,EAAK0D,UAAUzD,GAAQwB,EAAKiI,YAAY;IACxC1J,EAAK0D,UAAUzD,IAAS,GAAGwB,EAAKkI,UAAU;IAC1C3J,EAAK0D,UAAUzD,IAAS,GAAGwB,EAAK2G,QAAQ;IACxC,OAAOzI,EAAKI,MAAMC,GAAMC,IAAS,GAAGwB,EAAKgI;AAC3C;EACA/I,IAAAA,CAAKV,GAAM8B;IACT,MAAML,IAAgB;MAAEiI,UAAU;MAAGC,QAAQ;MAAGvB,MAAM;MAAGqB,QAAQ;;IACjEhI,EAAKiI,WAAW1J,EAAKuB,UAAUO,EAAS7B;IACxCwB,EAAKkI,SAAS3J,EAAKuB,UAAUO,EAAS7B,SAAS;IAC/CwB,EAAK2G,OAAOpI,EAAKuB,UAAUO,EAAS7B,SAAS;IAC7CgB,QAAQa,GAAU;IAClBL,EAAKgI,SAAS9J,EAAKe,KAAKV,GAAM8B;IAC9B,OAAOL;AACT;;;AAaK,MAAMmI,IAAkClF,aAAa;EAC1D9E,OAAM6B,KACGO,EAAOpC,MAAM6B,EAAKoI,OAAO7H,EAAOpC,MAAM6B,EAAKqI;EAEpD/J,KAAAA,CAAMC,GAAMC,GAAQwB;IAClBxB,IAAS+B,EAAOjC,MAAMC,GAAMC,GAAQwB,EAAKoI;IAEzC,OADA5J,IAAS+B,EAAOjC,MAAMC,GAAMC,GAAQwB,EAAKqI;AAE3C;EACApJ,MAAIA,CAACV,GAAM8B,OACF;IACL+H,KAAK7H,EAAOtB,KAAKV,GAAM8B;IACvBgI,IAAI9H,EAAOtB,KAAKV,GAAM8B;;;;AAmB5B,MAAMiI,WAAYtD;EAChB,QAAQA;GACN,KAAK;GACL,KAAK;GACL,KAAK;IACH,OAAOA;;GACT;IACE,OAAO;;;;AAIN,MAAMuD,IAA8BtF,aAAa;EACtD9E,OAAM6B,KACGO,EAAOpC,MAAM6B,EAAKwI,OAAOrK,EAAMA,MAAM6B,EAAKyI,SAAS;EAE5DnK,KAAAA,CAAMC,GAAMC,GAAQwB;IAClB,IAAI0I,IAAQ1I,EAAK0I,SAAS;IAC1B,IAAI1I,EAAK2I;MAAgBD,KAnBL;;IAoBpBnK,EAAKS,SAASR,GAAQkK;IACtBlK,IAAS+B,EAAOjC,MAAMC,GAAMC,IAAS,GAAGwB,EAAKwI;IAE7C,OADAhK,IAASL,EAAMG,MAAMC,GAAMC,GAAQwB,EAAKyI;AAE1C;EACAxJ,IAAAA,CAAKV,GAAM8B;IACT,MAAMqI,IAAQnK,EAAKgB,SAASc,EAAS7B;IACrCgB,QAAQa,GAAU;IAClB,OAAO;MACLqI;MACAF,KAAKF,SAAS/H,EAAOtB,KAAKV,GAAM8B;MAChCoI,OAAOtK,EAAMc,KAAKV,GAAM8B;MACxBsI,mBAhCkB,MAgCCD;;AAEvB;;;AAkBK,MAAME,IAA8B3F,aAAa;EACtD9E,OAAM6B,KACG9B,EAAKC,MAAM6B,EAAK6I,SAAS3K,EAAKC,MAAM6B,EAAK8I,SAAS;EAE3DxK,KAAAA,CAAMC,GAAMC,GAAQwB;IAClBxB,IAASN,EAAKI,MAAMC,GAAMC,GAAQwB,EAAK6I;IACvCrK,IAASN,EAAKI,MAAMC,GAAMC,GAAQwB,EAAK8I;IACvCvK,EAAKwK,UAAUvK,GAAQwB,EAAKgJ,UAAU;IACtCzK,EAAKwK,UAAUvK,IAAS,GAAGwB,EAAKiJ,WAAW;IAC3C1K,EAAKwK,UAAUvK,IAAS,GAAGwB,EAAKkJ,SAAS;IACzC3K,EAAKwK,UAAUvK,IAAS,IAAIwB,EAAKmJ,UAAU;IAC3C5K,EAAKwK,UAAUvK,IAAS,IAAIwB,EAAKoJ,WAAW;IAC5C,OAAO5K,IAAS;AAClB;EACAS,IAAAA,CAAKV,GAAM8B;IACT,MAAML,IAAgB;MACpB6I,OAAO3K,EAAKe,KAAKV,GAAM8B;MACvByI,OAAO5K,EAAKe,KAAKV,GAAM8B;MACvB2I,QAAQzK,EAAK8K,UAAUhJ,EAAS7B;MAChCyK,SAAS1K,EAAK8K,UAAUhJ,EAAS7B,SAAS;MAC1C0K,OAAO3K,EAAK8K,UAAUhJ,EAAS7B,SAAS;MACxC2K,QAAQ5K,EAAK8K,UAAUhJ,EAAS7B,SAAS;MACzC4K,SAAS7K,EAAK8K,UAAUhJ,EAAS7B,SAAS;;IAE5C6B,EAAS7B,UAAU;IACnB6B,EAASvC,UAAU;IACnB,OAAOkC;AACT;;;AAaK,MAAMsJ,IAA4BrG,aAAa;EACpD9E,OAAM6B,KACG9B,EAAKC,MAAM6B,EAAKuJ,YAAY;EAErCjL,KAAAA,CAAMC,GAAMC,GAAQwB;IAClBzB,EAAK0D,UAAUzD,GAAQwB,EAAKwJ,cAAc;IAC1C,OAAOtL,EAAKI,MAAMC,GAAMC,IAAS,GAAGwB,EAAKuJ;AAC3C;EACAtK,IAAAA,CAAKV,GAAM8B;IACT,MAAML,IAAe;MACnBwJ,YAAYjL,EAAKuB,UAAUO,EAAS7B;MACpC+K,UAAU;;IAEZ/J,QAAQa,GAAU;IAClBL,EAAKuJ,WAAWrL,EAAKe,KAAKV,GAAM8B;IAChC,OAAOL;AACT;;;AAcK,MAAMyJ,IAAoCxG,aAAa;EAC5D9E,OAAM6B,KACG7B,EAAMA,MAAM6B,EAAKgC,OAAO;EAEjC1D,KAAAA,CAAMC,GAAMC,GAAQwB;IAElBzB,EAAK0D,UAAUzD,GAAQwB,EAAK0I;IAC5BnK,EAAKS,SAASR,IAAS,GAFC;IAGxBD,EAAKS,SAASR,IAAS,GAAGwB,EAAK0J;IAC/B,OAAOvL,EAAMG,MAAMC,GAAMC,IAAS,GAAGwB,EAAKgC;AAC5C;EACA/C,IAAAA,CAAKV,GAAM8B;IACT,MAAMqI,IAAQnK,EAAKuB,UAAUO,EAAS7B;IACtC,MAAMkL,IAAYnL,EAAKgB,SAASc,EAAS7B,SAAS;IAClDgB,QAAQa,GAAU;IAClB,OAAO;MACLqI;MACAgB;MACA1H,KAAK7D,EAAMc,KAAKV,GAAM8B;;AAE1B;;;AAoBK,MAAMsJ,IAAkC1G,aAAa;EAC1D9E,OAAM6B,KACG,KAAK9B,EAAKC,MAAM6B,EAAK4J,eAAezL,EAAMA,MAAM6B,EAAK6J;EAE9DvL,KAAAA,CAAMC,GAAMC,GAAQwB;IAClBzB,EAAK0D,UAAUzD,GAAQwB,EAAK8J;IAC5BvL,EAAKS,SAASR,IAAS,GAAGwB,EAAK0J;IAC/BnL,EAAKS,SAASR,IAAS,GAAGwB,EAAKb;IAC/BZ,EAAKwK,UAAUvK,IAAS,GAAGwB,EAAK+J;IAChCxL,EAAKwK,UAAUvK,IAAS,GAAGwB,EAAKgK;IAChCzL,EAAKwK,UAAUvK,IAAS,IAAIwB,EAAKiK;IACjC1L,EAAK0D,UAAUzD,IAAS,IAAIwB,EAAKkK;IACjC1L,IAASN,EAAKI,MAAMC,GAAMC,IAAS,IAAIwB,EAAK4J;IAE5C,OADApL,IAASL,EAAMG,MAAMC,GAAMC,GAAQwB,EAAK6J;AAE1C;EACA5K,IAAAA,CAAKV,GAAM8B;IACT,MAAMyJ,IAAcvL,EAAKuB,UAAUO,EAAS7B;IAC5C,MAAMkL,IAAYnL,EAAKgB,SAASc,EAAS7B,SAAS;IAClD,MAAMW,IAASZ,EAAKgB,SAASc,EAAS7B,SAAS;IAC/C,MAAMuL,IAAcxL,EAAK8K,UAAUhJ,EAAS7B,SAAS;IACrD,MAAMwL,IAAazL,EAAK8K,UAAUhJ,EAAS7B,SAAS;IACpD,MAAMyL,IAAY1L,EAAK8K,UAAUhJ,EAAS7B,SAAS;IACnD,MAAM0L,IAAS3L,EAAKuB,UAAUO,EAAS7B,SAAS;IAChDgB,QAAQa,GAAU;IAClB,OAAO;MACLyJ;MACAJ;MACAvK;MACA4K;MACAC;MACAC;MACAC;MACAN,aAAa1L,EAAKe,KAAKV,GAAM8B;MAC7BwJ,WAAW1L,EAAMc,KAAKV,GAAM8B;;AAEhC;;;AAaK,MAAM8J,IAA4BlH,aAAa;EACpD9E,OAAM6B,KACG9B,EAAKC,MAAM6B,EAAKoK,QAAQlM,EAAKC,MAAM6B,EAAKqK;EAEjD/L,KAAAA,CAAMC,GAAMC,GAAQwB;IAClBxB,IAASN,EAAKI,MAAMC,GAAMC,GAAQwB,EAAKoK;IAEvC,OADA5L,IAASN,EAAKI,MAAMC,GAAMC,GAAQwB,EAAKqK;AAEzC;EACApL,MAAIA,CAACV,GAAM8B,OACF;IACL+J,MAAMlM,EAAKe,KAAKV,GAAM8B;IACtBgK,KAAKnM,EAAKe,KAAKV,GAAM8B;;;;AAepB,MAAMiK,IAAgCrH,aAAa;EACxD9E,OAAM6B,KACG9B,EAAKC,MAAM6B,EAAKuK,cAAc/J,EAAWrC,MAAM6B,EAAKwK;EAE7DlM,KAAAA,CAAMC,GAAMC,GAAQwB;IAClBxB,IAASN,EAAKI,MAAMC,GAAMC,GAAQwB,EAAKuK;IAEvC,OADA/L,IAASgC,EAAWlC,MAAMC,GAAMC,GAAQwB,EAAKwK;AAE/C;EACAvL,MAAIA,CAACV,GAAM8B,OACF;IACLkK,YAAYrM,EAAKe,KAAKV,GAAM8B;IAC5BmK,SAAShK,EAAWvB,KAAKV,GAAM8B;;;;AAmB9B,MAAMoK,IAAkCxH,aAAa;EAC1D9E,OAAM6B,KAEFM,EAAOnC,MAAM6B,EAAK0K,QAClBpK,EAAOnC,MAAM6B,EAAKuK,cAClB/J,EAAWrC,MAAM6B,EAAKwK,WACtB;EAGJlM,KAAAA,CAAMC,GAAMC,GAAQwB;IAClBzB,EAAKS,SAASR,GAAQwB,EAAK0J;IAC3BnL,EAAKS,SAASR,IAAS,GAAGwB,EAAK0I;IAC/BnK,EAAK0D,UAAUzD,IAAS,GAAGwB,EAAK2K;IAChCnM,IAAS8B,EAAOhC,MAAMC,GAAMC,IAAS,GAAGwB,EAAK0K;IAC7ClM,IAAS8B,EAAOhC,MAAMC,GAAMC,GAAQwB,EAAKuK;IAEzC,OADA/L,IAASgC,EAAWlC,MAAMC,GAAMC,GAAQwB,EAAKwK;AAE/C;EACAvL,IAAAA,CAAKV,GAAM8B;IACT,MAAMqJ,IAAYnL,EAAKgB,SAASc,EAAS7B;IACzC,MAAMkK,IAAQnK,EAAKgB,SAASc,EAAS7B,SAAS;IAC9C,MAAMmM,IAAapM,EAAKuB,UAAUO,EAAS7B,SAAS;IACpDgB,QAAQa,GAAU;IAClB,OAAO;MACLqJ;MACAhB;MACAiC;MACAD,MAAMpK,EAAOrB,KAAKV,GAAM8B;MACxBkK,YAAYjK,EAAOrB,KAAKV,GAAM8B;MAC9BmK,SAAShK,EAAWvB,KAAKV,GAAM8B;;AAEnC;;;AAcK,MAAMuK,IAAkC3H,aAAa;EAC1D9E,OAAM6B,KACG7B,EAAMA,MAAM6B,EAAK6K,eAAe;EAEzCvM,KAAAA,CAAMC,GAAMC,GAAQwB;IAClBzB,EAAKS,SAASR,GAAQwB,EAAK0J;IAC3BnL,EAAKS,SAASR,IAAS,GAAGwB,EAAK8K;IAC/B,OAAO3M,EAAMG,MAAMC,GAAMC,IAAS,GAAGwB,EAAK6K;AAC5C;EACA5L,IAAAA,CAAKV,GAAM8B;IACT,MAAMqJ,IAAYnL,EAAKgB,SAASc,EAAS7B;IACzC,MAAMsM,IAAOvM,EAAKgB,SAASc,EAAS7B,SAAS;IAC7CgB,QAAQa,GAAU;IAClB,OAAO;MACLqJ;MACAoB;MACAD,aAAa1M,EAAMc,KAAKV,GAAM8B;;AAElC;;;AAeK,MAAM0K,IAA4B9H,aAAa;EACpD9E,OAAM6B,KACG7B,EAAMA,MAAM6B,EAAKgL,UAAU;EAEpC1M,KAAAA,CAAMC,GAAMC,GAAQwB;IAClBzB,EAAK0D,UAAUzD,GAAQwB,EAAKkK;IAC5B3L,EAAKS,SAASR,IAAS,GAAGwB,EAAK0J;IAC/BnL,EAAKS,SAASR,IAAS,GAAGwB,EAAKiL;IAE/B,OADAzM,IAASL,EAAMG,MAAMC,GAAMC,IAAS,GAAGwB,EAAKgL;AAE9C;EACA/L,IAAAA,CAAKV,GAAM8B;IACT,MAAM6J,IAAS3L,EAAKuB,UAAUO,EAAS7B;IACvC,MAAMkL,IAAYnL,EAAKgB,SAASc,EAAS7B,SAAS;IAClD,MAAMyM,IAAa1M,EAAKgB,SAASc,EAAS7B,SAAS;IACnDgB,QAAQa,GAAU;IAClB,OAAO;MACL6J;MACAR;MACAuB;MACAD,QAAQ7M,EAAMc,KAAKV,GAAM8B;;AAE7B;;;AAiBK,MAAM6K,IAAkCjI,aAAa;EAC1D9E,OAAM6B,KAEFO,EAAOpC,MAAM6B,EAAK0I,SAClBnI,EAAOpC,MAAM6B,EAAKmL,YAClB5K,EAAOpC,MAAM6B,EAAKoL,UAClBlN,EAAKC,MAAM6B,EAAKqL,eAChB;EAGJ/M,KAAAA,CAAMC,GAAMC,GAAQwB;IAClBzB,EAAK0D,UAAUzD,GAAQwB,EAAKsL;IAC5B/M,EAAK0D,UAAUzD,IAAS,GAAGwB,EAAKwJ;IAChChL,IAAS+B,EAAOjC,MAAMC,GAAMC,IAAS,GAAGwB,EAAK0I;IAC7ClK,IAAS+B,EAAOjC,MAAMC,GAAMC,GAAQwB,EAAKmL;IACzC3M,IAAS+B,EAAOjC,MAAMC,GAAMC,GAAQwB,EAAKoL;IAEzC,OADA5M,IAASN,EAAKI,MAAMC,GAAMC,GAAQwB,EAAKqL;AAEzC;EACApM,IAAAA,CAAKV,GAAM8B;IACT,MAAMiL,IAAQ/M,EAAKuB,UAAUO,EAAS7B;IACtC,MAAMgL,IAAajL,EAAKuB,UAAUO,EAAS7B,SAAS;IACpDgB,QAAQa,GAAU;IAClB,OAAO;MACLiL;MACA9B;MACAd,OAAOnI,EAAOtB,KAAKV,GAAM8B;MACzB8K,UAAU5K,EAAOtB,KAAKV,GAAM8B;MAC5B+K,QAAQ7K,EAAOtB,KAAKV,GAAM8B;MAC1BgL,aAAanN,EAAKe,KAAKV,GAAM8B;;AAEjC;;;AAeK,MAAMkL,IAAgCtI,aAAa;EACxD9E,OAAM6B,KACG7B,EAAMA,MAAM6B,EAAKwL,eAAe;EAEzClN,KAAAA,CAAMC,GAAMC,GAAQwB;IAClBzB,EAAKS,SAASR,GAAQwB,EAAKyL;IAC3BlN,EAAKS,SAASR,IAAS,GAAGwB,EAAK0L;IAC/BnN,EAAKS,SAASR,IAAS,GAAGwB,EAAK2L;IAC/B,OAAOxN,EAAMG,MAAMC,GAAMC,IAAS,GAAGwB,EAAKwL;AAC5C;EACAvM,IAAAA,CAAKV,GAAM8B;IACT,MAAMoL,IAAQlN,EAAKgB,SAASc,EAAS7B;IACrC,MAAMkN,IAAWnN,EAAKgB,SAASc,EAAS7B,SAAS;IACjD,MAAMmN,IAAepN,EAAKgB,SAASc,EAAS7B,SAAS;IACrDgB,QAAQa,GAAU;IAClB,OAAO;MACLoL;MACAC;MACAC;MACAH,aAAarN,EAAMc,KAAKV,GAAM8B;;AAElC;;;AAmBK,MAAMuL,KAAgC3I,aAAa;EACxD9E,OAAM6B,KACG9B,EAAKC,MAAM6B,EAAK9B,QAAQqI,EAAUpI,MAAM6B,EAAKwG,UAAU;EAEhElI,KAAAA,CAAMC,GAAMC,GAAQwB;IAClBzB,EAAK0D,UAAUzD,GAAQwB,EAAKiI,YAAY;IACxCzJ,IAASN,EAAKI,MAAMC,GAAMC,IAAS,GAAGwB,EAAK9B;IAE3C,OADAM,IAAS+H,EAAUjI,MAAMC,GAAMC,GAAQwB,EAAKwG;AAE9C;EACAvH,IAAAA,CAAKV,GAAM8B;IACT,MAAM4H,IAAW1J,EAAKuB,UAAUO,EAAS7B;IACzCgB,QAAQa,GAAU;IAClB,OAAO;MACLnC,MAAMA,EAAKe,KAAKV,GAAM8B;MACtB4H;MACAzB,QAAQD,EAAUtH,KAAKV,GAAM8B;;AAEjC;;;AAaK,MAAMwL,KAAkC5I,aAAaI,MAAMY;;AA2ElE,MAAM6H,KAAa;;AAEZ,MAAMC,KAA0B;EACrC5N,KAAAA,CAAM4N;IACJ,MAAMlO,IACJ,IAAIK,EAAKC,MAAM4N,EAAOnI,SAAS1G,EAAW8O,MAAM,MAAMD,EAAO7N;IAC/D,QAAQ6N,EAAOnI;KACb,KAAK1G,EAAW+O;MACd,OAAOpO,IAAa+J,EAAWzJ,MAAM4N,EAAO/L;;KAC9C,KAAK9C,EAAWgP;MACd,OAAOrO,IAAa8J,EAAWxJ,MAAM4N,EAAO/L;;KAC9C,KAAK9C,EAAWiP;MACd,OAAOtO,IAAa+K,EAAUzK,MAAM4N,EAAO/L;;KAC7C,KAAK9C,EAAWkP;MACd,OAAOvO,IAAasK,EAAYhK,MAAM4N,EAAO/L;;KAC/C,KAAK9C,EAAWmP;MACd,OAAOxO,IAAayL,EAASnL,MAAM4N,EAAO/L;;KAC5C,KAAK9C,EAAWoP;MACd,OAAOzO,IAAaiK,EAAU3J,MAAM4N,EAAO/L;;KAC7C,KAAK9C,EAAWqP;MACd,OAAO1O,IAAasM,EAAShM,MAAM4N,EAAO/L;;KAC5C,KAAK9C,EAAWsP;MACd,OAAO3O,IAAagK,EAAW1J,MAAM4N,EAAO/L;;KAC9C,KAAK9C,EAAWuP;MACd,OAAO5O,IAAakK,EAAU5J,MAAM4N,EAAO/L;;KAC7C,KAAK9C,EAAWwP;MACd,OAAO7O,IAAaqN,EAAY/M,MAAM4N,EAAO/L;;KAC/C,KAAK9C,EAAW8O;MACd,OAAOnO,IAAagO,GAAU1N,MAAM4N,EAAO/L;;KAC7C,KAAK9C,EAAWyP;MACd,OAAO9O,IAAakN,EAAS5M,MAAM4N,EAAO/L;;KAC5C,KAAK9C,EAAW0P;MACd,OAAO/O,IAAa+M,EAAYzM,MAAM4N,EAAO/L;;KAC/C,KAAK9C,EAAW2P;MACd,OAAOhP,IAAa8L,EAAYxL,MAAM4N,EAAO/L;;KAC/C,KAAK9C,EAAW4P;MACd,OAAOjP,IAAayM,EAAWnM,MAAM4N,EAAO/L;;KAC9C,KAAK9C,EAAW6P;MACd,OAAOlP,IAAa4L,EAAatL,MAAM4N,EAAO/L;;KAChD,KAAK9C,EAAW8P;MACd,OAAOnP,IAAa4M,EAAYtM,MAAM4N,EAAO/L;;KAC/C,KAAK9C,EAAW+P;MACd,OAAOpP,IAAa0N,EAAWpN,MAAM4N,EAAO/L;;KAC9C,KAAK9C,EAAWgQ;KAChB,KAAKhQ,EAAWiQ;MACd,OAAOtP,IAAa+N,GAAWzN,MAAM4N,EAAO/L;;KAC9C,KAAK9C,EAAWkQ;MACd,OAAOvP,IAAa0K,EAAUpK,MAAM4N,EAAO/L;;KAC7C,KAAK9C,EAAWmQ;KAChB,KAAKnQ,EAAWoQ;KAChB,KAAKpQ,EAAWqQ;MACd,OAAO1P,IAAa8J,EAAWxJ,MAAM4N,EAAO/L;;KAC9C;MACE,OAAOnC,IAAa6J,EAAYvJ,MAAM4N,EAAO/L;;AAEnD;EACA1B,KAAAA,CAAMC,GAAMC,GAAQuN;IAClB,IAAIA,EAAOnI,SAAS1G,EAAW8O,KAAK;MAClCxN,IAASN,EAAKI,MAAMC,GAAMC,GAAQ;MAClCD,EAAK0D,UAAUzD,GAAQuN,EAAOnI;MAC9BrF,EAAK0D,UAAUzD,IAAS,GAAGuN,EAAOyB,kBAAkB;MACpDjP,EAAKS,SAASR,IAAS,GAAGuN,EAAO0B,iBAAiB;MAClDlP,EAAKS,SAASR,IAAS,GAAGuN,EAAO2B,eAAe;MAChDnP,EAAK0D,UAAUzD,IAAS,GAAGuN,EAAOrD,SAAS;MAE3C,OAAOmD,GAAUvN,MAAMC,GADvBC,KAAU,GAC2BuN,EAAO/L;AAC9C;IACAxB,IAASN,EAAKI,MAAMC,GAAMC,GAAQuN,EAAO7N;IACzCK,EAAK0D,UAAUzD,GAAQuN,EAAOnI;IAC9BrF,EAAK0D,UACHzD,IAAS,IACRuN,EAAOtI,SAAS,MAAMsI,EAAO4B,QAAQ7B,KAAa;IAErDvN,EAAKwK,UAAUvK,IAAS,GAAGuN,EAAO6B,OAAO;IACzCpP,KAAU;IACV,QAAQuN,EAAOnI;KACb,KAAK1G,EAAW+O;MACd,OAAOrE,EAAWtJ,MAAMC,GAAMC,GAAQuN,EAAO/L;;KAC/C,KAAK9C,EAAWgP;MACd,OAAOvE,EAAWrJ,MAAMC,GAAMC,GAAQuN,EAAO/L;;KAC/C,KAAK9C,EAAWiP;MACd,OAAOvD,EAAUtK,MAAMC,GAAMC,GAAQuN,EAAO/L;;KAC9C,KAAK9C,EAAWkP;MACd,OAAOjE,EAAY7J,MAAMC,GAAMC,GAAQuN,EAAO/L;;KAChD,KAAK9C,EAAWmP;MACd,OAAO/C,EAAShL,MAAMC,GAAMC,GAAQuN,EAAO/L;;KAC7C,KAAK9C,EAAWoP;MACd,OAAOxE,EAAUxJ,MAAMC,GAAMC,GAAQuN,EAAO/L;;KAC9C,KAAK9C,EAAWqP;MACd,OAAOpC,EAAS7L,MAAMC,GAAMC,GAAQuN,EAAO/L;;KAC7C,KAAK9C,EAAWsP;MACd,OAAO3E,EAAWvJ,MAAMC,GAAMC,GAAQuN,EAAO/L;;KAC/C,KAAK9C,EAAWuP;MACd,OAAO1E,EAAUzJ,MAAMC,GAAMC,GAAQuN,EAAO/L;;KAC9C,KAAK9C,EAAWwP;MACd,OAAOxB,EAAY5M,MAAMC,GAAMC,GAAQuN,EAAO/L;;KAChD,KAAK9C,EAAWyP;MACd,OAAO5B,EAASzM,MAAMC,GAAMC,GAAQuN,EAAO/L;;KAC7C,KAAK9C,EAAW0P;MACd,OAAOhC,EAAYtM,MAAMC,GAAMC,GAAQuN,EAAO/L;;KAChD,KAAK9C,EAAW2P;MACd,OAAOlD,EAAYrL,MAAMC,GAAMC,GAAQuN,EAAO/L;;KAChD,KAAK9C,EAAW4P;MACd,OAAOxC,EAAWhM,MAAMC,GAAMC,GAAQuN,EAAO/L;;KAC/C,KAAK9C,EAAW6P;MACd,OAAOtD,EAAanL,MAAMC,GAAMC,GAAQuN,EAAO/L;;KACjD,KAAK9C,EAAW8P;MACd,OAAOvC,EAAYnM,MAAMC,GAAMC,GAAQuN,EAAO/L;;KAChD,KAAK9C,EAAW+P;MACd,OAAO1B,EAAWjN,MAAMC,GAAMC,GAAQuN,EAAO/L;;KAC/C,KAAK9C,EAAWgQ;KAChB,KAAKhQ,EAAWiQ;MACd,OAAOvB,GAAWtN,MAAMC,GAAMC,GAAQuN,EAAO/L;;KAC/C,KAAK9C,EAAWkQ;MACd,OAAO7E,EAAUjK,MAAMC,GAAMC,GAAQuN,EAAO/L;;KAC9C,KAAK9C,EAAWmQ;KAChB,KAAKnQ,EAAWoQ;KAChB,KAAKpQ,EAAWqQ;MACd,OAAO5F,EAAWrJ,MAAMC,GAAMC,GAAQuN,EAAO/L;;KAC/C;MACE,OAAO0H,EAAYpJ,MAAMC,GAAMC,GAAQuN,EAAO/L;;AAEpD;EACAf,IAAAA,CAAKV,GAAM8B;IACT,MAAMwD,IAAQ3F,EAAKe,KAAKV,GAAM8B;IAC9B,MAAMuD,IAAOrF,EAAKuB,UAAUO,EAAS7B;IACrC,IAAIoF,MAAS1G,EAAW8O,KAAK;MAC3B,MAAMwB,IAAiBjP,EAAKuB,UAAUO,EAAS7B,SAAS,MAAM;MAC9D,MAAMiP,IAAgBlP,EAAKgB,SAASc,EAAS7B,SAAS;MACtD,MAAMkP,IAAcnP,EAAKgB,SAASc,EAAS7B,SAAS;MACpD,MAAMkK,IAAQnK,EAAKuB,UAAUO,EAAS7B,SAAS;MAC/CgB,QAAQa,GAAU;MAClB,OAAO;QACLuD;QACA4J;QACAC;QACAC;QACAhF;QACA1I,MAAM6L,GAAU5M,KAAKV,GAAM8B;;AAE/B;IACA,MAAMmD,IAASjF,EAAKuB,UAAUO,EAAS7B,SAAS;IAChD,MAAMoP,IAAMrP,EAAK8K,UAAUhJ,EAAS7B,SAAS;IAC7CgB,QAAQa,GAAU;IAClB,MAAM0L,IAAiB;MACrB7N,MAAM2F;MACND;MACAH,QAAgB,QAATD;MACPmK,UAAUnK,IAASsI;MACnB8B;MACA5N,MAAM;;IAER,QAAQ+L,EAAOnI;KACb,KAAK1G,EAAW+O;MACdF,EAAO/L,OAAO4H,EAAW3I,KAAKV,GAAM8B;MACpC,OAAO0L;;KACT,KAAK7O,EAAWgP;MACdH,EAAO/L,OAAO2H,EAAW1I,KAAKV,GAAM8B;MACpC,OAAO0L;;KACT,KAAK7O,EAAWiP;MACdJ,EAAO/L,OAAO4I,EAAU3J,KAAKV,GAAM8B;MACnC,OAAO0L;;KACT,KAAK7O,EAAWkP;MACdL,EAAO/L,OAAOmI,EAAYlJ,KAAKV,GAAM8B;MACrC,OAAO0L;;KACT,KAAK7O,EAAWmP;MACdN,EAAO/L,OAAOsJ,EAASrK,KAAKV,GAAM8B;MAClC,OAAO0L;;KACT,KAAK7O,EAAWoP;MACdP,EAAO/L,OAAO8H,EAAU7I,KAAKV,GAAM8B;MACnC,OAAO0L;;KACT,KAAK7O,EAAWqP;MACdR,EAAO/L,OAAOmK,EAASlL,KAAKV,GAAM8B;MAClC,OAAO0L;;KACT,KAAK7O,EAAWsP;MACdT,EAAO/L,OAAO6H,EAAW5I,KAAKV,GAAM8B;MACpC,OAAO0L;;KACT,KAAK7O,EAAWuP;MACdV,EAAO/L,OAAO+H,EAAU9I,KAAKV,GAAM8B;MACnC,OAAO0L;;KACT,KAAK7O,EAAWwP;MACdX,EAAO/L,OAAOkL,EAAYjM,KAAKV,GAAM8B;MACrC,OAAO0L;;KACT,KAAK7O,EAAWyP;MACdZ,EAAO/L,OAAO+K,EAAS9L,KAAKV,GAAM8B;MAClC,OAAO0L;;KACT,KAAK7O,EAAW0P;MACdb,EAAO/L,OAAO4K,EAAY3L,KAAKV,GAAM8B;MACrC,OAAO0L;;KACT,KAAK7O,EAAW2P;MACdd,EAAO/L,OAAO2J,EAAY1K,KAAKV,GAAM8B;MACrC,OAAO0L;;KACT,KAAK7O,EAAW4P;MACdf,EAAO/L,OAAOsK,EAAWrL,KAAKV,GAAM8B;MACpC,OAAO0L;;KACT,KAAK7O,EAAW6P;MACdhB,EAAO/L,OAAOyJ,EAAaxK,KAAKV,GAAM8B;MACtC,OAAO0L;;KACT,KAAK7O,EAAW8P;MACdjB,EAAO/L,OAAOyK,EAAYxL,KAAKV,GAAM8B;MACrC,OAAO0L;;KACT,KAAK7O,EAAW+P;MACdlB,EAAO/L,OAAOuL,EAAWtM,KAAKV,GAAM8B;MACpC,OAAO0L;;KACT,KAAK7O,EAAWgQ;KAChB,KAAKhQ,EAAWiQ;MACdpB,EAAO/L,OAAO4L,GAAW3M,KAAKV,GAAM8B;MACpC,OAAO0L;;KACT,KAAK7O,EAAWkQ;MACdrB,EAAO/L,OAAOuI,EAAUtJ,KAAKV,GAAM8B;MACnC,OAAO0L;;KACT,KAAK7O,EAAWmQ;KAChB,KAAKnQ,EAAWoQ;KAChB,KAAKpQ,EAAWqQ;MACdxB,EAAO/L,OAAO2H,EAAW1I,KAAKV,GAAM8B;MACpC,OAAO0L;;KACT;MACEA,EAAO/L,OAAO0H,EAAYzI,KAAKV,GAAM8B;MACrC,OAAO0L;;AAEb;;;ACt5BF,MAAM8B,WAAWA,CACf3K,GACA3E,GACA8B,GACAyN;EAEA,KAAKA;IACH;;EAEF,OAAMtP,QAAEA,GAAMV,QAAEA,KAAWuC;EAC3B,MAAML,IAAY;EAClB,KAAK,IAAIjB,IAAM,GAAGA,IAAM+O,KAASzN,EAAS7B,SAASA,IAASV,GAAQiB;IAClEiB,EAAKL,KAAKuD,EAAQjE,KAAKV,GAAM8B;;EAC/B,OAAOL;;;AAgBF,MAAM+N,KAA0B;EACrC5P,KAAAA,CAAM4P;IACJ,OAAMC,WAAEA,GAASC,SAAEA,GAAOC,aAAEA,GAAWC,aAAEA,KAAgBJ;IACzD,IAAIlQ,IAAa;IACjB,IAAIkB,IAAM;IACV,KAAKA,IAAM,GAAGiP,KAAajP,IAAMiP,EAAUlQ,QAAQiB;MACjDlB,KAAc0F,EAASpF,MAAM6P,EAAUjP;;IACzC,KAAKA,IAAM,GAAGkP,KAAWlP,IAAMkP,EAAQnQ,QAAQiB;MAC7ClB,KAAckO,GAAO5N,MAAM8P,EAAQlP;;IACrC,KAAKA,IAAM,GAAGmP,KAAenP,IAAMmP,EAAYpQ,QAAQiB;MACrDlB,KAAckO,GAAO5N,MAAM+P,EAAYnP;;IACzC,KAAKA,IAAM,GAAGoP,KAAepP,IAAMoP,EAAYrQ,QAAQiB;MACrDlB,KAAckO,GAAO5N,MAAMgQ,EAAYpP;;IACzC,OAAOlB;AACT;EACAS,KAAAA,CAAMC,GAAMC,GAAQuP;IAClB,OAAMC,WAAEA,GAASC,SAAEA,GAAOC,aAAEA,GAAWC,aAAEA,KAAgBJ;IACzD,IAAIrF,IAnBiB,SAoBjBqF,EAAOrF,SAAS,MACjBqF,EAAOnK,QAAQ3G,EAAWmR,UAC1BL,EAAOM,SAAS;IACnB9P,EAAK0D,UAAUzD,GAAQuP,EAAOO,MAAM;IACpC/P,EAAK0D,UAAUzD,IAAS,GAAGkK;IAC3BnK,EAAK0D,UAAUzD,IAAS,GAAGuP,EAAOC,WAAWlQ,UAAU;IACvDS,EAAK0D,UAAUzD,IAAS,GAAGuP,EAAOE,SAASnQ,UAAU;IACrDS,EAAK0D,UAAUzD,IAAS,GAAGuP,EAAOG,aAAapQ,UAAU;IACzDS,EAAK0D,UAAUzD,IAAS,IAAIuP,EAAOI,aAAarQ,UAAU;IAC1DU,KAAU;IACV,IAAIO,IAAM;IACV,KAAKA,IAAM,GAAGiP,KAAajP,IAAMiP,EAAUlQ,QAAQiB;MACjDP,IAAS+E,EAASjF,MAAMC,GAAMC,GAAQwP,EAAUjP;;IAClD,KAAKA,IAAM,GAAGkP,KAAWlP,IAAMkP,EAAQnQ,QAAQiB;MAC7CP,IAASuN,GAAOzN,MAAMC,GAAMC,GAAQyP,EAAQlP;;IAC9C,KAAKA,IAAM,GAAGmP,KAAenP,IAAMmP,EAAYpQ,QAAQiB;MACrDP,IAASuN,GAAOzN,MAAMC,GAAMC,GAAQ0P,EAAYnP;;IAClD,KAAKA,IAAM,GAAGoP,KAAepP,IAAMoP,EAAYrQ,QAAQiB;MACrDP,IAASuN,GAAOzN,MAAMC,GAAMC,GAAQ2P,EAAYpP;;IAClD,OAAOP;AACT;EACAS,IAAAA,CAAKV,GAAM8B;IACT,MAAMiO,IAAK/P,EAAKuB,UAAUO,EAAS7B;IACnC,MAAMkK,IAAQnK,EAAKuB,UAAUO,EAAS7B,SAAS;IAC/C,MAAM+P,IAAkBhQ,EAAKuB,UAAUO,EAAS7B,SAAS;IACzD,MAAMgQ,IAAgBjQ,EAAKuB,UAAUO,EAAS7B,SAAS;IACvD,MAAMiQ,IAAoBlQ,EAAKuB,UAAUO,EAAS7B,SAAS;IAC3D,MAAMkQ,IAAoBnQ,EAAKuB,UAAUO,EAAS7B,SAAS;IAC3DgB,QAAQa,GAAU;IAClB,OAAO;MACLiO;MACA5F;MACA2F,OAAe,KAAR3F;MACP9E,MACE8E,IAAQzL,EAAW0R,WAAW1R,EAAW0R,WAAW1R,EAAWmR;MACjEJ,WAAWH,SAAStK,GAAUhF,GAAM8B,GAAUkO;MAC9CN,SAASJ,SAAS9B,IAAQxN,GAAM8B,GAAUmO;MAC1CN,aAAaL,SAAS9B,IAAQxN,GAAM8B,GAAUoO;MAC9CN,aAAaN,SAAS9B,IAAQxN,GAAM8B,GAAUqO;;AAElD;;;;;;;;;;;;;iBClDK,SAAS9O,OAAOzB;EACrB,MAAMI,IACJ,YAAYJ,IACR,IAAIgH,SAAShH,EAAM+B,QAAQ/B,EAAMgC,YAAYhC,EAAMN,cACnD,IAAIsH,SAAShH;EACnB,OAAO4P,GAAO9O,KAAKV,GAAM;IAAEC,QAAQ;IAAGV,QAAQS,EAAKV;;AACrD;;iBAeO,SAASa,OAAOsG;EACrB,MAAM9E,IAAS,IAAI+E,YAAY8I,GAAO5P,MAAM6G;EAC5C,MAAMlH,IAASiQ,GAAOzP,MAAM,IAAI6G,SAASjF,IAAS,GAAG8E;EACrD,OAAO,IAAI/E,WAAWC,GAAQ,GAAGpC;AACnC;;yBARO,SAAS8Q,eAAe5J;EAC7B,OAAO+I,GAAO5P,MAAM6G;AACtB;;uBAXO,SAAS6J,aAAa1Q;EAC3B,MAAMI,IACJ,YAAYJ,IACR,IAAIgH,SAAShH,EAAM+B,QAAQ/B,EAAMgC,YAAYhC,EAAMN,cACnD,IAAIsH,SAAShH;EACnB,MAAML,IAAS6C,KAAKc,IAAIlD,EAAKV,aAAa,GAAGU,EAAKuB,UAAU;EAC5D,OAAOiO,GAAO9O,KAAKV,GAAM;IAAEC,QAAQ;IAAGV;;AACxC;;uBAYO,SAASgR,aAAa9J;EAC3B,MAAM9E,IAAS,IAAI+E,YAAY8I,GAAO5P,MAAM6G,KAAS;EACrD,MAAMzG,IAAO,IAAI4G,SAASjF;EAC1B,MAAMpC,IAASiQ,GAAOzP,MAAMC,GAAM,GAAGyG;EACrCzG,EAAK0D,UAAU,GAAGnE,IAAS;EAC3B,OAAO,IAAImC,WAAWC,GAAQ,GAAGpC;AACnC"}
@@ -198,7 +198,6 @@ const c = {
198
198
  length: 0
199
199
  };
200
200
  } else {
201
- advance(s, 2);
202
201
  break;
203
202
  }
204
203
  }
@@ -326,7 +325,7 @@ const y = {
326
325
  }
327
326
  };
328
327
 
329
- const h = {
328
+ const U = {
330
329
  bytes: () => 16,
331
330
  write(t, e, n) {
332
331
  const r = n.indexOf("::");
@@ -422,14 +421,14 @@ const sliceView = (t, e, n = e.length) => {
422
421
  return r;
423
422
  };
424
423
 
425
- const U = 32768;
424
+ const h = 32768;
426
425
 
427
426
  const w = {
428
427
  bytes: t => c.bytes(t.name) + 4,
429
428
  write(t, e, r) {
430
429
  let s = r.class || n.IN;
431
430
  if (r.qu) {
432
- s |= U;
431
+ s |= h;
433
432
  }
434
433
  e = c.write(t, e, r.name);
435
434
  t.setUint16(e, r.type);
@@ -441,7 +440,7 @@ const w = {
441
440
  const s = t.getUint16(e.offset);
442
441
  let a = t.getUint16(e.offset + 2) || n.ANY;
443
442
  let i = !1;
444
- if (a !== n.ANY && a & U) {
443
+ if (a !== n.ANY && a & h) {
445
444
  a &= -32769;
446
445
  i = !0;
447
446
  }
@@ -489,7 +488,7 @@ const N = withRDLength({
489
488
  const n = new ArrayBuffer(t.bytes(e));
490
489
  const r = t.write(new DataView(n), 0, e);
491
490
  return new Uint8Array(n, 0, r);
492
- })(a === b.v4 ? g : h, n.ip);
491
+ })(a === b.v4 ? g : U, n.ip);
493
492
  for (let n = 0; n < i; n++) {
494
493
  t.setUint8(e++, o[n]);
495
494
  }
@@ -505,7 +504,7 @@ const N = withRDLength({
505
504
  family: n,
506
505
  sourcePrefixLength: r,
507
506
  scopePrefixLength: a,
508
- ip: n === b.v4 ? g.read(t, e) : h.read(t, e)
507
+ ip: n === b.v4 ? g.read(t, e) : U.read(t, e)
509
508
  };
510
509
  }
511
510
  });
@@ -658,7 +657,7 @@ const m = withRDLength(y);
658
657
 
659
658
  const O = withRDLength(array(g));
660
659
 
661
- const L = withRDLength(array(h));
660
+ const L = withRDLength(array(U));
662
661
 
663
662
  const v = withRDLength(f);
664
663
 
@@ -705,6 +704,7 @@ const H = {
705
704
  }
706
705
  if (n["no-default-alpn"]) {
707
706
  t.setUint16(e, R.NoDefaultAlpn);
707
+ t.setUint16(e + 2, 0);
708
708
  e += 4;
709
709
  }
710
710
  if (null != n.port) {
@@ -801,7 +801,7 @@ const _ = withRDLength(c);
801
801
 
802
802
  const M = withRDLength(g);
803
803
 
804
- const V = withRDLength(h);
804
+ const V = withRDLength(U);
805
805
 
806
806
  const Y = withRDLength(array(u));
807
807
 
@@ -858,7 +858,7 @@ const F = withRDLength({
858
858
  write(t, e, n) {
859
859
  let r = n.flags || 0;
860
860
  if (n.issuerCritical) {
861
- r = 128;
861
+ r |= 128;
862
862
  }
863
863
  t.setUint8(e, r);
864
864
  e = u.write(t, e + 1, n.tag);
@@ -1 +1 @@
1
- {"version":3,"file":"dns-message.mjs","sources":["../src/constants.ts","../src/encoders.ts","../src/questions.ts","../src/options.ts","../src/svcparams.ts","../src/answers.ts","../src/packets.ts","../src/index.ts"],"sourcesContent":["export const enum PacketType {\n QUERY = 0,\n RESPONSE = 1 << 15,\n}\n\nexport const enum RecordType {\n A = 1,\n NS = 2,\n CNAME = 5,\n SOA = 6,\n NULL = 10,\n PTR = 12,\n HINFO = 13,\n MX = 15,\n TXT = 16,\n RP = 17,\n AFSDB = 18,\n SIG = 24,\n KEY = 25,\n AAAA = 28,\n LOC = 29,\n SRV = 33,\n NAPTR = 35,\n KX = 36,\n CERT = 37,\n DNAME = 39,\n OPT = 41,\n APL = 42,\n DS = 43,\n SSHFP = 44,\n IPSECKEY = 45,\n RRSIG = 46,\n NSEC = 47,\n DNSKEY = 48,\n DHCID = 49,\n NSEC3 = 50,\n NSEC3PARAM = 51,\n TLSA = 52,\n HIP = 55,\n CDS = 59,\n CDNSKEY = 60,\n SVCB = 64,\n HTTPS = 65,\n SPF = 99,\n TKEY = 249,\n TSIG = 250,\n IXFR = 251,\n AXFR = 252,\n ANY = 255,\n CAA = 257,\n TA = 32768,\n DLV = 32769,\n}\n\nexport const enum RecordClass {\n IN = 1,\n CS = 2,\n CH = 3,\n HS = 4,\n ANY = 255,\n}\n\nexport const enum PacketFlag {\n NOERR = 0,\n FORMERR = 1,\n SERVFAIL = 2,\n NXDOMAIN = 3,\n NOTIMP = 4,\n REFUSED = 5,\n YXDOMAIN = 6,\n YXRRSET = 7,\n NXRRSET = 8,\n NOTAUTH = 9,\n NOTZONE = 10,\n\n CHECKING_DISABLED = 1 << 4,\n AUTHENTIC_DATA = 1 << 5,\n RECURSION_AVAILABLE = 1 << 7,\n RECURSION_DESIRED = 1 << 8,\n TRUNCATED_RESPONSE = 1 << 9,\n AUTHORITATIVE_ANSWER = 1 << 10,\n}\n\nexport type PacketRType =\n | PacketFlag.NOERR\n | PacketFlag.FORMERR\n | PacketFlag.SERVFAIL\n | PacketFlag.NXDOMAIN\n | PacketFlag.NOTIMP\n | PacketFlag.REFUSED\n | PacketFlag.YXDOMAIN\n | PacketFlag.YXRRSET\n | PacketFlag.NXRRSET\n | PacketFlag.NOTAUTH\n | PacketFlag.NOTZONE;\n\nexport const enum OptCode {\n OPTION_0 = 0,\n LLQ = 1,\n UL = 2,\n NSID = 3,\n OPTION_4 = 4,\n DAU = 5,\n DHU = 6,\n N3U = 7,\n CLIENT_SUBNET = 8,\n EXPIRE = 9,\n COOKIE = 10,\n TCP_KEEPALIVE = 11,\n PADDING = 12,\n CHAIN = 13,\n KEY_TAG = 14,\n DEVICEID = 26946,\n OPTION_65535 = 65535,\n}\n","import type { RecordType } from './constants';\n\nexport interface ReadPosition {\n offset: number;\n length: number;\n}\n\nexport interface Encoder<T, R = T> {\n bytes(input: T): number;\n write(view: DataView, offset: number, input: T): number;\n read(view: DataView, position: ReadPosition): R;\n}\n\nexport const textEncoder = new TextEncoder();\nexport const textDecoder = new TextDecoder();\n\nconst utf8ByteLength =\n typeof Buffer !== 'undefined'\n ? (str: string) => Buffer.byteLength(str)\n : (str: string) => {\n let length = str.length;\n for (let i = length - 1; i >= 0; i--) {\n const code = str.charCodeAt(i);\n if (code > 0x7f && code <= 0x7ff) {\n length++;\n } else if (code > 0x7ff && code <= 0xffff) {\n length += 2;\n }\n // UTF-16 Trail Surrogate\n if (code >= 0xdc00 && code <= 0xdfff) {\n i--;\n }\n }\n return length;\n };\n\nconst LABEL_LIMIT = 63;\nconst NAME_LIMIT = 255;\n\nexport const name: Encoder<string> = {\n bytes(str) {\n let length = 2;\n switch (str) {\n case '':\n case '.':\n case '..':\n return 1;\n default:\n if (str[0] === '.') length--;\n if (str[str.length - 1] === '.') length--;\n length += str.replace(/\\\\\\./g, '.').length;\n if (length > NAME_LIMIT)\n throw new RangeError(\n `Name \"${str}\" is above ${NAME_LIMIT} byte limit.`\n );\n return length;\n }\n },\n write(view, offset, str) {\n const encoded = textEncoder.encode(str);\n for (\n let startIdx = encoded[0] === 46 /*'.'*/ ? 1 : 0, endIdx = 0;\n startIdx < encoded.byteLength;\n startIdx = endIdx + 1\n ) {\n endIdx = encoded.indexOf(46 /*'.'*/, startIdx);\n while (endIdx > -1 && encoded[endIdx - 1] === 92 /*'\\\\'*/)\n endIdx = encoded.indexOf(46 /*'.'*/, endIdx + 1);\n if (endIdx === -1) endIdx = encoded.byteLength;\n if (endIdx === startIdx) {\n continue;\n } else if (endIdx - startIdx > LABEL_LIMIT) {\n throw new RangeError(\n `Label in \"${str}\" is above ${LABEL_LIMIT} byte limit.`\n );\n }\n let byteIdx = offset + 1;\n for (let idx = startIdx; idx < endIdx; idx++) {\n if (encoded[idx] === 92 /*'\\\\'*/ && encoded[idx + 1] === 46 /*'.'*/)\n idx++;\n view.setUint8(byteIdx++, encoded[idx]);\n }\n view.setUint8(offset, byteIdx - offset - 1);\n offset = byteIdx;\n startIdx = endIdx + 1;\n }\n return offset + 1;\n },\n read(view, outerPosition) {\n const labels: string[] = [];\n let maxOffset = outerPosition.offset;\n let innerPosition = outerPosition;\n while (true) {\n const labelLength = view.getUint8(innerPosition.offset);\n if (labelLength === 0) {\n advance(innerPosition, 1);\n break;\n } else if ((labelLength & 0xc0) === 0) {\n advance(innerPosition, 1);\n const label = sliceView(view, innerPosition, labelLength);\n labels.push(textDecoder.decode(label).replace(/\\./g, '\\\\.'));\n } else {\n const jumpTo = view.getUint16(innerPosition.offset) - 0xc000;\n advance(innerPosition, 2);\n if (jumpTo < maxOffset) {\n innerPosition = { offset: (maxOffset = jumpTo), length: 0 };\n } else {\n advance(innerPosition, 2);\n break;\n }\n }\n }\n return labels.join('.') || '.';\n },\n};\n\nexport const bytes: Encoder<Uint8Array | string, Uint8Array> = {\n bytes(data) {\n return typeof data === 'string' ? utf8ByteLength(data) : data.byteLength;\n },\n write(view, offset, data) {\n const bytes = typeof data === 'string' ? textEncoder.encode(data) : data;\n const target = new Uint8Array(\n view.buffer,\n view.byteOffset + offset,\n bytes.byteLength\n );\n target.set(bytes);\n offset += bytes.byteLength;\n return offset;\n },\n read(view, position) {\n return sliceView(view, position);\n },\n};\n\nexport const octets: Encoder<Uint8Array> = {\n bytes(data) {\n return data.byteLength + 1;\n },\n write(view, offset, bytes) {\n view.setUint8(offset++, bytes.byteLength);\n const target = new Uint8Array(\n view.buffer,\n view.byteOffset + offset,\n bytes.byteLength\n );\n target.set(bytes);\n offset += bytes.byteLength;\n return offset;\n },\n read(view, position) {\n const length = view.getUint8(position.offset);\n advance(position, 1);\n return sliceView(view, position, length);\n },\n};\n\nexport const string: Encoder<string> = {\n bytes(str) {\n return utf8ByteLength(str) + 1;\n },\n write(view, offset, data) {\n const buffer = textEncoder.encode(data);\n view.setUint8(offset++, buffer.byteLength);\n return bytes.write(view, offset, buffer);\n },\n read(view, position) {\n const length = view.getUint8(position.offset);\n advance(position, 1);\n return textDecoder.decode(sliceView(view, position, length));\n },\n};\n\nexport const typeBitmap: Encoder<RecordType[]> = {\n bytes(types) {\n const extents: number[] = [];\n for (let idx = 0; idx < types.length; idx++)\n extents[types[idx] >> 8] = Math.max(\n extents[types[idx] >> 8] || 0,\n types[idx] & 0xff\n );\n let length = 0;\n for (let idx = 0; idx < extents.length; idx++)\n if (extents[idx] != null) length += 2 + Math.ceil((extents[idx] + 1) / 8);\n return length;\n },\n write(view, offset, types) {\n const typesByWindow: number[][] = [];\n for (let idx = 0; idx < types.length; idx++) {\n const window =\n typesByWindow[types[idx] >> 8] || (typesByWindow[types[idx] >> 8] = []);\n window[(types[idx] >> 3) & 0x1f] |= 1 << (7 - (types[idx] & 0x7));\n }\n for (let idx = 0; idx < typesByWindow.length; idx++) {\n const window = typesByWindow[idx];\n if (window != null) {\n view.setUint8(offset++, idx);\n view.setUint8(offset++, window.length);\n for (let byteIdx = 0; byteIdx < window.length; byteIdx++) {\n view.setUint8(offset++, window[byteIdx]);\n }\n }\n }\n return offset;\n },\n read(view, position) {\n const { offset, length } = position;\n const typelist: RecordType[] = [];\n while (position.offset - offset < length) {\n const window = view.getUint8(position.offset);\n const windowLength = view.getUint8(position.offset + 1);\n for (let idx = 0; idx < windowLength; idx++) {\n const bitmap = view.getUint8(position.offset + 2 + idx);\n for (let bit = 0; bit < 8; bit++) {\n if (bitmap & (1 << (7 - bit))) {\n typelist.push((window << 8) | (idx << 3) | bit);\n }\n }\n }\n advance(position, 2 + windowLength);\n }\n return typelist;\n },\n};\n\nexport const ipv4: Encoder<string> = {\n bytes() {\n return 4;\n },\n write(view, offset, ip) {\n const octets = ip.split('.', 4);\n for (let octetIdx = 0; octetIdx < 4; octetIdx++)\n view.setUint8(offset++, parseInt(octets[octetIdx], 10));\n return offset;\n },\n read(view, position) {\n const length = Math.min(position.length, 4);\n const ip = new Array(4)\n .fill(0)\n .map((_, index) =>\n index < length ? view.getUint8(position.offset + index) : 0\n )\n .join('.');\n advance(position, length);\n return ip;\n },\n};\n\nexport const uint16: Encoder<number> = {\n bytes() {\n return 2;\n },\n write(view, offset, key) {\n view.setUint16(offset, key);\n return offset + 2;\n },\n read(view, position) {\n const key = view.getUint16(position.offset);\n advance(position, 2);\n return key;\n },\n};\n\nexport const ipv6: Encoder<string> = {\n bytes() {\n return 16;\n },\n write(view, offset, ip) {\n const middleIdx = ip.indexOf('::');\n const head = (middleIdx > -1 ? ip.slice(0, middleIdx) : ip).split(':');\n const tail = middleIdx > -1 ? ip.slice(middleIdx + 2).split(':') : [];\n const ipv4 =\n tail.length > 0 && tail[tail.length - 1].includes('.')\n ? tail.pop()\n : undefined;\n for (let headIdx = 0; headIdx < head.length; headIdx++) {\n view.setUint16(offset, parseInt(head[headIdx], 16));\n offset += 2;\n }\n const middleLength = 8 - (head.length + tail.length + (ipv4 ? 2 : 0));\n for (let pad = middleLength; pad > 0; pad--) {\n view.setUint16(offset, 0);\n offset += 2;\n }\n for (let tailIdx = 0; tailIdx < tail.length; tailIdx++) {\n view.setUint16(offset, parseInt(tail[tailIdx], 16));\n offset += 2;\n }\n if (ipv4) {\n const v4Parts = ipv4.split('.', 4).map(part => parseInt(part, 10));\n view.setUint16(offset, (v4Parts[0] << 8) | v4Parts[1]);\n view.setUint16(offset + 2, (v4Parts[2] << 8) | v4Parts[3]);\n offset += 4;\n }\n return offset;\n },\n read(view, position) {\n let output = '';\n const length = Math.min(position.length, 16);\n for (let idx = 0; idx < length; idx += 2) {\n if (idx !== 0) output += ':';\n output += view.getUint16(position.offset + idx).toString(16);\n }\n advance(position, length);\n return output\n .replace(/(^|:)0(:0)*:0(:|$)/, '$1::$3')\n .replace(/:{3,4}/, '::');\n },\n};\n\nexport const withRDLength = <T, R = T>(\n encoder: Encoder<T, R>\n): Encoder<T, R> => ({\n bytes(data) {\n return encoder.bytes(data) + 2;\n },\n write(view, offset, data) {\n const startOffset = offset;\n offset = encoder.write(view, offset + 2, data);\n view.setUint16(startOffset, offset - startOffset - 2);\n return offset;\n },\n read(view, position) {\n const { offset, length } = position;\n const rdlength = (position.length = view.getUint16(position.offset));\n position.offset += 2;\n const data = encoder.read(view, position);\n // Restore original position and advance by specified size after\n position.offset = offset + 2 + rdlength;\n position.length = length;\n return data;\n },\n});\n\nexport const array = <T>(encoder: Encoder<T>): Encoder<T[]> => ({\n bytes(data) {\n let byteLength = 0;\n for (let idx = 0; data != null && idx < data.length; idx++)\n byteLength += encoder.bytes(data[idx]);\n return byteLength;\n },\n write(view, offset, data) {\n for (let idx = 0; data != null && idx < data.length; idx++)\n offset = encoder.write(view, offset, data[idx]);\n return offset;\n },\n read(view, position) {\n const { offset, length } = position;\n const data: T[] = [];\n while (position.offset - offset < length)\n data.push(encoder.read(view, position));\n return data;\n },\n});\n\nexport const advance = (position: ReadPosition, bytes: number) => {\n position.offset += bytes | 0;\n position.length -= bytes | 0;\n position.length &= ~(position.length >> 31);\n};\n\nexport const encodeIntoBuffer = <T>(\n encoder: Encoder<T>,\n input: T\n): Uint8Array => {\n const buffer = new ArrayBuffer(encoder.bytes(input));\n const endOffset = encoder.write(new DataView(buffer), 0, input);\n return new Uint8Array(buffer, 0, endOffset);\n};\n\nexport const sliceView = (\n view: DataView,\n position: ReadPosition,\n length = position.length\n) => {\n const slice = new Uint8Array(\n view.buffer,\n view.byteOffset + position.offset,\n length\n );\n advance(position, length);\n return slice;\n};\n","import { RecordClass, RecordType } from './constants';\nimport { Encoder, name, advance } from './encoders';\n\nexport interface Question {\n name: string;\n type: RecordType;\n class?: RecordClass;\n qu?: boolean;\n}\n\nconst QU_BIT = 1 << 15;\n\nexport const question: Encoder<Question> = {\n bytes(question) {\n return name.bytes(question.name) + 4;\n },\n write(view, offset, question) {\n let _class = question.class || RecordClass.IN;\n if (question.qu) _class |= QU_BIT;\n offset = name.write(view, offset, question.name);\n view.setUint16(offset, question.type);\n view.setUint16(offset + 2, _class);\n offset += 4;\n return offset;\n },\n read(view, position) {\n const _name = name.read(view, position);\n const type = view.getUint16(position.offset);\n let _class = view.getUint16(position.offset + 2) || RecordClass.ANY;\n let qu = false;\n if (_class !== RecordClass.ANY && _class & QU_BIT) {\n _class &= ~QU_BIT;\n qu = true;\n }\n advance(position, 4);\n return {\n name: _name,\n type,\n class: _class,\n qu,\n };\n },\n};\n","import { OptCode } from './constants';\nimport {\n type Encoder,\n withRDLength,\n encodeIntoBuffer,\n advance,\n bytes,\n ipv4,\n ipv6,\n} from './encoders';\n\nexport const enum IPType {\n v4 = 1,\n v6 = 2,\n}\n\nexport interface BaseOpt {\n code: number;\n}\n\nexport interface ClientSubnetOpt extends BaseOpt {\n code: OptCode.CLIENT_SUBNET;\n family?: IPType | (number & {});\n sourcePrefixLength?: number;\n scopePrefixLength?: number;\n ip: string;\n}\n\nexport interface KeepAliveOpt extends BaseOpt {\n code: OptCode.TCP_KEEPALIVE;\n timeout?: number;\n}\n\nexport interface PaddingOpt extends BaseOpt {\n code: OptCode.PADDING;\n length?: number;\n}\n\nexport interface TagOpt extends BaseOpt {\n code: OptCode.KEY_TAG;\n tags: number[];\n}\n\nexport interface UnknownOpt extends BaseOpt {\n data: Uint8Array;\n}\n\nexport type PacketOpt =\n | ClientSubnetOpt\n | KeepAliveOpt\n | PaddingOpt\n | TagOpt\n | UnknownOpt;\n\nexport const unknownOpt: Encoder<UnknownOpt> = withRDLength({\n bytes(option) {\n return bytes.bytes(option.data);\n },\n write(view, offset, option) {\n return bytes.write(view, offset, option.data);\n },\n read(view, position) {\n return {\n code: OptCode.OPTION_0,\n data: bytes.read(view, position),\n };\n },\n});\n\n// See: https://github.com/nodejs/node/blob/842448b/lib/internal/net.js#L15-L18\nconst v4Seg = '(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])';\nconst v4Str = `(?:${v4Seg}\\\\.){3}${v4Seg}`;\nconst ipv4Re = new RegExp(`^${v4Str}$`);\n\nconst isIPv4 = (ip: string) => ipv4Re.test(ip);\n\nexport const clientSubnetOpt: Encoder<ClientSubnetOpt> = withRDLength({\n bytes(option) {\n const sourcePrefixLength = option.sourcePrefixLength || 0;\n return Math.ceil(sourcePrefixLength / 8) + 4;\n },\n write(view, offset, option) {\n const sourcePrefixLength = option.sourcePrefixLength || 0;\n const scopePrefixLength = option.scopePrefixLength || 0;\n const family = option.family || (isIPv4(option.ip) ? IPType.v4 : IPType.v6);\n const maskLength = Math.ceil(sourcePrefixLength / 8);\n view.setUint16(offset, family);\n view.setUint8(offset + 2, sourcePrefixLength);\n view.setUint8(offset + 3, scopePrefixLength);\n offset += 4;\n const ipBuffer = encodeIntoBuffer(\n family === IPType.v4 ? ipv4 : ipv6,\n option.ip\n );\n for (let byteIdx = 0; byteIdx < maskLength; byteIdx++)\n view.setUint8(offset++, ipBuffer[byteIdx]);\n return offset;\n },\n read(view, position) {\n const family = view.getUint16(position.offset);\n const sourcePrefixLength = view.getUint8(position.offset + 2);\n const scopePrefixLength = view.getUint8(position.offset + 3);\n advance(position, 4);\n return {\n code: OptCode.CLIENT_SUBNET,\n family,\n sourcePrefixLength,\n scopePrefixLength,\n ip:\n family === IPType.v4\n ? ipv4.read(view, position)\n : ipv6.read(view, position),\n };\n },\n});\n\nexport const keepAliveOpt: Encoder<KeepAliveOpt> = withRDLength({\n bytes(option) {\n return option.timeout ? 2 : 0;\n },\n write(view, offset, option) {\n if (option.timeout) {\n view.setUint16(offset, option.timeout);\n offset += 2;\n }\n return offset;\n },\n read(view, position) {\n if (position.length) {\n const timeout = view.getUint16(position.offset);\n advance(position, 2);\n return { code: OptCode.TCP_KEEPALIVE, timeout };\n } else {\n return { code: OptCode.TCP_KEEPALIVE, timeout: undefined };\n }\n },\n});\n\nexport const paddingOpt: Encoder<PaddingOpt> = withRDLength({\n bytes(option) {\n return option.length || 0;\n },\n write(_view, offset, option) {\n return offset + (option.length || 0);\n },\n read(_view, position) {\n const { length } = position;\n advance(position, length);\n return { code: OptCode.PADDING, length };\n },\n});\n\nexport const tagOpt: Encoder<TagOpt> = withRDLength({\n bytes(option) {\n return option.tags.length * 2;\n },\n write(view, offset, option) {\n for (let idx = 0; idx < option.tags.length; idx++) {\n view.setUint16(offset, option.tags[idx]);\n offset += 2;\n }\n return offset;\n },\n read(view, position) {\n const { offset, length } = position;\n const tags: number[] = [];\n while (position.offset - offset < length) {\n tags.push(view.getUint16(position.offset));\n advance(position, 2);\n }\n return {\n code: OptCode.KEY_TAG,\n tags,\n };\n },\n});\n\nconst isUnknownOpt = (option: PacketOpt): option is UnknownOpt =>\n !!(option as UnknownOpt).data;\n\nexport const option: Encoder<PacketOpt> = {\n bytes(option) {\n if (isUnknownOpt(option)) {\n return unknownOpt.bytes(option) + 2;\n }\n switch (option.code) {\n case OptCode.CLIENT_SUBNET:\n return clientSubnetOpt.bytes(option) + 2;\n case OptCode.TCP_KEEPALIVE:\n return keepAliveOpt.bytes(option) + 2;\n case OptCode.PADDING:\n return paddingOpt.bytes(option) + 2;\n case OptCode.KEY_TAG:\n return tagOpt.bytes(option) + 2;\n }\n },\n write(view, offset, option) {\n view.setUint16(offset, option.code);\n offset += 2;\n if (isUnknownOpt(option)) {\n return unknownOpt.write(view, offset, option);\n }\n switch (option.code) {\n case OptCode.CLIENT_SUBNET:\n return clientSubnetOpt.write(view, offset, option);\n case OptCode.TCP_KEEPALIVE:\n return keepAliveOpt.write(view, offset, option);\n case OptCode.PADDING:\n return paddingOpt.write(view, offset, option);\n case OptCode.KEY_TAG:\n return tagOpt.write(view, offset, option);\n }\n },\n read(view, position) {\n const code = view.getUint16(position.offset);\n advance(position, 2);\n switch (code) {\n case OptCode.CLIENT_SUBNET:\n return clientSubnetOpt.read(view, position);\n case OptCode.TCP_KEEPALIVE:\n return keepAliveOpt.read(view, position);\n case OptCode.PADDING:\n return paddingOpt.read(view, position);\n case OptCode.KEY_TAG:\n return tagOpt.read(view, position);\n default:\n const opt = unknownOpt.read(view, position);\n opt.code = code;\n return opt;\n }\n },\n};\n","import {\n type Encoder,\n withRDLength,\n array,\n textDecoder,\n advance,\n uint16,\n bytes,\n ipv4,\n ipv6,\n string,\n} from './encoders';\n\nexport const enum SvcParamCode {\n Mandatory = 0,\n Alpn = 1,\n NoDefaultAlpn = 2,\n Port = 3,\n Ipv4Hint = 4,\n EchConfig = 5,\n Ipv6Hint = 6,\n DohPath = 7,\n Odoh = 32769,\n}\n\nexport interface SvcParams {\n mandatory?: (SvcParamCode | (number & {}))[];\n alpn?: string[];\n 'no-default-alpn'?: boolean;\n port?: number;\n ipv4hint?: string[];\n ipv6hint?: string[];\n echconfig?: Uint8Array;\n dohpath?: string;\n odoh?: Uint8Array;\n}\n\nconst mandatorySvcParam: Encoder<(SvcParamCode | (number & {}))[]> =\n withRDLength(array(uint16));\nconst alpnSvcParam = withRDLength(array(string));\nconst portSvcParam = withRDLength(uint16);\nconst ipv4HintSvcParam = withRDLength(array(ipv4));\nconst ipv6HintSvcParam = withRDLength(array(ipv6));\nconst bytesSvcParam = withRDLength(bytes);\n\nexport const svcParams: Encoder<SvcParams> = {\n bytes(params) {\n let byteLength = 0;\n if (params.mandatory != null)\n byteLength += mandatorySvcParam.bytes(params.mandatory) + 2;\n if (params.alpn != null) byteLength += alpnSvcParam.bytes(params.alpn) + 2;\n if (params['no-default-alpn']) byteLength += 4;\n if (params.port != null) byteLength += portSvcParam.bytes(params.port) + 2;\n if (params.ipv4hint)\n byteLength += ipv4HintSvcParam.bytes(params.ipv4hint) + 2;\n if (params.ipv6hint)\n byteLength += ipv6HintSvcParam.bytes(params.ipv6hint) + 2;\n if (params.echconfig)\n byteLength += bytesSvcParam.bytes(params.echconfig) + 2;\n if (params.dohpath) byteLength += bytesSvcParam.bytes(params.dohpath) + 2;\n if (params.odoh) byteLength += bytesSvcParam.bytes(params.odoh) + 2;\n return byteLength;\n },\n write(view, offset, params) {\n if (params.mandatory != null) {\n view.setUint16(offset, SvcParamCode.Mandatory);\n offset = mandatorySvcParam.write(view, offset + 2, params.mandatory);\n }\n if (params.alpn != null) {\n view.setUint16(offset, SvcParamCode.Alpn);\n offset = alpnSvcParam.write(view, offset + 2, params.alpn);\n }\n if (params['no-default-alpn']) {\n view.setUint16(offset, SvcParamCode.NoDefaultAlpn);\n offset += 4;\n }\n if (params.port != null) {\n view.setUint16(offset, SvcParamCode.Port);\n offset = portSvcParam.write(view, offset + 2, params.port);\n }\n if (params.ipv4hint) {\n view.setUint16(offset, SvcParamCode.Ipv4Hint);\n offset = ipv4HintSvcParam.write(view, offset + 2, params.ipv4hint);\n }\n if (params.ipv6hint) {\n view.setUint16(offset, SvcParamCode.Ipv6Hint);\n offset = ipv6HintSvcParam.write(view, offset + 2, params.ipv6hint);\n }\n if (params.echconfig) {\n view.setUint16(offset, SvcParamCode.EchConfig);\n offset = bytesSvcParam.write(view, offset + 2, params.echconfig);\n }\n if (params.dohpath) {\n view.setUint16(offset, SvcParamCode.DohPath);\n offset = bytesSvcParam.write(view, offset + 2, params.dohpath);\n }\n if (params.odoh) {\n view.setUint16(offset, SvcParamCode.Odoh);\n offset = bytesSvcParam.write(view, offset + 2, params.odoh);\n }\n return offset;\n },\n read(view, position) {\n const { length, offset } = position;\n const params: SvcParams = {\n mandatory: undefined,\n alpn: undefined,\n 'no-default-alpn': false,\n port: undefined,\n ipv4hint: undefined,\n ipv6hint: undefined,\n echconfig: undefined,\n dohpath: undefined,\n odoh: undefined,\n };\n while (position.offset - offset < length) {\n const code = view.getUint16(position.offset) as\n | SvcParamCode\n | (number & {});\n advance(position, 2);\n switch (code) {\n case SvcParamCode.Mandatory:\n params.mandatory = mandatorySvcParam.read(view, position);\n break;\n case SvcParamCode.Alpn:\n params.alpn = alpnSvcParam.read(view, position);\n break;\n case SvcParamCode.NoDefaultAlpn:\n params['no-default-alpn'] = true;\n advance(position, 2);\n break;\n case SvcParamCode.Port:\n params.port = portSvcParam.read(view, position);\n break;\n case SvcParamCode.Ipv4Hint:\n params.ipv4hint = ipv4HintSvcParam.read(view, position);\n break;\n case SvcParamCode.Ipv6Hint:\n params.ipv6hint = ipv6HintSvcParam.read(view, position);\n break;\n case SvcParamCode.EchConfig:\n params.echconfig = bytesSvcParam.read(view, position);\n break;\n case SvcParamCode.DohPath:\n params.dohpath = textDecoder.decode(\n bytesSvcParam.read(view, position)\n );\n break;\n case SvcParamCode.Odoh:\n params.odoh = bytesSvcParam.read(view, position);\n break;\n default:\n // NOTE: We discard other parameters using the required RDLENGTH field\n bytesSvcParam.read(view, position);\n }\n }\n return params;\n },\n};\n","import { RecordClass, RecordType } from './constants';\nimport { Encoder, advance, octets } from './encoders';\nimport { option, PacketOpt } from './options';\nimport { svcParams, SvcParams } from './svcparams';\nimport {\n withRDLength,\n typeBitmap,\n string,\n bytes,\n name,\n ipv4,\n ipv6,\n array,\n} from './encoders';\n\nexport interface BaseAnswer {\n type: RecordType;\n name: string;\n ttl?: number;\n class?: RecordClass;\n flush?: boolean;\n}\n\nconst answerBytes = withRDLength(bytes);\n\nexport interface NsAnswer extends BaseAnswer {\n type: RecordType.NS;\n data: string;\n}\n\nconst answerName = withRDLength(name);\n\nexport interface AAnswer extends BaseAnswer {\n type: RecordType.A;\n data: string;\n}\n\nconst answerIPv4 = withRDLength(ipv4);\n\nexport interface AAAAAnswer extends BaseAnswer {\n type: RecordType.AAAA;\n data: string;\n}\n\nconst answerIPv6 = withRDLength(ipv6);\n\nexport interface TxtAnswer extends BaseAnswer {\n type: RecordType.TXT;\n data: string[];\n}\n\nexport const answerTxt: Encoder<string[]> = withRDLength(array(string));\n\nexport interface SrvData {\n priority?: number;\n weight?: number;\n port: number;\n target: string;\n}\n\nexport interface SrvAnswer extends BaseAnswer {\n type: RecordType.SRV;\n data: SrvData;\n}\n\nexport const answerSrv: Encoder<SrvData> = withRDLength({\n bytes(data) {\n return name.bytes(data.target) + 6;\n },\n write(view, offset, data) {\n view.setUint16(offset, data.priority || 0);\n view.setUint16(offset + 2, data.weight || 0);\n view.setUint16(offset + 4, data.port || 0);\n return name.write(view, offset + 6, data.target);\n },\n read(view, position) {\n const data: SrvData = { priority: 0, weight: 0, port: 0, target: '' };\n data.priority = view.getUint16(position.offset);\n data.weight = view.getUint16(position.offset + 2);\n data.port = view.getUint16(position.offset + 4);\n advance(position, 6);\n data.target = name.read(view, position);\n return data;\n },\n});\n\nexport interface HInfoData {\n cpu: string;\n os: string;\n}\n\nexport interface HInfoAnswer extends BaseAnswer {\n type: RecordType.HINFO;\n data: HInfoData;\n}\n\nexport const answerHInfo: Encoder<HInfoData> = withRDLength({\n bytes(data) {\n return string.bytes(data.cpu) + string.bytes(data.os);\n },\n write(view, offset, data) {\n offset = string.write(view, offset, data.cpu);\n offset = string.write(view, offset, data.os);\n return offset;\n },\n read(view, position) {\n return {\n cpu: string.read(view, position),\n os: string.read(view, position),\n };\n },\n});\n\nexport interface CaaData {\n flags?: number;\n tag: 'issue' | 'issuewild' | 'iodef';\n value: Uint8Array;\n issuerCritical?: boolean;\n}\n\nexport interface CaaAnswer extends BaseAnswer {\n type: RecordType.CAA;\n data: CaaData;\n}\n\nconst ISSUER_CRITICAL = 1 << 7;\n\nconst toCaaTag = (input: string) => {\n switch (input) {\n case 'issue':\n case 'issuewild':\n case 'iodef':\n return input;\n default:\n return 'issue';\n }\n};\n\nexport const answerCaa: Encoder<CaaData> = withRDLength({\n bytes(data) {\n return string.bytes(data.tag) + bytes.bytes(data.value) + 1;\n },\n write(view, offset, data) {\n let flags = data.flags || 0;\n if (data.issuerCritical) flags = ISSUER_CRITICAL;\n view.setUint8(offset, flags);\n offset = string.write(view, offset + 1, data.tag);\n offset = bytes.write(view, offset, data.value);\n return offset;\n },\n read(view, position) {\n const flags = view.getUint8(position.offset);\n advance(position, 1);\n return {\n flags,\n tag: toCaaTag(string.read(view, position)),\n value: bytes.read(view, position),\n issuerCritical: !!(flags & ISSUER_CRITICAL),\n };\n },\n});\n\nexport interface SoaData {\n mname: string;\n rname: string;\n serial?: number;\n refresh?: number;\n retry?: number;\n expire?: number;\n minimum?: number;\n}\n\nexport interface SoaAnswer extends BaseAnswer {\n type: RecordType.SOA;\n data: SoaData;\n}\n\nexport const answerSoa: Encoder<SoaData> = withRDLength({\n bytes(data) {\n return name.bytes(data.mname) + name.bytes(data.rname) + 20;\n },\n write(view, offset, data) {\n offset = name.write(view, offset, data.mname);\n offset = name.write(view, offset, data.rname);\n view.setUint32(offset, data.serial || 0);\n view.setUint32(offset + 4, data.refresh || 0);\n view.setUint32(offset + 8, data.retry || 0);\n view.setUint32(offset + 12, data.expire || 0);\n view.setUint32(offset + 16, data.minimum || 0);\n return offset + 20;\n },\n read(view, position) {\n const data: SoaData = {\n mname: name.read(view, position),\n rname: name.read(view, position),\n serial: view.getUint32(position.offset),\n refresh: view.getUint32(position.offset + 4),\n retry: view.getUint32(position.offset + 8),\n expire: view.getUint32(position.offset + 12),\n minimum: view.getUint32(position.offset + 16),\n };\n position.offset += 20;\n position.length -= 20;\n return data;\n },\n});\n\nexport interface MxData {\n preference?: number;\n exchange: string;\n}\n\nexport interface MxAnswer extends BaseAnswer {\n type: RecordType.MX;\n data: MxData;\n}\n\nexport const answerMx: Encoder<MxData> = withRDLength({\n bytes(data) {\n return name.bytes(data.exchange) + 2;\n },\n write(view, offset, data) {\n view.setUint16(offset, data.preference || 0);\n return name.write(view, offset + 2, data.exchange);\n },\n read(view, position) {\n const data: MxData = {\n preference: view.getUint16(position.offset),\n exchange: '',\n };\n advance(position, 2);\n data.exchange = name.read(view, position);\n return data;\n },\n});\n\nexport interface DnskeyData {\n flags: number;\n algorithm: number;\n key: Uint8Array;\n}\n\nexport interface DnskeyAnswer extends BaseAnswer {\n type: RecordType.DNSKEY;\n data: DnskeyData;\n}\n\nexport const answerDnskey: Encoder<DnskeyData> = withRDLength({\n bytes(data) {\n return bytes.bytes(data.key) + 4;\n },\n write(view, offset, data) {\n const PROTOCOL_DNSSEC = 3;\n view.setUint16(offset, data.flags);\n view.setUint8(offset + 2, PROTOCOL_DNSSEC);\n view.setUint8(offset + 3, data.algorithm);\n return bytes.write(view, offset + 4, data.key);\n },\n read(view, position) {\n const flags = view.getUint16(position.offset);\n const algorithm = view.getUint8(position.offset + 3);\n advance(position, 4);\n return {\n flags,\n algorithm,\n key: bytes.read(view, position),\n };\n },\n});\n\nexport interface RrsigData {\n typeCovered: RecordType;\n algorithm: number;\n labels: number;\n originalTTL: number;\n expiration: number;\n inception: number;\n keyTag: number;\n signersName: string;\n signature: Uint8Array;\n}\n\nexport interface RrsigAnswer extends BaseAnswer {\n type: RecordType.RRSIG;\n data: RrsigData;\n}\n\nexport const answerRrsig: Encoder<RrsigData> = withRDLength({\n bytes(data) {\n return 18 + name.bytes(data.signersName) + bytes.bytes(data.signature);\n },\n write(view, offset, data) {\n view.setUint16(offset, data.typeCovered);\n view.setUint8(offset + 2, data.algorithm);\n view.setUint8(offset + 3, data.labels);\n view.setUint32(offset + 4, data.originalTTL);\n view.setUint32(offset + 8, data.expiration);\n view.setUint32(offset + 12, data.inception);\n view.setUint16(offset + 16, data.keyTag);\n offset = name.write(view, offset + 18, data.signersName);\n offset = bytes.write(view, offset, data.signature);\n return offset;\n },\n read(view, position) {\n const typeCovered = view.getUint16(position.offset);\n const algorithm = view.getUint8(position.offset + 2);\n const labels = view.getUint8(position.offset + 3);\n const originalTTL = view.getUint32(position.offset + 4);\n const expiration = view.getUint32(position.offset + 8);\n const inception = view.getUint32(position.offset + 12);\n const keyTag = view.getUint16(position.offset + 16);\n advance(position, 18);\n return {\n typeCovered,\n algorithm,\n labels,\n originalTTL,\n expiration,\n inception,\n keyTag,\n signersName: name.read(view, position),\n signature: bytes.read(view, position),\n };\n },\n});\n\nexport interface RpData {\n mbox: string;\n txt: string;\n}\n\nexport interface RpAnswer extends BaseAnswer {\n type: RecordType.RP;\n data: RpData;\n}\n\nexport const answerRp: Encoder<RpData> = withRDLength({\n bytes(data) {\n return name.bytes(data.mbox) + name.bytes(data.txt);\n },\n write(view, offset, data) {\n offset = name.write(view, offset, data.mbox);\n offset = name.write(view, offset, data.txt);\n return offset;\n },\n read(view, position) {\n return {\n mbox: name.read(view, position),\n txt: name.read(view, position),\n };\n },\n});\n\nexport interface NsecData {\n nextDomain: string;\n rrtypes: RecordType[];\n}\n\nexport interface NsecAnswer extends BaseAnswer {\n type: RecordType.NSEC;\n data: NsecData;\n}\n\nexport const answerNsec: Encoder<NsecData> = withRDLength({\n bytes(data) {\n return name.bytes(data.nextDomain) + typeBitmap.bytes(data.rrtypes);\n },\n write(view, offset, data) {\n offset = name.write(view, offset, data.nextDomain);\n offset = typeBitmap.write(view, offset, data.rrtypes);\n return offset;\n },\n read(view, position) {\n return {\n nextDomain: name.read(view, position),\n rrtypes: typeBitmap.read(view, position),\n };\n },\n});\n\nexport interface Nsec3Data {\n algorithm: number;\n flags: number;\n iterations: number;\n salt: Uint8Array;\n nextDomain: Uint8Array;\n rrtypes: RecordType[];\n}\n\nexport interface Nsec3Answer extends BaseAnswer {\n type: RecordType.NSEC3;\n data: Nsec3Data;\n}\n\nexport const answerNsec3: Encoder<Nsec3Data> = withRDLength({\n bytes(data) {\n return (\n octets.bytes(data.salt) +\n octets.bytes(data.nextDomain) +\n typeBitmap.bytes(data.rrtypes) +\n 4\n );\n },\n write(view, offset, data) {\n view.setUint8(offset, data.algorithm);\n view.setUint8(offset + 1, data.flags);\n view.setUint16(offset + 2, data.iterations);\n offset = octets.write(view, offset + 4, data.salt);\n offset = octets.write(view, offset, data.nextDomain);\n offset = typeBitmap.write(view, offset, data.rrtypes);\n return offset;\n },\n read(view, position) {\n const algorithm = view.getUint8(position.offset);\n const flags = view.getUint8(position.offset + 1);\n const iterations = view.getUint16(position.offset + 2);\n advance(position, 4);\n return {\n algorithm,\n flags,\n iterations,\n salt: octets.read(view, position),\n nextDomain: octets.read(view, position),\n rrtypes: typeBitmap.read(view, position),\n };\n },\n});\n\nexport interface SshfpData {\n algorithm: number;\n hash: number;\n fingerprint: Uint8Array;\n}\n\nexport interface SshfpAnswer extends BaseAnswer {\n type: RecordType.SSHFP;\n data: SshfpData;\n}\n\nexport const answerSshfp: Encoder<SshfpData> = withRDLength({\n bytes(data) {\n return bytes.bytes(data.fingerprint) + 2;\n },\n write(view, offset, data) {\n view.setUint8(offset, data.algorithm);\n view.setUint8(offset + 1, data.hash);\n return bytes.write(view, offset + 2, data.fingerprint);\n },\n read(view, position) {\n const algorithm = view.getUint8(position.offset);\n const hash = view.getUint8(position.offset + 1);\n advance(position, 2);\n return {\n algorithm,\n hash,\n fingerprint: bytes.read(view, position),\n };\n },\n});\n\nexport interface DsData {\n keyTag: number;\n algorithm: number;\n digestType: number;\n digest: Uint8Array;\n}\n\nexport interface DsAnswer extends BaseAnswer {\n type: RecordType.DS;\n data: DsData;\n}\n\nexport const answerDs: Encoder<DsData> = withRDLength({\n bytes(data) {\n return bytes.bytes(data.digest) + 4;\n },\n write(view, offset, data) {\n view.setUint16(offset, data.keyTag);\n view.setUint8(offset + 2, data.algorithm);\n view.setUint8(offset + 3, data.digestType);\n offset = bytes.write(view, offset + 4, data.digest);\n return offset;\n },\n read(view, position) {\n const keyTag = view.getUint16(position.offset);\n const algorithm = view.getUint8(position.offset + 2);\n const digestType = view.getUint8(position.offset + 3);\n advance(position, 4);\n return {\n keyTag,\n algorithm,\n digestType,\n digest: bytes.read(view, position),\n };\n },\n});\n\nexport interface NaptrData {\n order: number;\n preference: number;\n flags: string;\n services: string;\n regexp: string;\n replacement: string;\n}\n\nexport interface NaptrAnswer extends BaseAnswer {\n type: RecordType.NAPTR;\n data: NaptrData;\n}\n\nexport const answerNaptr: Encoder<NaptrData> = withRDLength({\n bytes(data) {\n return (\n string.bytes(data.flags) +\n string.bytes(data.services) +\n string.bytes(data.regexp) +\n name.bytes(data.replacement) +\n 4\n );\n },\n write(view, offset, data) {\n view.setUint16(offset, data.order);\n view.setUint16(offset + 2, data.preference);\n offset = string.write(view, offset + 4, data.flags);\n offset = string.write(view, offset, data.services);\n offset = string.write(view, offset, data.regexp);\n offset = name.write(view, offset, data.replacement);\n return offset;\n },\n read(view, position) {\n const order = view.getUint16(position.offset);\n const preference = view.getUint16(position.offset + 2);\n advance(position, 4);\n return {\n order,\n preference,\n flags: string.read(view, position),\n services: string.read(view, position),\n regexp: string.read(view, position),\n replacement: name.read(view, position),\n };\n },\n});\n\nexport interface TlsaData {\n usage: number;\n selector: number;\n matchingType: number;\n certificate: Uint8Array;\n}\n\nexport interface TlsaAnswer extends BaseAnswer {\n type: RecordType.TLSA;\n data: TlsaData;\n}\n\nexport const answerTlsa: Encoder<TlsaData> = withRDLength({\n bytes(data) {\n return bytes.bytes(data.certificate) + 3;\n },\n write(view, offset, data) {\n view.setUint8(offset, data.usage);\n view.setUint8(offset + 1, data.selector);\n view.setUint8(offset + 2, data.matchingType);\n return bytes.write(view, offset + 3, data.certificate);\n },\n read(view, position) {\n const usage = view.getUint8(position.offset);\n const selector = view.getUint8(position.offset + 1);\n const matchingType = view.getUint8(position.offset + 2);\n advance(position, 3);\n return {\n usage,\n selector,\n matchingType,\n certificate: bytes.read(view, position),\n };\n },\n});\n\nexport interface SvcbData {\n name: string;\n priority?: number;\n params: SvcParams;\n}\n\nexport interface SvcbAnswer extends BaseAnswer {\n type: RecordType.SVCB;\n data: SvcbData;\n}\n\nexport interface HttpsAnswer extends BaseAnswer {\n type: RecordType.HTTPS;\n data: SvcbData;\n}\n\nexport const answerSvcb: Encoder<SvcbData> = withRDLength({\n bytes(data) {\n return name.bytes(data.name) + svcParams.bytes(data.params) + 2;\n },\n write(view, offset, data) {\n view.setUint16(offset, data.priority || 0);\n offset = name.write(view, offset + 2, data.name);\n offset = svcParams.write(view, offset, data.params);\n return offset;\n },\n read(view, position) {\n const priority = view.getUint16(position.offset);\n advance(position, 2);\n return {\n name: name.read(view, position),\n priority,\n params: svcParams.read(view, position),\n };\n },\n});\n\nexport interface OptAnswer {\n type: RecordType.OPT;\n name?: '.';\n udpPayloadSize: number;\n extendedRcode: number;\n ednsVersion: number;\n flags: number;\n data: PacketOpt[];\n}\n\nexport const answerOpt: Encoder<PacketOpt[]> = withRDLength(array(option));\n\nexport interface PtrAnswer extends BaseAnswer {\n type: RecordType.PTR;\n data: string;\n}\n\nexport interface CnameAnswer extends BaseAnswer {\n type: RecordType.CNAME;\n data: string;\n}\n\nexport interface DnameAnswer extends BaseAnswer {\n type: RecordType.DNAME;\n data: string;\n}\n\nexport interface NullAnswer extends BaseAnswer {\n type: RecordType.NULL;\n data: Uint8Array | string;\n}\n\nexport interface UnknownAnswer extends BaseAnswer {\n type:\n | RecordType.AFSDB\n | RecordType.APL\n | RecordType.AXFR\n | RecordType.CDNSKEY\n | RecordType.CDS\n | RecordType.CERT\n | RecordType.DHCID\n | RecordType.DLV\n | RecordType.HIP\n | RecordType.IPSECKEY\n | RecordType.IXFR\n | RecordType.KEY\n | RecordType.KX\n | RecordType.LOC\n | RecordType.NSEC3PARAM\n | RecordType.NULL\n | RecordType.SIG\n | RecordType.TA\n | RecordType.TKEY\n | RecordType.TSIG;\n data: Uint8Array | string;\n}\n\nexport type Answer =\n | AAnswer\n | AAAAAnswer\n | TxtAnswer\n | SrvAnswer\n | HInfoAnswer\n | CaaAnswer\n | NsAnswer\n | SoaAnswer\n | MxAnswer\n | OptAnswer\n | DnskeyAnswer\n | RrsigAnswer\n | RpAnswer\n | NsecAnswer\n | Nsec3Answer\n | SshfpAnswer\n | DsAnswer\n | NaptrAnswer\n | TlsaAnswer\n | PtrAnswer\n | CnameAnswer\n | DnameAnswer\n | SvcbAnswer\n | HttpsAnswer\n | NullAnswer\n | UnknownAnswer;\n\nconst FLUSH_MASK = 1 << 15;\n\nexport const answer: Encoder<Answer> = {\n bytes(answer) {\n const byteLength =\n 8 + name.bytes(answer.type === RecordType.OPT ? '.' : answer.name);\n switch (answer.type) {\n case RecordType.A:\n return byteLength + answerIPv4.bytes(answer.data);\n case RecordType.NS:\n return byteLength + answerName.bytes(answer.data);\n case RecordType.SOA:\n return byteLength + answerSoa.bytes(answer.data);\n case RecordType.HINFO:\n return byteLength + answerHInfo.bytes(answer.data);\n case RecordType.MX:\n return byteLength + answerMx.bytes(answer.data);\n case RecordType.TXT:\n return byteLength + answerTxt.bytes(answer.data);\n case RecordType.RP:\n return byteLength + answerRp.bytes(answer.data);\n case RecordType.AAAA:\n return byteLength + answerIPv6.bytes(answer.data);\n case RecordType.SRV:\n return byteLength + answerSrv.bytes(answer.data);\n case RecordType.NAPTR:\n return byteLength + answerNaptr.bytes(answer.data);\n case RecordType.OPT:\n return byteLength + answerOpt.bytes(answer.data);\n case RecordType.DS:\n return byteLength + answerDs.bytes(answer.data);\n case RecordType.SSHFP:\n return byteLength + answerSshfp.bytes(answer.data);\n case RecordType.RRSIG:\n return byteLength + answerRrsig.bytes(answer.data);\n case RecordType.NSEC:\n return byteLength + answerNsec.bytes(answer.data);\n case RecordType.DNSKEY:\n return byteLength + answerDnskey.bytes(answer.data);\n case RecordType.NSEC3:\n return byteLength + answerNsec3.bytes(answer.data);\n case RecordType.TLSA:\n return byteLength + answerTlsa.bytes(answer.data);\n case RecordType.SVCB:\n case RecordType.HTTPS:\n return byteLength + answerSvcb.bytes(answer.data);\n case RecordType.CAA:\n return byteLength + answerCaa.bytes(answer.data);\n case RecordType.PTR:\n case RecordType.CNAME:\n case RecordType.DNAME:\n return byteLength + answerName.bytes(answer.data);\n default:\n return byteLength + answerBytes.bytes(answer.data);\n }\n },\n write(view, offset, answer) {\n if (answer.type === RecordType.OPT) {\n offset = name.write(view, offset, '.');\n view.setUint16(offset, answer.type);\n view.setUint16(offset + 2, answer.udpPayloadSize || 4_096);\n view.setUint8(offset + 4, answer.extendedRcode || 0);\n view.setUint8(offset + 5, answer.ednsVersion || 0);\n view.setUint16(offset + 6, answer.flags || 0);\n offset += 8;\n return answerOpt.write(view, offset, answer.data);\n }\n offset = name.write(view, offset, answer.name);\n view.setUint16(offset, answer.type);\n view.setUint16(\n offset + 2,\n (answer.class || 0) | (answer.flush ? FLUSH_MASK : 0)\n );\n view.setUint32(offset + 4, answer.ttl || 0);\n offset += 8;\n switch (answer.type) {\n case RecordType.A:\n return answerIPv4.write(view, offset, answer.data);\n case RecordType.NS:\n return answerName.write(view, offset, answer.data);\n case RecordType.SOA:\n return answerSoa.write(view, offset, answer.data);\n case RecordType.HINFO:\n return answerHInfo.write(view, offset, answer.data);\n case RecordType.MX:\n return answerMx.write(view, offset, answer.data);\n case RecordType.TXT:\n return answerTxt.write(view, offset, answer.data);\n case RecordType.RP:\n return answerRp.write(view, offset, answer.data);\n case RecordType.AAAA:\n return answerIPv6.write(view, offset, answer.data);\n case RecordType.SRV:\n return answerSrv.write(view, offset, answer.data);\n case RecordType.NAPTR:\n return answerNaptr.write(view, offset, answer.data);\n case RecordType.DS:\n return answerDs.write(view, offset, answer.data);\n case RecordType.SSHFP:\n return answerSshfp.write(view, offset, answer.data);\n case RecordType.RRSIG:\n return answerRrsig.write(view, offset, answer.data);\n case RecordType.NSEC:\n return answerNsec.write(view, offset, answer.data);\n case RecordType.DNSKEY:\n return answerDnskey.write(view, offset, answer.data);\n case RecordType.NSEC3:\n return answerNsec3.write(view, offset, answer.data);\n case RecordType.TLSA:\n return answerTlsa.write(view, offset, answer.data);\n case RecordType.SVCB:\n case RecordType.HTTPS:\n return answerSvcb.write(view, offset, answer.data);\n case RecordType.CAA:\n return answerCaa.write(view, offset, answer.data);\n case RecordType.PTR:\n case RecordType.CNAME:\n case RecordType.DNAME:\n return answerName.write(view, offset, answer.data);\n default:\n return answerBytes.write(view, offset, answer.data);\n }\n },\n read(view, position) {\n const _name = name.read(view, position);\n const type = view.getUint16(position.offset);\n if (type === RecordType.OPT) {\n const udpPayloadSize = view.getUint16(position.offset + 2) || 4_096;\n const extendedRcode = view.getUint8(position.offset + 4);\n const ednsVersion = view.getUint8(position.offset + 5);\n const flags = view.getUint16(position.offset + 6);\n advance(position, 8);\n return {\n type,\n udpPayloadSize,\n extendedRcode,\n ednsVersion,\n flags,\n data: answerOpt.read(view, position),\n };\n }\n const _class = view.getUint16(position.offset + 2);\n const ttl = view.getUint32(position.offset + 4);\n advance(position, 8);\n const answer: Answer = {\n name: _name,\n type,\n class: _class & ~FLUSH_MASK,\n flush: !!(_class & FLUSH_MASK),\n ttl,\n data: null as any,\n };\n switch (answer.type) {\n case RecordType.A:\n answer.data = answerIPv4.read(view, position);\n return answer;\n case RecordType.NS:\n answer.data = answerName.read(view, position);\n return answer;\n case RecordType.SOA:\n answer.data = answerSoa.read(view, position);\n return answer;\n case RecordType.HINFO:\n answer.data = answerHInfo.read(view, position);\n return answer;\n case RecordType.MX:\n answer.data = answerMx.read(view, position);\n return answer;\n case RecordType.TXT:\n answer.data = answerTxt.read(view, position);\n return answer;\n case RecordType.RP:\n answer.data = answerRp.read(view, position);\n return answer;\n case RecordType.AAAA:\n answer.data = answerIPv6.read(view, position);\n return answer;\n case RecordType.SRV:\n answer.data = answerSrv.read(view, position);\n return answer;\n case RecordType.NAPTR:\n answer.data = answerNaptr.read(view, position);\n return answer;\n case RecordType.DS:\n answer.data = answerDs.read(view, position);\n return answer;\n case RecordType.SSHFP:\n answer.data = answerSshfp.read(view, position);\n return answer;\n case RecordType.RRSIG:\n answer.data = answerRrsig.read(view, position);\n return answer;\n case RecordType.NSEC:\n answer.data = answerNsec.read(view, position);\n return answer;\n case RecordType.DNSKEY:\n answer.data = answerDnskey.read(view, position);\n return answer;\n case RecordType.NSEC3:\n answer.data = answerNsec3.read(view, position);\n return answer;\n case RecordType.TLSA:\n answer.data = answerTlsa.read(view, position);\n return answer;\n case RecordType.SVCB:\n case RecordType.HTTPS:\n answer.data = answerSvcb.read(view, position);\n return answer;\n case RecordType.CAA:\n answer.data = answerCaa.read(view, position);\n return answer;\n case RecordType.PTR:\n case RecordType.CNAME:\n case RecordType.DNAME:\n answer.data = answerName.read(view, position);\n return answer;\n default:\n answer.data = answerBytes.read(view, position);\n return answer;\n }\n },\n};\n","import { type PacketFlag, PacketRType, PacketType } from './constants';\nimport { type Encoder, type ReadPosition, advance } from './encoders';\nimport { type Question, question } from './questions';\nimport { type Answer, answer } from './answers';\n\nconst readList = <T>(\n encoder: Encoder<T>,\n view: DataView,\n position: ReadPosition,\n limit: number\n): T[] | undefined => {\n if (!limit) {\n return undefined;\n }\n const { offset, length } = position;\n const data: T[] = [];\n for (let idx = 0; idx < limit && position.offset - offset < length; idx++)\n data.push(encoder.read(view, position));\n return data;\n};\n\nexport interface Packet {\n id?: number;\n type?: PacketType;\n rtype?: PacketRType;\n flags?: PacketFlag | (number & {});\n questions?: Question[];\n answers?: Answer[];\n additionals?: Answer[];\n authorities?: Answer[];\n}\n\nconst PACKET_FLAG_MASK = 32767;\n\nexport const packet: Encoder<Packet> = {\n bytes(packet) {\n const { questions, answers, authorities, additionals } = packet;\n let byteLength = 12;\n let idx = 0;\n for (idx = 0; questions && idx < questions.length; idx++)\n byteLength += question.bytes(questions[idx]);\n for (idx = 0; answers && idx < answers.length; idx++)\n byteLength += answer.bytes(answers[idx]);\n for (idx = 0; authorities && idx < authorities.length; idx++)\n byteLength += answer.bytes(authorities[idx]);\n for (idx = 0; additionals && idx < additionals.length; idx++)\n byteLength += answer.bytes(additionals[idx]);\n return byteLength;\n },\n write(view, offset, packet) {\n const { questions, answers, authorities, additionals } = packet;\n let flags =\n ((packet.flags || 0) & PACKET_FLAG_MASK) |\n (packet.type || PacketType.QUERY) |\n (packet.rtype || 0);\n view.setUint16(offset, packet.id || 0);\n view.setUint16(offset + 2, flags);\n view.setUint16(offset + 4, packet.questions?.length || 0);\n view.setUint16(offset + 6, packet.answers?.length || 0);\n view.setUint16(offset + 8, packet.authorities?.length || 0);\n view.setUint16(offset + 10, packet.additionals?.length || 0);\n offset += 12;\n let idx = 0;\n for (idx = 0; questions && idx < questions.length; idx++)\n offset = question.write(view, offset, questions[idx]);\n for (idx = 0; answers && idx < answers.length; idx++)\n offset = answer.write(view, offset, answers[idx]);\n for (idx = 0; authorities && idx < authorities.length; idx++)\n offset = answer.write(view, offset, authorities[idx]);\n for (idx = 0; additionals && idx < additionals.length; idx++)\n offset = answer.write(view, offset, additionals[idx]);\n return offset;\n },\n read(view, position) {\n const id = view.getUint16(position.offset);\n const flags = view.getUint16(position.offset + 2);\n const questionsLength = view.getUint16(position.offset + 4);\n const answersLength = view.getUint16(position.offset + 6);\n const authoritiesLength = view.getUint16(position.offset + 8);\n const additionalsLength = view.getUint16(position.offset + 10);\n advance(position, 12);\n return {\n id,\n flags,\n rtype: flags & 0xf,\n type:\n flags & PacketType.RESPONSE ? PacketType.RESPONSE : PacketType.QUERY,\n questions: readList(question, view, position, questionsLength),\n answers: readList(answer, view, position, answersLength),\n authorities: readList(answer, view, position, authoritiesLength),\n additionals: readList(answer, view, position, additionalsLength),\n };\n },\n};\n","import { type Packet, packet } from './packets';\n\nexport type {\n NsAnswer,\n AAnswer,\n AAAAAnswer,\n TxtAnswer,\n SrvAnswer,\n HInfoAnswer,\n CaaAnswer,\n SoaAnswer,\n MxAnswer,\n DnskeyAnswer,\n RrsigAnswer,\n RpAnswer,\n NsecAnswer,\n Nsec3Answer,\n SshfpAnswer,\n DsAnswer,\n NaptrAnswer,\n TlsaAnswer,\n PtrAnswer,\n CnameAnswer,\n DnameAnswer,\n NullAnswer,\n UnknownAnswer,\n Answer,\n} from './answers';\n\nexport type {\n IPType,\n ClientSubnetOpt,\n KeepAliveOpt,\n PaddingOpt,\n TagOpt,\n UnknownOpt,\n PacketOpt,\n} from './options';\nexport type { Packet } from './packets';\nexport type { Question } from './questions';\nexport * from './constants';\n\nexport function decode(bytes: ArrayBufferView | ArrayBufferLike): Packet {\n const view =\n 'buffer' in bytes\n ? new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength)\n : new DataView(bytes);\n return packet.read(view, { offset: 0, length: view.byteLength });\n}\n\nexport function streamDecode(bytes: ArrayBufferView | ArrayBufferLike): Packet {\n const view =\n 'buffer' in bytes\n ? new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength)\n : new DataView(bytes);\n const length = Math.min(view.byteLength - 2, view.getUint16(0));\n return packet.read(view, { offset: 2, length });\n}\n\nexport function encodingLength(input: Packet): number {\n return packet.bytes(input);\n}\n\nexport function encode(input: Packet): Uint8Array {\n const buffer = new ArrayBuffer(packet.bytes(input));\n const length = packet.write(new DataView(buffer), 0, input);\n return new Uint8Array(buffer, 0, length);\n}\n\nexport function streamEncode(input: Packet): Uint8Array {\n const buffer = new ArrayBuffer(packet.bytes(input) + 2);\n const view = new DataView(buffer);\n const length = packet.write(view, 2, input);\n view.setUint16(0, length - 2);\n return new Uint8Array(buffer, 0, length);\n}\n"],"names":["PacketType","RecordType","RecordClass","PacketFlag","OptCode","textEncoder","TextEncoder","textDecoder","TextDecoder","utf8ByteLength","Buffer","str","byteLength","length","i","code","charCodeAt","name","bytes","replace","RangeError","write","view","offset","encoded","encode","startIdx","endIdx","indexOf","byteIdx","idx","setUint8","read","outerPosition","labels","maxOffset","innerPosition","labelLength","getUint8","advance","label","sliceView","push","decode","jumpTo","getUint16","join","data","Uint8Array","buffer","byteOffset","set","position","octets","string","typeBitmap","types","extents","Math","max","ceil","typesByWindow","window","typelist","windowLength","bitmap","bit","ipv4","ip","split","octetIdx","parseInt","min","Array","fill","map","_","index","uint16","key","setUint16","ipv6","middleIdx","head","slice","tail","includes","pop","undefined","headIdx","pad","tailIdx","v4Parts","part","output","toString","withRDLength","encoder","startOffset","rdlength","array","QU_BIT","question","_class","class","IN","qu","type","_name","ANY","IPType","unknownOpt","option","OPTION_0","v4Seg","ipv4Re","RegExp","clientSubnetOpt","sourcePrefixLength","scopePrefixLength","family","test","v4","v6","maskLength","ipBuffer","encodeIntoBuffer","input","ArrayBuffer","endOffset","DataView","CLIENT_SUBNET","keepAliveOpt","timeout","TCP_KEEPALIVE","paddingOpt","_view","PADDING","tagOpt","tags","KEY_TAG","isUnknownOpt","opt","SvcParamCode","mandatorySvcParam","alpnSvcParam","portSvcParam","ipv4HintSvcParam","ipv6HintSvcParam","bytesSvcParam","svcParams","params","mandatory","alpn","port","ipv4hint","ipv6hint","echconfig","dohpath","odoh","Mandatory","Alpn","NoDefaultAlpn","Port","Ipv4Hint","Ipv6Hint","EchConfig","DohPath","Odoh","answerBytes","answerName","answerIPv4","answerIPv6","answerTxt","answerSrv","target","priority","weight","answerHInfo","cpu","os","toCaaTag","answerCaa","tag","value","flags","issuerCritical","answerSoa","mname","rname","setUint32","serial","refresh","retry","expire","minimum","getUint32","answerMx","exchange","preference","answerDnskey","algorithm","answerRrsig","signersName","signature","typeCovered","originalTTL","expiration","inception","keyTag","answerRp","mbox","txt","answerNsec","nextDomain","rrtypes","answerNsec3","salt","iterations","answerSshfp","fingerprint","hash","answerDs","digest","digestType","answerNaptr","services","regexp","replacement","order","answerTlsa","certificate","usage","selector","matchingType","answerSvcb","answerOpt","FLUSH_MASK","answer","OPT","A","NS","SOA","HINFO","MX","TXT","RP","AAAA","SRV","NAPTR","DS","SSHFP","RRSIG","NSEC","DNSKEY","NSEC3","TLSA","SVCB","HTTPS","CAA","PTR","CNAME","DNAME","udpPayloadSize","extendedRcode","ednsVersion","flush","ttl","readList","limit","packet","questions","answers","authorities","additionals","QUERY","rtype","id","questionsLength","answersLength","authoritiesLength","additionalsLength","RESPONSE","streamDecode","encodingLength","streamEncode"],"mappings":"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"}
1
+ {"version":3,"file":"dns-message.mjs","sources":["../src/constants.ts","../src/encoders.ts","../src/questions.ts","../src/options.ts","../src/svcparams.ts","../src/answers.ts","../src/packets.ts","../src/index.ts"],"sourcesContent":["export const enum PacketType {\n QUERY = 0,\n RESPONSE = 1 << 15,\n}\n\nexport const enum RecordType {\n A = 1,\n NS = 2,\n CNAME = 5,\n SOA = 6,\n NULL = 10,\n PTR = 12,\n HINFO = 13,\n MX = 15,\n TXT = 16,\n RP = 17,\n AFSDB = 18,\n SIG = 24,\n KEY = 25,\n AAAA = 28,\n LOC = 29,\n SRV = 33,\n NAPTR = 35,\n KX = 36,\n CERT = 37,\n DNAME = 39,\n OPT = 41,\n APL = 42,\n DS = 43,\n SSHFP = 44,\n IPSECKEY = 45,\n RRSIG = 46,\n NSEC = 47,\n DNSKEY = 48,\n DHCID = 49,\n NSEC3 = 50,\n NSEC3PARAM = 51,\n TLSA = 52,\n HIP = 55,\n CDS = 59,\n CDNSKEY = 60,\n SVCB = 64,\n HTTPS = 65,\n SPF = 99,\n TKEY = 249,\n TSIG = 250,\n IXFR = 251,\n AXFR = 252,\n ANY = 255,\n CAA = 257,\n TA = 32768,\n DLV = 32769,\n}\n\nexport const enum RecordClass {\n IN = 1,\n CS = 2,\n CH = 3,\n HS = 4,\n ANY = 255,\n}\n\nexport const enum PacketFlag {\n NOERR = 0,\n FORMERR = 1,\n SERVFAIL = 2,\n NXDOMAIN = 3,\n NOTIMP = 4,\n REFUSED = 5,\n YXDOMAIN = 6,\n YXRRSET = 7,\n NXRRSET = 8,\n NOTAUTH = 9,\n NOTZONE = 10,\n\n CHECKING_DISABLED = 1 << 4,\n AUTHENTIC_DATA = 1 << 5,\n RECURSION_AVAILABLE = 1 << 7,\n RECURSION_DESIRED = 1 << 8,\n TRUNCATED_RESPONSE = 1 << 9,\n AUTHORITATIVE_ANSWER = 1 << 10,\n}\n\nexport type PacketRType =\n | PacketFlag.NOERR\n | PacketFlag.FORMERR\n | PacketFlag.SERVFAIL\n | PacketFlag.NXDOMAIN\n | PacketFlag.NOTIMP\n | PacketFlag.REFUSED\n | PacketFlag.YXDOMAIN\n | PacketFlag.YXRRSET\n | PacketFlag.NXRRSET\n | PacketFlag.NOTAUTH\n | PacketFlag.NOTZONE;\n\nexport const enum OptCode {\n OPTION_0 = 0,\n LLQ = 1,\n UL = 2,\n NSID = 3,\n OPTION_4 = 4,\n DAU = 5,\n DHU = 6,\n N3U = 7,\n CLIENT_SUBNET = 8,\n EXPIRE = 9,\n COOKIE = 10,\n TCP_KEEPALIVE = 11,\n PADDING = 12,\n CHAIN = 13,\n KEY_TAG = 14,\n DEVICEID = 26946,\n OPTION_65535 = 65535,\n}\n","import type { RecordType } from './constants';\n\nexport interface ReadPosition {\n offset: number;\n length: number;\n}\n\nexport interface Encoder<T, R = T> {\n bytes(input: T): number;\n write(view: DataView, offset: number, input: T): number;\n read(view: DataView, position: ReadPosition): R;\n}\n\nexport const textEncoder = new TextEncoder();\nexport const textDecoder = new TextDecoder();\n\nconst utf8ByteLength =\n typeof Buffer !== 'undefined'\n ? (str: string) => Buffer.byteLength(str)\n : (str: string) => {\n let length = str.length;\n for (let i = length - 1; i >= 0; i--) {\n const code = str.charCodeAt(i);\n if (code > 0x7f && code <= 0x7ff) {\n length++;\n } else if (code > 0x7ff && code <= 0xffff) {\n length += 2;\n }\n // UTF-16 Trail Surrogate\n if (code >= 0xdc00 && code <= 0xdfff) {\n i--;\n }\n }\n return length;\n };\n\nconst LABEL_LIMIT = 63;\nconst NAME_LIMIT = 255;\n\nexport const name: Encoder<string> = {\n bytes(str) {\n let length = 2;\n switch (str) {\n case '':\n case '.':\n case '..':\n return 1;\n default:\n if (str[0] === '.') length--;\n if (str[str.length - 1] === '.') length--;\n length += str.replace(/\\\\\\./g, '.').length;\n if (length > NAME_LIMIT)\n throw new RangeError(\n `Name \"${str}\" is above ${NAME_LIMIT} byte limit.`\n );\n return length;\n }\n },\n write(view, offset, str) {\n const encoded = textEncoder.encode(str);\n for (\n let startIdx = encoded[0] === 46 /*'.'*/ ? 1 : 0, endIdx = 0;\n startIdx < encoded.byteLength;\n startIdx = endIdx + 1\n ) {\n endIdx = encoded.indexOf(46 /*'.'*/, startIdx);\n while (endIdx > -1 && encoded[endIdx - 1] === 92 /*'\\\\'*/)\n endIdx = encoded.indexOf(46 /*'.'*/, endIdx + 1);\n if (endIdx === -1) endIdx = encoded.byteLength;\n if (endIdx === startIdx) {\n continue;\n } else if (endIdx - startIdx > LABEL_LIMIT) {\n throw new RangeError(\n `Label in \"${str}\" is above ${LABEL_LIMIT} byte limit.`\n );\n }\n let byteIdx = offset + 1;\n for (let idx = startIdx; idx < endIdx; idx++) {\n if (encoded[idx] === 92 /*'\\\\'*/ && encoded[idx + 1] === 46 /*'.'*/)\n idx++;\n view.setUint8(byteIdx++, encoded[idx]);\n }\n view.setUint8(offset, byteIdx - offset - 1);\n offset = byteIdx;\n startIdx = endIdx + 1;\n }\n return offset + 1;\n },\n read(view, outerPosition) {\n const labels: string[] = [];\n let maxOffset = outerPosition.offset;\n let innerPosition = outerPosition;\n while (true) {\n const labelLength = view.getUint8(innerPosition.offset);\n if (labelLength === 0) {\n advance(innerPosition, 1);\n break;\n } else if ((labelLength & 0xc0) === 0) {\n advance(innerPosition, 1);\n const label = sliceView(view, innerPosition, labelLength);\n labels.push(textDecoder.decode(label).replace(/\\./g, '\\\\.'));\n } else {\n const jumpTo = view.getUint16(innerPosition.offset) - 0xc000;\n advance(innerPosition, 2);\n if (jumpTo < maxOffset) {\n innerPosition = { offset: (maxOffset = jumpTo), length: 0 };\n } else {\n break;\n }\n }\n }\n return labels.join('.') || '.';\n },\n};\n\nexport const bytes: Encoder<Uint8Array | string, Uint8Array> = {\n bytes(data) {\n return typeof data === 'string' ? utf8ByteLength(data) : data.byteLength;\n },\n write(view, offset, data) {\n const bytes = typeof data === 'string' ? textEncoder.encode(data) : data;\n const target = new Uint8Array(\n view.buffer,\n view.byteOffset + offset,\n bytes.byteLength\n );\n target.set(bytes);\n offset += bytes.byteLength;\n return offset;\n },\n read(view, position) {\n return sliceView(view, position);\n },\n};\n\nexport const octets: Encoder<Uint8Array> = {\n bytes(data) {\n return data.byteLength + 1;\n },\n write(view, offset, bytes) {\n view.setUint8(offset++, bytes.byteLength);\n const target = new Uint8Array(\n view.buffer,\n view.byteOffset + offset,\n bytes.byteLength\n );\n target.set(bytes);\n offset += bytes.byteLength;\n return offset;\n },\n read(view, position) {\n const length = view.getUint8(position.offset);\n advance(position, 1);\n return sliceView(view, position, length);\n },\n};\n\nexport const string: Encoder<string> = {\n bytes(str) {\n return utf8ByteLength(str) + 1;\n },\n write(view, offset, data) {\n const buffer = textEncoder.encode(data);\n view.setUint8(offset++, buffer.byteLength);\n return bytes.write(view, offset, buffer);\n },\n read(view, position) {\n const length = view.getUint8(position.offset);\n advance(position, 1);\n return textDecoder.decode(sliceView(view, position, length));\n },\n};\n\nexport const typeBitmap: Encoder<RecordType[]> = {\n bytes(types) {\n const extents: number[] = [];\n for (let idx = 0; idx < types.length; idx++)\n extents[types[idx] >> 8] = Math.max(\n extents[types[idx] >> 8] || 0,\n types[idx] & 0xff\n );\n let length = 0;\n for (let idx = 0; idx < extents.length; idx++)\n if (extents[idx] != null) length += 2 + Math.ceil((extents[idx] + 1) / 8);\n return length;\n },\n write(view, offset, types) {\n const typesByWindow: number[][] = [];\n for (let idx = 0; idx < types.length; idx++) {\n const window =\n typesByWindow[types[idx] >> 8] || (typesByWindow[types[idx] >> 8] = []);\n window[(types[idx] >> 3) & 0x1f] |= 1 << (7 - (types[idx] & 0x7));\n }\n for (let idx = 0; idx < typesByWindow.length; idx++) {\n const window = typesByWindow[idx];\n if (window != null) {\n view.setUint8(offset++, idx);\n view.setUint8(offset++, window.length);\n for (let byteIdx = 0; byteIdx < window.length; byteIdx++) {\n view.setUint8(offset++, window[byteIdx]);\n }\n }\n }\n return offset;\n },\n read(view, position) {\n const { offset, length } = position;\n const typelist: RecordType[] = [];\n while (position.offset - offset < length) {\n const window = view.getUint8(position.offset);\n const windowLength = view.getUint8(position.offset + 1);\n for (let idx = 0; idx < windowLength; idx++) {\n const bitmap = view.getUint8(position.offset + 2 + idx);\n for (let bit = 0; bit < 8; bit++) {\n if (bitmap & (1 << (7 - bit))) {\n typelist.push((window << 8) | (idx << 3) | bit);\n }\n }\n }\n advance(position, 2 + windowLength);\n }\n return typelist;\n },\n};\n\nexport const ipv4: Encoder<string> = {\n bytes() {\n return 4;\n },\n write(view, offset, ip) {\n const octets = ip.split('.', 4);\n for (let octetIdx = 0; octetIdx < 4; octetIdx++)\n view.setUint8(offset++, parseInt(octets[octetIdx], 10));\n return offset;\n },\n read(view, position) {\n const length = Math.min(position.length, 4);\n const ip = new Array(4)\n .fill(0)\n .map((_, index) =>\n index < length ? view.getUint8(position.offset + index) : 0\n )\n .join('.');\n advance(position, length);\n return ip;\n },\n};\n\nexport const uint16: Encoder<number> = {\n bytes() {\n return 2;\n },\n write(view, offset, key) {\n view.setUint16(offset, key);\n return offset + 2;\n },\n read(view, position) {\n const key = view.getUint16(position.offset);\n advance(position, 2);\n return key;\n },\n};\n\nexport const ipv6: Encoder<string> = {\n bytes() {\n return 16;\n },\n write(view, offset, ip) {\n const middleIdx = ip.indexOf('::');\n const head = (middleIdx > -1 ? ip.slice(0, middleIdx) : ip).split(':');\n const tail = middleIdx > -1 ? ip.slice(middleIdx + 2).split(':') : [];\n const ipv4 =\n tail.length > 0 && tail[tail.length - 1].includes('.')\n ? tail.pop()\n : undefined;\n for (let headIdx = 0; headIdx < head.length; headIdx++) {\n view.setUint16(offset, parseInt(head[headIdx], 16));\n offset += 2;\n }\n const middleLength = 8 - (head.length + tail.length + (ipv4 ? 2 : 0));\n for (let pad = middleLength; pad > 0; pad--) {\n view.setUint16(offset, 0);\n offset += 2;\n }\n for (let tailIdx = 0; tailIdx < tail.length; tailIdx++) {\n view.setUint16(offset, parseInt(tail[tailIdx], 16));\n offset += 2;\n }\n if (ipv4) {\n const v4Parts = ipv4.split('.', 4).map(part => parseInt(part, 10));\n view.setUint16(offset, (v4Parts[0] << 8) | v4Parts[1]);\n view.setUint16(offset + 2, (v4Parts[2] << 8) | v4Parts[3]);\n offset += 4;\n }\n return offset;\n },\n read(view, position) {\n let output = '';\n const length = Math.min(position.length, 16);\n for (let idx = 0; idx < length; idx += 2) {\n if (idx !== 0) output += ':';\n output += view.getUint16(position.offset + idx).toString(16);\n }\n advance(position, length);\n return output\n .replace(/(^|:)0(:0)*:0(:|$)/, '$1::$3')\n .replace(/:{3,4}/, '::');\n },\n};\n\nexport const withRDLength = <T, R = T>(\n encoder: Encoder<T, R>\n): Encoder<T, R> => ({\n bytes(data) {\n return encoder.bytes(data) + 2;\n },\n write(view, offset, data) {\n const startOffset = offset;\n offset = encoder.write(view, offset + 2, data);\n view.setUint16(startOffset, offset - startOffset - 2);\n return offset;\n },\n read(view, position) {\n const { offset, length } = position;\n const rdlength = (position.length = view.getUint16(position.offset));\n position.offset += 2;\n const data = encoder.read(view, position);\n // Restore original position and advance by specified size after\n position.offset = offset + 2 + rdlength;\n position.length = length;\n return data;\n },\n});\n\nexport const array = <T>(encoder: Encoder<T>): Encoder<T[]> => ({\n bytes(data) {\n let byteLength = 0;\n for (let idx = 0; data != null && idx < data.length; idx++)\n byteLength += encoder.bytes(data[idx]);\n return byteLength;\n },\n write(view, offset, data) {\n for (let idx = 0; data != null && idx < data.length; idx++)\n offset = encoder.write(view, offset, data[idx]);\n return offset;\n },\n read(view, position) {\n const { offset, length } = position;\n const data: T[] = [];\n while (position.offset - offset < length)\n data.push(encoder.read(view, position));\n return data;\n },\n});\n\nexport const advance = (position: ReadPosition, bytes: number) => {\n position.offset += bytes | 0;\n position.length -= bytes | 0;\n position.length &= ~(position.length >> 31);\n};\n\nexport const encodeIntoBuffer = <T>(\n encoder: Encoder<T>,\n input: T\n): Uint8Array => {\n const buffer = new ArrayBuffer(encoder.bytes(input));\n const endOffset = encoder.write(new DataView(buffer), 0, input);\n return new Uint8Array(buffer, 0, endOffset);\n};\n\nexport const sliceView = (\n view: DataView,\n position: ReadPosition,\n length = position.length\n) => {\n const slice = new Uint8Array(\n view.buffer,\n view.byteOffset + position.offset,\n length\n );\n advance(position, length);\n return slice;\n};\n","import { RecordClass, RecordType } from './constants';\nimport { Encoder, name, advance } from './encoders';\n\nexport interface Question {\n name: string;\n type: RecordType;\n class?: RecordClass;\n qu?: boolean;\n}\n\nconst QU_BIT = 1 << 15;\n\nexport const question: Encoder<Question> = {\n bytes(question) {\n return name.bytes(question.name) + 4;\n },\n write(view, offset, question) {\n let _class = question.class || RecordClass.IN;\n if (question.qu) _class |= QU_BIT;\n offset = name.write(view, offset, question.name);\n view.setUint16(offset, question.type);\n view.setUint16(offset + 2, _class);\n offset += 4;\n return offset;\n },\n read(view, position) {\n const _name = name.read(view, position);\n const type = view.getUint16(position.offset);\n let _class = view.getUint16(position.offset + 2) || RecordClass.ANY;\n let qu = false;\n if (_class !== RecordClass.ANY && _class & QU_BIT) {\n _class &= ~QU_BIT;\n qu = true;\n }\n advance(position, 4);\n return {\n name: _name,\n type,\n class: _class,\n qu,\n };\n },\n};\n","import { OptCode } from './constants';\nimport {\n type Encoder,\n withRDLength,\n encodeIntoBuffer,\n advance,\n bytes,\n ipv4,\n ipv6,\n} from './encoders';\n\nexport const enum IPType {\n v4 = 1,\n v6 = 2,\n}\n\nexport interface BaseOpt {\n code: number;\n}\n\nexport interface ClientSubnetOpt extends BaseOpt {\n code: OptCode.CLIENT_SUBNET;\n family?: IPType | (number & {});\n sourcePrefixLength?: number;\n scopePrefixLength?: number;\n ip: string;\n}\n\nexport interface KeepAliveOpt extends BaseOpt {\n code: OptCode.TCP_KEEPALIVE;\n timeout?: number;\n}\n\nexport interface PaddingOpt extends BaseOpt {\n code: OptCode.PADDING;\n length?: number;\n}\n\nexport interface TagOpt extends BaseOpt {\n code: OptCode.KEY_TAG;\n tags: number[];\n}\n\nexport interface UnknownOpt extends BaseOpt {\n data: Uint8Array;\n}\n\nexport type PacketOpt =\n | ClientSubnetOpt\n | KeepAliveOpt\n | PaddingOpt\n | TagOpt\n | UnknownOpt;\n\nexport const unknownOpt: Encoder<UnknownOpt> = withRDLength({\n bytes(option) {\n return bytes.bytes(option.data);\n },\n write(view, offset, option) {\n return bytes.write(view, offset, option.data);\n },\n read(view, position) {\n return {\n code: OptCode.OPTION_0,\n data: bytes.read(view, position),\n };\n },\n});\n\n// See: https://github.com/nodejs/node/blob/842448b/lib/internal/net.js#L15-L18\nconst v4Seg = '(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])';\nconst v4Str = `(?:${v4Seg}\\\\.){3}${v4Seg}`;\nconst ipv4Re = new RegExp(`^${v4Str}$`);\n\nconst isIPv4 = (ip: string) => ipv4Re.test(ip);\n\nexport const clientSubnetOpt: Encoder<ClientSubnetOpt> = withRDLength({\n bytes(option) {\n const sourcePrefixLength = option.sourcePrefixLength || 0;\n return Math.ceil(sourcePrefixLength / 8) + 4;\n },\n write(view, offset, option) {\n const sourcePrefixLength = option.sourcePrefixLength || 0;\n const scopePrefixLength = option.scopePrefixLength || 0;\n const family = option.family || (isIPv4(option.ip) ? IPType.v4 : IPType.v6);\n const maskLength = Math.ceil(sourcePrefixLength / 8);\n view.setUint16(offset, family);\n view.setUint8(offset + 2, sourcePrefixLength);\n view.setUint8(offset + 3, scopePrefixLength);\n offset += 4;\n const ipBuffer = encodeIntoBuffer(\n family === IPType.v4 ? ipv4 : ipv6,\n option.ip\n );\n for (let byteIdx = 0; byteIdx < maskLength; byteIdx++)\n view.setUint8(offset++, ipBuffer[byteIdx]);\n return offset;\n },\n read(view, position) {\n const family = view.getUint16(position.offset);\n const sourcePrefixLength = view.getUint8(position.offset + 2);\n const scopePrefixLength = view.getUint8(position.offset + 3);\n advance(position, 4);\n return {\n code: OptCode.CLIENT_SUBNET,\n family,\n sourcePrefixLength,\n scopePrefixLength,\n ip:\n family === IPType.v4\n ? ipv4.read(view, position)\n : ipv6.read(view, position),\n };\n },\n});\n\nexport const keepAliveOpt: Encoder<KeepAliveOpt> = withRDLength({\n bytes(option) {\n return option.timeout ? 2 : 0;\n },\n write(view, offset, option) {\n if (option.timeout) {\n view.setUint16(offset, option.timeout);\n offset += 2;\n }\n return offset;\n },\n read(view, position) {\n if (position.length) {\n const timeout = view.getUint16(position.offset);\n advance(position, 2);\n return { code: OptCode.TCP_KEEPALIVE, timeout };\n } else {\n return { code: OptCode.TCP_KEEPALIVE, timeout: undefined };\n }\n },\n});\n\nexport const paddingOpt: Encoder<PaddingOpt> = withRDLength({\n bytes(option) {\n return option.length || 0;\n },\n write(_view, offset, option) {\n return offset + (option.length || 0);\n },\n read(_view, position) {\n const { length } = position;\n advance(position, length);\n return { code: OptCode.PADDING, length };\n },\n});\n\nexport const tagOpt: Encoder<TagOpt> = withRDLength({\n bytes(option) {\n return option.tags.length * 2;\n },\n write(view, offset, option) {\n for (let idx = 0; idx < option.tags.length; idx++) {\n view.setUint16(offset, option.tags[idx]);\n offset += 2;\n }\n return offset;\n },\n read(view, position) {\n const { offset, length } = position;\n const tags: number[] = [];\n while (position.offset - offset < length) {\n tags.push(view.getUint16(position.offset));\n advance(position, 2);\n }\n return {\n code: OptCode.KEY_TAG,\n tags,\n };\n },\n});\n\nconst isUnknownOpt = (option: PacketOpt): option is UnknownOpt =>\n !!(option as UnknownOpt).data;\n\nexport const option: Encoder<PacketOpt> = {\n bytes(option) {\n if (isUnknownOpt(option)) {\n return unknownOpt.bytes(option) + 2;\n }\n switch (option.code) {\n case OptCode.CLIENT_SUBNET:\n return clientSubnetOpt.bytes(option) + 2;\n case OptCode.TCP_KEEPALIVE:\n return keepAliveOpt.bytes(option) + 2;\n case OptCode.PADDING:\n return paddingOpt.bytes(option) + 2;\n case OptCode.KEY_TAG:\n return tagOpt.bytes(option) + 2;\n }\n },\n write(view, offset, option) {\n view.setUint16(offset, option.code);\n offset += 2;\n if (isUnknownOpt(option)) {\n return unknownOpt.write(view, offset, option);\n }\n switch (option.code) {\n case OptCode.CLIENT_SUBNET:\n return clientSubnetOpt.write(view, offset, option);\n case OptCode.TCP_KEEPALIVE:\n return keepAliveOpt.write(view, offset, option);\n case OptCode.PADDING:\n return paddingOpt.write(view, offset, option);\n case OptCode.KEY_TAG:\n return tagOpt.write(view, offset, option);\n }\n },\n read(view, position) {\n const code = view.getUint16(position.offset);\n advance(position, 2);\n switch (code) {\n case OptCode.CLIENT_SUBNET:\n return clientSubnetOpt.read(view, position);\n case OptCode.TCP_KEEPALIVE:\n return keepAliveOpt.read(view, position);\n case OptCode.PADDING:\n return paddingOpt.read(view, position);\n case OptCode.KEY_TAG:\n return tagOpt.read(view, position);\n default:\n const opt = unknownOpt.read(view, position);\n opt.code = code;\n return opt;\n }\n },\n};\n","import {\n type Encoder,\n withRDLength,\n array,\n textDecoder,\n advance,\n uint16,\n bytes,\n ipv4,\n ipv6,\n string,\n} from './encoders';\n\nexport const enum SvcParamCode {\n Mandatory = 0,\n Alpn = 1,\n NoDefaultAlpn = 2,\n Port = 3,\n Ipv4Hint = 4,\n EchConfig = 5,\n Ipv6Hint = 6,\n DohPath = 7,\n Odoh = 32769,\n}\n\nexport interface SvcParams {\n mandatory?: (SvcParamCode | (number & {}))[];\n alpn?: string[];\n 'no-default-alpn'?: boolean;\n port?: number;\n ipv4hint?: string[];\n ipv6hint?: string[];\n echconfig?: Uint8Array;\n dohpath?: string;\n odoh?: Uint8Array;\n}\n\nconst mandatorySvcParam: Encoder<(SvcParamCode | (number & {}))[]> =\n withRDLength(array(uint16));\nconst alpnSvcParam = withRDLength(array(string));\nconst portSvcParam = withRDLength(uint16);\nconst ipv4HintSvcParam = withRDLength(array(ipv4));\nconst ipv6HintSvcParam = withRDLength(array(ipv6));\nconst bytesSvcParam = withRDLength(bytes);\n\nexport const svcParams: Encoder<SvcParams> = {\n bytes(params) {\n let byteLength = 0;\n if (params.mandatory != null)\n byteLength += mandatorySvcParam.bytes(params.mandatory) + 2;\n if (params.alpn != null) byteLength += alpnSvcParam.bytes(params.alpn) + 2;\n if (params['no-default-alpn']) byteLength += 4;\n if (params.port != null) byteLength += portSvcParam.bytes(params.port) + 2;\n if (params.ipv4hint)\n byteLength += ipv4HintSvcParam.bytes(params.ipv4hint) + 2;\n if (params.ipv6hint)\n byteLength += ipv6HintSvcParam.bytes(params.ipv6hint) + 2;\n if (params.echconfig)\n byteLength += bytesSvcParam.bytes(params.echconfig) + 2;\n if (params.dohpath) byteLength += bytesSvcParam.bytes(params.dohpath) + 2;\n if (params.odoh) byteLength += bytesSvcParam.bytes(params.odoh) + 2;\n return byteLength;\n },\n write(view, offset, params) {\n if (params.mandatory != null) {\n view.setUint16(offset, SvcParamCode.Mandatory);\n offset = mandatorySvcParam.write(view, offset + 2, params.mandatory);\n }\n if (params.alpn != null) {\n view.setUint16(offset, SvcParamCode.Alpn);\n offset = alpnSvcParam.write(view, offset + 2, params.alpn);\n }\n if (params['no-default-alpn']) {\n view.setUint16(offset, SvcParamCode.NoDefaultAlpn);\n view.setUint16(offset + 2, 0);\n offset += 4;\n }\n if (params.port != null) {\n view.setUint16(offset, SvcParamCode.Port);\n offset = portSvcParam.write(view, offset + 2, params.port);\n }\n if (params.ipv4hint) {\n view.setUint16(offset, SvcParamCode.Ipv4Hint);\n offset = ipv4HintSvcParam.write(view, offset + 2, params.ipv4hint);\n }\n if (params.ipv6hint) {\n view.setUint16(offset, SvcParamCode.Ipv6Hint);\n offset = ipv6HintSvcParam.write(view, offset + 2, params.ipv6hint);\n }\n if (params.echconfig) {\n view.setUint16(offset, SvcParamCode.EchConfig);\n offset = bytesSvcParam.write(view, offset + 2, params.echconfig);\n }\n if (params.dohpath) {\n view.setUint16(offset, SvcParamCode.DohPath);\n offset = bytesSvcParam.write(view, offset + 2, params.dohpath);\n }\n if (params.odoh) {\n view.setUint16(offset, SvcParamCode.Odoh);\n offset = bytesSvcParam.write(view, offset + 2, params.odoh);\n }\n return offset;\n },\n read(view, position) {\n const { length, offset } = position;\n const params: SvcParams = {\n mandatory: undefined,\n alpn: undefined,\n 'no-default-alpn': false,\n port: undefined,\n ipv4hint: undefined,\n ipv6hint: undefined,\n echconfig: undefined,\n dohpath: undefined,\n odoh: undefined,\n };\n while (position.offset - offset < length) {\n const code = view.getUint16(position.offset) as\n | SvcParamCode\n | (number & {});\n advance(position, 2);\n switch (code) {\n case SvcParamCode.Mandatory:\n params.mandatory = mandatorySvcParam.read(view, position);\n break;\n case SvcParamCode.Alpn:\n params.alpn = alpnSvcParam.read(view, position);\n break;\n case SvcParamCode.NoDefaultAlpn:\n params['no-default-alpn'] = true;\n advance(position, 2);\n break;\n case SvcParamCode.Port:\n params.port = portSvcParam.read(view, position);\n break;\n case SvcParamCode.Ipv4Hint:\n params.ipv4hint = ipv4HintSvcParam.read(view, position);\n break;\n case SvcParamCode.Ipv6Hint:\n params.ipv6hint = ipv6HintSvcParam.read(view, position);\n break;\n case SvcParamCode.EchConfig:\n params.echconfig = bytesSvcParam.read(view, position);\n break;\n case SvcParamCode.DohPath:\n params.dohpath = textDecoder.decode(\n bytesSvcParam.read(view, position)\n );\n break;\n case SvcParamCode.Odoh:\n params.odoh = bytesSvcParam.read(view, position);\n break;\n default:\n // NOTE: We discard other parameters using the required RDLENGTH field\n bytesSvcParam.read(view, position);\n }\n }\n return params;\n },\n};\n","import { RecordClass, RecordType } from './constants';\nimport { Encoder, advance, octets } from './encoders';\nimport { option, PacketOpt } from './options';\nimport { svcParams, SvcParams } from './svcparams';\nimport {\n withRDLength,\n typeBitmap,\n string,\n bytes,\n name,\n ipv4,\n ipv6,\n array,\n} from './encoders';\n\nexport interface BaseAnswer {\n type: RecordType;\n name: string;\n ttl?: number;\n class?: RecordClass;\n flush?: boolean;\n}\n\nconst answerBytes = withRDLength(bytes);\n\nexport interface NsAnswer extends BaseAnswer {\n type: RecordType.NS;\n data: string;\n}\n\nconst answerName = withRDLength(name);\n\nexport interface AAnswer extends BaseAnswer {\n type: RecordType.A;\n data: string;\n}\n\nconst answerIPv4 = withRDLength(ipv4);\n\nexport interface AAAAAnswer extends BaseAnswer {\n type: RecordType.AAAA;\n data: string;\n}\n\nconst answerIPv6 = withRDLength(ipv6);\n\nexport interface TxtAnswer extends BaseAnswer {\n type: RecordType.TXT;\n data: string[];\n}\n\nexport const answerTxt: Encoder<string[]> = withRDLength(array(string));\n\nexport interface SrvData {\n priority?: number;\n weight?: number;\n port: number;\n target: string;\n}\n\nexport interface SrvAnswer extends BaseAnswer {\n type: RecordType.SRV;\n data: SrvData;\n}\n\nexport const answerSrv: Encoder<SrvData> = withRDLength({\n bytes(data) {\n return name.bytes(data.target) + 6;\n },\n write(view, offset, data) {\n view.setUint16(offset, data.priority || 0);\n view.setUint16(offset + 2, data.weight || 0);\n view.setUint16(offset + 4, data.port || 0);\n return name.write(view, offset + 6, data.target);\n },\n read(view, position) {\n const data: SrvData = { priority: 0, weight: 0, port: 0, target: '' };\n data.priority = view.getUint16(position.offset);\n data.weight = view.getUint16(position.offset + 2);\n data.port = view.getUint16(position.offset + 4);\n advance(position, 6);\n data.target = name.read(view, position);\n return data;\n },\n});\n\nexport interface HInfoData {\n cpu: string;\n os: string;\n}\n\nexport interface HInfoAnswer extends BaseAnswer {\n type: RecordType.HINFO;\n data: HInfoData;\n}\n\nexport const answerHInfo: Encoder<HInfoData> = withRDLength({\n bytes(data) {\n return string.bytes(data.cpu) + string.bytes(data.os);\n },\n write(view, offset, data) {\n offset = string.write(view, offset, data.cpu);\n offset = string.write(view, offset, data.os);\n return offset;\n },\n read(view, position) {\n return {\n cpu: string.read(view, position),\n os: string.read(view, position),\n };\n },\n});\n\nexport interface CaaData {\n flags?: number;\n tag: 'issue' | 'issuewild' | 'iodef';\n value: Uint8Array;\n issuerCritical?: boolean;\n}\n\nexport interface CaaAnswer extends BaseAnswer {\n type: RecordType.CAA;\n data: CaaData;\n}\n\nconst ISSUER_CRITICAL = 1 << 7;\n\nconst toCaaTag = (input: string) => {\n switch (input) {\n case 'issue':\n case 'issuewild':\n case 'iodef':\n return input;\n default:\n return 'issue';\n }\n};\n\nexport const answerCaa: Encoder<CaaData> = withRDLength({\n bytes(data) {\n return string.bytes(data.tag) + bytes.bytes(data.value) + 1;\n },\n write(view, offset, data) {\n let flags = data.flags || 0;\n if (data.issuerCritical) flags |= ISSUER_CRITICAL;\n view.setUint8(offset, flags);\n offset = string.write(view, offset + 1, data.tag);\n offset = bytes.write(view, offset, data.value);\n return offset;\n },\n read(view, position) {\n const flags = view.getUint8(position.offset);\n advance(position, 1);\n return {\n flags,\n tag: toCaaTag(string.read(view, position)),\n value: bytes.read(view, position),\n issuerCritical: !!(flags & ISSUER_CRITICAL),\n };\n },\n});\n\nexport interface SoaData {\n mname: string;\n rname: string;\n serial?: number;\n refresh?: number;\n retry?: number;\n expire?: number;\n minimum?: number;\n}\n\nexport interface SoaAnswer extends BaseAnswer {\n type: RecordType.SOA;\n data: SoaData;\n}\n\nexport const answerSoa: Encoder<SoaData> = withRDLength({\n bytes(data) {\n return name.bytes(data.mname) + name.bytes(data.rname) + 20;\n },\n write(view, offset, data) {\n offset = name.write(view, offset, data.mname);\n offset = name.write(view, offset, data.rname);\n view.setUint32(offset, data.serial || 0);\n view.setUint32(offset + 4, data.refresh || 0);\n view.setUint32(offset + 8, data.retry || 0);\n view.setUint32(offset + 12, data.expire || 0);\n view.setUint32(offset + 16, data.minimum || 0);\n return offset + 20;\n },\n read(view, position) {\n const data: SoaData = {\n mname: name.read(view, position),\n rname: name.read(view, position),\n serial: view.getUint32(position.offset),\n refresh: view.getUint32(position.offset + 4),\n retry: view.getUint32(position.offset + 8),\n expire: view.getUint32(position.offset + 12),\n minimum: view.getUint32(position.offset + 16),\n };\n position.offset += 20;\n position.length -= 20;\n return data;\n },\n});\n\nexport interface MxData {\n preference?: number;\n exchange: string;\n}\n\nexport interface MxAnswer extends BaseAnswer {\n type: RecordType.MX;\n data: MxData;\n}\n\nexport const answerMx: Encoder<MxData> = withRDLength({\n bytes(data) {\n return name.bytes(data.exchange) + 2;\n },\n write(view, offset, data) {\n view.setUint16(offset, data.preference || 0);\n return name.write(view, offset + 2, data.exchange);\n },\n read(view, position) {\n const data: MxData = {\n preference: view.getUint16(position.offset),\n exchange: '',\n };\n advance(position, 2);\n data.exchange = name.read(view, position);\n return data;\n },\n});\n\nexport interface DnskeyData {\n flags: number;\n algorithm: number;\n key: Uint8Array;\n}\n\nexport interface DnskeyAnswer extends BaseAnswer {\n type: RecordType.DNSKEY;\n data: DnskeyData;\n}\n\nexport const answerDnskey: Encoder<DnskeyData> = withRDLength({\n bytes(data) {\n return bytes.bytes(data.key) + 4;\n },\n write(view, offset, data) {\n const PROTOCOL_DNSSEC = 3;\n view.setUint16(offset, data.flags);\n view.setUint8(offset + 2, PROTOCOL_DNSSEC);\n view.setUint8(offset + 3, data.algorithm);\n return bytes.write(view, offset + 4, data.key);\n },\n read(view, position) {\n const flags = view.getUint16(position.offset);\n const algorithm = view.getUint8(position.offset + 3);\n advance(position, 4);\n return {\n flags,\n algorithm,\n key: bytes.read(view, position),\n };\n },\n});\n\nexport interface RrsigData {\n typeCovered: RecordType;\n algorithm: number;\n labels: number;\n originalTTL: number;\n expiration: number;\n inception: number;\n keyTag: number;\n signersName: string;\n signature: Uint8Array;\n}\n\nexport interface RrsigAnswer extends BaseAnswer {\n type: RecordType.RRSIG;\n data: RrsigData;\n}\n\nexport const answerRrsig: Encoder<RrsigData> = withRDLength({\n bytes(data) {\n return 18 + name.bytes(data.signersName) + bytes.bytes(data.signature);\n },\n write(view, offset, data) {\n view.setUint16(offset, data.typeCovered);\n view.setUint8(offset + 2, data.algorithm);\n view.setUint8(offset + 3, data.labels);\n view.setUint32(offset + 4, data.originalTTL);\n view.setUint32(offset + 8, data.expiration);\n view.setUint32(offset + 12, data.inception);\n view.setUint16(offset + 16, data.keyTag);\n offset = name.write(view, offset + 18, data.signersName);\n offset = bytes.write(view, offset, data.signature);\n return offset;\n },\n read(view, position) {\n const typeCovered = view.getUint16(position.offset);\n const algorithm = view.getUint8(position.offset + 2);\n const labels = view.getUint8(position.offset + 3);\n const originalTTL = view.getUint32(position.offset + 4);\n const expiration = view.getUint32(position.offset + 8);\n const inception = view.getUint32(position.offset + 12);\n const keyTag = view.getUint16(position.offset + 16);\n advance(position, 18);\n return {\n typeCovered,\n algorithm,\n labels,\n originalTTL,\n expiration,\n inception,\n keyTag,\n signersName: name.read(view, position),\n signature: bytes.read(view, position),\n };\n },\n});\n\nexport interface RpData {\n mbox: string;\n txt: string;\n}\n\nexport interface RpAnswer extends BaseAnswer {\n type: RecordType.RP;\n data: RpData;\n}\n\nexport const answerRp: Encoder<RpData> = withRDLength({\n bytes(data) {\n return name.bytes(data.mbox) + name.bytes(data.txt);\n },\n write(view, offset, data) {\n offset = name.write(view, offset, data.mbox);\n offset = name.write(view, offset, data.txt);\n return offset;\n },\n read(view, position) {\n return {\n mbox: name.read(view, position),\n txt: name.read(view, position),\n };\n },\n});\n\nexport interface NsecData {\n nextDomain: string;\n rrtypes: RecordType[];\n}\n\nexport interface NsecAnswer extends BaseAnswer {\n type: RecordType.NSEC;\n data: NsecData;\n}\n\nexport const answerNsec: Encoder<NsecData> = withRDLength({\n bytes(data) {\n return name.bytes(data.nextDomain) + typeBitmap.bytes(data.rrtypes);\n },\n write(view, offset, data) {\n offset = name.write(view, offset, data.nextDomain);\n offset = typeBitmap.write(view, offset, data.rrtypes);\n return offset;\n },\n read(view, position) {\n return {\n nextDomain: name.read(view, position),\n rrtypes: typeBitmap.read(view, position),\n };\n },\n});\n\nexport interface Nsec3Data {\n algorithm: number;\n flags: number;\n iterations: number;\n salt: Uint8Array;\n nextDomain: Uint8Array;\n rrtypes: RecordType[];\n}\n\nexport interface Nsec3Answer extends BaseAnswer {\n type: RecordType.NSEC3;\n data: Nsec3Data;\n}\n\nexport const answerNsec3: Encoder<Nsec3Data> = withRDLength({\n bytes(data) {\n return (\n octets.bytes(data.salt) +\n octets.bytes(data.nextDomain) +\n typeBitmap.bytes(data.rrtypes) +\n 4\n );\n },\n write(view, offset, data) {\n view.setUint8(offset, data.algorithm);\n view.setUint8(offset + 1, data.flags);\n view.setUint16(offset + 2, data.iterations);\n offset = octets.write(view, offset + 4, data.salt);\n offset = octets.write(view, offset, data.nextDomain);\n offset = typeBitmap.write(view, offset, data.rrtypes);\n return offset;\n },\n read(view, position) {\n const algorithm = view.getUint8(position.offset);\n const flags = view.getUint8(position.offset + 1);\n const iterations = view.getUint16(position.offset + 2);\n advance(position, 4);\n return {\n algorithm,\n flags,\n iterations,\n salt: octets.read(view, position),\n nextDomain: octets.read(view, position),\n rrtypes: typeBitmap.read(view, position),\n };\n },\n});\n\nexport interface SshfpData {\n algorithm: number;\n hash: number;\n fingerprint: Uint8Array;\n}\n\nexport interface SshfpAnswer extends BaseAnswer {\n type: RecordType.SSHFP;\n data: SshfpData;\n}\n\nexport const answerSshfp: Encoder<SshfpData> = withRDLength({\n bytes(data) {\n return bytes.bytes(data.fingerprint) + 2;\n },\n write(view, offset, data) {\n view.setUint8(offset, data.algorithm);\n view.setUint8(offset + 1, data.hash);\n return bytes.write(view, offset + 2, data.fingerprint);\n },\n read(view, position) {\n const algorithm = view.getUint8(position.offset);\n const hash = view.getUint8(position.offset + 1);\n advance(position, 2);\n return {\n algorithm,\n hash,\n fingerprint: bytes.read(view, position),\n };\n },\n});\n\nexport interface DsData {\n keyTag: number;\n algorithm: number;\n digestType: number;\n digest: Uint8Array;\n}\n\nexport interface DsAnswer extends BaseAnswer {\n type: RecordType.DS;\n data: DsData;\n}\n\nexport const answerDs: Encoder<DsData> = withRDLength({\n bytes(data) {\n return bytes.bytes(data.digest) + 4;\n },\n write(view, offset, data) {\n view.setUint16(offset, data.keyTag);\n view.setUint8(offset + 2, data.algorithm);\n view.setUint8(offset + 3, data.digestType);\n offset = bytes.write(view, offset + 4, data.digest);\n return offset;\n },\n read(view, position) {\n const keyTag = view.getUint16(position.offset);\n const algorithm = view.getUint8(position.offset + 2);\n const digestType = view.getUint8(position.offset + 3);\n advance(position, 4);\n return {\n keyTag,\n algorithm,\n digestType,\n digest: bytes.read(view, position),\n };\n },\n});\n\nexport interface NaptrData {\n order: number;\n preference: number;\n flags: string;\n services: string;\n regexp: string;\n replacement: string;\n}\n\nexport interface NaptrAnswer extends BaseAnswer {\n type: RecordType.NAPTR;\n data: NaptrData;\n}\n\nexport const answerNaptr: Encoder<NaptrData> = withRDLength({\n bytes(data) {\n return (\n string.bytes(data.flags) +\n string.bytes(data.services) +\n string.bytes(data.regexp) +\n name.bytes(data.replacement) +\n 4\n );\n },\n write(view, offset, data) {\n view.setUint16(offset, data.order);\n view.setUint16(offset + 2, data.preference);\n offset = string.write(view, offset + 4, data.flags);\n offset = string.write(view, offset, data.services);\n offset = string.write(view, offset, data.regexp);\n offset = name.write(view, offset, data.replacement);\n return offset;\n },\n read(view, position) {\n const order = view.getUint16(position.offset);\n const preference = view.getUint16(position.offset + 2);\n advance(position, 4);\n return {\n order,\n preference,\n flags: string.read(view, position),\n services: string.read(view, position),\n regexp: string.read(view, position),\n replacement: name.read(view, position),\n };\n },\n});\n\nexport interface TlsaData {\n usage: number;\n selector: number;\n matchingType: number;\n certificate: Uint8Array;\n}\n\nexport interface TlsaAnswer extends BaseAnswer {\n type: RecordType.TLSA;\n data: TlsaData;\n}\n\nexport const answerTlsa: Encoder<TlsaData> = withRDLength({\n bytes(data) {\n return bytes.bytes(data.certificate) + 3;\n },\n write(view, offset, data) {\n view.setUint8(offset, data.usage);\n view.setUint8(offset + 1, data.selector);\n view.setUint8(offset + 2, data.matchingType);\n return bytes.write(view, offset + 3, data.certificate);\n },\n read(view, position) {\n const usage = view.getUint8(position.offset);\n const selector = view.getUint8(position.offset + 1);\n const matchingType = view.getUint8(position.offset + 2);\n advance(position, 3);\n return {\n usage,\n selector,\n matchingType,\n certificate: bytes.read(view, position),\n };\n },\n});\n\nexport interface SvcbData {\n name: string;\n priority?: number;\n params: SvcParams;\n}\n\nexport interface SvcbAnswer extends BaseAnswer {\n type: RecordType.SVCB;\n data: SvcbData;\n}\n\nexport interface HttpsAnswer extends BaseAnswer {\n type: RecordType.HTTPS;\n data: SvcbData;\n}\n\nexport const answerSvcb: Encoder<SvcbData> = withRDLength({\n bytes(data) {\n return name.bytes(data.name) + svcParams.bytes(data.params) + 2;\n },\n write(view, offset, data) {\n view.setUint16(offset, data.priority || 0);\n offset = name.write(view, offset + 2, data.name);\n offset = svcParams.write(view, offset, data.params);\n return offset;\n },\n read(view, position) {\n const priority = view.getUint16(position.offset);\n advance(position, 2);\n return {\n name: name.read(view, position),\n priority,\n params: svcParams.read(view, position),\n };\n },\n});\n\nexport interface OptAnswer {\n type: RecordType.OPT;\n name?: '.';\n udpPayloadSize: number;\n extendedRcode: number;\n ednsVersion: number;\n flags: number;\n data: PacketOpt[];\n}\n\nexport const answerOpt: Encoder<PacketOpt[]> = withRDLength(array(option));\n\nexport interface PtrAnswer extends BaseAnswer {\n type: RecordType.PTR;\n data: string;\n}\n\nexport interface CnameAnswer extends BaseAnswer {\n type: RecordType.CNAME;\n data: string;\n}\n\nexport interface DnameAnswer extends BaseAnswer {\n type: RecordType.DNAME;\n data: string;\n}\n\nexport interface NullAnswer extends BaseAnswer {\n type: RecordType.NULL;\n data: Uint8Array | string;\n}\n\nexport interface UnknownAnswer extends BaseAnswer {\n type:\n | RecordType.AFSDB\n | RecordType.APL\n | RecordType.AXFR\n | RecordType.CDNSKEY\n | RecordType.CDS\n | RecordType.CERT\n | RecordType.DHCID\n | RecordType.DLV\n | RecordType.HIP\n | RecordType.IPSECKEY\n | RecordType.IXFR\n | RecordType.KEY\n | RecordType.KX\n | RecordType.LOC\n | RecordType.NSEC3PARAM\n | RecordType.NULL\n | RecordType.SIG\n | RecordType.TA\n | RecordType.TKEY\n | RecordType.TSIG;\n data: Uint8Array | string;\n}\n\nexport type Answer =\n | AAnswer\n | AAAAAnswer\n | TxtAnswer\n | SrvAnswer\n | HInfoAnswer\n | CaaAnswer\n | NsAnswer\n | SoaAnswer\n | MxAnswer\n | OptAnswer\n | DnskeyAnswer\n | RrsigAnswer\n | RpAnswer\n | NsecAnswer\n | Nsec3Answer\n | SshfpAnswer\n | DsAnswer\n | NaptrAnswer\n | TlsaAnswer\n | PtrAnswer\n | CnameAnswer\n | DnameAnswer\n | SvcbAnswer\n | HttpsAnswer\n | NullAnswer\n | UnknownAnswer;\n\nconst FLUSH_MASK = 1 << 15;\n\nexport const answer: Encoder<Answer> = {\n bytes(answer) {\n const byteLength =\n 8 + name.bytes(answer.type === RecordType.OPT ? '.' : answer.name);\n switch (answer.type) {\n case RecordType.A:\n return byteLength + answerIPv4.bytes(answer.data);\n case RecordType.NS:\n return byteLength + answerName.bytes(answer.data);\n case RecordType.SOA:\n return byteLength + answerSoa.bytes(answer.data);\n case RecordType.HINFO:\n return byteLength + answerHInfo.bytes(answer.data);\n case RecordType.MX:\n return byteLength + answerMx.bytes(answer.data);\n case RecordType.TXT:\n return byteLength + answerTxt.bytes(answer.data);\n case RecordType.RP:\n return byteLength + answerRp.bytes(answer.data);\n case RecordType.AAAA:\n return byteLength + answerIPv6.bytes(answer.data);\n case RecordType.SRV:\n return byteLength + answerSrv.bytes(answer.data);\n case RecordType.NAPTR:\n return byteLength + answerNaptr.bytes(answer.data);\n case RecordType.OPT:\n return byteLength + answerOpt.bytes(answer.data);\n case RecordType.DS:\n return byteLength + answerDs.bytes(answer.data);\n case RecordType.SSHFP:\n return byteLength + answerSshfp.bytes(answer.data);\n case RecordType.RRSIG:\n return byteLength + answerRrsig.bytes(answer.data);\n case RecordType.NSEC:\n return byteLength + answerNsec.bytes(answer.data);\n case RecordType.DNSKEY:\n return byteLength + answerDnskey.bytes(answer.data);\n case RecordType.NSEC3:\n return byteLength + answerNsec3.bytes(answer.data);\n case RecordType.TLSA:\n return byteLength + answerTlsa.bytes(answer.data);\n case RecordType.SVCB:\n case RecordType.HTTPS:\n return byteLength + answerSvcb.bytes(answer.data);\n case RecordType.CAA:\n return byteLength + answerCaa.bytes(answer.data);\n case RecordType.PTR:\n case RecordType.CNAME:\n case RecordType.DNAME:\n return byteLength + answerName.bytes(answer.data);\n default:\n return byteLength + answerBytes.bytes(answer.data);\n }\n },\n write(view, offset, answer) {\n if (answer.type === RecordType.OPT) {\n offset = name.write(view, offset, '.');\n view.setUint16(offset, answer.type);\n view.setUint16(offset + 2, answer.udpPayloadSize || 4_096);\n view.setUint8(offset + 4, answer.extendedRcode || 0);\n view.setUint8(offset + 5, answer.ednsVersion || 0);\n view.setUint16(offset + 6, answer.flags || 0);\n offset += 8;\n return answerOpt.write(view, offset, answer.data);\n }\n offset = name.write(view, offset, answer.name);\n view.setUint16(offset, answer.type);\n view.setUint16(\n offset + 2,\n (answer.class || 0) | (answer.flush ? FLUSH_MASK : 0)\n );\n view.setUint32(offset + 4, answer.ttl || 0);\n offset += 8;\n switch (answer.type) {\n case RecordType.A:\n return answerIPv4.write(view, offset, answer.data);\n case RecordType.NS:\n return answerName.write(view, offset, answer.data);\n case RecordType.SOA:\n return answerSoa.write(view, offset, answer.data);\n case RecordType.HINFO:\n return answerHInfo.write(view, offset, answer.data);\n case RecordType.MX:\n return answerMx.write(view, offset, answer.data);\n case RecordType.TXT:\n return answerTxt.write(view, offset, answer.data);\n case RecordType.RP:\n return answerRp.write(view, offset, answer.data);\n case RecordType.AAAA:\n return answerIPv6.write(view, offset, answer.data);\n case RecordType.SRV:\n return answerSrv.write(view, offset, answer.data);\n case RecordType.NAPTR:\n return answerNaptr.write(view, offset, answer.data);\n case RecordType.DS:\n return answerDs.write(view, offset, answer.data);\n case RecordType.SSHFP:\n return answerSshfp.write(view, offset, answer.data);\n case RecordType.RRSIG:\n return answerRrsig.write(view, offset, answer.data);\n case RecordType.NSEC:\n return answerNsec.write(view, offset, answer.data);\n case RecordType.DNSKEY:\n return answerDnskey.write(view, offset, answer.data);\n case RecordType.NSEC3:\n return answerNsec3.write(view, offset, answer.data);\n case RecordType.TLSA:\n return answerTlsa.write(view, offset, answer.data);\n case RecordType.SVCB:\n case RecordType.HTTPS:\n return answerSvcb.write(view, offset, answer.data);\n case RecordType.CAA:\n return answerCaa.write(view, offset, answer.data);\n case RecordType.PTR:\n case RecordType.CNAME:\n case RecordType.DNAME:\n return answerName.write(view, offset, answer.data);\n default:\n return answerBytes.write(view, offset, answer.data);\n }\n },\n read(view, position) {\n const _name = name.read(view, position);\n const type = view.getUint16(position.offset);\n if (type === RecordType.OPT) {\n const udpPayloadSize = view.getUint16(position.offset + 2) || 4_096;\n const extendedRcode = view.getUint8(position.offset + 4);\n const ednsVersion = view.getUint8(position.offset + 5);\n const flags = view.getUint16(position.offset + 6);\n advance(position, 8);\n return {\n type,\n udpPayloadSize,\n extendedRcode,\n ednsVersion,\n flags,\n data: answerOpt.read(view, position),\n };\n }\n const _class = view.getUint16(position.offset + 2);\n const ttl = view.getUint32(position.offset + 4);\n advance(position, 8);\n const answer: Answer = {\n name: _name,\n type,\n class: _class & ~FLUSH_MASK,\n flush: !!(_class & FLUSH_MASK),\n ttl,\n data: null as any,\n };\n switch (answer.type) {\n case RecordType.A:\n answer.data = answerIPv4.read(view, position);\n return answer;\n case RecordType.NS:\n answer.data = answerName.read(view, position);\n return answer;\n case RecordType.SOA:\n answer.data = answerSoa.read(view, position);\n return answer;\n case RecordType.HINFO:\n answer.data = answerHInfo.read(view, position);\n return answer;\n case RecordType.MX:\n answer.data = answerMx.read(view, position);\n return answer;\n case RecordType.TXT:\n answer.data = answerTxt.read(view, position);\n return answer;\n case RecordType.RP:\n answer.data = answerRp.read(view, position);\n return answer;\n case RecordType.AAAA:\n answer.data = answerIPv6.read(view, position);\n return answer;\n case RecordType.SRV:\n answer.data = answerSrv.read(view, position);\n return answer;\n case RecordType.NAPTR:\n answer.data = answerNaptr.read(view, position);\n return answer;\n case RecordType.DS:\n answer.data = answerDs.read(view, position);\n return answer;\n case RecordType.SSHFP:\n answer.data = answerSshfp.read(view, position);\n return answer;\n case RecordType.RRSIG:\n answer.data = answerRrsig.read(view, position);\n return answer;\n case RecordType.NSEC:\n answer.data = answerNsec.read(view, position);\n return answer;\n case RecordType.DNSKEY:\n answer.data = answerDnskey.read(view, position);\n return answer;\n case RecordType.NSEC3:\n answer.data = answerNsec3.read(view, position);\n return answer;\n case RecordType.TLSA:\n answer.data = answerTlsa.read(view, position);\n return answer;\n case RecordType.SVCB:\n case RecordType.HTTPS:\n answer.data = answerSvcb.read(view, position);\n return answer;\n case RecordType.CAA:\n answer.data = answerCaa.read(view, position);\n return answer;\n case RecordType.PTR:\n case RecordType.CNAME:\n case RecordType.DNAME:\n answer.data = answerName.read(view, position);\n return answer;\n default:\n answer.data = answerBytes.read(view, position);\n return answer;\n }\n },\n};\n","import { type PacketFlag, PacketRType, PacketType } from './constants';\nimport { type Encoder, type ReadPosition, advance } from './encoders';\nimport { type Question, question } from './questions';\nimport { type Answer, answer } from './answers';\n\nconst readList = <T>(\n encoder: Encoder<T>,\n view: DataView,\n position: ReadPosition,\n limit: number\n): T[] | undefined => {\n if (!limit) {\n return undefined;\n }\n const { offset, length } = position;\n const data: T[] = [];\n for (let idx = 0; idx < limit && position.offset - offset < length; idx++)\n data.push(encoder.read(view, position));\n return data;\n};\n\nexport interface Packet {\n id?: number;\n type?: PacketType;\n rtype?: PacketRType;\n flags?: PacketFlag | (number & {});\n questions?: Question[];\n answers?: Answer[];\n additionals?: Answer[];\n authorities?: Answer[];\n}\n\nconst PACKET_FLAG_MASK = 32767;\n\nexport const packet: Encoder<Packet> = {\n bytes(packet) {\n const { questions, answers, authorities, additionals } = packet;\n let byteLength = 12;\n let idx = 0;\n for (idx = 0; questions && idx < questions.length; idx++)\n byteLength += question.bytes(questions[idx]);\n for (idx = 0; answers && idx < answers.length; idx++)\n byteLength += answer.bytes(answers[idx]);\n for (idx = 0; authorities && idx < authorities.length; idx++)\n byteLength += answer.bytes(authorities[idx]);\n for (idx = 0; additionals && idx < additionals.length; idx++)\n byteLength += answer.bytes(additionals[idx]);\n return byteLength;\n },\n write(view, offset, packet) {\n const { questions, answers, authorities, additionals } = packet;\n let flags =\n ((packet.flags || 0) & PACKET_FLAG_MASK) |\n (packet.type || PacketType.QUERY) |\n (packet.rtype || 0);\n view.setUint16(offset, packet.id || 0);\n view.setUint16(offset + 2, flags);\n view.setUint16(offset + 4, packet.questions?.length || 0);\n view.setUint16(offset + 6, packet.answers?.length || 0);\n view.setUint16(offset + 8, packet.authorities?.length || 0);\n view.setUint16(offset + 10, packet.additionals?.length || 0);\n offset += 12;\n let idx = 0;\n for (idx = 0; questions && idx < questions.length; idx++)\n offset = question.write(view, offset, questions[idx]);\n for (idx = 0; answers && idx < answers.length; idx++)\n offset = answer.write(view, offset, answers[idx]);\n for (idx = 0; authorities && idx < authorities.length; idx++)\n offset = answer.write(view, offset, authorities[idx]);\n for (idx = 0; additionals && idx < additionals.length; idx++)\n offset = answer.write(view, offset, additionals[idx]);\n return offset;\n },\n read(view, position) {\n const id = view.getUint16(position.offset);\n const flags = view.getUint16(position.offset + 2);\n const questionsLength = view.getUint16(position.offset + 4);\n const answersLength = view.getUint16(position.offset + 6);\n const authoritiesLength = view.getUint16(position.offset + 8);\n const additionalsLength = view.getUint16(position.offset + 10);\n advance(position, 12);\n return {\n id,\n flags,\n rtype: flags & 0xf,\n type:\n flags & PacketType.RESPONSE ? PacketType.RESPONSE : PacketType.QUERY,\n questions: readList(question, view, position, questionsLength),\n answers: readList(answer, view, position, answersLength),\n authorities: readList(answer, view, position, authoritiesLength),\n additionals: readList(answer, view, position, additionalsLength),\n };\n },\n};\n","import { type Packet, packet } from './packets';\n\nexport type {\n NsAnswer,\n AAnswer,\n AAAAAnswer,\n TxtAnswer,\n SrvAnswer,\n HInfoAnswer,\n CaaAnswer,\n SoaAnswer,\n MxAnswer,\n DnskeyAnswer,\n RrsigAnswer,\n RpAnswer,\n NsecAnswer,\n Nsec3Answer,\n SshfpAnswer,\n DsAnswer,\n NaptrAnswer,\n TlsaAnswer,\n PtrAnswer,\n CnameAnswer,\n DnameAnswer,\n NullAnswer,\n UnknownAnswer,\n Answer,\n} from './answers';\n\nexport type {\n IPType,\n ClientSubnetOpt,\n KeepAliveOpt,\n PaddingOpt,\n TagOpt,\n UnknownOpt,\n PacketOpt,\n} from './options';\nexport type { Packet } from './packets';\nexport type { Question } from './questions';\nexport * from './constants';\n\nexport function decode(bytes: ArrayBufferView | ArrayBufferLike): Packet {\n const view =\n 'buffer' in bytes\n ? new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength)\n : new DataView(bytes);\n return packet.read(view, { offset: 0, length: view.byteLength });\n}\n\nexport function streamDecode(bytes: ArrayBufferView | ArrayBufferLike): Packet {\n const view =\n 'buffer' in bytes\n ? new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength)\n : new DataView(bytes);\n const length = Math.min(view.byteLength - 2, view.getUint16(0));\n return packet.read(view, { offset: 2, length });\n}\n\nexport function encodingLength(input: Packet): number {\n return packet.bytes(input);\n}\n\nexport function encode(input: Packet): Uint8Array {\n const buffer = new ArrayBuffer(packet.bytes(input));\n const length = packet.write(new DataView(buffer), 0, input);\n return new Uint8Array(buffer, 0, length);\n}\n\nexport function streamEncode(input: Packet): Uint8Array {\n const buffer = new ArrayBuffer(packet.bytes(input) + 2);\n const view = new DataView(buffer);\n const length = packet.write(view, 2, input);\n view.setUint16(0, length - 2);\n return new Uint8Array(buffer, 0, length);\n}\n"],"names":["PacketType","RecordType","RecordClass","PacketFlag","OptCode","textEncoder","TextEncoder","textDecoder","TextDecoder","utf8ByteLength","Buffer","str","byteLength","length","i","code","charCodeAt","name","bytes","replace","RangeError","write","view","offset","encoded","encode","startIdx","endIdx","indexOf","byteIdx","idx","setUint8","read","outerPosition","labels","maxOffset","innerPosition","labelLength","getUint8","advance","label","sliceView","push","decode","jumpTo","getUint16","join","data","Uint8Array","buffer","byteOffset","set","position","octets","string","typeBitmap","types","extents","Math","max","ceil","typesByWindow","window","typelist","windowLength","bitmap","bit","ipv4","ip","split","octetIdx","parseInt","min","Array","fill","map","_","index","uint16","key","setUint16","ipv6","middleIdx","head","slice","tail","includes","pop","undefined","headIdx","pad","tailIdx","v4Parts","part","output","toString","withRDLength","encoder","startOffset","rdlength","array","QU_BIT","question","_class","class","IN","qu","type","_name","ANY","IPType","unknownOpt","option","OPTION_0","v4Seg","ipv4Re","RegExp","clientSubnetOpt","sourcePrefixLength","scopePrefixLength","family","test","v4","v6","maskLength","ipBuffer","encodeIntoBuffer","input","ArrayBuffer","endOffset","DataView","CLIENT_SUBNET","keepAliveOpt","timeout","TCP_KEEPALIVE","paddingOpt","_view","PADDING","tagOpt","tags","KEY_TAG","isUnknownOpt","opt","SvcParamCode","mandatorySvcParam","alpnSvcParam","portSvcParam","ipv4HintSvcParam","ipv6HintSvcParam","bytesSvcParam","svcParams","params","mandatory","alpn","port","ipv4hint","ipv6hint","echconfig","dohpath","odoh","Mandatory","Alpn","NoDefaultAlpn","Port","Ipv4Hint","Ipv6Hint","EchConfig","DohPath","Odoh","answerBytes","answerName","answerIPv4","answerIPv6","answerTxt","answerSrv","target","priority","weight","answerHInfo","cpu","os","toCaaTag","answerCaa","tag","value","flags","issuerCritical","answerSoa","mname","rname","setUint32","serial","refresh","retry","expire","minimum","getUint32","answerMx","exchange","preference","answerDnskey","algorithm","answerRrsig","signersName","signature","typeCovered","originalTTL","expiration","inception","keyTag","answerRp","mbox","txt","answerNsec","nextDomain","rrtypes","answerNsec3","salt","iterations","answerSshfp","fingerprint","hash","answerDs","digest","digestType","answerNaptr","services","regexp","replacement","order","answerTlsa","certificate","usage","selector","matchingType","answerSvcb","answerOpt","FLUSH_MASK","answer","OPT","A","NS","SOA","HINFO","MX","TXT","RP","AAAA","SRV","NAPTR","DS","SSHFP","RRSIG","NSEC","DNSKEY","NSEC3","TLSA","SVCB","HTTPS","CAA","PTR","CNAME","DNAME","udpPayloadSize","extendedRcode","ednsVersion","flush","ttl","readList","limit","packet","questions","answers","authorities","additionals","QUERY","rtype","id","questionsLength","answersLength","authoritiesLength","additionalsLength","RESPONSE","streamDecode","encodingLength","streamEncode"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dns-message",
3
- "version": "1.0.1-canary-de720c7dcdc03fb7dc3f7b6f6df698ba0169f9d8",
3
+ "version": "1.0.1-canary-e30ae7317ba5298ba0dbe33fc2f54ef234fb28cb",
4
4
  "description": "Encodes and decodes DNS message packets (derivative of dns-packet)",
5
5
  "author": "Phil Pluckthun <phil@kitten.sh>",
6
6
  "source": "./src/index.ts",