UNPKG

@chain-registry/utils

Version:
98 lines (97 loc) 4.71 kB
import { customFind } from './utils'; const getAssetByKeyValue = (assets, key, value, chainName) => { const filteredAssets = assets .filter((assetList) => !chainName || assetList.chainName === chainName) .flatMap(({ assets }) => assets); return customFind(filteredAssets, (asset) => asset[key] === value, `key:${key} value:${value} chainName:${chainName}`); }; export const getAssetByDenom = (assets, denom, chainName) => { const filteredAssets = assets .filter((assetList) => !chainName || assetList.chainName === chainName) .flatMap(({ assets }) => assets); return customFind(filteredAssets, (asset) => { const found = asset.denomUnits.find(unit => unit.denom === denom); return !!found; }, `denom:${denom} chainName:${chainName}`); }; export const getAssetBySymbol = (assets, symbol, chainName) => { return getAssetByKeyValue(assets, 'symbol', symbol, chainName); }; export const getDenomByCoinGeckoId = (assets, coinGeckoId, chainName) => { return getAssetByKeyValue(assets, 'coingeckoId', coinGeckoId, chainName) ?.base; }; export 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; }; export 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; }; export const getSymbolByDenom = (assets, denom, chainName) => { return getAssetByDenom(assets, denom, chainName)?.symbol; }; export const getDenomBySymbol = (assets, symbol, chainName) => { return getAssetByKeyValue(assets, 'symbol', symbol, chainName)?.base; }; export const getExponentFromAsset = (asset) => { return asset.denomUnits.find(({ denom }) => denom === asset.display) ?.exponent; }; export const getExponentByDenomFromAsset = (asset, denom) => { return asset.denomUnits.find((unit) => { return unit.denom === denom || unit?.aliases?.find(a => a === denom); }) ?.exponent; }; export const getExponentByDenom = (assets, denom, chainName) => { const asset = getAssetByDenom(assets, denom, chainName); return asset ? getExponentFromAsset(asset) : undefined; }; export const getExponentBySymbol = (assets, symbol, chainName) => { const asset = getAssetBySymbol(assets, symbol, chainName); return asset ? getExponentFromAsset(asset) : undefined; }; export const getNativeAssetByChainName = (assets, chainName) => { const assetList = customFind(assets, (assetList) => assetList.chainName === chainName && !assetList.assets[0].base.startsWith('ibc/'), `chainName:${chainName}`); return assetList?.assets[0]; }; export const getAssetLogoByDenom = (assets, denom, chainName) => { const asset = getAssetByDenom(assets, denom, chainName); return Object.values(asset?.logoURIs || {})[0]; }; export const getChainLogo = (assets, chainName) => { const nativeAsset = getNativeAssetByChainName(assets, chainName); return Object.values(nativeAsset?.logoURIs || {})[0]; }; export const getAssetNameByDenom = (assets, denom, chainName) => { const asset = getAssetByDenom(assets, denom, chainName); return asset?.name; }; export const getChainNameByDenom = (assets, denom) => { const isIbcDenom = denom.startsWith('ibc/'); if (isIbcDenom) { const asset = getAssetByDenom(assets, denom); return asset?.traces?.find((t) => t.type === 'ibc')?.counterparty ?.chainName; } return customFind(assets, (assetList) => assetList.assets.some((asset) => asset.base === denom), `denom:${denom}`)?.chainName; }; export const getChainByStakingDenom = (chains, denom) => customFind(chains, (chain) => !!chain.staking?.stakingTokens.find((token) => token.denom === denom), `denom:${denom}`); export const getChainNameByStakingDenom = (chains, denom) => getChainByStakingDenom(chains, denom)?.chainName;