agsola-react-ens-address
Version:
React ENS address component
59 lines (58 loc) • 1.56 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.ETH_ADDRESS_TYPE = void 0;
exports.getEthAddressType = getEthAddressType;
exports.isAddress = isAddress;
var _viem = require("viem");
var _ethEnsNamehash = require("@ensdomains/eth-ens-namehash");
var ETH_ADDRESS_TYPE = exports.ETH_ADDRESS_TYPE = {
name: 'name',
address: 'address',
error: 'error'
};
function isAddress(address) {
try {
(0, _viem.getAddress)(address);
} catch (e) {
return false;
}
return true;
}
function isEncodedLabelhash(hash) {
return hash.startsWith('[') && hash.endsWith(']') && hash.length === 66;
}
function validateName(name) {
var nameArray = name.split('.');
var hasEmptyLabels = nameArray.some(function (label) {
return label.length == 0;
});
if (hasEmptyLabels) throw new Error('Domain cannot have empty labels');
var normalizedArray = nameArray.map(function (label) {
if (label === '[root]') {
return label;
} else {
return isEncodedLabelhash(label) ? label : (0, _ethEnsNamehash.normalize)(label);
}
});
try {
return normalizedArray.join('.');
} catch (e) {
throw e;
}
}
function getEthAddressType(address) {
if (!address) return ETH_ADDRESS_TYPE.error;
if (isAddress(address)) {
return ETH_ADDRESS_TYPE.address;
}
try {
var validated = validateName(address);
//console.log("validaname", validated)
return ETH_ADDRESS_TYPE.name;
} catch (e) {
//console.error("no valida el name", address)
return ETH_ADDRESS_TYPE.error;
}
}