@shapeshiftoss/swapper 9.14.0 → 9.16.0

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.
Files changed (78) hide show
  1. package/dist/api.d.ts +12 -2
  2. package/dist/api.js +1 -0
  3. package/dist/manager/SwapperManager.js +3 -3
  4. package/dist/swappercli.js +8 -8
  5. package/dist/swappers/cow/CowSwapper.d.ts +2 -1
  6. package/dist/swappers/cow/CowSwapper.js +5 -2
  7. package/dist/swappers/cow/cowApprovalNeeded/cowApprovalNeeded.js +4 -4
  8. package/dist/swappers/cow/{cowApproveInfinite/cowApproveInfinite.d.ts → cowApprove/cowApprove.d.ts} +2 -1
  9. package/dist/swappers/cow/cowApprove/cowApprove.js +56 -0
  10. package/dist/swappers/cow/cowBuildTrade/cowBuildTrade.js +11 -11
  11. package/dist/swappers/cow/cowExecuteTrade/cowExecuteTrade.js +7 -7
  12. package/dist/swappers/cow/cowGetTradeTxs/cowGetTradeTxs.js +4 -4
  13. package/dist/swappers/cow/getCowSwapMinMax/getCowSwapMinMax.js +1 -1
  14. package/dist/swappers/cow/getCowSwapTradeQuote/getCowSwapTradeQuote.js +12 -12
  15. package/dist/swappers/cow/utils/blacklist.js +1 -1
  16. package/dist/swappers/cow/utils/cowService.js +2 -2
  17. package/dist/swappers/cow/utils/helpers/helpers.js +7 -7
  18. package/dist/swappers/osmosis/OsmosisSwapper.d.ts +1 -0
  19. package/dist/swappers/osmosis/OsmosisSwapper.js +24 -19
  20. package/dist/swappers/osmosis/utils/helpers.d.ts +1 -1
  21. package/dist/swappers/osmosis/utils/helpers.js +35 -35
  22. package/dist/swappers/test/TestSwapper.d.ts +1 -0
  23. package/dist/swappers/test/TestSwapper.js +6 -1
  24. package/dist/swappers/thorchain/ThorchainSwapper.d.ts +1 -0
  25. package/dist/swappers/thorchain/ThorchainSwapper.js +17 -12
  26. package/dist/swappers/thorchain/buildThorTrade/buildThorTrade.d.ts +1 -1
  27. package/dist/swappers/thorchain/buildThorTrade/buildThorTrade.js +14 -14
  28. package/dist/swappers/thorchain/getThorTradeQuote/getTradeQuote.js +14 -14
  29. package/dist/swappers/thorchain/thorTradeApprovalNeeded/thorTradeApprovalNeeded.d.ts +1 -1
  30. package/dist/swappers/thorchain/thorTradeApprovalNeeded/thorTradeApprovalNeeded.js +7 -7
  31. package/dist/swappers/thorchain/thorTradeApproveInfinite/thorTradeApproveInfinite.d.ts +1 -1
  32. package/dist/swappers/thorchain/thorTradeApproveInfinite/thorTradeApproveInfinite.js +7 -7
  33. package/dist/swappers/thorchain/utils/bitcoin/utils/getThorTxData.js +5 -5
  34. package/dist/swappers/thorchain/utils/constants.js +1 -1
  35. package/dist/swappers/thorchain/utils/cosmos/cosmosTxData.js +6 -6
  36. package/dist/swappers/thorchain/utils/estimateTradeFee/estimateTradeFee.js +6 -6
  37. package/dist/swappers/thorchain/utils/ethereum/makeTradeTx.d.ts +1 -1
  38. package/dist/swappers/thorchain/utils/ethereum/makeTradeTx.js +6 -6
  39. package/dist/swappers/thorchain/utils/ethereum/utils/getThorTxData.js +5 -5
  40. package/dist/swappers/thorchain/utils/getLimit/getLimit.d.ts +1 -1
  41. package/dist/swappers/thorchain/utils/getLimit/getLimit.js +2 -2
  42. package/dist/swappers/thorchain/utils/getPriceRatio/getPriceRatio.js +3 -3
  43. package/dist/swappers/thorchain/utils/getTradeRate/getTradeRate.js +5 -5
  44. package/dist/swappers/thorchain/utils/getUsdRate/getUsdRate.d.ts +1 -1
  45. package/dist/swappers/thorchain/utils/getUsdRate/getUsdRate.js +4 -4
  46. package/dist/swappers/thorchain/utils/makeSwapMemo/makeSwapMemo.d.ts +1 -1
  47. package/dist/swappers/thorchain/utils/makeSwapMemo/makeSwapMemo.js +4 -4
  48. package/dist/swappers/thorchain/utils/test-data/midgardResponse.js +11 -11
  49. package/dist/swappers/thorchain/utils/test-data/setupThorswapDeps.js +9 -9
  50. package/dist/swappers/thorchain/utils/thorService.js +2 -2
  51. package/dist/swappers/thorchain/utils/txFeeHelpers/btcTxFees/getBtcTxFees.d.ts +1 -1
  52. package/dist/swappers/thorchain/utils/txFeeHelpers/btcTxFees/getBtcTxFees.js +4 -4
  53. package/dist/swappers/thorchain/utils/txFeeHelpers/ethTxFees/getEthTxFees.d.ts +1 -1
  54. package/dist/swappers/thorchain/utils/txFeeHelpers/ethTxFees/getEthTxFees.js +7 -7
  55. package/dist/swappers/utils/abi/erc20-abi.js +54 -54
  56. package/dist/swappers/utils/abi/erc20Allowance-abi.js +7 -7
  57. package/dist/swappers/utils/helpers/helpers.d.ts +4 -4
  58. package/dist/swappers/utils/helpers/helpers.js +13 -13
  59. package/dist/swappers/utils/test-data/assets.js +8 -8
  60. package/dist/swappers/utils/test-data/setupDeps.js +3 -3
  61. package/dist/swappers/utils/test-data/setupSwapQuote.js +3 -3
  62. package/dist/swappers/zrx/ZrxSwapper.d.ts +2 -1
  63. package/dist/swappers/zrx/ZrxSwapper.js +7 -4
  64. package/dist/swappers/zrx/getZrxMinMax/getZrxMinMax.js +1 -1
  65. package/dist/swappers/zrx/getZrxTradeQuote/getZrxTradeQuote.js +7 -7
  66. package/dist/swappers/zrx/utils/blacklist.js +1 -1
  67. package/dist/swappers/zrx/utils/helpers/helpers.js +6 -6
  68. package/dist/swappers/zrx/utils/test-data/setupZrxSwapQuote.js +2 -2
  69. package/dist/swappers/zrx/utils/zrxService.js +2 -2
  70. package/dist/swappers/zrx/zrxApprovalNeeded/zrxApprovalNeeded.js +6 -6
  71. package/dist/swappers/zrx/zrxApprove/zrxApprove.d.ts +4 -0
  72. package/dist/swappers/zrx/zrxApprove/zrxApprove.js +62 -0
  73. package/dist/swappers/zrx/zrxBuildTrade/zrxBuildTrade.js +13 -11
  74. package/dist/swappers/zrx/zrxExecuteTrade/zrxExecuteTrade.js +6 -6
  75. package/package.json +1 -1
  76. package/dist/swappers/cow/cowApproveInfinite/cowApproveInfinite.js +0 -31
  77. package/dist/swappers/zrx/zrxApproveInfinite/zrxApproveInfinite.d.ts +0 -3
  78. package/dist/swappers/zrx/zrxApproveInfinite/zrxApproveInfinite.js +0 -42
