@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 +37 -7
- package/lib/index.esm.js.map +1 -1
- package/lib/index.js +37 -7
- package/lib/index.js.map +1 -1
- package/lib/midgard-cache.d.ts +13 -2
- package/lib/midgard-query.d.ts +22 -3
- package/lib/types.d.ts +3 -0
- package/package.json +4 -4
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
|
|
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
|
-
*
|
|
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
|
|
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
|
|
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)) {
|
package/lib/index.esm.js.map
CHANGED
|
@@ -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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAcA,MAAM,oBAAoB,GAAmC;AAC3D,IAAA,OAAO,EAAE;AACP,QAAA,UAAU,EAAE,CAAC;QACb,eAAe,EAAE,CAAC,gCAAgC,CAAC;AACpD,KAAA;AACD,IAAA,QAAQ,EAAE;AACR,QAAA,UAAU,EAAE,CAAC;QACb,eAAe,EAAE,CAAC,yCAAyC,CAAC;AAC7D,KAAA;AACD,IAAA,OAAO,EAAE;AACP,QAAA,UAAU,EAAE,CAAC;QACb,eAAe,EAAE,CAAC,wCAAwC,CAAC;AAC5D,KAAA;CACF,CAAA;MAEY,OAAO,CAAA;AAKlB,IAAA,WAAA,CAAY,OAAmB,GAAA,OAAO,CAAC,OAAO,EAAE,MAAsB,EAAA;AACpE,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;AACtB,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,aAAN,MAAM,KAAA,KAAA,CAAA,GAAN,MAAM,GAAI,oBAAoB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;AAC1D,QAAA,UAAU,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,CAAC,gBAAgB,EAAE,CAAC,CAAA;AAC/F,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,GAAG,CAChD,CAAC,GAAW,KAAK,IAAI,UAAU,CAAC,IAAI,aAAa,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,CACtE,CAAA;KACF;AAED;;;;AAIG;AACU,IAAA,SAAS,CAAC,OAAe,EAAA;;AACpC,YAAA,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,WAAW,EAAE;gBAClC,IAAI;AACF,oBAAA,MAAM,YAAY,GAAG,CAAC,MAAM,GAAG,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,IAAI,CAAA;AAC7D,oBAAA,OAAO,YAAY,CAAA;AACpB,iBAAA;AAAC,gBAAA,OAAO,CAAC,EAAE;;AAEX,iBAAA;AACF,aAAA;AACD,YAAA,MAAM,KAAK,CAAC,CAAwB,sBAAA,CAAA,CAAC,CAAA;SACtC,CAAA,CAAA;AAAA,KAAA;AAED;;;AAGG;IACG,QAAQ,GAAA;;AACZ,YAAA,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,WAAW,EAAE;gBAClC,IAAI;oBACF,OAAO,CAAC,MAAM,GAAG,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAA;AACnC,iBAAA;AAAC,gBAAA,OAAO,CAAC,EAAE;;AAEX,iBAAA;AACF,aAAA;AACD,YAAA,MAAM,IAAI,KAAK,CAAC,CAAA,sBAAA,CAAwB,CAAC,CAAA;SAC1C,CAAA,CAAA;AAAA,KAAA;AAEY,IAAA,kBAAkB,CAAC,IAAY,EAAA;;AAC1C,YAAA,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,WAAW,EAAE;gBAClC,IAAI;oBACF,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAA;AAC9C,oBAAA,IAAI,IAAI,CAAC,MAAM,IAAI,GAAG,EAAE;AACtB,wBAAA,OAAO,SAAS,CAAA;AACjB,qBAAA;AAAM,yBAAA,IAAI,IAAI,CAAC,MAAM,IAAI,GAAG,EAAE;wBAC7B,OAAO,IAAI,CAAC,IAAI,CAAA;AACjB,qBAAA;;AAEF,iBAAA;AAAC,gBAAA,OAAO,CAAM,EAAE;AACf,oBAAA,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,IAAI,GAAG,EAAE;AAC5B,wBAAA,OAAO,SAAS,CAAA;AACjB,qBAAA;AACF,iBAAA;AACF,aAAA;AACD,YAAA,MAAM,KAAK,CAAC,CAAwB,sBAAA,CAAA,CAAC,CAAA;SACtC,CAAA,CAAA;AAAA,KAAA;AAEY,IAAA,wBAAwB,CAAC,OAAe,EAAA;;AACnD,YAAA,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,WAAW,EAAE;gBAClC,IAAI;oBACF,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAA;AACrD,oBAAA,IAAI,IAAI,CAAC,MAAM,IAAI,GAAG,EAAE;AACtB,wBAAA,OAAO,EAAE,CAAA;AACV,qBAAA;AAAM,yBAAA,IAAI,IAAI,CAAC,MAAM,IAAI,GAAG,EAAE;wBAC7B,OAAO,IAAI,CAAC,IAAI,CAAA;AACjB,qBAAA;;AAEF,iBAAA;AAAC,gBAAA,OAAO,CAAM,EAAE;AACf,oBAAA,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,IAAI,GAAG,EAAE;AAC5B,wBAAA,OAAO,EAAE,CAAA;AACV,qBAAA;AACF,iBAAA;AACF,aAAA;AACD,YAAA,MAAM,KAAK,CAAC,CAAwB,sBAAA,CAAA,CAAC,CAAA;SACtC,CAAA,CAAA;AAAA,KAAA;AACF;;AC3GD,MAAM,uBAAuB,GAAG,IAAI,CAAA;AACpC,MAAM,wBAAwB,GAAG,IAAI,CAAA;AAErC,MAAM,cAAc,GAAG,IAAI,OAAO,EAAE,CAAA;AAEpC;;AAEG;MACU,YAAY,CAAA;AAIvB;;;;;AAKG;IACH,WAAY,CAAA,OAAO,GAAG,cAAc,EAAA;AAClC,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;AACtB,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,WAAW,CAAe,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,uBAAuB,CAAC,CAAA;QACxG,IAAI,CAAC,YAAY,GAAG,IAAI,WAAW,CAAe,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,wBAAwB,CAAC,CAAA;KAC9G;AAED;;;;AAIG;IACU,QAAQ,GAAA;;AACnB,YAAA,OAAO,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAA;SACnC,CAAA,CAAA;AAAA,KAAA;AAED;;;;;AAKG;AACU,IAAA,SAAS,CAAC,OAAe,EAAA;;YACpC,OAAO,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;SAC3C,CAAA,CAAA;AAAA,KAAA;AACF;;AC7CwB,iBAAiB,CAAC,WAAW,EAAC;AAC/B,iBAAiB,CAAC,SAAS,EAAC;AAC3B,iBAAiB,CAAC,WAAW,EAAC;AAChD,MAAM,eAAe,GAAG,iBAAiB,CAAC,WAAW,CAAC,CAAA;AAMtD,MAAM,iBAAiB,GAAG,CAAC,KAAY,KAAc,aAAa,CAAC,KAAK,CAAC,KAAK,aAAa,CAAC,eAAe,CAAC;;ACJnH,MAAM,0BAA0B,GAAG,CAAC,CAAA;AAEpC,MAAM,YAAY,GAAG,IAAI,YAAY,EAAE,CAAA;AAEvC;;AAEG;MACU,YAAY,CAAA;AAGvB;;;;;AAKG;IACH,WAAY,CAAA,YAAY,GAAG,YAAY,EAAA;AACrC,QAAA,IAAI,CAAC,YAAY,GAAG,YAAY,CAAA;KACjC;AAED;;;;;;AAMG;AACW,IAAA,OAAO,CAAC,KAAa,EAAA;;YACjC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAA;AAChD,YAAA,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,KAAK,KAAK,CAAC,CAAA;YACvD,IAAI,CAAC,IAAI,EAAE;AACT,gBAAA,MAAM,IAAI,KAAK,CAAC,8BAA8B,KAAK,CAAA,CAAE,CAAC,CAAA;AACvD,aAAA;AACD,YAAA,OAAO,IAAI,CAAA;SACZ,CAAA,CAAA;AAAA,KAAA;AAED;;;;;AAKG;AACU,IAAA,iBAAiB,CAAC,MAAkB,EAAA;;AAC/C,YAAA,MAAM,SAAS,GAAgB,IAAI,GAAG,EAAU,CAAA;AAChD,YAAA,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAA;AACvD,YAAA,MAAM,eAAe,GAAW,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YAC/D,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,eAAe,CAAC,CAAA;YACvE,MAAM,MAAM,GAAa,EAAE,CAAA;YAE3B,MAAM,eAAe,GAAqB,EAAE,CAAA;YAC5C,MAAM,oBAAoB,GAAG,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAO,KAAK,KAAI,SAAA,CAAA,IAAA,EAAA,KAAA,CAAA,EAAA,KAAA,CAAA,EAAA,aAAA;gBAClE,MAAM,KAAK,GAAG,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;AAEzC,gBAAA,IAAI,KAAK,EAAE;oBACT,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;oBACjD,MAAM,aAAa,GAAG,IAAI,YAAY,CAAC,UAAU,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,cAAc,CAAC,EAAE,KAAK,CAAC,CAAA;AACvG,oBAAA,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,KAAA,IAAA,IAAL,KAAK,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAL,KAAK,CAAE,UAAU,CAAC,CAAA;oBAC5C,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,CAAA;oBACjD,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,CAAA;oBACjD,MAAM,eAAe,GAAG,CAAC,UAAU,GAAG,UAAU,IAAI,UAAU,CAAA;AAC9D,oBAAA,MAAM,qBAAqB,GAAG,IAAI,YAAY,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,KAAK,CAAC,CAAA;AAClF,oBAAA,MAAM,WAAW,GAAG,qBAAqB,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;oBAC5F,MAAM,SAAS,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,GAAG,GAAG,KAAK,CAAC,CAAA;oBAEnF,eAAe,CAAC,IAAI,CAAC;AACnB,wBAAA,YAAY,EAAE,aAAa;AAC3B,wBAAA,eAAe,EAAE,qBAAqB;wBACtC,aAAa,EAAE,CAAC,CAAC;wBACjB,gBAAgB,EAAE,WAAW,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;AAC7D,wBAAA,UAAU,EAAE,SAAS;wBACrB,SAAS,EAAE,SAAS,GAAG,GAAG;wBAC1B,KAAK;wBACL,MAAM;AACP,qBAAA,CAAC,CAAA;AACH,iBAAA;aACF,CAAA,CAAC,CAAA;AACF,YAAA,MAAM,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAA;AACvC,YAAA,OAAO,eAAe,CAAA;SACvB,CAAA,CAAA;AAAA,KAAA;AAED;;;;;AAKG;AACU,IAAA,kBAAkB,CAAC,KAAY,EAAA;;AAC1C,YAAA,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,EAAE;AAC7B,gBAAA,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAA;gBACrD,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;gBAC3C,IAAI,QAAQ,GAAG,CAAC;AAAE,oBAAA,OAAO,QAAQ,CAAA;;AAC5B,oBAAA,OAAO,0BAA0B,CAAA;AACvC,aAAA;AACD,YAAA,OAAO,0BAA0B,CAAA;SAClC,CAAA,CAAA;AAAA,KAAA;AACF;;;;"}
|
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
|
|
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
|
-
*
|
|
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
|
|
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
|
|
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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAcA,MAAM,oBAAoB,GAAmC;AAC3D,IAAA,OAAO,EAAE;AACP,QAAA,UAAU,EAAE,CAAC;QACb,eAAe,EAAE,CAAC,gCAAgC,CAAC;AACpD,KAAA;AACD,IAAA,QAAQ,EAAE;AACR,QAAA,UAAU,EAAE,CAAC;QACb,eAAe,EAAE,CAAC,yCAAyC,CAAC;AAC7D,KAAA;AACD,IAAA,OAAO,EAAE;AACP,QAAA,UAAU,EAAE,CAAC;QACb,eAAe,EAAE,CAAC,wCAAwC,CAAC;AAC5D,KAAA;CACF,CAAA;MAEY,OAAO,CAAA;AAKlB,IAAA,WAAA,CAAY,OAAmB,GAAAA,oBAAO,CAAC,OAAO,EAAE,MAAsB,EAAA;AACpE,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;AACtB,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,aAAN,MAAM,KAAA,KAAA,CAAA,GAAN,MAAM,GAAI,oBAAoB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;AAC1D,QAAAC,8BAAU,CAACC,yBAAK,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,UAAU,EAAED,8BAAU,CAAC,gBAAgB,EAAE,CAAC,CAAA;AAC/F,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,GAAG,CAChD,CAAC,GAAW,KAAK,IAAIE,wBAAU,CAAC,IAAIC,2BAAa,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,CACtE,CAAA;KACF;AAED;;;;AAIG;AACU,IAAA,SAAS,CAAC,OAAe,EAAA;;AACpC,YAAA,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,WAAW,EAAE;gBAClC,IAAI;AACF,oBAAA,MAAM,YAAY,GAAG,CAAC,MAAM,GAAG,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,IAAI,CAAA;AAC7D,oBAAA,OAAO,YAAY,CAAA;AACpB,iBAAA;AAAC,gBAAA,OAAO,CAAC,EAAE;;AAEX,iBAAA;AACF,aAAA;AACD,YAAA,MAAM,KAAK,CAAC,CAAwB,sBAAA,CAAA,CAAC,CAAA;SACtC,CAAA,CAAA;AAAA,KAAA;AAED;;;AAGG;IACG,QAAQ,GAAA;;AACZ,YAAA,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,WAAW,EAAE;gBAClC,IAAI;oBACF,OAAO,CAAC,MAAM,GAAG,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAA;AACnC,iBAAA;AAAC,gBAAA,OAAO,CAAC,EAAE;;AAEX,iBAAA;AACF,aAAA;AACD,YAAA,MAAM,IAAI,KAAK,CAAC,CAAA,sBAAA,CAAwB,CAAC,CAAA;SAC1C,CAAA,CAAA;AAAA,KAAA;AAEY,IAAA,kBAAkB,CAAC,IAAY,EAAA;;AAC1C,YAAA,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,WAAW,EAAE;gBAClC,IAAI;oBACF,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAA;AAC9C,oBAAA,IAAI,IAAI,CAAC,MAAM,IAAI,GAAG,EAAE;AACtB,wBAAA,OAAO,SAAS,CAAA;AACjB,qBAAA;AAAM,yBAAA,IAAI,IAAI,CAAC,MAAM,IAAI,GAAG,EAAE;wBAC7B,OAAO,IAAI,CAAC,IAAI,CAAA;AACjB,qBAAA;;AAEF,iBAAA;AAAC,gBAAA,OAAO,CAAM,EAAE;AACf,oBAAA,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,IAAI,GAAG,EAAE;AAC5B,wBAAA,OAAO,SAAS,CAAA;AACjB,qBAAA;AACF,iBAAA;AACF,aAAA;AACD,YAAA,MAAM,KAAK,CAAC,CAAwB,sBAAA,CAAA,CAAC,CAAA;SACtC,CAAA,CAAA;AAAA,KAAA;AAEY,IAAA,wBAAwB,CAAC,OAAe,EAAA;;AACnD,YAAA,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,WAAW,EAAE;gBAClC,IAAI;oBACF,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAA;AACrD,oBAAA,IAAI,IAAI,CAAC,MAAM,IAAI,GAAG,EAAE;AACtB,wBAAA,OAAO,EAAE,CAAA;AACV,qBAAA;AAAM,yBAAA,IAAI,IAAI,CAAC,MAAM,IAAI,GAAG,EAAE;wBAC7B,OAAO,IAAI,CAAC,IAAI,CAAA;AACjB,qBAAA;;AAEF,iBAAA;AAAC,gBAAA,OAAO,CAAM,EAAE;AACf,oBAAA,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,IAAI,GAAG,EAAE;AAC5B,wBAAA,OAAO,EAAE,CAAA;AACV,qBAAA;AACF,iBAAA;AACF,aAAA;AACD,YAAA,MAAM,KAAK,CAAC,CAAwB,sBAAA,CAAA,CAAC,CAAA;SACtC,CAAA,CAAA;AAAA,KAAA;AACF;;AC3GD,MAAM,uBAAuB,GAAG,IAAI,CAAA;AACpC,MAAM,wBAAwB,GAAG,IAAI,CAAA;AAErC,MAAM,cAAc,GAAG,IAAI,OAAO,EAAE,CAAA;AAEpC;;AAEG;MACU,YAAY,CAAA;AAIvB;;;;;AAKG;IACH,WAAY,CAAA,OAAO,GAAG,cAAc,EAAA;AAClC,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;AACtB,QAAA,IAAI,CAAC,WAAW,GAAG,IAAIC,sBAAW,CAAe,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,uBAAuB,CAAC,CAAA;QACxG,IAAI,CAAC,YAAY,GAAG,IAAIA,sBAAW,CAAe,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,wBAAwB,CAAC,CAAA;KAC9G;AAED;;;;AAIG;IACU,QAAQ,GAAA;;AACnB,YAAA,OAAO,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAA;SACnC,CAAA,CAAA;AAAA,KAAA;AAED;;;;;AAKG;AACU,IAAA,SAAS,CAAC,OAAe,EAAA;;YACpC,OAAO,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;SAC3C,CAAA,CAAA;AAAA,KAAA;AACF;;AC7CwBC,4BAAiB,CAAC,WAAW,EAAC;AAC/BA,4BAAiB,CAAC,SAAS,EAAC;AAC3BA,4BAAiB,CAAC,WAAW,EAAC;AAChD,MAAM,eAAe,GAAGA,4BAAiB,CAAC,WAAW,CAAC,CAAA;AAMtD,MAAM,iBAAiB,GAAG,CAAC,KAAY,KAAcC,wBAAa,CAAC,KAAK,CAAC,KAAKA,wBAAa,CAAC,eAAe,CAAC;;ACJnH,MAAM,0BAA0B,GAAG,CAAC,CAAA;AAEpC,MAAM,YAAY,GAAG,IAAI,YAAY,EAAE,CAAA;AAEvC;;AAEG;MACU,YAAY,CAAA;AAGvB;;;;;AAKG;IACH,WAAY,CAAA,YAAY,GAAG,YAAY,EAAA;AACrC,QAAA,IAAI,CAAC,YAAY,GAAG,YAAY,CAAA;KACjC;AAED;;;;;;AAMG;AACW,IAAA,OAAO,CAAC,KAAa,EAAA;;YACjC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAA;AAChD,YAAA,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,KAAK,KAAK,CAAC,CAAA;YACvD,IAAI,CAAC,IAAI,EAAE;AACT,gBAAA,MAAM,IAAI,KAAK,CAAC,8BAA8B,KAAK,CAAA,CAAE,CAAC,CAAA;AACvD,aAAA;AACD,YAAA,OAAO,IAAI,CAAA;SACZ,CAAA,CAAA;AAAA,KAAA;AAED;;;;;AAKG;AACU,IAAA,iBAAiB,CAAC,MAAkB,EAAA;;AAC/C,YAAA,MAAM,SAAS,GAAgB,IAAI,GAAG,EAAU,CAAA;AAChD,YAAA,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAA;AACvD,YAAA,MAAM,eAAe,GAAW,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YAC/D,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,eAAe,CAAC,CAAA;YACvE,MAAM,MAAM,GAAa,EAAE,CAAA;YAE3B,MAAM,eAAe,GAAqB,EAAE,CAAA;YAC5C,MAAM,oBAAoB,GAAG,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAO,KAAK,KAAI,SAAA,CAAA,IAAA,EAAA,KAAA,CAAA,EAAA,KAAA,CAAA,EAAA,aAAA;gBAClE,MAAM,KAAK,GAAGC,0BAAe,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;AAEzC,gBAAA,IAAI,KAAK,EAAE;oBACT,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;oBACjD,MAAM,aAAa,GAAG,IAAIC,uBAAY,CAACC,qBAAU,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,cAAc,CAAC,EAAE,KAAK,CAAC,CAAA;AACvG,oBAAA,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,KAAA,IAAA,IAAL,KAAK,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAL,KAAK,CAAE,UAAU,CAAC,CAAA;oBAC5C,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,CAAA;oBACjD,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,CAAA;oBACjD,MAAM,eAAe,GAAG,CAAC,UAAU,GAAG,UAAU,IAAI,UAAU,CAAA;AAC9D,oBAAA,MAAM,qBAAqB,GAAG,IAAID,uBAAY,CAACC,qBAAU,CAAC,eAAe,CAAC,EAAE,KAAK,CAAC,CAAA;AAClF,oBAAA,MAAM,WAAW,GAAG,qBAAqB,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;oBAC5F,MAAM,SAAS,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,GAAG,GAAG,KAAK,CAAC,CAAA;oBAEnF,eAAe,CAAC,IAAI,CAAC;AACnB,wBAAA,YAAY,EAAE,aAAa;AAC3B,wBAAA,eAAe,EAAE,qBAAqB;wBACtC,aAAa,EAAE,CAAC,CAAC;wBACjB,gBAAgB,EAAE,WAAW,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;AAC7D,wBAAA,UAAU,EAAE,SAAS;wBACrB,SAAS,EAAE,SAAS,GAAG,GAAG;wBAC1B,KAAK;wBACL,MAAM;AACP,qBAAA,CAAC,CAAA;AACH,iBAAA;aACF,CAAA,CAAC,CAAA;AACF,YAAA,MAAM,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAA;AACvC,YAAA,OAAO,eAAe,CAAA;SACvB,CAAA,CAAA;AAAA,KAAA;AAED;;;;;AAKG;AACU,IAAA,kBAAkB,CAAC,KAAY,EAAA;;AAC1C,YAAA,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,EAAE;AAC7B,gBAAA,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAACH,wBAAa,CAAC,KAAK,CAAC,CAAC,CAAA;gBACrD,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;gBAC3C,IAAI,QAAQ,GAAG,CAAC;AAAE,oBAAA,OAAO,QAAQ,CAAA;;AAC5B,oBAAA,OAAO,0BAA0B,CAAA;AACvC,aAAA;AACD,YAAA,OAAO,0BAA0B,CAAA;SAClC,CAAA,CAAA;AAAA,KAAA;AACF;;;;;;"}
|
package/lib/midgard-cache.d.ts
CHANGED
|
@@ -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
|
|
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
|
}
|
package/lib/midgard-query.d.ts
CHANGED
|
@@ -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
|
-
*
|
|
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
|
|
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
|
|
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
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@xchainjs/xchain-midgard-query",
|
|
3
|
-
"version": "0.1.
|
|
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.
|
|
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.
|
|
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
|
+
}
|