UNPKG

@chain-registry/utils

Version:
119 lines (118 loc) 6.36 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getChainNameByStakingDenom = exports.getChainByStakingDenom = exports.getChainNameByDenom = exports.getAssetNameByDenom = exports.getChainLogo = exports.getAssetLogoByDenom = exports.getNativeAssetByChainName = exports.getExponentBySymbol = exports.getExponentByDenom = exports.getExponentByDenomFromAsset = exports.getExponentFromAsset = exports.getDenomBySymbol = exports.getSymbolByDenom = exports.getCoinGeckoIdByDenom = exports.getDenomsByCoinGeckoId = exports.getDenomByCoinGeckoId = exports.getAssetBySymbol = exports.getAssetByDenom = void 0; const utils_1 = require("./utils"); const getAssetByKeyValue = (assets, key, value, chainName) => { const filteredAssets = assets .filter((assetList) => !chainName || assetList.chainName === chainName) .flatMap(({ assets }) => assets); return (0, utils_1.customFind)(filteredAssets, (asset) => asset[key] === value, `key:${key} value:${value} chainName:${chainName}`); }; const getAssetByDenom = (assets, denom, chainName) => { const filteredAssets = assets .filter((assetList) => !chainName || assetList.chainName === chainName) .flatMap(({ assets }) => assets); return (0, utils_1.customFind)(filteredAssets, (asset) => { const found = asset.denomUnits.find(unit => unit.denom === denom); return !!found; }, `denom:${denom} chainName:${chainName}`); }; exports.getAssetByDenom = getAssetByDenom; const getAssetBySymbol = (assets, symbol, chainName) => { return getAssetByKeyValue(assets, 'symbol', symbol, chainName); }; exports.getAssetBySymbol = getAssetBySymbol; const getDenomByCoinGeckoId = (assets, coinGeckoId, chainName) => { return getAssetByKeyValue(assets, 'coingeckoId', coinGeckoId, chainName) ?.base; }; exports.getDenomByCoinGeckoId = getDenomByCoinGeckoId; const getDenomsByCoinGeckoId = (assets, coinGeckoId, chainName) => { const filteredAssets = assets .filter((assetList) => !chainName || assetList.chainName === chainName) .flatMap(({ assets }) => assets); const denoms = filteredAssets .filter(a => a.coingeckoId === coinGeckoId) .map(a => a.base); return denoms; }; exports.getDenomsByCoinGeckoId = getDenomsByCoinGeckoId; const getCoinGeckoIdByDenom = (assets, denom, { chainName, allowTestnet = false, customAssetFilter = () => true, excludedChainNames = [] } = {}) => { const filteredAssetLists = assets.filter((assetList) => { return ((!chainName || assetList.chainName === chainName) && (allowTestnet || !assetList.chainName.includes('testnet')) && !excludedChainNames.includes(assetList.chainName)); }); const filteredAssets = filteredAssetLists .flatMap(({ assets }) => assets) .filter(({ coingeckoId }) => coingeckoId) .filter(customAssetFilter); const asset = filteredAssets.find(({ base }) => base === denom); return asset?.coingeckoId; }; exports.getCoinGeckoIdByDenom = getCoinGeckoIdByDenom; const getSymbolByDenom = (assets, denom, chainName) => { return (0, exports.getAssetByDenom)(assets, denom, chainName)?.symbol; }; exports.getSymbolByDenom = getSymbolByDenom; const getDenomBySymbol = (assets, symbol, chainName) => { return getAssetByKeyValue(assets, 'symbol', symbol, chainName)?.base; }; exports.getDenomBySymbol = getDenomBySymbol; const getExponentFromAsset = (asset) => { return asset.denomUnits.find(({ denom }) => denom === asset.display) ?.exponent; }; exports.getExponentFromAsset = getExponentFromAsset; const getExponentByDenomFromAsset = (asset, denom) => { return asset.denomUnits.find((unit) => { return unit.denom === denom || unit?.aliases?.find(a => a === denom); }) ?.exponent; }; exports.getExponentByDenomFromAsset = getExponentByDenomFromAsset; const getExponentByDenom = (assets, denom, chainName) => { const asset = (0, exports.getAssetByDenom)(assets, denom, chainName); return asset ? (0, exports.getExponentFromAsset)(asset) : undefined; }; exports.getExponentByDenom = getExponentByDenom; const getExponentBySymbol = (assets, symbol, chainName) => { const asset = (0, exports.getAssetBySymbol)(assets, symbol, chainName); return asset ? (0, exports.getExponentFromAsset)(asset) : undefined; }; exports.getExponentBySymbol = getExponentBySymbol; const getNativeAssetByChainName = (assets, chainName) => { const assetList = (0, utils_1.customFind)(assets, (assetList) => assetList.chainName === chainName && !assetList.assets[0].base.startsWith('ibc/'), `chainName:${chainName}`); return assetList?.assets[0]; }; exports.getNativeAssetByChainName = getNativeAssetByChainName; const getAssetLogoByDenom = (assets, denom, chainName) => { const asset = (0, exports.getAssetByDenom)(assets, denom, chainName); return Object.values(asset?.logoURIs || {})[0]; }; exports.getAssetLogoByDenom = getAssetLogoByDenom; const getChainLogo = (assets, chainName) => { const nativeAsset = (0, exports.getNativeAssetByChainName)(assets, chainName); return Object.values(nativeAsset?.logoURIs || {})[0]; }; exports.getChainLogo = getChainLogo; const getAssetNameByDenom = (assets, denom, chainName) => { const asset = (0, exports.getAssetByDenom)(assets, denom, chainName); return asset?.name; }; exports.getAssetNameByDenom = getAssetNameByDenom; const getChainNameByDenom = (assets, denom) => { const isIbcDenom = denom.startsWith('ibc/'); if (isIbcDenom) { const asset = (0, exports.getAssetByDenom)(assets, denom); return asset?.traces?.find((t) => t.type === 'ibc')?.counterparty ?.chainName; } return (0, utils_1.customFind)(assets, (assetList) => assetList.assets.some((asset) => asset.base === denom), `denom:${denom}`)?.chainName; }; exports.getChainNameByDenom = getChainNameByDenom; const getChainByStakingDenom = (chains, denom) => (0, utils_1.customFind)(chains, (chain) => !!chain.staking?.stakingTokens.find((token) => token.denom === denom), `denom:${denom}`); exports.getChainByStakingDenom = getChainByStakingDenom; const getChainNameByStakingDenom = (chains, denom) => (0, exports.getChainByStakingDenom)(chains, denom)?.chainName; exports.getChainNameByStakingDenom = getChainNameByStakingDenom;