UNPKG

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
"use strict"; 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;