-
-
Notifications
You must be signed in to change notification settings - Fork 5
/
doh.d.ts
147 lines (147 loc) · 4.65 KB
/
doh.d.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
/**
* Options for doing DOH lookups.
*
* @typedef {object} DOH_LookupOptions
* @property {string} [name] The DNS name to look up.
* @property {packet.RecordType} [rrtype='A'] The Resource Record type
* to retrive.
* @property {boolean} [json=true] Retrieve a JSON response. If false,
* retrieve using DNS format.
* @property {boolean} [decode=true] Decode the response, either into JSON
* or an object representing the DNS format result.
* @property {boolean} [preferPost=true] For DNS format requests, should
* the HTTP POST verb be used? If false, uses GET.
* @property {boolean} [dnssec=false] Request DNSSec records. Currently
* requires `json: false`.
* @property {string} [url=CLOUDFLARE_API] What DoH endpoint should be
* used?
*/
/**
* Request DNS information over HTTPS. The [lookup]{@link DNSoverHTTPS#lookup}
* function provides the easiest-to-use defaults.
*/
export class DNSoverHTTPS extends DNSutils {
/**
* Create a DNSoverHTTPS instance.
*
* @param {object} opts Options for all requests.
* @param {string} [opts.userAgent="packageName version"] User Agent for
* HTTP request.
* @param {string} [opts.url="https://cloudflare-dns.com/dns-query"] Base URL
* for all HTTP requests.
* @param {boolean} [opts.preferPost=true] Should POST be preferred to Get
* for DNS-format queries?
* @param {string} [opts.contentType="application/dns-udpwireformat"]
* MIME type for POST.
* @param {number} [opts.verbose=0] How verbose do you want your logging?
* @param {Writable} [opts.verboseStream=process.stderr] Where to write
* verbose output.
* @param {boolean} [opts.http2=false] Use http/2 if it is available.
*/
constructor(opts?: {
userAgent?: string;
url?: string;
preferPost?: boolean;
contentType?: string;
verbose?: number;
verboseStream?: Writable;
http2?: boolean;
});
opts: {
userAgent: string;
url: string;
preferPost: boolean;
contentType: string;
http2: boolean;
};
hooks: {
beforeRequest: ((options: any) => void)[];
};
/**
* @private
* @ignore
*/
private _checkServerIdentity;
/**
* Get a DNS-format response.
*
* @param {DOH_LookupOptions} opts Options for the request.
* @returns {Promise<Buffer|object>} DNS result.
*/
getDNS(opts: DOH_LookupOptions): Promise<Buffer | object>;
/**
* Make a HTTPS GET request for JSON DNS.
*
* @param {object} opts Options for the request.
* @param {string} [opts.name] The name to look up.
* @param {packet.RecordType} [opts.rrtype="A"] The record type to look up.
* @param {boolean} [opts.decode=true] Parse the returned JSON?
* @param {boolean} [opts.dnssec=false] Request DNSSEC records.
* @returns {Promise<string|object>} DNS result.
*/
getJSON(opts: {
name?: string;
rrtype?: packet.RecordType;
decode?: boolean;
dnssec?: boolean;
}): Promise<string | object>;
/**
* Look up a DNS entry using DNS-over-HTTPS (DoH).
*
* @param {object|DOH_LookupOptions} name The DNS name to look up, or opts
* if this is an object.
* @param {DOH_LookupOptions|packet.RecordType} [opts={}] Options for the
* request. If a string is given, it will be used as the rrtype.
* @returns {Promise<Buffer|string|object>} DNS result.
*/
lookup(name: object | DOH_LookupOptions, opts?: packet.RecordType | DOH_LookupOptions): Promise<Buffer | string | object>;
close(): void;
}
export namespace DNSoverHTTPS {
const version: string;
const userAgent: string;
const defaultURL: string;
}
export default DNSoverHTTPS;
/**
* Options for doing DOH lookups.
*/
export type DOH_LookupOptions = {
/**
* The DNS name to look up.
*/
name?: string;
/**
* The Resource Record type
* to retrive.
*/
rrtype?: packet.RecordType;
/**
* Retrieve a JSON response. If false,
* retrieve using DNS format.
*/
json?: boolean;
/**
* Decode the response, either into JSON
* or an object representing the DNS format result.
*/
decode?: boolean;
/**
* For DNS format requests, should
* the HTTP POST verb be used? If false, uses GET.
*/
preferPost?: boolean;
/**
* Request DNSSec records. Currently
* requires `json: false`.
*/
dnssec?: boolean;
/**
* What DoH endpoint should be
* used?
*/
url?: string;
};
import DNSutils from "./dnsUtils.js";
import * as packet from "dns-packet";
import { Writable } from "stream";