web3-domain-resolver
Version:
Web3 Library that enable with just one function to resolve domains on multiple web3 providers such as ENS, UnstoppableDomains and Freename
124 lines (123 loc) • 5.78 kB
JavaScript
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.UDResolverProvider = void 0;
const resolution_1 = __importStar(require("@unstoppabledomains/resolution"));
const ethers_1 = require("ethers");
const default_connections_1 = require("../../../defaults/default-connections");
const erc721_ud_proxy_abi_1 = require("../../../defaults/erc721.ud.proxy.abi");
const contract_connection_1 = require("../../../networks/connections/contract-connection");
const network_connection_types_1 = require("../../../networks/connections/network-connection.types");
const resolver_name_1 = require("../../../resolvers/types/resolver-name");
const base_resolver_provider_1 = require("../base-resolver-provider");
const ud_resolver_provider_consts_1 = require("./ud-resolver-provider.consts");
const ud_resolver_tools_1 = require("./ud-resolver-tools");
class UDResolverProvider extends base_resolver_provider_1.BaseResolverProvider {
constructor(options = {}) {
const ethereumConnection = options.connectionLibrary?.getConnection(network_connection_types_1.NetworkName.ETHEREUM) || default_connections_1.DefaultTools.getDefaultConnection(network_connection_types_1.NetworkName.ETHEREUM);
const ethReadContractAddress = new contract_connection_1.ContractConnection(ethereumConnection, ud_resolver_provider_consts_1.UNS_ETH_CONTRACT_ADDRESS, erc721_ud_proxy_abi_1.ERC721_UD_PROXY_ABI);
const polygonConnection = options.connectionLibrary?.getConnection(network_connection_types_1.NetworkName.POLYGON) || default_connections_1.DefaultTools.getDefaultConnection(network_connection_types_1.NetworkName.POLYGON);
const polygonReadContractAddress = new contract_connection_1.ContractConnection(polygonConnection, ud_resolver_provider_consts_1.UNS_POLYGON_CONTRACT_ADDRESS, erc721_ud_proxy_abi_1.ERC721_UD_PROXY_ABI);
super(resolver_name_1.ProviderName.UD, ud_resolver_provider_consts_1.UD_SUPPORTED_TLDS, [polygonReadContractAddress, ethReadContractAddress], [polygonReadContractAddress, ethReadContractAddress]);
this._resolution = new resolution_1.default({
sourceConfig: {
uns: {
locations: {
Layer1: {
url: ethereumConnection.rpcUrl,
network: 'mainnet',
},
Layer2: {
url: polygonConnection.rpcUrl,
network: 'polygon-mainnet',
},
},
},
zns: {
url: 'https://api.zilliqa.com',
network: 'mainnet',
},
ens: {
url: ethereumConnection.rpcUrl,
network: 'mainnet',
},
},
});
}
async generateTokenId(mappedName) {
try {
let namingService;
if (ud_resolver_provider_consts_1.UD_ZIL_TLDS.includes(mappedName.tld)) {
namingService = resolution_1.NamingServiceName.ZNS;
}
else {
namingService = resolution_1.NamingServiceName.UNS;
}
const nameHash = this._resolution.namehash(mappedName.fullname, namingService);
const tokenId = ethers_1.ethers.BigNumber.from(nameHash).toString();
return tokenId;
}
catch {
return undefined;
}
}
async getNetworkFromName(mappedName) {
try {
const network = await this._resolution.locations([mappedName.fullname]);
const udNetwork = network[mappedName.fullname]?.blockchain;
if (!udNetwork) {
return undefined;
}
return ud_resolver_tools_1.UDResolverTools.networkNameFormUdNetwork(udNetwork);
}
catch {
return undefined;
}
}
async getRecords(tokenId) {
const metadata = await this.getMetadata(tokenId);
return metadata?.properties?.records;
}
async getNameFromTokenId(tokenId, network) {
const hash = ethers_1.ethers.BigNumber.from(tokenId).toHexString();
let unhash;
try {
unhash = await this._resolution.unhash(hash, resolution_1.NamingServiceName.UNS);
}
catch (e) {
console.error(e);
}
if (!unhash) {
try {
unhash = await this._resolution.unhash(hash, resolution_1.NamingServiceName.ZNS);
}
catch (e) {
console.error(e);
}
}
return unhash;
}
}
exports.UDResolverProvider = UDResolverProvider;
;