UNPKG

whoisens-lib

Version:

Whois for ENS (Ethereum Name Service) lookup service

248 lines 8.78 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const config_js_1 = __importDefault(require("../config.js")); const types_js_1 = require("./types.js"); const ENSRoot_js_1 = __importDefault(require("./ENSRoot.js")); const Registrar_js_1 = __importDefault(require("./Registrar.js")); const Resolver_js_1 = __importDefault(require("./Resolver.js")); const ReverseResolver_js_1 = __importDefault(require("./ReverseResolver.js")); const index_js_1 = __importDefault(require("../utils/index.js")); const BaseClass_js_1 = __importDefault(require("./BaseClass.js")); const Config_js_1 = __importDefault(require("./Config.js")); const debug_1 = __importDefault(require("debug")); class ENS extends BaseClass_js_1.default { constructor(params = {}) { super(); Config_js_1.default.getInstance().currentNetworkURL = params.networkURL || config_js_1.default.networkURL; Config_js_1.default.getInstance().contractAddress = params.contractAddress; this.ENSRoot = new ENSRoot_js_1.default(); } getEthAddressType() { return this.ethAddressType; } /** * Init with eth address * * @fires ENS.EVENT_ETH_NAME * @fires ENS.EVENT_ETH_NAME_TYPE */ init(ethAddress) { this.ethAddressOriginal = ethAddress; this.ethAddress = ethAddress; this.emit(ENS.EVENT_ETH_ADDRESS, this.ethAddress); this.ethAddressType = index_js_1.default.getAddressType(this.ethAddress); this.emit(ENS.EVENT_ETH_ADDRESS_TYPE, this.ethAddressType); if (this.ethAddressType === types_js_1.EthAddressType.error) throw new types_js_1.InvalidEthNameError(this.ethAddress); this.ethAddress = index_js_1.default.reverseAddressToHex(this.ethAddress); } async getInfo() { if (!this.ethAddress || !this.ethAddressType) throw new Error('Please call init before'); let controllerResult; let ownerResult; let resolverAddress; if (this.ethAddressType === types_js_1.EthAddressType.error) return; if (this.ethAddressType === types_js_1.EthAddressType.name) { controllerResult = await this.getController(); if (!index_js_1.default.isResult(controllerResult.result)) return; ownerResult = await this.getOwner(); if (!ownerResult.result) return; await this.getExpirationDate(); resolverAddress = await this.getAddress(); await this.getContentHash(); if (!index_js_1.default.isResult(resolverAddress.result)) return; this.resolveAddress = resolverAddress.result; } await this.getReverseRecord(); } /** * Get controller address. * * @fires ENS.EVENT_SET_RESPONSE * @type {object} * @property resultName {string} controllerResult * * @return Promise<Response> */ async getController() { const EVENT_PROPERTY = 'controllerResult'; try { const controllerResult = await this.ENSRoot.getController(this.ethAddress); return this.sendResponse(EVENT_PROPERTY, controllerResult); } catch (error) { this.sendError(EVENT_PROPERTY, error); } } /** * Get Registrar owner. * * @fires ENS.EVENT_SET_RESPONSE * @type {object} * @property resultName {string} registrarOwnerResult * * @return Promise<Response> */ async getOwner() { const EVENT_PROPERTY = 'ownerResult'; try { await this.initRegistrar(); const registrarOwnerResult = await this.Registrar.getOwner(); return this.sendResponse(EVENT_PROPERTY, registrarOwnerResult); } catch (error) { this.sendError(EVENT_PROPERTY, error); } } /** * Get name expiration date. * * @fires ENS.EVENT_SET_RESPONSE * @type {object} * @property resultName {string} nameExpires * * @return Promise<Response> */ async getExpirationDate() { const EVENT_PROPERTY = 'expirationDateResult'; try { await this.initRegistrar(); const nameExpires = await this.Registrar.getExpirationDate(); return this.sendResponse(EVENT_PROPERTY, nameExpires); } catch (error) { this.sendError(EVENT_PROPERTY, error); } } /** * Get address * * @fires ENS.EVENT_SET_RESPONSE * @type {object} * @property resultName {string} resolverAddress * * @return Promise<Response> */ async getAddress() { const EVENT_PROPERTY = 'addressResult'; try { if (await this.isNameRegistered()) { await this.initResolver(); const resolverAddress = await this.Resolver.getAddress(); return this.sendResponse(EVENT_PROPERTY, resolverAddress); } else { this.sendError(EVENT_PROPERTY, new types_js_1.NameIsNotRegisteredError()); } } catch (error) { this.sendError(EVENT_PROPERTY, error); } } /** * Get content hash * * @fires ENS.EVENT_SET_RESPONSE * @type {object} * @property resultName {string} resolverContentHash * * @return Promise<Response> */ async getContentHash() { const EVENT_PROPERTY = 'contentHashResult'; try { await this.initResolver(); const resolverContentHash = await this.Resolver.getContentHash(); return this.sendResponse(EVENT_PROPERTY, resolverContentHash); } catch (error) { this.sendError(EVENT_PROPERTY, error); } } /** * Get reverse record, e.g. name from address * * @fires ENS.EVENT_SET_RESPONSE * @type {object} * @property resultName {string} revertResolverResult * * @return Promise<Response> */ async getReverseRecord() { const EVENT_PROPERTY = 'reverseRecordResult'; try { const address = this.resolveAddress || this.ethAddress; this.ReverseResolver = new ReverseResolver_js_1.default(address); const revertResolverResult = await this.ReverseResolver.getName(); return this.sendResponse(EVENT_PROPERTY, revertResolverResult); } catch (error) { this.sendError(EVENT_PROPERTY, error); } } async resolve() { if (this.ethAddressType === types_js_1.EthAddressType.name) return this.getAddress(); if (this.ethAddressType === types_js_1.EthAddressType.address) return this.getReverseRecord(); } async initRegistrar() { if (!this.Registrar) this.Registrar = new Registrar_js_1.default(this.ethAddress); } async initResolver() { if (!this.Resolver) this.Resolver = new Resolver_js_1.default(this.ethAddress); } async isNameRegistered() { await this.initRegistrar(); const owner = await this.Registrar.getOwner(); return index_js_1.default.isResult(owner.result); } sendResponse(resultName, result) { result = this.extendResultWithAdditionalInfo(result); this.emit(ENS.EVENT_SET_RESPONSE, { resultName, result }); return result; } sendError(resultName, result) { debug_1.default('error')(`${resultName}: ${result}`); this.sendResponse(resultName, result); throw result; } extendResultWithAdditionalInfo(result) { const outputResult = Object.assign({}, result, { data: Object.assign({}, result.data, { address: this.ethAddress, addressType: this.ethAddressType }) }); const nameMain = this.ethAddressType === types_js_1.EthAddressType.name && index_js_1.default.getNameMain(this.ethAddress); const address = result.data && result.data.reverseAddress || outputResult.data.address; const addressParent = address && index_js_1.default.getAddressParent(address); if (nameMain) outputResult.data.nameMain = nameMain; if (addressParent) outputResult.data.addressParent = addressParent; return outputResult; } } /** * @event */ ENS.EVENT_ETH_ADDRESS = 'ethAddress'; /** * @event */ ENS.EVENT_ETH_ADDRESS_TYPE = 'ethAddressType'; /** * @event */ ENS.EVENT_SET_RESPONSE = 'setResponse'; exports.default = ENS; //# sourceMappingURL=ENS.js.map