@xchainjs/xchain-midgard-query 0.1.2 → 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/index.esm.js CHANGED
@@ -63,7 +63,7 @@ class Midgard {
63
63
  return saverDetails;
64
64
  }
65
65
  catch (e) {
66
- //console.error(e)
66
+ // console.error(e)
67
67
  }
68
68
  }
69
69
  throw Error(`Midgard not responding`);
@@ -80,7 +80,7 @@ class Midgard {
80
80
  return (yield api.getPools()).data;
81
81
  }
82
82
  catch (e) {
83
- //console.error(e)
83
+ // console.error(e)
84
84
  }
85
85
  }
86
86
  throw new Error(`Midgard not responding`);
@@ -136,13 +136,13 @@ const MILLISECOND_CACHE_POOLS = 5000;
136
136
  const MILLISECOND_CACHE_SAVERS = 5000;
137
137
  const defaultMidgard = new Midgard();
138
138
  /**
139
- * This class manages retrieving information from Midgard API and cached it
139
+ * This class retrieves raw information from Midgard API and cached it
140
140
  */
141
141
  class MidgardCache {
142
142
  /**
143
143
  * Constructor to create a ThorchainCache
144
144
  *
145
- * @param midgard - an instance of the midgard API (could be pointing to stagenet,testnet,mainnet)
145
+ * @param {Midgard} midgard - an instance of the midgard API (could be pointing to stagenet,testnet,mainnet)
146
146
  * @returns MidgardCache
147
147
  */
148
148
  constructor(midgard = defaultMidgard) {
@@ -150,11 +150,22 @@ class MidgardCache {
150
150
  this.cachedPools = new CachedValue(() => this.midgard.getPools(), MILLISECOND_CACHE_POOLS);
151
151
  this.cachedSavers = new CachedValue(() => this.midgard.getSavers(''), MILLISECOND_CACHE_SAVERS);
152
152
  }
153
+ /**
154
+ * Get info about existing pools in the protocol from Midgard API
155
+ *
156
+ * @returns {PoolDetail[]} Array of pools
157
+ */
153
158
  getPools() {
154
159
  return __awaiter(this, void 0, void 0, function* () {
155
160
  return this.cachedPools.getValue();
156
161
  });
157
162
  }
163
+ /**
164
+ * Returns the information of all the positions of a set of addresses in the THORChain savers product.
165
+ *
166
+ * @param {String} address Comma separated list of addresses
167
+ * @returns {SaverDetails} Array of savers positions
168
+ */
158
169
  getSavers(address) {
159
170
  return __awaiter(this, void 0, void 0, function* () {
160
171
  return this.cachedSavers.getValue(address);
@@ -171,18 +182,25 @@ const isAssetRuneNative = (asset) => assetToString(asset) === assetToString(Asse
171
182
  const DEFAULT_THORCHAIN_DECIMALS = 8;
172
183
  const defaultCache = new MidgardCache();
173
184
  /**
174
- * THORChain Class for getting data from Midgard API (THORChain L2 Api).
185
+ * Class for getting data and process from Midgard API using MidgardCache for optimize request number (THORChain L2 Api).
175
186
  */
176
187
  class MidgardQuery {
177
188
  /**
178
- * Contructor to create a ThorchainAMM
189
+ * Contructor to create a MidgardQuery
179
190
  *
180
191
  * @param midgardCache - an instance of the midgardCache (could be pointing to stagenet,testnet,mainnet)
181
- * @returns ThorchainAMM
192
+ * @returns MidgardQuery
182
193
  */
183
194
  constructor(midgardCache = defaultCache) {
184
195
  this.midgardCache = midgardCache;
185
196
  }
197
+ /**
198
+ * Get pool by asset
199
+ *
200
+ * @param {string} asset In example: BTC.BTC
201
+ * @returns {PoolDetail} Details of selected pool
202
+ * @throws {Error} Can't find pool for asset
203
+ */
186
204
  getPool(asset) {
187
205
  return __awaiter(this, void 0, void 0, function* () {
188
206
  const pools = yield this.midgardCache.getPools();
@@ -193,6 +211,12 @@ class MidgardQuery {
193
211
  return pool;
194
212
  });
195
213
  }
214
+ /**
215
+ * Get saver positions by array of saver descriptions
216
+ *
217
+ * @param {getSaver[]} params array of search conditions
218
+ * @returns {SaversPosition[]} Information on the positions found
219
+ */
196
220
  getSaverPositions(params) {
197
221
  return __awaiter(this, void 0, void 0, function* () {
198
222
  const addresses = new Set();
@@ -229,6 +253,12 @@ class MidgardQuery {
229
253
  return saversPositions;
230
254
  });
231
255
  }
256
+ /**
257
+ * Returns number of decimals by asset
258
+ *
259
+ * @param {Asset} asset asset for getting decimals
260
+ * @returns {number} Number of decimals from Midgard https://gitlab.com/thorchain/midgard#refresh-native-decimals
261
+ */
232
262
  getDecimalForAsset(asset) {
233
263
  return __awaiter(this, void 0, void 0, function* () {
234
264
  if (!isAssetRuneNative(asset)) {
@@ -1 +1 @@
1
- {"version":3,"file":"index.esm.js","sources":["../src/utils/midgard.ts","../src/midgard-cache.ts","../src/utils/const.ts","../src/midgard-query.ts"],"sourcesContent":["import { Network } from '@xchainjs/xchain-client'\nimport {\n Configuration,\n MidgardApi,\n PoolDetail,\n ReverseTHORNames,\n SaverDetails,\n THORNameDetails,\n} from '@xchainjs/xchain-midgard'\nimport axios from 'axios'\nimport axiosRetry from 'axios-retry'\n\nimport { MidgardConfig } from '../types'\n\nconst defaultMidgardConfig: Record<Network, MidgardConfig> = {\n mainnet: {\n apiRetries: 3,\n midgardBaseUrls: ['https://midgard.ninerealms.com'],\n },\n stagenet: {\n apiRetries: 3,\n midgardBaseUrls: ['https://stagenet-midgard.ninerealms.com'],\n },\n testnet: {\n apiRetries: 3,\n midgardBaseUrls: ['https://testnet.midgard.thorchain.info'],\n },\n}\n\nexport class Midgard {\n private config: MidgardConfig\n readonly network: Network\n private midgardApis: MidgardApi[]\n\n constructor(network: Network = Network.Mainnet, config?: MidgardConfig) {\n this.network = network\n this.config = config ?? defaultMidgardConfig[this.network]\n axiosRetry(axios, { retries: this.config.apiRetries, retryDelay: axiosRetry.exponentialDelay })\n this.midgardApis = this.config.midgardBaseUrls.map(\n (url: string) => new MidgardApi(new Configuration({ basePath: url })),\n )\n }\n\n /**\n * Function to return member details based on valid liquidity position\n * @param address - query can also be multiple addresses should be separated by comma\n * @returns - object type of Member Detail\n */\n public async getSavers(address: string): Promise<SaverDetails> {\n for (const api of this.midgardApis) {\n try {\n const saverDetails = (await api.getSaverDetail(address)).data\n return saverDetails\n } catch (e) {\n //console.error(e)\n }\n }\n throw Error(`Midgard not responding`)\n }\n\n /**\n *\n * @returns an array of Pools\n */\n async getPools(): Promise<PoolDetail[]> {\n for (const api of this.midgardApis) {\n try {\n return (await api.getPools()).data\n } catch (e) {\n //console.error(e)\n }\n }\n throw new Error(`Midgard not responding`)\n }\n\n public async getTHORNameDetails(name: string): Promise<THORNameDetails | undefined> {\n for (const api of this.midgardApis) {\n try {\n const resp = await api.getTHORNameDetail(name)\n if (resp.status == 404) {\n return undefined\n } else if (resp.status == 200) {\n return resp.data\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } catch (e: any) {\n if (e.response.status == 404) {\n return undefined\n }\n }\n }\n throw Error(`Midgard not responding`)\n }\n\n public async getTHORNameReverseLookup(address: string): Promise<ReverseTHORNames | undefined> {\n for (const api of this.midgardApis) {\n try {\n const resp = await api.getTHORNamesByAddress(address)\n if (resp.status == 404) {\n return []\n } else if (resp.status == 200) {\n return resp.data\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } catch (e: any) {\n if (e.response.status == 404) {\n return []\n }\n }\n }\n throw Error(`Midgard not responding`)\n }\n}\n","import { PoolDetail, SaverDetails } from '@xchainjs/xchain-midgard'\nimport { CachedValue } from '@xchainjs/xchain-util'\n\nimport { Midgard } from './utils/midgard'\n\nconst MILLISECOND_CACHE_POOLS = 5000\nconst MILLISECOND_CACHE_SAVERS = 5000\n\nconst defaultMidgard = new Midgard()\n\n/**\n * This class manages retrieving information from Midgard API and cached it\n */\nexport class MidgardCache {\n readonly midgard: Midgard\n private readonly cachedPools: CachedValue<PoolDetail[]>\n private readonly cachedSavers: CachedValue<SaverDetails>\n /**\n * Constructor to create a ThorchainCache\n *\n * @param midgard - an instance of the midgard API (could be pointing to stagenet,testnet,mainnet)\n * @returns MidgardCache\n */\n constructor(midgard = defaultMidgard) {\n this.midgard = midgard\n this.cachedPools = new CachedValue<PoolDetail[]>(() => this.midgard.getPools(), MILLISECOND_CACHE_POOLS)\n this.cachedSavers = new CachedValue<SaverDetails>(() => this.midgard.getSavers(''), MILLISECOND_CACHE_SAVERS)\n }\n\n public async getPools(): Promise<PoolDetail[]> {\n return this.cachedPools.getValue()\n }\n\n public async getSavers(address: string): Promise<SaverDetails> {\n return this.cachedSavers.getValue(address)\n }\n}\n","import { Asset, assetFromStringEx, assetToString } from '@xchainjs/xchain-util'\n\nexport const AssetAVAX = assetFromStringEx('AVAX.AVAX')\nexport const AssetBTC = assetFromStringEx('BTC.BTC')\nexport const AssetATOM = assetFromStringEx('GAIA.ATOM')\nexport const AssetRuneNative = assetFromStringEx('THOR.RUNE')\n\nexport const BTCChain = 'BTC'\nexport const GAIAChain = 'GAIA'\nexport const AVAXChain = 'AVAX'\n\nexport const isAssetRuneNative = (asset: Asset): boolean => assetToString(asset) === assetToString(AssetRuneNative)\n","import { PoolDetail } from '@xchainjs/xchain-midgard'\nimport { Asset, CryptoAmount, assetFromString, assetToString, baseAmount } from '@xchainjs/xchain-util'\n\nimport { MidgardCache } from './midgard-cache'\nimport { SaversPosition, getSaver } from './types'\nimport { isAssetRuneNative } from './utils/const'\n\nconst DEFAULT_THORCHAIN_DECIMALS = 8\n\nconst defaultCache = new MidgardCache()\n\n/**\n * THORChain Class for getting data from Midgard API (THORChain L2 Api).\n */\nexport class MidgardQuery {\n readonly midgardCache: MidgardCache\n\n /**\n * Contructor to create a ThorchainAMM\n *\n * @param midgardCache - an instance of the midgardCache (could be pointing to stagenet,testnet,mainnet)\n * @returns ThorchainAMM\n */\n constructor(midgardCache = defaultCache) {\n this.midgardCache = midgardCache\n }\n\n private async getPool(asset: string): Promise<PoolDetail> {\n const pools = await this.midgardCache.getPools()\n const pool = pools.find((pool) => pool.asset === asset)\n if (!pool) {\n throw new Error(`Can't find pool for asset: ${asset}`)\n }\n return pool\n }\n\n public async getSaverPositions(params: getSaver[]): Promise<SaversPosition[]> {\n const addresses: Set<string> = new Set<string>()\n params.forEach((param) => addresses.add(param.address))\n const addressesString: string = Array.from(addresses).join(',')\n const saversDetail = await this.midgardCache.getSavers(addressesString)\n const errors: string[] = []\n\n const saversPositions: SaversPosition[] = []\n const allPositionsPromises = saversDetail.pools.map(async (saver) => {\n const asset = assetFromString(saver.pool)\n\n if (asset) {\n const poolDetail = await this.getPool(saver.pool)\n const depositAmount = new CryptoAmount(baseAmount(saver.assetAdded).minus(saver.assetWithdrawn), asset)\n const ownerUnits = Number(saver?.saverUnits)\n const saverUnits = Number(poolDetail.saversUnits)\n const assetDepth = Number(poolDetail.saversDepth)\n const redeemableValue = (ownerUnits / saverUnits) * assetDepth\n const redeemableAssetAmount = new CryptoAmount(baseAmount(redeemableValue), asset)\n const saverGrowth = redeemableAssetAmount.minus(depositAmount).div(depositAmount).times(100)\n const saversAge = (Date.now() / 1000 - Number(saver.dateLastAdded)) / (365 * 86400)\n\n saversPositions.push({\n depositValue: depositAmount,\n redeemableValue: redeemableAssetAmount,\n lastAddHeight: -1,\n percentageGrowth: saverGrowth.assetAmount.amount().toNumber(),\n ageInYears: saversAge,\n ageInDays: saversAge * 365,\n asset,\n errors,\n })\n }\n })\n await Promise.all(allPositionsPromises)\n return saversPositions\n }\n\n public async getDecimalForAsset(asset: Asset): Promise<number> {\n if (!isAssetRuneNative(asset)) {\n const pool = await this.getPool(assetToString(asset))\n const decimals = Number(pool.nativeDecimal)\n if (decimals > 0) return decimals\n else return DEFAULT_THORCHAIN_DECIMALS\n }\n return DEFAULT_THORCHAIN_DECIMALS\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.esm.js","sources":["../src/utils/midgard.ts","../src/midgard-cache.ts","../src/utils/const.ts","../src/midgard-query.ts"],"sourcesContent":["import { Network } from '@xchainjs/xchain-client'\nimport {\n Configuration,\n MidgardApi,\n PoolDetail,\n ReverseTHORNames,\n SaverDetails,\n THORNameDetails,\n} from '@xchainjs/xchain-midgard'\nimport axios from 'axios'\nimport axiosRetry from 'axios-retry'\n\nimport { MidgardConfig } from '../types'\n\nconst defaultMidgardConfig: Record<Network, MidgardConfig> = {\n mainnet: {\n apiRetries: 3,\n midgardBaseUrls: ['https://midgard.ninerealms.com'],\n },\n stagenet: {\n apiRetries: 3,\n midgardBaseUrls: ['https://stagenet-midgard.ninerealms.com'],\n },\n testnet: {\n apiRetries: 3,\n midgardBaseUrls: ['https://testnet.midgard.thorchain.info'],\n },\n}\n\nexport class Midgard {\n private config: MidgardConfig\n readonly network: Network\n private midgardApis: MidgardApi[]\n\n constructor(network: Network = Network.Mainnet, config?: MidgardConfig) {\n this.network = network\n this.config = config ?? defaultMidgardConfig[this.network]\n axiosRetry(axios, { retries: this.config.apiRetries, retryDelay: axiosRetry.exponentialDelay })\n this.midgardApis = this.config.midgardBaseUrls.map(\n (url: string) => new MidgardApi(new Configuration({ basePath: url })),\n )\n }\n\n /**\n * Function to return member details based on valid liquidity position\n * @param address - query can also be multiple addresses should be separated by comma\n * @returns - object type of Member Detail\n */\n public async getSavers(address: string): Promise<SaverDetails> {\n for (const api of this.midgardApis) {\n try {\n const saverDetails = (await api.getSaverDetail(address)).data\n return saverDetails\n } catch (e) {\n // console.error(e)\n }\n }\n throw Error(`Midgard not responding`)\n }\n\n /**\n *\n * @returns an array of Pools\n */\n async getPools(): Promise<PoolDetail[]> {\n for (const api of this.midgardApis) {\n try {\n return (await api.getPools()).data\n } catch (e) {\n // console.error(e)\n }\n }\n throw new Error(`Midgard not responding`)\n }\n\n public async getTHORNameDetails(name: string): Promise<THORNameDetails | undefined> {\n for (const api of this.midgardApis) {\n try {\n const resp = await api.getTHORNameDetail(name)\n if (resp.status == 404) {\n return undefined\n } else if (resp.status == 200) {\n return resp.data\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } catch (e: any) {\n if (e.response.status == 404) {\n return undefined\n }\n }\n }\n throw Error(`Midgard not responding`)\n }\n\n public async getTHORNameReverseLookup(address: string): Promise<ReverseTHORNames | undefined> {\n for (const api of this.midgardApis) {\n try {\n const resp = await api.getTHORNamesByAddress(address)\n if (resp.status == 404) {\n return []\n } else if (resp.status == 200) {\n return resp.data\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } catch (e: any) {\n if (e.response.status == 404) {\n return []\n }\n }\n }\n throw Error(`Midgard not responding`)\n }\n}\n","import { PoolDetail, SaverDetails } from '@xchainjs/xchain-midgard'\nimport { CachedValue } from '@xchainjs/xchain-util'\n\nimport { Midgard } from './utils/midgard'\n\nconst MILLISECOND_CACHE_POOLS = 5000\nconst MILLISECOND_CACHE_SAVERS = 5000\n\nconst defaultMidgard = new Midgard()\n\n/**\n * This class retrieves raw information from Midgard API and cached it\n */\nexport class MidgardCache {\n readonly midgard: Midgard\n private readonly cachedPools: CachedValue<PoolDetail[]>\n private readonly cachedSavers: CachedValue<SaverDetails>\n /**\n * Constructor to create a ThorchainCache\n *\n * @param {Midgard} midgard - an instance of the midgard API (could be pointing to stagenet,testnet,mainnet)\n * @returns MidgardCache\n */\n constructor(midgard = defaultMidgard) {\n this.midgard = midgard\n this.cachedPools = new CachedValue<PoolDetail[]>(() => this.midgard.getPools(), MILLISECOND_CACHE_POOLS)\n this.cachedSavers = new CachedValue<SaverDetails>(() => this.midgard.getSavers(''), MILLISECOND_CACHE_SAVERS)\n }\n\n /**\n * Get info about existing pools in the protocol from Midgard API\n *\n * @returns {PoolDetail[]} Array of pools\n */\n public async getPools(): Promise<PoolDetail[]> {\n return this.cachedPools.getValue()\n }\n\n /**\n * Returns the information of all the positions of a set of addresses in the THORChain savers product.\n *\n * @param {String} address Comma separated list of addresses\n * @returns {SaverDetails} Array of savers positions\n */\n public async getSavers(address: string): Promise<SaverDetails> {\n return this.cachedSavers.getValue(address)\n }\n}\n","import { Asset, assetFromStringEx, assetToString } from '@xchainjs/xchain-util'\n\nexport const AssetAVAX = assetFromStringEx('AVAX.AVAX')\nexport const AssetBTC = assetFromStringEx('BTC.BTC')\nexport const AssetATOM = assetFromStringEx('GAIA.ATOM')\nexport const AssetRuneNative = assetFromStringEx('THOR.RUNE')\n\nexport const BTCChain = 'BTC'\nexport const GAIAChain = 'GAIA'\nexport const AVAXChain = 'AVAX'\n\nexport const isAssetRuneNative = (asset: Asset): boolean => assetToString(asset) === assetToString(AssetRuneNative)\n","import { PoolDetail } from '@xchainjs/xchain-midgard'\nimport { Asset, CryptoAmount, assetFromString, assetToString, baseAmount } from '@xchainjs/xchain-util'\n\nimport { MidgardCache } from './midgard-cache'\nimport { SaversPosition, getSaver } from './types'\nimport { isAssetRuneNative } from './utils/const'\n\nconst DEFAULT_THORCHAIN_DECIMALS = 8\n\nconst defaultCache = new MidgardCache()\n\n/**\n * Class for getting data and process from Midgard API using MidgardCache for optimize request number (THORChain L2 Api).\n */\nexport class MidgardQuery {\n readonly midgardCache: MidgardCache\n\n /**\n * Contructor to create a MidgardQuery\n *\n * @param midgardCache - an instance of the midgardCache (could be pointing to stagenet,testnet,mainnet)\n * @returns MidgardQuery\n */\n constructor(midgardCache = defaultCache) {\n this.midgardCache = midgardCache\n }\n\n /**\n * Get pool by asset\n *\n * @param {string} asset In example: BTC.BTC\n * @returns {PoolDetail} Details of selected pool\n * @throws {Error} Can't find pool for asset\n */\n private async getPool(asset: string): Promise<PoolDetail> {\n const pools = await this.midgardCache.getPools()\n const pool = pools.find((pool) => pool.asset === asset)\n if (!pool) {\n throw new Error(`Can't find pool for asset: ${asset}`)\n }\n return pool\n }\n\n /**\n * Get saver positions by array of saver descriptions\n *\n * @param {getSaver[]} params array of search conditions\n * @returns {SaversPosition[]} Information on the positions found\n */\n public async getSaverPositions(params: getSaver[]): Promise<SaversPosition[]> {\n const addresses: Set<string> = new Set<string>()\n params.forEach((param) => addresses.add(param.address))\n const addressesString: string = Array.from(addresses).join(',')\n const saversDetail = await this.midgardCache.getSavers(addressesString)\n const errors: string[] = []\n\n const saversPositions: SaversPosition[] = []\n const allPositionsPromises = saversDetail.pools.map(async (saver) => {\n const asset = assetFromString(saver.pool)\n\n if (asset) {\n const poolDetail = await this.getPool(saver.pool)\n const depositAmount = new CryptoAmount(baseAmount(saver.assetAdded).minus(saver.assetWithdrawn), asset)\n const ownerUnits = Number(saver?.saverUnits)\n const saverUnits = Number(poolDetail.saversUnits)\n const assetDepth = Number(poolDetail.saversDepth)\n const redeemableValue = (ownerUnits / saverUnits) * assetDepth\n const redeemableAssetAmount = new CryptoAmount(baseAmount(redeemableValue), asset)\n const saverGrowth = redeemableAssetAmount.minus(depositAmount).div(depositAmount).times(100)\n const saversAge = (Date.now() / 1000 - Number(saver.dateLastAdded)) / (365 * 86400)\n\n saversPositions.push({\n depositValue: depositAmount,\n redeemableValue: redeemableAssetAmount,\n lastAddHeight: -1,\n percentageGrowth: saverGrowth.assetAmount.amount().toNumber(),\n ageInYears: saversAge,\n ageInDays: saversAge * 365,\n asset,\n errors,\n })\n }\n })\n await Promise.all(allPositionsPromises)\n return saversPositions\n }\n\n /**\n * Returns number of decimals by asset\n *\n * @param {Asset} asset asset for getting decimals\n * @returns {number} Number of decimals from Midgard https://gitlab.com/thorchain/midgard#refresh-native-decimals\n */\n public async getDecimalForAsset(asset: Asset): Promise<number> {\n if (!isAssetRuneNative(asset)) {\n const pool = await this.getPool(assetToString(asset))\n const decimals = Number(pool.nativeDecimal)\n if (decimals > 0) return decimals\n else return DEFAULT_THORCHAIN_DECIMALS\n }\n return DEFAULT_THORCHAIN_DECIMALS\n }\n}\n"],"names":[],"mappings":"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"}
package/lib/index.js CHANGED
@@ -72,7 +72,7 @@ class Midgard {
72
72
  return saverDetails;
73
73
  }
74
74
  catch (e) {
75
- //console.error(e)
75
+ // console.error(e)
76
76
  }
77
77
  }
78
78
  throw Error(`Midgard not responding`);
@@ -89,7 +89,7 @@ class Midgard {
89
89
  return (yield api.getPools()).data;
90
90
  }
91
91
  catch (e) {
92
- //console.error(e)
92
+ // console.error(e)
93
93
  }
94
94
  }
95
95
  throw new Error(`Midgard not responding`);
@@ -145,13 +145,13 @@ const MILLISECOND_CACHE_POOLS = 5000;
145
145
  const MILLISECOND_CACHE_SAVERS = 5000;
146
146
  const defaultMidgard = new Midgard();
147
147
  /**
148
- * This class manages retrieving information from Midgard API and cached it
148
+ * This class retrieves raw information from Midgard API and cached it
149
149
  */
150
150
  class MidgardCache {
151
151
  /**
152
152
  * Constructor to create a ThorchainCache
153
153
  *
154
- * @param midgard - an instance of the midgard API (could be pointing to stagenet,testnet,mainnet)
154
+ * @param {Midgard} midgard - an instance of the midgard API (could be pointing to stagenet,testnet,mainnet)
155
155
  * @returns MidgardCache
156
156
  */
157
157
  constructor(midgard = defaultMidgard) {
@@ -159,11 +159,22 @@ class MidgardCache {
159
159
  this.cachedPools = new xchainUtil.CachedValue(() => this.midgard.getPools(), MILLISECOND_CACHE_POOLS);
160
160
  this.cachedSavers = new xchainUtil.CachedValue(() => this.midgard.getSavers(''), MILLISECOND_CACHE_SAVERS);
161
161
  }
162
+ /**
163
+ * Get info about existing pools in the protocol from Midgard API
164
+ *
165
+ * @returns {PoolDetail[]} Array of pools
166
+ */
162
167
  getPools() {
163
168
  return __awaiter(this, void 0, void 0, function* () {
164
169
  return this.cachedPools.getValue();
165
170
  });
166
171
  }
172
+ /**
173
+ * Returns the information of all the positions of a set of addresses in the THORChain savers product.
174
+ *
175
+ * @param {String} address Comma separated list of addresses
176
+ * @returns {SaverDetails} Array of savers positions
177
+ */
167
178
  getSavers(address) {
168
179
  return __awaiter(this, void 0, void 0, function* () {
169
180
  return this.cachedSavers.getValue(address);
@@ -180,18 +191,25 @@ const isAssetRuneNative = (asset) => xchainUtil.assetToString(asset) === xchainU
180
191
  const DEFAULT_THORCHAIN_DECIMALS = 8;
181
192
  const defaultCache = new MidgardCache();
182
193
  /**
183
- * THORChain Class for getting data from Midgard API (THORChain L2 Api).
194
+ * Class for getting data and process from Midgard API using MidgardCache for optimize request number (THORChain L2 Api).
184
195
  */
185
196
  class MidgardQuery {
186
197
  /**
187
- * Contructor to create a ThorchainAMM
198
+ * Contructor to create a MidgardQuery
188
199
  *
189
200
  * @param midgardCache - an instance of the midgardCache (could be pointing to stagenet,testnet,mainnet)
190
- * @returns ThorchainAMM
201
+ * @returns MidgardQuery
191
202
  */
192
203
  constructor(midgardCache = defaultCache) {
193
204
  this.midgardCache = midgardCache;
194
205
  }
206
+ /**
207
+ * Get pool by asset
208
+ *
209
+ * @param {string} asset In example: BTC.BTC
210
+ * @returns {PoolDetail} Details of selected pool
211
+ * @throws {Error} Can't find pool for asset
212
+ */
195
213
  getPool(asset) {
196
214
  return __awaiter(this, void 0, void 0, function* () {
197
215
  const pools = yield this.midgardCache.getPools();
@@ -202,6 +220,12 @@ class MidgardQuery {
202
220
  return pool;
203
221
  });
204
222
  }
223
+ /**
224
+ * Get saver positions by array of saver descriptions
225
+ *
226
+ * @param {getSaver[]} params array of search conditions
227
+ * @returns {SaversPosition[]} Information on the positions found
228
+ */
205
229
  getSaverPositions(params) {
206
230
  return __awaiter(this, void 0, void 0, function* () {
207
231
  const addresses = new Set();
@@ -238,6 +262,12 @@ class MidgardQuery {
238
262
  return saversPositions;
239
263
  });
240
264
  }
265
+ /**
266
+ * Returns number of decimals by asset
267
+ *
268
+ * @param {Asset} asset asset for getting decimals
269
+ * @returns {number} Number of decimals from Midgard https://gitlab.com/thorchain/midgard#refresh-native-decimals
270
+ */
241
271
  getDecimalForAsset(asset) {
242
272
  return __awaiter(this, void 0, void 0, function* () {
243
273
  if (!isAssetRuneNative(asset)) {
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/utils/midgard.ts","../src/midgard-cache.ts","../src/utils/const.ts","../src/midgard-query.ts"],"sourcesContent":["import { Network } from '@xchainjs/xchain-client'\nimport {\n Configuration,\n MidgardApi,\n PoolDetail,\n ReverseTHORNames,\n SaverDetails,\n THORNameDetails,\n} from '@xchainjs/xchain-midgard'\nimport axios from 'axios'\nimport axiosRetry from 'axios-retry'\n\nimport { MidgardConfig } from '../types'\n\nconst defaultMidgardConfig: Record<Network, MidgardConfig> = {\n mainnet: {\n apiRetries: 3,\n midgardBaseUrls: ['https://midgard.ninerealms.com'],\n },\n stagenet: {\n apiRetries: 3,\n midgardBaseUrls: ['https://stagenet-midgard.ninerealms.com'],\n },\n testnet: {\n apiRetries: 3,\n midgardBaseUrls: ['https://testnet.midgard.thorchain.info'],\n },\n}\n\nexport class Midgard {\n private config: MidgardConfig\n readonly network: Network\n private midgardApis: MidgardApi[]\n\n constructor(network: Network = Network.Mainnet, config?: MidgardConfig) {\n this.network = network\n this.config = config ?? defaultMidgardConfig[this.network]\n axiosRetry(axios, { retries: this.config.apiRetries, retryDelay: axiosRetry.exponentialDelay })\n this.midgardApis = this.config.midgardBaseUrls.map(\n (url: string) => new MidgardApi(new Configuration({ basePath: url })),\n )\n }\n\n /**\n * Function to return member details based on valid liquidity position\n * @param address - query can also be multiple addresses should be separated by comma\n * @returns - object type of Member Detail\n */\n public async getSavers(address: string): Promise<SaverDetails> {\n for (const api of this.midgardApis) {\n try {\n const saverDetails = (await api.getSaverDetail(address)).data\n return saverDetails\n } catch (e) {\n //console.error(e)\n }\n }\n throw Error(`Midgard not responding`)\n }\n\n /**\n *\n * @returns an array of Pools\n */\n async getPools(): Promise<PoolDetail[]> {\n for (const api of this.midgardApis) {\n try {\n return (await api.getPools()).data\n } catch (e) {\n //console.error(e)\n }\n }\n throw new Error(`Midgard not responding`)\n }\n\n public async getTHORNameDetails(name: string): Promise<THORNameDetails | undefined> {\n for (const api of this.midgardApis) {\n try {\n const resp = await api.getTHORNameDetail(name)\n if (resp.status == 404) {\n return undefined\n } else if (resp.status == 200) {\n return resp.data\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } catch (e: any) {\n if (e.response.status == 404) {\n return undefined\n }\n }\n }\n throw Error(`Midgard not responding`)\n }\n\n public async getTHORNameReverseLookup(address: string): Promise<ReverseTHORNames | undefined> {\n for (const api of this.midgardApis) {\n try {\n const resp = await api.getTHORNamesByAddress(address)\n if (resp.status == 404) {\n return []\n } else if (resp.status == 200) {\n return resp.data\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } catch (e: any) {\n if (e.response.status == 404) {\n return []\n }\n }\n }\n throw Error(`Midgard not responding`)\n }\n}\n","import { PoolDetail, SaverDetails } from '@xchainjs/xchain-midgard'\nimport { CachedValue } from '@xchainjs/xchain-util'\n\nimport { Midgard } from './utils/midgard'\n\nconst MILLISECOND_CACHE_POOLS = 5000\nconst MILLISECOND_CACHE_SAVERS = 5000\n\nconst defaultMidgard = new Midgard()\n\n/**\n * This class manages retrieving information from Midgard API and cached it\n */\nexport class MidgardCache {\n readonly midgard: Midgard\n private readonly cachedPools: CachedValue<PoolDetail[]>\n private readonly cachedSavers: CachedValue<SaverDetails>\n /**\n * Constructor to create a ThorchainCache\n *\n * @param midgard - an instance of the midgard API (could be pointing to stagenet,testnet,mainnet)\n * @returns MidgardCache\n */\n constructor(midgard = defaultMidgard) {\n this.midgard = midgard\n this.cachedPools = new CachedValue<PoolDetail[]>(() => this.midgard.getPools(), MILLISECOND_CACHE_POOLS)\n this.cachedSavers = new CachedValue<SaverDetails>(() => this.midgard.getSavers(''), MILLISECOND_CACHE_SAVERS)\n }\n\n public async getPools(): Promise<PoolDetail[]> {\n return this.cachedPools.getValue()\n }\n\n public async getSavers(address: string): Promise<SaverDetails> {\n return this.cachedSavers.getValue(address)\n }\n}\n","import { Asset, assetFromStringEx, assetToString } from '@xchainjs/xchain-util'\n\nexport const AssetAVAX = assetFromStringEx('AVAX.AVAX')\nexport const AssetBTC = assetFromStringEx('BTC.BTC')\nexport const AssetATOM = assetFromStringEx('GAIA.ATOM')\nexport const AssetRuneNative = assetFromStringEx('THOR.RUNE')\n\nexport const BTCChain = 'BTC'\nexport const GAIAChain = 'GAIA'\nexport const AVAXChain = 'AVAX'\n\nexport const isAssetRuneNative = (asset: Asset): boolean => assetToString(asset) === assetToString(AssetRuneNative)\n","import { PoolDetail } from '@xchainjs/xchain-midgard'\nimport { Asset, CryptoAmount, assetFromString, assetToString, baseAmount } from '@xchainjs/xchain-util'\n\nimport { MidgardCache } from './midgard-cache'\nimport { SaversPosition, getSaver } from './types'\nimport { isAssetRuneNative } from './utils/const'\n\nconst DEFAULT_THORCHAIN_DECIMALS = 8\n\nconst defaultCache = new MidgardCache()\n\n/**\n * THORChain Class for getting data from Midgard API (THORChain L2 Api).\n */\nexport class MidgardQuery {\n readonly midgardCache: MidgardCache\n\n /**\n * Contructor to create a ThorchainAMM\n *\n * @param midgardCache - an instance of the midgardCache (could be pointing to stagenet,testnet,mainnet)\n * @returns ThorchainAMM\n */\n constructor(midgardCache = defaultCache) {\n this.midgardCache = midgardCache\n }\n\n private async getPool(asset: string): Promise<PoolDetail> {\n const pools = await this.midgardCache.getPools()\n const pool = pools.find((pool) => pool.asset === asset)\n if (!pool) {\n throw new Error(`Can't find pool for asset: ${asset}`)\n }\n return pool\n }\n\n public async getSaverPositions(params: getSaver[]): Promise<SaversPosition[]> {\n const addresses: Set<string> = new Set<string>()\n params.forEach((param) => addresses.add(param.address))\n const addressesString: string = Array.from(addresses).join(',')\n const saversDetail = await this.midgardCache.getSavers(addressesString)\n const errors: string[] = []\n\n const saversPositions: SaversPosition[] = []\n const allPositionsPromises = saversDetail.pools.map(async (saver) => {\n const asset = assetFromString(saver.pool)\n\n if (asset) {\n const poolDetail = await this.getPool(saver.pool)\n const depositAmount = new CryptoAmount(baseAmount(saver.assetAdded).minus(saver.assetWithdrawn), asset)\n const ownerUnits = Number(saver?.saverUnits)\n const saverUnits = Number(poolDetail.saversUnits)\n const assetDepth = Number(poolDetail.saversDepth)\n const redeemableValue = (ownerUnits / saverUnits) * assetDepth\n const redeemableAssetAmount = new CryptoAmount(baseAmount(redeemableValue), asset)\n const saverGrowth = redeemableAssetAmount.minus(depositAmount).div(depositAmount).times(100)\n const saversAge = (Date.now() / 1000 - Number(saver.dateLastAdded)) / (365 * 86400)\n\n saversPositions.push({\n depositValue: depositAmount,\n redeemableValue: redeemableAssetAmount,\n lastAddHeight: -1,\n percentageGrowth: saverGrowth.assetAmount.amount().toNumber(),\n ageInYears: saversAge,\n ageInDays: saversAge * 365,\n asset,\n errors,\n })\n }\n })\n await Promise.all(allPositionsPromises)\n return saversPositions\n }\n\n public async getDecimalForAsset(asset: Asset): Promise<number> {\n if (!isAssetRuneNative(asset)) {\n const pool = await this.getPool(assetToString(asset))\n const decimals = Number(pool.nativeDecimal)\n if (decimals > 0) return decimals\n else return DEFAULT_THORCHAIN_DECIMALS\n }\n return DEFAULT_THORCHAIN_DECIMALS\n }\n}\n"],"names":["Network","axiosRetry","axios","MidgardApi","Configuration","CachedValue","assetFromStringEx","assetToString","assetFromString","CryptoAmount","baseAmount"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/utils/midgard.ts","../src/midgard-cache.ts","../src/utils/const.ts","../src/midgard-query.ts"],"sourcesContent":["import { Network } from '@xchainjs/xchain-client'\nimport {\n Configuration,\n MidgardApi,\n PoolDetail,\n ReverseTHORNames,\n SaverDetails,\n THORNameDetails,\n} from '@xchainjs/xchain-midgard'\nimport axios from 'axios'\nimport axiosRetry from 'axios-retry'\n\nimport { MidgardConfig } from '../types'\n\nconst defaultMidgardConfig: Record<Network, MidgardConfig> = {\n mainnet: {\n apiRetries: 3,\n midgardBaseUrls: ['https://midgard.ninerealms.com'],\n },\n stagenet: {\n apiRetries: 3,\n midgardBaseUrls: ['https://stagenet-midgard.ninerealms.com'],\n },\n testnet: {\n apiRetries: 3,\n midgardBaseUrls: ['https://testnet.midgard.thorchain.info'],\n },\n}\n\nexport class Midgard {\n private config: MidgardConfig\n readonly network: Network\n private midgardApis: MidgardApi[]\n\n constructor(network: Network = Network.Mainnet, config?: MidgardConfig) {\n this.network = network\n this.config = config ?? defaultMidgardConfig[this.network]\n axiosRetry(axios, { retries: this.config.apiRetries, retryDelay: axiosRetry.exponentialDelay })\n this.midgardApis = this.config.midgardBaseUrls.map(\n (url: string) => new MidgardApi(new Configuration({ basePath: url })),\n )\n }\n\n /**\n * Function to return member details based on valid liquidity position\n * @param address - query can also be multiple addresses should be separated by comma\n * @returns - object type of Member Detail\n */\n public async getSavers(address: string): Promise<SaverDetails> {\n for (const api of this.midgardApis) {\n try {\n const saverDetails = (await api.getSaverDetail(address)).data\n return saverDetails\n } catch (e) {\n // console.error(e)\n }\n }\n throw Error(`Midgard not responding`)\n }\n\n /**\n *\n * @returns an array of Pools\n */\n async getPools(): Promise<PoolDetail[]> {\n for (const api of this.midgardApis) {\n try {\n return (await api.getPools()).data\n } catch (e) {\n // console.error(e)\n }\n }\n throw new Error(`Midgard not responding`)\n }\n\n public async getTHORNameDetails(name: string): Promise<THORNameDetails | undefined> {\n for (const api of this.midgardApis) {\n try {\n const resp = await api.getTHORNameDetail(name)\n if (resp.status == 404) {\n return undefined\n } else if (resp.status == 200) {\n return resp.data\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } catch (e: any) {\n if (e.response.status == 404) {\n return undefined\n }\n }\n }\n throw Error(`Midgard not responding`)\n }\n\n public async getTHORNameReverseLookup(address: string): Promise<ReverseTHORNames | undefined> {\n for (const api of this.midgardApis) {\n try {\n const resp = await api.getTHORNamesByAddress(address)\n if (resp.status == 404) {\n return []\n } else if (resp.status == 200) {\n return resp.data\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } catch (e: any) {\n if (e.response.status == 404) {\n return []\n }\n }\n }\n throw Error(`Midgard not responding`)\n }\n}\n","import { PoolDetail, SaverDetails } from '@xchainjs/xchain-midgard'\nimport { CachedValue } from '@xchainjs/xchain-util'\n\nimport { Midgard } from './utils/midgard'\n\nconst MILLISECOND_CACHE_POOLS = 5000\nconst MILLISECOND_CACHE_SAVERS = 5000\n\nconst defaultMidgard = new Midgard()\n\n/**\n * This class retrieves raw information from Midgard API and cached it\n */\nexport class MidgardCache {\n readonly midgard: Midgard\n private readonly cachedPools: CachedValue<PoolDetail[]>\n private readonly cachedSavers: CachedValue<SaverDetails>\n /**\n * Constructor to create a ThorchainCache\n *\n * @param {Midgard} midgard - an instance of the midgard API (could be pointing to stagenet,testnet,mainnet)\n * @returns MidgardCache\n */\n constructor(midgard = defaultMidgard) {\n this.midgard = midgard\n this.cachedPools = new CachedValue<PoolDetail[]>(() => this.midgard.getPools(), MILLISECOND_CACHE_POOLS)\n this.cachedSavers = new CachedValue<SaverDetails>(() => this.midgard.getSavers(''), MILLISECOND_CACHE_SAVERS)\n }\n\n /**\n * Get info about existing pools in the protocol from Midgard API\n *\n * @returns {PoolDetail[]} Array of pools\n */\n public async getPools(): Promise<PoolDetail[]> {\n return this.cachedPools.getValue()\n }\n\n /**\n * Returns the information of all the positions of a set of addresses in the THORChain savers product.\n *\n * @param {String} address Comma separated list of addresses\n * @returns {SaverDetails} Array of savers positions\n */\n public async getSavers(address: string): Promise<SaverDetails> {\n return this.cachedSavers.getValue(address)\n }\n}\n","import { Asset, assetFromStringEx, assetToString } from '@xchainjs/xchain-util'\n\nexport const AssetAVAX = assetFromStringEx('AVAX.AVAX')\nexport const AssetBTC = assetFromStringEx('BTC.BTC')\nexport const AssetATOM = assetFromStringEx('GAIA.ATOM')\nexport const AssetRuneNative = assetFromStringEx('THOR.RUNE')\n\nexport const BTCChain = 'BTC'\nexport const GAIAChain = 'GAIA'\nexport const AVAXChain = 'AVAX'\n\nexport const isAssetRuneNative = (asset: Asset): boolean => assetToString(asset) === assetToString(AssetRuneNative)\n","import { PoolDetail } from '@xchainjs/xchain-midgard'\nimport { Asset, CryptoAmount, assetFromString, assetToString, baseAmount } from '@xchainjs/xchain-util'\n\nimport { MidgardCache } from './midgard-cache'\nimport { SaversPosition, getSaver } from './types'\nimport { isAssetRuneNative } from './utils/const'\n\nconst DEFAULT_THORCHAIN_DECIMALS = 8\n\nconst defaultCache = new MidgardCache()\n\n/**\n * Class for getting data and process from Midgard API using MidgardCache for optimize request number (THORChain L2 Api).\n */\nexport class MidgardQuery {\n readonly midgardCache: MidgardCache\n\n /**\n * Contructor to create a MidgardQuery\n *\n * @param midgardCache - an instance of the midgardCache (could be pointing to stagenet,testnet,mainnet)\n * @returns MidgardQuery\n */\n constructor(midgardCache = defaultCache) {\n this.midgardCache = midgardCache\n }\n\n /**\n * Get pool by asset\n *\n * @param {string} asset In example: BTC.BTC\n * @returns {PoolDetail} Details of selected pool\n * @throws {Error} Can't find pool for asset\n */\n private async getPool(asset: string): Promise<PoolDetail> {\n const pools = await this.midgardCache.getPools()\n const pool = pools.find((pool) => pool.asset === asset)\n if (!pool) {\n throw new Error(`Can't find pool for asset: ${asset}`)\n }\n return pool\n }\n\n /**\n * Get saver positions by array of saver descriptions\n *\n * @param {getSaver[]} params array of search conditions\n * @returns {SaversPosition[]} Information on the positions found\n */\n public async getSaverPositions(params: getSaver[]): Promise<SaversPosition[]> {\n const addresses: Set<string> = new Set<string>()\n params.forEach((param) => addresses.add(param.address))\n const addressesString: string = Array.from(addresses).join(',')\n const saversDetail = await this.midgardCache.getSavers(addressesString)\n const errors: string[] = []\n\n const saversPositions: SaversPosition[] = []\n const allPositionsPromises = saversDetail.pools.map(async (saver) => {\n const asset = assetFromString(saver.pool)\n\n if (asset) {\n const poolDetail = await this.getPool(saver.pool)\n const depositAmount = new CryptoAmount(baseAmount(saver.assetAdded).minus(saver.assetWithdrawn), asset)\n const ownerUnits = Number(saver?.saverUnits)\n const saverUnits = Number(poolDetail.saversUnits)\n const assetDepth = Number(poolDetail.saversDepth)\n const redeemableValue = (ownerUnits / saverUnits) * assetDepth\n const redeemableAssetAmount = new CryptoAmount(baseAmount(redeemableValue), asset)\n const saverGrowth = redeemableAssetAmount.minus(depositAmount).div(depositAmount).times(100)\n const saversAge = (Date.now() / 1000 - Number(saver.dateLastAdded)) / (365 * 86400)\n\n saversPositions.push({\n depositValue: depositAmount,\n redeemableValue: redeemableAssetAmount,\n lastAddHeight: -1,\n percentageGrowth: saverGrowth.assetAmount.amount().toNumber(),\n ageInYears: saversAge,\n ageInDays: saversAge * 365,\n asset,\n errors,\n })\n }\n })\n await Promise.all(allPositionsPromises)\n return saversPositions\n }\n\n /**\n * Returns number of decimals by asset\n *\n * @param {Asset} asset asset for getting decimals\n * @returns {number} Number of decimals from Midgard https://gitlab.com/thorchain/midgard#refresh-native-decimals\n */\n public async getDecimalForAsset(asset: Asset): Promise<number> {\n if (!isAssetRuneNative(asset)) {\n const pool = await this.getPool(assetToString(asset))\n const decimals = Number(pool.nativeDecimal)\n if (decimals > 0) return decimals\n else return DEFAULT_THORCHAIN_DECIMALS\n }\n return DEFAULT_THORCHAIN_DECIMALS\n }\n}\n"],"names":["Network","axiosRetry","axios","MidgardApi","Configuration","CachedValue","assetFromStringEx","assetToString","assetFromString","CryptoAmount","baseAmount"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { PoolDetail, SaverDetails } from '@xchainjs/xchain-midgard';
2
2
  import { Midgard } from './utils/midgard';
3
3
  /**
4
- * This class manages retrieving information from Midgard API and cached it
4
+ * This class retrieves raw information from Midgard API and cached it
5
5
  */
6
6
  export declare class MidgardCache {
7
7
  readonly midgard: Midgard;
@@ -10,10 +10,21 @@ export declare class MidgardCache {
10
10
  /**
11
11
  * Constructor to create a ThorchainCache
12
12
  *
13
- * @param midgard - an instance of the midgard API (could be pointing to stagenet,testnet,mainnet)
13
+ * @param {Midgard} midgard - an instance of the midgard API (could be pointing to stagenet,testnet,mainnet)
14
14
  * @returns MidgardCache
15
15
  */
16
16
  constructor(midgard?: Midgard);
17
+ /**
18
+ * Get info about existing pools in the protocol from Midgard API
19
+ *
20
+ * @returns {PoolDetail[]} Array of pools
21
+ */
17
22
  getPools(): Promise<PoolDetail[]>;
23
+ /**
24
+ * Returns the information of all the positions of a set of addresses in the THORChain savers product.
25
+ *
26
+ * @param {String} address Comma separated list of addresses
27
+ * @returns {SaverDetails} Array of savers positions
28
+ */
18
29
  getSavers(address: string): Promise<SaverDetails>;
19
30
  }
@@ -2,18 +2,37 @@ import { Asset } from '@xchainjs/xchain-util';
2
2
  import { MidgardCache } from './midgard-cache';
3
3
  import { SaversPosition, getSaver } from './types';
4
4
  /**
5
- * THORChain Class for getting data from Midgard API (THORChain L2 Api).
5
+ * Class for getting data and process from Midgard API using MidgardCache for optimize request number (THORChain L2 Api).
6
6
  */
7
7
  export declare class MidgardQuery {
8
8
  readonly midgardCache: MidgardCache;
9
9
  /**
10
- * Contructor to create a ThorchainAMM
10
+ * Contructor to create a MidgardQuery
11
11
  *
12
12
  * @param midgardCache - an instance of the midgardCache (could be pointing to stagenet,testnet,mainnet)
13
- * @returns ThorchainAMM
13
+ * @returns MidgardQuery
14
14
  */
15
15
  constructor(midgardCache?: MidgardCache);
16
+ /**
17
+ * Get pool by asset
18
+ *
19
+ * @param {string} asset In example: BTC.BTC
20
+ * @returns {PoolDetail} Details of selected pool
21
+ * @throws {Error} Can't find pool for asset
22
+ */
16
23
  private getPool;
24
+ /**
25
+ * Get saver positions by array of saver descriptions
26
+ *
27
+ * @param {getSaver[]} params array of search conditions
28
+ * @returns {SaversPosition[]} Information on the positions found
29
+ */
17
30
  getSaverPositions(params: getSaver[]): Promise<SaversPosition[]>;
31
+ /**
32
+ * Returns number of decimals by asset
33
+ *
34
+ * @param {Asset} asset asset for getting decimals
35
+ * @returns {number} Number of decimals from Midgard https://gitlab.com/thorchain/midgard#refresh-native-decimals
36
+ */
18
37
  getDecimalForAsset(asset: Asset): Promise<number>;
19
38
  }
package/lib/types.d.ts CHANGED
@@ -1,4 +1,7 @@
1
1
  import { Address, Asset, CryptoAmount } from '@xchainjs/xchain-util';
2
+ /**
3
+ * Search parameters to search for positions within the THORChain SAVER investment product trunks.
4
+ */
2
5
  export type getSaver = {
3
6
  asset: Asset;
4
7
  address: Address;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xchainjs/xchain-midgard-query",
3
- "version": "0.1.2",
3
+ "version": "0.1.3",
4
4
  "license": "MIT",
5
5
  "description": "Module that is responsible for get data from Midgard API",
6
6
  "keywords": [
@@ -33,7 +33,7 @@
33
33
  },
34
34
  "devDependencies": {
35
35
  "@xchainjs/xchain-client": "^0.14.2",
36
- "@xchainjs/xchain-midgard": "^0.5.1",
36
+ "@xchainjs/xchain-midgard": "^0.5.2",
37
37
  "@xchainjs/xchain-util": "^0.13.1",
38
38
  "axios": "^1.3.6",
39
39
  "axios-retry": "^3.2.5",
@@ -41,7 +41,7 @@
41
41
  },
42
42
  "peerDependencies": {
43
43
  "@xchainjs/xchain-client": "^0.14.2",
44
- "@xchainjs/xchain-midgard": "^0.5.1",
44
+ "@xchainjs/xchain-midgard": "^0.5.2",
45
45
  "@xchainjs/xchain-util": "^0.13.1",
46
46
  "axios": "^1.3.6",
47
47
  "axios-retry": "^3.2.5",
@@ -50,4 +50,4 @@
50
50
  "publishConfig": {
51
51
  "access": "public"
52
52
  }
53
- }
53
+ }