UNPKG

@yoroi/resolver

Version:
64 lines (63 loc) 3.34 kB
"use strict"; 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