@chain-registry/utils
Version:
Chain Registry Utils
119 lines (118 loc) • 6.36 kB
JavaScript
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;
;