UNPKG

@ping-pub/chain-registry-client

Version:

Cosmos Blockchain Registry Client

45 lines (40 loc) 1.52 kB
import fetch from "cross-fetch" import {Chain, Entry, AssetList, IBCPath, IBCPathInfo} from './types' export default class ChainRegistryClient{ readonly endpoint: string constructor(endpoint = 'https://registry.ping.pub') { this.endpoint = endpoint } async getAny(url : string): Promise<any> { return fetch(`${this.endpoint}${url}`).then((res) => res.json()) } async get<T>(url : string): Promise<T> { return fetch(`${this.endpoint}${url}`).then((res) => res.json()) } async fetchChainNames(): Promise<string[]> { const entris = await this.get<Entry[]>('/') return entris.filter( i => i.type === 'directory' && i.name !== 'testnet' && !i.name.startsWith('_')).map(x => x.name) } async fetchChainInfo(chainName: string) { return this.get<Chain>(`/${chainName}/chain.json`) } async fetchAssetsList(chainName: string) { return this.get<AssetList>(`/${chainName}/assetlist.json`) } async fetchIBCPaths() { const entries = await this.get<Entry[]>('/_IBC/') const re = /([\w]+)-([\w]+)\.json/; return entries.map(x => { const matches = x.name.match(re) const bridge = {} as IBCPath bridge.path = x.name bridge.from = matches[1] bridge.to = matches[2] return bridge }) } async fetchIBCPathInfo(path: string) { const info = await this.get<IBCPathInfo>(`/_IBC/${path}`) return info } }