dns-message 1.0.1-canary-de720c7dcdc03fb7dc3f7b6f6df698ba0169f9d8 → 1.0.1-canary-e30ae7317ba5298ba0dbe33fc2f54ef234fb28cb
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +3 -1
- package/dist/dns-message.js +10 -10
- package/dist/dns-message.js.map +1 -1
- package/dist/dns-message.mjs +10 -10
- package/dist/dns-message.mjs.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
# dns-message
|
|
2
2
|
|
|
3
|
-
## 1.0.1-canary-
|
|
3
|
+
## 1.0.1-canary-e30ae7317ba5298ba0dbe33fc2f54ef234fb28cb
|
|
4
4
|
|
|
5
5
|
### Patch Changes
|
|
6
6
|
|
|
7
7
|
- Clamp `position.length` to `>=0` to be defensive
|
|
8
8
|
Submitted by [@kitten](https://github.com/kitten) (See [#2](https://github.com/kitten/dns-message/pull/2))
|
|
9
|
+
- ⚠️ Fix `issuerCritical` overriding CAA flags
|
|
10
|
+
Submitted by [@kitten](https://github.com/kitten) (See [#8](https://github.com/kitten/dns-message/pull/8))
|
|
9
11
|
- Constrain message compression (name) pointer references
|
|
10
12
|
Submitted by [@kitten](https://github.com/kitten) (See [#4](https://github.com/kitten/dns-message/pull/4))
|
|
11
13
|
- Encode/decode PTR, CNAME, and DNAME as names
|
package/dist/dns-message.js
CHANGED
|
@@ -202,7 +202,6 @@ const c = {
|
|
|
202
202
|
length: 0
|
|
203
203
|
};
|
|
204
204
|
} else {
|
|
205
|
-
advance(s, 2);
|
|
206
205
|
break;
|
|
207
206
|
}
|
|
208
207
|
}
|
|
@@ -330,7 +329,7 @@ const y = {
|
|
|
330
329
|
}
|
|
331
330
|
};
|
|
332
331
|
|
|
333
|
-
const
|
|
332
|
+
const U = {
|
|
334
333
|
bytes: () => 16,
|
|
335
334
|
write(t, e, r) {
|
|
336
335
|
const n = r.indexOf("::");
|
|
@@ -426,14 +425,14 @@ const sliceView = (t, e, r = e.length) => {
|
|
|
426
425
|
return n;
|
|
427
426
|
};
|
|
428
427
|
|
|
429
|
-
const
|
|
428
|
+
const h = 32768;
|
|
430
429
|
|
|
431
430
|
const w = {
|
|
432
431
|
bytes: t => c.bytes(t.name) + 4,
|
|
433
432
|
write(t, e, n) {
|
|
434
433
|
let s = n.class || r.IN;
|
|
435
434
|
if (n.qu) {
|
|
436
|
-
s |=
|
|
435
|
+
s |= h;
|
|
437
436
|
}
|
|
438
437
|
e = c.write(t, e, n.name);
|
|
439
438
|
t.setUint16(e, n.type);
|
|
@@ -445,7 +444,7 @@ const w = {
|
|
|
445
444
|
const s = t.getUint16(e.offset);
|
|
446
445
|
let a = t.getUint16(e.offset + 2) || r.ANY;
|
|
447
446
|
let i = !1;
|
|
448
|
-
if (a !== r.ANY && a &
|
|
447
|
+
if (a !== r.ANY && a & h) {
|
|
449
448
|
a &= -32769;
|
|
450
449
|
i = !0;
|
|
451
450
|
}
|
|
@@ -493,7 +492,7 @@ const N = withRDLength({
|
|
|
493
492
|
const r = new ArrayBuffer(t.bytes(e));
|
|
494
493
|
const n = t.write(new DataView(r), 0, e);
|
|
495
494
|
return new Uint8Array(r, 0, n);
|
|
496
|
-
})(a === b.v4 ? g :
|
|
495
|
+
})(a === b.v4 ? g : U, r.ip);
|
|
497
496
|
for (let r = 0; r < i; r++) {
|
|
498
497
|
t.setUint8(e++, o[r]);
|
|
499
498
|
}
|
|
@@ -509,7 +508,7 @@ const N = withRDLength({
|
|
|
509
508
|
family: r,
|
|
510
509
|
sourcePrefixLength: n,
|
|
511
510
|
scopePrefixLength: a,
|
|
512
|
-
ip: r === b.v4 ? g.read(t, e) :
|
|
511
|
+
ip: r === b.v4 ? g.read(t, e) : U.read(t, e)
|
|
513
512
|
};
|
|
514
513
|
}
|
|
515
514
|
});
|
|
@@ -662,7 +661,7 @@ const m = withRDLength(y);
|
|
|
662
661
|
|
|
663
662
|
const O = withRDLength(array(g));
|
|
664
663
|
|
|
665
|
-
const L = withRDLength(array(
|
|
664
|
+
const L = withRDLength(array(U));
|
|
666
665
|
|
|
667
666
|
const v = withRDLength(f);
|
|
668
667
|
|
|
@@ -709,6 +708,7 @@ const x = {
|
|
|
709
708
|
}
|
|
710
709
|
if (r["no-default-alpn"]) {
|
|
711
710
|
t.setUint16(e, R.NoDefaultAlpn);
|
|
711
|
+
t.setUint16(e + 2, 0);
|
|
712
712
|
e += 4;
|
|
713
713
|
}
|
|
714
714
|
if (null != r.port) {
|
|
@@ -805,7 +805,7 @@ const _ = withRDLength(c);
|
|
|
805
805
|
|
|
806
806
|
const M = withRDLength(g);
|
|
807
807
|
|
|
808
|
-
const V = withRDLength(
|
|
808
|
+
const V = withRDLength(U);
|
|
809
809
|
|
|
810
810
|
const Y = withRDLength(array(u));
|
|
811
811
|
|
|
@@ -862,7 +862,7 @@ const F = withRDLength({
|
|
|
862
862
|
write(t, e, r) {
|
|
863
863
|
let n = r.flags || 0;
|
|
864
864
|
if (r.issuerCritical) {
|
|
865
|
-
n
|
|
865
|
+
n |= 128;
|
|
866
866
|
}
|
|
867
867
|
t.setUint8(e, n);
|
|
868
868
|
e = u.write(t, e + 1, r.tag);
|
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 octets: Encoder<Uint8Array> = {\n bytes(data) {\n return data.byteLength + 1;\n },\n write(view, offset, bytes) {\n view.setUint8(offset++, bytes.byteLength);\n const target = new Uint8Array(\n view.buffer,\n view.byteOffset + offset,\n bytes.byteLength\n );\n target.set(bytes);\n offset += bytes.byteLength;\n return offset;\n },\n read(view, position) {\n const length = view.getUint8(position.offset);\n advance(position, 1);\n return sliceView(view, position, length);\n },\n};\n\nexport const string: Encoder<string> = {\n bytes(str) {\n return utf8ByteLength(str) + 1;\n },\n write(view, offset, data) {\n const buffer = textEncoder.encode(data);\n view.setUint8(offset++, buffer.byteLength);\n return bytes.write(view, offset, buffer);\n },\n read(view, position) {\n const length = view.getUint8(position.offset);\n advance(position, 1);\n return textDecoder.decode(sliceView(view, position, length));\n },\n};\n\nexport const typeBitmap: Encoder<RecordType[]> = {\n bytes(types) {\n const extents: number[] = [];\n for (let idx = 0; idx < types.length; idx++)\n extents[types[idx] >> 8] = Math.max(\n extents[types[idx] >> 8] || 0,\n types[idx] & 0xff\n );\n let length = 0;\n for (let idx = 0; idx < extents.length; idx++)\n if (extents[idx] != null) length += 2 + Math.ceil((extents[idx] + 1) / 8);\n return length;\n },\n write(view, offset, types) {\n const typesByWindow: number[][] = [];\n for (let idx = 0; idx < types.length; idx++) {\n const window =\n typesByWindow[types[idx] >> 8] || (typesByWindow[types[idx] >> 8] = []);\n window[(types[idx] >> 3) & 0x1f] |= 1 << (7 - (types[idx] & 0x7));\n }\n for (let idx = 0; idx < typesByWindow.length; idx++) {\n const window = typesByWindow[idx];\n if (window != null) {\n view.setUint8(offset++, idx);\n view.setUint8(offset++, window.length);\n for (let byteIdx = 0; byteIdx < window.length; byteIdx++) {\n view.setUint8(offset++, window[byteIdx]);\n }\n }\n }\n return offset;\n },\n read(view, position) {\n const { offset, length } = position;\n const typelist: RecordType[] = [];\n while (position.offset - offset < length) {\n const window = view.getUint8(position.offset);\n const windowLength = view.getUint8(position.offset + 1);\n for (let idx = 0; idx < windowLength; idx++) {\n const bitmap = view.getUint8(position.offset + 2 + idx);\n for (let bit = 0; bit < 8; bit++) {\n if (bitmap & (1 << (7 - bit))) {\n typelist.push((window << 8) | (idx << 3) | bit);\n }\n }\n }\n advance(position, 2 + windowLength);\n }\n return typelist;\n },\n};\n\nexport const ipv4: Encoder<string> = {\n bytes() {\n return 4;\n },\n write(view, offset, ip) {\n const octets = ip.split('.', 4);\n for (let octetIdx = 0; octetIdx < 4; octetIdx++)\n view.setUint8(offset++, parseInt(octets[octetIdx], 10));\n return offset;\n },\n read(view, position) {\n const length = Math.min(position.length, 4);\n const ip = new Array(4)\n .fill(0)\n .map((_, index) =>\n index < length ? view.getUint8(position.offset + index) : 0\n )\n .join('.');\n advance(position, length);\n return ip;\n },\n};\n\nexport const uint16: Encoder<number> = {\n bytes() {\n return 2;\n },\n write(view, offset, key) {\n view.setUint16(offset, key);\n return offset + 2;\n },\n read(view, position) {\n const key = view.getUint16(position.offset);\n advance(position, 2);\n return key;\n },\n};\n\nexport const ipv6: Encoder<string> = {\n bytes() {\n return 16;\n },\n write(view, offset, ip) {\n const middleIdx = ip.indexOf('::');\n const head = (middleIdx > -1 ? ip.slice(0, middleIdx) : ip).split(':');\n const tail = middleIdx > -1 ? ip.slice(middleIdx + 2).split(':') : [];\n const ipv4 =\n tail.length > 0 && tail[tail.length - 1].includes('.')\n ? tail.pop()\n : undefined;\n for (let headIdx = 0; headIdx < head.length; headIdx++) {\n view.setUint16(offset, parseInt(head[headIdx], 16));\n offset += 2;\n }\n const middleLength = 8 - (head.length + tail.length + (ipv4 ? 2 : 0));\n for (let pad = middleLength; pad > 0; pad--) {\n view.setUint16(offset, 0);\n offset += 2;\n }\n for (let tailIdx = 0; tailIdx < tail.length; tailIdx++) {\n view.setUint16(offset, parseInt(tail[tailIdx], 16));\n offset += 2;\n }\n if (ipv4) {\n const v4Parts = ipv4.split('.', 4).map(part => parseInt(part, 10));\n view.setUint16(offset, (v4Parts[0] << 8) | v4Parts[1]);\n view.setUint16(offset + 2, (v4Parts[2] << 8) | v4Parts[3]);\n offset += 4;\n }\n return offset;\n },\n read(view, position) {\n let output = '';\n const length = Math.min(position.length, 16);\n for (let idx = 0; idx < length; idx += 2) {\n if (idx !== 0) output += ':';\n output += view.getUint16(position.offset + idx).toString(16);\n }\n advance(position, length);\n return output\n .replace(/(^|:)0(:0)*:0(:|$)/, '$1::$3')\n .replace(/:{3,4}/, '::');\n },\n};\n\nexport const withRDLength = <T, R = T>(\n encoder: Encoder<T, R>\n): Encoder<T, R> => ({\n bytes(data) {\n return encoder.bytes(data) + 2;\n },\n write(view, offset, data) {\n const startOffset = offset;\n offset = encoder.write(view, offset + 2, data);\n view.setUint16(startOffset, offset - startOffset - 2);\n return offset;\n },\n read(view, position) {\n const { offset, length } = position;\n const rdlength = (position.length = view.getUint16(position.offset));\n position.offset += 2;\n const data = encoder.read(view, position);\n // Restore original position and advance by specified size after\n position.offset = offset + 2 + rdlength;\n position.length = length;\n return data;\n },\n});\n\nexport const array = <T>(encoder: Encoder<T>): Encoder<T[]> => ({\n bytes(data) {\n let byteLength = 0;\n for (let idx = 0; data != null && idx < data.length; idx++)\n byteLength += encoder.bytes(data[idx]);\n return byteLength;\n },\n write(view, offset, data) {\n for (let idx = 0; data != null && idx < data.length; idx++)\n offset = encoder.write(view, offset, data[idx]);\n return offset;\n },\n read(view, position) {\n const { offset, length } = position;\n const data: T[] = [];\n while (position.offset - offset < length)\n data.push(encoder.read(view, position));\n return data;\n },\n});\n\nexport const advance = (position: ReadPosition, bytes: number) => {\n position.offset += bytes | 0;\n position.length -= bytes | 0;\n position.length &= ~(position.length >> 31);\n};\n\nexport const encodeIntoBuffer = <T>(\n encoder: Encoder<T>,\n input: T\n): Uint8Array => {\n const buffer = new ArrayBuffer(encoder.bytes(input));\n const endOffset = encoder.write(new DataView(buffer), 0, input);\n return new Uint8Array(buffer, 0, endOffset);\n};\n\nexport const sliceView = (\n view: DataView,\n position: ReadPosition,\n length = position.length\n) => {\n const slice = new Uint8Array(\n view.buffer,\n view.byteOffset + position.offset,\n length\n );\n advance(position, length);\n return slice;\n};\n","import { RecordClass, RecordType } from './constants';\nimport { Encoder, name, advance } from './encoders';\n\nexport interface Question {\n name: string;\n type: RecordType;\n class?: RecordClass;\n qu?: boolean;\n}\n\nconst QU_BIT = 1 << 15;\n\nexport const question: Encoder<Question> = {\n bytes(question) {\n return name.bytes(question.name) + 4;\n },\n write(view, offset, question) {\n let _class = question.class || RecordClass.IN;\n if (question.qu) _class |= QU_BIT;\n offset = name.write(view, offset, question.name);\n view.setUint16(offset, question.type);\n view.setUint16(offset + 2, _class);\n offset += 4;\n return offset;\n },\n read(view, position) {\n const _name = name.read(view, position);\n const type = view.getUint16(position.offset);\n let _class = view.getUint16(position.offset + 2) || RecordClass.ANY;\n let qu = false;\n if (_class !== RecordClass.ANY && _class & QU_BIT) {\n _class &= ~QU_BIT;\n qu = true;\n }\n advance(position, 4);\n return {\n name: _name,\n type,\n class: _class,\n qu,\n };\n },\n};\n","import { OptCode } from './constants';\nimport {\n type Encoder,\n withRDLength,\n encodeIntoBuffer,\n advance,\n bytes,\n ipv4,\n ipv6,\n} from './encoders';\n\nexport const enum IPType {\n v4 = 1,\n v6 = 2,\n}\n\nexport interface BaseOpt {\n code: number;\n}\n\nexport interface ClientSubnetOpt extends BaseOpt {\n code: OptCode.CLIENT_SUBNET;\n family?: IPType | (number & {});\n sourcePrefixLength?: number;\n scopePrefixLength?: number;\n ip: string;\n}\n\nexport interface KeepAliveOpt extends BaseOpt {\n code: OptCode.TCP_KEEPALIVE;\n timeout?: number;\n}\n\nexport interface PaddingOpt extends BaseOpt {\n code: OptCode.PADDING;\n length?: number;\n}\n\nexport interface TagOpt extends BaseOpt {\n code: OptCode.KEY_TAG;\n tags: number[];\n}\n\nexport interface UnknownOpt extends BaseOpt {\n data: Uint8Array;\n}\n\nexport type PacketOpt =\n | ClientSubnetOpt\n | KeepAliveOpt\n | PaddingOpt\n | TagOpt\n | UnknownOpt;\n\nexport const unknownOpt: Encoder<UnknownOpt> = withRDLength({\n bytes(option) {\n return bytes.bytes(option.data);\n },\n write(view, offset, option) {\n return bytes.write(view, offset, option.data);\n },\n read(view, position) {\n return {\n code: OptCode.OPTION_0,\n data: bytes.read(view, position),\n };\n },\n});\n\n// See: https://github.com/nodejs/node/blob/842448b/lib/internal/net.js#L15-L18\nconst v4Seg = '(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])';\nconst v4Str = `(?:${v4Seg}\\\\.){3}${v4Seg}`;\nconst ipv4Re = new RegExp(`^${v4Str}$`);\n\nconst isIPv4 = (ip: string) => ipv4Re.test(ip);\n\nexport const clientSubnetOpt: Encoder<ClientSubnetOpt> = withRDLength({\n bytes(option) {\n const sourcePrefixLength = option.sourcePrefixLength || 0;\n return Math.ceil(sourcePrefixLength / 8) + 4;\n },\n write(view, offset, option) {\n const sourcePrefixLength = option.sourcePrefixLength || 0;\n const scopePrefixLength = option.scopePrefixLength || 0;\n const family = option.family || (isIPv4(option.ip) ? IPType.v4 : IPType.v6);\n const maskLength = Math.ceil(sourcePrefixLength / 8);\n view.setUint16(offset, family);\n view.setUint8(offset + 2, sourcePrefixLength);\n view.setUint8(offset + 3, scopePrefixLength);\n offset += 4;\n const ipBuffer = encodeIntoBuffer(\n family === IPType.v4 ? ipv4 : ipv6,\n option.ip\n );\n for (let byteIdx = 0; byteIdx < maskLength; byteIdx++)\n view.setUint8(offset++, ipBuffer[byteIdx]);\n return offset;\n },\n read(view, position) {\n const family = view.getUint16(position.offset);\n const sourcePrefixLength = view.getUint8(position.offset + 2);\n const scopePrefixLength = view.getUint8(position.offset + 3);\n advance(position, 4);\n return {\n code: OptCode.CLIENT_SUBNET,\n family,\n sourcePrefixLength,\n scopePrefixLength,\n ip:\n family === IPType.v4\n ? ipv4.read(view, position)\n : ipv6.read(view, position),\n };\n },\n});\n\nexport const keepAliveOpt: Encoder<KeepAliveOpt> = withRDLength({\n bytes(option) {\n return option.timeout ? 2 : 0;\n },\n write(view, offset, option) {\n if (option.timeout) {\n view.setUint16(offset, option.timeout);\n offset += 2;\n }\n return offset;\n },\n read(view, position) {\n if (position.length) {\n const timeout = view.getUint16(position.offset);\n advance(position, 2);\n return { code: OptCode.TCP_KEEPALIVE, timeout };\n } else {\n return { code: OptCode.TCP_KEEPALIVE, timeout: undefined };\n }\n },\n});\n\nexport const paddingOpt: Encoder<PaddingOpt> = withRDLength({\n bytes(option) {\n return option.length || 0;\n },\n write(_view, offset, option) {\n return offset + (option.length || 0);\n },\n read(_view, position) {\n const { length } = position;\n advance(position, length);\n return { code: OptCode.PADDING, length };\n },\n});\n\nexport const tagOpt: Encoder<TagOpt> = withRDLength({\n bytes(option) {\n return option.tags.length * 2;\n },\n write(view, offset, option) {\n for (let idx = 0; idx < option.tags.length; idx++) {\n view.setUint16(offset, option.tags[idx]);\n offset += 2;\n }\n return offset;\n },\n read(view, position) {\n const { offset, length } = position;\n const tags: number[] = [];\n while (position.offset - offset < length) {\n tags.push(view.getUint16(position.offset));\n advance(position, 2);\n }\n return {\n code: OptCode.KEY_TAG,\n tags,\n };\n },\n});\n\nconst isUnknownOpt = (option: PacketOpt): option is UnknownOpt =>\n !!(option as UnknownOpt).data;\n\nexport const option: Encoder<PacketOpt> = {\n bytes(option) {\n if (isUnknownOpt(option)) {\n return unknownOpt.bytes(option) + 2;\n }\n switch (option.code) {\n case OptCode.CLIENT_SUBNET:\n return clientSubnetOpt.bytes(option) + 2;\n case OptCode.TCP_KEEPALIVE:\n return keepAliveOpt.bytes(option) + 2;\n case OptCode.PADDING:\n return paddingOpt.bytes(option) + 2;\n case OptCode.KEY_TAG:\n return tagOpt.bytes(option) + 2;\n }\n },\n write(view, offset, option) {\n view.setUint16(offset, option.code);\n offset += 2;\n if (isUnknownOpt(option)) {\n return unknownOpt.write(view, offset, option);\n }\n switch (option.code) {\n case OptCode.CLIENT_SUBNET:\n return clientSubnetOpt.write(view, offset, option);\n case OptCode.TCP_KEEPALIVE:\n return keepAliveOpt.write(view, offset, option);\n case OptCode.PADDING:\n return paddingOpt.write(view, offset, option);\n case OptCode.KEY_TAG:\n return tagOpt.write(view, offset, option);\n }\n },\n read(view, position) {\n const code = view.getUint16(position.offset);\n advance(position, 2);\n switch (code) {\n case OptCode.CLIENT_SUBNET:\n return clientSubnetOpt.read(view, position);\n case OptCode.TCP_KEEPALIVE:\n return keepAliveOpt.read(view, position);\n case OptCode.PADDING:\n return paddingOpt.read(view, position);\n case OptCode.KEY_TAG:\n return tagOpt.read(view, position);\n default:\n const opt = unknownOpt.read(view, position);\n opt.code = code;\n return opt;\n }\n },\n};\n","import {\n type Encoder,\n withRDLength,\n array,\n textDecoder,\n advance,\n uint16,\n bytes,\n ipv4,\n ipv6,\n string,\n} from './encoders';\n\nexport const enum SvcParamCode {\n Mandatory = 0,\n Alpn = 1,\n NoDefaultAlpn = 2,\n Port = 3,\n Ipv4Hint = 4,\n EchConfig = 5,\n Ipv6Hint = 6,\n DohPath = 7,\n Odoh = 32769,\n}\n\nexport interface SvcParams {\n mandatory?: (SvcParamCode | (number & {}))[];\n alpn?: string[];\n 'no-default-alpn'?: boolean;\n port?: number;\n ipv4hint?: string[];\n ipv6hint?: string[];\n echconfig?: Uint8Array;\n dohpath?: string;\n odoh?: Uint8Array;\n}\n\nconst mandatorySvcParam: Encoder<(SvcParamCode | (number & {}))[]> =\n withRDLength(array(uint16));\nconst alpnSvcParam = withRDLength(array(string));\nconst portSvcParam = withRDLength(uint16);\nconst ipv4HintSvcParam = withRDLength(array(ipv4));\nconst ipv6HintSvcParam = withRDLength(array(ipv6));\nconst bytesSvcParam = withRDLength(bytes);\n\nexport const svcParams: Encoder<SvcParams> = {\n bytes(params) {\n let byteLength = 0;\n if (params.mandatory != null)\n byteLength += mandatorySvcParam.bytes(params.mandatory) + 2;\n if (params.alpn != null) byteLength += alpnSvcParam.bytes(params.alpn) + 2;\n if (params['no-default-alpn']) byteLength += 4;\n if (params.port != null) byteLength += portSvcParam.bytes(params.port) + 2;\n if (params.ipv4hint)\n byteLength += ipv4HintSvcParam.bytes(params.ipv4hint) + 2;\n if (params.ipv6hint)\n byteLength += ipv6HintSvcParam.bytes(params.ipv6hint) + 2;\n if (params.echconfig)\n byteLength += bytesSvcParam.bytes(params.echconfig) + 2;\n if (params.dohpath) byteLength += bytesSvcParam.bytes(params.dohpath) + 2;\n if (params.odoh) byteLength += bytesSvcParam.bytes(params.odoh) + 2;\n return byteLength;\n },\n write(view, offset, params) {\n if (params.mandatory != null) {\n view.setUint16(offset, SvcParamCode.Mandatory);\n offset = mandatorySvcParam.write(view, offset + 2, params.mandatory);\n }\n if (params.alpn != null) {\n view.setUint16(offset, SvcParamCode.Alpn);\n offset = alpnSvcParam.write(view, offset + 2, params.alpn);\n }\n if (params['no-default-alpn']) {\n view.setUint16(offset, SvcParamCode.NoDefaultAlpn);\n offset += 4;\n }\n if (params.port != null) {\n view.setUint16(offset, SvcParamCode.Port);\n offset = portSvcParam.write(view, offset + 2, params.port);\n }\n if (params.ipv4hint) {\n view.setUint16(offset, SvcParamCode.Ipv4Hint);\n offset = ipv4HintSvcParam.write(view, offset + 2, params.ipv4hint);\n }\n if (params.ipv6hint) {\n view.setUint16(offset, SvcParamCode.Ipv6Hint);\n offset = ipv6HintSvcParam.write(view, offset + 2, params.ipv6hint);\n }\n if (params.echconfig) {\n view.setUint16(offset, SvcParamCode.EchConfig);\n offset = bytesSvcParam.write(view, offset + 2, params.echconfig);\n }\n if (params.dohpath) {\n view.setUint16(offset, SvcParamCode.DohPath);\n offset = bytesSvcParam.write(view, offset + 2, params.dohpath);\n }\n if (params.odoh) {\n view.setUint16(offset, SvcParamCode.Odoh);\n offset = bytesSvcParam.write(view, offset + 2, params.odoh);\n }\n return offset;\n },\n read(view, position) {\n const { length, offset } = position;\n const params: SvcParams = {\n mandatory: undefined,\n alpn: undefined,\n 'no-default-alpn': false,\n port: undefined,\n ipv4hint: undefined,\n ipv6hint: undefined,\n echconfig: undefined,\n dohpath: undefined,\n odoh: undefined,\n };\n while (position.offset - offset < length) {\n const code = view.getUint16(position.offset) as\n | SvcParamCode\n | (number & {});\n advance(position, 2);\n switch (code) {\n case SvcParamCode.Mandatory:\n params.mandatory = mandatorySvcParam.read(view, position);\n break;\n case SvcParamCode.Alpn:\n params.alpn = alpnSvcParam.read(view, position);\n break;\n case SvcParamCode.NoDefaultAlpn:\n params['no-default-alpn'] = true;\n advance(position, 2);\n break;\n case SvcParamCode.Port:\n params.port = portSvcParam.read(view, position);\n break;\n case SvcParamCode.Ipv4Hint:\n params.ipv4hint = ipv4HintSvcParam.read(view, position);\n break;\n case SvcParamCode.Ipv6Hint:\n params.ipv6hint = ipv6HintSvcParam.read(view, position);\n break;\n case SvcParamCode.EchConfig:\n params.echconfig = bytesSvcParam.read(view, position);\n break;\n case SvcParamCode.DohPath:\n params.dohpath = textDecoder.decode(\n bytesSvcParam.read(view, position)\n );\n break;\n case SvcParamCode.Odoh:\n params.odoh = bytesSvcParam.read(view, position);\n break;\n default:\n // NOTE: We discard other parameters using the required RDLENGTH field\n bytesSvcParam.read(view, position);\n }\n }\n return params;\n },\n};\n","import { RecordClass, RecordType } from './constants';\nimport { Encoder, advance, octets } from './encoders';\nimport { option, PacketOpt } from './options';\nimport { svcParams, SvcParams } from './svcparams';\nimport {\n withRDLength,\n typeBitmap,\n string,\n bytes,\n name,\n ipv4,\n ipv6,\n array,\n} from './encoders';\n\nexport interface BaseAnswer {\n type: RecordType;\n name: string;\n ttl?: number;\n class?: RecordClass;\n flush?: boolean;\n}\n\nconst answerBytes = withRDLength(bytes);\n\nexport interface NsAnswer extends BaseAnswer {\n type: RecordType.NS;\n data: string;\n}\n\nconst answerName = withRDLength(name);\n\nexport interface AAnswer extends BaseAnswer {\n type: RecordType.A;\n data: string;\n}\n\nconst answerIPv4 = withRDLength(ipv4);\n\nexport interface AAAAAnswer extends BaseAnswer {\n type: RecordType.AAAA;\n data: string;\n}\n\nconst answerIPv6 = withRDLength(ipv6);\n\nexport interface TxtAnswer extends BaseAnswer {\n type: RecordType.TXT;\n data: string[];\n}\n\nexport const answerTxt: Encoder<string[]> = withRDLength(array(string));\n\nexport interface SrvData {\n priority?: number;\n weight?: number;\n port: number;\n target: string;\n}\n\nexport interface SrvAnswer extends BaseAnswer {\n type: RecordType.SRV;\n data: SrvData;\n}\n\nexport const answerSrv: Encoder<SrvData> = withRDLength({\n bytes(data) {\n return name.bytes(data.target) + 6;\n },\n write(view, offset, data) {\n view.setUint16(offset, data.priority || 0);\n view.setUint16(offset + 2, data.weight || 0);\n view.setUint16(offset + 4, data.port || 0);\n return name.write(view, offset + 6, data.target);\n },\n read(view, position) {\n const data: SrvData = { priority: 0, weight: 0, port: 0, target: '' };\n data.priority = view.getUint16(position.offset);\n data.weight = view.getUint16(position.offset + 2);\n data.port = view.getUint16(position.offset + 4);\n advance(position, 6);\n data.target = name.read(view, position);\n return data;\n },\n});\n\nexport interface HInfoData {\n cpu: string;\n os: string;\n}\n\nexport interface HInfoAnswer extends BaseAnswer {\n type: RecordType.HINFO;\n data: HInfoData;\n}\n\nexport const answerHInfo: Encoder<HInfoData> = withRDLength({\n bytes(data) {\n return string.bytes(data.cpu) + string.bytes(data.os);\n },\n write(view, offset, data) {\n offset = string.write(view, offset, data.cpu);\n offset = string.write(view, offset, data.os);\n return offset;\n },\n read(view, position) {\n return {\n cpu: string.read(view, position),\n os: string.read(view, position),\n };\n },\n});\n\nexport interface CaaData {\n flags?: number;\n tag: 'issue' | 'issuewild' | 'iodef';\n value: Uint8Array;\n issuerCritical?: boolean;\n}\n\nexport interface CaaAnswer extends BaseAnswer {\n type: RecordType.CAA;\n data: CaaData;\n}\n\nconst ISSUER_CRITICAL = 1 << 7;\n\nconst toCaaTag = (input: string) => {\n switch (input) {\n case 'issue':\n case 'issuewild':\n case 'iodef':\n return input;\n default:\n return 'issue';\n }\n};\n\nexport const answerCaa: Encoder<CaaData> = withRDLength({\n bytes(data) {\n return string.bytes(data.tag) + bytes.bytes(data.value) + 1;\n },\n write(view, offset, data) {\n let flags = data.flags || 0;\n if (data.issuerCritical) flags = ISSUER_CRITICAL;\n view.setUint8(offset, flags);\n offset = string.write(view, offset + 1, data.tag);\n offset = bytes.write(view, offset, data.value);\n return offset;\n },\n read(view, position) {\n const flags = view.getUint8(position.offset);\n advance(position, 1);\n return {\n flags,\n tag: toCaaTag(string.read(view, position)),\n value: bytes.read(view, position),\n issuerCritical: !!(flags & ISSUER_CRITICAL),\n };\n },\n});\n\nexport interface SoaData {\n mname: string;\n rname: string;\n serial?: number;\n refresh?: number;\n retry?: number;\n expire?: number;\n minimum?: number;\n}\n\nexport interface SoaAnswer extends BaseAnswer {\n type: RecordType.SOA;\n data: SoaData;\n}\n\nexport const answerSoa: Encoder<SoaData> = withRDLength({\n bytes(data) {\n return name.bytes(data.mname) + name.bytes(data.rname) + 20;\n },\n write(view, offset, data) {\n offset = name.write(view, offset, data.mname);\n offset = name.write(view, offset, data.rname);\n view.setUint32(offset, data.serial || 0);\n view.setUint32(offset + 4, data.refresh || 0);\n view.setUint32(offset + 8, data.retry || 0);\n view.setUint32(offset + 12, data.expire || 0);\n view.setUint32(offset + 16, data.minimum || 0);\n return offset + 20;\n },\n read(view, position) {\n const data: SoaData = {\n mname: name.read(view, position),\n rname: name.read(view, position),\n serial: view.getUint32(position.offset),\n refresh: view.getUint32(position.offset + 4),\n retry: view.getUint32(position.offset + 8),\n expire: view.getUint32(position.offset + 12),\n minimum: view.getUint32(position.offset + 16),\n };\n position.offset += 20;\n position.length -= 20;\n return data;\n },\n});\n\nexport interface MxData {\n preference?: number;\n exchange: string;\n}\n\nexport interface MxAnswer extends BaseAnswer {\n type: RecordType.MX;\n data: MxData;\n}\n\nexport const answerMx: Encoder<MxData> = withRDLength({\n bytes(data) {\n return name.bytes(data.exchange) + 2;\n },\n write(view, offset, data) {\n view.setUint16(offset, data.preference || 0);\n return name.write(view, offset + 2, data.exchange);\n },\n read(view, position) {\n const data: MxData = {\n preference: view.getUint16(position.offset),\n exchange: '',\n };\n advance(position, 2);\n data.exchange = name.read(view, position);\n return data;\n },\n});\n\nexport interface DnskeyData {\n flags: number;\n algorithm: number;\n key: Uint8Array;\n}\n\nexport interface DnskeyAnswer extends BaseAnswer {\n type: RecordType.DNSKEY;\n data: DnskeyData;\n}\n\nexport const answerDnskey: Encoder<DnskeyData> = withRDLength({\n bytes(data) {\n return bytes.bytes(data.key) + 4;\n },\n write(view, offset, data) {\n const PROTOCOL_DNSSEC = 3;\n view.setUint16(offset, data.flags);\n view.setUint8(offset + 2, PROTOCOL_DNSSEC);\n view.setUint8(offset + 3, data.algorithm);\n return bytes.write(view, offset + 4, data.key);\n },\n read(view, position) {\n const flags = view.getUint16(position.offset);\n const algorithm = view.getUint8(position.offset + 3);\n advance(position, 4);\n return {\n flags,\n algorithm,\n key: bytes.read(view, position),\n };\n },\n});\n\nexport interface RrsigData {\n typeCovered: RecordType;\n algorithm: number;\n labels: number;\n originalTTL: number;\n expiration: number;\n inception: number;\n keyTag: number;\n signersName: string;\n signature: Uint8Array;\n}\n\nexport interface RrsigAnswer extends BaseAnswer {\n type: RecordType.RRSIG;\n data: RrsigData;\n}\n\nexport const answerRrsig: Encoder<RrsigData> = withRDLength({\n bytes(data) {\n return 18 + name.bytes(data.signersName) + bytes.bytes(data.signature);\n },\n write(view, offset, data) {\n view.setUint16(offset, data.typeCovered);\n view.setUint8(offset + 2, data.algorithm);\n view.setUint8(offset + 3, data.labels);\n view.setUint32(offset + 4, data.originalTTL);\n view.setUint32(offset + 8, data.expiration);\n view.setUint32(offset + 12, data.inception);\n view.setUint16(offset + 16, data.keyTag);\n offset = name.write(view, offset + 18, data.signersName);\n offset = bytes.write(view, offset, data.signature);\n return offset;\n },\n read(view, position) {\n const typeCovered = view.getUint16(position.offset);\n const algorithm = view.getUint8(position.offset + 2);\n const labels = view.getUint8(position.offset + 3);\n const originalTTL = view.getUint32(position.offset + 4);\n const expiration = view.getUint32(position.offset + 8);\n const inception = view.getUint32(position.offset + 12);\n const keyTag = view.getUint16(position.offset + 16);\n advance(position, 18);\n return {\n typeCovered,\n algorithm,\n labels,\n originalTTL,\n expiration,\n inception,\n keyTag,\n signersName: name.read(view, position),\n signature: bytes.read(view, position),\n };\n },\n});\n\nexport interface RpData {\n mbox: string;\n txt: string;\n}\n\nexport interface RpAnswer extends BaseAnswer {\n type: RecordType.RP;\n data: RpData;\n}\n\nexport const answerRp: Encoder<RpData> = withRDLength({\n bytes(data) {\n return name.bytes(data.mbox) + name.bytes(data.txt);\n },\n write(view, offset, data) {\n offset = name.write(view, offset, data.mbox);\n offset = name.write(view, offset, data.txt);\n return offset;\n },\n read(view, position) {\n return {\n mbox: name.read(view, position),\n txt: name.read(view, position),\n };\n },\n});\n\nexport interface NsecData {\n nextDomain: string;\n rrtypes: RecordType[];\n}\n\nexport interface NsecAnswer extends BaseAnswer {\n type: RecordType.NSEC;\n data: NsecData;\n}\n\nexport const answerNsec: Encoder<NsecData> = withRDLength({\n bytes(data) {\n return name.bytes(data.nextDomain) + typeBitmap.bytes(data.rrtypes);\n },\n write(view, offset, data) {\n offset = name.write(view, offset, data.nextDomain);\n offset = typeBitmap.write(view, offset, data.rrtypes);\n return offset;\n },\n read(view, position) {\n return {\n nextDomain: name.read(view, position),\n rrtypes: typeBitmap.read(view, position),\n };\n },\n});\n\nexport interface Nsec3Data {\n algorithm: number;\n flags: number;\n iterations: number;\n salt: Uint8Array;\n nextDomain: Uint8Array;\n rrtypes: RecordType[];\n}\n\nexport interface Nsec3Answer extends BaseAnswer {\n type: RecordType.NSEC3;\n data: Nsec3Data;\n}\n\nexport const answerNsec3: Encoder<Nsec3Data> = withRDLength({\n bytes(data) {\n return (\n octets.bytes(data.salt) +\n octets.bytes(data.nextDomain) +\n typeBitmap.bytes(data.rrtypes) +\n 4\n );\n },\n write(view, offset, data) {\n view.setUint8(offset, data.algorithm);\n view.setUint8(offset + 1, data.flags);\n view.setUint16(offset + 2, data.iterations);\n offset = octets.write(view, offset + 4, data.salt);\n offset = octets.write(view, offset, data.nextDomain);\n offset = typeBitmap.write(view, offset, data.rrtypes);\n return offset;\n },\n read(view, position) {\n const algorithm = view.getUint8(position.offset);\n const flags = view.getUint8(position.offset + 1);\n const iterations = view.getUint16(position.offset + 2);\n advance(position, 4);\n return {\n algorithm,\n flags,\n iterations,\n salt: octets.read(view, position),\n nextDomain: octets.read(view, position),\n rrtypes: typeBitmap.read(view, position),\n };\n },\n});\n\nexport interface SshfpData {\n algorithm: number;\n hash: number;\n fingerprint: Uint8Array;\n}\n\nexport interface SshfpAnswer extends BaseAnswer {\n type: RecordType.SSHFP;\n data: SshfpData;\n}\n\nexport const answerSshfp: Encoder<SshfpData> = withRDLength({\n bytes(data) {\n return bytes.bytes(data.fingerprint) + 2;\n },\n write(view, offset, data) {\n view.setUint8(offset, data.algorithm);\n view.setUint8(offset + 1, data.hash);\n return bytes.write(view, offset + 2, data.fingerprint);\n },\n read(view, position) {\n const algorithm = view.getUint8(position.offset);\n const hash = view.getUint8(position.offset + 1);\n advance(position, 2);\n return {\n algorithm,\n hash,\n fingerprint: bytes.read(view, position),\n };\n },\n});\n\nexport interface DsData {\n keyTag: number;\n algorithm: number;\n digestType: number;\n digest: Uint8Array;\n}\n\nexport interface DsAnswer extends BaseAnswer {\n type: RecordType.DS;\n data: DsData;\n}\n\nexport const answerDs: Encoder<DsData> = withRDLength({\n bytes(data) {\n return bytes.bytes(data.digest) + 4;\n },\n write(view, offset, data) {\n view.setUint16(offset, data.keyTag);\n view.setUint8(offset + 2, data.algorithm);\n view.setUint8(offset + 3, data.digestType);\n offset = bytes.write(view, offset + 4, data.digest);\n return offset;\n },\n read(view, position) {\n const keyTag = view.getUint16(position.offset);\n const algorithm = view.getUint8(position.offset + 2);\n const digestType = view.getUint8(position.offset + 3);\n advance(position, 4);\n return {\n keyTag,\n algorithm,\n digestType,\n digest: bytes.read(view, position),\n };\n },\n});\n\nexport interface NaptrData {\n order: number;\n preference: number;\n flags: string;\n services: string;\n regexp: string;\n replacement: string;\n}\n\nexport interface NaptrAnswer extends BaseAnswer {\n type: RecordType.NAPTR;\n data: NaptrData;\n}\n\nexport const answerNaptr: Encoder<NaptrData> = withRDLength({\n bytes(data) {\n return (\n string.bytes(data.flags) +\n string.bytes(data.services) +\n string.bytes(data.regexp) +\n name.bytes(data.replacement) +\n 4\n );\n },\n write(view, offset, data) {\n view.setUint16(offset, data.order);\n view.setUint16(offset + 2, data.preference);\n offset = string.write(view, offset + 4, data.flags);\n offset = string.write(view, offset, data.services);\n offset = string.write(view, offset, data.regexp);\n offset = name.write(view, offset, data.replacement);\n return offset;\n },\n read(view, position) {\n const order = view.getUint16(position.offset);\n const preference = view.getUint16(position.offset + 2);\n advance(position, 4);\n return {\n order,\n preference,\n flags: string.read(view, position),\n services: string.read(view, position),\n regexp: string.read(view, position),\n replacement: name.read(view, position),\n };\n },\n});\n\nexport interface TlsaData {\n usage: number;\n selector: number;\n matchingType: number;\n certificate: Uint8Array;\n}\n\nexport interface TlsaAnswer extends BaseAnswer {\n type: RecordType.TLSA;\n data: TlsaData;\n}\n\nexport const answerTlsa: Encoder<TlsaData> = withRDLength({\n bytes(data) {\n return bytes.bytes(data.certificate) + 3;\n },\n write(view, offset, data) {\n view.setUint8(offset, data.usage);\n view.setUint8(offset + 1, data.selector);\n view.setUint8(offset + 2, data.matchingType);\n return bytes.write(view, offset + 3, data.certificate);\n },\n read(view, position) {\n const usage = view.getUint8(position.offset);\n const selector = view.getUint8(position.offset + 1);\n const matchingType = view.getUint8(position.offset + 2);\n advance(position, 3);\n return {\n usage,\n selector,\n matchingType,\n certificate: bytes.read(view, position),\n };\n },\n});\n\nexport interface SvcbData {\n name: string;\n priority?: number;\n params: SvcParams;\n}\n\nexport interface SvcbAnswer extends BaseAnswer {\n type: RecordType.SVCB;\n data: SvcbData;\n}\n\nexport interface HttpsAnswer extends BaseAnswer {\n type: RecordType.HTTPS;\n data: SvcbData;\n}\n\nexport const answerSvcb: Encoder<SvcbData> = withRDLength({\n bytes(data) {\n return name.bytes(data.name) + svcParams.bytes(data.params) + 2;\n },\n write(view, offset, data) {\n view.setUint16(offset, data.priority || 0);\n offset = name.write(view, offset + 2, data.name);\n offset = svcParams.write(view, offset, data.params);\n return offset;\n },\n read(view, position) {\n const priority = view.getUint16(position.offset);\n advance(position, 2);\n return {\n name: name.read(view, position),\n priority,\n params: svcParams.read(view, position),\n };\n },\n});\n\nexport interface OptAnswer {\n type: RecordType.OPT;\n name?: '.';\n udpPayloadSize: number;\n extendedRcode: number;\n ednsVersion: number;\n flags: number;\n data: PacketOpt[];\n}\n\nexport const answerOpt: Encoder<PacketOpt[]> = withRDLength(array(option));\n\nexport interface PtrAnswer extends BaseAnswer {\n type: RecordType.PTR;\n data: string;\n}\n\nexport interface CnameAnswer extends BaseAnswer {\n type: RecordType.CNAME;\n data: string;\n}\n\nexport interface DnameAnswer extends BaseAnswer {\n type: RecordType.DNAME;\n data: string;\n}\n\nexport interface NullAnswer extends BaseAnswer {\n type: RecordType.NULL;\n data: Uint8Array | string;\n}\n\nexport interface UnknownAnswer extends BaseAnswer {\n type:\n | RecordType.AFSDB\n | RecordType.APL\n | RecordType.AXFR\n | RecordType.CDNSKEY\n | RecordType.CDS\n | RecordType.CERT\n | RecordType.DHCID\n | RecordType.DLV\n | RecordType.HIP\n | RecordType.IPSECKEY\n | RecordType.IXFR\n | RecordType.KEY\n | RecordType.KX\n | RecordType.LOC\n | RecordType.NSEC3PARAM\n | RecordType.NULL\n | RecordType.SIG\n | RecordType.TA\n | RecordType.TKEY\n | RecordType.TSIG;\n data: Uint8Array | string;\n}\n\nexport type Answer =\n | AAnswer\n | AAAAAnswer\n | TxtAnswer\n | SrvAnswer\n | HInfoAnswer\n | CaaAnswer\n | NsAnswer\n | SoaAnswer\n | MxAnswer\n | OptAnswer\n | DnskeyAnswer\n | RrsigAnswer\n | RpAnswer\n | NsecAnswer\n | Nsec3Answer\n | SshfpAnswer\n | DsAnswer\n | NaptrAnswer\n | TlsaAnswer\n | PtrAnswer\n | CnameAnswer\n | DnameAnswer\n | SvcbAnswer\n | HttpsAnswer\n | NullAnswer\n | UnknownAnswer;\n\nconst FLUSH_MASK = 1 << 15;\n\nexport const answer: Encoder<Answer> = {\n bytes(answer) {\n const byteLength =\n 8 + name.bytes(answer.type === RecordType.OPT ? '.' : answer.name);\n switch (answer.type) {\n case RecordType.A:\n return byteLength + answerIPv4.bytes(answer.data);\n case RecordType.NS:\n return byteLength + answerName.bytes(answer.data);\n case RecordType.SOA:\n return byteLength + answerSoa.bytes(answer.data);\n case RecordType.HINFO:\n return byteLength + answerHInfo.bytes(answer.data);\n case RecordType.MX:\n return byteLength + answerMx.bytes(answer.data);\n case RecordType.TXT:\n return byteLength + answerTxt.bytes(answer.data);\n case RecordType.RP:\n return byteLength + answerRp.bytes(answer.data);\n case RecordType.AAAA:\n return byteLength + answerIPv6.bytes(answer.data);\n case RecordType.SRV:\n return byteLength + answerSrv.bytes(answer.data);\n case RecordType.NAPTR:\n return byteLength + answerNaptr.bytes(answer.data);\n case RecordType.OPT:\n return byteLength + answerOpt.bytes(answer.data);\n case RecordType.DS:\n return byteLength + answerDs.bytes(answer.data);\n case RecordType.SSHFP:\n return byteLength + answerSshfp.bytes(answer.data);\n case RecordType.RRSIG:\n return byteLength + answerRrsig.bytes(answer.data);\n case RecordType.NSEC:\n return byteLength + answerNsec.bytes(answer.data);\n case RecordType.DNSKEY:\n return byteLength + answerDnskey.bytes(answer.data);\n case RecordType.NSEC3:\n return byteLength + answerNsec3.bytes(answer.data);\n case RecordType.TLSA:\n return byteLength + answerTlsa.bytes(answer.data);\n case RecordType.SVCB:\n case RecordType.HTTPS:\n return byteLength + answerSvcb.bytes(answer.data);\n case RecordType.CAA:\n return byteLength + answerCaa.bytes(answer.data);\n case RecordType.PTR:\n case RecordType.CNAME:\n case RecordType.DNAME:\n return byteLength + answerName.bytes(answer.data);\n default:\n return byteLength + answerBytes.bytes(answer.data);\n }\n },\n write(view, offset, answer) {\n if (answer.type === RecordType.OPT) {\n offset = name.write(view, offset, '.');\n view.setUint16(offset, answer.type);\n view.setUint16(offset + 2, answer.udpPayloadSize || 4_096);\n view.setUint8(offset + 4, answer.extendedRcode || 0);\n view.setUint8(offset + 5, answer.ednsVersion || 0);\n view.setUint16(offset + 6, answer.flags || 0);\n offset += 8;\n return answerOpt.write(view, offset, answer.data);\n }\n offset = name.write(view, offset, answer.name);\n view.setUint16(offset, answer.type);\n view.setUint16(\n offset + 2,\n (answer.class || 0) | (answer.flush ? FLUSH_MASK : 0)\n );\n view.setUint32(offset + 4, answer.ttl || 0);\n offset += 8;\n switch (answer.type) {\n case RecordType.A:\n return answerIPv4.write(view, offset, answer.data);\n case RecordType.NS:\n return answerName.write(view, offset, answer.data);\n case RecordType.SOA:\n return answerSoa.write(view, offset, answer.data);\n case RecordType.HINFO:\n return answerHInfo.write(view, offset, answer.data);\n case RecordType.MX:\n return answerMx.write(view, offset, answer.data);\n case RecordType.TXT:\n return answerTxt.write(view, offset, answer.data);\n case RecordType.RP:\n return answerRp.write(view, offset, answer.data);\n case RecordType.AAAA:\n return answerIPv6.write(view, offset, answer.data);\n case RecordType.SRV:\n return answerSrv.write(view, offset, answer.data);\n case RecordType.NAPTR:\n return answerNaptr.write(view, offset, answer.data);\n case RecordType.DS:\n return answerDs.write(view, offset, answer.data);\n case RecordType.SSHFP:\n return answerSshfp.write(view, offset, answer.data);\n case RecordType.RRSIG:\n return answerRrsig.write(view, offset, answer.data);\n case RecordType.NSEC:\n return answerNsec.write(view, offset, answer.data);\n case RecordType.DNSKEY:\n return answerDnskey.write(view, offset, answer.data);\n case RecordType.NSEC3:\n return answerNsec3.write(view, offset, answer.data);\n case RecordType.TLSA:\n return answerTlsa.write(view, offset, answer.data);\n case RecordType.SVCB:\n case RecordType.HTTPS:\n return answerSvcb.write(view, offset, answer.data);\n case RecordType.CAA:\n return answerCaa.write(view, offset, answer.data);\n case RecordType.PTR:\n case RecordType.CNAME:\n case RecordType.DNAME:\n return answerName.write(view, offset, answer.data);\n default:\n return answerBytes.write(view, offset, answer.data);\n }\n },\n read(view, position) {\n const _name = name.read(view, position);\n const type = view.getUint16(position.offset);\n if (type === RecordType.OPT) {\n const udpPayloadSize = view.getUint16(position.offset + 2) || 4_096;\n const extendedRcode = view.getUint8(position.offset + 4);\n const ednsVersion = view.getUint8(position.offset + 5);\n const flags = view.getUint16(position.offset + 6);\n advance(position, 8);\n return {\n type,\n udpPayloadSize,\n extendedRcode,\n ednsVersion,\n flags,\n data: answerOpt.read(view, position),\n };\n }\n const _class = view.getUint16(position.offset + 2);\n const ttl = view.getUint32(position.offset + 4);\n advance(position, 8);\n const answer: Answer = {\n name: _name,\n type,\n class: _class & ~FLUSH_MASK,\n flush: !!(_class & FLUSH_MASK),\n ttl,\n data: null as any,\n };\n switch (answer.type) {\n case RecordType.A:\n answer.data = answerIPv4.read(view, position);\n return answer;\n case RecordType.NS:\n answer.data = answerName.read(view, position);\n return answer;\n case RecordType.SOA:\n answer.data = answerSoa.read(view, position);\n return answer;\n case RecordType.HINFO:\n answer.data = answerHInfo.read(view, position);\n return answer;\n case RecordType.MX:\n answer.data = answerMx.read(view, position);\n return answer;\n case RecordType.TXT:\n answer.data = answerTxt.read(view, position);\n return answer;\n case RecordType.RP:\n answer.data = answerRp.read(view, position);\n return answer;\n case RecordType.AAAA:\n answer.data = answerIPv6.read(view, position);\n return answer;\n case RecordType.SRV:\n answer.data = answerSrv.read(view, position);\n return answer;\n case RecordType.NAPTR:\n answer.data = answerNaptr.read(view, position);\n return answer;\n case RecordType.DS:\n answer.data = answerDs.read(view, position);\n return answer;\n case RecordType.SSHFP:\n answer.data = answerSshfp.read(view, position);\n return answer;\n case RecordType.RRSIG:\n answer.data = answerRrsig.read(view, position);\n return answer;\n case RecordType.NSEC:\n answer.data = answerNsec.read(view, position);\n return answer;\n case RecordType.DNSKEY:\n answer.data = answerDnskey.read(view, position);\n return answer;\n case RecordType.NSEC3:\n answer.data = answerNsec3.read(view, position);\n return answer;\n case RecordType.TLSA:\n answer.data = answerTlsa.read(view, position);\n return answer;\n case RecordType.SVCB:\n case RecordType.HTTPS:\n answer.data = answerSvcb.read(view, position);\n return answer;\n case RecordType.CAA:\n answer.data = answerCaa.read(view, position);\n return answer;\n case RecordType.PTR:\n case RecordType.CNAME:\n case RecordType.DNAME:\n answer.data = answerName.read(view, position);\n return answer;\n default:\n answer.data = answerBytes.read(view, position);\n return answer;\n }\n },\n};\n","import { type PacketFlag, PacketRType, PacketType } from './constants';\nimport { type Encoder, type ReadPosition, advance } from './encoders';\nimport { type Question, question } from './questions';\nimport { type Answer, answer } from './answers';\n\nconst readList = <T>(\n encoder: Encoder<T>,\n view: DataView,\n position: ReadPosition,\n limit: number\n): T[] | undefined => {\n if (!limit) {\n return undefined;\n }\n const { offset, length } = position;\n const data: T[] = [];\n for (let idx = 0; idx < limit && position.offset - offset < length; idx++)\n data.push(encoder.read(view, position));\n return data;\n};\n\nexport interface Packet {\n id?: number;\n type?: PacketType;\n rtype?: PacketRType;\n flags?: PacketFlag | (number & {});\n questions?: Question[];\n answers?: Answer[];\n additionals?: Answer[];\n authorities?: Answer[];\n}\n\nconst PACKET_FLAG_MASK = 32767;\n\nexport const packet: Encoder<Packet> = {\n bytes(packet) {\n const { questions, answers, authorities, additionals } = packet;\n let byteLength = 12;\n let idx = 0;\n for (idx = 0; questions && idx < questions.length; idx++)\n byteLength += question.bytes(questions[idx]);\n for (idx = 0; answers && idx < answers.length; idx++)\n byteLength += answer.bytes(answers[idx]);\n for (idx = 0; authorities && idx < authorities.length; idx++)\n byteLength += answer.bytes(authorities[idx]);\n for (idx = 0; additionals && idx < additionals.length; idx++)\n byteLength += answer.bytes(additionals[idx]);\n return byteLength;\n },\n write(view, offset, packet) {\n const { questions, answers, authorities, additionals } = packet;\n let flags =\n ((packet.flags || 0) & PACKET_FLAG_MASK) |\n (packet.type || PacketType.QUERY) |\n (packet.rtype || 0);\n view.setUint16(offset, packet.id || 0);\n view.setUint16(offset + 2, flags);\n view.setUint16(offset + 4, packet.questions?.length || 0);\n view.setUint16(offset + 6, packet.answers?.length || 0);\n view.setUint16(offset + 8, packet.authorities?.length || 0);\n view.setUint16(offset + 10, packet.additionals?.length || 0);\n offset += 12;\n let idx = 0;\n for (idx = 0; questions && idx < questions.length; idx++)\n offset = question.write(view, offset, questions[idx]);\n for (idx = 0; answers && idx < answers.length; idx++)\n offset = answer.write(view, offset, answers[idx]);\n for (idx = 0; authorities && idx < authorities.length; idx++)\n offset = answer.write(view, offset, authorities[idx]);\n for (idx = 0; additionals && idx < additionals.length; idx++)\n offset = answer.write(view, offset, additionals[idx]);\n return offset;\n },\n read(view, position) {\n const id = view.getUint16(position.offset);\n const flags = view.getUint16(position.offset + 2);\n const questionsLength = view.getUint16(position.offset + 4);\n const answersLength = view.getUint16(position.offset + 6);\n const authoritiesLength = view.getUint16(position.offset + 8);\n const additionalsLength = view.getUint16(position.offset + 10);\n advance(position, 12);\n return {\n id,\n flags,\n rtype: flags & 0xf,\n type:\n flags & PacketType.RESPONSE ? PacketType.RESPONSE : PacketType.QUERY,\n questions: readList(question, view, position, questionsLength),\n answers: readList(answer, view, position, answersLength),\n authorities: readList(answer, view, position, authoritiesLength),\n additionals: readList(answer, view, position, additionalsLength),\n };\n },\n};\n","import { type Packet, packet } from './packets';\n\nexport type {\n NsAnswer,\n AAnswer,\n AAAAAnswer,\n TxtAnswer,\n SrvAnswer,\n HInfoAnswer,\n CaaAnswer,\n SoaAnswer,\n MxAnswer,\n DnskeyAnswer,\n RrsigAnswer,\n RpAnswer,\n NsecAnswer,\n Nsec3Answer,\n SshfpAnswer,\n DsAnswer,\n NaptrAnswer,\n TlsaAnswer,\n PtrAnswer,\n CnameAnswer,\n DnameAnswer,\n NullAnswer,\n UnknownAnswer,\n Answer,\n} from './answers';\n\nexport type {\n IPType,\n ClientSubnetOpt,\n KeepAliveOpt,\n PaddingOpt,\n TagOpt,\n UnknownOpt,\n PacketOpt,\n} from './options';\nexport type { Packet } from './packets';\nexport type { Question } from './questions';\nexport * from './constants';\n\nexport function decode(bytes: ArrayBufferView | ArrayBufferLike): Packet {\n const view =\n 'buffer' in bytes\n ? new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength)\n : new DataView(bytes);\n return packet.read(view, { offset: 0, length: view.byteLength });\n}\n\nexport function streamDecode(bytes: ArrayBufferView | ArrayBufferLike): Packet {\n const view =\n 'buffer' in bytes\n ? new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength)\n : new DataView(bytes);\n const length = Math.min(view.byteLength - 2, view.getUint16(0));\n return packet.read(view, { offset: 2, length });\n}\n\nexport function encodingLength(input: Packet): number {\n return packet.bytes(input);\n}\n\nexport function encode(input: Packet): Uint8Array {\n const buffer = new ArrayBuffer(packet.bytes(input));\n const length = packet.write(new DataView(buffer), 0, input);\n return new Uint8Array(buffer, 0, length);\n}\n\nexport function streamEncode(input: Packet): Uint8Array {\n const buffer = new ArrayBuffer(packet.bytes(input) + 2);\n const view = new DataView(buffer);\n const length = packet.write(view, 2, input);\n view.setUint16(0, length - 2);\n return new Uint8Array(buffer, 0, length);\n}\n"],"names":["PacketType","RecordType","RecordClass","PacketFlag","OptCode","textEncoder","TextEncoder","textDecoder","TextDecoder","utf8ByteLength","Buffer","str","byteLength","length","i","code","charCodeAt","name","bytes","replace","RangeError","write","view","offset","encoded","encode","startIdx","endIdx","indexOf","byteIdx","idx","setUint8","read","outerPosition","labels","maxOffset","innerPosition","labelLength","getUint8","advance","label","sliceView","push","decode","jumpTo","getUint16","join","data","Uint8Array","buffer","byteOffset","set","position","octets","string","typeBitmap","types","extents","Math","max","ceil","typesByWindow","window","typelist","windowLength","bitmap","bit","ipv4","ip","split","octetIdx","parseInt","min","Array","fill","map","_","index","uint16","key","setUint16","ipv6","middleIdx","head","slice","tail","includes","pop","undefined","headIdx","pad","tailIdx","v4Parts","part","output","toString","withRDLength","encoder","startOffset","rdlength","array","QU_BIT","question","_class","class","IN","qu","type","_name","ANY","IPType","unknownOpt","option","OPTION_0","v4Seg","ipv4Re","RegExp","clientSubnetOpt","sourcePrefixLength","scopePrefixLength","family","test","v4","v6","maskLength","ipBuffer","encodeIntoBuffer","input","ArrayBuffer","endOffset","DataView","CLIENT_SUBNET","keepAliveOpt","timeout","TCP_KEEPALIVE","paddingOpt","_view","PADDING","tagOpt","tags","KEY_TAG","isUnknownOpt","opt","SvcParamCode","mandatorySvcParam","alpnSvcParam","portSvcParam","ipv4HintSvcParam","ipv6HintSvcParam","bytesSvcParam","svcParams","params","mandatory","alpn","port","ipv4hint","ipv6hint","echconfig","dohpath","odoh","Mandatory","Alpn","NoDefaultAlpn","Port","Ipv4Hint","Ipv6Hint","EchConfig","DohPath","Odoh","answerBytes","answerName","answerIPv4","answerIPv6","answerTxt","answerSrv","target","priority","weight","answerHInfo","cpu","os","toCaaTag","answerCaa","tag","value","flags","issuerCritical","answerSoa","mname","rname","setUint32","serial","refresh","retry","expire","minimum","getUint32","answerMx","exchange","preference","answerDnskey","algorithm","answerRrsig","signersName","signature","typeCovered","originalTTL","expiration","inception","keyTag","answerRp","mbox","txt","answerNsec","nextDomain","rrtypes","answerNsec3","salt","iterations","answerSshfp","fingerprint","hash","answerDs","digest","digestType","answerNaptr","services","regexp","replacement","order","answerTlsa","certificate","usage","selector","matchingType","answerSvcb","answerOpt","FLUSH_MASK","answer","OPT","A","NS","SOA","HINFO","MX","TXT","RP","AAAA","SRV","NAPTR","DS","SSHFP","RRSIG","NSEC","DNSKEY","NSEC3","TLSA","SVCB","HTTPS","CAA","PTR","CNAME","DNAME","udpPayloadSize","extendedRcode","ednsVersion","flush","ttl","readList","limit","packet","questions","answers","authorities","additionals","QUERY","rtype","id","questionsLength","answersLength","authoritiesLength","additionalsLength","RESPONSE","encodingLength","streamDecode","streamEncode"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"dns-message.js","sources":["../src/constants.ts","../src/encoders.ts","../src/questions.ts","../src/options.ts","../src/svcparams.ts","../src/answers.ts","../src/packets.ts","../src/index.ts"],"sourcesContent":["export const enum PacketType {\n QUERY = 0,\n RESPONSE = 1 << 15,\n}\n\nexport const enum RecordType {\n A = 1,\n NS = 2,\n CNAME = 5,\n SOA = 6,\n NULL = 10,\n PTR = 12,\n HINFO = 13,\n MX = 15,\n TXT = 16,\n RP = 17,\n AFSDB = 18,\n SIG = 24,\n KEY = 25,\n AAAA = 28,\n LOC = 29,\n SRV = 33,\n NAPTR = 35,\n KX = 36,\n CERT = 37,\n DNAME = 39,\n OPT = 41,\n APL = 42,\n DS = 43,\n SSHFP = 44,\n IPSECKEY = 45,\n RRSIG = 46,\n NSEC = 47,\n DNSKEY = 48,\n DHCID = 49,\n NSEC3 = 50,\n NSEC3PARAM = 51,\n TLSA = 52,\n HIP = 55,\n CDS = 59,\n CDNSKEY = 60,\n SVCB = 64,\n HTTPS = 65,\n SPF = 99,\n TKEY = 249,\n TSIG = 250,\n IXFR = 251,\n AXFR = 252,\n ANY = 255,\n CAA = 257,\n TA = 32768,\n DLV = 32769,\n}\n\nexport const enum RecordClass {\n IN = 1,\n CS = 2,\n CH = 3,\n HS = 4,\n ANY = 255,\n}\n\nexport const enum PacketFlag {\n NOERR = 0,\n FORMERR = 1,\n SERVFAIL = 2,\n NXDOMAIN = 3,\n NOTIMP = 4,\n REFUSED = 5,\n YXDOMAIN = 6,\n YXRRSET = 7,\n NXRRSET = 8,\n NOTAUTH = 9,\n NOTZONE = 10,\n\n CHECKING_DISABLED = 1 << 4,\n AUTHENTIC_DATA = 1 << 5,\n RECURSION_AVAILABLE = 1 << 7,\n RECURSION_DESIRED = 1 << 8,\n TRUNCATED_RESPONSE = 1 << 9,\n AUTHORITATIVE_ANSWER = 1 << 10,\n}\n\nexport type PacketRType =\n | PacketFlag.NOERR\n | PacketFlag.FORMERR\n | PacketFlag.SERVFAIL\n | PacketFlag.NXDOMAIN\n | PacketFlag.NOTIMP\n | PacketFlag.REFUSED\n | PacketFlag.YXDOMAIN\n | PacketFlag.YXRRSET\n | PacketFlag.NXRRSET\n | PacketFlag.NOTAUTH\n | PacketFlag.NOTZONE;\n\nexport const enum OptCode {\n OPTION_0 = 0,\n LLQ = 1,\n UL = 2,\n NSID = 3,\n OPTION_4 = 4,\n DAU = 5,\n DHU = 6,\n N3U = 7,\n CLIENT_SUBNET = 8,\n EXPIRE = 9,\n COOKIE = 10,\n TCP_KEEPALIVE = 11,\n PADDING = 12,\n CHAIN = 13,\n KEY_TAG = 14,\n DEVICEID = 26946,\n OPTION_65535 = 65535,\n}\n","import type { RecordType } from './constants';\n\nexport interface ReadPosition {\n offset: number;\n length: number;\n}\n\nexport interface Encoder<T, R = T> {\n bytes(input: T): number;\n write(view: DataView, offset: number, input: T): number;\n read(view: DataView, position: ReadPosition): R;\n}\n\nexport const textEncoder = new TextEncoder();\nexport const textDecoder = new TextDecoder();\n\nconst utf8ByteLength =\n typeof Buffer !== 'undefined'\n ? (str: string) => Buffer.byteLength(str)\n : (str: string) => {\n let length = str.length;\n for (let i = length - 1; i >= 0; i--) {\n const code = str.charCodeAt(i);\n if (code > 0x7f && code <= 0x7ff) {\n length++;\n } else if (code > 0x7ff && code <= 0xffff) {\n length += 2;\n }\n // UTF-16 Trail Surrogate\n if (code >= 0xdc00 && code <= 0xdfff) {\n i--;\n }\n }\n return length;\n };\n\nconst LABEL_LIMIT = 63;\nconst NAME_LIMIT = 255;\n\nexport const name: Encoder<string> = {\n bytes(str) {\n let length = 2;\n switch (str) {\n case '':\n case '.':\n case '..':\n return 1;\n default:\n if (str[0] === '.') length--;\n if (str[str.length - 1] === '.') length--;\n length += str.replace(/\\\\\\./g, '.').length;\n if (length > NAME_LIMIT)\n throw new RangeError(\n `Name \"${str}\" is above ${NAME_LIMIT} byte limit.`\n );\n return length;\n }\n },\n write(view, offset, str) {\n const encoded = textEncoder.encode(str);\n for (\n let startIdx = encoded[0] === 46 /*'.'*/ ? 1 : 0, endIdx = 0;\n startIdx < encoded.byteLength;\n startIdx = endIdx + 1\n ) {\n endIdx = encoded.indexOf(46 /*'.'*/, startIdx);\n while (endIdx > -1 && encoded[endIdx - 1] === 92 /*'\\\\'*/)\n endIdx = encoded.indexOf(46 /*'.'*/, endIdx + 1);\n if (endIdx === -1) endIdx = encoded.byteLength;\n if (endIdx === startIdx) {\n continue;\n } else if (endIdx - startIdx > LABEL_LIMIT) {\n throw new RangeError(\n `Label in \"${str}\" is above ${LABEL_LIMIT} byte limit.`\n );\n }\n let byteIdx = offset + 1;\n for (let idx = startIdx; idx < endIdx; idx++) {\n if (encoded[idx] === 92 /*'\\\\'*/ && encoded[idx + 1] === 46 /*'.'*/)\n idx++;\n view.setUint8(byteIdx++, encoded[idx]);\n }\n view.setUint8(offset, byteIdx - offset - 1);\n offset = byteIdx;\n startIdx = endIdx + 1;\n }\n return offset + 1;\n },\n read(view, outerPosition) {\n const labels: string[] = [];\n let maxOffset = outerPosition.offset;\n let innerPosition = outerPosition;\n while (true) {\n const labelLength = view.getUint8(innerPosition.offset);\n if (labelLength === 0) {\n advance(innerPosition, 1);\n break;\n } else if ((labelLength & 0xc0) === 0) {\n advance(innerPosition, 1);\n const label = sliceView(view, innerPosition, labelLength);\n labels.push(textDecoder.decode(label).replace(/\\./g, '\\\\.'));\n } else {\n const jumpTo = view.getUint16(innerPosition.offset) - 0xc000;\n advance(innerPosition, 2);\n if (jumpTo < maxOffset) {\n innerPosition = { offset: (maxOffset = jumpTo), length: 0 };\n } else {\n break;\n }\n }\n }\n return labels.join('.') || '.';\n },\n};\n\nexport const bytes: Encoder<Uint8Array | string, Uint8Array> = {\n bytes(data) {\n return typeof data === 'string' ? utf8ByteLength(data) : data.byteLength;\n },\n write(view, offset, data) {\n const bytes = typeof data === 'string' ? textEncoder.encode(data) : data;\n const target = new Uint8Array(\n view.buffer,\n view.byteOffset + offset,\n bytes.byteLength\n );\n target.set(bytes);\n offset += bytes.byteLength;\n return offset;\n },\n read(view, position) {\n return sliceView(view, position);\n },\n};\n\nexport const octets: Encoder<Uint8Array> = {\n bytes(data) {\n return data.byteLength + 1;\n },\n write(view, offset, bytes) {\n view.setUint8(offset++, bytes.byteLength);\n const target = new Uint8Array(\n view.buffer,\n view.byteOffset + offset,\n bytes.byteLength\n );\n target.set(bytes);\n offset += bytes.byteLength;\n return offset;\n },\n read(view, position) {\n const length = view.getUint8(position.offset);\n advance(position, 1);\n return sliceView(view, position, length);\n },\n};\n\nexport const string: Encoder<string> = {\n bytes(str) {\n return utf8ByteLength(str) + 1;\n },\n write(view, offset, data) {\n const buffer = textEncoder.encode(data);\n view.setUint8(offset++, buffer.byteLength);\n return bytes.write(view, offset, buffer);\n },\n read(view, position) {\n const length = view.getUint8(position.offset);\n advance(position, 1);\n return textDecoder.decode(sliceView(view, position, length));\n },\n};\n\nexport const typeBitmap: Encoder<RecordType[]> = {\n bytes(types) {\n const extents: number[] = [];\n for (let idx = 0; idx < types.length; idx++)\n extents[types[idx] >> 8] = Math.max(\n extents[types[idx] >> 8] || 0,\n types[idx] & 0xff\n );\n let length = 0;\n for (let idx = 0; idx < extents.length; idx++)\n if (extents[idx] != null) length += 2 + Math.ceil((extents[idx] + 1) / 8);\n return length;\n },\n write(view, offset, types) {\n const typesByWindow: number[][] = [];\n for (let idx = 0; idx < types.length; idx++) {\n const window =\n typesByWindow[types[idx] >> 8] || (typesByWindow[types[idx] >> 8] = []);\n window[(types[idx] >> 3) & 0x1f] |= 1 << (7 - (types[idx] & 0x7));\n }\n for (let idx = 0; idx < typesByWindow.length; idx++) {\n const window = typesByWindow[idx];\n if (window != null) {\n view.setUint8(offset++, idx);\n view.setUint8(offset++, window.length);\n for (let byteIdx = 0; byteIdx < window.length; byteIdx++) {\n view.setUint8(offset++, window[byteIdx]);\n }\n }\n }\n return offset;\n },\n read(view, position) {\n const { offset, length } = position;\n const typelist: RecordType[] = [];\n while (position.offset - offset < length) {\n const window = view.getUint8(position.offset);\n const windowLength = view.getUint8(position.offset + 1);\n for (let idx = 0; idx < windowLength; idx++) {\n const bitmap = view.getUint8(position.offset + 2 + idx);\n for (let bit = 0; bit < 8; bit++) {\n if (bitmap & (1 << (7 - bit))) {\n typelist.push((window << 8) | (idx << 3) | bit);\n }\n }\n }\n advance(position, 2 + windowLength);\n }\n return typelist;\n },\n};\n\nexport const ipv4: Encoder<string> = {\n bytes() {\n return 4;\n },\n write(view, offset, ip) {\n const octets = ip.split('.', 4);\n for (let octetIdx = 0; octetIdx < 4; octetIdx++)\n view.setUint8(offset++, parseInt(octets[octetIdx], 10));\n return offset;\n },\n read(view, position) {\n const length = Math.min(position.length, 4);\n const ip = new Array(4)\n .fill(0)\n .map((_, index) =>\n index < length ? view.getUint8(position.offset + index) : 0\n )\n .join('.');\n advance(position, length);\n return ip;\n },\n};\n\nexport const uint16: Encoder<number> = {\n bytes() {\n return 2;\n },\n write(view, offset, key) {\n view.setUint16(offset, key);\n return offset + 2;\n },\n read(view, position) {\n const key = view.getUint16(position.offset);\n advance(position, 2);\n return key;\n },\n};\n\nexport const ipv6: Encoder<string> = {\n bytes() {\n return 16;\n },\n write(view, offset, ip) {\n const middleIdx = ip.indexOf('::');\n const head = (middleIdx > -1 ? ip.slice(0, middleIdx) : ip).split(':');\n const tail = middleIdx > -1 ? ip.slice(middleIdx + 2).split(':') : [];\n const ipv4 =\n tail.length > 0 && tail[tail.length - 1].includes('.')\n ? tail.pop()\n : undefined;\n for (let headIdx = 0; headIdx < head.length; headIdx++) {\n view.setUint16(offset, parseInt(head[headIdx], 16));\n offset += 2;\n }\n const middleLength = 8 - (head.length + tail.length + (ipv4 ? 2 : 0));\n for (let pad = middleLength; pad > 0; pad--) {\n view.setUint16(offset, 0);\n offset += 2;\n }\n for (let tailIdx = 0; tailIdx < tail.length; tailIdx++) {\n view.setUint16(offset, parseInt(tail[tailIdx], 16));\n offset += 2;\n }\n if (ipv4) {\n const v4Parts = ipv4.split('.', 4).map(part => parseInt(part, 10));\n view.setUint16(offset, (v4Parts[0] << 8) | v4Parts[1]);\n view.setUint16(offset + 2, (v4Parts[2] << 8) | v4Parts[3]);\n offset += 4;\n }\n return offset;\n },\n read(view, position) {\n let output = '';\n const length = Math.min(position.length, 16);\n for (let idx = 0; idx < length; idx += 2) {\n if (idx !== 0) output += ':';\n output += view.getUint16(position.offset + idx).toString(16);\n }\n advance(position, length);\n return output\n .replace(/(^|:)0(:0)*:0(:|$)/, '$1::$3')\n .replace(/:{3,4}/, '::');\n },\n};\n\nexport const withRDLength = <T, R = T>(\n encoder: Encoder<T, R>\n): Encoder<T, R> => ({\n bytes(data) {\n return encoder.bytes(data) + 2;\n },\n write(view, offset, data) {\n const startOffset = offset;\n offset = encoder.write(view, offset + 2, data);\n view.setUint16(startOffset, offset - startOffset - 2);\n return offset;\n },\n read(view, position) {\n const { offset, length } = position;\n const rdlength = (position.length = view.getUint16(position.offset));\n position.offset += 2;\n const data = encoder.read(view, position);\n // Restore original position and advance by specified size after\n position.offset = offset + 2 + rdlength;\n position.length = length;\n return data;\n },\n});\n\nexport const array = <T>(encoder: Encoder<T>): Encoder<T[]> => ({\n bytes(data) {\n let byteLength = 0;\n for (let idx = 0; data != null && idx < data.length; idx++)\n byteLength += encoder.bytes(data[idx]);\n return byteLength;\n },\n write(view, offset, data) {\n for (let idx = 0; data != null && idx < data.length; idx++)\n offset = encoder.write(view, offset, data[idx]);\n return offset;\n },\n read(view, position) {\n const { offset, length } = position;\n const data: T[] = [];\n while (position.offset - offset < length)\n data.push(encoder.read(view, position));\n return data;\n },\n});\n\nexport const advance = (position: ReadPosition, bytes: number) => {\n position.offset += bytes | 0;\n position.length -= bytes | 0;\n position.length &= ~(position.length >> 31);\n};\n\nexport const encodeIntoBuffer = <T>(\n encoder: Encoder<T>,\n input: T\n): Uint8Array => {\n const buffer = new ArrayBuffer(encoder.bytes(input));\n const endOffset = encoder.write(new DataView(buffer), 0, input);\n return new Uint8Array(buffer, 0, endOffset);\n};\n\nexport const sliceView = (\n view: DataView,\n position: ReadPosition,\n length = position.length\n) => {\n const slice = new Uint8Array(\n view.buffer,\n view.byteOffset + position.offset,\n length\n );\n advance(position, length);\n return slice;\n};\n","import { RecordClass, RecordType } from './constants';\nimport { Encoder, name, advance } from './encoders';\n\nexport interface Question {\n name: string;\n type: RecordType;\n class?: RecordClass;\n qu?: boolean;\n}\n\nconst QU_BIT = 1 << 15;\n\nexport const question: Encoder<Question> = {\n bytes(question) {\n return name.bytes(question.name) + 4;\n },\n write(view, offset, question) {\n let _class = question.class || RecordClass.IN;\n if (question.qu) _class |= QU_BIT;\n offset = name.write(view, offset, question.name);\n view.setUint16(offset, question.type);\n view.setUint16(offset + 2, _class);\n offset += 4;\n return offset;\n },\n read(view, position) {\n const _name = name.read(view, position);\n const type = view.getUint16(position.offset);\n let _class = view.getUint16(position.offset + 2) || RecordClass.ANY;\n let qu = false;\n if (_class !== RecordClass.ANY && _class & QU_BIT) {\n _class &= ~QU_BIT;\n qu = true;\n }\n advance(position, 4);\n return {\n name: _name,\n type,\n class: _class,\n qu,\n };\n },\n};\n","import { OptCode } from './constants';\nimport {\n type Encoder,\n withRDLength,\n encodeIntoBuffer,\n advance,\n bytes,\n ipv4,\n ipv6,\n} from './encoders';\n\nexport const enum IPType {\n v4 = 1,\n v6 = 2,\n}\n\nexport interface BaseOpt {\n code: number;\n}\n\nexport interface ClientSubnetOpt extends BaseOpt {\n code: OptCode.CLIENT_SUBNET;\n family?: IPType | (number & {});\n sourcePrefixLength?: number;\n scopePrefixLength?: number;\n ip: string;\n}\n\nexport interface KeepAliveOpt extends BaseOpt {\n code: OptCode.TCP_KEEPALIVE;\n timeout?: number;\n}\n\nexport interface PaddingOpt extends BaseOpt {\n code: OptCode.PADDING;\n length?: number;\n}\n\nexport interface TagOpt extends BaseOpt {\n code: OptCode.KEY_TAG;\n tags: number[];\n}\n\nexport interface UnknownOpt extends BaseOpt {\n data: Uint8Array;\n}\n\nexport type PacketOpt =\n | ClientSubnetOpt\n | KeepAliveOpt\n | PaddingOpt\n | TagOpt\n | UnknownOpt;\n\nexport const unknownOpt: Encoder<UnknownOpt> = withRDLength({\n bytes(option) {\n return bytes.bytes(option.data);\n },\n write(view, offset, option) {\n return bytes.write(view, offset, option.data);\n },\n read(view, position) {\n return {\n code: OptCode.OPTION_0,\n data: bytes.read(view, position),\n };\n },\n});\n\n// See: https://github.com/nodejs/node/blob/842448b/lib/internal/net.js#L15-L18\nconst v4Seg = '(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])';\nconst v4Str = `(?:${v4Seg}\\\\.){3}${v4Seg}`;\nconst ipv4Re = new RegExp(`^${v4Str}$`);\n\nconst isIPv4 = (ip: string) => ipv4Re.test(ip);\n\nexport const clientSubnetOpt: Encoder<ClientSubnetOpt> = withRDLength({\n bytes(option) {\n const sourcePrefixLength = option.sourcePrefixLength || 0;\n return Math.ceil(sourcePrefixLength / 8) + 4;\n },\n write(view, offset, option) {\n const sourcePrefixLength = option.sourcePrefixLength || 0;\n const scopePrefixLength = option.scopePrefixLength || 0;\n const family = option.family || (isIPv4(option.ip) ? IPType.v4 : IPType.v6);\n const maskLength = Math.ceil(sourcePrefixLength / 8);\n view.setUint16(offset, family);\n view.setUint8(offset + 2, sourcePrefixLength);\n view.setUint8(offset + 3, scopePrefixLength);\n offset += 4;\n const ipBuffer = encodeIntoBuffer(\n family === IPType.v4 ? ipv4 : ipv6,\n option.ip\n );\n for (let byteIdx = 0; byteIdx < maskLength; byteIdx++)\n view.setUint8(offset++, ipBuffer[byteIdx]);\n return offset;\n },\n read(view, position) {\n const family = view.getUint16(position.offset);\n const sourcePrefixLength = view.getUint8(position.offset + 2);\n const scopePrefixLength = view.getUint8(position.offset + 3);\n advance(position, 4);\n return {\n code: OptCode.CLIENT_SUBNET,\n family,\n sourcePrefixLength,\n scopePrefixLength,\n ip:\n family === IPType.v4\n ? ipv4.read(view, position)\n : ipv6.read(view, position),\n };\n },\n});\n\nexport const keepAliveOpt: Encoder<KeepAliveOpt> = withRDLength({\n bytes(option) {\n return option.timeout ? 2 : 0;\n },\n write(view, offset, option) {\n if (option.timeout) {\n view.setUint16(offset, option.timeout);\n offset += 2;\n }\n return offset;\n },\n read(view, position) {\n if (position.length) {\n const timeout = view.getUint16(position.offset);\n advance(position, 2);\n return { code: OptCode.TCP_KEEPALIVE, timeout };\n } else {\n return { code: OptCode.TCP_KEEPALIVE, timeout: undefined };\n }\n },\n});\n\nexport const paddingOpt: Encoder<PaddingOpt> = withRDLength({\n bytes(option) {\n return option.length || 0;\n },\n write(_view, offset, option) {\n return offset + (option.length || 0);\n },\n read(_view, position) {\n const { length } = position;\n advance(position, length);\n return { code: OptCode.PADDING, length };\n },\n});\n\nexport const tagOpt: Encoder<TagOpt> = withRDLength({\n bytes(option) {\n return option.tags.length * 2;\n },\n write(view, offset, option) {\n for (let idx = 0; idx < option.tags.length; idx++) {\n view.setUint16(offset, option.tags[idx]);\n offset += 2;\n }\n return offset;\n },\n read(view, position) {\n const { offset, length } = position;\n const tags: number[] = [];\n while (position.offset - offset < length) {\n tags.push(view.getUint16(position.offset));\n advance(position, 2);\n }\n return {\n code: OptCode.KEY_TAG,\n tags,\n };\n },\n});\n\nconst isUnknownOpt = (option: PacketOpt): option is UnknownOpt =>\n !!(option as UnknownOpt).data;\n\nexport const option: Encoder<PacketOpt> = {\n bytes(option) {\n if (isUnknownOpt(option)) {\n return unknownOpt.bytes(option) + 2;\n }\n switch (option.code) {\n case OptCode.CLIENT_SUBNET:\n return clientSubnetOpt.bytes(option) + 2;\n case OptCode.TCP_KEEPALIVE:\n return keepAliveOpt.bytes(option) + 2;\n case OptCode.PADDING:\n return paddingOpt.bytes(option) + 2;\n case OptCode.KEY_TAG:\n return tagOpt.bytes(option) + 2;\n }\n },\n write(view, offset, option) {\n view.setUint16(offset, option.code);\n offset += 2;\n if (isUnknownOpt(option)) {\n return unknownOpt.write(view, offset, option);\n }\n switch (option.code) {\n case OptCode.CLIENT_SUBNET:\n return clientSubnetOpt.write(view, offset, option);\n case OptCode.TCP_KEEPALIVE:\n return keepAliveOpt.write(view, offset, option);\n case OptCode.PADDING:\n return paddingOpt.write(view, offset, option);\n case OptCode.KEY_TAG:\n return tagOpt.write(view, offset, option);\n }\n },\n read(view, position) {\n const code = view.getUint16(position.offset);\n advance(position, 2);\n switch (code) {\n case OptCode.CLIENT_SUBNET:\n return clientSubnetOpt.read(view, position);\n case OptCode.TCP_KEEPALIVE:\n return keepAliveOpt.read(view, position);\n case OptCode.PADDING:\n return paddingOpt.read(view, position);\n case OptCode.KEY_TAG:\n return tagOpt.read(view, position);\n default:\n const opt = unknownOpt.read(view, position);\n opt.code = code;\n return opt;\n }\n },\n};\n","import {\n type Encoder,\n withRDLength,\n array,\n textDecoder,\n advance,\n uint16,\n bytes,\n ipv4,\n ipv6,\n string,\n} from './encoders';\n\nexport const enum SvcParamCode {\n Mandatory = 0,\n Alpn = 1,\n NoDefaultAlpn = 2,\n Port = 3,\n Ipv4Hint = 4,\n EchConfig = 5,\n Ipv6Hint = 6,\n DohPath = 7,\n Odoh = 32769,\n}\n\nexport interface SvcParams {\n mandatory?: (SvcParamCode | (number & {}))[];\n alpn?: string[];\n 'no-default-alpn'?: boolean;\n port?: number;\n ipv4hint?: string[];\n ipv6hint?: string[];\n echconfig?: Uint8Array;\n dohpath?: string;\n odoh?: Uint8Array;\n}\n\nconst mandatorySvcParam: Encoder<(SvcParamCode | (number & {}))[]> =\n withRDLength(array(uint16));\nconst alpnSvcParam = withRDLength(array(string));\nconst portSvcParam = withRDLength(uint16);\nconst ipv4HintSvcParam = withRDLength(array(ipv4));\nconst ipv6HintSvcParam = withRDLength(array(ipv6));\nconst bytesSvcParam = withRDLength(bytes);\n\nexport const svcParams: Encoder<SvcParams> = {\n bytes(params) {\n let byteLength = 0;\n if (params.mandatory != null)\n byteLength += mandatorySvcParam.bytes(params.mandatory) + 2;\n if (params.alpn != null) byteLength += alpnSvcParam.bytes(params.alpn) + 2;\n if (params['no-default-alpn']) byteLength += 4;\n if (params.port != null) byteLength += portSvcParam.bytes(params.port) + 2;\n if (params.ipv4hint)\n byteLength += ipv4HintSvcParam.bytes(params.ipv4hint) + 2;\n if (params.ipv6hint)\n byteLength += ipv6HintSvcParam.bytes(params.ipv6hint) + 2;\n if (params.echconfig)\n byteLength += bytesSvcParam.bytes(params.echconfig) + 2;\n if (params.dohpath) byteLength += bytesSvcParam.bytes(params.dohpath) + 2;\n if (params.odoh) byteLength += bytesSvcParam.bytes(params.odoh) + 2;\n return byteLength;\n },\n write(view, offset, params) {\n if (params.mandatory != null) {\n view.setUint16(offset, SvcParamCode.Mandatory);\n offset = mandatorySvcParam.write(view, offset + 2, params.mandatory);\n }\n if (params.alpn != null) {\n view.setUint16(offset, SvcParamCode.Alpn);\n offset = alpnSvcParam.write(view, offset + 2, params.alpn);\n }\n if (params['no-default-alpn']) {\n view.setUint16(offset, SvcParamCode.NoDefaultAlpn);\n view.setUint16(offset + 2, 0);\n offset += 4;\n }\n if (params.port != null) {\n view.setUint16(offset, SvcParamCode.Port);\n offset = portSvcParam.write(view, offset + 2, params.port);\n }\n if (params.ipv4hint) {\n view.setUint16(offset, SvcParamCode.Ipv4Hint);\n offset = ipv4HintSvcParam.write(view, offset + 2, params.ipv4hint);\n }\n if (params.ipv6hint) {\n view.setUint16(offset, SvcParamCode.Ipv6Hint);\n offset = ipv6HintSvcParam.write(view, offset + 2, params.ipv6hint);\n }\n if (params.echconfig) {\n view.setUint16(offset, SvcParamCode.EchConfig);\n offset = bytesSvcParam.write(view, offset + 2, params.echconfig);\n }\n if (params.dohpath) {\n view.setUint16(offset, SvcParamCode.DohPath);\n offset = bytesSvcParam.write(view, offset + 2, params.dohpath);\n }\n if (params.odoh) {\n view.setUint16(offset, SvcParamCode.Odoh);\n offset = bytesSvcParam.write(view, offset + 2, params.odoh);\n }\n return offset;\n },\n read(view, position) {\n const { length, offset } = position;\n const params: SvcParams = {\n mandatory: undefined,\n alpn: undefined,\n 'no-default-alpn': false,\n port: undefined,\n ipv4hint: undefined,\n ipv6hint: undefined,\n echconfig: undefined,\n dohpath: undefined,\n odoh: undefined,\n };\n while (position.offset - offset < length) {\n const code = view.getUint16(position.offset) as\n | SvcParamCode\n | (number & {});\n advance(position, 2);\n switch (code) {\n case SvcParamCode.Mandatory:\n params.mandatory = mandatorySvcParam.read(view, position);\n break;\n case SvcParamCode.Alpn:\n params.alpn = alpnSvcParam.read(view, position);\n break;\n case SvcParamCode.NoDefaultAlpn:\n params['no-default-alpn'] = true;\n advance(position, 2);\n break;\n case SvcParamCode.Port:\n params.port = portSvcParam.read(view, position);\n break;\n case SvcParamCode.Ipv4Hint:\n params.ipv4hint = ipv4HintSvcParam.read(view, position);\n break;\n case SvcParamCode.Ipv6Hint:\n params.ipv6hint = ipv6HintSvcParam.read(view, position);\n break;\n case SvcParamCode.EchConfig:\n params.echconfig = bytesSvcParam.read(view, position);\n break;\n case SvcParamCode.DohPath:\n params.dohpath = textDecoder.decode(\n bytesSvcParam.read(view, position)\n );\n break;\n case SvcParamCode.Odoh:\n params.odoh = bytesSvcParam.read(view, position);\n break;\n default:\n // NOTE: We discard other parameters using the required RDLENGTH field\n bytesSvcParam.read(view, position);\n }\n }\n return params;\n },\n};\n","import { RecordClass, RecordType } from './constants';\nimport { Encoder, advance, octets } from './encoders';\nimport { option, PacketOpt } from './options';\nimport { svcParams, SvcParams } from './svcparams';\nimport {\n withRDLength,\n typeBitmap,\n string,\n bytes,\n name,\n ipv4,\n ipv6,\n array,\n} from './encoders';\n\nexport interface BaseAnswer {\n type: RecordType;\n name: string;\n ttl?: number;\n class?: RecordClass;\n flush?: boolean;\n}\n\nconst answerBytes = withRDLength(bytes);\n\nexport interface NsAnswer extends BaseAnswer {\n type: RecordType.NS;\n data: string;\n}\n\nconst answerName = withRDLength(name);\n\nexport interface AAnswer extends BaseAnswer {\n type: RecordType.A;\n data: string;\n}\n\nconst answerIPv4 = withRDLength(ipv4);\n\nexport interface AAAAAnswer extends BaseAnswer {\n type: RecordType.AAAA;\n data: string;\n}\n\nconst answerIPv6 = withRDLength(ipv6);\n\nexport interface TxtAnswer extends BaseAnswer {\n type: RecordType.TXT;\n data: string[];\n}\n\nexport const answerTxt: Encoder<string[]> = withRDLength(array(string));\n\nexport interface SrvData {\n priority?: number;\n weight?: number;\n port: number;\n target: string;\n}\n\nexport interface SrvAnswer extends BaseAnswer {\n type: RecordType.SRV;\n data: SrvData;\n}\n\nexport const answerSrv: Encoder<SrvData> = withRDLength({\n bytes(data) {\n return name.bytes(data.target) + 6;\n },\n write(view, offset, data) {\n view.setUint16(offset, data.priority || 0);\n view.setUint16(offset + 2, data.weight || 0);\n view.setUint16(offset + 4, data.port || 0);\n return name.write(view, offset + 6, data.target);\n },\n read(view, position) {\n const data: SrvData = { priority: 0, weight: 0, port: 0, target: '' };\n data.priority = view.getUint16(position.offset);\n data.weight = view.getUint16(position.offset + 2);\n data.port = view.getUint16(position.offset + 4);\n advance(position, 6);\n data.target = name.read(view, position);\n return data;\n },\n});\n\nexport interface HInfoData {\n cpu: string;\n os: string;\n}\n\nexport interface HInfoAnswer extends BaseAnswer {\n type: RecordType.HINFO;\n data: HInfoData;\n}\n\nexport const answerHInfo: Encoder<HInfoData> = withRDLength({\n bytes(data) {\n return string.bytes(data.cpu) + string.bytes(data.os);\n },\n write(view, offset, data) {\n offset = string.write(view, offset, data.cpu);\n offset = string.write(view, offset, data.os);\n return offset;\n },\n read(view, position) {\n return {\n cpu: string.read(view, position),\n os: string.read(view, position),\n };\n },\n});\n\nexport interface CaaData {\n flags?: number;\n tag: 'issue' | 'issuewild' | 'iodef';\n value: Uint8Array;\n issuerCritical?: boolean;\n}\n\nexport interface CaaAnswer extends BaseAnswer {\n type: RecordType.CAA;\n data: CaaData;\n}\n\nconst ISSUER_CRITICAL = 1 << 7;\n\nconst toCaaTag = (input: string) => {\n switch (input) {\n case 'issue':\n case 'issuewild':\n case 'iodef':\n return input;\n default:\n return 'issue';\n }\n};\n\nexport const answerCaa: Encoder<CaaData> = withRDLength({\n bytes(data) {\n return string.bytes(data.tag) + bytes.bytes(data.value) + 1;\n },\n write(view, offset, data) {\n let flags = data.flags || 0;\n if (data.issuerCritical) flags |= ISSUER_CRITICAL;\n view.setUint8(offset, flags);\n offset = string.write(view, offset + 1, data.tag);\n offset = bytes.write(view, offset, data.value);\n return offset;\n },\n read(view, position) {\n const flags = view.getUint8(position.offset);\n advance(position, 1);\n return {\n flags,\n tag: toCaaTag(string.read(view, position)),\n value: bytes.read(view, position),\n issuerCritical: !!(flags & ISSUER_CRITICAL),\n };\n },\n});\n\nexport interface SoaData {\n mname: string;\n rname: string;\n serial?: number;\n refresh?: number;\n retry?: number;\n expire?: number;\n minimum?: number;\n}\n\nexport interface SoaAnswer extends BaseAnswer {\n type: RecordType.SOA;\n data: SoaData;\n}\n\nexport const answerSoa: Encoder<SoaData> = withRDLength({\n bytes(data) {\n return name.bytes(data.mname) + name.bytes(data.rname) + 20;\n },\n write(view, offset, data) {\n offset = name.write(view, offset, data.mname);\n offset = name.write(view, offset, data.rname);\n view.setUint32(offset, data.serial || 0);\n view.setUint32(offset + 4, data.refresh || 0);\n view.setUint32(offset + 8, data.retry || 0);\n view.setUint32(offset + 12, data.expire || 0);\n view.setUint32(offset + 16, data.minimum || 0);\n return offset + 20;\n },\n read(view, position) {\n const data: SoaData = {\n mname: name.read(view, position),\n rname: name.read(view, position),\n serial: view.getUint32(position.offset),\n refresh: view.getUint32(position.offset + 4),\n retry: view.getUint32(position.offset + 8),\n expire: view.getUint32(position.offset + 12),\n minimum: view.getUint32(position.offset + 16),\n };\n position.offset += 20;\n position.length -= 20;\n return data;\n },\n});\n\nexport interface MxData {\n preference?: number;\n exchange: string;\n}\n\nexport interface MxAnswer extends BaseAnswer {\n type: RecordType.MX;\n data: MxData;\n}\n\nexport const answerMx: Encoder<MxData> = withRDLength({\n bytes(data) {\n return name.bytes(data.exchange) + 2;\n },\n write(view, offset, data) {\n view.setUint16(offset, data.preference || 0);\n return name.write(view, offset + 2, data.exchange);\n },\n read(view, position) {\n const data: MxData = {\n preference: view.getUint16(position.offset),\n exchange: '',\n };\n advance(position, 2);\n data.exchange = name.read(view, position);\n return data;\n },\n});\n\nexport interface DnskeyData {\n flags: number;\n algorithm: number;\n key: Uint8Array;\n}\n\nexport interface DnskeyAnswer extends BaseAnswer {\n type: RecordType.DNSKEY;\n data: DnskeyData;\n}\n\nexport const answerDnskey: Encoder<DnskeyData> = withRDLength({\n bytes(data) {\n return bytes.bytes(data.key) + 4;\n },\n write(view, offset, data) {\n const PROTOCOL_DNSSEC = 3;\n view.setUint16(offset, data.flags);\n view.setUint8(offset + 2, PROTOCOL_DNSSEC);\n view.setUint8(offset + 3, data.algorithm);\n return bytes.write(view, offset + 4, data.key);\n },\n read(view, position) {\n const flags = view.getUint16(position.offset);\n const algorithm = view.getUint8(position.offset + 3);\n advance(position, 4);\n return {\n flags,\n algorithm,\n key: bytes.read(view, position),\n };\n },\n});\n\nexport interface RrsigData {\n typeCovered: RecordType;\n algorithm: number;\n labels: number;\n originalTTL: number;\n expiration: number;\n inception: number;\n keyTag: number;\n signersName: string;\n signature: Uint8Array;\n}\n\nexport interface RrsigAnswer extends BaseAnswer {\n type: RecordType.RRSIG;\n data: RrsigData;\n}\n\nexport const answerRrsig: Encoder<RrsigData> = withRDLength({\n bytes(data) {\n return 18 + name.bytes(data.signersName) + bytes.bytes(data.signature);\n },\n write(view, offset, data) {\n view.setUint16(offset, data.typeCovered);\n view.setUint8(offset + 2, data.algorithm);\n view.setUint8(offset + 3, data.labels);\n view.setUint32(offset + 4, data.originalTTL);\n view.setUint32(offset + 8, data.expiration);\n view.setUint32(offset + 12, data.inception);\n view.setUint16(offset + 16, data.keyTag);\n offset = name.write(view, offset + 18, data.signersName);\n offset = bytes.write(view, offset, data.signature);\n return offset;\n },\n read(view, position) {\n const typeCovered = view.getUint16(position.offset);\n const algorithm = view.getUint8(position.offset + 2);\n const labels = view.getUint8(position.offset + 3);\n const originalTTL = view.getUint32(position.offset + 4);\n const expiration = view.getUint32(position.offset + 8);\n const inception = view.getUint32(position.offset + 12);\n const keyTag = view.getUint16(position.offset + 16);\n advance(position, 18);\n return {\n typeCovered,\n algorithm,\n labels,\n originalTTL,\n expiration,\n inception,\n keyTag,\n signersName: name.read(view, position),\n signature: bytes.read(view, position),\n };\n },\n});\n\nexport interface RpData {\n mbox: string;\n txt: string;\n}\n\nexport interface RpAnswer extends BaseAnswer {\n type: RecordType.RP;\n data: RpData;\n}\n\nexport const answerRp: Encoder<RpData> = withRDLength({\n bytes(data) {\n return name.bytes(data.mbox) + name.bytes(data.txt);\n },\n write(view, offset, data) {\n offset = name.write(view, offset, data.mbox);\n offset = name.write(view, offset, data.txt);\n return offset;\n },\n read(view, position) {\n return {\n mbox: name.read(view, position),\n txt: name.read(view, position),\n };\n },\n});\n\nexport interface NsecData {\n nextDomain: string;\n rrtypes: RecordType[];\n}\n\nexport interface NsecAnswer extends BaseAnswer {\n type: RecordType.NSEC;\n data: NsecData;\n}\n\nexport const answerNsec: Encoder<NsecData> = withRDLength({\n bytes(data) {\n return name.bytes(data.nextDomain) + typeBitmap.bytes(data.rrtypes);\n },\n write(view, offset, data) {\n offset = name.write(view, offset, data.nextDomain);\n offset = typeBitmap.write(view, offset, data.rrtypes);\n return offset;\n },\n read(view, position) {\n return {\n nextDomain: name.read(view, position),\n rrtypes: typeBitmap.read(view, position),\n };\n },\n});\n\nexport interface Nsec3Data {\n algorithm: number;\n flags: number;\n iterations: number;\n salt: Uint8Array;\n nextDomain: Uint8Array;\n rrtypes: RecordType[];\n}\n\nexport interface Nsec3Answer extends BaseAnswer {\n type: RecordType.NSEC3;\n data: Nsec3Data;\n}\n\nexport const answerNsec3: Encoder<Nsec3Data> = withRDLength({\n bytes(data) {\n return (\n octets.bytes(data.salt) +\n octets.bytes(data.nextDomain) +\n typeBitmap.bytes(data.rrtypes) +\n 4\n );\n },\n write(view, offset, data) {\n view.setUint8(offset, data.algorithm);\n view.setUint8(offset + 1, data.flags);\n view.setUint16(offset + 2, data.iterations);\n offset = octets.write(view, offset + 4, data.salt);\n offset = octets.write(view, offset, data.nextDomain);\n offset = typeBitmap.write(view, offset, data.rrtypes);\n return offset;\n },\n read(view, position) {\n const algorithm = view.getUint8(position.offset);\n const flags = view.getUint8(position.offset + 1);\n const iterations = view.getUint16(position.offset + 2);\n advance(position, 4);\n return {\n algorithm,\n flags,\n iterations,\n salt: octets.read(view, position),\n nextDomain: octets.read(view, position),\n rrtypes: typeBitmap.read(view, position),\n };\n },\n});\n\nexport interface SshfpData {\n algorithm: number;\n hash: number;\n fingerprint: Uint8Array;\n}\n\nexport interface SshfpAnswer extends BaseAnswer {\n type: RecordType.SSHFP;\n data: SshfpData;\n}\n\nexport const answerSshfp: Encoder<SshfpData> = withRDLength({\n bytes(data) {\n return bytes.bytes(data.fingerprint) + 2;\n },\n write(view, offset, data) {\n view.setUint8(offset, data.algorithm);\n view.setUint8(offset + 1, data.hash);\n return bytes.write(view, offset + 2, data.fingerprint);\n },\n read(view, position) {\n const algorithm = view.getUint8(position.offset);\n const hash = view.getUint8(position.offset + 1);\n advance(position, 2);\n return {\n algorithm,\n hash,\n fingerprint: bytes.read(view, position),\n };\n },\n});\n\nexport interface DsData {\n keyTag: number;\n algorithm: number;\n digestType: number;\n digest: Uint8Array;\n}\n\nexport interface DsAnswer extends BaseAnswer {\n type: RecordType.DS;\n data: DsData;\n}\n\nexport const answerDs: Encoder<DsData> = withRDLength({\n bytes(data) {\n return bytes.bytes(data.digest) + 4;\n },\n write(view, offset, data) {\n view.setUint16(offset, data.keyTag);\n view.setUint8(offset + 2, data.algorithm);\n view.setUint8(offset + 3, data.digestType);\n offset = bytes.write(view, offset + 4, data.digest);\n return offset;\n },\n read(view, position) {\n const keyTag = view.getUint16(position.offset);\n const algorithm = view.getUint8(position.offset + 2);\n const digestType = view.getUint8(position.offset + 3);\n advance(position, 4);\n return {\n keyTag,\n algorithm,\n digestType,\n digest: bytes.read(view, position),\n };\n },\n});\n\nexport interface NaptrData {\n order: number;\n preference: number;\n flags: string;\n services: string;\n regexp: string;\n replacement: string;\n}\n\nexport interface NaptrAnswer extends BaseAnswer {\n type: RecordType.NAPTR;\n data: NaptrData;\n}\n\nexport const answerNaptr: Encoder<NaptrData> = withRDLength({\n bytes(data) {\n return (\n string.bytes(data.flags) +\n string.bytes(data.services) +\n string.bytes(data.regexp) +\n name.bytes(data.replacement) +\n 4\n );\n },\n write(view, offset, data) {\n view.setUint16(offset, data.order);\n view.setUint16(offset + 2, data.preference);\n offset = string.write(view, offset + 4, data.flags);\n offset = string.write(view, offset, data.services);\n offset = string.write(view, offset, data.regexp);\n offset = name.write(view, offset, data.replacement);\n return offset;\n },\n read(view, position) {\n const order = view.getUint16(position.offset);\n const preference = view.getUint16(position.offset + 2);\n advance(position, 4);\n return {\n order,\n preference,\n flags: string.read(view, position),\n services: string.read(view, position),\n regexp: string.read(view, position),\n replacement: name.read(view, position),\n };\n },\n});\n\nexport interface TlsaData {\n usage: number;\n selector: number;\n matchingType: number;\n certificate: Uint8Array;\n}\n\nexport interface TlsaAnswer extends BaseAnswer {\n type: RecordType.TLSA;\n data: TlsaData;\n}\n\nexport const answerTlsa: Encoder<TlsaData> = withRDLength({\n bytes(data) {\n return bytes.bytes(data.certificate) + 3;\n },\n write(view, offset, data) {\n view.setUint8(offset, data.usage);\n view.setUint8(offset + 1, data.selector);\n view.setUint8(offset + 2, data.matchingType);\n return bytes.write(view, offset + 3, data.certificate);\n },\n read(view, position) {\n const usage = view.getUint8(position.offset);\n const selector = view.getUint8(position.offset + 1);\n const matchingType = view.getUint8(position.offset + 2);\n advance(position, 3);\n return {\n usage,\n selector,\n matchingType,\n certificate: bytes.read(view, position),\n };\n },\n});\n\nexport interface SvcbData {\n name: string;\n priority?: number;\n params: SvcParams;\n}\n\nexport interface SvcbAnswer extends BaseAnswer {\n type: RecordType.SVCB;\n data: SvcbData;\n}\n\nexport interface HttpsAnswer extends BaseAnswer {\n type: RecordType.HTTPS;\n data: SvcbData;\n}\n\nexport const answerSvcb: Encoder<SvcbData> = withRDLength({\n bytes(data) {\n return name.bytes(data.name) + svcParams.bytes(data.params) + 2;\n },\n write(view, offset, data) {\n view.setUint16(offset, data.priority || 0);\n offset = name.write(view, offset + 2, data.name);\n offset = svcParams.write(view, offset, data.params);\n return offset;\n },\n read(view, position) {\n const priority = view.getUint16(position.offset);\n advance(position, 2);\n return {\n name: name.read(view, position),\n priority,\n params: svcParams.read(view, position),\n };\n },\n});\n\nexport interface OptAnswer {\n type: RecordType.OPT;\n name?: '.';\n udpPayloadSize: number;\n extendedRcode: number;\n ednsVersion: number;\n flags: number;\n data: PacketOpt[];\n}\n\nexport const answerOpt: Encoder<PacketOpt[]> = withRDLength(array(option));\n\nexport interface PtrAnswer extends BaseAnswer {\n type: RecordType.PTR;\n data: string;\n}\n\nexport interface CnameAnswer extends BaseAnswer {\n type: RecordType.CNAME;\n data: string;\n}\n\nexport interface DnameAnswer extends BaseAnswer {\n type: RecordType.DNAME;\n data: string;\n}\n\nexport interface NullAnswer extends BaseAnswer {\n type: RecordType.NULL;\n data: Uint8Array | string;\n}\n\nexport interface UnknownAnswer extends BaseAnswer {\n type:\n | RecordType.AFSDB\n | RecordType.APL\n | RecordType.AXFR\n | RecordType.CDNSKEY\n | RecordType.CDS\n | RecordType.CERT\n | RecordType.DHCID\n | RecordType.DLV\n | RecordType.HIP\n | RecordType.IPSECKEY\n | RecordType.IXFR\n | RecordType.KEY\n | RecordType.KX\n | RecordType.LOC\n | RecordType.NSEC3PARAM\n | RecordType.NULL\n | RecordType.SIG\n | RecordType.TA\n | RecordType.TKEY\n | RecordType.TSIG;\n data: Uint8Array | string;\n}\n\nexport type Answer =\n | AAnswer\n | AAAAAnswer\n | TxtAnswer\n | SrvAnswer\n | HInfoAnswer\n | CaaAnswer\n | NsAnswer\n | SoaAnswer\n | MxAnswer\n | OptAnswer\n | DnskeyAnswer\n | RrsigAnswer\n | RpAnswer\n | NsecAnswer\n | Nsec3Answer\n | SshfpAnswer\n | DsAnswer\n | NaptrAnswer\n | TlsaAnswer\n | PtrAnswer\n | CnameAnswer\n | DnameAnswer\n | SvcbAnswer\n | HttpsAnswer\n | NullAnswer\n | UnknownAnswer;\n\nconst FLUSH_MASK = 1 << 15;\n\nexport const answer: Encoder<Answer> = {\n bytes(answer) {\n const byteLength =\n 8 + name.bytes(answer.type === RecordType.OPT ? '.' : answer.name);\n switch (answer.type) {\n case RecordType.A:\n return byteLength + answerIPv4.bytes(answer.data);\n case RecordType.NS:\n return byteLength + answerName.bytes(answer.data);\n case RecordType.SOA:\n return byteLength + answerSoa.bytes(answer.data);\n case RecordType.HINFO:\n return byteLength + answerHInfo.bytes(answer.data);\n case RecordType.MX:\n return byteLength + answerMx.bytes(answer.data);\n case RecordType.TXT:\n return byteLength + answerTxt.bytes(answer.data);\n case RecordType.RP:\n return byteLength + answerRp.bytes(answer.data);\n case RecordType.AAAA:\n return byteLength + answerIPv6.bytes(answer.data);\n case RecordType.SRV:\n return byteLength + answerSrv.bytes(answer.data);\n case RecordType.NAPTR:\n return byteLength + answerNaptr.bytes(answer.data);\n case RecordType.OPT:\n return byteLength + answerOpt.bytes(answer.data);\n case RecordType.DS:\n return byteLength + answerDs.bytes(answer.data);\n case RecordType.SSHFP:\n return byteLength + answerSshfp.bytes(answer.data);\n case RecordType.RRSIG:\n return byteLength + answerRrsig.bytes(answer.data);\n case RecordType.NSEC:\n return byteLength + answerNsec.bytes(answer.data);\n case RecordType.DNSKEY:\n return byteLength + answerDnskey.bytes(answer.data);\n case RecordType.NSEC3:\n return byteLength + answerNsec3.bytes(answer.data);\n case RecordType.TLSA:\n return byteLength + answerTlsa.bytes(answer.data);\n case RecordType.SVCB:\n case RecordType.HTTPS:\n return byteLength + answerSvcb.bytes(answer.data);\n case RecordType.CAA:\n return byteLength + answerCaa.bytes(answer.data);\n case RecordType.PTR:\n case RecordType.CNAME:\n case RecordType.DNAME:\n return byteLength + answerName.bytes(answer.data);\n default:\n return byteLength + answerBytes.bytes(answer.data);\n }\n },\n write(view, offset, answer) {\n if (answer.type === RecordType.OPT) {\n offset = name.write(view, offset, '.');\n view.setUint16(offset, answer.type);\n view.setUint16(offset + 2, answer.udpPayloadSize || 4_096);\n view.setUint8(offset + 4, answer.extendedRcode || 0);\n view.setUint8(offset + 5, answer.ednsVersion || 0);\n view.setUint16(offset + 6, answer.flags || 0);\n offset += 8;\n return answerOpt.write(view, offset, answer.data);\n }\n offset = name.write(view, offset, answer.name);\n view.setUint16(offset, answer.type);\n view.setUint16(\n offset + 2,\n (answer.class || 0) | (answer.flush ? FLUSH_MASK : 0)\n );\n view.setUint32(offset + 4, answer.ttl || 0);\n offset += 8;\n switch (answer.type) {\n case RecordType.A:\n return answerIPv4.write(view, offset, answer.data);\n case RecordType.NS:\n return answerName.write(view, offset, answer.data);\n case RecordType.SOA:\n return answerSoa.write(view, offset, answer.data);\n case RecordType.HINFO:\n return answerHInfo.write(view, offset, answer.data);\n case RecordType.MX:\n return answerMx.write(view, offset, answer.data);\n case RecordType.TXT:\n return answerTxt.write(view, offset, answer.data);\n case RecordType.RP:\n return answerRp.write(view, offset, answer.data);\n case RecordType.AAAA:\n return answerIPv6.write(view, offset, answer.data);\n case RecordType.SRV:\n return answerSrv.write(view, offset, answer.data);\n case RecordType.NAPTR:\n return answerNaptr.write(view, offset, answer.data);\n case RecordType.DS:\n return answerDs.write(view, offset, answer.data);\n case RecordType.SSHFP:\n return answerSshfp.write(view, offset, answer.data);\n case RecordType.RRSIG:\n return answerRrsig.write(view, offset, answer.data);\n case RecordType.NSEC:\n return answerNsec.write(view, offset, answer.data);\n case RecordType.DNSKEY:\n return answerDnskey.write(view, offset, answer.data);\n case RecordType.NSEC3:\n return answerNsec3.write(view, offset, answer.data);\n case RecordType.TLSA:\n return answerTlsa.write(view, offset, answer.data);\n case RecordType.SVCB:\n case RecordType.HTTPS:\n return answerSvcb.write(view, offset, answer.data);\n case RecordType.CAA:\n return answerCaa.write(view, offset, answer.data);\n case RecordType.PTR:\n case RecordType.CNAME:\n case RecordType.DNAME:\n return answerName.write(view, offset, answer.data);\n default:\n return answerBytes.write(view, offset, answer.data);\n }\n },\n read(view, position) {\n const _name = name.read(view, position);\n const type = view.getUint16(position.offset);\n if (type === RecordType.OPT) {\n const udpPayloadSize = view.getUint16(position.offset + 2) || 4_096;\n const extendedRcode = view.getUint8(position.offset + 4);\n const ednsVersion = view.getUint8(position.offset + 5);\n const flags = view.getUint16(position.offset + 6);\n advance(position, 8);\n return {\n type,\n udpPayloadSize,\n extendedRcode,\n ednsVersion,\n flags,\n data: answerOpt.read(view, position),\n };\n }\n const _class = view.getUint16(position.offset + 2);\n const ttl = view.getUint32(position.offset + 4);\n advance(position, 8);\n const answer: Answer = {\n name: _name,\n type,\n class: _class & ~FLUSH_MASK,\n flush: !!(_class & FLUSH_MASK),\n ttl,\n data: null as any,\n };\n switch (answer.type) {\n case RecordType.A:\n answer.data = answerIPv4.read(view, position);\n return answer;\n case RecordType.NS:\n answer.data = answerName.read(view, position);\n return answer;\n case RecordType.SOA:\n answer.data = answerSoa.read(view, position);\n return answer;\n case RecordType.HINFO:\n answer.data = answerHInfo.read(view, position);\n return answer;\n case RecordType.MX:\n answer.data = answerMx.read(view, position);\n return answer;\n case RecordType.TXT:\n answer.data = answerTxt.read(view, position);\n return answer;\n case RecordType.RP:\n answer.data = answerRp.read(view, position);\n return answer;\n case RecordType.AAAA:\n answer.data = answerIPv6.read(view, position);\n return answer;\n case RecordType.SRV:\n answer.data = answerSrv.read(view, position);\n return answer;\n case RecordType.NAPTR:\n answer.data = answerNaptr.read(view, position);\n return answer;\n case RecordType.DS:\n answer.data = answerDs.read(view, position);\n return answer;\n case RecordType.SSHFP:\n answer.data = answerSshfp.read(view, position);\n return answer;\n case RecordType.RRSIG:\n answer.data = answerRrsig.read(view, position);\n return answer;\n case RecordType.NSEC:\n answer.data = answerNsec.read(view, position);\n return answer;\n case RecordType.DNSKEY:\n answer.data = answerDnskey.read(view, position);\n return answer;\n case RecordType.NSEC3:\n answer.data = answerNsec3.read(view, position);\n return answer;\n case RecordType.TLSA:\n answer.data = answerTlsa.read(view, position);\n return answer;\n case RecordType.SVCB:\n case RecordType.HTTPS:\n answer.data = answerSvcb.read(view, position);\n return answer;\n case RecordType.CAA:\n answer.data = answerCaa.read(view, position);\n return answer;\n case RecordType.PTR:\n case RecordType.CNAME:\n case RecordType.DNAME:\n answer.data = answerName.read(view, position);\n return answer;\n default:\n answer.data = answerBytes.read(view, position);\n return answer;\n }\n },\n};\n","import { type PacketFlag, PacketRType, PacketType } from './constants';\nimport { type Encoder, type ReadPosition, advance } from './encoders';\nimport { type Question, question } from './questions';\nimport { type Answer, answer } from './answers';\n\nconst readList = <T>(\n encoder: Encoder<T>,\n view: DataView,\n position: ReadPosition,\n limit: number\n): T[] | undefined => {\n if (!limit) {\n return undefined;\n }\n const { offset, length } = position;\n const data: T[] = [];\n for (let idx = 0; idx < limit && position.offset - offset < length; idx++)\n data.push(encoder.read(view, position));\n return data;\n};\n\nexport interface Packet {\n id?: number;\n type?: PacketType;\n rtype?: PacketRType;\n flags?: PacketFlag | (number & {});\n questions?: Question[];\n answers?: Answer[];\n additionals?: Answer[];\n authorities?: Answer[];\n}\n\nconst PACKET_FLAG_MASK = 32767;\n\nexport const packet: Encoder<Packet> = {\n bytes(packet) {\n const { questions, answers, authorities, additionals } = packet;\n let byteLength = 12;\n let idx = 0;\n for (idx = 0; questions && idx < questions.length; idx++)\n byteLength += question.bytes(questions[idx]);\n for (idx = 0; answers && idx < answers.length; idx++)\n byteLength += answer.bytes(answers[idx]);\n for (idx = 0; authorities && idx < authorities.length; idx++)\n byteLength += answer.bytes(authorities[idx]);\n for (idx = 0; additionals && idx < additionals.length; idx++)\n byteLength += answer.bytes(additionals[idx]);\n return byteLength;\n },\n write(view, offset, packet) {\n const { questions, answers, authorities, additionals } = packet;\n let flags =\n ((packet.flags || 0) & PACKET_FLAG_MASK) |\n (packet.type || PacketType.QUERY) |\n (packet.rtype || 0);\n view.setUint16(offset, packet.id || 0);\n view.setUint16(offset + 2, flags);\n view.setUint16(offset + 4, packet.questions?.length || 0);\n view.setUint16(offset + 6, packet.answers?.length || 0);\n view.setUint16(offset + 8, packet.authorities?.length || 0);\n view.setUint16(offset + 10, packet.additionals?.length || 0);\n offset += 12;\n let idx = 0;\n for (idx = 0; questions && idx < questions.length; idx++)\n offset = question.write(view, offset, questions[idx]);\n for (idx = 0; answers && idx < answers.length; idx++)\n offset = answer.write(view, offset, answers[idx]);\n for (idx = 0; authorities && idx < authorities.length; idx++)\n offset = answer.write(view, offset, authorities[idx]);\n for (idx = 0; additionals && idx < additionals.length; idx++)\n offset = answer.write(view, offset, additionals[idx]);\n return offset;\n },\n read(view, position) {\n const id = view.getUint16(position.offset);\n const flags = view.getUint16(position.offset + 2);\n const questionsLength = view.getUint16(position.offset + 4);\n const answersLength = view.getUint16(position.offset + 6);\n const authoritiesLength = view.getUint16(position.offset + 8);\n const additionalsLength = view.getUint16(position.offset + 10);\n advance(position, 12);\n return {\n id,\n flags,\n rtype: flags & 0xf,\n type:\n flags & PacketType.RESPONSE ? PacketType.RESPONSE : PacketType.QUERY,\n questions: readList(question, view, position, questionsLength),\n answers: readList(answer, view, position, answersLength),\n authorities: readList(answer, view, position, authoritiesLength),\n additionals: readList(answer, view, position, additionalsLength),\n };\n },\n};\n","import { type Packet, packet } from './packets';\n\nexport type {\n NsAnswer,\n AAnswer,\n AAAAAnswer,\n TxtAnswer,\n SrvAnswer,\n HInfoAnswer,\n CaaAnswer,\n SoaAnswer,\n MxAnswer,\n DnskeyAnswer,\n RrsigAnswer,\n RpAnswer,\n NsecAnswer,\n Nsec3Answer,\n SshfpAnswer,\n DsAnswer,\n NaptrAnswer,\n TlsaAnswer,\n PtrAnswer,\n CnameAnswer,\n DnameAnswer,\n NullAnswer,\n UnknownAnswer,\n Answer,\n} from './answers';\n\nexport type {\n IPType,\n ClientSubnetOpt,\n KeepAliveOpt,\n PaddingOpt,\n TagOpt,\n UnknownOpt,\n PacketOpt,\n} from './options';\nexport type { Packet } from './packets';\nexport type { Question } from './questions';\nexport * from './constants';\n\nexport function decode(bytes: ArrayBufferView | ArrayBufferLike): Packet {\n const view =\n 'buffer' in bytes\n ? new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength)\n : new DataView(bytes);\n return packet.read(view, { offset: 0, length: view.byteLength });\n}\n\nexport function streamDecode(bytes: ArrayBufferView | ArrayBufferLike): Packet {\n const view =\n 'buffer' in bytes\n ? new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength)\n : new DataView(bytes);\n const length = Math.min(view.byteLength - 2, view.getUint16(0));\n return packet.read(view, { offset: 2, length });\n}\n\nexport function encodingLength(input: Packet): number {\n return packet.bytes(input);\n}\n\nexport function encode(input: Packet): Uint8Array {\n const buffer = new ArrayBuffer(packet.bytes(input));\n const length = packet.write(new DataView(buffer), 0, input);\n return new Uint8Array(buffer, 0, length);\n}\n\nexport function streamEncode(input: Packet): Uint8Array {\n const buffer = new ArrayBuffer(packet.bytes(input) + 2);\n const view = new DataView(buffer);\n const length = packet.write(view, 2, input);\n view.setUint16(0, length - 2);\n return new Uint8Array(buffer, 0, length);\n}\n"],"names":["PacketType","RecordType","RecordClass","PacketFlag","OptCode","textEncoder","TextEncoder","textDecoder","TextDecoder","utf8ByteLength","Buffer","str","byteLength","length","i","code","charCodeAt","name","bytes","replace","RangeError","write","view","offset","encoded","encode","startIdx","endIdx","indexOf","byteIdx","idx","setUint8","read","outerPosition","labels","maxOffset","innerPosition","labelLength","getUint8","advance","label","sliceView","push","decode","jumpTo","getUint16","join","data","Uint8Array","buffer","byteOffset","set","position","octets","string","typeBitmap","types","extents","Math","max","ceil","typesByWindow","window","typelist","windowLength","bitmap","bit","ipv4","ip","split","octetIdx","parseInt","min","Array","fill","map","_","index","uint16","key","setUint16","ipv6","middleIdx","head","slice","tail","includes","pop","undefined","headIdx","pad","tailIdx","v4Parts","part","output","toString","withRDLength","encoder","startOffset","rdlength","array","QU_BIT","question","_class","class","IN","qu","type","_name","ANY","IPType","unknownOpt","option","OPTION_0","v4Seg","ipv4Re","RegExp","clientSubnetOpt","sourcePrefixLength","scopePrefixLength","family","test","v4","v6","maskLength","ipBuffer","encodeIntoBuffer","input","ArrayBuffer","endOffset","DataView","CLIENT_SUBNET","keepAliveOpt","timeout","TCP_KEEPALIVE","paddingOpt","_view","PADDING","tagOpt","tags","KEY_TAG","isUnknownOpt","opt","SvcParamCode","mandatorySvcParam","alpnSvcParam","portSvcParam","ipv4HintSvcParam","ipv6HintSvcParam","bytesSvcParam","svcParams","params","mandatory","alpn","port","ipv4hint","ipv6hint","echconfig","dohpath","odoh","Mandatory","Alpn","NoDefaultAlpn","Port","Ipv4Hint","Ipv6Hint","EchConfig","DohPath","Odoh","answerBytes","answerName","answerIPv4","answerIPv6","answerTxt","answerSrv","target","priority","weight","answerHInfo","cpu","os","toCaaTag","answerCaa","tag","value","flags","issuerCritical","answerSoa","mname","rname","setUint32","serial","refresh","retry","expire","minimum","getUint32","answerMx","exchange","preference","answerDnskey","algorithm","answerRrsig","signersName","signature","typeCovered","originalTTL","expiration","inception","keyTag","answerRp","mbox","txt","answerNsec","nextDomain","rrtypes","answerNsec3","salt","iterations","answerSshfp","fingerprint","hash","answerDs","digest","digestType","answerNaptr","services","regexp","replacement","order","answerTlsa","certificate","usage","selector","matchingType","answerSvcb","answerOpt","FLUSH_MASK","answer","OPT","A","NS","SOA","HINFO","MX","TXT","RP","AAAA","SRV","NAPTR","DS","SSHFP","RRSIG","NSEC","DNSKEY","NSEC3","TLSA","SVCB","HTTPS","CAA","PTR","CNAME","DNAME","udpPayloadSize","extendedRcode","ednsVersion","flush","ttl","readList","limit","packet","questions","answers","authorities","additionals","QUERY","rtype","id","questionsLength","answersLength","authoritiesLength","additionalsLength","RESPONSE","encodingLength","streamDecode","streamEncode"],"mappings":"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"}
|
package/dist/dns-message.mjs
CHANGED
|
@@ -198,7 +198,6 @@ const c = {
|
|
|
198
198
|
length: 0
|
|
199
199
|
};
|
|
200
200
|
} else {
|
|
201
|
-
advance(s, 2);
|
|
202
201
|
break;
|
|
203
202
|
}
|
|
204
203
|
}
|
|
@@ -326,7 +325,7 @@ const y = {
|
|
|
326
325
|
}
|
|
327
326
|
};
|
|
328
327
|
|
|
329
|
-
const
|
|
328
|
+
const U = {
|
|
330
329
|
bytes: () => 16,
|
|
331
330
|
write(t, e, n) {
|
|
332
331
|
const r = n.indexOf("::");
|
|
@@ -422,14 +421,14 @@ const sliceView = (t, e, n = e.length) => {
|
|
|
422
421
|
return r;
|
|
423
422
|
};
|
|
424
423
|
|
|
425
|
-
const
|
|
424
|
+
const h = 32768;
|
|
426
425
|
|
|
427
426
|
const w = {
|
|
428
427
|
bytes: t => c.bytes(t.name) + 4,
|
|
429
428
|
write(t, e, r) {
|
|
430
429
|
let s = r.class || n.IN;
|
|
431
430
|
if (r.qu) {
|
|
432
|
-
s |=
|
|
431
|
+
s |= h;
|
|
433
432
|
}
|
|
434
433
|
e = c.write(t, e, r.name);
|
|
435
434
|
t.setUint16(e, r.type);
|
|
@@ -441,7 +440,7 @@ const w = {
|
|
|
441
440
|
const s = t.getUint16(e.offset);
|
|
442
441
|
let a = t.getUint16(e.offset + 2) || n.ANY;
|
|
443
442
|
let i = !1;
|
|
444
|
-
if (a !== n.ANY && a &
|
|
443
|
+
if (a !== n.ANY && a & h) {
|
|
445
444
|
a &= -32769;
|
|
446
445
|
i = !0;
|
|
447
446
|
}
|
|
@@ -489,7 +488,7 @@ const N = withRDLength({
|
|
|
489
488
|
const n = new ArrayBuffer(t.bytes(e));
|
|
490
489
|
const r = t.write(new DataView(n), 0, e);
|
|
491
490
|
return new Uint8Array(n, 0, r);
|
|
492
|
-
})(a === b.v4 ? g :
|
|
491
|
+
})(a === b.v4 ? g : U, n.ip);
|
|
493
492
|
for (let n = 0; n < i; n++) {
|
|
494
493
|
t.setUint8(e++, o[n]);
|
|
495
494
|
}
|
|
@@ -505,7 +504,7 @@ const N = withRDLength({
|
|
|
505
504
|
family: n,
|
|
506
505
|
sourcePrefixLength: r,
|
|
507
506
|
scopePrefixLength: a,
|
|
508
|
-
ip: n === b.v4 ? g.read(t, e) :
|
|
507
|
+
ip: n === b.v4 ? g.read(t, e) : U.read(t, e)
|
|
509
508
|
};
|
|
510
509
|
}
|
|
511
510
|
});
|
|
@@ -658,7 +657,7 @@ const m = withRDLength(y);
|
|
|
658
657
|
|
|
659
658
|
const O = withRDLength(array(g));
|
|
660
659
|
|
|
661
|
-
const L = withRDLength(array(
|
|
660
|
+
const L = withRDLength(array(U));
|
|
662
661
|
|
|
663
662
|
const v = withRDLength(f);
|
|
664
663
|
|
|
@@ -705,6 +704,7 @@ const H = {
|
|
|
705
704
|
}
|
|
706
705
|
if (n["no-default-alpn"]) {
|
|
707
706
|
t.setUint16(e, R.NoDefaultAlpn);
|
|
707
|
+
t.setUint16(e + 2, 0);
|
|
708
708
|
e += 4;
|
|
709
709
|
}
|
|
710
710
|
if (null != n.port) {
|
|
@@ -801,7 +801,7 @@ const _ = withRDLength(c);
|
|
|
801
801
|
|
|
802
802
|
const M = withRDLength(g);
|
|
803
803
|
|
|
804
|
-
const V = withRDLength(
|
|
804
|
+
const V = withRDLength(U);
|
|
805
805
|
|
|
806
806
|
const Y = withRDLength(array(u));
|
|
807
807
|
|
|
@@ -858,7 +858,7 @@ const F = withRDLength({
|
|
|
858
858
|
write(t, e, n) {
|
|
859
859
|
let r = n.flags || 0;
|
|
860
860
|
if (n.issuerCritical) {
|
|
861
|
-
r
|
|
861
|
+
r |= 128;
|
|
862
862
|
}
|
|
863
863
|
t.setUint8(e, r);
|
|
864
864
|
e = u.write(t, e + 1, n.tag);
|
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 octets: Encoder<Uint8Array> = {\n bytes(data) {\n return data.byteLength + 1;\n },\n write(view, offset, bytes) {\n view.setUint8(offset++, bytes.byteLength);\n const target = new Uint8Array(\n view.buffer,\n view.byteOffset + offset,\n bytes.byteLength\n );\n target.set(bytes);\n offset += bytes.byteLength;\n return offset;\n },\n read(view, position) {\n const length = view.getUint8(position.offset);\n advance(position, 1);\n return sliceView(view, position, length);\n },\n};\n\nexport const string: Encoder<string> = {\n bytes(str) {\n return utf8ByteLength(str) + 1;\n },\n write(view, offset, data) {\n const buffer = textEncoder.encode(data);\n view.setUint8(offset++, buffer.byteLength);\n return bytes.write(view, offset, buffer);\n },\n read(view, position) {\n const length = view.getUint8(position.offset);\n advance(position, 1);\n return textDecoder.decode(sliceView(view, position, length));\n },\n};\n\nexport const typeBitmap: Encoder<RecordType[]> = {\n bytes(types) {\n const extents: number[] = [];\n for (let idx = 0; idx < types.length; idx++)\n extents[types[idx] >> 8] = Math.max(\n extents[types[idx] >> 8] || 0,\n types[idx] & 0xff\n );\n let length = 0;\n for (let idx = 0; idx < extents.length; idx++)\n if (extents[idx] != null) length += 2 + Math.ceil((extents[idx] + 1) / 8);\n return length;\n },\n write(view, offset, types) {\n const typesByWindow: number[][] = [];\n for (let idx = 0; idx < types.length; idx++) {\n const window =\n typesByWindow[types[idx] >> 8] || (typesByWindow[types[idx] >> 8] = []);\n window[(types[idx] >> 3) & 0x1f] |= 1 << (7 - (types[idx] & 0x7));\n }\n for (let idx = 0; idx < typesByWindow.length; idx++) {\n const window = typesByWindow[idx];\n if (window != null) {\n view.setUint8(offset++, idx);\n view.setUint8(offset++, window.length);\n for (let byteIdx = 0; byteIdx < window.length; byteIdx++) {\n view.setUint8(offset++, window[byteIdx]);\n }\n }\n }\n return offset;\n },\n read(view, position) {\n const { offset, length } = position;\n const typelist: RecordType[] = [];\n while (position.offset - offset < length) {\n const window = view.getUint8(position.offset);\n const windowLength = view.getUint8(position.offset + 1);\n for (let idx = 0; idx < windowLength; idx++) {\n const bitmap = view.getUint8(position.offset + 2 + idx);\n for (let bit = 0; bit < 8; bit++) {\n if (bitmap & (1 << (7 - bit))) {\n typelist.push((window << 8) | (idx << 3) | bit);\n }\n }\n }\n advance(position, 2 + windowLength);\n }\n return typelist;\n },\n};\n\nexport const ipv4: Encoder<string> = {\n bytes() {\n return 4;\n },\n write(view, offset, ip) {\n const octets = ip.split('.', 4);\n for (let octetIdx = 0; octetIdx < 4; octetIdx++)\n view.setUint8(offset++, parseInt(octets[octetIdx], 10));\n return offset;\n },\n read(view, position) {\n const length = Math.min(position.length, 4);\n const ip = new Array(4)\n .fill(0)\n .map((_, index) =>\n index < length ? view.getUint8(position.offset + index) : 0\n )\n .join('.');\n advance(position, length);\n return ip;\n },\n};\n\nexport const uint16: Encoder<number> = {\n bytes() {\n return 2;\n },\n write(view, offset, key) {\n view.setUint16(offset, key);\n return offset + 2;\n },\n read(view, position) {\n const key = view.getUint16(position.offset);\n advance(position, 2);\n return key;\n },\n};\n\nexport const ipv6: Encoder<string> = {\n bytes() {\n return 16;\n },\n write(view, offset, ip) {\n const middleIdx = ip.indexOf('::');\n const head = (middleIdx > -1 ? ip.slice(0, middleIdx) : ip).split(':');\n const tail = middleIdx > -1 ? ip.slice(middleIdx + 2).split(':') : [];\n const ipv4 =\n tail.length > 0 && tail[tail.length - 1].includes('.')\n ? tail.pop()\n : undefined;\n for (let headIdx = 0; headIdx < head.length; headIdx++) {\n view.setUint16(offset, parseInt(head[headIdx], 16));\n offset += 2;\n }\n const middleLength = 8 - (head.length + tail.length + (ipv4 ? 2 : 0));\n for (let pad = middleLength; pad > 0; pad--) {\n view.setUint16(offset, 0);\n offset += 2;\n }\n for (let tailIdx = 0; tailIdx < tail.length; tailIdx++) {\n view.setUint16(offset, parseInt(tail[tailIdx], 16));\n offset += 2;\n }\n if (ipv4) {\n const v4Parts = ipv4.split('.', 4).map(part => parseInt(part, 10));\n view.setUint16(offset, (v4Parts[0] << 8) | v4Parts[1]);\n view.setUint16(offset + 2, (v4Parts[2] << 8) | v4Parts[3]);\n offset += 4;\n }\n return offset;\n },\n read(view, position) {\n let output = '';\n const length = Math.min(position.length, 16);\n for (let idx = 0; idx < length; idx += 2) {\n if (idx !== 0) output += ':';\n output += view.getUint16(position.offset + idx).toString(16);\n }\n advance(position, length);\n return output\n .replace(/(^|:)0(:0)*:0(:|$)/, '$1::$3')\n .replace(/:{3,4}/, '::');\n },\n};\n\nexport const withRDLength = <T, R = T>(\n encoder: Encoder<T, R>\n): Encoder<T, R> => ({\n bytes(data) {\n return encoder.bytes(data) + 2;\n },\n write(view, offset, data) {\n const startOffset = offset;\n offset = encoder.write(view, offset + 2, data);\n view.setUint16(startOffset, offset - startOffset - 2);\n return offset;\n },\n read(view, position) {\n const { offset, length } = position;\n const rdlength = (position.length = view.getUint16(position.offset));\n position.offset += 2;\n const data = encoder.read(view, position);\n // Restore original position and advance by specified size after\n position.offset = offset + 2 + rdlength;\n position.length = length;\n return data;\n },\n});\n\nexport const array = <T>(encoder: Encoder<T>): Encoder<T[]> => ({\n bytes(data) {\n let byteLength = 0;\n for (let idx = 0; data != null && idx < data.length; idx++)\n byteLength += encoder.bytes(data[idx]);\n return byteLength;\n },\n write(view, offset, data) {\n for (let idx = 0; data != null && idx < data.length; idx++)\n offset = encoder.write(view, offset, data[idx]);\n return offset;\n },\n read(view, position) {\n const { offset, length } = position;\n const data: T[] = [];\n while (position.offset - offset < length)\n data.push(encoder.read(view, position));\n return data;\n },\n});\n\nexport const advance = (position: ReadPosition, bytes: number) => {\n position.offset += bytes | 0;\n position.length -= bytes | 0;\n position.length &= ~(position.length >> 31);\n};\n\nexport const encodeIntoBuffer = <T>(\n encoder: Encoder<T>,\n input: T\n): Uint8Array => {\n const buffer = new ArrayBuffer(encoder.bytes(input));\n const endOffset = encoder.write(new DataView(buffer), 0, input);\n return new Uint8Array(buffer, 0, endOffset);\n};\n\nexport const sliceView = (\n view: DataView,\n position: ReadPosition,\n length = position.length\n) => {\n const slice = new Uint8Array(\n view.buffer,\n view.byteOffset + position.offset,\n length\n );\n advance(position, length);\n return slice;\n};\n","import { RecordClass, RecordType } from './constants';\nimport { Encoder, name, advance } from './encoders';\n\nexport interface Question {\n name: string;\n type: RecordType;\n class?: RecordClass;\n qu?: boolean;\n}\n\nconst QU_BIT = 1 << 15;\n\nexport const question: Encoder<Question> = {\n bytes(question) {\n return name.bytes(question.name) + 4;\n },\n write(view, offset, question) {\n let _class = question.class || RecordClass.IN;\n if (question.qu) _class |= QU_BIT;\n offset = name.write(view, offset, question.name);\n view.setUint16(offset, question.type);\n view.setUint16(offset + 2, _class);\n offset += 4;\n return offset;\n },\n read(view, position) {\n const _name = name.read(view, position);\n const type = view.getUint16(position.offset);\n let _class = view.getUint16(position.offset + 2) || RecordClass.ANY;\n let qu = false;\n if (_class !== RecordClass.ANY && _class & QU_BIT) {\n _class &= ~QU_BIT;\n qu = true;\n }\n advance(position, 4);\n return {\n name: _name,\n type,\n class: _class,\n qu,\n };\n },\n};\n","import { OptCode } from './constants';\nimport {\n type Encoder,\n withRDLength,\n encodeIntoBuffer,\n advance,\n bytes,\n ipv4,\n ipv6,\n} from './encoders';\n\nexport const enum IPType {\n v4 = 1,\n v6 = 2,\n}\n\nexport interface BaseOpt {\n code: number;\n}\n\nexport interface ClientSubnetOpt extends BaseOpt {\n code: OptCode.CLIENT_SUBNET;\n family?: IPType | (number & {});\n sourcePrefixLength?: number;\n scopePrefixLength?: number;\n ip: string;\n}\n\nexport interface KeepAliveOpt extends BaseOpt {\n code: OptCode.TCP_KEEPALIVE;\n timeout?: number;\n}\n\nexport interface PaddingOpt extends BaseOpt {\n code: OptCode.PADDING;\n length?: number;\n}\n\nexport interface TagOpt extends BaseOpt {\n code: OptCode.KEY_TAG;\n tags: number[];\n}\n\nexport interface UnknownOpt extends BaseOpt {\n data: Uint8Array;\n}\n\nexport type PacketOpt =\n | ClientSubnetOpt\n | KeepAliveOpt\n | PaddingOpt\n | TagOpt\n | UnknownOpt;\n\nexport const unknownOpt: Encoder<UnknownOpt> = withRDLength({\n bytes(option) {\n return bytes.bytes(option.data);\n },\n write(view, offset, option) {\n return bytes.write(view, offset, option.data);\n },\n read(view, position) {\n return {\n code: OptCode.OPTION_0,\n data: bytes.read(view, position),\n };\n },\n});\n\n// See: https://github.com/nodejs/node/blob/842448b/lib/internal/net.js#L15-L18\nconst v4Seg = '(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])';\nconst v4Str = `(?:${v4Seg}\\\\.){3}${v4Seg}`;\nconst ipv4Re = new RegExp(`^${v4Str}$`);\n\nconst isIPv4 = (ip: string) => ipv4Re.test(ip);\n\nexport const clientSubnetOpt: Encoder<ClientSubnetOpt> = withRDLength({\n bytes(option) {\n const sourcePrefixLength = option.sourcePrefixLength || 0;\n return Math.ceil(sourcePrefixLength / 8) + 4;\n },\n write(view, offset, option) {\n const sourcePrefixLength = option.sourcePrefixLength || 0;\n const scopePrefixLength = option.scopePrefixLength || 0;\n const family = option.family || (isIPv4(option.ip) ? IPType.v4 : IPType.v6);\n const maskLength = Math.ceil(sourcePrefixLength / 8);\n view.setUint16(offset, family);\n view.setUint8(offset + 2, sourcePrefixLength);\n view.setUint8(offset + 3, scopePrefixLength);\n offset += 4;\n const ipBuffer = encodeIntoBuffer(\n family === IPType.v4 ? ipv4 : ipv6,\n option.ip\n );\n for (let byteIdx = 0; byteIdx < maskLength; byteIdx++)\n view.setUint8(offset++, ipBuffer[byteIdx]);\n return offset;\n },\n read(view, position) {\n const family = view.getUint16(position.offset);\n const sourcePrefixLength = view.getUint8(position.offset + 2);\n const scopePrefixLength = view.getUint8(position.offset + 3);\n advance(position, 4);\n return {\n code: OptCode.CLIENT_SUBNET,\n family,\n sourcePrefixLength,\n scopePrefixLength,\n ip:\n family === IPType.v4\n ? ipv4.read(view, position)\n : ipv6.read(view, position),\n };\n },\n});\n\nexport const keepAliveOpt: Encoder<KeepAliveOpt> = withRDLength({\n bytes(option) {\n return option.timeout ? 2 : 0;\n },\n write(view, offset, option) {\n if (option.timeout) {\n view.setUint16(offset, option.timeout);\n offset += 2;\n }\n return offset;\n },\n read(view, position) {\n if (position.length) {\n const timeout = view.getUint16(position.offset);\n advance(position, 2);\n return { code: OptCode.TCP_KEEPALIVE, timeout };\n } else {\n return { code: OptCode.TCP_KEEPALIVE, timeout: undefined };\n }\n },\n});\n\nexport const paddingOpt: Encoder<PaddingOpt> = withRDLength({\n bytes(option) {\n return option.length || 0;\n },\n write(_view, offset, option) {\n return offset + (option.length || 0);\n },\n read(_view, position) {\n const { length } = position;\n advance(position, length);\n return { code: OptCode.PADDING, length };\n },\n});\n\nexport const tagOpt: Encoder<TagOpt> = withRDLength({\n bytes(option) {\n return option.tags.length * 2;\n },\n write(view, offset, option) {\n for (let idx = 0; idx < option.tags.length; idx++) {\n view.setUint16(offset, option.tags[idx]);\n offset += 2;\n }\n return offset;\n },\n read(view, position) {\n const { offset, length } = position;\n const tags: number[] = [];\n while (position.offset - offset < length) {\n tags.push(view.getUint16(position.offset));\n advance(position, 2);\n }\n return {\n code: OptCode.KEY_TAG,\n tags,\n };\n },\n});\n\nconst isUnknownOpt = (option: PacketOpt): option is UnknownOpt =>\n !!(option as UnknownOpt).data;\n\nexport const option: Encoder<PacketOpt> = {\n bytes(option) {\n if (isUnknownOpt(option)) {\n return unknownOpt.bytes(option) + 2;\n }\n switch (option.code) {\n case OptCode.CLIENT_SUBNET:\n return clientSubnetOpt.bytes(option) + 2;\n case OptCode.TCP_KEEPALIVE:\n return keepAliveOpt.bytes(option) + 2;\n case OptCode.PADDING:\n return paddingOpt.bytes(option) + 2;\n case OptCode.KEY_TAG:\n return tagOpt.bytes(option) + 2;\n }\n },\n write(view, offset, option) {\n view.setUint16(offset, option.code);\n offset += 2;\n if (isUnknownOpt(option)) {\n return unknownOpt.write(view, offset, option);\n }\n switch (option.code) {\n case OptCode.CLIENT_SUBNET:\n return clientSubnetOpt.write(view, offset, option);\n case OptCode.TCP_KEEPALIVE:\n return keepAliveOpt.write(view, offset, option);\n case OptCode.PADDING:\n return paddingOpt.write(view, offset, option);\n case OptCode.KEY_TAG:\n return tagOpt.write(view, offset, option);\n }\n },\n read(view, position) {\n const code = view.getUint16(position.offset);\n advance(position, 2);\n switch (code) {\n case OptCode.CLIENT_SUBNET:\n return clientSubnetOpt.read(view, position);\n case OptCode.TCP_KEEPALIVE:\n return keepAliveOpt.read(view, position);\n case OptCode.PADDING:\n return paddingOpt.read(view, position);\n case OptCode.KEY_TAG:\n return tagOpt.read(view, position);\n default:\n const opt = unknownOpt.read(view, position);\n opt.code = code;\n return opt;\n }\n },\n};\n","import {\n type Encoder,\n withRDLength,\n array,\n textDecoder,\n advance,\n uint16,\n bytes,\n ipv4,\n ipv6,\n string,\n} from './encoders';\n\nexport const enum SvcParamCode {\n Mandatory = 0,\n Alpn = 1,\n NoDefaultAlpn = 2,\n Port = 3,\n Ipv4Hint = 4,\n EchConfig = 5,\n Ipv6Hint = 6,\n DohPath = 7,\n Odoh = 32769,\n}\n\nexport interface SvcParams {\n mandatory?: (SvcParamCode | (number & {}))[];\n alpn?: string[];\n 'no-default-alpn'?: boolean;\n port?: number;\n ipv4hint?: string[];\n ipv6hint?: string[];\n echconfig?: Uint8Array;\n dohpath?: string;\n odoh?: Uint8Array;\n}\n\nconst mandatorySvcParam: Encoder<(SvcParamCode | (number & {}))[]> =\n withRDLength(array(uint16));\nconst alpnSvcParam = withRDLength(array(string));\nconst portSvcParam = withRDLength(uint16);\nconst ipv4HintSvcParam = withRDLength(array(ipv4));\nconst ipv6HintSvcParam = withRDLength(array(ipv6));\nconst bytesSvcParam = withRDLength(bytes);\n\nexport const svcParams: Encoder<SvcParams> = {\n bytes(params) {\n let byteLength = 0;\n if (params.mandatory != null)\n byteLength += mandatorySvcParam.bytes(params.mandatory) + 2;\n if (params.alpn != null) byteLength += alpnSvcParam.bytes(params.alpn) + 2;\n if (params['no-default-alpn']) byteLength += 4;\n if (params.port != null) byteLength += portSvcParam.bytes(params.port) + 2;\n if (params.ipv4hint)\n byteLength += ipv4HintSvcParam.bytes(params.ipv4hint) + 2;\n if (params.ipv6hint)\n byteLength += ipv6HintSvcParam.bytes(params.ipv6hint) + 2;\n if (params.echconfig)\n byteLength += bytesSvcParam.bytes(params.echconfig) + 2;\n if (params.dohpath) byteLength += bytesSvcParam.bytes(params.dohpath) + 2;\n if (params.odoh) byteLength += bytesSvcParam.bytes(params.odoh) + 2;\n return byteLength;\n },\n write(view, offset, params) {\n if (params.mandatory != null) {\n view.setUint16(offset, SvcParamCode.Mandatory);\n offset = mandatorySvcParam.write(view, offset + 2, params.mandatory);\n }\n if (params.alpn != null) {\n view.setUint16(offset, SvcParamCode.Alpn);\n offset = alpnSvcParam.write(view, offset + 2, params.alpn);\n }\n if (params['no-default-alpn']) {\n view.setUint16(offset, SvcParamCode.NoDefaultAlpn);\n offset += 4;\n }\n if (params.port != null) {\n view.setUint16(offset, SvcParamCode.Port);\n offset = portSvcParam.write(view, offset + 2, params.port);\n }\n if (params.ipv4hint) {\n view.setUint16(offset, SvcParamCode.Ipv4Hint);\n offset = ipv4HintSvcParam.write(view, offset + 2, params.ipv4hint);\n }\n if (params.ipv6hint) {\n view.setUint16(offset, SvcParamCode.Ipv6Hint);\n offset = ipv6HintSvcParam.write(view, offset + 2, params.ipv6hint);\n }\n if (params.echconfig) {\n view.setUint16(offset, SvcParamCode.EchConfig);\n offset = bytesSvcParam.write(view, offset + 2, params.echconfig);\n }\n if (params.dohpath) {\n view.setUint16(offset, SvcParamCode.DohPath);\n offset = bytesSvcParam.write(view, offset + 2, params.dohpath);\n }\n if (params.odoh) {\n view.setUint16(offset, SvcParamCode.Odoh);\n offset = bytesSvcParam.write(view, offset + 2, params.odoh);\n }\n return offset;\n },\n read(view, position) {\n const { length, offset } = position;\n const params: SvcParams = {\n mandatory: undefined,\n alpn: undefined,\n 'no-default-alpn': false,\n port: undefined,\n ipv4hint: undefined,\n ipv6hint: undefined,\n echconfig: undefined,\n dohpath: undefined,\n odoh: undefined,\n };\n while (position.offset - offset < length) {\n const code = view.getUint16(position.offset) as\n | SvcParamCode\n | (number & {});\n advance(position, 2);\n switch (code) {\n case SvcParamCode.Mandatory:\n params.mandatory = mandatorySvcParam.read(view, position);\n break;\n case SvcParamCode.Alpn:\n params.alpn = alpnSvcParam.read(view, position);\n break;\n case SvcParamCode.NoDefaultAlpn:\n params['no-default-alpn'] = true;\n advance(position, 2);\n break;\n case SvcParamCode.Port:\n params.port = portSvcParam.read(view, position);\n break;\n case SvcParamCode.Ipv4Hint:\n params.ipv4hint = ipv4HintSvcParam.read(view, position);\n break;\n case SvcParamCode.Ipv6Hint:\n params.ipv6hint = ipv6HintSvcParam.read(view, position);\n break;\n case SvcParamCode.EchConfig:\n params.echconfig = bytesSvcParam.read(view, position);\n break;\n case SvcParamCode.DohPath:\n params.dohpath = textDecoder.decode(\n bytesSvcParam.read(view, position)\n );\n break;\n case SvcParamCode.Odoh:\n params.odoh = bytesSvcParam.read(view, position);\n break;\n default:\n // NOTE: We discard other parameters using the required RDLENGTH field\n bytesSvcParam.read(view, position);\n }\n }\n return params;\n },\n};\n","import { RecordClass, RecordType } from './constants';\nimport { Encoder, advance, octets } from './encoders';\nimport { option, PacketOpt } from './options';\nimport { svcParams, SvcParams } from './svcparams';\nimport {\n withRDLength,\n typeBitmap,\n string,\n bytes,\n name,\n ipv4,\n ipv6,\n array,\n} from './encoders';\n\nexport interface BaseAnswer {\n type: RecordType;\n name: string;\n ttl?: number;\n class?: RecordClass;\n flush?: boolean;\n}\n\nconst answerBytes = withRDLength(bytes);\n\nexport interface NsAnswer extends BaseAnswer {\n type: RecordType.NS;\n data: string;\n}\n\nconst answerName = withRDLength(name);\n\nexport interface AAnswer extends BaseAnswer {\n type: RecordType.A;\n data: string;\n}\n\nconst answerIPv4 = withRDLength(ipv4);\n\nexport interface AAAAAnswer extends BaseAnswer {\n type: RecordType.AAAA;\n data: string;\n}\n\nconst answerIPv6 = withRDLength(ipv6);\n\nexport interface TxtAnswer extends BaseAnswer {\n type: RecordType.TXT;\n data: string[];\n}\n\nexport const answerTxt: Encoder<string[]> = withRDLength(array(string));\n\nexport interface SrvData {\n priority?: number;\n weight?: number;\n port: number;\n target: string;\n}\n\nexport interface SrvAnswer extends BaseAnswer {\n type: RecordType.SRV;\n data: SrvData;\n}\n\nexport const answerSrv: Encoder<SrvData> = withRDLength({\n bytes(data) {\n return name.bytes(data.target) + 6;\n },\n write(view, offset, data) {\n view.setUint16(offset, data.priority || 0);\n view.setUint16(offset + 2, data.weight || 0);\n view.setUint16(offset + 4, data.port || 0);\n return name.write(view, offset + 6, data.target);\n },\n read(view, position) {\n const data: SrvData = { priority: 0, weight: 0, port: 0, target: '' };\n data.priority = view.getUint16(position.offset);\n data.weight = view.getUint16(position.offset + 2);\n data.port = view.getUint16(position.offset + 4);\n advance(position, 6);\n data.target = name.read(view, position);\n return data;\n },\n});\n\nexport interface HInfoData {\n cpu: string;\n os: string;\n}\n\nexport interface HInfoAnswer extends BaseAnswer {\n type: RecordType.HINFO;\n data: HInfoData;\n}\n\nexport const answerHInfo: Encoder<HInfoData> = withRDLength({\n bytes(data) {\n return string.bytes(data.cpu) + string.bytes(data.os);\n },\n write(view, offset, data) {\n offset = string.write(view, offset, data.cpu);\n offset = string.write(view, offset, data.os);\n return offset;\n },\n read(view, position) {\n return {\n cpu: string.read(view, position),\n os: string.read(view, position),\n };\n },\n});\n\nexport interface CaaData {\n flags?: number;\n tag: 'issue' | 'issuewild' | 'iodef';\n value: Uint8Array;\n issuerCritical?: boolean;\n}\n\nexport interface CaaAnswer extends BaseAnswer {\n type: RecordType.CAA;\n data: CaaData;\n}\n\nconst ISSUER_CRITICAL = 1 << 7;\n\nconst toCaaTag = (input: string) => {\n switch (input) {\n case 'issue':\n case 'issuewild':\n case 'iodef':\n return input;\n default:\n return 'issue';\n }\n};\n\nexport const answerCaa: Encoder<CaaData> = withRDLength({\n bytes(data) {\n return string.bytes(data.tag) + bytes.bytes(data.value) + 1;\n },\n write(view, offset, data) {\n let flags = data.flags || 0;\n if (data.issuerCritical) flags = ISSUER_CRITICAL;\n view.setUint8(offset, flags);\n offset = string.write(view, offset + 1, data.tag);\n offset = bytes.write(view, offset, data.value);\n return offset;\n },\n read(view, position) {\n const flags = view.getUint8(position.offset);\n advance(position, 1);\n return {\n flags,\n tag: toCaaTag(string.read(view, position)),\n value: bytes.read(view, position),\n issuerCritical: !!(flags & ISSUER_CRITICAL),\n };\n },\n});\n\nexport interface SoaData {\n mname: string;\n rname: string;\n serial?: number;\n refresh?: number;\n retry?: number;\n expire?: number;\n minimum?: number;\n}\n\nexport interface SoaAnswer extends BaseAnswer {\n type: RecordType.SOA;\n data: SoaData;\n}\n\nexport const answerSoa: Encoder<SoaData> = withRDLength({\n bytes(data) {\n return name.bytes(data.mname) + name.bytes(data.rname) + 20;\n },\n write(view, offset, data) {\n offset = name.write(view, offset, data.mname);\n offset = name.write(view, offset, data.rname);\n view.setUint32(offset, data.serial || 0);\n view.setUint32(offset + 4, data.refresh || 0);\n view.setUint32(offset + 8, data.retry || 0);\n view.setUint32(offset + 12, data.expire || 0);\n view.setUint32(offset + 16, data.minimum || 0);\n return offset + 20;\n },\n read(view, position) {\n const data: SoaData = {\n mname: name.read(view, position),\n rname: name.read(view, position),\n serial: view.getUint32(position.offset),\n refresh: view.getUint32(position.offset + 4),\n retry: view.getUint32(position.offset + 8),\n expire: view.getUint32(position.offset + 12),\n minimum: view.getUint32(position.offset + 16),\n };\n position.offset += 20;\n position.length -= 20;\n return data;\n },\n});\n\nexport interface MxData {\n preference?: number;\n exchange: string;\n}\n\nexport interface MxAnswer extends BaseAnswer {\n type: RecordType.MX;\n data: MxData;\n}\n\nexport const answerMx: Encoder<MxData> = withRDLength({\n bytes(data) {\n return name.bytes(data.exchange) + 2;\n },\n write(view, offset, data) {\n view.setUint16(offset, data.preference || 0);\n return name.write(view, offset + 2, data.exchange);\n },\n read(view, position) {\n const data: MxData = {\n preference: view.getUint16(position.offset),\n exchange: '',\n };\n advance(position, 2);\n data.exchange = name.read(view, position);\n return data;\n },\n});\n\nexport interface DnskeyData {\n flags: number;\n algorithm: number;\n key: Uint8Array;\n}\n\nexport interface DnskeyAnswer extends BaseAnswer {\n type: RecordType.DNSKEY;\n data: DnskeyData;\n}\n\nexport const answerDnskey: Encoder<DnskeyData> = withRDLength({\n bytes(data) {\n return bytes.bytes(data.key) + 4;\n },\n write(view, offset, data) {\n const PROTOCOL_DNSSEC = 3;\n view.setUint16(offset, data.flags);\n view.setUint8(offset + 2, PROTOCOL_DNSSEC);\n view.setUint8(offset + 3, data.algorithm);\n return bytes.write(view, offset + 4, data.key);\n },\n read(view, position) {\n const flags = view.getUint16(position.offset);\n const algorithm = view.getUint8(position.offset + 3);\n advance(position, 4);\n return {\n flags,\n algorithm,\n key: bytes.read(view, position),\n };\n },\n});\n\nexport interface RrsigData {\n typeCovered: RecordType;\n algorithm: number;\n labels: number;\n originalTTL: number;\n expiration: number;\n inception: number;\n keyTag: number;\n signersName: string;\n signature: Uint8Array;\n}\n\nexport interface RrsigAnswer extends BaseAnswer {\n type: RecordType.RRSIG;\n data: RrsigData;\n}\n\nexport const answerRrsig: Encoder<RrsigData> = withRDLength({\n bytes(data) {\n return 18 + name.bytes(data.signersName) + bytes.bytes(data.signature);\n },\n write(view, offset, data) {\n view.setUint16(offset, data.typeCovered);\n view.setUint8(offset + 2, data.algorithm);\n view.setUint8(offset + 3, data.labels);\n view.setUint32(offset + 4, data.originalTTL);\n view.setUint32(offset + 8, data.expiration);\n view.setUint32(offset + 12, data.inception);\n view.setUint16(offset + 16, data.keyTag);\n offset = name.write(view, offset + 18, data.signersName);\n offset = bytes.write(view, offset, data.signature);\n return offset;\n },\n read(view, position) {\n const typeCovered = view.getUint16(position.offset);\n const algorithm = view.getUint8(position.offset + 2);\n const labels = view.getUint8(position.offset + 3);\n const originalTTL = view.getUint32(position.offset + 4);\n const expiration = view.getUint32(position.offset + 8);\n const inception = view.getUint32(position.offset + 12);\n const keyTag = view.getUint16(position.offset + 16);\n advance(position, 18);\n return {\n typeCovered,\n algorithm,\n labels,\n originalTTL,\n expiration,\n inception,\n keyTag,\n signersName: name.read(view, position),\n signature: bytes.read(view, position),\n };\n },\n});\n\nexport interface RpData {\n mbox: string;\n txt: string;\n}\n\nexport interface RpAnswer extends BaseAnswer {\n type: RecordType.RP;\n data: RpData;\n}\n\nexport const answerRp: Encoder<RpData> = withRDLength({\n bytes(data) {\n return name.bytes(data.mbox) + name.bytes(data.txt);\n },\n write(view, offset, data) {\n offset = name.write(view, offset, data.mbox);\n offset = name.write(view, offset, data.txt);\n return offset;\n },\n read(view, position) {\n return {\n mbox: name.read(view, position),\n txt: name.read(view, position),\n };\n },\n});\n\nexport interface NsecData {\n nextDomain: string;\n rrtypes: RecordType[];\n}\n\nexport interface NsecAnswer extends BaseAnswer {\n type: RecordType.NSEC;\n data: NsecData;\n}\n\nexport const answerNsec: Encoder<NsecData> = withRDLength({\n bytes(data) {\n return name.bytes(data.nextDomain) + typeBitmap.bytes(data.rrtypes);\n },\n write(view, offset, data) {\n offset = name.write(view, offset, data.nextDomain);\n offset = typeBitmap.write(view, offset, data.rrtypes);\n return offset;\n },\n read(view, position) {\n return {\n nextDomain: name.read(view, position),\n rrtypes: typeBitmap.read(view, position),\n };\n },\n});\n\nexport interface Nsec3Data {\n algorithm: number;\n flags: number;\n iterations: number;\n salt: Uint8Array;\n nextDomain: Uint8Array;\n rrtypes: RecordType[];\n}\n\nexport interface Nsec3Answer extends BaseAnswer {\n type: RecordType.NSEC3;\n data: Nsec3Data;\n}\n\nexport const answerNsec3: Encoder<Nsec3Data> = withRDLength({\n bytes(data) {\n return (\n octets.bytes(data.salt) +\n octets.bytes(data.nextDomain) +\n typeBitmap.bytes(data.rrtypes) +\n 4\n );\n },\n write(view, offset, data) {\n view.setUint8(offset, data.algorithm);\n view.setUint8(offset + 1, data.flags);\n view.setUint16(offset + 2, data.iterations);\n offset = octets.write(view, offset + 4, data.salt);\n offset = octets.write(view, offset, data.nextDomain);\n offset = typeBitmap.write(view, offset, data.rrtypes);\n return offset;\n },\n read(view, position) {\n const algorithm = view.getUint8(position.offset);\n const flags = view.getUint8(position.offset + 1);\n const iterations = view.getUint16(position.offset + 2);\n advance(position, 4);\n return {\n algorithm,\n flags,\n iterations,\n salt: octets.read(view, position),\n nextDomain: octets.read(view, position),\n rrtypes: typeBitmap.read(view, position),\n };\n },\n});\n\nexport interface SshfpData {\n algorithm: number;\n hash: number;\n fingerprint: Uint8Array;\n}\n\nexport interface SshfpAnswer extends BaseAnswer {\n type: RecordType.SSHFP;\n data: SshfpData;\n}\n\nexport const answerSshfp: Encoder<SshfpData> = withRDLength({\n bytes(data) {\n return bytes.bytes(data.fingerprint) + 2;\n },\n write(view, offset, data) {\n view.setUint8(offset, data.algorithm);\n view.setUint8(offset + 1, data.hash);\n return bytes.write(view, offset + 2, data.fingerprint);\n },\n read(view, position) {\n const algorithm = view.getUint8(position.offset);\n const hash = view.getUint8(position.offset + 1);\n advance(position, 2);\n return {\n algorithm,\n hash,\n fingerprint: bytes.read(view, position),\n };\n },\n});\n\nexport interface DsData {\n keyTag: number;\n algorithm: number;\n digestType: number;\n digest: Uint8Array;\n}\n\nexport interface DsAnswer extends BaseAnswer {\n type: RecordType.DS;\n data: DsData;\n}\n\nexport const answerDs: Encoder<DsData> = withRDLength({\n bytes(data) {\n return bytes.bytes(data.digest) + 4;\n },\n write(view, offset, data) {\n view.setUint16(offset, data.keyTag);\n view.setUint8(offset + 2, data.algorithm);\n view.setUint8(offset + 3, data.digestType);\n offset = bytes.write(view, offset + 4, data.digest);\n return offset;\n },\n read(view, position) {\n const keyTag = view.getUint16(position.offset);\n const algorithm = view.getUint8(position.offset + 2);\n const digestType = view.getUint8(position.offset + 3);\n advance(position, 4);\n return {\n keyTag,\n algorithm,\n digestType,\n digest: bytes.read(view, position),\n };\n },\n});\n\nexport interface NaptrData {\n order: number;\n preference: number;\n flags: string;\n services: string;\n regexp: string;\n replacement: string;\n}\n\nexport interface NaptrAnswer extends BaseAnswer {\n type: RecordType.NAPTR;\n data: NaptrData;\n}\n\nexport const answerNaptr: Encoder<NaptrData> = withRDLength({\n bytes(data) {\n return (\n string.bytes(data.flags) +\n string.bytes(data.services) +\n string.bytes(data.regexp) +\n name.bytes(data.replacement) +\n 4\n );\n },\n write(view, offset, data) {\n view.setUint16(offset, data.order);\n view.setUint16(offset + 2, data.preference);\n offset = string.write(view, offset + 4, data.flags);\n offset = string.write(view, offset, data.services);\n offset = string.write(view, offset, data.regexp);\n offset = name.write(view, offset, data.replacement);\n return offset;\n },\n read(view, position) {\n const order = view.getUint16(position.offset);\n const preference = view.getUint16(position.offset + 2);\n advance(position, 4);\n return {\n order,\n preference,\n flags: string.read(view, position),\n services: string.read(view, position),\n regexp: string.read(view, position),\n replacement: name.read(view, position),\n };\n },\n});\n\nexport interface TlsaData {\n usage: number;\n selector: number;\n matchingType: number;\n certificate: Uint8Array;\n}\n\nexport interface TlsaAnswer extends BaseAnswer {\n type: RecordType.TLSA;\n data: TlsaData;\n}\n\nexport const answerTlsa: Encoder<TlsaData> = withRDLength({\n bytes(data) {\n return bytes.bytes(data.certificate) + 3;\n },\n write(view, offset, data) {\n view.setUint8(offset, data.usage);\n view.setUint8(offset + 1, data.selector);\n view.setUint8(offset + 2, data.matchingType);\n return bytes.write(view, offset + 3, data.certificate);\n },\n read(view, position) {\n const usage = view.getUint8(position.offset);\n const selector = view.getUint8(position.offset + 1);\n const matchingType = view.getUint8(position.offset + 2);\n advance(position, 3);\n return {\n usage,\n selector,\n matchingType,\n certificate: bytes.read(view, position),\n };\n },\n});\n\nexport interface SvcbData {\n name: string;\n priority?: number;\n params: SvcParams;\n}\n\nexport interface SvcbAnswer extends BaseAnswer {\n type: RecordType.SVCB;\n data: SvcbData;\n}\n\nexport interface HttpsAnswer extends BaseAnswer {\n type: RecordType.HTTPS;\n data: SvcbData;\n}\n\nexport const answerSvcb: Encoder<SvcbData> = withRDLength({\n bytes(data) {\n return name.bytes(data.name) + svcParams.bytes(data.params) + 2;\n },\n write(view, offset, data) {\n view.setUint16(offset, data.priority || 0);\n offset = name.write(view, offset + 2, data.name);\n offset = svcParams.write(view, offset, data.params);\n return offset;\n },\n read(view, position) {\n const priority = view.getUint16(position.offset);\n advance(position, 2);\n return {\n name: name.read(view, position),\n priority,\n params: svcParams.read(view, position),\n };\n },\n});\n\nexport interface OptAnswer {\n type: RecordType.OPT;\n name?: '.';\n udpPayloadSize: number;\n extendedRcode: number;\n ednsVersion: number;\n flags: number;\n data: PacketOpt[];\n}\n\nexport const answerOpt: Encoder<PacketOpt[]> = withRDLength(array(option));\n\nexport interface PtrAnswer extends BaseAnswer {\n type: RecordType.PTR;\n data: string;\n}\n\nexport interface CnameAnswer extends BaseAnswer {\n type: RecordType.CNAME;\n data: string;\n}\n\nexport interface DnameAnswer extends BaseAnswer {\n type: RecordType.DNAME;\n data: string;\n}\n\nexport interface NullAnswer extends BaseAnswer {\n type: RecordType.NULL;\n data: Uint8Array | string;\n}\n\nexport interface UnknownAnswer extends BaseAnswer {\n type:\n | RecordType.AFSDB\n | RecordType.APL\n | RecordType.AXFR\n | RecordType.CDNSKEY\n | RecordType.CDS\n | RecordType.CERT\n | RecordType.DHCID\n | RecordType.DLV\n | RecordType.HIP\n | RecordType.IPSECKEY\n | RecordType.IXFR\n | RecordType.KEY\n | RecordType.KX\n | RecordType.LOC\n | RecordType.NSEC3PARAM\n | RecordType.NULL\n | RecordType.SIG\n | RecordType.TA\n | RecordType.TKEY\n | RecordType.TSIG;\n data: Uint8Array | string;\n}\n\nexport type Answer =\n | AAnswer\n | AAAAAnswer\n | TxtAnswer\n | SrvAnswer\n | HInfoAnswer\n | CaaAnswer\n | NsAnswer\n | SoaAnswer\n | MxAnswer\n | OptAnswer\n | DnskeyAnswer\n | RrsigAnswer\n | RpAnswer\n | NsecAnswer\n | Nsec3Answer\n | SshfpAnswer\n | DsAnswer\n | NaptrAnswer\n | TlsaAnswer\n | PtrAnswer\n | CnameAnswer\n | DnameAnswer\n | SvcbAnswer\n | HttpsAnswer\n | NullAnswer\n | UnknownAnswer;\n\nconst FLUSH_MASK = 1 << 15;\n\nexport const answer: Encoder<Answer> = {\n bytes(answer) {\n const byteLength =\n 8 + name.bytes(answer.type === RecordType.OPT ? '.' : answer.name);\n switch (answer.type) {\n case RecordType.A:\n return byteLength + answerIPv4.bytes(answer.data);\n case RecordType.NS:\n return byteLength + answerName.bytes(answer.data);\n case RecordType.SOA:\n return byteLength + answerSoa.bytes(answer.data);\n case RecordType.HINFO:\n return byteLength + answerHInfo.bytes(answer.data);\n case RecordType.MX:\n return byteLength + answerMx.bytes(answer.data);\n case RecordType.TXT:\n return byteLength + answerTxt.bytes(answer.data);\n case RecordType.RP:\n return byteLength + answerRp.bytes(answer.data);\n case RecordType.AAAA:\n return byteLength + answerIPv6.bytes(answer.data);\n case RecordType.SRV:\n return byteLength + answerSrv.bytes(answer.data);\n case RecordType.NAPTR:\n return byteLength + answerNaptr.bytes(answer.data);\n case RecordType.OPT:\n return byteLength + answerOpt.bytes(answer.data);\n case RecordType.DS:\n return byteLength + answerDs.bytes(answer.data);\n case RecordType.SSHFP:\n return byteLength + answerSshfp.bytes(answer.data);\n case RecordType.RRSIG:\n return byteLength + answerRrsig.bytes(answer.data);\n case RecordType.NSEC:\n return byteLength + answerNsec.bytes(answer.data);\n case RecordType.DNSKEY:\n return byteLength + answerDnskey.bytes(answer.data);\n case RecordType.NSEC3:\n return byteLength + answerNsec3.bytes(answer.data);\n case RecordType.TLSA:\n return byteLength + answerTlsa.bytes(answer.data);\n case RecordType.SVCB:\n case RecordType.HTTPS:\n return byteLength + answerSvcb.bytes(answer.data);\n case RecordType.CAA:\n return byteLength + answerCaa.bytes(answer.data);\n case RecordType.PTR:\n case RecordType.CNAME:\n case RecordType.DNAME:\n return byteLength + answerName.bytes(answer.data);\n default:\n return byteLength + answerBytes.bytes(answer.data);\n }\n },\n write(view, offset, answer) {\n if (answer.type === RecordType.OPT) {\n offset = name.write(view, offset, '.');\n view.setUint16(offset, answer.type);\n view.setUint16(offset + 2, answer.udpPayloadSize || 4_096);\n view.setUint8(offset + 4, answer.extendedRcode || 0);\n view.setUint8(offset + 5, answer.ednsVersion || 0);\n view.setUint16(offset + 6, answer.flags || 0);\n offset += 8;\n return answerOpt.write(view, offset, answer.data);\n }\n offset = name.write(view, offset, answer.name);\n view.setUint16(offset, answer.type);\n view.setUint16(\n offset + 2,\n (answer.class || 0) | (answer.flush ? FLUSH_MASK : 0)\n );\n view.setUint32(offset + 4, answer.ttl || 0);\n offset += 8;\n switch (answer.type) {\n case RecordType.A:\n return answerIPv4.write(view, offset, answer.data);\n case RecordType.NS:\n return answerName.write(view, offset, answer.data);\n case RecordType.SOA:\n return answerSoa.write(view, offset, answer.data);\n case RecordType.HINFO:\n return answerHInfo.write(view, offset, answer.data);\n case RecordType.MX:\n return answerMx.write(view, offset, answer.data);\n case RecordType.TXT:\n return answerTxt.write(view, offset, answer.data);\n case RecordType.RP:\n return answerRp.write(view, offset, answer.data);\n case RecordType.AAAA:\n return answerIPv6.write(view, offset, answer.data);\n case RecordType.SRV:\n return answerSrv.write(view, offset, answer.data);\n case RecordType.NAPTR:\n return answerNaptr.write(view, offset, answer.data);\n case RecordType.DS:\n return answerDs.write(view, offset, answer.data);\n case RecordType.SSHFP:\n return answerSshfp.write(view, offset, answer.data);\n case RecordType.RRSIG:\n return answerRrsig.write(view, offset, answer.data);\n case RecordType.NSEC:\n return answerNsec.write(view, offset, answer.data);\n case RecordType.DNSKEY:\n return answerDnskey.write(view, offset, answer.data);\n case RecordType.NSEC3:\n return answerNsec3.write(view, offset, answer.data);\n case RecordType.TLSA:\n return answerTlsa.write(view, offset, answer.data);\n case RecordType.SVCB:\n case RecordType.HTTPS:\n return answerSvcb.write(view, offset, answer.data);\n case RecordType.CAA:\n return answerCaa.write(view, offset, answer.data);\n case RecordType.PTR:\n case RecordType.CNAME:\n case RecordType.DNAME:\n return answerName.write(view, offset, answer.data);\n default:\n return answerBytes.write(view, offset, answer.data);\n }\n },\n read(view, position) {\n const _name = name.read(view, position);\n const type = view.getUint16(position.offset);\n if (type === RecordType.OPT) {\n const udpPayloadSize = view.getUint16(position.offset + 2) || 4_096;\n const extendedRcode = view.getUint8(position.offset + 4);\n const ednsVersion = view.getUint8(position.offset + 5);\n const flags = view.getUint16(position.offset + 6);\n advance(position, 8);\n return {\n type,\n udpPayloadSize,\n extendedRcode,\n ednsVersion,\n flags,\n data: answerOpt.read(view, position),\n };\n }\n const _class = view.getUint16(position.offset + 2);\n const ttl = view.getUint32(position.offset + 4);\n advance(position, 8);\n const answer: Answer = {\n name: _name,\n type,\n class: _class & ~FLUSH_MASK,\n flush: !!(_class & FLUSH_MASK),\n ttl,\n data: null as any,\n };\n switch (answer.type) {\n case RecordType.A:\n answer.data = answerIPv4.read(view, position);\n return answer;\n case RecordType.NS:\n answer.data = answerName.read(view, position);\n return answer;\n case RecordType.SOA:\n answer.data = answerSoa.read(view, position);\n return answer;\n case RecordType.HINFO:\n answer.data = answerHInfo.read(view, position);\n return answer;\n case RecordType.MX:\n answer.data = answerMx.read(view, position);\n return answer;\n case RecordType.TXT:\n answer.data = answerTxt.read(view, position);\n return answer;\n case RecordType.RP:\n answer.data = answerRp.read(view, position);\n return answer;\n case RecordType.AAAA:\n answer.data = answerIPv6.read(view, position);\n return answer;\n case RecordType.SRV:\n answer.data = answerSrv.read(view, position);\n return answer;\n case RecordType.NAPTR:\n answer.data = answerNaptr.read(view, position);\n return answer;\n case RecordType.DS:\n answer.data = answerDs.read(view, position);\n return answer;\n case RecordType.SSHFP:\n answer.data = answerSshfp.read(view, position);\n return answer;\n case RecordType.RRSIG:\n answer.data = answerRrsig.read(view, position);\n return answer;\n case RecordType.NSEC:\n answer.data = answerNsec.read(view, position);\n return answer;\n case RecordType.DNSKEY:\n answer.data = answerDnskey.read(view, position);\n return answer;\n case RecordType.NSEC3:\n answer.data = answerNsec3.read(view, position);\n return answer;\n case RecordType.TLSA:\n answer.data = answerTlsa.read(view, position);\n return answer;\n case RecordType.SVCB:\n case RecordType.HTTPS:\n answer.data = answerSvcb.read(view, position);\n return answer;\n case RecordType.CAA:\n answer.data = answerCaa.read(view, position);\n return answer;\n case RecordType.PTR:\n case RecordType.CNAME:\n case RecordType.DNAME:\n answer.data = answerName.read(view, position);\n return answer;\n default:\n answer.data = answerBytes.read(view, position);\n return answer;\n }\n },\n};\n","import { type PacketFlag, PacketRType, PacketType } from './constants';\nimport { type Encoder, type ReadPosition, advance } from './encoders';\nimport { type Question, question } from './questions';\nimport { type Answer, answer } from './answers';\n\nconst readList = <T>(\n encoder: Encoder<T>,\n view: DataView,\n position: ReadPosition,\n limit: number\n): T[] | undefined => {\n if (!limit) {\n return undefined;\n }\n const { offset, length } = position;\n const data: T[] = [];\n for (let idx = 0; idx < limit && position.offset - offset < length; idx++)\n data.push(encoder.read(view, position));\n return data;\n};\n\nexport interface Packet {\n id?: number;\n type?: PacketType;\n rtype?: PacketRType;\n flags?: PacketFlag | (number & {});\n questions?: Question[];\n answers?: Answer[];\n additionals?: Answer[];\n authorities?: Answer[];\n}\n\nconst PACKET_FLAG_MASK = 32767;\n\nexport const packet: Encoder<Packet> = {\n bytes(packet) {\n const { questions, answers, authorities, additionals } = packet;\n let byteLength = 12;\n let idx = 0;\n for (idx = 0; questions && idx < questions.length; idx++)\n byteLength += question.bytes(questions[idx]);\n for (idx = 0; answers && idx < answers.length; idx++)\n byteLength += answer.bytes(answers[idx]);\n for (idx = 0; authorities && idx < authorities.length; idx++)\n byteLength += answer.bytes(authorities[idx]);\n for (idx = 0; additionals && idx < additionals.length; idx++)\n byteLength += answer.bytes(additionals[idx]);\n return byteLength;\n },\n write(view, offset, packet) {\n const { questions, answers, authorities, additionals } = packet;\n let flags =\n ((packet.flags || 0) & PACKET_FLAG_MASK) |\n (packet.type || PacketType.QUERY) |\n (packet.rtype || 0);\n view.setUint16(offset, packet.id || 0);\n view.setUint16(offset + 2, flags);\n view.setUint16(offset + 4, packet.questions?.length || 0);\n view.setUint16(offset + 6, packet.answers?.length || 0);\n view.setUint16(offset + 8, packet.authorities?.length || 0);\n view.setUint16(offset + 10, packet.additionals?.length || 0);\n offset += 12;\n let idx = 0;\n for (idx = 0; questions && idx < questions.length; idx++)\n offset = question.write(view, offset, questions[idx]);\n for (idx = 0; answers && idx < answers.length; idx++)\n offset = answer.write(view, offset, answers[idx]);\n for (idx = 0; authorities && idx < authorities.length; idx++)\n offset = answer.write(view, offset, authorities[idx]);\n for (idx = 0; additionals && idx < additionals.length; idx++)\n offset = answer.write(view, offset, additionals[idx]);\n return offset;\n },\n read(view, position) {\n const id = view.getUint16(position.offset);\n const flags = view.getUint16(position.offset + 2);\n const questionsLength = view.getUint16(position.offset + 4);\n const answersLength = view.getUint16(position.offset + 6);\n const authoritiesLength = view.getUint16(position.offset + 8);\n const additionalsLength = view.getUint16(position.offset + 10);\n advance(position, 12);\n return {\n id,\n flags,\n rtype: flags & 0xf,\n type:\n flags & PacketType.RESPONSE ? PacketType.RESPONSE : PacketType.QUERY,\n questions: readList(question, view, position, questionsLength),\n answers: readList(answer, view, position, answersLength),\n authorities: readList(answer, view, position, authoritiesLength),\n additionals: readList(answer, view, position, additionalsLength),\n };\n },\n};\n","import { type Packet, packet } from './packets';\n\nexport type {\n NsAnswer,\n AAnswer,\n AAAAAnswer,\n TxtAnswer,\n SrvAnswer,\n HInfoAnswer,\n CaaAnswer,\n SoaAnswer,\n MxAnswer,\n DnskeyAnswer,\n RrsigAnswer,\n RpAnswer,\n NsecAnswer,\n Nsec3Answer,\n SshfpAnswer,\n DsAnswer,\n NaptrAnswer,\n TlsaAnswer,\n PtrAnswer,\n CnameAnswer,\n DnameAnswer,\n NullAnswer,\n UnknownAnswer,\n Answer,\n} from './answers';\n\nexport type {\n IPType,\n ClientSubnetOpt,\n KeepAliveOpt,\n PaddingOpt,\n TagOpt,\n UnknownOpt,\n PacketOpt,\n} from './options';\nexport type { Packet } from './packets';\nexport type { Question } from './questions';\nexport * from './constants';\n\nexport function decode(bytes: ArrayBufferView | ArrayBufferLike): Packet {\n const view =\n 'buffer' in bytes\n ? new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength)\n : new DataView(bytes);\n return packet.read(view, { offset: 0, length: view.byteLength });\n}\n\nexport function streamDecode(bytes: ArrayBufferView | ArrayBufferLike): Packet {\n const view =\n 'buffer' in bytes\n ? new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength)\n : new DataView(bytes);\n const length = Math.min(view.byteLength - 2, view.getUint16(0));\n return packet.read(view, { offset: 2, length });\n}\n\nexport function encodingLength(input: Packet): number {\n return packet.bytes(input);\n}\n\nexport function encode(input: Packet): Uint8Array {\n const buffer = new ArrayBuffer(packet.bytes(input));\n const length = packet.write(new DataView(buffer), 0, input);\n return new Uint8Array(buffer, 0, length);\n}\n\nexport function streamEncode(input: Packet): Uint8Array {\n const buffer = new ArrayBuffer(packet.bytes(input) + 2);\n const view = new DataView(buffer);\n const length = packet.write(view, 2, input);\n view.setUint16(0, length - 2);\n return new Uint8Array(buffer, 0, length);\n}\n"],"names":["PacketType","RecordType","RecordClass","PacketFlag","OptCode","textEncoder","TextEncoder","textDecoder","TextDecoder","utf8ByteLength","Buffer","str","byteLength","length","i","code","charCodeAt","name","bytes","replace","RangeError","write","view","offset","encoded","encode","startIdx","endIdx","indexOf","byteIdx","idx","setUint8","read","outerPosition","labels","maxOffset","innerPosition","labelLength","getUint8","advance","label","sliceView","push","decode","jumpTo","getUint16","join","data","Uint8Array","buffer","byteOffset","set","position","octets","string","typeBitmap","types","extents","Math","max","ceil","typesByWindow","window","typelist","windowLength","bitmap","bit","ipv4","ip","split","octetIdx","parseInt","min","Array","fill","map","_","index","uint16","key","setUint16","ipv6","middleIdx","head","slice","tail","includes","pop","undefined","headIdx","pad","tailIdx","v4Parts","part","output","toString","withRDLength","encoder","startOffset","rdlength","array","QU_BIT","question","_class","class","IN","qu","type","_name","ANY","IPType","unknownOpt","option","OPTION_0","v4Seg","ipv4Re","RegExp","clientSubnetOpt","sourcePrefixLength","scopePrefixLength","family","test","v4","v6","maskLength","ipBuffer","encodeIntoBuffer","input","ArrayBuffer","endOffset","DataView","CLIENT_SUBNET","keepAliveOpt","timeout","TCP_KEEPALIVE","paddingOpt","_view","PADDING","tagOpt","tags","KEY_TAG","isUnknownOpt","opt","SvcParamCode","mandatorySvcParam","alpnSvcParam","portSvcParam","ipv4HintSvcParam","ipv6HintSvcParam","bytesSvcParam","svcParams","params","mandatory","alpn","port","ipv4hint","ipv6hint","echconfig","dohpath","odoh","Mandatory","Alpn","NoDefaultAlpn","Port","Ipv4Hint","Ipv6Hint","EchConfig","DohPath","Odoh","answerBytes","answerName","answerIPv4","answerIPv6","answerTxt","answerSrv","target","priority","weight","answerHInfo","cpu","os","toCaaTag","answerCaa","tag","value","flags","issuerCritical","answerSoa","mname","rname","setUint32","serial","refresh","retry","expire","minimum","getUint32","answerMx","exchange","preference","answerDnskey","algorithm","answerRrsig","signersName","signature","typeCovered","originalTTL","expiration","inception","keyTag","answerRp","mbox","txt","answerNsec","nextDomain","rrtypes","answerNsec3","salt","iterations","answerSshfp","fingerprint","hash","answerDs","digest","digestType","answerNaptr","services","regexp","replacement","order","answerTlsa","certificate","usage","selector","matchingType","answerSvcb","answerOpt","FLUSH_MASK","answer","OPT","A","NS","SOA","HINFO","MX","TXT","RP","AAAA","SRV","NAPTR","DS","SSHFP","RRSIG","NSEC","DNSKEY","NSEC3","TLSA","SVCB","HTTPS","CAA","PTR","CNAME","DNAME","udpPayloadSize","extendedRcode","ednsVersion","flush","ttl","readList","limit","packet","questions","answers","authorities","additionals","QUERY","rtype","id","questionsLength","answersLength","authoritiesLength","additionalsLength","RESPONSE","streamDecode","encodingLength","streamEncode"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"dns-message.mjs","sources":["../src/constants.ts","../src/encoders.ts","../src/questions.ts","../src/options.ts","../src/svcparams.ts","../src/answers.ts","../src/packets.ts","../src/index.ts"],"sourcesContent":["export const enum PacketType {\n QUERY = 0,\n RESPONSE = 1 << 15,\n}\n\nexport const enum RecordType {\n A = 1,\n NS = 2,\n CNAME = 5,\n SOA = 6,\n NULL = 10,\n PTR = 12,\n HINFO = 13,\n MX = 15,\n TXT = 16,\n RP = 17,\n AFSDB = 18,\n SIG = 24,\n KEY = 25,\n AAAA = 28,\n LOC = 29,\n SRV = 33,\n NAPTR = 35,\n KX = 36,\n CERT = 37,\n DNAME = 39,\n OPT = 41,\n APL = 42,\n DS = 43,\n SSHFP = 44,\n IPSECKEY = 45,\n RRSIG = 46,\n NSEC = 47,\n DNSKEY = 48,\n DHCID = 49,\n NSEC3 = 50,\n NSEC3PARAM = 51,\n TLSA = 52,\n HIP = 55,\n CDS = 59,\n CDNSKEY = 60,\n SVCB = 64,\n HTTPS = 65,\n SPF = 99,\n TKEY = 249,\n TSIG = 250,\n IXFR = 251,\n AXFR = 252,\n ANY = 255,\n CAA = 257,\n TA = 32768,\n DLV = 32769,\n}\n\nexport const enum RecordClass {\n IN = 1,\n CS = 2,\n CH = 3,\n HS = 4,\n ANY = 255,\n}\n\nexport const enum PacketFlag {\n NOERR = 0,\n FORMERR = 1,\n SERVFAIL = 2,\n NXDOMAIN = 3,\n NOTIMP = 4,\n REFUSED = 5,\n YXDOMAIN = 6,\n YXRRSET = 7,\n NXRRSET = 8,\n NOTAUTH = 9,\n NOTZONE = 10,\n\n CHECKING_DISABLED = 1 << 4,\n AUTHENTIC_DATA = 1 << 5,\n RECURSION_AVAILABLE = 1 << 7,\n RECURSION_DESIRED = 1 << 8,\n TRUNCATED_RESPONSE = 1 << 9,\n AUTHORITATIVE_ANSWER = 1 << 10,\n}\n\nexport type PacketRType =\n | PacketFlag.NOERR\n | PacketFlag.FORMERR\n | PacketFlag.SERVFAIL\n | PacketFlag.NXDOMAIN\n | PacketFlag.NOTIMP\n | PacketFlag.REFUSED\n | PacketFlag.YXDOMAIN\n | PacketFlag.YXRRSET\n | PacketFlag.NXRRSET\n | PacketFlag.NOTAUTH\n | PacketFlag.NOTZONE;\n\nexport const enum OptCode {\n OPTION_0 = 0,\n LLQ = 1,\n UL = 2,\n NSID = 3,\n OPTION_4 = 4,\n DAU = 5,\n DHU = 6,\n N3U = 7,\n CLIENT_SUBNET = 8,\n EXPIRE = 9,\n COOKIE = 10,\n TCP_KEEPALIVE = 11,\n PADDING = 12,\n CHAIN = 13,\n KEY_TAG = 14,\n DEVICEID = 26946,\n OPTION_65535 = 65535,\n}\n","import type { RecordType } from './constants';\n\nexport interface ReadPosition {\n offset: number;\n length: number;\n}\n\nexport interface Encoder<T, R = T> {\n bytes(input: T): number;\n write(view: DataView, offset: number, input: T): number;\n read(view: DataView, position: ReadPosition): R;\n}\n\nexport const textEncoder = new TextEncoder();\nexport const textDecoder = new TextDecoder();\n\nconst utf8ByteLength =\n typeof Buffer !== 'undefined'\n ? (str: string) => Buffer.byteLength(str)\n : (str: string) => {\n let length = str.length;\n for (let i = length - 1; i >= 0; i--) {\n const code = str.charCodeAt(i);\n if (code > 0x7f && code <= 0x7ff) {\n length++;\n } else if (code > 0x7ff && code <= 0xffff) {\n length += 2;\n }\n // UTF-16 Trail Surrogate\n if (code >= 0xdc00 && code <= 0xdfff) {\n i--;\n }\n }\n return length;\n };\n\nconst LABEL_LIMIT = 63;\nconst NAME_LIMIT = 255;\n\nexport const name: Encoder<string> = {\n bytes(str) {\n let length = 2;\n switch (str) {\n case '':\n case '.':\n case '..':\n return 1;\n default:\n if (str[0] === '.') length--;\n if (str[str.length - 1] === '.') length--;\n length += str.replace(/\\\\\\./g, '.').length;\n if (length > NAME_LIMIT)\n throw new RangeError(\n `Name \"${str}\" is above ${NAME_LIMIT} byte limit.`\n );\n return length;\n }\n },\n write(view, offset, str) {\n const encoded = textEncoder.encode(str);\n for (\n let startIdx = encoded[0] === 46 /*'.'*/ ? 1 : 0, endIdx = 0;\n startIdx < encoded.byteLength;\n startIdx = endIdx + 1\n ) {\n endIdx = encoded.indexOf(46 /*'.'*/, startIdx);\n while (endIdx > -1 && encoded[endIdx - 1] === 92 /*'\\\\'*/)\n endIdx = encoded.indexOf(46 /*'.'*/, endIdx + 1);\n if (endIdx === -1) endIdx = encoded.byteLength;\n if (endIdx === startIdx) {\n continue;\n } else if (endIdx - startIdx > LABEL_LIMIT) {\n throw new RangeError(\n `Label in \"${str}\" is above ${LABEL_LIMIT} byte limit.`\n );\n }\n let byteIdx = offset + 1;\n for (let idx = startIdx; idx < endIdx; idx++) {\n if (encoded[idx] === 92 /*'\\\\'*/ && encoded[idx + 1] === 46 /*'.'*/)\n idx++;\n view.setUint8(byteIdx++, encoded[idx]);\n }\n view.setUint8(offset, byteIdx - offset - 1);\n offset = byteIdx;\n startIdx = endIdx + 1;\n }\n return offset + 1;\n },\n read(view, outerPosition) {\n const labels: string[] = [];\n let maxOffset = outerPosition.offset;\n let innerPosition = outerPosition;\n while (true) {\n const labelLength = view.getUint8(innerPosition.offset);\n if (labelLength === 0) {\n advance(innerPosition, 1);\n break;\n } else if ((labelLength & 0xc0) === 0) {\n advance(innerPosition, 1);\n const label = sliceView(view, innerPosition, labelLength);\n labels.push(textDecoder.decode(label).replace(/\\./g, '\\\\.'));\n } else {\n const jumpTo = view.getUint16(innerPosition.offset) - 0xc000;\n advance(innerPosition, 2);\n if (jumpTo < maxOffset) {\n innerPosition = { offset: (maxOffset = jumpTo), length: 0 };\n } else {\n break;\n }\n }\n }\n return labels.join('.') || '.';\n },\n};\n\nexport const bytes: Encoder<Uint8Array | string, Uint8Array> = {\n bytes(data) {\n return typeof data === 'string' ? utf8ByteLength(data) : data.byteLength;\n },\n write(view, offset, data) {\n const bytes = typeof data === 'string' ? textEncoder.encode(data) : data;\n const target = new Uint8Array(\n view.buffer,\n view.byteOffset + offset,\n bytes.byteLength\n );\n target.set(bytes);\n offset += bytes.byteLength;\n return offset;\n },\n read(view, position) {\n return sliceView(view, position);\n },\n};\n\nexport const octets: Encoder<Uint8Array> = {\n bytes(data) {\n return data.byteLength + 1;\n },\n write(view, offset, bytes) {\n view.setUint8(offset++, bytes.byteLength);\n const target = new Uint8Array(\n view.buffer,\n view.byteOffset + offset,\n bytes.byteLength\n );\n target.set(bytes);\n offset += bytes.byteLength;\n return offset;\n },\n read(view, position) {\n const length = view.getUint8(position.offset);\n advance(position, 1);\n return sliceView(view, position, length);\n },\n};\n\nexport const string: Encoder<string> = {\n bytes(str) {\n return utf8ByteLength(str) + 1;\n },\n write(view, offset, data) {\n const buffer = textEncoder.encode(data);\n view.setUint8(offset++, buffer.byteLength);\n return bytes.write(view, offset, buffer);\n },\n read(view, position) {\n const length = view.getUint8(position.offset);\n advance(position, 1);\n return textDecoder.decode(sliceView(view, position, length));\n },\n};\n\nexport const typeBitmap: Encoder<RecordType[]> = {\n bytes(types) {\n const extents: number[] = [];\n for (let idx = 0; idx < types.length; idx++)\n extents[types[idx] >> 8] = Math.max(\n extents[types[idx] >> 8] || 0,\n types[idx] & 0xff\n );\n let length = 0;\n for (let idx = 0; idx < extents.length; idx++)\n if (extents[idx] != null) length += 2 + Math.ceil((extents[idx] + 1) / 8);\n return length;\n },\n write(view, offset, types) {\n const typesByWindow: number[][] = [];\n for (let idx = 0; idx < types.length; idx++) {\n const window =\n typesByWindow[types[idx] >> 8] || (typesByWindow[types[idx] >> 8] = []);\n window[(types[idx] >> 3) & 0x1f] |= 1 << (7 - (types[idx] & 0x7));\n }\n for (let idx = 0; idx < typesByWindow.length; idx++) {\n const window = typesByWindow[idx];\n if (window != null) {\n view.setUint8(offset++, idx);\n view.setUint8(offset++, window.length);\n for (let byteIdx = 0; byteIdx < window.length; byteIdx++) {\n view.setUint8(offset++, window[byteIdx]);\n }\n }\n }\n return offset;\n },\n read(view, position) {\n const { offset, length } = position;\n const typelist: RecordType[] = [];\n while (position.offset - offset < length) {\n const window = view.getUint8(position.offset);\n const windowLength = view.getUint8(position.offset + 1);\n for (let idx = 0; idx < windowLength; idx++) {\n const bitmap = view.getUint8(position.offset + 2 + idx);\n for (let bit = 0; bit < 8; bit++) {\n if (bitmap & (1 << (7 - bit))) {\n typelist.push((window << 8) | (idx << 3) | bit);\n }\n }\n }\n advance(position, 2 + windowLength);\n }\n return typelist;\n },\n};\n\nexport const ipv4: Encoder<string> = {\n bytes() {\n return 4;\n },\n write(view, offset, ip) {\n const octets = ip.split('.', 4);\n for (let octetIdx = 0; octetIdx < 4; octetIdx++)\n view.setUint8(offset++, parseInt(octets[octetIdx], 10));\n return offset;\n },\n read(view, position) {\n const length = Math.min(position.length, 4);\n const ip = new Array(4)\n .fill(0)\n .map((_, index) =>\n index < length ? view.getUint8(position.offset + index) : 0\n )\n .join('.');\n advance(position, length);\n return ip;\n },\n};\n\nexport const uint16: Encoder<number> = {\n bytes() {\n return 2;\n },\n write(view, offset, key) {\n view.setUint16(offset, key);\n return offset + 2;\n },\n read(view, position) {\n const key = view.getUint16(position.offset);\n advance(position, 2);\n return key;\n },\n};\n\nexport const ipv6: Encoder<string> = {\n bytes() {\n return 16;\n },\n write(view, offset, ip) {\n const middleIdx = ip.indexOf('::');\n const head = (middleIdx > -1 ? ip.slice(0, middleIdx) : ip).split(':');\n const tail = middleIdx > -1 ? ip.slice(middleIdx + 2).split(':') : [];\n const ipv4 =\n tail.length > 0 && tail[tail.length - 1].includes('.')\n ? tail.pop()\n : undefined;\n for (let headIdx = 0; headIdx < head.length; headIdx++) {\n view.setUint16(offset, parseInt(head[headIdx], 16));\n offset += 2;\n }\n const middleLength = 8 - (head.length + tail.length + (ipv4 ? 2 : 0));\n for (let pad = middleLength; pad > 0; pad--) {\n view.setUint16(offset, 0);\n offset += 2;\n }\n for (let tailIdx = 0; tailIdx < tail.length; tailIdx++) {\n view.setUint16(offset, parseInt(tail[tailIdx], 16));\n offset += 2;\n }\n if (ipv4) {\n const v4Parts = ipv4.split('.', 4).map(part => parseInt(part, 10));\n view.setUint16(offset, (v4Parts[0] << 8) | v4Parts[1]);\n view.setUint16(offset + 2, (v4Parts[2] << 8) | v4Parts[3]);\n offset += 4;\n }\n return offset;\n },\n read(view, position) {\n let output = '';\n const length = Math.min(position.length, 16);\n for (let idx = 0; idx < length; idx += 2) {\n if (idx !== 0) output += ':';\n output += view.getUint16(position.offset + idx).toString(16);\n }\n advance(position, length);\n return output\n .replace(/(^|:)0(:0)*:0(:|$)/, '$1::$3')\n .replace(/:{3,4}/, '::');\n },\n};\n\nexport const withRDLength = <T, R = T>(\n encoder: Encoder<T, R>\n): Encoder<T, R> => ({\n bytes(data) {\n return encoder.bytes(data) + 2;\n },\n write(view, offset, data) {\n const startOffset = offset;\n offset = encoder.write(view, offset + 2, data);\n view.setUint16(startOffset, offset - startOffset - 2);\n return offset;\n },\n read(view, position) {\n const { offset, length } = position;\n const rdlength = (position.length = view.getUint16(position.offset));\n position.offset += 2;\n const data = encoder.read(view, position);\n // Restore original position and advance by specified size after\n position.offset = offset + 2 + rdlength;\n position.length = length;\n return data;\n },\n});\n\nexport const array = <T>(encoder: Encoder<T>): Encoder<T[]> => ({\n bytes(data) {\n let byteLength = 0;\n for (let idx = 0; data != null && idx < data.length; idx++)\n byteLength += encoder.bytes(data[idx]);\n return byteLength;\n },\n write(view, offset, data) {\n for (let idx = 0; data != null && idx < data.length; idx++)\n offset = encoder.write(view, offset, data[idx]);\n return offset;\n },\n read(view, position) {\n const { offset, length } = position;\n const data: T[] = [];\n while (position.offset - offset < length)\n data.push(encoder.read(view, position));\n return data;\n },\n});\n\nexport const advance = (position: ReadPosition, bytes: number) => {\n position.offset += bytes | 0;\n position.length -= bytes | 0;\n position.length &= ~(position.length >> 31);\n};\n\nexport const encodeIntoBuffer = <T>(\n encoder: Encoder<T>,\n input: T\n): Uint8Array => {\n const buffer = new ArrayBuffer(encoder.bytes(input));\n const endOffset = encoder.write(new DataView(buffer), 0, input);\n return new Uint8Array(buffer, 0, endOffset);\n};\n\nexport const sliceView = (\n view: DataView,\n position: ReadPosition,\n length = position.length\n) => {\n const slice = new Uint8Array(\n view.buffer,\n view.byteOffset + position.offset,\n length\n );\n advance(position, length);\n return slice;\n};\n","import { RecordClass, RecordType } from './constants';\nimport { Encoder, name, advance } from './encoders';\n\nexport interface Question {\n name: string;\n type: RecordType;\n class?: RecordClass;\n qu?: boolean;\n}\n\nconst QU_BIT = 1 << 15;\n\nexport const question: Encoder<Question> = {\n bytes(question) {\n return name.bytes(question.name) + 4;\n },\n write(view, offset, question) {\n let _class = question.class || RecordClass.IN;\n if (question.qu) _class |= QU_BIT;\n offset = name.write(view, offset, question.name);\n view.setUint16(offset, question.type);\n view.setUint16(offset + 2, _class);\n offset += 4;\n return offset;\n },\n read(view, position) {\n const _name = name.read(view, position);\n const type = view.getUint16(position.offset);\n let _class = view.getUint16(position.offset + 2) || RecordClass.ANY;\n let qu = false;\n if (_class !== RecordClass.ANY && _class & QU_BIT) {\n _class &= ~QU_BIT;\n qu = true;\n }\n advance(position, 4);\n return {\n name: _name,\n type,\n class: _class,\n qu,\n };\n },\n};\n","import { OptCode } from './constants';\nimport {\n type Encoder,\n withRDLength,\n encodeIntoBuffer,\n advance,\n bytes,\n ipv4,\n ipv6,\n} from './encoders';\n\nexport const enum IPType {\n v4 = 1,\n v6 = 2,\n}\n\nexport interface BaseOpt {\n code: number;\n}\n\nexport interface ClientSubnetOpt extends BaseOpt {\n code: OptCode.CLIENT_SUBNET;\n family?: IPType | (number & {});\n sourcePrefixLength?: number;\n scopePrefixLength?: number;\n ip: string;\n}\n\nexport interface KeepAliveOpt extends BaseOpt {\n code: OptCode.TCP_KEEPALIVE;\n timeout?: number;\n}\n\nexport interface PaddingOpt extends BaseOpt {\n code: OptCode.PADDING;\n length?: number;\n}\n\nexport interface TagOpt extends BaseOpt {\n code: OptCode.KEY_TAG;\n tags: number[];\n}\n\nexport interface UnknownOpt extends BaseOpt {\n data: Uint8Array;\n}\n\nexport type PacketOpt =\n | ClientSubnetOpt\n | KeepAliveOpt\n | PaddingOpt\n | TagOpt\n | UnknownOpt;\n\nexport const unknownOpt: Encoder<UnknownOpt> = withRDLength({\n bytes(option) {\n return bytes.bytes(option.data);\n },\n write(view, offset, option) {\n return bytes.write(view, offset, option.data);\n },\n read(view, position) {\n return {\n code: OptCode.OPTION_0,\n data: bytes.read(view, position),\n };\n },\n});\n\n// See: https://github.com/nodejs/node/blob/842448b/lib/internal/net.js#L15-L18\nconst v4Seg = '(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])';\nconst v4Str = `(?:${v4Seg}\\\\.){3}${v4Seg}`;\nconst ipv4Re = new RegExp(`^${v4Str}$`);\n\nconst isIPv4 = (ip: string) => ipv4Re.test(ip);\n\nexport const clientSubnetOpt: Encoder<ClientSubnetOpt> = withRDLength({\n bytes(option) {\n const sourcePrefixLength = option.sourcePrefixLength || 0;\n return Math.ceil(sourcePrefixLength / 8) + 4;\n },\n write(view, offset, option) {\n const sourcePrefixLength = option.sourcePrefixLength || 0;\n const scopePrefixLength = option.scopePrefixLength || 0;\n const family = option.family || (isIPv4(option.ip) ? IPType.v4 : IPType.v6);\n const maskLength = Math.ceil(sourcePrefixLength / 8);\n view.setUint16(offset, family);\n view.setUint8(offset + 2, sourcePrefixLength);\n view.setUint8(offset + 3, scopePrefixLength);\n offset += 4;\n const ipBuffer = encodeIntoBuffer(\n family === IPType.v4 ? ipv4 : ipv6,\n option.ip\n );\n for (let byteIdx = 0; byteIdx < maskLength; byteIdx++)\n view.setUint8(offset++, ipBuffer[byteIdx]);\n return offset;\n },\n read(view, position) {\n const family = view.getUint16(position.offset);\n const sourcePrefixLength = view.getUint8(position.offset + 2);\n const scopePrefixLength = view.getUint8(position.offset + 3);\n advance(position, 4);\n return {\n code: OptCode.CLIENT_SUBNET,\n family,\n sourcePrefixLength,\n scopePrefixLength,\n ip:\n family === IPType.v4\n ? ipv4.read(view, position)\n : ipv6.read(view, position),\n };\n },\n});\n\nexport const keepAliveOpt: Encoder<KeepAliveOpt> = withRDLength({\n bytes(option) {\n return option.timeout ? 2 : 0;\n },\n write(view, offset, option) {\n if (option.timeout) {\n view.setUint16(offset, option.timeout);\n offset += 2;\n }\n return offset;\n },\n read(view, position) {\n if (position.length) {\n const timeout = view.getUint16(position.offset);\n advance(position, 2);\n return { code: OptCode.TCP_KEEPALIVE, timeout };\n } else {\n return { code: OptCode.TCP_KEEPALIVE, timeout: undefined };\n }\n },\n});\n\nexport const paddingOpt: Encoder<PaddingOpt> = withRDLength({\n bytes(option) {\n return option.length || 0;\n },\n write(_view, offset, option) {\n return offset + (option.length || 0);\n },\n read(_view, position) {\n const { length } = position;\n advance(position, length);\n return { code: OptCode.PADDING, length };\n },\n});\n\nexport const tagOpt: Encoder<TagOpt> = withRDLength({\n bytes(option) {\n return option.tags.length * 2;\n },\n write(view, offset, option) {\n for (let idx = 0; idx < option.tags.length; idx++) {\n view.setUint16(offset, option.tags[idx]);\n offset += 2;\n }\n return offset;\n },\n read(view, position) {\n const { offset, length } = position;\n const tags: number[] = [];\n while (position.offset - offset < length) {\n tags.push(view.getUint16(position.offset));\n advance(position, 2);\n }\n return {\n code: OptCode.KEY_TAG,\n tags,\n };\n },\n});\n\nconst isUnknownOpt = (option: PacketOpt): option is UnknownOpt =>\n !!(option as UnknownOpt).data;\n\nexport const option: Encoder<PacketOpt> = {\n bytes(option) {\n if (isUnknownOpt(option)) {\n return unknownOpt.bytes(option) + 2;\n }\n switch (option.code) {\n case OptCode.CLIENT_SUBNET:\n return clientSubnetOpt.bytes(option) + 2;\n case OptCode.TCP_KEEPALIVE:\n return keepAliveOpt.bytes(option) + 2;\n case OptCode.PADDING:\n return paddingOpt.bytes(option) + 2;\n case OptCode.KEY_TAG:\n return tagOpt.bytes(option) + 2;\n }\n },\n write(view, offset, option) {\n view.setUint16(offset, option.code);\n offset += 2;\n if (isUnknownOpt(option)) {\n return unknownOpt.write(view, offset, option);\n }\n switch (option.code) {\n case OptCode.CLIENT_SUBNET:\n return clientSubnetOpt.write(view, offset, option);\n case OptCode.TCP_KEEPALIVE:\n return keepAliveOpt.write(view, offset, option);\n case OptCode.PADDING:\n return paddingOpt.write(view, offset, option);\n case OptCode.KEY_TAG:\n return tagOpt.write(view, offset, option);\n }\n },\n read(view, position) {\n const code = view.getUint16(position.offset);\n advance(position, 2);\n switch (code) {\n case OptCode.CLIENT_SUBNET:\n return clientSubnetOpt.read(view, position);\n case OptCode.TCP_KEEPALIVE:\n return keepAliveOpt.read(view, position);\n case OptCode.PADDING:\n return paddingOpt.read(view, position);\n case OptCode.KEY_TAG:\n return tagOpt.read(view, position);\n default:\n const opt = unknownOpt.read(view, position);\n opt.code = code;\n return opt;\n }\n },\n};\n","import {\n type Encoder,\n withRDLength,\n array,\n textDecoder,\n advance,\n uint16,\n bytes,\n ipv4,\n ipv6,\n string,\n} from './encoders';\n\nexport const enum SvcParamCode {\n Mandatory = 0,\n Alpn = 1,\n NoDefaultAlpn = 2,\n Port = 3,\n Ipv4Hint = 4,\n EchConfig = 5,\n Ipv6Hint = 6,\n DohPath = 7,\n Odoh = 32769,\n}\n\nexport interface SvcParams {\n mandatory?: (SvcParamCode | (number & {}))[];\n alpn?: string[];\n 'no-default-alpn'?: boolean;\n port?: number;\n ipv4hint?: string[];\n ipv6hint?: string[];\n echconfig?: Uint8Array;\n dohpath?: string;\n odoh?: Uint8Array;\n}\n\nconst mandatorySvcParam: Encoder<(SvcParamCode | (number & {}))[]> =\n withRDLength(array(uint16));\nconst alpnSvcParam = withRDLength(array(string));\nconst portSvcParam = withRDLength(uint16);\nconst ipv4HintSvcParam = withRDLength(array(ipv4));\nconst ipv6HintSvcParam = withRDLength(array(ipv6));\nconst bytesSvcParam = withRDLength(bytes);\n\nexport const svcParams: Encoder<SvcParams> = {\n bytes(params) {\n let byteLength = 0;\n if (params.mandatory != null)\n byteLength += mandatorySvcParam.bytes(params.mandatory) + 2;\n if (params.alpn != null) byteLength += alpnSvcParam.bytes(params.alpn) + 2;\n if (params['no-default-alpn']) byteLength += 4;\n if (params.port != null) byteLength += portSvcParam.bytes(params.port) + 2;\n if (params.ipv4hint)\n byteLength += ipv4HintSvcParam.bytes(params.ipv4hint) + 2;\n if (params.ipv6hint)\n byteLength += ipv6HintSvcParam.bytes(params.ipv6hint) + 2;\n if (params.echconfig)\n byteLength += bytesSvcParam.bytes(params.echconfig) + 2;\n if (params.dohpath) byteLength += bytesSvcParam.bytes(params.dohpath) + 2;\n if (params.odoh) byteLength += bytesSvcParam.bytes(params.odoh) + 2;\n return byteLength;\n },\n write(view, offset, params) {\n if (params.mandatory != null) {\n view.setUint16(offset, SvcParamCode.Mandatory);\n offset = mandatorySvcParam.write(view, offset + 2, params.mandatory);\n }\n if (params.alpn != null) {\n view.setUint16(offset, SvcParamCode.Alpn);\n offset = alpnSvcParam.write(view, offset + 2, params.alpn);\n }\n if (params['no-default-alpn']) {\n view.setUint16(offset, SvcParamCode.NoDefaultAlpn);\n view.setUint16(offset + 2, 0);\n offset += 4;\n }\n if (params.port != null) {\n view.setUint16(offset, SvcParamCode.Port);\n offset = portSvcParam.write(view, offset + 2, params.port);\n }\n if (params.ipv4hint) {\n view.setUint16(offset, SvcParamCode.Ipv4Hint);\n offset = ipv4HintSvcParam.write(view, offset + 2, params.ipv4hint);\n }\n if (params.ipv6hint) {\n view.setUint16(offset, SvcParamCode.Ipv6Hint);\n offset = ipv6HintSvcParam.write(view, offset + 2, params.ipv6hint);\n }\n if (params.echconfig) {\n view.setUint16(offset, SvcParamCode.EchConfig);\n offset = bytesSvcParam.write(view, offset + 2, params.echconfig);\n }\n if (params.dohpath) {\n view.setUint16(offset, SvcParamCode.DohPath);\n offset = bytesSvcParam.write(view, offset + 2, params.dohpath);\n }\n if (params.odoh) {\n view.setUint16(offset, SvcParamCode.Odoh);\n offset = bytesSvcParam.write(view, offset + 2, params.odoh);\n }\n return offset;\n },\n read(view, position) {\n const { length, offset } = position;\n const params: SvcParams = {\n mandatory: undefined,\n alpn: undefined,\n 'no-default-alpn': false,\n port: undefined,\n ipv4hint: undefined,\n ipv6hint: undefined,\n echconfig: undefined,\n dohpath: undefined,\n odoh: undefined,\n };\n while (position.offset - offset < length) {\n const code = view.getUint16(position.offset) as\n | SvcParamCode\n | (number & {});\n advance(position, 2);\n switch (code) {\n case SvcParamCode.Mandatory:\n params.mandatory = mandatorySvcParam.read(view, position);\n break;\n case SvcParamCode.Alpn:\n params.alpn = alpnSvcParam.read(view, position);\n break;\n case SvcParamCode.NoDefaultAlpn:\n params['no-default-alpn'] = true;\n advance(position, 2);\n break;\n case SvcParamCode.Port:\n params.port = portSvcParam.read(view, position);\n break;\n case SvcParamCode.Ipv4Hint:\n params.ipv4hint = ipv4HintSvcParam.read(view, position);\n break;\n case SvcParamCode.Ipv6Hint:\n params.ipv6hint = ipv6HintSvcParam.read(view, position);\n break;\n case SvcParamCode.EchConfig:\n params.echconfig = bytesSvcParam.read(view, position);\n break;\n case SvcParamCode.DohPath:\n params.dohpath = textDecoder.decode(\n bytesSvcParam.read(view, position)\n );\n break;\n case SvcParamCode.Odoh:\n params.odoh = bytesSvcParam.read(view, position);\n break;\n default:\n // NOTE: We discard other parameters using the required RDLENGTH field\n bytesSvcParam.read(view, position);\n }\n }\n return params;\n },\n};\n","import { RecordClass, RecordType } from './constants';\nimport { Encoder, advance, octets } from './encoders';\nimport { option, PacketOpt } from './options';\nimport { svcParams, SvcParams } from './svcparams';\nimport {\n withRDLength,\n typeBitmap,\n string,\n bytes,\n name,\n ipv4,\n ipv6,\n array,\n} from './encoders';\n\nexport interface BaseAnswer {\n type: RecordType;\n name: string;\n ttl?: number;\n class?: RecordClass;\n flush?: boolean;\n}\n\nconst answerBytes = withRDLength(bytes);\n\nexport interface NsAnswer extends BaseAnswer {\n type: RecordType.NS;\n data: string;\n}\n\nconst answerName = withRDLength(name);\n\nexport interface AAnswer extends BaseAnswer {\n type: RecordType.A;\n data: string;\n}\n\nconst answerIPv4 = withRDLength(ipv4);\n\nexport interface AAAAAnswer extends BaseAnswer {\n type: RecordType.AAAA;\n data: string;\n}\n\nconst answerIPv6 = withRDLength(ipv6);\n\nexport interface TxtAnswer extends BaseAnswer {\n type: RecordType.TXT;\n data: string[];\n}\n\nexport const answerTxt: Encoder<string[]> = withRDLength(array(string));\n\nexport interface SrvData {\n priority?: number;\n weight?: number;\n port: number;\n target: string;\n}\n\nexport interface SrvAnswer extends BaseAnswer {\n type: RecordType.SRV;\n data: SrvData;\n}\n\nexport const answerSrv: Encoder<SrvData> = withRDLength({\n bytes(data) {\n return name.bytes(data.target) + 6;\n },\n write(view, offset, data) {\n view.setUint16(offset, data.priority || 0);\n view.setUint16(offset + 2, data.weight || 0);\n view.setUint16(offset + 4, data.port || 0);\n return name.write(view, offset + 6, data.target);\n },\n read(view, position) {\n const data: SrvData = { priority: 0, weight: 0, port: 0, target: '' };\n data.priority = view.getUint16(position.offset);\n data.weight = view.getUint16(position.offset + 2);\n data.port = view.getUint16(position.offset + 4);\n advance(position, 6);\n data.target = name.read(view, position);\n return data;\n },\n});\n\nexport interface HInfoData {\n cpu: string;\n os: string;\n}\n\nexport interface HInfoAnswer extends BaseAnswer {\n type: RecordType.HINFO;\n data: HInfoData;\n}\n\nexport const answerHInfo: Encoder<HInfoData> = withRDLength({\n bytes(data) {\n return string.bytes(data.cpu) + string.bytes(data.os);\n },\n write(view, offset, data) {\n offset = string.write(view, offset, data.cpu);\n offset = string.write(view, offset, data.os);\n return offset;\n },\n read(view, position) {\n return {\n cpu: string.read(view, position),\n os: string.read(view, position),\n };\n },\n});\n\nexport interface CaaData {\n flags?: number;\n tag: 'issue' | 'issuewild' | 'iodef';\n value: Uint8Array;\n issuerCritical?: boolean;\n}\n\nexport interface CaaAnswer extends BaseAnswer {\n type: RecordType.CAA;\n data: CaaData;\n}\n\nconst ISSUER_CRITICAL = 1 << 7;\n\nconst toCaaTag = (input: string) => {\n switch (input) {\n case 'issue':\n case 'issuewild':\n case 'iodef':\n return input;\n default:\n return 'issue';\n }\n};\n\nexport const answerCaa: Encoder<CaaData> = withRDLength({\n bytes(data) {\n return string.bytes(data.tag) + bytes.bytes(data.value) + 1;\n },\n write(view, offset, data) {\n let flags = data.flags || 0;\n if (data.issuerCritical) flags |= ISSUER_CRITICAL;\n view.setUint8(offset, flags);\n offset = string.write(view, offset + 1, data.tag);\n offset = bytes.write(view, offset, data.value);\n return offset;\n },\n read(view, position) {\n const flags = view.getUint8(position.offset);\n advance(position, 1);\n return {\n flags,\n tag: toCaaTag(string.read(view, position)),\n value: bytes.read(view, position),\n issuerCritical: !!(flags & ISSUER_CRITICAL),\n };\n },\n});\n\nexport interface SoaData {\n mname: string;\n rname: string;\n serial?: number;\n refresh?: number;\n retry?: number;\n expire?: number;\n minimum?: number;\n}\n\nexport interface SoaAnswer extends BaseAnswer {\n type: RecordType.SOA;\n data: SoaData;\n}\n\nexport const answerSoa: Encoder<SoaData> = withRDLength({\n bytes(data) {\n return name.bytes(data.mname) + name.bytes(data.rname) + 20;\n },\n write(view, offset, data) {\n offset = name.write(view, offset, data.mname);\n offset = name.write(view, offset, data.rname);\n view.setUint32(offset, data.serial || 0);\n view.setUint32(offset + 4, data.refresh || 0);\n view.setUint32(offset + 8, data.retry || 0);\n view.setUint32(offset + 12, data.expire || 0);\n view.setUint32(offset + 16, data.minimum || 0);\n return offset + 20;\n },\n read(view, position) {\n const data: SoaData = {\n mname: name.read(view, position),\n rname: name.read(view, position),\n serial: view.getUint32(position.offset),\n refresh: view.getUint32(position.offset + 4),\n retry: view.getUint32(position.offset + 8),\n expire: view.getUint32(position.offset + 12),\n minimum: view.getUint32(position.offset + 16),\n };\n position.offset += 20;\n position.length -= 20;\n return data;\n },\n});\n\nexport interface MxData {\n preference?: number;\n exchange: string;\n}\n\nexport interface MxAnswer extends BaseAnswer {\n type: RecordType.MX;\n data: MxData;\n}\n\nexport const answerMx: Encoder<MxData> = withRDLength({\n bytes(data) {\n return name.bytes(data.exchange) + 2;\n },\n write(view, offset, data) {\n view.setUint16(offset, data.preference || 0);\n return name.write(view, offset + 2, data.exchange);\n },\n read(view, position) {\n const data: MxData = {\n preference: view.getUint16(position.offset),\n exchange: '',\n };\n advance(position, 2);\n data.exchange = name.read(view, position);\n return data;\n },\n});\n\nexport interface DnskeyData {\n flags: number;\n algorithm: number;\n key: Uint8Array;\n}\n\nexport interface DnskeyAnswer extends BaseAnswer {\n type: RecordType.DNSKEY;\n data: DnskeyData;\n}\n\nexport const answerDnskey: Encoder<DnskeyData> = withRDLength({\n bytes(data) {\n return bytes.bytes(data.key) + 4;\n },\n write(view, offset, data) {\n const PROTOCOL_DNSSEC = 3;\n view.setUint16(offset, data.flags);\n view.setUint8(offset + 2, PROTOCOL_DNSSEC);\n view.setUint8(offset + 3, data.algorithm);\n return bytes.write(view, offset + 4, data.key);\n },\n read(view, position) {\n const flags = view.getUint16(position.offset);\n const algorithm = view.getUint8(position.offset + 3);\n advance(position, 4);\n return {\n flags,\n algorithm,\n key: bytes.read(view, position),\n };\n },\n});\n\nexport interface RrsigData {\n typeCovered: RecordType;\n algorithm: number;\n labels: number;\n originalTTL: number;\n expiration: number;\n inception: number;\n keyTag: number;\n signersName: string;\n signature: Uint8Array;\n}\n\nexport interface RrsigAnswer extends BaseAnswer {\n type: RecordType.RRSIG;\n data: RrsigData;\n}\n\nexport const answerRrsig: Encoder<RrsigData> = withRDLength({\n bytes(data) {\n return 18 + name.bytes(data.signersName) + bytes.bytes(data.signature);\n },\n write(view, offset, data) {\n view.setUint16(offset, data.typeCovered);\n view.setUint8(offset + 2, data.algorithm);\n view.setUint8(offset + 3, data.labels);\n view.setUint32(offset + 4, data.originalTTL);\n view.setUint32(offset + 8, data.expiration);\n view.setUint32(offset + 12, data.inception);\n view.setUint16(offset + 16, data.keyTag);\n offset = name.write(view, offset + 18, data.signersName);\n offset = bytes.write(view, offset, data.signature);\n return offset;\n },\n read(view, position) {\n const typeCovered = view.getUint16(position.offset);\n const algorithm = view.getUint8(position.offset + 2);\n const labels = view.getUint8(position.offset + 3);\n const originalTTL = view.getUint32(position.offset + 4);\n const expiration = view.getUint32(position.offset + 8);\n const inception = view.getUint32(position.offset + 12);\n const keyTag = view.getUint16(position.offset + 16);\n advance(position, 18);\n return {\n typeCovered,\n algorithm,\n labels,\n originalTTL,\n expiration,\n inception,\n keyTag,\n signersName: name.read(view, position),\n signature: bytes.read(view, position),\n };\n },\n});\n\nexport interface RpData {\n mbox: string;\n txt: string;\n}\n\nexport interface RpAnswer extends BaseAnswer {\n type: RecordType.RP;\n data: RpData;\n}\n\nexport const answerRp: Encoder<RpData> = withRDLength({\n bytes(data) {\n return name.bytes(data.mbox) + name.bytes(data.txt);\n },\n write(view, offset, data) {\n offset = name.write(view, offset, data.mbox);\n offset = name.write(view, offset, data.txt);\n return offset;\n },\n read(view, position) {\n return {\n mbox: name.read(view, position),\n txt: name.read(view, position),\n };\n },\n});\n\nexport interface NsecData {\n nextDomain: string;\n rrtypes: RecordType[];\n}\n\nexport interface NsecAnswer extends BaseAnswer {\n type: RecordType.NSEC;\n data: NsecData;\n}\n\nexport const answerNsec: Encoder<NsecData> = withRDLength({\n bytes(data) {\n return name.bytes(data.nextDomain) + typeBitmap.bytes(data.rrtypes);\n },\n write(view, offset, data) {\n offset = name.write(view, offset, data.nextDomain);\n offset = typeBitmap.write(view, offset, data.rrtypes);\n return offset;\n },\n read(view, position) {\n return {\n nextDomain: name.read(view, position),\n rrtypes: typeBitmap.read(view, position),\n };\n },\n});\n\nexport interface Nsec3Data {\n algorithm: number;\n flags: number;\n iterations: number;\n salt: Uint8Array;\n nextDomain: Uint8Array;\n rrtypes: RecordType[];\n}\n\nexport interface Nsec3Answer extends BaseAnswer {\n type: RecordType.NSEC3;\n data: Nsec3Data;\n}\n\nexport const answerNsec3: Encoder<Nsec3Data> = withRDLength({\n bytes(data) {\n return (\n octets.bytes(data.salt) +\n octets.bytes(data.nextDomain) +\n typeBitmap.bytes(data.rrtypes) +\n 4\n );\n },\n write(view, offset, data) {\n view.setUint8(offset, data.algorithm);\n view.setUint8(offset + 1, data.flags);\n view.setUint16(offset + 2, data.iterations);\n offset = octets.write(view, offset + 4, data.salt);\n offset = octets.write(view, offset, data.nextDomain);\n offset = typeBitmap.write(view, offset, data.rrtypes);\n return offset;\n },\n read(view, position) {\n const algorithm = view.getUint8(position.offset);\n const flags = view.getUint8(position.offset + 1);\n const iterations = view.getUint16(position.offset + 2);\n advance(position, 4);\n return {\n algorithm,\n flags,\n iterations,\n salt: octets.read(view, position),\n nextDomain: octets.read(view, position),\n rrtypes: typeBitmap.read(view, position),\n };\n },\n});\n\nexport interface SshfpData {\n algorithm: number;\n hash: number;\n fingerprint: Uint8Array;\n}\n\nexport interface SshfpAnswer extends BaseAnswer {\n type: RecordType.SSHFP;\n data: SshfpData;\n}\n\nexport const answerSshfp: Encoder<SshfpData> = withRDLength({\n bytes(data) {\n return bytes.bytes(data.fingerprint) + 2;\n },\n write(view, offset, data) {\n view.setUint8(offset, data.algorithm);\n view.setUint8(offset + 1, data.hash);\n return bytes.write(view, offset + 2, data.fingerprint);\n },\n read(view, position) {\n const algorithm = view.getUint8(position.offset);\n const hash = view.getUint8(position.offset + 1);\n advance(position, 2);\n return {\n algorithm,\n hash,\n fingerprint: bytes.read(view, position),\n };\n },\n});\n\nexport interface DsData {\n keyTag: number;\n algorithm: number;\n digestType: number;\n digest: Uint8Array;\n}\n\nexport interface DsAnswer extends BaseAnswer {\n type: RecordType.DS;\n data: DsData;\n}\n\nexport const answerDs: Encoder<DsData> = withRDLength({\n bytes(data) {\n return bytes.bytes(data.digest) + 4;\n },\n write(view, offset, data) {\n view.setUint16(offset, data.keyTag);\n view.setUint8(offset + 2, data.algorithm);\n view.setUint8(offset + 3, data.digestType);\n offset = bytes.write(view, offset + 4, data.digest);\n return offset;\n },\n read(view, position) {\n const keyTag = view.getUint16(position.offset);\n const algorithm = view.getUint8(position.offset + 2);\n const digestType = view.getUint8(position.offset + 3);\n advance(position, 4);\n return {\n keyTag,\n algorithm,\n digestType,\n digest: bytes.read(view, position),\n };\n },\n});\n\nexport interface NaptrData {\n order: number;\n preference: number;\n flags: string;\n services: string;\n regexp: string;\n replacement: string;\n}\n\nexport interface NaptrAnswer extends BaseAnswer {\n type: RecordType.NAPTR;\n data: NaptrData;\n}\n\nexport const answerNaptr: Encoder<NaptrData> = withRDLength({\n bytes(data) {\n return (\n string.bytes(data.flags) +\n string.bytes(data.services) +\n string.bytes(data.regexp) +\n name.bytes(data.replacement) +\n 4\n );\n },\n write(view, offset, data) {\n view.setUint16(offset, data.order);\n view.setUint16(offset + 2, data.preference);\n offset = string.write(view, offset + 4, data.flags);\n offset = string.write(view, offset, data.services);\n offset = string.write(view, offset, data.regexp);\n offset = name.write(view, offset, data.replacement);\n return offset;\n },\n read(view, position) {\n const order = view.getUint16(position.offset);\n const preference = view.getUint16(position.offset + 2);\n advance(position, 4);\n return {\n order,\n preference,\n flags: string.read(view, position),\n services: string.read(view, position),\n regexp: string.read(view, position),\n replacement: name.read(view, position),\n };\n },\n});\n\nexport interface TlsaData {\n usage: number;\n selector: number;\n matchingType: number;\n certificate: Uint8Array;\n}\n\nexport interface TlsaAnswer extends BaseAnswer {\n type: RecordType.TLSA;\n data: TlsaData;\n}\n\nexport const answerTlsa: Encoder<TlsaData> = withRDLength({\n bytes(data) {\n return bytes.bytes(data.certificate) + 3;\n },\n write(view, offset, data) {\n view.setUint8(offset, data.usage);\n view.setUint8(offset + 1, data.selector);\n view.setUint8(offset + 2, data.matchingType);\n return bytes.write(view, offset + 3, data.certificate);\n },\n read(view, position) {\n const usage = view.getUint8(position.offset);\n const selector = view.getUint8(position.offset + 1);\n const matchingType = view.getUint8(position.offset + 2);\n advance(position, 3);\n return {\n usage,\n selector,\n matchingType,\n certificate: bytes.read(view, position),\n };\n },\n});\n\nexport interface SvcbData {\n name: string;\n priority?: number;\n params: SvcParams;\n}\n\nexport interface SvcbAnswer extends BaseAnswer {\n type: RecordType.SVCB;\n data: SvcbData;\n}\n\nexport interface HttpsAnswer extends BaseAnswer {\n type: RecordType.HTTPS;\n data: SvcbData;\n}\n\nexport const answerSvcb: Encoder<SvcbData> = withRDLength({\n bytes(data) {\n return name.bytes(data.name) + svcParams.bytes(data.params) + 2;\n },\n write(view, offset, data) {\n view.setUint16(offset, data.priority || 0);\n offset = name.write(view, offset + 2, data.name);\n offset = svcParams.write(view, offset, data.params);\n return offset;\n },\n read(view, position) {\n const priority = view.getUint16(position.offset);\n advance(position, 2);\n return {\n name: name.read(view, position),\n priority,\n params: svcParams.read(view, position),\n };\n },\n});\n\nexport interface OptAnswer {\n type: RecordType.OPT;\n name?: '.';\n udpPayloadSize: number;\n extendedRcode: number;\n ednsVersion: number;\n flags: number;\n data: PacketOpt[];\n}\n\nexport const answerOpt: Encoder<PacketOpt[]> = withRDLength(array(option));\n\nexport interface PtrAnswer extends BaseAnswer {\n type: RecordType.PTR;\n data: string;\n}\n\nexport interface CnameAnswer extends BaseAnswer {\n type: RecordType.CNAME;\n data: string;\n}\n\nexport interface DnameAnswer extends BaseAnswer {\n type: RecordType.DNAME;\n data: string;\n}\n\nexport interface NullAnswer extends BaseAnswer {\n type: RecordType.NULL;\n data: Uint8Array | string;\n}\n\nexport interface UnknownAnswer extends BaseAnswer {\n type:\n | RecordType.AFSDB\n | RecordType.APL\n | RecordType.AXFR\n | RecordType.CDNSKEY\n | RecordType.CDS\n | RecordType.CERT\n | RecordType.DHCID\n | RecordType.DLV\n | RecordType.HIP\n | RecordType.IPSECKEY\n | RecordType.IXFR\n | RecordType.KEY\n | RecordType.KX\n | RecordType.LOC\n | RecordType.NSEC3PARAM\n | RecordType.NULL\n | RecordType.SIG\n | RecordType.TA\n | RecordType.TKEY\n | RecordType.TSIG;\n data: Uint8Array | string;\n}\n\nexport type Answer =\n | AAnswer\n | AAAAAnswer\n | TxtAnswer\n | SrvAnswer\n | HInfoAnswer\n | CaaAnswer\n | NsAnswer\n | SoaAnswer\n | MxAnswer\n | OptAnswer\n | DnskeyAnswer\n | RrsigAnswer\n | RpAnswer\n | NsecAnswer\n | Nsec3Answer\n | SshfpAnswer\n | DsAnswer\n | NaptrAnswer\n | TlsaAnswer\n | PtrAnswer\n | CnameAnswer\n | DnameAnswer\n | SvcbAnswer\n | HttpsAnswer\n | NullAnswer\n | UnknownAnswer;\n\nconst FLUSH_MASK = 1 << 15;\n\nexport const answer: Encoder<Answer> = {\n bytes(answer) {\n const byteLength =\n 8 + name.bytes(answer.type === RecordType.OPT ? '.' : answer.name);\n switch (answer.type) {\n case RecordType.A:\n return byteLength + answerIPv4.bytes(answer.data);\n case RecordType.NS:\n return byteLength + answerName.bytes(answer.data);\n case RecordType.SOA:\n return byteLength + answerSoa.bytes(answer.data);\n case RecordType.HINFO:\n return byteLength + answerHInfo.bytes(answer.data);\n case RecordType.MX:\n return byteLength + answerMx.bytes(answer.data);\n case RecordType.TXT:\n return byteLength + answerTxt.bytes(answer.data);\n case RecordType.RP:\n return byteLength + answerRp.bytes(answer.data);\n case RecordType.AAAA:\n return byteLength + answerIPv6.bytes(answer.data);\n case RecordType.SRV:\n return byteLength + answerSrv.bytes(answer.data);\n case RecordType.NAPTR:\n return byteLength + answerNaptr.bytes(answer.data);\n case RecordType.OPT:\n return byteLength + answerOpt.bytes(answer.data);\n case RecordType.DS:\n return byteLength + answerDs.bytes(answer.data);\n case RecordType.SSHFP:\n return byteLength + answerSshfp.bytes(answer.data);\n case RecordType.RRSIG:\n return byteLength + answerRrsig.bytes(answer.data);\n case RecordType.NSEC:\n return byteLength + answerNsec.bytes(answer.data);\n case RecordType.DNSKEY:\n return byteLength + answerDnskey.bytes(answer.data);\n case RecordType.NSEC3:\n return byteLength + answerNsec3.bytes(answer.data);\n case RecordType.TLSA:\n return byteLength + answerTlsa.bytes(answer.data);\n case RecordType.SVCB:\n case RecordType.HTTPS:\n return byteLength + answerSvcb.bytes(answer.data);\n case RecordType.CAA:\n return byteLength + answerCaa.bytes(answer.data);\n case RecordType.PTR:\n case RecordType.CNAME:\n case RecordType.DNAME:\n return byteLength + answerName.bytes(answer.data);\n default:\n return byteLength + answerBytes.bytes(answer.data);\n }\n },\n write(view, offset, answer) {\n if (answer.type === RecordType.OPT) {\n offset = name.write(view, offset, '.');\n view.setUint16(offset, answer.type);\n view.setUint16(offset + 2, answer.udpPayloadSize || 4_096);\n view.setUint8(offset + 4, answer.extendedRcode || 0);\n view.setUint8(offset + 5, answer.ednsVersion || 0);\n view.setUint16(offset + 6, answer.flags || 0);\n offset += 8;\n return answerOpt.write(view, offset, answer.data);\n }\n offset = name.write(view, offset, answer.name);\n view.setUint16(offset, answer.type);\n view.setUint16(\n offset + 2,\n (answer.class || 0) | (answer.flush ? FLUSH_MASK : 0)\n );\n view.setUint32(offset + 4, answer.ttl || 0);\n offset += 8;\n switch (answer.type) {\n case RecordType.A:\n return answerIPv4.write(view, offset, answer.data);\n case RecordType.NS:\n return answerName.write(view, offset, answer.data);\n case RecordType.SOA:\n return answerSoa.write(view, offset, answer.data);\n case RecordType.HINFO:\n return answerHInfo.write(view, offset, answer.data);\n case RecordType.MX:\n return answerMx.write(view, offset, answer.data);\n case RecordType.TXT:\n return answerTxt.write(view, offset, answer.data);\n case RecordType.RP:\n return answerRp.write(view, offset, answer.data);\n case RecordType.AAAA:\n return answerIPv6.write(view, offset, answer.data);\n case RecordType.SRV:\n return answerSrv.write(view, offset, answer.data);\n case RecordType.NAPTR:\n return answerNaptr.write(view, offset, answer.data);\n case RecordType.DS:\n return answerDs.write(view, offset, answer.data);\n case RecordType.SSHFP:\n return answerSshfp.write(view, offset, answer.data);\n case RecordType.RRSIG:\n return answerRrsig.write(view, offset, answer.data);\n case RecordType.NSEC:\n return answerNsec.write(view, offset, answer.data);\n case RecordType.DNSKEY:\n return answerDnskey.write(view, offset, answer.data);\n case RecordType.NSEC3:\n return answerNsec3.write(view, offset, answer.data);\n case RecordType.TLSA:\n return answerTlsa.write(view, offset, answer.data);\n case RecordType.SVCB:\n case RecordType.HTTPS:\n return answerSvcb.write(view, offset, answer.data);\n case RecordType.CAA:\n return answerCaa.write(view, offset, answer.data);\n case RecordType.PTR:\n case RecordType.CNAME:\n case RecordType.DNAME:\n return answerName.write(view, offset, answer.data);\n default:\n return answerBytes.write(view, offset, answer.data);\n }\n },\n read(view, position) {\n const _name = name.read(view, position);\n const type = view.getUint16(position.offset);\n if (type === RecordType.OPT) {\n const udpPayloadSize = view.getUint16(position.offset + 2) || 4_096;\n const extendedRcode = view.getUint8(position.offset + 4);\n const ednsVersion = view.getUint8(position.offset + 5);\n const flags = view.getUint16(position.offset + 6);\n advance(position, 8);\n return {\n type,\n udpPayloadSize,\n extendedRcode,\n ednsVersion,\n flags,\n data: answerOpt.read(view, position),\n };\n }\n const _class = view.getUint16(position.offset + 2);\n const ttl = view.getUint32(position.offset + 4);\n advance(position, 8);\n const answer: Answer = {\n name: _name,\n type,\n class: _class & ~FLUSH_MASK,\n flush: !!(_class & FLUSH_MASK),\n ttl,\n data: null as any,\n };\n switch (answer.type) {\n case RecordType.A:\n answer.data = answerIPv4.read(view, position);\n return answer;\n case RecordType.NS:\n answer.data = answerName.read(view, position);\n return answer;\n case RecordType.SOA:\n answer.data = answerSoa.read(view, position);\n return answer;\n case RecordType.HINFO:\n answer.data = answerHInfo.read(view, position);\n return answer;\n case RecordType.MX:\n answer.data = answerMx.read(view, position);\n return answer;\n case RecordType.TXT:\n answer.data = answerTxt.read(view, position);\n return answer;\n case RecordType.RP:\n answer.data = answerRp.read(view, position);\n return answer;\n case RecordType.AAAA:\n answer.data = answerIPv6.read(view, position);\n return answer;\n case RecordType.SRV:\n answer.data = answerSrv.read(view, position);\n return answer;\n case RecordType.NAPTR:\n answer.data = answerNaptr.read(view, position);\n return answer;\n case RecordType.DS:\n answer.data = answerDs.read(view, position);\n return answer;\n case RecordType.SSHFP:\n answer.data = answerSshfp.read(view, position);\n return answer;\n case RecordType.RRSIG:\n answer.data = answerRrsig.read(view, position);\n return answer;\n case RecordType.NSEC:\n answer.data = answerNsec.read(view, position);\n return answer;\n case RecordType.DNSKEY:\n answer.data = answerDnskey.read(view, position);\n return answer;\n case RecordType.NSEC3:\n answer.data = answerNsec3.read(view, position);\n return answer;\n case RecordType.TLSA:\n answer.data = answerTlsa.read(view, position);\n return answer;\n case RecordType.SVCB:\n case RecordType.HTTPS:\n answer.data = answerSvcb.read(view, position);\n return answer;\n case RecordType.CAA:\n answer.data = answerCaa.read(view, position);\n return answer;\n case RecordType.PTR:\n case RecordType.CNAME:\n case RecordType.DNAME:\n answer.data = answerName.read(view, position);\n return answer;\n default:\n answer.data = answerBytes.read(view, position);\n return answer;\n }\n },\n};\n","import { type PacketFlag, PacketRType, PacketType } from './constants';\nimport { type Encoder, type ReadPosition, advance } from './encoders';\nimport { type Question, question } from './questions';\nimport { type Answer, answer } from './answers';\n\nconst readList = <T>(\n encoder: Encoder<T>,\n view: DataView,\n position: ReadPosition,\n limit: number\n): T[] | undefined => {\n if (!limit) {\n return undefined;\n }\n const { offset, length } = position;\n const data: T[] = [];\n for (let idx = 0; idx < limit && position.offset - offset < length; idx++)\n data.push(encoder.read(view, position));\n return data;\n};\n\nexport interface Packet {\n id?: number;\n type?: PacketType;\n rtype?: PacketRType;\n flags?: PacketFlag | (number & {});\n questions?: Question[];\n answers?: Answer[];\n additionals?: Answer[];\n authorities?: Answer[];\n}\n\nconst PACKET_FLAG_MASK = 32767;\n\nexport const packet: Encoder<Packet> = {\n bytes(packet) {\n const { questions, answers, authorities, additionals } = packet;\n let byteLength = 12;\n let idx = 0;\n for (idx = 0; questions && idx < questions.length; idx++)\n byteLength += question.bytes(questions[idx]);\n for (idx = 0; answers && idx < answers.length; idx++)\n byteLength += answer.bytes(answers[idx]);\n for (idx = 0; authorities && idx < authorities.length; idx++)\n byteLength += answer.bytes(authorities[idx]);\n for (idx = 0; additionals && idx < additionals.length; idx++)\n byteLength += answer.bytes(additionals[idx]);\n return byteLength;\n },\n write(view, offset, packet) {\n const { questions, answers, authorities, additionals } = packet;\n let flags =\n ((packet.flags || 0) & PACKET_FLAG_MASK) |\n (packet.type || PacketType.QUERY) |\n (packet.rtype || 0);\n view.setUint16(offset, packet.id || 0);\n view.setUint16(offset + 2, flags);\n view.setUint16(offset + 4, packet.questions?.length || 0);\n view.setUint16(offset + 6, packet.answers?.length || 0);\n view.setUint16(offset + 8, packet.authorities?.length || 0);\n view.setUint16(offset + 10, packet.additionals?.length || 0);\n offset += 12;\n let idx = 0;\n for (idx = 0; questions && idx < questions.length; idx++)\n offset = question.write(view, offset, questions[idx]);\n for (idx = 0; answers && idx < answers.length; idx++)\n offset = answer.write(view, offset, answers[idx]);\n for (idx = 0; authorities && idx < authorities.length; idx++)\n offset = answer.write(view, offset, authorities[idx]);\n for (idx = 0; additionals && idx < additionals.length; idx++)\n offset = answer.write(view, offset, additionals[idx]);\n return offset;\n },\n read(view, position) {\n const id = view.getUint16(position.offset);\n const flags = view.getUint16(position.offset + 2);\n const questionsLength = view.getUint16(position.offset + 4);\n const answersLength = view.getUint16(position.offset + 6);\n const authoritiesLength = view.getUint16(position.offset + 8);\n const additionalsLength = view.getUint16(position.offset + 10);\n advance(position, 12);\n return {\n id,\n flags,\n rtype: flags & 0xf,\n type:\n flags & PacketType.RESPONSE ? PacketType.RESPONSE : PacketType.QUERY,\n questions: readList(question, view, position, questionsLength),\n answers: readList(answer, view, position, answersLength),\n authorities: readList(answer, view, position, authoritiesLength),\n additionals: readList(answer, view, position, additionalsLength),\n };\n },\n};\n","import { type Packet, packet } from './packets';\n\nexport type {\n NsAnswer,\n AAnswer,\n AAAAAnswer,\n TxtAnswer,\n SrvAnswer,\n HInfoAnswer,\n CaaAnswer,\n SoaAnswer,\n MxAnswer,\n DnskeyAnswer,\n RrsigAnswer,\n RpAnswer,\n NsecAnswer,\n Nsec3Answer,\n SshfpAnswer,\n DsAnswer,\n NaptrAnswer,\n TlsaAnswer,\n PtrAnswer,\n CnameAnswer,\n DnameAnswer,\n NullAnswer,\n UnknownAnswer,\n Answer,\n} from './answers';\n\nexport type {\n IPType,\n ClientSubnetOpt,\n KeepAliveOpt,\n PaddingOpt,\n TagOpt,\n UnknownOpt,\n PacketOpt,\n} from './options';\nexport type { Packet } from './packets';\nexport type { Question } from './questions';\nexport * from './constants';\n\nexport function decode(bytes: ArrayBufferView | ArrayBufferLike): Packet {\n const view =\n 'buffer' in bytes\n ? new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength)\n : new DataView(bytes);\n return packet.read(view, { offset: 0, length: view.byteLength });\n}\n\nexport function streamDecode(bytes: ArrayBufferView | ArrayBufferLike): Packet {\n const view =\n 'buffer' in bytes\n ? new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength)\n : new DataView(bytes);\n const length = Math.min(view.byteLength - 2, view.getUint16(0));\n return packet.read(view, { offset: 2, length });\n}\n\nexport function encodingLength(input: Packet): number {\n return packet.bytes(input);\n}\n\nexport function encode(input: Packet): Uint8Array {\n const buffer = new ArrayBuffer(packet.bytes(input));\n const length = packet.write(new DataView(buffer), 0, input);\n return new Uint8Array(buffer, 0, length);\n}\n\nexport function streamEncode(input: Packet): Uint8Array {\n const buffer = new ArrayBuffer(packet.bytes(input) + 2);\n const view = new DataView(buffer);\n const length = packet.write(view, 2, input);\n view.setUint16(0, length - 2);\n return new Uint8Array(buffer, 0, length);\n}\n"],"names":["PacketType","RecordType","RecordClass","PacketFlag","OptCode","textEncoder","TextEncoder","textDecoder","TextDecoder","utf8ByteLength","Buffer","str","byteLength","length","i","code","charCodeAt","name","bytes","replace","RangeError","write","view","offset","encoded","encode","startIdx","endIdx","indexOf","byteIdx","idx","setUint8","read","outerPosition","labels","maxOffset","innerPosition","labelLength","getUint8","advance","label","sliceView","push","decode","jumpTo","getUint16","join","data","Uint8Array","buffer","byteOffset","set","position","octets","string","typeBitmap","types","extents","Math","max","ceil","typesByWindow","window","typelist","windowLength","bitmap","bit","ipv4","ip","split","octetIdx","parseInt","min","Array","fill","map","_","index","uint16","key","setUint16","ipv6","middleIdx","head","slice","tail","includes","pop","undefined","headIdx","pad","tailIdx","v4Parts","part","output","toString","withRDLength","encoder","startOffset","rdlength","array","QU_BIT","question","_class","class","IN","qu","type","_name","ANY","IPType","unknownOpt","option","OPTION_0","v4Seg","ipv4Re","RegExp","clientSubnetOpt","sourcePrefixLength","scopePrefixLength","family","test","v4","v6","maskLength","ipBuffer","encodeIntoBuffer","input","ArrayBuffer","endOffset","DataView","CLIENT_SUBNET","keepAliveOpt","timeout","TCP_KEEPALIVE","paddingOpt","_view","PADDING","tagOpt","tags","KEY_TAG","isUnknownOpt","opt","SvcParamCode","mandatorySvcParam","alpnSvcParam","portSvcParam","ipv4HintSvcParam","ipv6HintSvcParam","bytesSvcParam","svcParams","params","mandatory","alpn","port","ipv4hint","ipv6hint","echconfig","dohpath","odoh","Mandatory","Alpn","NoDefaultAlpn","Port","Ipv4Hint","Ipv6Hint","EchConfig","DohPath","Odoh","answerBytes","answerName","answerIPv4","answerIPv6","answerTxt","answerSrv","target","priority","weight","answerHInfo","cpu","os","toCaaTag","answerCaa","tag","value","flags","issuerCritical","answerSoa","mname","rname","setUint32","serial","refresh","retry","expire","minimum","getUint32","answerMx","exchange","preference","answerDnskey","algorithm","answerRrsig","signersName","signature","typeCovered","originalTTL","expiration","inception","keyTag","answerRp","mbox","txt","answerNsec","nextDomain","rrtypes","answerNsec3","salt","iterations","answerSshfp","fingerprint","hash","answerDs","digest","digestType","answerNaptr","services","regexp","replacement","order","answerTlsa","certificate","usage","selector","matchingType","answerSvcb","answerOpt","FLUSH_MASK","answer","OPT","A","NS","SOA","HINFO","MX","TXT","RP","AAAA","SRV","NAPTR","DS","SSHFP","RRSIG","NSEC","DNSKEY","NSEC3","TLSA","SVCB","HTTPS","CAA","PTR","CNAME","DNAME","udpPayloadSize","extendedRcode","ednsVersion","flush","ttl","readList","limit","packet","questions","answers","authorities","additionals","QUERY","rtype","id","questionsLength","answersLength","authoritiesLength","additionalsLength","RESPONSE","streamDecode","encodingLength","streamEncode"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dns-message",
|
|
3
|
-
"version": "1.0.1-canary-
|
|
3
|
+
"version": "1.0.1-canary-e30ae7317ba5298ba0dbe33fc2f54ef234fb28cb",
|
|
4
4
|
"description": "Encodes and decodes DNS message packets (derivative of dns-packet)",
|
|
5
5
|
"author": "Phil Pluckthun <phil@kitten.sh>",
|
|
6
6
|
"source": "./src/index.ts",
|