@yoroi/resolver
Version:
Yoroi domain resolver
64 lines (63 loc) • 3.34 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.resolveVirtualSubdomain = exports.resolveUserRecord = exports.resolveDomain = exports.resolveAddress = void 0;
var _types = require("@yoroi/types");
var _utils = require("./utils");
const resolveDomain = async (cnsName, cnsApiConfig, cnsCardanoApi, fetcherConfig) => {
const assetName = (0, _utils.stringToHex)(cnsName);
const metadata = await cnsCardanoApi.getMetadata(cnsApiConfig.cnsPolicyId, assetName, fetcherConfig);
if (!metadata) throw new _types.Resolver.Errors.NotFound();
if (!(0, _utils.validateExpiry)(metadata)) throw new _types.Resolver.Errors.Expired();
const address = await cnsCardanoApi.getAssetAddress(cnsApiConfig.cnsPolicyId, assetName);
if (!address) throw new _types.Resolver.Errors.NotFound();
return address;
};
exports.resolveDomain = resolveDomain;
const resolveUserRecord = async (cnsName, cnsApiConfig, cnsCardanoApi, csl, fetcherConfig) => {
const assetName = (0, _utils.stringToHex)(cnsName);
const metadata = await cnsCardanoApi.getMetadata(cnsApiConfig.cnsPolicyId, assetName, fetcherConfig);
if (!metadata) throw new _types.Resolver.Errors.NotFound();
if (!(0, _utils.validateExpiry)(metadata)) throw new _types.Resolver.Errors.Expired();
const inlineDatum = await cnsCardanoApi.getAssetInlineDatum(cnsApiConfig.recordPolicyId, assetName, [cnsApiConfig.recordAddress], fetcherConfig);
if (!inlineDatum || !(0, _utils.validateCNSUserRecord)(inlineDatum)) throw new _types.Resolver.Errors.InvalidDomain();
const virtualSubdomains = await (0, _utils.parseAssocMapAsync)(inlineDatum.fields[0],
// validated with validateCNSUserRecord
async item => {
const itemHex = await (0, _utils.objToHex)(item, csl);
const bech32 = await (0, _utils.parsePlutusAddressToBech32)(itemHex, csl, cnsApiConfig.networkId);
return bech32;
});
const parsedInlineDatum = {
virtualSubdomains: (0, _utils.validateVirtualSubdomainEnabled)(metadata) ? virtualSubdomains : []
};
return parsedInlineDatum;
};
exports.resolveUserRecord = resolveUserRecord;
const resolveVirtualSubdomain = async (virtualDomain, cnsApiConfig, cnsCardanoApi, csl, fetcherConfig) => {
const [target, cnsName, ext] = virtualDomain.split('.');
const {
virtualSubdomains
} = await resolveUserRecord(`${cnsName}.${ext}`, cnsApiConfig, cnsCardanoApi, csl, fetcherConfig);
const resolvedVirtualDomain = virtualSubdomains?.find(_ref => {
let [key] = _ref;
return key === target;
});
if (!resolvedVirtualDomain) throw new _types.Resolver.Errors.NotFound();
return resolvedVirtualDomain[1];
};
exports.resolveVirtualSubdomain = resolveVirtualSubdomain;
const resolveAddress = async (cnsName, cnsApiConfig, cnsCardanoApi, csl, fetcherConfig) => {
let address;
const deconstructedCns = cnsName.split('.');
if (deconstructedCns.length === cnsApiConfig.domainLevels) {
address = await resolveDomain(cnsName, cnsApiConfig, cnsCardanoApi);
} else if (deconstructedCns.length === cnsApiConfig.virtualSubdomainLevels) {
address = await resolveVirtualSubdomain(cnsName, cnsApiConfig, cnsCardanoApi, csl, fetcherConfig);
}
if (!address) throw new _types.Resolver.Errors.InvalidDomain();
return address;
};
exports.resolveAddress = resolveAddress;
//# sourceMappingURL=api-helpers.js.map