UNPKG

@unstoppabledomains/resolution

Version:
95 lines (94 loc) 3.97 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.getParentDomain = exports.labelNameHash = exports.splitDomainName = exports.fromDecStringToHex = exports.fromHexStringToDecimals = exports.znsChildhash = exports.znsNamehash = exports.eip137Childhash = exports.eip137Namehash = void 0; var sha256_1 = __importDefault(require("crypto-js/sha256")); var sha3_1 = __importDefault(require("crypto-js/sha3")); var enc_hex_1 = __importDefault(require("crypto-js/enc-hex")); var lib_typedarrays_1 = __importDefault(require("crypto-js/lib-typedarrays")); var bn_js_1 = __importDefault(require("bn.js")); var js_sha3_1 = require("js-sha3"); function eip137Namehash(domain) { var arr = hashArray(domain, 'sha3'); return arrayToHex(arr); } exports.eip137Namehash = eip137Namehash; function eip137Childhash(parentHash, label) { return childhash(parentHash, label, 'sha3'); } exports.eip137Childhash = eip137Childhash; function znsNamehash(domain) { var arr = hashArray(domain, 'sha256'); return arrayToHex(arr); } exports.znsNamehash = znsNamehash; function znsChildhash(parentHash, label) { return childhash(parentHash, label, 'sha256'); } exports.znsChildhash = znsChildhash; function childhash(parentHash, label, hashingAlgo) { var hash = hashingAlgo === 'sha256' ? sha256_1.default : sha3_1.default; var opts = { outputLength: 256 }; var parent = parentHash.replace(/^0x/, ''); var childHash = enc_hex_1.default.stringify(hash(label, opts)); return "0x".concat(enc_hex_1.default.stringify(hash(enc_hex_1.default.parse("".concat(parent).concat(childHash)), opts))); } function hashArray(domain, hashingAlgo) { if (!domain) { return lib_typedarrays_1.default.create(Array.from(new Uint8Array(8))); } var hash = hashingAlgo === 'sha256' ? sha256_1.default : sha3_1.default; var opts = { outputLength: 256 }; var _a = domain.split('.'), label = _a[0], remainder = _a.slice(1); var labelHash = hash(label, opts); var remainderHash = hashArray(remainder.join('.'), hashingAlgo); return hash(remainderHash.concat(labelHash), opts); } function arrayToHex(arr) { return "0x".concat(enc_hex_1.default.stringify(arr)); } function fromHexStringToDecimals(value) { if (value.startsWith('0x')) { var valueWithoutPrefix = value.slice(2, value.length); var bn = new bn_js_1.default(valueWithoutPrefix, 16); return bn.toString(10); } return value; } exports.fromHexStringToDecimals = fromHexStringToDecimals; function fromDecStringToHex(value) { if (!value.startsWith('0x')) { var bn = new bn_js_1.default(value, 10); var bnString = bn.toString(16); return "0x".concat(bnString.padStart(64, '0')); } return value; } exports.fromDecStringToHex = fromDecStringToHex; var splitDomainName = function (domain) { var splitDomain = domain.split('.'); var label = splitDomain[0]; var tld = splitDomain[1]; if (splitDomain.length - 1 < 2) { return { label: label, tld: tld }; } tld = splitDomain[-1]; label = splitDomain.slice(0, -1).join('.'); return { label: label, tld: tld }; }; exports.splitDomainName = splitDomainName; // returns the tokenId of an ens domain name. // @see https://docs.ens.domains/dapp-developer-guide/ens-as-nft#deriving-tokenid-from-ens-name var labelNameHash = function (domain) { var splitDomain = (0, exports.splitDomainName)(domain); var labelHash = (0, js_sha3_1.keccak256)(Buffer.from(splitDomain.label, 'utf8')); return "0x".concat(labelHash); }; exports.labelNameHash = labelNameHash; var getParentDomain = function (domain) { var splitDomain = domain.split('.'); return "".concat(splitDomain[-2], ".").concat(splitDomain[-1]); }; exports.getParentDomain = getParentDomain;