dns-message 1.0.1-canary-197f34977c71a09b51a96f1a99eb26e7aa8186a5 → 1.0.1-canary-5358558d51748ee8060d5894158491696423b95e
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 +3 -1
- package/dist/dns-message.js +2 -2
- package/dist/dns-message.js.map +1 -1
- package/dist/dns-message.mjs +2 -2
- package/dist/dns-message.mjs.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# dns-message
|
|
2
2
|
|
|
3
|
-
## 1.0.1-canary-
|
|
3
|
+
## 1.0.1-canary-5358558d51748ee8060d5894158491696423b95e
|
|
4
4
|
|
|
5
5
|
### Patch Changes
|
|
6
6
|
|
|
@@ -12,6 +12,8 @@
|
|
|
12
12
|
Submitted by [@kitten](https://github.com/kitten) (See [#1](https://github.com/kitten/dns-message/pull/1))
|
|
13
13
|
- Enforce name and label length limits
|
|
14
14
|
Submitted by [@kitten](https://github.com/kitten) (See [#3](https://github.com/kitten/dns-message/pull/3))
|
|
15
|
+
- ⚠️ Fix `streamEncode` and `streamDecode` treating length uint16 prefix as including the length bytes themselves, rather than excluding them
|
|
16
|
+
Submitted by [@kitten](https://github.com/kitten) (See [#6](https://github.com/kitten/dns-message/pull/6))
|
|
15
17
|
|
|
16
18
|
## 1.0.0
|
|
17
19
|
|
package/dist/dns-message.js
CHANGED
|
@@ -1511,7 +1511,7 @@ exports.encodingLength = function encodingLength(t) {
|
|
|
1511
1511
|
|
|
1512
1512
|
exports.streamDecode = function streamDecode(t) {
|
|
1513
1513
|
const e = "buffer" in t ? new DataView(t.buffer, t.byteOffset, t.byteLength) : new DataView(t);
|
|
1514
|
-
const r = Math.min(e.byteLength, e.getUint16(0))
|
|
1514
|
+
const r = Math.min(e.byteLength - 2, e.getUint16(0));
|
|
1515
1515
|
return nt.read(e, {
|
|
1516
1516
|
offset: 2,
|
|
1517
1517
|
length: r
|
|
@@ -1522,7 +1522,7 @@ exports.streamEncode = function streamEncode(t) {
|
|
|
1522
1522
|
const e = new ArrayBuffer(nt.bytes(t) + 2);
|
|
1523
1523
|
const r = new DataView(e);
|
|
1524
1524
|
const n = nt.write(r, 2, t);
|
|
1525
|
-
r.setUint16(0, n);
|
|
1525
|
+
r.setUint16(0, n - 2);
|
|
1526
1526
|
return new Uint8Array(e, 0, n);
|
|
1527
1527
|
};
|
|
1528
1528
|
//# sourceMappingURL=dns-message.js.map
|
package/dist/dns-message.js.map
CHANGED
|
@@ -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 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 } 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: string;\n nextDomain: string;\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 string.bytes(data.salt) +\n string.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 = string.write(view, offset + 4, data.salt);\n offset = string.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: string.read(view, position),\n nextDomain: string.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, view.getUint16(0)) - 2;\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);\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","string","typeBitmap","types","extents","Math","max","ceil","typesByWindow","window","typelist","windowLength","bitmap","bit","ipv4","ip","octets","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 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 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 } 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: string;\n nextDomain: string;\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 string.bytes(data.salt) +\n string.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 = string.write(view, offset + 4, data.salt);\n offset = string.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: string.read(view, position),\n nextDomain: string.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","string","typeBitmap","types","extents","Math","max","ceil","typesByWindow","window","typelist","windowLength","bitmap","bit","ipv4","ip","octets","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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"}
|
package/dist/dns-message.mjs
CHANGED
|
@@ -1487,7 +1487,7 @@ function decode(t) {
|
|
|
1487
1487
|
|
|
1488
1488
|
function streamDecode(t) {
|
|
1489
1489
|
const e = "buffer" in t ? new DataView(t.buffer, t.byteOffset, t.byteLength) : new DataView(t);
|
|
1490
|
-
const n = Math.min(e.byteLength, e.getUint16(0))
|
|
1490
|
+
const n = Math.min(e.byteLength - 2, e.getUint16(0));
|
|
1491
1491
|
return rt.read(e, {
|
|
1492
1492
|
offset: 2,
|
|
1493
1493
|
length: n
|
|
@@ -1508,7 +1508,7 @@ function streamEncode(t) {
|
|
|
1508
1508
|
const e = new ArrayBuffer(rt.bytes(t) + 2);
|
|
1509
1509
|
const n = new DataView(e);
|
|
1510
1510
|
const r = rt.write(n, 2, t);
|
|
1511
|
-
n.setUint16(0, r);
|
|
1511
|
+
n.setUint16(0, r - 2);
|
|
1512
1512
|
return new Uint8Array(e, 0, r);
|
|
1513
1513
|
}
|
|
1514
1514
|
|
package/dist/dns-message.mjs.map
CHANGED
|
@@ -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 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 } 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: string;\n nextDomain: string;\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 string.bytes(data.salt) +\n string.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 = string.write(view, offset + 4, data.salt);\n offset = string.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: string.read(view, position),\n nextDomain: string.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, view.getUint16(0)) - 2;\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);\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","string","typeBitmap","types","extents","Math","max","ceil","typesByWindow","window","typelist","windowLength","bitmap","bit","ipv4","ip","octets","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 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 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 } 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: string;\n nextDomain: string;\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 string.bytes(data.salt) +\n string.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 = string.write(view, offset + 4, data.salt);\n offset = string.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: string.read(view, position),\n nextDomain: string.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","string","typeBitmap","types","extents","Math","max","ceil","typesByWindow","window","typelist","windowLength","bitmap","bit","ipv4","ip","octets","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-
|
|
3
|
+
"version": "1.0.1-canary-5358558d51748ee8060d5894158491696423b95e",
|
|
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",
|