@xchainjs/xchain-mayachain-query 0.1.6 → 0.1.8

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
@@ -1,4 +1,4 @@
1
- import { assetFromStringEx, assetToString, baseAmount, CachedValue, CryptoAmount } from '@xchainjs/xchain-util';
1
+ import { assetFromStringEx, assetToString, baseAmount, CachedValue, CryptoAmount, isSynthAsset } from '@xchainjs/xchain-util';
2
2
  import { MidgardQuery } from '@xchainjs/xchain-mayamidgard-query';
3
3
  import { BigNumber } from 'bignumber.js';
4
4
  import { Network } from '@xchainjs/xchain-client';
@@ -135,25 +135,30 @@ const getBaseAmountWithDiffDecimals = (inputAmount, outDecimals) => {
135
135
  };
136
136
 
137
137
  /**
138
- * This class manages retrieving information from up to date Mayachain
138
+ * This class manages retrieving information from up-to-date Mayachain.
139
139
  */
140
140
  class MayachainCache {
141
141
  /**
142
- * Constructor to create a MayachainCache
142
+ * Constructor to create a MayachainCache.
143
143
  *
144
- * @param midgardQuery - an instance of the Maya MidgardQuery API
145
- * @param mayanode
146
- * @returns MayachainCache
144
+ * @param midgardQuery - An instance of the Maya MidgardQuery API.
145
+ * @param mayanode - An instance of the Maya Mayanode API.
146
+ * @param configuration - Optional configuration for the cache.
147
+ * @returns MayachainCache.
147
148
  */
148
149
  constructor(midgardQuery = new MidgardQuery(), mayanode = new Mayanode(), configuration) {
150
+ // Initialize instances and configuration
149
151
  this.midgardQuery = midgardQuery;
150
152
  this.mayanode = mayanode;
151
153
  this.conf = Object.assign({ expirationTimeInboundAddress: 6000 }, configuration);
154
+ // Initialize cached values
152
155
  this.inboundDetailCache = new CachedValue(() => this.refreshInboundDetailCache(), this.conf.expirationTimeInboundAddress);
156
+ this.assetDecimalsCache = new CachedValue(() => this.refreshAssetDecimalsCache());
153
157
  }
154
158
  /**
155
- * Get inbound addresses details
156
- * @returns Inbound details
159
+ * Get inbound addresses details.
160
+ *
161
+ * @returns Inbound details.
157
162
  */
158
163
  getInboundDetails() {
159
164
  return __awaiter(this, void 0, void 0, function* () {
@@ -163,10 +168,23 @@ class MayachainCache {
163
168
  });
164
169
  }
165
170
  /**
166
- * Refreshes the InboundDetailCache Cache
171
+ * Get the number of decimals of the supported Mayachain tokens.
172
+ *
173
+ * @returns {Record<string, number>} A record with the string asset notation as key and the number of decimals as value.
174
+ */
175
+ getAssetDecimals() {
176
+ return __awaiter(this, void 0, void 0, function* () {
177
+ if (!this.assetDecimalsCache)
178
+ throw Error(`Could not refresh assets decimals`);
179
+ return yield this.assetDecimalsCache.getValue();
180
+ });
181
+ }
182
+ /**
183
+ * Refreshes the InboundDetailCache cache.
167
184
  */
168
185
  refreshInboundDetailCache() {
169
186
  return __awaiter(this, void 0, void 0, function* () {
187
+ // Implementation details for refreshing the inbound detail cache
170
188
  const [mimirDetails, allInboundAddresses] = yield Promise.all([
171
189
  this.mayanode.getMimir(),
172
190
  this.mayanode.getInboundAddresses(),
@@ -211,6 +229,27 @@ class MayachainCache {
211
229
  return inboundDetails;
212
230
  });
213
231
  }
232
+ /**
233
+ * Refreshes the number of decimals of the supported Mayachain tokens.
234
+ */
235
+ refreshAssetDecimalsCache() {
236
+ return __awaiter(this, void 0, void 0, function* () {
237
+ // Implementation details for refreshing the asset decimals cache
238
+ // TODO: As soon as Mayachain returns native decimals from any endpoint of its API, refactor the function
239
+ return {
240
+ 'BTC.BTC': 8,
241
+ 'ETH.ETH': 18,
242
+ 'DASH.DASH': 8,
243
+ 'KUJI.KUJI': 6,
244
+ 'THOR.RUNE': 8,
245
+ 'MAYA.CACAO': 8,
246
+ 'ETH.USDT-0xdAC17F958D2ee523a2206206994597C13D831ec7': 6,
247
+ 'ETH.USDC-0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48': 6,
248
+ 'ETH.WSTETH-0X7F39C581F595B53C5CB19BD0B3F8DA6C935E2CA0': 18,
249
+ 'KUJI.USK': 6,
250
+ };
251
+ });
252
+ }
214
253
  }
215
254
 
216
255
  /**
@@ -226,19 +265,20 @@ class MayachainQuery {
226
265
  * @returns MayachainAMM
227
266
  */
228
267
  constructor(mayachainCache = new MayachainCache()) {
268
+ // Initialize MayachainCache instance
229
269
  this.mayachainCache = mayachainCache;
230
270
  }
231
271
  /**
232
- * Get the mayachain query is working with
272
+ * Get the Mayachain network.
233
273
  * @returns
234
274
  */
235
275
  getNetwork() {
236
276
  return this.mayachainCache.midgardQuery.getNetwork();
237
277
  }
238
278
  /**
239
- * Quote a swap
240
- * @param {QuoteSwapParams} quoteSwapParams - quote swap input params
241
- * @returns {QuoteSwap}
279
+ * Quote a swap operation.
280
+ * @param {QuoteSwapParams} quoteSwapParams - Parameters for the quote swap operation.
281
+ * @returns {QuoteSwap} A quote for the swap operation.
242
282
  */
243
283
  quoteSwap({ fromAsset, destinationAsset, amount, destinationAddress, toleranceBps, affiliateBps, affiliateAddress, height, }) {
244
284
  return __awaiter(this, void 0, void 0, function* () {
@@ -356,6 +396,23 @@ class MayachainQuery {
356
396
  return inboundDetails[chain];
357
397
  });
358
398
  }
399
+ /**
400
+ * Get asset decimals
401
+ * @param {Asset} asset
402
+ * @returns the asset decimals
403
+ * @throws {Error} if the asset is not supported in Mayachain
404
+ */
405
+ getAssetDecimals(asset) {
406
+ return __awaiter(this, void 0, void 0, function* () {
407
+ if (isSynthAsset(asset))
408
+ return DEFAULT_MAYACHAIN_DECIMALS;
409
+ const assetNotation = assetToString(asset);
410
+ const assetsDecimals = yield this.mayachainCache.getAssetDecimals();
411
+ if (!assetsDecimals[assetNotation])
412
+ throw Error(`Can not get decimals for ${assetNotation}`);
413
+ return assetsDecimals[assetNotation];
414
+ });
415
+ }
359
416
  }
360
417
 
361
418
  export { BtcAsset, BtcChain, CacaoAsset, DEFAULT_MAYACHAIN_DECIMALS, DashAsset, DashChain, EthAsset, EthChain, KujiraAsset, KujiraChain, MayaChain, MayachainCache, MayachainQuery, Mayanode, RuneAsset, ThorChain, getBaseAmountWithDiffDecimals, isCacaoAsset };
@@ -1 +1 @@
1
- {"version":3,"file":"index.esm.js","sources":["../src/utils/mayanode.ts","../src/utils/const.ts","../src/utils/utils.ts","../src/mayachain-cache.ts","../src/mayachain-query.ts"],"sourcesContent":["import { Network } from '@xchainjs/xchain-client'\nimport {\n Configuration,\n InboundAddress,\n MimirApi,\n MimirResponse,\n NetworkApi,\n QuoteApi,\n QuoteSwapResponse,\n} from '@xchainjs/xchain-mayanode'\nimport axios from 'axios'\nimport axiosRetry from 'axios-retry'\n\nexport type MayanodeConfig = {\n apiRetries: number\n mayanodeBaseUrls: string[]\n}\n\nconst defaultMayanodeConfig: Record<Network, MayanodeConfig> = {\n mainnet: {\n apiRetries: 3,\n mayanodeBaseUrls: ['https://mayanode.mayachain.info'],\n },\n stagenet: {\n apiRetries: 3,\n mayanodeBaseUrls: ['https://stagenet.mayanode.mayachain.info'],\n },\n testnet: {\n apiRetries: 3,\n // There is no testnet for mayanode\n mayanodeBaseUrls: ['https://stagenet.mayanode.mayachain.info'],\n },\n}\n\nexport class Mayanode {\n private config: MayanodeConfig\n private network: Network\n private quoteApis: QuoteApi[]\n private mimirApis: MimirApi[]\n private networkApis: NetworkApi[]\n\n constructor(network: Network = Network.Mainnet, config?: MayanodeConfig) {\n this.network = network\n this.config = config ?? defaultMayanodeConfig[this.network]\n this.quoteApis = this.config.mayanodeBaseUrls.map((url) => new QuoteApi(new Configuration({ basePath: url })))\n this.mimirApis = this.config.mayanodeBaseUrls.map((url) => new MimirApi(new Configuration({ basePath: url })))\n this.networkApis = this.config.mayanodeBaseUrls.map((url) => new NetworkApi(new Configuration({ basePath: url })))\n\n axiosRetry(axios, { retries: this.config.apiRetries, retryDelay: axiosRetry.exponentialDelay })\n }\n\n /**\n * TODO\n * @param fromAsset - input asset\n * @param toAsset - output asset\n * @param amount - amount to swap\n * @param destinationAddress - destination address for the swap\n * @param toleranceBps - slip percent\n * @param affiliateBps - affiliate percent\n * @param affiliate - affiliate address\n * @param height - block height\n * @returns quotes swap object response\n */\n public async getSwapQuote(\n fromAsset: string,\n toAsset: string,\n amount: number,\n destinationAddress?: string,\n toleranceBps?: number,\n affiliateBps?: number,\n affiliate?: string,\n height?: number,\n ): Promise<QuoteSwapResponse> {\n for (const api of this.quoteApis) {\n try {\n return (\n await api.quoteswap(\n height,\n fromAsset,\n toAsset,\n amount,\n destinationAddress,\n toleranceBps,\n affiliateBps,\n affiliate,\n )\n ).data\n } catch (e) {}\n }\n throw new Error(`MAYANode not responding`)\n }\n\n /**\n * Get current active mimir configuration.\n * @returns mimir configuration\n */\n public async getMimir(): Promise<MimirResponse> {\n for (const api of this.mimirApis) {\n try {\n return (await api.mimir()).data\n } catch (e) {}\n }\n throw Error(`MAYANode not responding`)\n }\n\n /**\n * Get the set of asgard addresses that should be used for inbound transactions.\n * @returns MAYA inbound addresses\n */\n public async getInboundAddresses(): Promise<InboundAddress[]> {\n for (const api of this.networkApis) {\n try {\n const resp = (await api.inboundAddresses()).data\n return resp\n } catch (e) {}\n }\n throw new Error(`MAYANode not responding`)\n }\n}\n","import { assetFromStringEx } from '@xchainjs/xchain-util'\n\nexport const BtcAsset = assetFromStringEx('BTC.BTC')\nexport const EthAsset = assetFromStringEx('ETH.ETH')\nexport const CacaoAsset = assetFromStringEx('MAYA.CACAO')\nexport const RuneAsset = assetFromStringEx('THOR.RUNE')\nexport const DashAsset = assetFromStringEx('DASH.DASH')\nexport const KujiraAsset = assetFromStringEx('KUJI.KUJI')\n\nexport const BtcChain = 'BTC'\nexport const EthChain = 'ETH'\nexport const MayaChain = 'MAYA'\nexport const ThorChain = 'THOR'\nexport const DashChain = 'DASH'\nexport const KujiraChain = 'KUJI'\n\nexport const DEFAULT_MAYACHAIN_DECIMALS = 8\n","import { Asset, CryptoAmount, assetToString, baseAmount } from '@xchainjs/xchain-util'\nimport BigNumber from 'bignumber.js'\n\nimport { CacaoAsset } from './const'\n\nexport const isCacaoAsset = (asset: Asset): boolean => assetToString(asset) === assetToString(CacaoAsset)\n\nexport const getBaseAmountWithDiffDecimals = (inputAmount: CryptoAmount, outDecimals: number): BigNumber => {\n const inDecimals = inputAmount.baseAmount.decimal\n let baseAmountOut = inputAmount.baseAmount.amount()\n const adjustDecimals = outDecimals - inDecimals\n baseAmountOut = baseAmountOut.times(10 ** adjustDecimals)\n return baseAmount(baseAmountOut, outDecimals).amount()\n}\n","import { MidgardQuery } from '@xchainjs/xchain-mayamidgard-query'\nimport { CachedValue } from '@xchainjs/xchain-util'\nimport { BigNumber } from 'bignumber.js'\n\nimport { InboundDetail } from './types'\nimport { MayaChain, Mayanode } from './utils'\n\nexport type MayachainCacheConf = {\n expirationTimeInboundAddress: number\n}\n/**\n * This class manages retrieving information from up to date Mayachain\n */\nexport class MayachainCache {\n readonly midgardQuery: MidgardQuery\n readonly mayanode: Mayanode\n private conf: MayachainCacheConf\n private readonly inboundDetailCache: CachedValue<Record<string, InboundDetail>>\n /**\n * Constructor to create a MayachainCache\n *\n * @param midgardQuery - an instance of the Maya MidgardQuery API\n * @param mayanode\n * @returns MayachainCache\n */\n constructor(\n midgardQuery = new MidgardQuery(),\n mayanode = new Mayanode(),\n configuration?: Partial<MayachainCacheConf>,\n ) {\n this.midgardQuery = midgardQuery\n this.mayanode = mayanode\n this.conf = { expirationTimeInboundAddress: 6000, ...configuration }\n\n this.inboundDetailCache = new CachedValue<Record<string, InboundDetail>>(\n () => this.refreshInboundDetailCache(),\n this.conf.expirationTimeInboundAddress,\n )\n }\n\n /**\n * Get inbound addresses details\n * @returns Inbound details\n */\n public async getInboundDetails(): Promise<Record<string, InboundDetail>> {\n if (!this.inboundDetailCache) throw Error(`Could not refresh inbound details`)\n return await this.inboundDetailCache.getValue()\n }\n\n /**\n * Refreshes the InboundDetailCache Cache\n */\n private async refreshInboundDetailCache(): Promise<Record<string, InboundDetail>> {\n const [mimirDetails, allInboundAddresses] = await Promise.all([\n this.mayanode.getMimir(),\n this.mayanode.getInboundAddresses(),\n ])\n const inboundDetails: Record<string, InboundDetail> = {}\n for (const inbound of allInboundAddresses) {\n const chain = inbound.chain\n if (\n !chain ||\n !inbound.gas_rate ||\n !inbound.address ||\n !inbound.gas_rate_units ||\n !inbound.outbound_tx_size ||\n !inbound.outbound_fee ||\n !inbound.gas_rate_units\n )\n throw new Error(`Missing required inbound info`)\n\n inboundDetails[chain] = {\n chain: chain,\n address: inbound.address,\n router: inbound.router,\n gasRate: new BigNumber(inbound.gas_rate),\n gasRateUnits: inbound.gas_rate_units,\n outboundTxSize: new BigNumber(inbound.outbound_tx_size),\n outboundFee: new BigNumber(inbound.outbound_fee),\n haltedChain: inbound?.halted || !!mimirDetails[`HALT${chain}CHAIN`] || !!mimirDetails['HALTCHAINGLOBAL'],\n haltedTrading: !!mimirDetails['HALTTRADING'] || !!mimirDetails[`HALT${chain}TRADING`],\n haltedLP: !!mimirDetails['PAUSELP'] || !!mimirDetails[`PAUSELP${chain}`],\n }\n }\n // add mock MAYAChain inbound details\n inboundDetails[MayaChain] = {\n chain: MayaChain,\n address: '',\n router: '',\n gasRate: new BigNumber(0),\n gasRateUnits: '',\n outboundTxSize: new BigNumber(0),\n outboundFee: new BigNumber(0),\n haltedChain: false,\n haltedTrading: !!mimirDetails['HALTTRADING'],\n haltedLP: false, //\n }\n\n return inboundDetails\n }\n}\n","import { Network } from '@xchainjs/xchain-client'\nimport { MAYANameDetails } from '@xchainjs/xchain-mayamidgard-query'\nimport { QuoteSwapResponse } from '@xchainjs/xchain-mayanode'\nimport { CryptoAmount, assetFromStringEx, assetToString, baseAmount } from '@xchainjs/xchain-util'\n\nimport { MayachainCache } from './mayachain-cache'\nimport { InboundDetail, QuoteSwap, QuoteSwapParams } from './types'\nimport {\n BtcAsset,\n BtcChain,\n CacaoAsset,\n DashAsset,\n DashChain,\n EthAsset,\n EthChain,\n KujiraAsset,\n KujiraChain,\n MayaChain,\n RuneAsset,\n ThorChain,\n getBaseAmountWithDiffDecimals,\n} from './utils'\n\n/**\n * MAYAChain Class for interacting with MAYAChain.\n * Recommended main class to use for swapping with MAYAChain\n * Has access to Midgard and MAYANode data\n */\nexport class MayachainQuery {\n private mayachainCache: MayachainCache\n\n /**\n * Constructor to create a MayachainAMM\n * @param mayachainCache - an instance of the MayachainCache (could be pointing to stagenet,testnet,mainnet)\n * @param chainAttributes - attributes used to calculate waitTime & conf counting\n * @returns MayachainAMM\n */\n constructor(mayachainCache = new MayachainCache()) {\n this.mayachainCache = mayachainCache\n }\n\n /**\n * Get the mayachain query is working with\n * @returns\n */\n public getNetwork(): Network {\n return this.mayachainCache.midgardQuery.getNetwork()\n }\n\n /**\n * Quote a swap\n * @param {QuoteSwapParams} quoteSwapParams - quote swap input params\n * @returns {QuoteSwap}\n */\n public async quoteSwap({\n fromAsset,\n destinationAsset,\n amount,\n destinationAddress,\n toleranceBps,\n affiliateBps,\n affiliateAddress,\n height,\n }: QuoteSwapParams): Promise<QuoteSwap> {\n const fromAssetString = assetToString(fromAsset)\n const toAssetString = assetToString(destinationAsset)\n // Endpoint allows 10 decimals for Cacao, 8 for the rest of assets\n const inputAmount =\n fromAssetString === assetToString(CacaoAsset)\n ? amount.baseAmount.amount()\n : getBaseAmountWithDiffDecimals(amount, 8)\n\n const swapQuote: QuoteSwapResponse = await this.mayachainCache.mayanode.getSwapQuote(\n fromAssetString,\n toAssetString,\n inputAmount.toNumber(),\n destinationAddress,\n toleranceBps,\n affiliateBps,\n affiliateAddress,\n height,\n )\n\n const response: { error?: string } = JSON.parse(JSON.stringify(swapQuote))\n if (response.error) {\n return {\n toAddress: ``,\n memo: ``,\n expectedAmount: new CryptoAmount(\n baseAmount(0, toAssetString === assetToString(CacaoAsset) ? 10 : 8),\n destinationAsset,\n ),\n dustThreshold: this.getChainDustValue(fromAsset.chain),\n fees: {\n asset: destinationAsset,\n affiliateFee: new CryptoAmount(\n baseAmount(0, toAssetString === assetToString(CacaoAsset) ? 10 : 8),\n destinationAsset,\n ),\n outboundFee: new CryptoAmount(\n baseAmount(0, toAssetString === assetToString(CacaoAsset) ? 10 : 8),\n destinationAsset,\n ),\n },\n outboundDelayBlocks: 0,\n outboundDelaySeconds: 0,\n inboundConfirmationSeconds: 0,\n inboundConfirmationBlocks: 0,\n canSwap: false,\n errors: [`Mayanode request quote: ${response.error}`],\n slipBasisPoints: 0,\n totalSwapSeconds: 0,\n warning: '',\n }\n }\n\n const feeAsset = assetFromStringEx(swapQuote.fees.asset)\n\n const errors: string[] = []\n if (swapQuote.memo === undefined) errors.push(`Error parsing swap quote: Memo is ${swapQuote.memo}`)\n\n const isFeeAssetCacao = swapQuote.fees.asset === assetToString(CacaoAsset)\n return {\n toAddress: swapQuote.inbound_address || '',\n memo: swapQuote.memo || '',\n expectedAmount: new CryptoAmount(\n baseAmount(swapQuote.expected_amount_out, toAssetString === assetToString(CacaoAsset) ? 10 : 8),\n destinationAsset,\n ),\n dustThreshold: this.getChainDustValue(fromAsset.chain),\n fees: {\n asset: feeAsset,\n affiliateFee: new CryptoAmount(baseAmount(swapQuote.fees.affiliate, isFeeAssetCacao ? 10 : 8), feeAsset),\n outboundFee: new CryptoAmount(baseAmount(swapQuote.fees.outbound, isFeeAssetCacao ? 10 : 8), feeAsset),\n },\n slipBasisPoints: swapQuote.slippage_bps,\n outboundDelayBlocks: swapQuote.outbound_delay_blocks,\n outboundDelaySeconds: swapQuote.outbound_delay_seconds,\n inboundConfirmationSeconds: swapQuote.inbound_confirmation_seconds,\n inboundConfirmationBlocks: swapQuote.inbound_confirmation_blocks,\n totalSwapSeconds: (swapQuote.inbound_confirmation_seconds || 0) + swapQuote.outbound_delay_seconds,\n canSwap: !(!swapQuote.memo || errors.length > 0),\n errors,\n warning: '',\n }\n }\n\n /**\n * Return mayachain supported chains dust amounts\n * @returns a map where chain is the key and dust amount cryptoAmount as value\n */\n public getDustValues(): Record<string, CryptoAmount> {\n // TODO: Find out how to fetch native asset decimals\n return {\n [BtcChain]: new CryptoAmount(baseAmount(10000, 8), BtcAsset),\n [EthChain]: new CryptoAmount(baseAmount(0, 18), EthAsset),\n [DashChain]: new CryptoAmount(baseAmount(10000, 8), DashAsset),\n [KujiraChain]: new CryptoAmount(baseAmount(0, 6), KujiraAsset),\n [ThorChain]: new CryptoAmount(baseAmount(0, 8), RuneAsset),\n [MayaChain]: new CryptoAmount(baseAmount(0, 10), CacaoAsset),\n }\n }\n\n /**\n * Return the dust crypto amount from the given chain\n * @param {string} chain Chain to retrieve the dust amount of\n * @returns a map where chain is the key and dust amount cryptoAmount as value\n */\n public getChainDustValue(chain: string): CryptoAmount {\n const dustValue = this.getDustValues()[chain]\n if (!dustValue) throw Error(`No dust value known for ${chain} chain`)\n return dustValue\n }\n\n /**\n * Get MAYAname details\n * @param {string} MAYAName\n * @returns {MAYANameDetails | undefined} MAYANames details or undefined it is does not exist\n */\n public async getMAYANameDetails(MAYAName: string): Promise<MAYANameDetails | undefined> {\n return this.mayachainCache.midgardQuery.getMAYANameDetails(MAYAName)\n }\n\n /**\n * Get inbound addresses details\n * @returns Inbound details\n */\n public async getInboundDetails(): Promise<Record<string, InboundDetail>> {\n return this.mayachainCache.getInboundDetails()\n }\n\n /**\n * Get chain inbound address details\n * @returns Inbound details\n */\n public async getChainInboundDetails(chain: string): Promise<InboundDetail> {\n const inboundDetails = await this.getInboundDetails()\n if (!inboundDetails[chain]) throw Error(`No inbound details known for ${chain} chain`)\n return inboundDetails[chain]\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.esm.js","sources":["../src/utils/mayanode.ts","../src/utils/const.ts","../src/utils/utils.ts","../src/mayachain-cache.ts","../src/mayachain-query.ts"],"sourcesContent":["import { Network } from '@xchainjs/xchain-client'\nimport {\n Configuration,\n InboundAddress,\n MimirApi,\n MimirResponse,\n NetworkApi,\n QuoteApi,\n QuoteSwapResponse,\n} from '@xchainjs/xchain-mayanode'\nimport axios from 'axios'\nimport axiosRetry from 'axios-retry'\n\nexport type MayanodeConfig = {\n apiRetries: number\n mayanodeBaseUrls: string[]\n}\n\nconst defaultMayanodeConfig: Record<Network, MayanodeConfig> = {\n mainnet: {\n apiRetries: 3,\n mayanodeBaseUrls: ['https://mayanode.mayachain.info'],\n },\n stagenet: {\n apiRetries: 3,\n mayanodeBaseUrls: ['https://stagenet.mayanode.mayachain.info'],\n },\n testnet: {\n apiRetries: 3,\n // There is no testnet for mayanode\n mayanodeBaseUrls: ['https://stagenet.mayanode.mayachain.info'],\n },\n}\n\nexport class Mayanode {\n private config: MayanodeConfig\n private network: Network\n private quoteApis: QuoteApi[]\n private mimirApis: MimirApi[]\n private networkApis: NetworkApi[]\n\n constructor(network: Network = Network.Mainnet, config?: MayanodeConfig) {\n this.network = network\n this.config = config ?? defaultMayanodeConfig[this.network]\n this.quoteApis = this.config.mayanodeBaseUrls.map((url) => new QuoteApi(new Configuration({ basePath: url })))\n this.mimirApis = this.config.mayanodeBaseUrls.map((url) => new MimirApi(new Configuration({ basePath: url })))\n this.networkApis = this.config.mayanodeBaseUrls.map((url) => new NetworkApi(new Configuration({ basePath: url })))\n\n axiosRetry(axios, { retries: this.config.apiRetries, retryDelay: axiosRetry.exponentialDelay })\n }\n\n /**\n * TODO\n * @param fromAsset - input asset\n * @param toAsset - output asset\n * @param amount - amount to swap\n * @param destinationAddress - destination address for the swap\n * @param toleranceBps - slip percent\n * @param affiliateBps - affiliate percent\n * @param affiliate - affiliate address\n * @param height - block height\n * @returns quotes swap object response\n */\n public async getSwapQuote(\n fromAsset: string,\n toAsset: string,\n amount: number,\n destinationAddress?: string,\n toleranceBps?: number,\n affiliateBps?: number,\n affiliate?: string,\n height?: number,\n ): Promise<QuoteSwapResponse> {\n for (const api of this.quoteApis) {\n try {\n return (\n await api.quoteswap(\n height,\n fromAsset,\n toAsset,\n amount,\n destinationAddress,\n toleranceBps,\n affiliateBps,\n affiliate,\n )\n ).data\n } catch (e) {}\n }\n throw new Error(`MAYANode not responding`)\n }\n\n /**\n * Get current active mimir configuration.\n * @returns mimir configuration\n */\n public async getMimir(): Promise<MimirResponse> {\n for (const api of this.mimirApis) {\n try {\n return (await api.mimir()).data\n } catch (e) {}\n }\n throw Error(`MAYANode not responding`)\n }\n\n /**\n * Get the set of asgard addresses that should be used for inbound transactions.\n * @returns MAYA inbound addresses\n */\n public async getInboundAddresses(): Promise<InboundAddress[]> {\n for (const api of this.networkApis) {\n try {\n const resp = (await api.inboundAddresses()).data\n return resp\n } catch (e) {}\n }\n throw new Error(`MAYANode not responding`)\n }\n}\n","import { assetFromStringEx } from '@xchainjs/xchain-util'\n\nexport const BtcAsset = assetFromStringEx('BTC.BTC')\nexport const EthAsset = assetFromStringEx('ETH.ETH')\nexport const CacaoAsset = assetFromStringEx('MAYA.CACAO')\nexport const RuneAsset = assetFromStringEx('THOR.RUNE')\nexport const DashAsset = assetFromStringEx('DASH.DASH')\nexport const KujiraAsset = assetFromStringEx('KUJI.KUJI')\n\nexport const BtcChain = 'BTC'\nexport const EthChain = 'ETH'\nexport const MayaChain = 'MAYA'\nexport const ThorChain = 'THOR'\nexport const DashChain = 'DASH'\nexport const KujiraChain = 'KUJI'\n\nexport const DEFAULT_MAYACHAIN_DECIMALS = 8\n","import { Asset, CryptoAmount, assetToString, baseAmount } from '@xchainjs/xchain-util'\nimport BigNumber from 'bignumber.js'\n\nimport { CacaoAsset } from './const'\n\nexport const isCacaoAsset = (asset: Asset): boolean => assetToString(asset) === assetToString(CacaoAsset)\n\nexport const getBaseAmountWithDiffDecimals = (inputAmount: CryptoAmount, outDecimals: number): BigNumber => {\n const inDecimals = inputAmount.baseAmount.decimal\n let baseAmountOut = inputAmount.baseAmount.amount()\n const adjustDecimals = outDecimals - inDecimals\n baseAmountOut = baseAmountOut.times(10 ** adjustDecimals)\n return baseAmount(baseAmountOut, outDecimals).amount()\n}\n","import { MidgardQuery } from '@xchainjs/xchain-mayamidgard-query'\nimport { CachedValue } from '@xchainjs/xchain-util'\nimport { BigNumber } from 'bignumber.js'\n\nimport { InboundDetail } from './types'\nimport { MayaChain, Mayanode } from './utils'\n\nexport type MayachainCacheConf = {\n expirationTimeInboundAddress: number // Expiration time for the inbound address cache in milliseconds\n}\n\n/**\n * This class manages retrieving information from up-to-date Mayachain.\n */\nexport class MayachainCache {\n readonly midgardQuery: MidgardQuery // Instance of the Maya MidgardQuery API\n readonly mayanode: Mayanode // Instance of the Maya Mayanode API\n private conf: MayachainCacheConf // Configuration for the cache\n private readonly inboundDetailCache: CachedValue<Record<string, InboundDetail>> // Cached value for inbound details\n private readonly assetDecimalsCache: CachedValue<Record<string, number>> // Cached value for asset decimals\n\n /**\n * Constructor to create a MayachainCache.\n *\n * @param midgardQuery - An instance of the Maya MidgardQuery API.\n * @param mayanode - An instance of the Maya Mayanode API.\n * @param configuration - Optional configuration for the cache.\n * @returns MayachainCache.\n */\n constructor(\n midgardQuery = new MidgardQuery(),\n mayanode = new Mayanode(),\n configuration?: Partial<MayachainCacheConf>,\n ) {\n // Initialize instances and configuration\n this.midgardQuery = midgardQuery\n this.mayanode = mayanode\n this.conf = { expirationTimeInboundAddress: 6000, ...configuration }\n\n // Initialize cached values\n this.inboundDetailCache = new CachedValue<Record<string, InboundDetail>>(\n () => this.refreshInboundDetailCache(),\n this.conf.expirationTimeInboundAddress,\n )\n this.assetDecimalsCache = new CachedValue<Record<string, number>>(() => this.refreshAssetDecimalsCache())\n }\n\n /**\n * Get inbound addresses details.\n *\n * @returns Inbound details.\n */\n public async getInboundDetails(): Promise<Record<string, InboundDetail>> {\n if (!this.inboundDetailCache) throw Error(`Could not refresh inbound details`)\n return await this.inboundDetailCache.getValue()\n }\n\n /**\n * Get the number of decimals of the supported Mayachain tokens.\n *\n * @returns {Record<string, number>} A record with the string asset notation as key and the number of decimals as value.\n */\n public async getAssetDecimals(): Promise<Record<string, number>> {\n if (!this.assetDecimalsCache) throw Error(`Could not refresh assets decimals`)\n return await this.assetDecimalsCache.getValue()\n }\n\n /**\n * Refreshes the InboundDetailCache cache.\n */\n private async refreshInboundDetailCache(): Promise<Record<string, InboundDetail>> {\n // Implementation details for refreshing the inbound detail cache\n const [mimirDetails, allInboundAddresses] = await Promise.all([\n this.mayanode.getMimir(),\n this.mayanode.getInboundAddresses(),\n ])\n const inboundDetails: Record<string, InboundDetail> = {}\n for (const inbound of allInboundAddresses) {\n const chain = inbound.chain\n if (\n !chain ||\n !inbound.gas_rate ||\n !inbound.address ||\n !inbound.gas_rate_units ||\n !inbound.outbound_tx_size ||\n !inbound.outbound_fee ||\n !inbound.gas_rate_units\n )\n throw new Error(`Missing required inbound info`)\n\n inboundDetails[chain] = {\n chain: chain,\n address: inbound.address,\n router: inbound.router,\n gasRate: new BigNumber(inbound.gas_rate),\n gasRateUnits: inbound.gas_rate_units,\n outboundTxSize: new BigNumber(inbound.outbound_tx_size),\n outboundFee: new BigNumber(inbound.outbound_fee),\n haltedChain: inbound?.halted || !!mimirDetails[`HALT${chain}CHAIN`] || !!mimirDetails['HALTCHAINGLOBAL'],\n haltedTrading: !!mimirDetails['HALTTRADING'] || !!mimirDetails[`HALT${chain}TRADING`],\n haltedLP: !!mimirDetails['PAUSELP'] || !!mimirDetails[`PAUSELP${chain}`],\n }\n }\n // add mock MAYAChain inbound details\n inboundDetails[MayaChain] = {\n chain: MayaChain,\n address: '',\n router: '',\n gasRate: new BigNumber(0),\n gasRateUnits: '',\n outboundTxSize: new BigNumber(0),\n outboundFee: new BigNumber(0),\n haltedChain: false,\n haltedTrading: !!mimirDetails['HALTTRADING'],\n haltedLP: false, //\n }\n\n return inboundDetails\n }\n\n /**\n * Refreshes the number of decimals of the supported Mayachain tokens.\n */\n private async refreshAssetDecimalsCache(): Promise<Record<string, number>> {\n // Implementation details for refreshing the asset decimals cache\n // TODO: As soon as Mayachain returns native decimals from any endpoint of its API, refactor the function\n return {\n 'BTC.BTC': 8,\n 'ETH.ETH': 18,\n 'DASH.DASH': 8,\n 'KUJI.KUJI': 6,\n 'THOR.RUNE': 8,\n 'MAYA.CACAO': 8,\n 'ETH.USDT-0xdAC17F958D2ee523a2206206994597C13D831ec7': 6,\n 'ETH.USDC-0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48': 6,\n 'ETH.WSTETH-0X7F39C581F595B53C5CB19BD0B3F8DA6C935E2CA0': 18,\n 'KUJI.USK': 6,\n }\n }\n}\n","import { Network } from '@xchainjs/xchain-client'\nimport { MAYANameDetails } from '@xchainjs/xchain-mayamidgard-query'\nimport { QuoteSwapResponse } from '@xchainjs/xchain-mayanode'\nimport { Asset, CryptoAmount, assetFromStringEx, assetToString, baseAmount, isSynthAsset } from '@xchainjs/xchain-util'\n\nimport { MayachainCache } from './mayachain-cache'\nimport { InboundDetail, QuoteSwap, QuoteSwapParams } from './types'\nimport {\n BtcAsset,\n BtcChain,\n CacaoAsset,\n DEFAULT_MAYACHAIN_DECIMALS,\n DashAsset,\n DashChain,\n EthAsset,\n EthChain,\n KujiraAsset,\n KujiraChain,\n MayaChain,\n RuneAsset,\n ThorChain,\n getBaseAmountWithDiffDecimals,\n} from './utils'\n\n/**\n * MAYAChain Class for interacting with MAYAChain.\n * Recommended main class to use for swapping with MAYAChain\n * Has access to Midgard and MAYANode data\n */\nexport class MayachainQuery {\n private mayachainCache: MayachainCache\n\n /**\n * Constructor to create a MayachainAMM\n * @param mayachainCache - an instance of the MayachainCache (could be pointing to stagenet,testnet,mainnet)\n * @param chainAttributes - attributes used to calculate waitTime & conf counting\n * @returns MayachainAMM\n */\n constructor(mayachainCache = new MayachainCache()) {\n // Initialize MayachainCache instance\n this.mayachainCache = mayachainCache\n }\n\n /**\n * Get the Mayachain network.\n * @returns\n */\n public getNetwork(): Network {\n return this.mayachainCache.midgardQuery.getNetwork()\n }\n\n /**\n * Quote a swap operation.\n * @param {QuoteSwapParams} quoteSwapParams - Parameters for the quote swap operation.\n * @returns {QuoteSwap} A quote for the swap operation.\n */\n public async quoteSwap({\n fromAsset,\n destinationAsset,\n amount,\n destinationAddress,\n toleranceBps,\n affiliateBps,\n affiliateAddress,\n height,\n }: QuoteSwapParams): Promise<QuoteSwap> {\n const fromAssetString = assetToString(fromAsset)\n const toAssetString = assetToString(destinationAsset)\n // Endpoint allows 10 decimals for Cacao, 8 for the rest of assets\n const inputAmount =\n fromAssetString === assetToString(CacaoAsset)\n ? amount.baseAmount.amount()\n : getBaseAmountWithDiffDecimals(amount, 8)\n\n const swapQuote: QuoteSwapResponse = await this.mayachainCache.mayanode.getSwapQuote(\n fromAssetString,\n toAssetString,\n inputAmount.toNumber(),\n destinationAddress,\n toleranceBps,\n affiliateBps,\n affiliateAddress,\n height,\n )\n\n const response: { error?: string } = JSON.parse(JSON.stringify(swapQuote))\n if (response.error) {\n return {\n toAddress: ``,\n memo: ``,\n expectedAmount: new CryptoAmount(\n baseAmount(0, toAssetString === assetToString(CacaoAsset) ? 10 : 8),\n destinationAsset,\n ),\n dustThreshold: this.getChainDustValue(fromAsset.chain),\n fees: {\n asset: destinationAsset,\n affiliateFee: new CryptoAmount(\n baseAmount(0, toAssetString === assetToString(CacaoAsset) ? 10 : 8),\n destinationAsset,\n ),\n outboundFee: new CryptoAmount(\n baseAmount(0, toAssetString === assetToString(CacaoAsset) ? 10 : 8),\n destinationAsset,\n ),\n },\n outboundDelayBlocks: 0,\n outboundDelaySeconds: 0,\n inboundConfirmationSeconds: 0,\n inboundConfirmationBlocks: 0,\n canSwap: false,\n errors: [`Mayanode request quote: ${response.error}`],\n slipBasisPoints: 0,\n totalSwapSeconds: 0,\n warning: '',\n }\n }\n\n const feeAsset = assetFromStringEx(swapQuote.fees.asset)\n\n const errors: string[] = []\n if (swapQuote.memo === undefined) errors.push(`Error parsing swap quote: Memo is ${swapQuote.memo}`)\n\n const isFeeAssetCacao = swapQuote.fees.asset === assetToString(CacaoAsset)\n return {\n toAddress: swapQuote.inbound_address || '',\n memo: swapQuote.memo || '',\n expectedAmount: new CryptoAmount(\n baseAmount(swapQuote.expected_amount_out, toAssetString === assetToString(CacaoAsset) ? 10 : 8),\n destinationAsset,\n ),\n dustThreshold: this.getChainDustValue(fromAsset.chain),\n fees: {\n asset: feeAsset,\n affiliateFee: new CryptoAmount(baseAmount(swapQuote.fees.affiliate, isFeeAssetCacao ? 10 : 8), feeAsset),\n outboundFee: new CryptoAmount(baseAmount(swapQuote.fees.outbound, isFeeAssetCacao ? 10 : 8), feeAsset),\n },\n slipBasisPoints: swapQuote.slippage_bps,\n outboundDelayBlocks: swapQuote.outbound_delay_blocks,\n outboundDelaySeconds: swapQuote.outbound_delay_seconds,\n inboundConfirmationSeconds: swapQuote.inbound_confirmation_seconds,\n inboundConfirmationBlocks: swapQuote.inbound_confirmation_blocks,\n totalSwapSeconds: (swapQuote.inbound_confirmation_seconds || 0) + swapQuote.outbound_delay_seconds,\n canSwap: !(!swapQuote.memo || errors.length > 0),\n errors,\n warning: '',\n }\n }\n\n /**\n * Return mayachain supported chains dust amounts\n * @returns a map where chain is the key and dust amount cryptoAmount as value\n */\n public getDustValues(): Record<string, CryptoAmount> {\n // TODO: Find out how to fetch native asset decimals\n return {\n [BtcChain]: new CryptoAmount(baseAmount(10000, 8), BtcAsset),\n [EthChain]: new CryptoAmount(baseAmount(0, 18), EthAsset),\n [DashChain]: new CryptoAmount(baseAmount(10000, 8), DashAsset),\n [KujiraChain]: new CryptoAmount(baseAmount(0, 6), KujiraAsset),\n [ThorChain]: new CryptoAmount(baseAmount(0, 8), RuneAsset),\n [MayaChain]: new CryptoAmount(baseAmount(0, 10), CacaoAsset),\n }\n }\n\n /**\n * Return the dust crypto amount from the given chain\n * @param {string} chain Chain to retrieve the dust amount of\n * @returns a map where chain is the key and dust amount cryptoAmount as value\n */\n public getChainDustValue(chain: string): CryptoAmount {\n const dustValue = this.getDustValues()[chain]\n if (!dustValue) throw Error(`No dust value known for ${chain} chain`)\n return dustValue\n }\n\n /**\n * Get MAYAname details\n * @param {string} MAYAName\n * @returns {MAYANameDetails | undefined} MAYANames details or undefined it is does not exist\n */\n public async getMAYANameDetails(MAYAName: string): Promise<MAYANameDetails | undefined> {\n return this.mayachainCache.midgardQuery.getMAYANameDetails(MAYAName)\n }\n\n /**\n * Get inbound addresses details\n * @returns Inbound details\n */\n public async getInboundDetails(): Promise<Record<string, InboundDetail>> {\n return this.mayachainCache.getInboundDetails()\n }\n\n /**\n * Get chain inbound address details\n * @returns Inbound details\n */\n public async getChainInboundDetails(chain: string): Promise<InboundDetail> {\n const inboundDetails = await this.getInboundDetails()\n if (!inboundDetails[chain]) throw Error(`No inbound details known for ${chain} chain`)\n return inboundDetails[chain]\n }\n\n /**\n * Get asset decimals\n * @param {Asset} asset\n * @returns the asset decimals\n * @throws {Error} if the asset is not supported in Mayachain\n */\n public async getAssetDecimals(asset: Asset): Promise<number> {\n if (isSynthAsset(asset)) return DEFAULT_MAYACHAIN_DECIMALS\n\n const assetNotation = assetToString(asset)\n const assetsDecimals = await this.mayachainCache.getAssetDecimals()\n if (!assetsDecimals[assetNotation]) throw Error(`Can not get decimals for ${assetNotation}`)\n\n return assetsDecimals[assetNotation]\n }\n}\n"],"names":[],"mappings":"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"}
package/lib/index.js CHANGED
@@ -144,25 +144,30 @@ const getBaseAmountWithDiffDecimals = (inputAmount, outDecimals) => {
144
144
  };
145
145
 
146
146
  /**
147
- * This class manages retrieving information from up to date Mayachain
147
+ * This class manages retrieving information from up-to-date Mayachain.
148
148
  */
149
149
  class MayachainCache {
150
150
  /**
151
- * Constructor to create a MayachainCache
151
+ * Constructor to create a MayachainCache.
152
152
  *
153
- * @param midgardQuery - an instance of the Maya MidgardQuery API
154
- * @param mayanode
155
- * @returns MayachainCache
153
+ * @param midgardQuery - An instance of the Maya MidgardQuery API.
154
+ * @param mayanode - An instance of the Maya Mayanode API.
155
+ * @param configuration - Optional configuration for the cache.
156
+ * @returns MayachainCache.
156
157
  */
157
158
  constructor(midgardQuery = new xchainMayamidgardQuery.MidgardQuery(), mayanode = new Mayanode(), configuration) {
159
+ // Initialize instances and configuration
158
160
  this.midgardQuery = midgardQuery;
159
161
  this.mayanode = mayanode;
160
162
  this.conf = Object.assign({ expirationTimeInboundAddress: 6000 }, configuration);
163
+ // Initialize cached values
161
164
  this.inboundDetailCache = new xchainUtil.CachedValue(() => this.refreshInboundDetailCache(), this.conf.expirationTimeInboundAddress);
165
+ this.assetDecimalsCache = new xchainUtil.CachedValue(() => this.refreshAssetDecimalsCache());
162
166
  }
163
167
  /**
164
- * Get inbound addresses details
165
- * @returns Inbound details
168
+ * Get inbound addresses details.
169
+ *
170
+ * @returns Inbound details.
166
171
  */
167
172
  getInboundDetails() {
168
173
  return __awaiter(this, void 0, void 0, function* () {
@@ -172,10 +177,23 @@ class MayachainCache {
172
177
  });
173
178
  }
174
179
  /**
175
- * Refreshes the InboundDetailCache Cache
180
+ * Get the number of decimals of the supported Mayachain tokens.
181
+ *
182
+ * @returns {Record<string, number>} A record with the string asset notation as key and the number of decimals as value.
183
+ */
184
+ getAssetDecimals() {
185
+ return __awaiter(this, void 0, void 0, function* () {
186
+ if (!this.assetDecimalsCache)
187
+ throw Error(`Could not refresh assets decimals`);
188
+ return yield this.assetDecimalsCache.getValue();
189
+ });
190
+ }
191
+ /**
192
+ * Refreshes the InboundDetailCache cache.
176
193
  */
177
194
  refreshInboundDetailCache() {
178
195
  return __awaiter(this, void 0, void 0, function* () {
196
+ // Implementation details for refreshing the inbound detail cache
179
197
  const [mimirDetails, allInboundAddresses] = yield Promise.all([
180
198
  this.mayanode.getMimir(),
181
199
  this.mayanode.getInboundAddresses(),
@@ -220,6 +238,27 @@ class MayachainCache {
220
238
  return inboundDetails;
221
239
  });
222
240
  }
241
+ /**
242
+ * Refreshes the number of decimals of the supported Mayachain tokens.
243
+ */
244
+ refreshAssetDecimalsCache() {
245
+ return __awaiter(this, void 0, void 0, function* () {
246
+ // Implementation details for refreshing the asset decimals cache
247
+ // TODO: As soon as Mayachain returns native decimals from any endpoint of its API, refactor the function
248
+ return {
249
+ 'BTC.BTC': 8,
250
+ 'ETH.ETH': 18,
251
+ 'DASH.DASH': 8,
252
+ 'KUJI.KUJI': 6,
253
+ 'THOR.RUNE': 8,
254
+ 'MAYA.CACAO': 8,
255
+ 'ETH.USDT-0xdAC17F958D2ee523a2206206994597C13D831ec7': 6,
256
+ 'ETH.USDC-0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48': 6,
257
+ 'ETH.WSTETH-0X7F39C581F595B53C5CB19BD0B3F8DA6C935E2CA0': 18,
258
+ 'KUJI.USK': 6,
259
+ };
260
+ });
261
+ }
223
262
  }
224
263
 
225
264
  /**
@@ -235,19 +274,20 @@ class MayachainQuery {
235
274
  * @returns MayachainAMM
236
275
  */
237
276
  constructor(mayachainCache = new MayachainCache()) {
277
+ // Initialize MayachainCache instance
238
278
  this.mayachainCache = mayachainCache;
239
279
  }
240
280
  /**
241
- * Get the mayachain query is working with
281
+ * Get the Mayachain network.
242
282
  * @returns
243
283
  */
244
284
  getNetwork() {
245
285
  return this.mayachainCache.midgardQuery.getNetwork();
246
286
  }
247
287
  /**
248
- * Quote a swap
249
- * @param {QuoteSwapParams} quoteSwapParams - quote swap input params
250
- * @returns {QuoteSwap}
288
+ * Quote a swap operation.
289
+ * @param {QuoteSwapParams} quoteSwapParams - Parameters for the quote swap operation.
290
+ * @returns {QuoteSwap} A quote for the swap operation.
251
291
  */
252
292
  quoteSwap({ fromAsset, destinationAsset, amount, destinationAddress, toleranceBps, affiliateBps, affiliateAddress, height, }) {
253
293
  return __awaiter(this, void 0, void 0, function* () {
@@ -365,6 +405,23 @@ class MayachainQuery {
365
405
  return inboundDetails[chain];
366
406
  });
367
407
  }
408
+ /**
409
+ * Get asset decimals
410
+ * @param {Asset} asset
411
+ * @returns the asset decimals
412
+ * @throws {Error} if the asset is not supported in Mayachain
413
+ */
414
+ getAssetDecimals(asset) {
415
+ return __awaiter(this, void 0, void 0, function* () {
416
+ if (xchainUtil.isSynthAsset(asset))
417
+ return DEFAULT_MAYACHAIN_DECIMALS;
418
+ const assetNotation = xchainUtil.assetToString(asset);
419
+ const assetsDecimals = yield this.mayachainCache.getAssetDecimals();
420
+ if (!assetsDecimals[assetNotation])
421
+ throw Error(`Can not get decimals for ${assetNotation}`);
422
+ return assetsDecimals[assetNotation];
423
+ });
424
+ }
368
425
  }
369
426
 
370
427
  exports.BtcAsset = BtcAsset;
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/utils/mayanode.ts","../src/utils/const.ts","../src/utils/utils.ts","../src/mayachain-cache.ts","../src/mayachain-query.ts"],"sourcesContent":["import { Network } from '@xchainjs/xchain-client'\nimport {\n Configuration,\n InboundAddress,\n MimirApi,\n MimirResponse,\n NetworkApi,\n QuoteApi,\n QuoteSwapResponse,\n} from '@xchainjs/xchain-mayanode'\nimport axios from 'axios'\nimport axiosRetry from 'axios-retry'\n\nexport type MayanodeConfig = {\n apiRetries: number\n mayanodeBaseUrls: string[]\n}\n\nconst defaultMayanodeConfig: Record<Network, MayanodeConfig> = {\n mainnet: {\n apiRetries: 3,\n mayanodeBaseUrls: ['https://mayanode.mayachain.info'],\n },\n stagenet: {\n apiRetries: 3,\n mayanodeBaseUrls: ['https://stagenet.mayanode.mayachain.info'],\n },\n testnet: {\n apiRetries: 3,\n // There is no testnet for mayanode\n mayanodeBaseUrls: ['https://stagenet.mayanode.mayachain.info'],\n },\n}\n\nexport class Mayanode {\n private config: MayanodeConfig\n private network: Network\n private quoteApis: QuoteApi[]\n private mimirApis: MimirApi[]\n private networkApis: NetworkApi[]\n\n constructor(network: Network = Network.Mainnet, config?: MayanodeConfig) {\n this.network = network\n this.config = config ?? defaultMayanodeConfig[this.network]\n this.quoteApis = this.config.mayanodeBaseUrls.map((url) => new QuoteApi(new Configuration({ basePath: url })))\n this.mimirApis = this.config.mayanodeBaseUrls.map((url) => new MimirApi(new Configuration({ basePath: url })))\n this.networkApis = this.config.mayanodeBaseUrls.map((url) => new NetworkApi(new Configuration({ basePath: url })))\n\n axiosRetry(axios, { retries: this.config.apiRetries, retryDelay: axiosRetry.exponentialDelay })\n }\n\n /**\n * TODO\n * @param fromAsset - input asset\n * @param toAsset - output asset\n * @param amount - amount to swap\n * @param destinationAddress - destination address for the swap\n * @param toleranceBps - slip percent\n * @param affiliateBps - affiliate percent\n * @param affiliate - affiliate address\n * @param height - block height\n * @returns quotes swap object response\n */\n public async getSwapQuote(\n fromAsset: string,\n toAsset: string,\n amount: number,\n destinationAddress?: string,\n toleranceBps?: number,\n affiliateBps?: number,\n affiliate?: string,\n height?: number,\n ): Promise<QuoteSwapResponse> {\n for (const api of this.quoteApis) {\n try {\n return (\n await api.quoteswap(\n height,\n fromAsset,\n toAsset,\n amount,\n destinationAddress,\n toleranceBps,\n affiliateBps,\n affiliate,\n )\n ).data\n } catch (e) {}\n }\n throw new Error(`MAYANode not responding`)\n }\n\n /**\n * Get current active mimir configuration.\n * @returns mimir configuration\n */\n public async getMimir(): Promise<MimirResponse> {\n for (const api of this.mimirApis) {\n try {\n return (await api.mimir()).data\n } catch (e) {}\n }\n throw Error(`MAYANode not responding`)\n }\n\n /**\n * Get the set of asgard addresses that should be used for inbound transactions.\n * @returns MAYA inbound addresses\n */\n public async getInboundAddresses(): Promise<InboundAddress[]> {\n for (const api of this.networkApis) {\n try {\n const resp = (await api.inboundAddresses()).data\n return resp\n } catch (e) {}\n }\n throw new Error(`MAYANode not responding`)\n }\n}\n","import { assetFromStringEx } from '@xchainjs/xchain-util'\n\nexport const BtcAsset = assetFromStringEx('BTC.BTC')\nexport const EthAsset = assetFromStringEx('ETH.ETH')\nexport const CacaoAsset = assetFromStringEx('MAYA.CACAO')\nexport const RuneAsset = assetFromStringEx('THOR.RUNE')\nexport const DashAsset = assetFromStringEx('DASH.DASH')\nexport const KujiraAsset = assetFromStringEx('KUJI.KUJI')\n\nexport const BtcChain = 'BTC'\nexport const EthChain = 'ETH'\nexport const MayaChain = 'MAYA'\nexport const ThorChain = 'THOR'\nexport const DashChain = 'DASH'\nexport const KujiraChain = 'KUJI'\n\nexport const DEFAULT_MAYACHAIN_DECIMALS = 8\n","import { Asset, CryptoAmount, assetToString, baseAmount } from '@xchainjs/xchain-util'\nimport BigNumber from 'bignumber.js'\n\nimport { CacaoAsset } from './const'\n\nexport const isCacaoAsset = (asset: Asset): boolean => assetToString(asset) === assetToString(CacaoAsset)\n\nexport const getBaseAmountWithDiffDecimals = (inputAmount: CryptoAmount, outDecimals: number): BigNumber => {\n const inDecimals = inputAmount.baseAmount.decimal\n let baseAmountOut = inputAmount.baseAmount.amount()\n const adjustDecimals = outDecimals - inDecimals\n baseAmountOut = baseAmountOut.times(10 ** adjustDecimals)\n return baseAmount(baseAmountOut, outDecimals).amount()\n}\n","import { MidgardQuery } from '@xchainjs/xchain-mayamidgard-query'\nimport { CachedValue } from '@xchainjs/xchain-util'\nimport { BigNumber } from 'bignumber.js'\n\nimport { InboundDetail } from './types'\nimport { MayaChain, Mayanode } from './utils'\n\nexport type MayachainCacheConf = {\n expirationTimeInboundAddress: number\n}\n/**\n * This class manages retrieving information from up to date Mayachain\n */\nexport class MayachainCache {\n readonly midgardQuery: MidgardQuery\n readonly mayanode: Mayanode\n private conf: MayachainCacheConf\n private readonly inboundDetailCache: CachedValue<Record<string, InboundDetail>>\n /**\n * Constructor to create a MayachainCache\n *\n * @param midgardQuery - an instance of the Maya MidgardQuery API\n * @param mayanode\n * @returns MayachainCache\n */\n constructor(\n midgardQuery = new MidgardQuery(),\n mayanode = new Mayanode(),\n configuration?: Partial<MayachainCacheConf>,\n ) {\n this.midgardQuery = midgardQuery\n this.mayanode = mayanode\n this.conf = { expirationTimeInboundAddress: 6000, ...configuration }\n\n this.inboundDetailCache = new CachedValue<Record<string, InboundDetail>>(\n () => this.refreshInboundDetailCache(),\n this.conf.expirationTimeInboundAddress,\n )\n }\n\n /**\n * Get inbound addresses details\n * @returns Inbound details\n */\n public async getInboundDetails(): Promise<Record<string, InboundDetail>> {\n if (!this.inboundDetailCache) throw Error(`Could not refresh inbound details`)\n return await this.inboundDetailCache.getValue()\n }\n\n /**\n * Refreshes the InboundDetailCache Cache\n */\n private async refreshInboundDetailCache(): Promise<Record<string, InboundDetail>> {\n const [mimirDetails, allInboundAddresses] = await Promise.all([\n this.mayanode.getMimir(),\n this.mayanode.getInboundAddresses(),\n ])\n const inboundDetails: Record<string, InboundDetail> = {}\n for (const inbound of allInboundAddresses) {\n const chain = inbound.chain\n if (\n !chain ||\n !inbound.gas_rate ||\n !inbound.address ||\n !inbound.gas_rate_units ||\n !inbound.outbound_tx_size ||\n !inbound.outbound_fee ||\n !inbound.gas_rate_units\n )\n throw new Error(`Missing required inbound info`)\n\n inboundDetails[chain] = {\n chain: chain,\n address: inbound.address,\n router: inbound.router,\n gasRate: new BigNumber(inbound.gas_rate),\n gasRateUnits: inbound.gas_rate_units,\n outboundTxSize: new BigNumber(inbound.outbound_tx_size),\n outboundFee: new BigNumber(inbound.outbound_fee),\n haltedChain: inbound?.halted || !!mimirDetails[`HALT${chain}CHAIN`] || !!mimirDetails['HALTCHAINGLOBAL'],\n haltedTrading: !!mimirDetails['HALTTRADING'] || !!mimirDetails[`HALT${chain}TRADING`],\n haltedLP: !!mimirDetails['PAUSELP'] || !!mimirDetails[`PAUSELP${chain}`],\n }\n }\n // add mock MAYAChain inbound details\n inboundDetails[MayaChain] = {\n chain: MayaChain,\n address: '',\n router: '',\n gasRate: new BigNumber(0),\n gasRateUnits: '',\n outboundTxSize: new BigNumber(0),\n outboundFee: new BigNumber(0),\n haltedChain: false,\n haltedTrading: !!mimirDetails['HALTTRADING'],\n haltedLP: false, //\n }\n\n return inboundDetails\n }\n}\n","import { Network } from '@xchainjs/xchain-client'\nimport { MAYANameDetails } from '@xchainjs/xchain-mayamidgard-query'\nimport { QuoteSwapResponse } from '@xchainjs/xchain-mayanode'\nimport { CryptoAmount, assetFromStringEx, assetToString, baseAmount } from '@xchainjs/xchain-util'\n\nimport { MayachainCache } from './mayachain-cache'\nimport { InboundDetail, QuoteSwap, QuoteSwapParams } from './types'\nimport {\n BtcAsset,\n BtcChain,\n CacaoAsset,\n DashAsset,\n DashChain,\n EthAsset,\n EthChain,\n KujiraAsset,\n KujiraChain,\n MayaChain,\n RuneAsset,\n ThorChain,\n getBaseAmountWithDiffDecimals,\n} from './utils'\n\n/**\n * MAYAChain Class for interacting with MAYAChain.\n * Recommended main class to use for swapping with MAYAChain\n * Has access to Midgard and MAYANode data\n */\nexport class MayachainQuery {\n private mayachainCache: MayachainCache\n\n /**\n * Constructor to create a MayachainAMM\n * @param mayachainCache - an instance of the MayachainCache (could be pointing to stagenet,testnet,mainnet)\n * @param chainAttributes - attributes used to calculate waitTime & conf counting\n * @returns MayachainAMM\n */\n constructor(mayachainCache = new MayachainCache()) {\n this.mayachainCache = mayachainCache\n }\n\n /**\n * Get the mayachain query is working with\n * @returns\n */\n public getNetwork(): Network {\n return this.mayachainCache.midgardQuery.getNetwork()\n }\n\n /**\n * Quote a swap\n * @param {QuoteSwapParams} quoteSwapParams - quote swap input params\n * @returns {QuoteSwap}\n */\n public async quoteSwap({\n fromAsset,\n destinationAsset,\n amount,\n destinationAddress,\n toleranceBps,\n affiliateBps,\n affiliateAddress,\n height,\n }: QuoteSwapParams): Promise<QuoteSwap> {\n const fromAssetString = assetToString(fromAsset)\n const toAssetString = assetToString(destinationAsset)\n // Endpoint allows 10 decimals for Cacao, 8 for the rest of assets\n const inputAmount =\n fromAssetString === assetToString(CacaoAsset)\n ? amount.baseAmount.amount()\n : getBaseAmountWithDiffDecimals(amount, 8)\n\n const swapQuote: QuoteSwapResponse = await this.mayachainCache.mayanode.getSwapQuote(\n fromAssetString,\n toAssetString,\n inputAmount.toNumber(),\n destinationAddress,\n toleranceBps,\n affiliateBps,\n affiliateAddress,\n height,\n )\n\n const response: { error?: string } = JSON.parse(JSON.stringify(swapQuote))\n if (response.error) {\n return {\n toAddress: ``,\n memo: ``,\n expectedAmount: new CryptoAmount(\n baseAmount(0, toAssetString === assetToString(CacaoAsset) ? 10 : 8),\n destinationAsset,\n ),\n dustThreshold: this.getChainDustValue(fromAsset.chain),\n fees: {\n asset: destinationAsset,\n affiliateFee: new CryptoAmount(\n baseAmount(0, toAssetString === assetToString(CacaoAsset) ? 10 : 8),\n destinationAsset,\n ),\n outboundFee: new CryptoAmount(\n baseAmount(0, toAssetString === assetToString(CacaoAsset) ? 10 : 8),\n destinationAsset,\n ),\n },\n outboundDelayBlocks: 0,\n outboundDelaySeconds: 0,\n inboundConfirmationSeconds: 0,\n inboundConfirmationBlocks: 0,\n canSwap: false,\n errors: [`Mayanode request quote: ${response.error}`],\n slipBasisPoints: 0,\n totalSwapSeconds: 0,\n warning: '',\n }\n }\n\n const feeAsset = assetFromStringEx(swapQuote.fees.asset)\n\n const errors: string[] = []\n if (swapQuote.memo === undefined) errors.push(`Error parsing swap quote: Memo is ${swapQuote.memo}`)\n\n const isFeeAssetCacao = swapQuote.fees.asset === assetToString(CacaoAsset)\n return {\n toAddress: swapQuote.inbound_address || '',\n memo: swapQuote.memo || '',\n expectedAmount: new CryptoAmount(\n baseAmount(swapQuote.expected_amount_out, toAssetString === assetToString(CacaoAsset) ? 10 : 8),\n destinationAsset,\n ),\n dustThreshold: this.getChainDustValue(fromAsset.chain),\n fees: {\n asset: feeAsset,\n affiliateFee: new CryptoAmount(baseAmount(swapQuote.fees.affiliate, isFeeAssetCacao ? 10 : 8), feeAsset),\n outboundFee: new CryptoAmount(baseAmount(swapQuote.fees.outbound, isFeeAssetCacao ? 10 : 8), feeAsset),\n },\n slipBasisPoints: swapQuote.slippage_bps,\n outboundDelayBlocks: swapQuote.outbound_delay_blocks,\n outboundDelaySeconds: swapQuote.outbound_delay_seconds,\n inboundConfirmationSeconds: swapQuote.inbound_confirmation_seconds,\n inboundConfirmationBlocks: swapQuote.inbound_confirmation_blocks,\n totalSwapSeconds: (swapQuote.inbound_confirmation_seconds || 0) + swapQuote.outbound_delay_seconds,\n canSwap: !(!swapQuote.memo || errors.length > 0),\n errors,\n warning: '',\n }\n }\n\n /**\n * Return mayachain supported chains dust amounts\n * @returns a map where chain is the key and dust amount cryptoAmount as value\n */\n public getDustValues(): Record<string, CryptoAmount> {\n // TODO: Find out how to fetch native asset decimals\n return {\n [BtcChain]: new CryptoAmount(baseAmount(10000, 8), BtcAsset),\n [EthChain]: new CryptoAmount(baseAmount(0, 18), EthAsset),\n [DashChain]: new CryptoAmount(baseAmount(10000, 8), DashAsset),\n [KujiraChain]: new CryptoAmount(baseAmount(0, 6), KujiraAsset),\n [ThorChain]: new CryptoAmount(baseAmount(0, 8), RuneAsset),\n [MayaChain]: new CryptoAmount(baseAmount(0, 10), CacaoAsset),\n }\n }\n\n /**\n * Return the dust crypto amount from the given chain\n * @param {string} chain Chain to retrieve the dust amount of\n * @returns a map where chain is the key and dust amount cryptoAmount as value\n */\n public getChainDustValue(chain: string): CryptoAmount {\n const dustValue = this.getDustValues()[chain]\n if (!dustValue) throw Error(`No dust value known for ${chain} chain`)\n return dustValue\n }\n\n /**\n * Get MAYAname details\n * @param {string} MAYAName\n * @returns {MAYANameDetails | undefined} MAYANames details or undefined it is does not exist\n */\n public async getMAYANameDetails(MAYAName: string): Promise<MAYANameDetails | undefined> {\n return this.mayachainCache.midgardQuery.getMAYANameDetails(MAYAName)\n }\n\n /**\n * Get inbound addresses details\n * @returns Inbound details\n */\n public async getInboundDetails(): Promise<Record<string, InboundDetail>> {\n return this.mayachainCache.getInboundDetails()\n }\n\n /**\n * Get chain inbound address details\n * @returns Inbound details\n */\n public async getChainInboundDetails(chain: string): Promise<InboundDetail> {\n const inboundDetails = await this.getInboundDetails()\n if (!inboundDetails[chain]) throw Error(`No inbound details known for ${chain} chain`)\n return inboundDetails[chain]\n }\n}\n"],"names":["Network","QuoteApi","Configuration","MimirApi","NetworkApi","axiosRetry","axios","assetFromStringEx","assetToString","baseAmount","MidgardQuery","CachedValue","BigNumber","CryptoAmount"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/utils/mayanode.ts","../src/utils/const.ts","../src/utils/utils.ts","../src/mayachain-cache.ts","../src/mayachain-query.ts"],"sourcesContent":["import { Network } from '@xchainjs/xchain-client'\nimport {\n Configuration,\n InboundAddress,\n MimirApi,\n MimirResponse,\n NetworkApi,\n QuoteApi,\n QuoteSwapResponse,\n} from '@xchainjs/xchain-mayanode'\nimport axios from 'axios'\nimport axiosRetry from 'axios-retry'\n\nexport type MayanodeConfig = {\n apiRetries: number\n mayanodeBaseUrls: string[]\n}\n\nconst defaultMayanodeConfig: Record<Network, MayanodeConfig> = {\n mainnet: {\n apiRetries: 3,\n mayanodeBaseUrls: ['https://mayanode.mayachain.info'],\n },\n stagenet: {\n apiRetries: 3,\n mayanodeBaseUrls: ['https://stagenet.mayanode.mayachain.info'],\n },\n testnet: {\n apiRetries: 3,\n // There is no testnet for mayanode\n mayanodeBaseUrls: ['https://stagenet.mayanode.mayachain.info'],\n },\n}\n\nexport class Mayanode {\n private config: MayanodeConfig\n private network: Network\n private quoteApis: QuoteApi[]\n private mimirApis: MimirApi[]\n private networkApis: NetworkApi[]\n\n constructor(network: Network = Network.Mainnet, config?: MayanodeConfig) {\n this.network = network\n this.config = config ?? defaultMayanodeConfig[this.network]\n this.quoteApis = this.config.mayanodeBaseUrls.map((url) => new QuoteApi(new Configuration({ basePath: url })))\n this.mimirApis = this.config.mayanodeBaseUrls.map((url) => new MimirApi(new Configuration({ basePath: url })))\n this.networkApis = this.config.mayanodeBaseUrls.map((url) => new NetworkApi(new Configuration({ basePath: url })))\n\n axiosRetry(axios, { retries: this.config.apiRetries, retryDelay: axiosRetry.exponentialDelay })\n }\n\n /**\n * TODO\n * @param fromAsset - input asset\n * @param toAsset - output asset\n * @param amount - amount to swap\n * @param destinationAddress - destination address for the swap\n * @param toleranceBps - slip percent\n * @param affiliateBps - affiliate percent\n * @param affiliate - affiliate address\n * @param height - block height\n * @returns quotes swap object response\n */\n public async getSwapQuote(\n fromAsset: string,\n toAsset: string,\n amount: number,\n destinationAddress?: string,\n toleranceBps?: number,\n affiliateBps?: number,\n affiliate?: string,\n height?: number,\n ): Promise<QuoteSwapResponse> {\n for (const api of this.quoteApis) {\n try {\n return (\n await api.quoteswap(\n height,\n fromAsset,\n toAsset,\n amount,\n destinationAddress,\n toleranceBps,\n affiliateBps,\n affiliate,\n )\n ).data\n } catch (e) {}\n }\n throw new Error(`MAYANode not responding`)\n }\n\n /**\n * Get current active mimir configuration.\n * @returns mimir configuration\n */\n public async getMimir(): Promise<MimirResponse> {\n for (const api of this.mimirApis) {\n try {\n return (await api.mimir()).data\n } catch (e) {}\n }\n throw Error(`MAYANode not responding`)\n }\n\n /**\n * Get the set of asgard addresses that should be used for inbound transactions.\n * @returns MAYA inbound addresses\n */\n public async getInboundAddresses(): Promise<InboundAddress[]> {\n for (const api of this.networkApis) {\n try {\n const resp = (await api.inboundAddresses()).data\n return resp\n } catch (e) {}\n }\n throw new Error(`MAYANode not responding`)\n }\n}\n","import { assetFromStringEx } from '@xchainjs/xchain-util'\n\nexport const BtcAsset = assetFromStringEx('BTC.BTC')\nexport const EthAsset = assetFromStringEx('ETH.ETH')\nexport const CacaoAsset = assetFromStringEx('MAYA.CACAO')\nexport const RuneAsset = assetFromStringEx('THOR.RUNE')\nexport const DashAsset = assetFromStringEx('DASH.DASH')\nexport const KujiraAsset = assetFromStringEx('KUJI.KUJI')\n\nexport const BtcChain = 'BTC'\nexport const EthChain = 'ETH'\nexport const MayaChain = 'MAYA'\nexport const ThorChain = 'THOR'\nexport const DashChain = 'DASH'\nexport const KujiraChain = 'KUJI'\n\nexport const DEFAULT_MAYACHAIN_DECIMALS = 8\n","import { Asset, CryptoAmount, assetToString, baseAmount } from '@xchainjs/xchain-util'\nimport BigNumber from 'bignumber.js'\n\nimport { CacaoAsset } from './const'\n\nexport const isCacaoAsset = (asset: Asset): boolean => assetToString(asset) === assetToString(CacaoAsset)\n\nexport const getBaseAmountWithDiffDecimals = (inputAmount: CryptoAmount, outDecimals: number): BigNumber => {\n const inDecimals = inputAmount.baseAmount.decimal\n let baseAmountOut = inputAmount.baseAmount.amount()\n const adjustDecimals = outDecimals - inDecimals\n baseAmountOut = baseAmountOut.times(10 ** adjustDecimals)\n return baseAmount(baseAmountOut, outDecimals).amount()\n}\n","import { MidgardQuery } from '@xchainjs/xchain-mayamidgard-query'\nimport { CachedValue } from '@xchainjs/xchain-util'\nimport { BigNumber } from 'bignumber.js'\n\nimport { InboundDetail } from './types'\nimport { MayaChain, Mayanode } from './utils'\n\nexport type MayachainCacheConf = {\n expirationTimeInboundAddress: number // Expiration time for the inbound address cache in milliseconds\n}\n\n/**\n * This class manages retrieving information from up-to-date Mayachain.\n */\nexport class MayachainCache {\n readonly midgardQuery: MidgardQuery // Instance of the Maya MidgardQuery API\n readonly mayanode: Mayanode // Instance of the Maya Mayanode API\n private conf: MayachainCacheConf // Configuration for the cache\n private readonly inboundDetailCache: CachedValue<Record<string, InboundDetail>> // Cached value for inbound details\n private readonly assetDecimalsCache: CachedValue<Record<string, number>> // Cached value for asset decimals\n\n /**\n * Constructor to create a MayachainCache.\n *\n * @param midgardQuery - An instance of the Maya MidgardQuery API.\n * @param mayanode - An instance of the Maya Mayanode API.\n * @param configuration - Optional configuration for the cache.\n * @returns MayachainCache.\n */\n constructor(\n midgardQuery = new MidgardQuery(),\n mayanode = new Mayanode(),\n configuration?: Partial<MayachainCacheConf>,\n ) {\n // Initialize instances and configuration\n this.midgardQuery = midgardQuery\n this.mayanode = mayanode\n this.conf = { expirationTimeInboundAddress: 6000, ...configuration }\n\n // Initialize cached values\n this.inboundDetailCache = new CachedValue<Record<string, InboundDetail>>(\n () => this.refreshInboundDetailCache(),\n this.conf.expirationTimeInboundAddress,\n )\n this.assetDecimalsCache = new CachedValue<Record<string, number>>(() => this.refreshAssetDecimalsCache())\n }\n\n /**\n * Get inbound addresses details.\n *\n * @returns Inbound details.\n */\n public async getInboundDetails(): Promise<Record<string, InboundDetail>> {\n if (!this.inboundDetailCache) throw Error(`Could not refresh inbound details`)\n return await this.inboundDetailCache.getValue()\n }\n\n /**\n * Get the number of decimals of the supported Mayachain tokens.\n *\n * @returns {Record<string, number>} A record with the string asset notation as key and the number of decimals as value.\n */\n public async getAssetDecimals(): Promise<Record<string, number>> {\n if (!this.assetDecimalsCache) throw Error(`Could not refresh assets decimals`)\n return await this.assetDecimalsCache.getValue()\n }\n\n /**\n * Refreshes the InboundDetailCache cache.\n */\n private async refreshInboundDetailCache(): Promise<Record<string, InboundDetail>> {\n // Implementation details for refreshing the inbound detail cache\n const [mimirDetails, allInboundAddresses] = await Promise.all([\n this.mayanode.getMimir(),\n this.mayanode.getInboundAddresses(),\n ])\n const inboundDetails: Record<string, InboundDetail> = {}\n for (const inbound of allInboundAddresses) {\n const chain = inbound.chain\n if (\n !chain ||\n !inbound.gas_rate ||\n !inbound.address ||\n !inbound.gas_rate_units ||\n !inbound.outbound_tx_size ||\n !inbound.outbound_fee ||\n !inbound.gas_rate_units\n )\n throw new Error(`Missing required inbound info`)\n\n inboundDetails[chain] = {\n chain: chain,\n address: inbound.address,\n router: inbound.router,\n gasRate: new BigNumber(inbound.gas_rate),\n gasRateUnits: inbound.gas_rate_units,\n outboundTxSize: new BigNumber(inbound.outbound_tx_size),\n outboundFee: new BigNumber(inbound.outbound_fee),\n haltedChain: inbound?.halted || !!mimirDetails[`HALT${chain}CHAIN`] || !!mimirDetails['HALTCHAINGLOBAL'],\n haltedTrading: !!mimirDetails['HALTTRADING'] || !!mimirDetails[`HALT${chain}TRADING`],\n haltedLP: !!mimirDetails['PAUSELP'] || !!mimirDetails[`PAUSELP${chain}`],\n }\n }\n // add mock MAYAChain inbound details\n inboundDetails[MayaChain] = {\n chain: MayaChain,\n address: '',\n router: '',\n gasRate: new BigNumber(0),\n gasRateUnits: '',\n outboundTxSize: new BigNumber(0),\n outboundFee: new BigNumber(0),\n haltedChain: false,\n haltedTrading: !!mimirDetails['HALTTRADING'],\n haltedLP: false, //\n }\n\n return inboundDetails\n }\n\n /**\n * Refreshes the number of decimals of the supported Mayachain tokens.\n */\n private async refreshAssetDecimalsCache(): Promise<Record<string, number>> {\n // Implementation details for refreshing the asset decimals cache\n // TODO: As soon as Mayachain returns native decimals from any endpoint of its API, refactor the function\n return {\n 'BTC.BTC': 8,\n 'ETH.ETH': 18,\n 'DASH.DASH': 8,\n 'KUJI.KUJI': 6,\n 'THOR.RUNE': 8,\n 'MAYA.CACAO': 8,\n 'ETH.USDT-0xdAC17F958D2ee523a2206206994597C13D831ec7': 6,\n 'ETH.USDC-0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48': 6,\n 'ETH.WSTETH-0X7F39C581F595B53C5CB19BD0B3F8DA6C935E2CA0': 18,\n 'KUJI.USK': 6,\n }\n }\n}\n","import { Network } from '@xchainjs/xchain-client'\nimport { MAYANameDetails } from '@xchainjs/xchain-mayamidgard-query'\nimport { QuoteSwapResponse } from '@xchainjs/xchain-mayanode'\nimport { Asset, CryptoAmount, assetFromStringEx, assetToString, baseAmount, isSynthAsset } from '@xchainjs/xchain-util'\n\nimport { MayachainCache } from './mayachain-cache'\nimport { InboundDetail, QuoteSwap, QuoteSwapParams } from './types'\nimport {\n BtcAsset,\n BtcChain,\n CacaoAsset,\n DEFAULT_MAYACHAIN_DECIMALS,\n DashAsset,\n DashChain,\n EthAsset,\n EthChain,\n KujiraAsset,\n KujiraChain,\n MayaChain,\n RuneAsset,\n ThorChain,\n getBaseAmountWithDiffDecimals,\n} from './utils'\n\n/**\n * MAYAChain Class for interacting with MAYAChain.\n * Recommended main class to use for swapping with MAYAChain\n * Has access to Midgard and MAYANode data\n */\nexport class MayachainQuery {\n private mayachainCache: MayachainCache\n\n /**\n * Constructor to create a MayachainAMM\n * @param mayachainCache - an instance of the MayachainCache (could be pointing to stagenet,testnet,mainnet)\n * @param chainAttributes - attributes used to calculate waitTime & conf counting\n * @returns MayachainAMM\n */\n constructor(mayachainCache = new MayachainCache()) {\n // Initialize MayachainCache instance\n this.mayachainCache = mayachainCache\n }\n\n /**\n * Get the Mayachain network.\n * @returns\n */\n public getNetwork(): Network {\n return this.mayachainCache.midgardQuery.getNetwork()\n }\n\n /**\n * Quote a swap operation.\n * @param {QuoteSwapParams} quoteSwapParams - Parameters for the quote swap operation.\n * @returns {QuoteSwap} A quote for the swap operation.\n */\n public async quoteSwap({\n fromAsset,\n destinationAsset,\n amount,\n destinationAddress,\n toleranceBps,\n affiliateBps,\n affiliateAddress,\n height,\n }: QuoteSwapParams): Promise<QuoteSwap> {\n const fromAssetString = assetToString(fromAsset)\n const toAssetString = assetToString(destinationAsset)\n // Endpoint allows 10 decimals for Cacao, 8 for the rest of assets\n const inputAmount =\n fromAssetString === assetToString(CacaoAsset)\n ? amount.baseAmount.amount()\n : getBaseAmountWithDiffDecimals(amount, 8)\n\n const swapQuote: QuoteSwapResponse = await this.mayachainCache.mayanode.getSwapQuote(\n fromAssetString,\n toAssetString,\n inputAmount.toNumber(),\n destinationAddress,\n toleranceBps,\n affiliateBps,\n affiliateAddress,\n height,\n )\n\n const response: { error?: string } = JSON.parse(JSON.stringify(swapQuote))\n if (response.error) {\n return {\n toAddress: ``,\n memo: ``,\n expectedAmount: new CryptoAmount(\n baseAmount(0, toAssetString === assetToString(CacaoAsset) ? 10 : 8),\n destinationAsset,\n ),\n dustThreshold: this.getChainDustValue(fromAsset.chain),\n fees: {\n asset: destinationAsset,\n affiliateFee: new CryptoAmount(\n baseAmount(0, toAssetString === assetToString(CacaoAsset) ? 10 : 8),\n destinationAsset,\n ),\n outboundFee: new CryptoAmount(\n baseAmount(0, toAssetString === assetToString(CacaoAsset) ? 10 : 8),\n destinationAsset,\n ),\n },\n outboundDelayBlocks: 0,\n outboundDelaySeconds: 0,\n inboundConfirmationSeconds: 0,\n inboundConfirmationBlocks: 0,\n canSwap: false,\n errors: [`Mayanode request quote: ${response.error}`],\n slipBasisPoints: 0,\n totalSwapSeconds: 0,\n warning: '',\n }\n }\n\n const feeAsset = assetFromStringEx(swapQuote.fees.asset)\n\n const errors: string[] = []\n if (swapQuote.memo === undefined) errors.push(`Error parsing swap quote: Memo is ${swapQuote.memo}`)\n\n const isFeeAssetCacao = swapQuote.fees.asset === assetToString(CacaoAsset)\n return {\n toAddress: swapQuote.inbound_address || '',\n memo: swapQuote.memo || '',\n expectedAmount: new CryptoAmount(\n baseAmount(swapQuote.expected_amount_out, toAssetString === assetToString(CacaoAsset) ? 10 : 8),\n destinationAsset,\n ),\n dustThreshold: this.getChainDustValue(fromAsset.chain),\n fees: {\n asset: feeAsset,\n affiliateFee: new CryptoAmount(baseAmount(swapQuote.fees.affiliate, isFeeAssetCacao ? 10 : 8), feeAsset),\n outboundFee: new CryptoAmount(baseAmount(swapQuote.fees.outbound, isFeeAssetCacao ? 10 : 8), feeAsset),\n },\n slipBasisPoints: swapQuote.slippage_bps,\n outboundDelayBlocks: swapQuote.outbound_delay_blocks,\n outboundDelaySeconds: swapQuote.outbound_delay_seconds,\n inboundConfirmationSeconds: swapQuote.inbound_confirmation_seconds,\n inboundConfirmationBlocks: swapQuote.inbound_confirmation_blocks,\n totalSwapSeconds: (swapQuote.inbound_confirmation_seconds || 0) + swapQuote.outbound_delay_seconds,\n canSwap: !(!swapQuote.memo || errors.length > 0),\n errors,\n warning: '',\n }\n }\n\n /**\n * Return mayachain supported chains dust amounts\n * @returns a map where chain is the key and dust amount cryptoAmount as value\n */\n public getDustValues(): Record<string, CryptoAmount> {\n // TODO: Find out how to fetch native asset decimals\n return {\n [BtcChain]: new CryptoAmount(baseAmount(10000, 8), BtcAsset),\n [EthChain]: new CryptoAmount(baseAmount(0, 18), EthAsset),\n [DashChain]: new CryptoAmount(baseAmount(10000, 8), DashAsset),\n [KujiraChain]: new CryptoAmount(baseAmount(0, 6), KujiraAsset),\n [ThorChain]: new CryptoAmount(baseAmount(0, 8), RuneAsset),\n [MayaChain]: new CryptoAmount(baseAmount(0, 10), CacaoAsset),\n }\n }\n\n /**\n * Return the dust crypto amount from the given chain\n * @param {string} chain Chain to retrieve the dust amount of\n * @returns a map where chain is the key and dust amount cryptoAmount as value\n */\n public getChainDustValue(chain: string): CryptoAmount {\n const dustValue = this.getDustValues()[chain]\n if (!dustValue) throw Error(`No dust value known for ${chain} chain`)\n return dustValue\n }\n\n /**\n * Get MAYAname details\n * @param {string} MAYAName\n * @returns {MAYANameDetails | undefined} MAYANames details or undefined it is does not exist\n */\n public async getMAYANameDetails(MAYAName: string): Promise<MAYANameDetails | undefined> {\n return this.mayachainCache.midgardQuery.getMAYANameDetails(MAYAName)\n }\n\n /**\n * Get inbound addresses details\n * @returns Inbound details\n */\n public async getInboundDetails(): Promise<Record<string, InboundDetail>> {\n return this.mayachainCache.getInboundDetails()\n }\n\n /**\n * Get chain inbound address details\n * @returns Inbound details\n */\n public async getChainInboundDetails(chain: string): Promise<InboundDetail> {\n const inboundDetails = await this.getInboundDetails()\n if (!inboundDetails[chain]) throw Error(`No inbound details known for ${chain} chain`)\n return inboundDetails[chain]\n }\n\n /**\n * Get asset decimals\n * @param {Asset} asset\n * @returns the asset decimals\n * @throws {Error} if the asset is not supported in Mayachain\n */\n public async getAssetDecimals(asset: Asset): Promise<number> {\n if (isSynthAsset(asset)) return DEFAULT_MAYACHAIN_DECIMALS\n\n const assetNotation = assetToString(asset)\n const assetsDecimals = await this.mayachainCache.getAssetDecimals()\n if (!assetsDecimals[assetNotation]) throw Error(`Can not get decimals for ${assetNotation}`)\n\n return assetsDecimals[assetNotation]\n }\n}\n"],"names":["Network","QuoteApi","Configuration","MimirApi","NetworkApi","axiosRetry","axios","assetFromStringEx","assetToString","baseAmount","MidgardQuery","CachedValue","BigNumber","CryptoAmount","isSynthAsset"],"mappings":"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"}
@@ -5,28 +5,41 @@ export type MayachainCacheConf = {
5
5
  expirationTimeInboundAddress: number;
6
6
  };
7
7
  /**
8
- * This class manages retrieving information from up to date Mayachain
8
+ * This class manages retrieving information from up-to-date Mayachain.
9
9
  */
10
10
  export declare class MayachainCache {
11
11
  readonly midgardQuery: MidgardQuery;
12
12
  readonly mayanode: Mayanode;
13
13
  private conf;
14
14
  private readonly inboundDetailCache;
15
+ private readonly assetDecimalsCache;
15
16
  /**
16
- * Constructor to create a MayachainCache
17
+ * Constructor to create a MayachainCache.
17
18
  *
18
- * @param midgardQuery - an instance of the Maya MidgardQuery API
19
- * @param mayanode
20
- * @returns MayachainCache
19
+ * @param midgardQuery - An instance of the Maya MidgardQuery API.
20
+ * @param mayanode - An instance of the Maya Mayanode API.
21
+ * @param configuration - Optional configuration for the cache.
22
+ * @returns MayachainCache.
21
23
  */
22
24
  constructor(midgardQuery?: MidgardQuery, mayanode?: Mayanode, configuration?: Partial<MayachainCacheConf>);
23
25
  /**
24
- * Get inbound addresses details
25
- * @returns Inbound details
26
+ * Get inbound addresses details.
27
+ *
28
+ * @returns Inbound details.
26
29
  */
27
30
  getInboundDetails(): Promise<Record<string, InboundDetail>>;
28
31
  /**
29
- * Refreshes the InboundDetailCache Cache
32
+ * Get the number of decimals of the supported Mayachain tokens.
33
+ *
34
+ * @returns {Record<string, number>} A record with the string asset notation as key and the number of decimals as value.
35
+ */
36
+ getAssetDecimals(): Promise<Record<string, number>>;
37
+ /**
38
+ * Refreshes the InboundDetailCache cache.
30
39
  */
31
40
  private refreshInboundDetailCache;
41
+ /**
42
+ * Refreshes the number of decimals of the supported Mayachain tokens.
43
+ */
44
+ private refreshAssetDecimalsCache;
32
45
  }
@@ -1,6 +1,6 @@
1
1
  import { Network } from '@xchainjs/xchain-client';
2
2
  import { MAYANameDetails } from '@xchainjs/xchain-mayamidgard-query';
3
- import { CryptoAmount } from '@xchainjs/xchain-util';
3
+ import { Asset, CryptoAmount } from '@xchainjs/xchain-util';
4
4
  import { MayachainCache } from './mayachain-cache';
5
5
  import { InboundDetail, QuoteSwap, QuoteSwapParams } from './types';
6
6
  /**
@@ -18,14 +18,14 @@ export declare class MayachainQuery {
18
18
  */
19
19
  constructor(mayachainCache?: MayachainCache);
20
20
  /**
21
- * Get the mayachain query is working with
21
+ * Get the Mayachain network.
22
22
  * @returns
23
23
  */
24
24
  getNetwork(): Network;
25
25
  /**
26
- * Quote a swap
27
- * @param {QuoteSwapParams} quoteSwapParams - quote swap input params
28
- * @returns {QuoteSwap}
26
+ * Quote a swap operation.
27
+ * @param {QuoteSwapParams} quoteSwapParams - Parameters for the quote swap operation.
28
+ * @returns {QuoteSwap} A quote for the swap operation.
29
29
  */
30
30
  quoteSwap({ fromAsset, destinationAsset, amount, destinationAddress, toleranceBps, affiliateBps, affiliateAddress, height, }: QuoteSwapParams): Promise<QuoteSwap>;
31
31
  /**
@@ -55,4 +55,11 @@ export declare class MayachainQuery {
55
55
  * @returns Inbound details
56
56
  */
57
57
  getChainInboundDetails(chain: string): Promise<InboundDetail>;
58
+ /**
59
+ * Get asset decimals
60
+ * @param {Asset} asset
61
+ * @returns the asset decimals
62
+ * @throws {Error} if the asset is not supported in Mayachain
63
+ */
64
+ getAssetDecimals(asset: Asset): Promise<number>;
58
65
  }
package/lib/types.d.ts CHANGED
@@ -1,13 +1,16 @@
1
1
  import { Address, Asset, Chain, CryptoAmount } from '@xchainjs/xchain-util';
2
2
  import { BigNumber } from 'bignumber.js';
3
3
  /**
4
- * Quote swap types
4
+ * Represents fees associated with a swap.
5
5
  */
6
6
  export type Fees = {
7
7
  asset: Asset;
8
8
  affiliateFee: CryptoAmount;
9
9
  outboundFee: CryptoAmount;
10
10
  };
11
+ /**
12
+ * Represents a quote for a swap operation.
13
+ */
11
14
  export type QuoteSwap = {
12
15
  toAddress: Address;
13
16
  memo: string;
@@ -24,6 +27,9 @@ export type QuoteSwap = {
24
27
  errors: string[];
25
28
  warning: string;
26
29
  };
30
+ /**
31
+ * Represents parameters for quoting a swap operation.
32
+ */
27
33
  export type QuoteSwapParams = {
28
34
  fromAsset: Asset;
29
35
  destinationAsset: Asset;
@@ -36,7 +42,7 @@ export type QuoteSwapParams = {
36
42
  affiliateAddress?: string;
37
43
  };
38
44
  /**
39
- * Inbound address
45
+ * Represents details about an inbound address.
40
46
  */
41
47
  export type InboundDetail = {
42
48
  chain: Chain;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xchainjs/xchain-mayachain-query",
3
- "version": "0.1.6",
3
+ "version": "0.1.8",
4
4
  "license": "MIT",
5
5
  "description": "Mayachain query module that is responsible for estimating swap calculations and add/remove liquidity for thorchain",
6
6
  "keywords": [
@@ -24,7 +24,7 @@
24
24
  "url": "git@github.com:xchainjs/xchainjs-lib.git"
25
25
  },
26
26
  "scripts": {
27
- "clean": "rimraf lib/**",
27
+ "clean": "rimraf --glob ./lib/**",
28
28
  "build": "yarn clean && rollup -c",
29
29
  "test": "jest",
30
30
  "e2e": "jest --config jest.config.e2e.js",
@@ -33,19 +33,19 @@
33
33
  "postversion": "git push --follow-tags"
34
34
  },
35
35
  "devDependencies": {
36
- "@xchainjs/xchain-client": "^0.16.1",
37
- "@xchainjs/xchain-mayamidgard-query": "^0.1.5",
36
+ "@xchainjs/xchain-client": "^0.16.2",
37
+ "@xchainjs/xchain-mayamidgard-query": "^0.1.6",
38
38
  "@xchainjs/xchain-mayanode": "^0.1.3",
39
- "@xchainjs/xchain-util": "^0.13.0",
39
+ "@xchainjs/xchain-util": "^0.13.3",
40
40
  "axios": "^1.3.6",
41
41
  "axios-retry": "^3.2.5",
42
42
  "bignumber.js": "^9.0.0"
43
43
  },
44
44
  "peerDependencies": {
45
- "@xchainjs/xchain-client": "^0.16.1",
46
- "@xchainjs/xchain-mayamidgard-query": "^0.1.5",
45
+ "@xchainjs/xchain-client": "^0.16.2",
46
+ "@xchainjs/xchain-mayamidgard-query": "^0.1.6",
47
47
  "@xchainjs/xchain-mayanode": "^0.1.3",
48
- "@xchainjs/xchain-util": "^0.13.0",
48
+ "@xchainjs/xchain-util": "^0.13.3",
49
49
  "axios": "^1.3.6",
50
50
  "axios-retry": "^3.2.5",
51
51
  "bignumber.js": "^9.0.0"
@@ -53,4 +53,4 @@
53
53
  "publishConfig": {
54
54
  "access": "public"
55
55
  }
56
- }
56
+ }