Files
snort/packages/app/src/Nip05/Verifier.ts
2023-05-24 11:12:23 +01:00

35 lines
954 B
TypeScript

import DnsOverHttpResolver from "dns-over-http-resolver";
import { bech32ToHex } from "SnortUtils";
const resolver = new DnsOverHttpResolver();
interface NostrJson {
names: Record<string, string>;
}
export async function fetchNip05Pubkey(name: string, domain: string, timeout = 2_000) {
if (!name || !domain) {
return undefined;
}
try {
const res = await fetch(`https://${domain}/.well-known/nostr.json?name=${encodeURIComponent(name)}`, {
signal: AbortSignal.timeout(timeout),
});
const data: NostrJson = await res.json();
const match = Object.keys(data.names).find(n => {
return n.toLowerCase() === name.toLowerCase();
});
return match ? data.names[match] : undefined;
} catch {
// ignored
}
// Check as DoH TXT entry
try {
const resDns = await resolver.resolveTxt(`${name}._nostr.${domain}`);
return bech32ToHex(resDns[0][0]);
} catch {
// ignored
}
return undefined;
}