This commit is contained in:
fiatjaf 2021-07-19 08:28:14 -03:00
parent dc698a5c90
commit 1ce00bd3b6
2 changed files with 53 additions and 1 deletions

51
nip05.js Normal file
View File

@ -0,0 +1,51 @@
import dnsPacket from 'dns-packet'
const dohProviders = [
'cloudflare-dns.com',
'fi.doh.dns.snopyta.org',
'basic.bravedns.com',
'hydra.plan9-ns1.com',
'doh.pl.ahadns.net',
'dns.flatuslifir.is',
'doh.dns.sb',
'doh.li'
]
let counter = 0
export async function keyFromDomain(domain) {
let host = dohProviders[counter % dohProviders.length]
let buf = dnsPacket.encode({
type: 'query',
id: Math.floor(Math.random() * 65534),
flags: dnsPacket.RECURSION_DESIRED,
questions: [
{
type: 'TXT',
name: `_nostrkey.${domain}`
}
]
})
let fetching = fetch(`https://${host}/dns-query`, {
method: 'POST',
headers: {
'Content-Type': 'application/dns-message',
'Content-Length': Buffer.byteLength(buf)
},
body: buf
})
counter++
try {
let response = Buffer.from(await (await fetching).arrayBuffer())
let {answers} = dnsPacket.decode(response)
if (answers.length === 0) return null
return Buffer.from(answers[0].data[0]).toString()
} catch (err) {
console.log(`error querying DNS for ${domain} on ${host}`, err)
return null
}
}

View File

@ -1,6 +1,6 @@
{
"name": "nostr-tools",
"version": "0.4.6",
"version": "0.5.0",
"description": "Tools for making a Nostr client.",
"main": "index.js",
"repository": {
@ -9,6 +9,7 @@
},
"dependencies": {
"buffer": "^6.0.3",
"dns-packet": "^5.2.4",
"noble-secp256k1": "^1.1.1",
"websocket-polyfill": "^0.0.3"
},