tonweb
Version:
TonWeb - JavaScript API for TON blockchain
82 lines (75 loc) • 2.77 kB
JavaScript
const {Cell} = require("../../boc");
const {Address, bytesToHex} = require("../../utils");
const {
DNS_CATEGORY_NEXT_RESOLVER,
DNS_CATEGORY_SITE,
DNS_CATEGORY_WALLET,
DNS_CATEGORY_STORAGE,
createSmartContractAddressRecord,
createAdnlAddressRecord,
createStorageBagIdRecord,
createNextResolverRecord,
parseSmartContractAddressRecord,
parseAdnlAddressRecord,
parseStorageBagIdRecord,
parseSiteRecord,
parseNextResolverRecord,
dnsResolve
} = require("./DnsUtils");
class Dns {
/**
* @param provider {HttpProvider}
*/
constructor(provider) {
this.provider = provider;
}
/**
* @returns {Promise<Address>}
*/
async getRootDnsAddress() {
const cell = await this.provider.getConfigParam(4);
const byteArray = cell.bits.array;
if (byteArray.length !== 256 / 8) throw new Error('Invalid ConfigParam 4 length ' + byteArray.length);
const hex = bytesToHex(byteArray);
return new Address('-1:' + hex);
}
/**
* @param domain {string} e.g "sub.alice.ton"
* @param category {string | undefined} category of requested DNS record, null for all categories
* @param oneStep {boolean | undefined} non-recursive
* @returns {Promise<Cell | Address | AdnlAddress | StorageBagId | null>}
*/
async resolve(domain, category, oneStep) {
const rootDnsAddress = await this.getRootDnsAddress();
return dnsResolve(this.provider, rootDnsAddress.toString(), domain, category, oneStep)
}
/**
* @param domain {string} e.g "sub.alice.ton"
* @returns {Promise<Address | null>}
*/
getWalletAddress(domain) {
return this.resolve(domain, DNS_CATEGORY_WALLET);
}
/**
* @param domain {string} e.g "sub.alice.ton"
* @returns {Promise<AdnlAddress | StorageBagId | null>}
*/
getSiteAddress(domain) {
return this.resolve(domain, DNS_CATEGORY_SITE);
}
}
Dns.resolve = dnsResolve;
Dns.createSmartContractAddressRecord = createSmartContractAddressRecord;
Dns.createAdnlAddressRecord = createAdnlAddressRecord;
Dns.createStorageBagIdRecord = createStorageBagIdRecord;
Dns.createNextResolverRecord = createNextResolverRecord;
Dns.parseNextResolverRecord = parseNextResolverRecord;
Dns.parseAdnlAddressRecord = parseAdnlAddressRecord;
Dns.parseStorageBagIdRecord = parseStorageBagIdRecord;
Dns.parseSiteRecord = parseSiteRecord;
Dns.parseSmartContractAddressRecord = parseSmartContractAddressRecord;
Dns.DNS_CATEGORY_NEXT_RESOLVER = DNS_CATEGORY_NEXT_RESOLVER;
Dns.DNS_CATEGORY_WALLET = DNS_CATEGORY_WALLET;
Dns.DNS_CATEGORY_SITE = DNS_CATEGORY_SITE;
Dns.DNS_CATEGORY_STORAGE = DNS_CATEGORY_STORAGE;
module.exports.default = Dns;