@sagi.io/dns-over-https
is an RFC-8484 compliant Node.js DNS over HTTPS API.
$ npm install --save @sagi.io/dns-over-https
We import as follows:
const doh = require('@sagi.io/dns-over-https')
doh.query = ({
name,
method = 'POST',
hostname = 'cloudflare-dns.com',
path = '/dns-query',
port = 443,
userAgent = '@sagi.io/dns-over-https',
type = 'A',
klass = 'IN',
useHttps = true,
})
A name
is mandatory. You can set your own method
, hostname
, path
, port
, userAgent
, type
, klass
and useHttps
.
A Promise
that resolves to a DNS
response object is returned.
For instance,
const doh = require('@sagi.io/dns-over-https')
(async () => {
const dnsResponse = await doh.query({name: 'sagi.io'})
})()
Results in:
{
"id": 0,
"type": "response",
"flags": 384,
"flag_qr": true,
"opcode": "QUERY",
"flag_aa": false,
"flag_tc": false,
"flag_rd": true,
"flag_ra": true,
"flag_z": false,
"flag_ad": false,
"flag_cd": false,
"rcode": "NOERROR",
"questions": [
{
"name": "sagi.io",
"type": "A",
"class": "IN"
}
],
"answers": [
{
"name": "sagi.io",
"type": "A",
"ttl": 300,
"class": "IN",
"flush": false,
"data": "151.101.1.195"
},
{
"name": "sagi.io",
"type": "A",
"ttl": 300,
"class": "IN",
"flush": false,
"data": "151.101.65.195"
}
],
"authorities": [],
"additionals": []
}
More usage examples can be found in example
.
MIT