@chain-registry/client
Version:
Chain Registry Client
60 lines (59 loc) • 2.26 kB
JavaScript
import { ChainRegistryChainUtil } from './chain-util';
import { ChainRegistryFetcher } from './fetcher';
export class ChainRegistryClient extends ChainRegistryFetcher {
_options = {
chainNames: [],
baseUrl: 'https://raw.githubusercontent.com/chain-registry/chain-registry/main/registries/original'
};
constructor(options) {
const { chainNames, assetListNames, ibcNamePairs, baseUrl, ...restOptions } = options;
super(restOptions);
this._options = {
...this._options,
chainNames: chainNames || this._options.chainNames,
assetListNames: assetListNames || this._options.assetListNames,
ibcNamePairs: ibcNamePairs || this._options.ibcNamePairs,
baseUrl: baseUrl || this._options.baseUrl
};
this.generateUrls();
}
generateUrls() {
const { chainNames, assetListNames, ibcNamePairs, baseUrl } = this._options;
const chainUrls = chainNames.map((chain) => {
return `${baseUrl}/${chain}/chain.json`;
});
const assetlistUrls = (assetListNames || chainNames).map((chain) => {
return `${baseUrl}/${chain}/assetlist.json`;
});
let namePairs = ibcNamePairs;
if (!namePairs) {
namePairs = [];
for (let i = 0; i < chainNames.length; i++) {
for (let j = i + 1; j < chainNames.length; j++) {
namePairs.push([chainNames[i], chainNames[j]]);
}
}
}
const ibcUrls = namePairs.map((namePair) => {
const fileName = namePair[0].localeCompare(namePair[1]) <= 0
? `${namePair[0]}-${namePair[1]}.json`
: `${namePair[1]}-${namePair[0]}.json`;
return `${baseUrl}/_IBC/${fileName}`;
});
this.urls = [
...new Set([
...chainUrls,
...assetlistUrls,
...ibcUrls,
...(this.urls || [])
])
];
}
getChainUtil(chainName) {
const chainInfo = this.getChainInfo(chainName);
return new ChainRegistryChainUtil({
chainName: chainName,
chainInfo: chainInfo
});
}
}