@@ -18,7 +18,7 @@ class OsmosisSwapper {
18
18
  async getTradeTxs(tradeResult) {
19
19
  return {
20
20
  sellTxid: tradeResult.tradeId,
21
- buyTxid: tradeResult.tradeId
21
+ buyTxid: tradeResult.tradeId,
22
22
  };
23
23
  }
24
24
  async getUsdRate(input) {
@@ -40,7 +40,7 @@ class OsmosisSwapper {
40
40
  const maximum = constants_1.MAX_SWAPPER_SELL;
41
41
  return {
42
42
  minimum,
43
- maximum
43
+ maximum,
44
44
  };
45
45
  }
46
46
  async approvalNeeded() {
@@ -48,7 +48,12 @@ class OsmosisSwapper {
48
48
  }
49
49
  async approveInfinite() {
50
50
  throw new api_1.SwapError('OsmosisSwapper: approveInfinite unimplemented', {
51
- code: api_1.SwapErrorTypes.RESPONSE_ERROR
51
+ code: api_1.SwapErrorTypes.RESPONSE_ERROR,
52
+ });
53
+ }
54
+ async approveAmount() {
55
+ throw new api_1.SwapError('Osmosis: approveAmount unimplemented', {
56
+ code: api_1.SwapErrorTypes.RESPONSE_ERROR,
52
57
  });
53
58
  }
54
59
  filterBuyAssetsBySellAssetId(args) {
@@ -64,7 +69,7 @@ class OsmosisSwapper {
64
69
  const { sellAsset, buyAsset, sellAmount, receiveAddress } = args;
65
70
  if (!sellAmount) {
66
71
  throw new api_1.SwapError('sellAmount is required', {
67
- code: api_1.SwapErrorTypes.BUILD_TRADE_FAILED
72
+ code: api_1.SwapErrorTypes.BUILD_TRADE_FAILED,
68
73
  });
69
74
  }
70
75
  const { tradeFee, rate, buyAmount } = await (0, helpers_1.getRateInfo)(sellAsset.symbol, buyAsset.symbol, sellAmount !== '0' ? sellAmount : '1', this.deps.osmoUrl);
@@ -73,7 +78,7 @@ class OsmosisSwapper {
73
78
  const osmosisAdapter = this.deps.adapterManager.get(caip_1.osmosisChainId);
74
79
  if (!osmosisAdapter)
75
80
  throw new api_1.SwapError('Failed to get Osmosis adapter', {
76
- code: api_1.SwapErrorTypes.BUILD_TRADE_FAILED
81
+ code: api_1.SwapErrorTypes.BUILD_TRADE_FAILED,
77
82
  });
78
83
  const feeData = await osmosisAdapter.getFeeData({});
79
84
  const fee = feeData.fast.txFee;
@@ -86,14 +91,14 @@ class OsmosisSwapper {
86
91
  sellAmount: amountBaseSell,
87
92
  sellAsset,
88
93
  sellAssetAccountNumber: 0,
89
- sources: [{ name: 'Osmosis', proportion: '100' }]
94
+ sources: [{ name: 'Osmosis', proportion: '100' }],
90
95
  };
91
96
  }
92
97
  async getTradeQuote(input) {
93
98
  const { sellAsset, buyAsset, sellAmount } = input;
94
99
  if (!sellAmount) {
95
100
  throw new api_1.SwapError('sellAmount is required', {
96
- code: api_1.SwapErrorTypes.RESPONSE_ERROR
101
+ code: api_1.SwapErrorTypes.RESPONSE_ERROR,
97
102
  });
98
103
  }
99
104
  const { tradeFee, rate, buyAmount } = await (0, helpers_1.getRateInfo)(sellAsset.symbol, buyAsset.symbol, sellAmount !== '0' ? sellAmount : '1', this.deps.osmoUrl);
@@ -101,7 +106,7 @@ class OsmosisSwapper {
101
106
  const osmosisAdapter = this.deps.adapterManager.get(caip_1.osmosisChainId);
102
107
  if (!osmosisAdapter)
103
108
  throw new api_1.SwapError('Failed to get Osmosis adapter', {
104
- code: api_1.SwapErrorTypes.TRADE_QUOTE_FAILED
109
+ code: api_1.SwapErrorTypes.TRADE_QUOTE_FAILED,
105
110
  });
106
111
  const feeData = await osmosisAdapter.getFeeData({});
107
112
  const fee = feeData.fast.txFee;
@@ -116,7 +121,7 @@ class OsmosisSwapper {
116
121
  sellAmount,
117
122
  buyAmount,
118
123
  sources: constants_1.DEFAULT_SOURCE,
119
- allowanceContract: ''
124
+ allowanceContract: '',
120
125
  };
121
126
  }
122
127
  async executeTrade({ trade, wallet }) {
@@ -129,7 +134,7 @@ class OsmosisSwapper {
129
134
  const cosmosAdapter = this.deps.adapterManager.get(caip_1.cosmosChainId);
130
135
  if (!cosmosAdapter || !osmosisAdapter) {
131
136
  throw new api_1.SwapError('Failed to get adapters', {
132
- code: api_1.SwapErrorTypes.EXECUTE_TRADE_FAILED
137
+ code: api_1.SwapErrorTypes.EXECUTE_TRADE_FAILED,
133
138
  });
134
139
  }
135
140
  let sellAddress;
@@ -137,17 +142,17 @@ class OsmosisSwapper {
137
142
  const gas = feeData.fast.chainSpecific.gasLimit;
138
143
  if (!isFromOsmo) {
139
144
  const sellBip44Params = cosmosAdapter.buildBIP44Params({
140
- accountNumber: Number(sellAssetAccountNumber)
145
+ accountNumber: Number(sellAssetAccountNumber),
141
146
  });
142
147
  sellAddress = await cosmosAdapter.getAddress({ wallet, bip44Params: sellBip44Params });
143
148
  if (!sellAddress)
144
149
  throw new api_1.SwapError('Failed to get address', {
145
- code: api_1.SwapErrorTypes.EXECUTE_TRADE_FAILED
150
+ code: api_1.SwapErrorTypes.EXECUTE_TRADE_FAILED,
146
151
  });
147
152
  const transfer = {
148
153
  sender: sellAddress,
149
154
  receiver: receiveAddress,
150
- amount: sellAmount
155
+ amount: sellAmount,
151
156
  };
152
157
  const responseAccount = await cosmosAdapter.getAccount(sellAddress);
153
158
  const accountNumber = responseAccount.chainSpecific.accountNumber || '0';
@@ -157,7 +162,7 @@ class OsmosisSwapper {
157
162
  const pollResult = await (0, helpers_1.pollForComplete)(tradeId, this.deps.cosmosUrl);
158
163
  if (pollResult !== 'success')
159
164
  throw new api_1.SwapError('ibc transfer failed', {
160
- code: api_1.SwapErrorTypes.EXECUTE_TRADE_FAILED
165
+ code: api_1.SwapErrorTypes.EXECUTE_TRADE_FAILED,
161
166
  });
162
167
  ibcSellAmount = await (0, helpers_1.pollForAtomChannelBalance)(receiveAddress, this.deps.osmoUrl);
163
168
  // delay to ensure all nodes we interact with are up to date at this point
@@ -166,12 +171,12 @@ class OsmosisSwapper {
166
171
  }
167
172
  else {
168
173
  const sellBip44Params = osmosisAdapter.buildBIP44Params({
169
- accountNumber: Number(sellAssetAccountNumber)
174
+ accountNumber: Number(sellAssetAccountNumber),
170
175
  });
171
176
  sellAddress = await osmosisAdapter.getAddress({ wallet, bip44Params: sellBip44Params });
172
177
  if (!sellAddress)
173
178
  throw new api_1.SwapError('failed to get osmoAddress', {
174
- code: api_1.SwapErrorTypes.EXECUTE_TRADE_FAILED
179
+ code: api_1.SwapErrorTypes.EXECUTE_TRADE_FAILED,
175
180
  });
176
181
  }
177
182
  const osmoAddress = isFromOsmo ? sellAddress : receiveAddress;
@@ -182,7 +187,7 @@ class OsmosisSwapper {
182
187
  sellAssetDenom,
183
188
  sellAmount: ibcSellAmount !== null && ibcSellAmount !== void 0 ? ibcSellAmount : sellAmount,
184
189
  gas,
185
- wallet
190
+ wallet,
186
191
  });
187
192
  const signed = await osmosisAdapter.signTransaction(signTxInput);
188
193
  const tradeId = await osmosisAdapter.broadcastTransaction(signed);
@@ -190,13 +195,13 @@ class OsmosisSwapper {
190
195
  const pollResult = await (0, helpers_1.pollForComplete)(tradeId, this.deps.osmoUrl);
191
196
  if (pollResult !== 'success')
192
197
  throw new api_1.SwapError('osmo swap failed', {
193
- code: api_1.SwapErrorTypes.EXECUTE_TRADE_FAILED
198
+ code: api_1.SwapErrorTypes.EXECUTE_TRADE_FAILED,
194
199
  });
195
200
  const amount = await (0, helpers_1.pollForAtomChannelBalance)(sellAddress, this.deps.osmoUrl);
196
201
  const transfer = {
197
202
  sender: sellAddress,
198
203
  receiver: receiveAddress,
199
- amount
204
+ amount,
200
205
  };
201
206
  const ibcResponseAccount = await osmosisAdapter.getAccount(sellAddress);
202
207
  const ibcAccountNumber = ibcResponseAccount.chainSpecific.accountNumber || '0';
@@ -22,7 +22,7 @@ export declare const getRateInfo: (sellAsset: string, buyAsset: string, sellAmou
22
22
  buyAmount: string;
23
23
  }>;
24
24
  export declare const performIbcTransfer: (input: IbcTransferInput, adapter: CosmosSdkSupportedChainAdapters, wallet: HDWallet, blockBaseUrl: string, denom: string, sourceChannel: string, feeAmount: string, accountNumber: string, sequence: string, gas: string) => Promise<TradeResult>;
25
- export declare const buildTradeTx: ({ osmoAddress, adapter, buyAssetDenom, sellAssetDenom, sellAmount, gas, wallet }: {
25
+ export declare const buildTradeTx: ({ osmoAddress, adapter, buyAssetDenom, sellAssetDenom, sellAmount, gas, wallet, }: {
26
26
  osmoAddress: string;
27
27
  adapter: osmosis.ChainAdapter;
28
28
  buyAssetDenom: string;
@@ -15,7 +15,7 @@ const constants_1 = require("./constants");
15
15
  exports.symbolDenomMapping = {
16
16
  OSMO: 'uosmo',
17
17
  ATOM: 'ibc/27394FB092D2ECCD56123C74F36E4C1F926001CEADA9CA97EA622B25F41E5EB2',
18
- USDC: 'ibc/D189335C6E4A68B513C10AB227BF1C1D38C746766278BA3EEB4FB14124F1D858'
18
+ USDC: 'ibc/D189335C6E4A68B513C10AB227BF1C1D38C746766278BA3EEB4FB14124F1D858',
19
19
  };
20
20
  const txStatus = async (txid, baseUrl) => {
21
21
  var _a, _b, _c;
@@ -44,7 +44,7 @@ const pollForComplete = async (txid, baseUrl) => {
44
44
  }
45
45
  else if (Date.now() - startTime > timeout) {
46
46
  reject(new index_1.SwapError(`Couldnt find tx ${txid}`, {
47
- code: index_1.SwapErrorTypes.RESPONSE_ERROR
47
+ code: index_1.SwapErrorTypes.RESPONSE_ERROR,
48
48
  }));
49
49
  }
50
50
  else {
@@ -62,7 +62,7 @@ const getAtomChannelBalance = async (address, osmoUrl) => {
62
62
  }
63
63
  catch (e) {
64
64
  throw new index_1.SwapError('failed to get balance', {
65
- code: index_1.SwapErrorTypes.RESPONSE_ERROR
65
+ code: index_1.SwapErrorTypes.RESPONSE_ERROR,
66
66
  });
67
67
  }
68
68
  })();
@@ -89,7 +89,7 @@ const pollForAtomChannelBalance = async (address, osmoUrl) => {
89
89
  }
90
90
  else if (Date.now() - startTime > timeout) {
91
91
  reject(new index_1.SwapError(`Couldnt find channel balance for ${address}`, {
92
- code: index_1.SwapErrorTypes.RESPONSE_ERROR
92
+ code: index_1.SwapErrorTypes.RESPONSE_ERROR,
93
93
  }));
94
94
  }
95
95
  else {
@@ -110,7 +110,7 @@ const findPool = async (sellAssetSymbol, buyAssetSymbol, osmoUrl) => {
110
110
  }
111
111
  catch (e) {
112
112
  throw new index_1.SwapError('failed to get pool', {
113
- code: index_1.SwapErrorTypes.POOL_NOT_FOUND
113
+ code: index_1.SwapErrorTypes.POOL_NOT_FOUND,
114
114
  });
115
115
  }
116
116
  })();
@@ -122,7 +122,7 @@ const findPool = async (sellAssetSymbol, buyAssetSymbol, osmoUrl) => {
122
122
  });
123
123
  if (!foundPool)
124
124
  throw new index_1.SwapError('could not find pool', {
125
- code: index_1.SwapErrorTypes.POOL_NOT_FOUND
125
+ code: index_1.SwapErrorTypes.POOL_NOT_FOUND,
126
126
  });
127
127
  const { sellAssetIndex, buyAssetIndex } = (() => {
128
128
  if (foundPool.poolAssets[0].token.denom === sellAssetDenom) {
@@ -151,7 +151,7 @@ const getInfoFromPool = (sellAmount, pool, sellAssetIndex, buyAssetIndex) => {
151
151
  rate,
152
152
  priceImpact,
153
153
  tradeFee,
154
- buyAmount
154
+ buyAmount,
155
155
  };
156
156
  };
157
157
  const getRateInfo = async (sellAsset, buyAsset, sellAmount, osmoUrl) => {
@@ -168,13 +168,13 @@ const performIbcTransfer = async (input, adapter, wallet, blockBaseUrl, denom, s
168
168
  }
169
169
  catch (e) {
170
170
  throw new index_1.SwapError('failed to get latest block', {
171
- code: index_1.SwapErrorTypes.RESPONSE_ERROR
171
+ code: index_1.SwapErrorTypes.RESPONSE_ERROR,
172
172
  });
173
173
  }
174
174
  })();
175
175
  const latestBlock = responseLatestBlock.data.block.header.height;
176
176
  const bip44Params = adapter.buildBIP44Params({
177
- accountNumber: 0 // TODO: Use real accountNumbers
177
+ accountNumber: 0, // TODO: Use real accountNumbers
178
178
  });
179
179
  const path = (0, chain_adapters_1.toPath)(bip44Params);
180
180
  const addressNList = (0, hdwallet_core_1.bip32ToAddressNList)(path);
@@ -184,10 +184,10 @@ const performIbcTransfer = async (input, adapter, wallet, blockBaseUrl, denom, s
184
184
  amount: [
185
185
  {
186
186
  amount: feeAmount.toString(),
187
- denom: 'uosmo'
188
- }
187
+ denom: 'uosmo',
188
+ },
189
189
  ],
190
- gas
190
+ gas,
191
191
  },
192
192
  signatures: null,
193
193
  msg: [
@@ -198,17 +198,17 @@ const performIbcTransfer = async (input, adapter, wallet, blockBaseUrl, denom, s
198
198
  source_channel: sourceChannel,
199
199
  token: {
200
200
  denom,
201
- amount
201
+ amount,
202
202
  },
203
203
  sender,
204
204
  receiver,
205
205
  timeout_height: {
206
206
  revision_number: '4',
207
- revision_height: String(Number(latestBlock) + 100)
208
- }
209
- }
210
- }
211
- ]
207
+ revision_height: String(Number(latestBlock) + 100),
208
+ },
209
+ },
210
+ },
211
+ ],
212
212
  };
213
213
  const signed = await adapter.signTransaction({
214
214
  txToSign: {
@@ -216,23 +216,23 @@ const performIbcTransfer = async (input, adapter, wallet, blockBaseUrl, denom, s
216
216
  addressNList,
217
217
  chain_id: caip_1.CHAIN_REFERENCE.OsmosisMainnet,
218
218
  account_number: accountNumber,
219
- sequence
219
+ sequence,
220
220
  },
221
- wallet
221
+ wallet,
222
222
  });
223
223
  const tradeId = await adapter.broadcastTransaction(signed);
224
224
  return {
225
- tradeId
225
+ tradeId,
226
226
  };
227
227
  };
228
228
  exports.performIbcTransfer = performIbcTransfer;
229
229
  // TODO: move to chain adapters
230
- const buildTradeTx = async ({ osmoAddress, adapter, buyAssetDenom, sellAssetDenom, sellAmount, gas, wallet }) => {
230
+ const buildTradeTx = async ({ osmoAddress, adapter, buyAssetDenom, sellAssetDenom, sellAmount, gas, wallet, }) => {
231
231
  const responseAccount = await adapter.getAccount(osmoAddress);
232
232
  const accountNumber = responseAccount.chainSpecific.accountNumber || '0';
233
233
  const sequence = responseAccount.chainSpecific.sequence || '0';
234
234
  const bip44Params = adapter.buildBIP44Params({
235
- accountNumber: 0 // TODO: Use real accountNumbers
235
+ accountNumber: 0, // TODO: Use real accountNumbers
236
236
  });
237
237
  const path = (0, chain_adapters_1.toPath)(bip44Params);
238
238
  const osmoAddressNList = (0, hdwallet_core_1.bip32ToAddressNList)(path);
@@ -242,10 +242,10 @@ const buildTradeTx = async ({ osmoAddress, adapter, buyAssetDenom, sellAssetDeno
242
242
  amount: [
243
243
  {
244
244
  amount: '0',
245
- denom: 'uosmo'
246
- }
245
+ denom: 'uosmo',
246
+ },
247
247
  ],
248
- gas
248
+ gas,
249
249
  },
250
250
  signatures: null,
251
251
  msg: [
@@ -256,17 +256,17 @@ const buildTradeTx = async ({ osmoAddress, adapter, buyAssetDenom, sellAssetDeno
256
256
  routes: [
257
257
  {
258
258
  poolId: '1',
259
- tokenOutDenom: buyAssetDenom
260
- }
259
+ tokenOutDenom: buyAssetDenom,
260
+ },
261
261
  ],
262
262
  tokenIn: {
263
263
  denom: sellAssetDenom,
264
- amount: sellAmount
264
+ amount: sellAmount,
265
265
  },
266
- tokenOutMinAmount: '1' // slippage tolerance
267
- }
268
- }
269
- ]
266
+ tokenOutMinAmount: '1', // slippage tolerance
267
+ },
268
+ },
269
+ ],
270
270
  };
271
271
  return {
272
272
  txToSign: {
@@ -274,9 +274,9 @@ const buildTradeTx = async ({ osmoAddress, adapter, buyAssetDenom, sellAssetDeno
274
274
  addressNList: osmoAddressNList,
275
275
  chain_id: caip_1.CHAIN_REFERENCE.OsmosisMainnet,
276
276
  account_number: accountNumber,
277
- sequence
277
+ sequence,
278
278
  },
279
- wallet
279
+ wallet,
280
280
  };
281
281
  };
282
282
  exports.buildTradeTx = buildTradeTx;
@@ -14,6 +14,7 @@ export declare class TestSwapper implements Swapper<ChainId> {
14
14
  getUsdRate(input: Pick<Asset, 'symbol' | 'assetId'>): Promise<string>;
15
15
  approvalNeeded(): Promise<ApprovalNeededOutput>;
16
16
  approveInfinite(): Promise<string>;
17
+ approveAmount(): Promise<string>;
17
18
  filterBuyAssetsBySellAssetId(args: BuyAssetBySellIdInput): AssetId[];
18
19
  filterAssetIdsBySellable(): AssetId[];
19
20
  buildTrade(): Promise<Trade<ChainId>>;
@@ -12,7 +12,7 @@ class TestSwapper {
12
12
  this.supportAssets = [
13
13
  'bip122:000000000019d6689c085ae165831e93/slip44:0',
14
14
  'cosmos:cosmoshub-4/slip44:118',
15
- 'eip155:1/erc20:0xc770eefad204b5180df6a14ee197d99d808ee52d'
15
+ 'eip155:1/erc20:0xc770eefad204b5180df6a14ee197d99d808ee52d',
16
16
  ];
17
17
  }
18
18
  // noop for test
@@ -31,6 +31,11 @@ class TestSwapper {
31
31
  async approveInfinite() {
32
32
  throw new Error('TestSwapper: approveInfinite unimplemented');
33
33
  }
34
+ async approveAmount() {
35
+ throw new api_1.SwapError('TestSwapper: approveAmount unimplemented', {
36
+ code: api_1.SwapErrorTypes.RESPONSE_ERROR,
37
+ });
38
+ }
34
39
  filterBuyAssetsBySellAssetId(args) {
35
40
  const { sellAssetId } = args;
36
41
  if (!this.supportAssets.includes(sellAssetId))
@@ -17,6 +17,7 @@ export declare class ThorchainSwapper implements Swapper<ChainId> {
17
17
  getUsdRate(input: Pick<Asset, 'symbol' | 'assetId'>): Promise<string>;
18
18
  approvalNeeded(input: ApprovalNeededInput<KnownChainIds.EthereumMainnet>): Promise<ApprovalNeededOutput>;
19
19
  approveInfinite(input: ApproveInfiniteInput<KnownChainIds.EthereumMainnet>): Promise<string>;
20
+ approveAmount(): Promise<string>;
20
21
  filterBuyAssetsBySellAssetId(args: BuyAssetBySellIdInput): AssetId[];
21
22
  filterAssetIdsBySellable(): AssetId[];
22
23
  buildTrade(input: BuildTradeInput): Promise<Trade<ChainId>>;
@@ -34,7 +34,7 @@ class ThorchainSwapper {
34
34
  [types_1.KnownChainIds.DogecoinMainnet]: true,
35
35
  [types_1.KnownChainIds.LitecoinMainnet]: true,
36
36
  [types_1.KnownChainIds.BitcoinCashMainnet]: true,
37
- [types_1.KnownChainIds.CosmosMainnet]: true
37
+ [types_1.KnownChainIds.CosmosMainnet]: true,
38
38
  };
39
39
  this.buySupportedChainIds = {
40
40
  [types_1.KnownChainIds.EthereumMainnet]: true,
@@ -42,7 +42,7 @@ class ThorchainSwapper {
42
42
  [types_1.KnownChainIds.DogecoinMainnet]: true,
43
43
  [types_1.KnownChainIds.LitecoinMainnet]: true,
44
44
  [types_1.KnownChainIds.BitcoinCashMainnet]: true,
45
- [types_1.KnownChainIds.CosmosMainnet]: true
45
+ [types_1.KnownChainIds.CosmosMainnet]: true,
46
46
  };
47
47
  this.supportedSellAssetIds = [];
48
48
  this.supportedBuyAssetIds = [];
@@ -69,7 +69,7 @@ class ThorchainSwapper {
69
69
  catch (e) {
70
70
  throw new api_1.SwapError('[thorchainInitialize]: initialize failed to set supportedAssetIds', {
71
71
  code: api_1.SwapErrorTypes.INITIALIZE_FAILED,
72
- cause: e
72
+ cause: e,
73
73
  });
74
74
  }
75
75
  }
@@ -85,6 +85,11 @@ class ThorchainSwapper {
85
85
  async approveInfinite(input) {
86
86
  return (0, thorTradeApproveInfinite_1.thorTradeApproveInfinite)({ deps: this.deps, input });
87
87
  }
88
+ async approveAmount() {
89
+ throw new api_1.SwapError('ThorchainSwapper: approveAmount unimplemented', {
90
+ code: api_1.SwapErrorTypes.RESPONSE_ERROR,
91
+ });
92
+ }
88
93
  filterBuyAssetsBySellAssetId(args) {
89
94
  const { assetIds = [], sellAssetId } = args;
90
95
  if (!this.supportedSellAssetIds.includes(sellAssetId))
@@ -108,13 +113,13 @@ class ThorchainSwapper {
108
113
  throw new api_1.SwapError('[executeTrade]: no adapter for sell asset chain id', {
109
114
  code: api_1.SwapErrorTypes.SIGN_AND_BROADCAST_FAILED,
110
115
  details: { chainId: trade.sellAsset.chainId },
111
- fn: 'executeTrade'
116
+ fn: 'executeTrade',
112
117
  });
113
118
  const { chainNamespace } = (0, caip_1.fromAssetId)(trade.sellAsset.assetId);
114
119
  if (chainNamespace === caip_1.CHAIN_NAMESPACE.Ethereum) {
115
120
  const signedTx = await adapter.signTransaction({
116
121
  txToSign: trade.txData,
117
- wallet
122
+ wallet,
118
123
  });
119
124
  const txid = await adapter.broadcastTransaction(signedTx);
120
125
  return { tradeId: txid };
@@ -122,7 +127,7 @@ class ThorchainSwapper {
122
127
  else if (chainNamespace === caip_1.CHAIN_NAMESPACE.Bitcoin) {
123
128
  const signedTx = await adapter.signTransaction({
124
129
  txToSign: trade.txData,
125
- wallet
130
+ wallet,
126
131
  });
127
132
  const txid = await adapter.broadcastTransaction(signedTx);
128
133
  return { tradeId: txid };
@@ -130,7 +135,7 @@ class ThorchainSwapper {
130
135
  else if (chainNamespace === caip_1.CHAIN_NAMESPACE.Cosmos) {
131
136
  const signedTx = await adapter.signTransaction({
132
137
  txToSign: trade.txData,
133
- wallet
138
+ wallet,
134
139
  });
135
140
  const txid = await adapter.broadcastTransaction(signedTx);
136
141
  return { tradeId: txid };
@@ -138,7 +143,7 @@ class ThorchainSwapper {
138
143
  else {
139
144
  throw new api_1.SwapError('[executeTrade]: unsupported trade', {
140
145
  code: api_1.SwapErrorTypes.SIGN_AND_BROADCAST_FAILED,
141
- fn: 'executeTrade'
146
+ fn: 'executeTrade',
142
147
  });
143
148
  }
144
149
  }
@@ -147,7 +152,7 @@ class ThorchainSwapper {
147
152
  throw e;
148
153
  throw new api_1.SwapError('[executeTrade]: failed to sign or broadcast', {
149
154
  code: api_1.SwapErrorTypes.SIGN_AND_BROADCAST_FAILED,
150
- cause: e
155
+ cause: e,
151
156
  });
152
157
  }
153
158
  }
@@ -166,14 +171,14 @@ class ThorchainSwapper {
166
171
  ((_d = responseData === null || responseData === void 0 ? void 0 : responseData.actions[0]) === null || _d === void 0 ? void 0 : _d.type) !== 'swap')
167
172
  throw new api_1.SwapError('[getTradeTxs]: trade failed', {
168
173
  code: api_1.SwapErrorTypes.TRADE_FAILED,
169
- cause: responseData
174
+ cause: responseData,
170
175
  });
171
176
  const standardBuyTxid = ((_g = (_f = (_e = responseData === null || responseData === void 0 ? void 0 : responseData.actions[0]) === null || _e === void 0 ? void 0 : _e.out[0]) === null || _f === void 0 ? void 0 : _f.coins[0]) === null || _g === void 0 ? void 0 : _g.asset.startsWith('ETH.'))
172
177
  ? `0x${buyTxid}`
173
178
  : buyTxid;
174
179
  return {
175
180
  sellTxid: tradeResult.tradeId,
176
- buyTxid: standardBuyTxid.toLowerCase()
181
+ buyTxid: standardBuyTxid.toLowerCase(),
177
182
  };
178
183
  }
179
184
  catch (e) {
@@ -181,7 +186,7 @@ class ThorchainSwapper {
181
186
  throw e;
182
187
  throw new api_1.SwapError('[getTradeTxs]: error', {
183
188
  code: api_1.SwapErrorTypes.GET_TRADE_TXS_FAILED,
184
- cause: e
189
+ cause: e,
185
190
  });
186
191
  }
187
192
  }
@@ -1,7 +1,7 @@
1
1
  import { ChainId } from '@shapeshiftoss/caip';
2
2
  import { BuildTradeInput } from '../../../api';
3
3
  import { ThorchainSwapperDeps, ThorTrade } from '../types';
4
- export declare const buildTrade: ({ deps, input }: {
4
+ export declare const buildTrade: ({ deps, input, }: {
5
5
  deps: ThorchainSwapperDeps;
6
6
  input: BuildTradeInput;
7
7
  }) => Promise<ThorTrade<ChainId>>;
@@ -9,22 +9,22 @@ const getTradeQuote_1 = require("../getThorTradeQuote/getTradeQuote");
9
9
  const getThorTxData_1 = require("../utils/bitcoin/utils/getThorTxData");
10
10
  const cosmosTxData_1 = require("../utils/cosmos/cosmosTxData");
11
11
  const makeTradeTx_1 = require("../utils/ethereum/makeTradeTx");
12
- const buildTrade = async ({ deps, input }) => {
12
+ const buildTrade = async ({ deps, input, }) => {
13
13
  var _a, _b, _c, _d;
14
14
  try {
15
- const { buyAsset, sellAsset, sellAssetAccountNumber, sellAmount, wallet, slippage: slippageTolerance = constants_1.DEFAULT_SLIPPAGE, receiveAddress: destinationAddress } = input;
15
+ const { buyAsset, sellAsset, sellAssetAccountNumber, sellAmount, wallet, slippage: slippageTolerance = constants_1.DEFAULT_SLIPPAGE, receiveAddress: destinationAddress, } = input;
16
16
  const quote = await (0, getTradeQuote_1.getThorTradeQuote)({ deps, input });
17
17
  const sellAdapter = deps.adapterManager.get(sellAsset.chainId);
18
18
  if (!sellAdapter)
19
19
  throw new api_1.SwapError('[buildTrade]: unsupported sell asset', {
20
20
  code: api_1.SwapErrorTypes.BUILD_TRADE_FAILED,
21
21
  fn: 'buildTrade',
22
- details: { sellAsset }
22
+ details: { sellAsset },
23
23
  });
24
24
  const { chainNamespace } = (0, caip_1.fromAssetId)(sellAsset.assetId);
25
25
  if (chainNamespace === caip_1.CHAIN_NAMESPACE.Ethereum) {
26
26
  const sellAssetBip44Params = sellAdapter.buildBIP44Params({
27
- accountNumber: sellAssetAccountNumber
27
+ accountNumber: sellAssetAccountNumber,
28
28
  });
29
29
  const ethTradeTx = await (0, makeTradeTx_1.makeTradeTx)({
30
30
  wallet,
@@ -38,13 +38,13 @@ const buildTrade = async ({ deps, input }) => {
38
38
  deps,
39
39
  gasPrice: (_b = (_a = quote.feeData.chainSpecific) === null || _a === void 0 ? void 0 : _a.gasPrice) !== null && _b !== void 0 ? _b : '0',
40
40
  gasLimit: (_d = (_c = quote.feeData.chainSpecific) === null || _c === void 0 ? void 0 : _c.estimatedGas) !== null && _d !== void 0 ? _d : '0',
41
- tradeFee: quote.feeData.tradeFee
41
+ tradeFee: quote.feeData.tradeFee,
42
42
  });
43
43
  return {
44
44
  chainId: types_1.KnownChainIds.EthereumMainnet,
45
45
  ...quote,
46
46
  receiveAddress: destinationAddress,
47
- txData: ethTradeTx.txToSign
47
+ txData: ethTradeTx.txToSign,
48
48
  };
49
49
  }
50
50
  else if (chainNamespace === caip_1.CHAIN_NAMESPACE.Bitcoin) {
@@ -58,7 +58,7 @@ const buildTrade = async ({ deps, input }) => {
58
58
  wallet,
59
59
  bip44Params: input.bip44Params,
60
60
  accountType: input.accountType,
61
- tradeFee: quote.feeData.tradeFee
61
+ tradeFee: quote.feeData.tradeFee,
62
62
  });
63
63
  const buildTxResponse = await sellAdapter.buildSendTransaction({
64
64
  value: sellAmount,
@@ -69,14 +69,14 @@ const buildTrade = async ({ deps, input }) => {
69
69
  accountType: input.accountType,
70
70
  satoshiPerByte: quote.feeData.chainSpecific
71
71
  .satsPerByte,
72
- opReturnData
73
- }
72
+ opReturnData,
73
+ },
74
74
  });
75
75
  return {
76
76
  chainId: sellAsset.chainId,
77
77
  ...quote,
78
78
  receiveAddress: destinationAddress,
79
- txData: buildTxResponse.txToSign
79
+ txData: buildTxResponse.txToSign,
80
80
  };
81
81
  }
82
82
  else if (chainNamespace === caip_1.CHAIN_NAMESPACE.Cosmos) {
@@ -90,20 +90,20 @@ const buildTrade = async ({ deps, input }) => {
90
90
  buyAsset,
91
91
  wallet,
92
92
  destinationAddress,
93
- quote: quote
93
+ quote: quote,
94
94
  });
95
95
  return {
96
96
  chainId: types_1.KnownChainIds.CosmosMainnet,
97
97
  ...quote,
98
98
  receiveAddress: destinationAddress,
99
- txData
99
+ txData,
100
100
  };
101
101
  }
102
102
  else {
103
103
  throw new api_1.SwapError('[buildTrade]: unsupported chain id', {
104
104
  code: api_1.SwapErrorTypes.BUILD_TRADE_FAILED,
105
105
  fn: 'buildTrade',
106
- details: { sellAsset }
106
+ details: { sellAsset },
107
107
  });
108
108
  }
109
109
  }
@@ -112,7 +112,7 @@ const buildTrade = async ({ deps, input }) => {
112
112
  throw e;
113
113
  throw new api_1.SwapError('[buildTrade]: error building trade', {
114
114
  code: api_1.SwapErrorTypes.BUILD_TRADE_FAILED,
115
- fn: 'buildTrade'
115
+ fn: 'buildTrade',
116
116
  });
117
117
  }
118
118
  };