dns-message 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +5 -0
- package/LICENSE.md +23 -0
- package/README.md +56 -0
- package/dist/dns-message.d.ts +491 -0
- package/dist/dns-message.js +1504 -0
- package/dist/dns-message.js.map +1 -0
- package/dist/dns-message.mjs +1492 -0
- package/dist/dns-message.mjs.map +1 -0
- package/package.json +75 -0
|
@@ -0,0 +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\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 return length + str.replace(/\\\\\\./g, '.').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) continue;\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, position) {\n let { offset, length } = position;\n const labels: string[] = [];\n while (position.offset - offset < length) {\n const labelLength = view.getUint8(position.offset);\n advance(position, 1);\n if (labelLength === 0) {\n break;\n } else if ((labelLength & 0xc0) === 0) {\n const label = textDecoder.decode(\n sliceView(view, position, labelLength)\n );\n labels.push(label.replace(/\\./g, '\\\\.'));\n } else if ((labelLength & 0xc0) === 0xc0) {\n // RFC 1035, section 4.1.4 states:\n // \"[...] an entire domain name or a list of labels at the end of a domain name\n // is replaced with a pointer to a prior occurance (sic) of the same name.\"\n const bytesRead = position.offset - offset;\n offset = position.offset;\n length = position.length;\n // Set position to jump target with synthetic length\n position.offset = view.getUint16(position.offset - 1) - 0xc000;\n position.length = length - bytesRead;\n const jumpName = name.read(view, position);\n if (jumpName && jumpName !== '.') labels.push(jumpName);\n // Restore original position\n position.offset = offset;\n position.length = length;\n break;\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;\n position.length -= bytes;\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: Uint8Array | string;\n}\n\nexport interface CnameAnswer extends BaseAnswer {\n type: RecordType.CNAME;\n data: Uint8Array | string;\n}\n\nexport interface DnameAnswer extends BaseAnswer {\n type: RecordType.DNAME;\n data: Uint8Array | 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 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 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 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","write","view","offset","encoded","encode","startIdx","endIdx","indexOf","byteIdx","idx","setUint8","read","position","labels","labelLength","getUint8","advance","label","decode","sliceView","push","bytesRead","getUint16","jumpName","join","data","Uint8Array","buffer","byteOffset","set","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","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
ADDED
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "dns-message",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Encodes and decodes DNS message packets (derivative of dns-packet)",
|
|
5
|
+
"author": "Phil Pluckthun <phil@kitten.sh>",
|
|
6
|
+
"source": "./src/index.ts",
|
|
7
|
+
"main": "./dist/dns-message",
|
|
8
|
+
"module": "./dist/dns-message.mjs",
|
|
9
|
+
"types": "./dist/dns-message.d.ts",
|
|
10
|
+
"files": [
|
|
11
|
+
"LICENSE.md",
|
|
12
|
+
"README.md",
|
|
13
|
+
"CHANGELOG.md",
|
|
14
|
+
"dist/"
|
|
15
|
+
],
|
|
16
|
+
"exports": {
|
|
17
|
+
".": {
|
|
18
|
+
"types": "./dist/dns-message.d.ts",
|
|
19
|
+
"import": "./dist/dns-message.mjs",
|
|
20
|
+
"require": "./dist/dns-message.js",
|
|
21
|
+
"source": "./src/index.ts"
|
|
22
|
+
},
|
|
23
|
+
"./package.json": "./package.json"
|
|
24
|
+
},
|
|
25
|
+
"prettier": {
|
|
26
|
+
"singleQuote": true,
|
|
27
|
+
"arrowParens": "avoid",
|
|
28
|
+
"trailingComma": "es5"
|
|
29
|
+
},
|
|
30
|
+
"lint-staged": {
|
|
31
|
+
"*.{js,ts,json,md}": "prettier --write"
|
|
32
|
+
},
|
|
33
|
+
"keywords": [],
|
|
34
|
+
"license": "MIT",
|
|
35
|
+
"repository": "https://github.com/kitten/dns-message",
|
|
36
|
+
"bugs": {
|
|
37
|
+
"url": "https://github.com/kitten/dns-message/issues"
|
|
38
|
+
},
|
|
39
|
+
"devDependencies": {
|
|
40
|
+
"@babel/plugin-transform-typescript": "^7.28.5",
|
|
41
|
+
"@changesets/cli": "^2.29.7",
|
|
42
|
+
"@changesets/get-github-info": "^0.6.0",
|
|
43
|
+
"@rollup/plugin-babel": "^6.1.0",
|
|
44
|
+
"@rollup/plugin-commonjs": "^29.0.0",
|
|
45
|
+
"@rollup/plugin-node-resolve": "^16.0.3",
|
|
46
|
+
"@rollup/plugin-terser": "^0.4.4",
|
|
47
|
+
"@types/node": "^25.0.3",
|
|
48
|
+
"@vitest/coverage-v8": "^4.0.16",
|
|
49
|
+
"dotenv": "^17.2.3",
|
|
50
|
+
"lint-staged": "^16.2.6",
|
|
51
|
+
"npm-run-all": "^4.1.5",
|
|
52
|
+
"prettier": "^3.6.2",
|
|
53
|
+
"rimraf": "^6.1.0",
|
|
54
|
+
"rollup": "^4.53.3",
|
|
55
|
+
"rollup-plugin-cjs-check": "^1.0.3",
|
|
56
|
+
"rollup-plugin-dts": "^6.2.3",
|
|
57
|
+
"typescript": "^5.9.3",
|
|
58
|
+
"vitest": "^4.0.10"
|
|
59
|
+
},
|
|
60
|
+
"publishConfig": {
|
|
61
|
+
"access": "public"
|
|
62
|
+
},
|
|
63
|
+
"scripts": {
|
|
64
|
+
"test": "vitest test",
|
|
65
|
+
"test:run": "vitest test --run",
|
|
66
|
+
"prebench": "pnpm run build",
|
|
67
|
+
"bench": "vitest bench",
|
|
68
|
+
"build": "rollup -c ./scripts/rollup.config.mjs",
|
|
69
|
+
"postbuild": "tsc --lib esnext,dom,dom.iterable --target esnext --module nodenext --moduleResolution nodenext --noEmit ./dist/dns-message.d.ts",
|
|
70
|
+
"check": "tsc --noEmit",
|
|
71
|
+
"clean": "rimraf dist node_modules/.cache",
|
|
72
|
+
"changeset:version": "changeset version && pnpm install --lockfile-only",
|
|
73
|
+
"changeset:publish": "changeset publish"
|
|
74
|
+
}
|
|
75
|
+
}
|