1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 | export type RecordType =
|
12 | | "A"
|
13 | | "AAAA"
|
14 | | "AFSDB"
|
15 | | "APL"
|
16 | | "AXFR"
|
17 | | "CAA"
|
18 | | "CDNSKEY"
|
19 | | "CDS"
|
20 | | "CERT"
|
21 | | "CNAME"
|
22 | | "DNAME"
|
23 | | "DHCID"
|
24 | | "DLV"
|
25 | | "DNSKEY"
|
26 | | "DS"
|
27 | | "HINFO"
|
28 | | "HIP"
|
29 | | "IXFR"
|
30 | | "IPSECKEY"
|
31 | | "KEY"
|
32 | | "KX"
|
33 | | "LOC"
|
34 | | "MX"
|
35 | | "NAPTR"
|
36 | | "NS"
|
37 | | "NSEC"
|
38 | | "NSEC3"
|
39 | | "NSEC3PARAM"
|
40 | | "NULL"
|
41 | | "OPT"
|
42 | | "PTR"
|
43 | | "RRSIG"
|
44 | | "RP"
|
45 | | "SIG"
|
46 | | "SOA"
|
47 | | "SRV"
|
48 | | "SSHFP"
|
49 | | "TA"
|
50 | | "TKEY"
|
51 | | "TLSA"
|
52 | | "TSIG"
|
53 | | "TXT"
|
54 | | "URI";
|
55 |
|
56 | export type RecordClass = "IN" | "CS" | "CH" | "HS" | "ANY";
|
57 |
|
58 | export interface Question {
|
59 | type: RecordType;
|
60 | name: string;
|
61 | class?: RecordClass | undefined;
|
62 | }
|
63 |
|
64 | export interface SrvData {
|
65 | port: number;
|
66 | target: string;
|
67 | priority?: number | undefined;
|
68 | weight?: number | undefined;
|
69 | }
|
70 |
|
71 | export interface HInfoData {
|
72 | cpu: string;
|
73 | os: string;
|
74 | }
|
75 |
|
76 | export interface SoaData {
|
77 | mname: string;
|
78 | rname: string;
|
79 | serial?: number | undefined;
|
80 | refresh?: number | undefined;
|
81 | retry?: number | undefined;
|
82 | expire?: number | undefined;
|
83 | minimum?: number | undefined;
|
84 | }
|
85 |
|
86 | export type TxtData = string | Buffer | Array<string | Buffer>;
|
87 |
|
88 | export interface CaaData {
|
89 | issuerCritical?: boolean | undefined;
|
90 | flags?: number | undefined;
|
91 | tag: string;
|
92 | value: string;
|
93 | }
|
94 |
|
95 | export interface MxData {
|
96 | preference?: number | undefined;
|
97 | exchange: string;
|
98 | }
|
99 |
|
100 | export interface GenericAnswer<T> {
|
101 | type: T;
|
102 | name: string;
|
103 | }
|
104 |
|
105 | export interface BaseAnswer<T, D> extends GenericAnswer<T> {
|
106 | ttl?: number | undefined;
|
107 | class?: RecordClass | undefined;
|
108 | flush?: boolean | undefined;
|
109 | data: D;
|
110 | }
|
111 |
|
112 |
|
113 |
|
114 |
|
115 | export type StringRecordType = "A" | "AAAA" | "CNAME" | "DNAME" | "NS" | "PTR";
|
116 |
|
117 |
|
118 |
|
119 |
|
120 |
|
121 | export type OtherRecordType =
|
122 | | "AFSDB"
|
123 | | "APL"
|
124 | | "AXFR"
|
125 | | "CDNSKEY"
|
126 | | "CDS"
|
127 | | "CERT"
|
128 | | "DHCID"
|
129 | | "DLV"
|
130 | | "DNSKEY"
|
131 | | "DS"
|
132 | | "HIP"
|
133 | | "IXFR"
|
134 | | "IPSECKEY"
|
135 | | "KEY"
|
136 | | "KX"
|
137 | | "LOC"
|
138 | | "NAPTR"
|
139 | | "NSEC"
|
140 | | "NSEC3"
|
141 | | "NSEC3PARAM"
|
142 | | "NULL"
|
143 | | "RRSIG"
|
144 | | "RP"
|
145 | | "SIG"
|
146 | | "SSHFP"
|
147 | | "TA"
|
148 | | "TKEY"
|
149 | | "TLSA"
|
150 | | "TSIG"
|
151 | | "URI";
|
152 |
|
153 | export type StringAnswer = BaseAnswer<StringRecordType, string>;
|
154 | export type SrvAnswer = BaseAnswer<"SRV", SrvData>;
|
155 | export type HInfoAnswer = BaseAnswer<"HINFO", HInfoData>;
|
156 | export type SoaAnswer = BaseAnswer<"SOA", SoaData>;
|
157 | export type TxtAnswer = BaseAnswer<"TXT", TxtData>;
|
158 | export type CaaAnswer = BaseAnswer<"CAA", CaaData>;
|
159 | export type MxAnswer = BaseAnswer<"MX", MxData>;
|
160 | export type BufferAnswer = BaseAnswer<OtherRecordType, Buffer>;
|
161 |
|
162 | interface OptCodes {
|
163 | "OPTION_0": 0;
|
164 | "LLQ": 1;
|
165 | "UL": 2;
|
166 | "NSID": 3;
|
167 | "OPTION_4": 4;
|
168 | "DAU": 5;
|
169 | "DHU": 6;
|
170 | "N3U": 7;
|
171 | "CLIENT_SUBNET": 8;
|
172 | "EXPIRE": 9;
|
173 | "COOKIE": 10;
|
174 | "TCP_KEEPALIVE": 11;
|
175 | "PADDING": 12;
|
176 | "CHAIN": 13;
|
177 | "KEY_TAG": 14;
|
178 | "DEVICEID": 26946;
|
179 | "OPTION_65535": 65535;
|
180 | }
|
181 |
|
182 | type OptCodeType = keyof OptCodes;
|
183 | type OptCode<K extends OptCodeType> = OptCodes[K];
|
184 |
|
185 | interface GenericOpt<T extends OptCodeType> {
|
186 | code: OptCode<T>;
|
187 | type?: T | undefined;
|
188 | data?: Buffer | undefined;
|
189 | }
|
190 |
|
191 | interface ClientSubnetOpt extends GenericOpt<"CLIENT_SUBNET"> {
|
192 | family?: number | undefined;
|
193 | sourcePrefixLength?: number | undefined;
|
194 | scopePrefixLength?: number | undefined;
|
195 | ip: string | undefined;
|
196 | }
|
197 |
|
198 | interface KeepAliveOpt extends GenericOpt<"TCP_KEEPALIVE"> {
|
199 | timeout?: number | undefined;
|
200 | }
|
201 |
|
202 | interface PaddingOpt extends GenericOpt<"PADDING"> {
|
203 | length?: number | undefined;
|
204 | }
|
205 |
|
206 | interface TagOpt extends GenericOpt<"KEY_TAG"> {
|
207 | tags: number[];
|
208 | }
|
209 |
|
210 | export type PacketOpt = ClientSubnetOpt | KeepAliveOpt | PaddingOpt | TagOpt;
|
211 |
|
212 | export interface OptAnswer extends GenericAnswer<"OPT"> {
|
213 | udpPayloadSize: number;
|
214 | extendedRcode: number;
|
215 | ednsVersion: number;
|
216 | flags: number;
|
217 |
|
218 | |
219 |
|
220 |
|
221 | flag_do: boolean;
|
222 |
|
223 | options: PacketOpt[];
|
224 | }
|
225 |
|
226 | export type Answer =
|
227 | | StringAnswer
|
228 | | SrvAnswer
|
229 | | HInfoAnswer
|
230 | | SoaAnswer
|
231 | | TxtAnswer
|
232 | | CaaAnswer
|
233 | | MxAnswer
|
234 | | BufferAnswer
|
235 | | OptAnswer;
|
236 |
|
237 | export interface Packet {
|
238 | |
239 |
|
240 |
|
241 |
|
242 |
|
243 | type?: "query" | "response" | undefined;
|
244 |
|
245 | id?: number | undefined;
|
246 |
|
247 | |
248 |
|
249 |
|
250 |
|
251 |
|
252 |
|
253 |
|
254 |
|
255 |
|
256 | flags?: number | undefined;
|
257 | questions?: Question[] | undefined;
|
258 | answers?: Answer[] | undefined;
|
259 | additionals?: Answer[] | undefined;
|
260 | authorities?: Answer[] | undefined;
|
261 | }
|
262 |
|
263 | export const AUTHORITATIVE_ANSWER: number;
|
264 | export const TRUNCATED_RESPONSE: number;
|
265 | export const RECURSION_DESIRED: number;
|
266 | export const RECURSION_AVAILABLE: number;
|
267 | export const AUTHENTIC_DATA: number;
|
268 | export const CHECKING_DISABLED: number;
|
269 |
|
270 | export function encode(package: Packet, buf?: Buffer, offset?: number): Buffer;
|
271 | export namespace encode {
|
272 | let bytes: number;
|
273 | }
|
274 | export function decode(buf: Buffer, offset?: number): Packet;
|
275 | export namespace decode {
|
276 | let bytes: number;
|
277 | }
|
278 | export function encodingLength(packet: Packet): number;
|
279 | export function streamEncode(package: Packet): Buffer;
|
280 | export namespace streamEncode {
|
281 | let bytes: number;
|
282 | }
|
283 | export function streamDecode(package: Buffer): Packet;
|
284 | export namespace streamDecode {
|
285 | let bytes: number;
|
286 | }
|
287 |
|
288 | export {};
|