@shapeshiftoss/swapper 9.13.0 → 9.15.1

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 (76) 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 +1 -0
  6. package/dist/swappers/cow/CowSwapper.js +5 -0
  7. package/dist/swappers/cow/cowApprovalNeeded/cowApprovalNeeded.js +4 -4
  8. package/dist/swappers/cow/cowApproveInfinite/cowApproveInfinite.js +3 -3
  9. package/dist/swappers/cow/cowBuildTrade/cowBuildTrade.js +11 -11
  10. package/dist/swappers/cow/cowExecuteTrade/cowExecuteTrade.js +7 -7
  11. package/dist/swappers/cow/cowGetTradeTxs/cowGetTradeTxs.js +4 -4
  12. package/dist/swappers/cow/getCowSwapMinMax/getCowSwapMinMax.js +1 -1
  13. package/dist/swappers/cow/getCowSwapTradeQuote/getCowSwapTradeQuote.js +12 -12
  14. package/dist/swappers/cow/utils/blacklist.js +1 -1
  15. package/dist/swappers/cow/utils/cowService.js +2 -2
  16. package/dist/swappers/cow/utils/helpers/helpers.js +7 -7
  17. package/dist/swappers/osmosis/OsmosisSwapper.d.ts +1 -0
  18. package/dist/swappers/osmosis/OsmosisSwapper.js +25 -21
  19. package/dist/swappers/osmosis/utils/helpers.d.ts +2 -4
  20. package/dist/swappers/osmosis/utils/helpers.js +36 -36
  21. package/dist/swappers/test/TestSwapper.d.ts +1 -0
  22. package/dist/swappers/test/TestSwapper.js +6 -1
  23. package/dist/swappers/thorchain/ThorchainSwapper.d.ts +1 -0
  24. package/dist/swappers/thorchain/ThorchainSwapper.js +17 -12
  25. package/dist/swappers/thorchain/buildThorTrade/buildThorTrade.d.ts +1 -1
  26. package/dist/swappers/thorchain/buildThorTrade/buildThorTrade.js +14 -14
  27. package/dist/swappers/thorchain/getThorTradeQuote/getTradeQuote.js +14 -14
  28. package/dist/swappers/thorchain/thorTradeApprovalNeeded/thorTradeApprovalNeeded.d.ts +1 -1
  29. package/dist/swappers/thorchain/thorTradeApprovalNeeded/thorTradeApprovalNeeded.js +7 -7
  30. package/dist/swappers/thorchain/thorTradeApproveInfinite/thorTradeApproveInfinite.d.ts +1 -1
  31. package/dist/swappers/thorchain/thorTradeApproveInfinite/thorTradeApproveInfinite.js +7 -7
  32. package/dist/swappers/thorchain/utils/bitcoin/utils/getThorTxData.js +5 -5
  33. package/dist/swappers/thorchain/utils/constants.js +1 -1
  34. package/dist/swappers/thorchain/utils/cosmos/cosmosTxData.js +6 -6
  35. package/dist/swappers/thorchain/utils/estimateTradeFee/estimateTradeFee.js +6 -6
  36. package/dist/swappers/thorchain/utils/ethereum/makeTradeTx.d.ts +1 -1
  37. package/dist/swappers/thorchain/utils/ethereum/makeTradeTx.js +6 -6
  38. package/dist/swappers/thorchain/utils/ethereum/utils/getThorTxData.js +5 -5
  39. package/dist/swappers/thorchain/utils/getLimit/getLimit.d.ts +1 -1
  40. package/dist/swappers/thorchain/utils/getLimit/getLimit.js +2 -2
  41. package/dist/swappers/thorchain/utils/getPriceRatio/getPriceRatio.js +3 -3
  42. package/dist/swappers/thorchain/utils/getTradeRate/getTradeRate.js +5 -5
  43. package/dist/swappers/thorchain/utils/getUsdRate/getUsdRate.d.ts +1 -1
  44. package/dist/swappers/thorchain/utils/getUsdRate/getUsdRate.js +4 -4
  45. package/dist/swappers/thorchain/utils/makeSwapMemo/makeSwapMemo.d.ts +1 -1
  46. package/dist/swappers/thorchain/utils/makeSwapMemo/makeSwapMemo.js +4 -4
  47. package/dist/swappers/thorchain/utils/test-data/midgardResponse.js +11 -11
  48. package/dist/swappers/thorchain/utils/test-data/setupThorswapDeps.js +9 -9
  49. package/dist/swappers/thorchain/utils/thorService.js +2 -2
  50. package/dist/swappers/thorchain/utils/txFeeHelpers/btcTxFees/getBtcTxFees.d.ts +1 -1
  51. package/dist/swappers/thorchain/utils/txFeeHelpers/btcTxFees/getBtcTxFees.js +4 -4
  52. package/dist/swappers/thorchain/utils/txFeeHelpers/ethTxFees/getEthTxFees.d.ts +1 -1
  53. package/dist/swappers/thorchain/utils/txFeeHelpers/ethTxFees/getEthTxFees.js +7 -7
  54. package/dist/swappers/utils/abi/erc20-abi.js +54 -54
  55. package/dist/swappers/utils/abi/erc20Allowance-abi.js +7 -7
  56. package/dist/swappers/utils/helpers/helpers.d.ts +4 -4
  57. package/dist/swappers/utils/helpers/helpers.js +13 -13
  58. package/dist/swappers/utils/test-data/assets.js +8 -8
  59. package/dist/swappers/utils/test-data/setupDeps.js +3 -3
  60. package/dist/swappers/utils/test-data/setupSwapQuote.js +3 -3
  61. package/dist/swappers/zrx/ZrxSwapper.d.ts +2 -1
  62. package/dist/swappers/zrx/ZrxSwapper.js +7 -4
  63. package/dist/swappers/zrx/getZrxMinMax/getZrxMinMax.js +1 -1
  64. package/dist/swappers/zrx/getZrxTradeQuote/getZrxTradeQuote.js +7 -7
  65. package/dist/swappers/zrx/utils/blacklist.js +1 -1
  66. package/dist/swappers/zrx/utils/helpers/helpers.js +6 -6
  67. package/dist/swappers/zrx/utils/test-data/setupZrxSwapQuote.js +2 -2
  68. package/dist/swappers/zrx/utils/zrxService.js +2 -2
  69. package/dist/swappers/zrx/zrxApprovalNeeded/zrxApprovalNeeded.js +6 -6
  70. package/dist/swappers/zrx/zrxApprove/zrxApprove.d.ts +4 -0
  71. package/dist/swappers/zrx/zrxApprove/zrxApprove.js +62 -0
  72. package/dist/swappers/zrx/zrxBuildTrade/zrxBuildTrade.js +13 -11
  73. package/dist/swappers/zrx/zrxExecuteTrade/zrxExecuteTrade.js +6 -6
  74. package/package.json +1 -1
  75. package/dist/swappers/zrx/zrxApproveInfinite/zrxApproveInfinite.d.ts +0 -3
  76. package/dist/swappers/zrx/zrxApproveInfinite/zrxApproveInfinite.js +0 -42
package/dist/api.d.ts CHANGED
@@ -129,10 +129,14 @@ export declare type ExecuteTradeInput<C extends ChainId> = {
129
129
  export declare type TradeResult = {
130
130
  tradeId: string;
131
131
  };
132
- export declare type ApproveInfiniteInput<C extends ChainId> = {
132
+ export declare type ApproveInput<C extends ChainId> = {
133
133
  quote: TradeQuote<C>;
134
134
  wallet: HDWallet;
135
135
  };
136
+ export declare type ApproveInfiniteInput<C extends ChainId> = ApproveInput<C>;
137
+ export declare type ApproveAmountInput<C extends ChainId> = ApproveInput<C> & {
138
+ amount?: string;
139
+ };
136
140
  export declare type ApprovalNeededInput<C extends ChainId> = {
137
141
  quote: TradeQuote<C>;
138
142
  wallet: HDWallet;
@@ -163,6 +167,7 @@ export declare type TradeTxs = {
163
167
  export declare enum SwapErrorTypes {
164
168
  ALLOWANCE_REQUIRED_FAILED = "ALLOWANCE_REQUIRED_FAILED",
165
169
  APPROVE_INFINITE_FAILED = "APPROVE_INFINITE_FAILED",
170
+ APPROVE_AMOUNT_FAILED = "APPROVE_AMOUNT_FAILED",
166
171
  BUILD_TRADE_FAILED = "BUILD_TRADE_FAILED",
167
172
  CHECK_APPROVAL_FAILED = "CHECK_APPROVAL_FAILED",
168
173
  EXECUTE_TRADE_FAILED = "EXECUTE_TRADE_FAILED",
@@ -187,7 +192,7 @@ export declare enum SwapErrorTypes {
187
192
  TRADE_FAILED = "TRADE_FAILED"
188
193
  }
189
194
  export interface Swapper<T extends ChainId> {
190
- /** Human readable swapper name */
195
+ /** Human-readable swapper name */
191
196
  readonly name: string;
192
197
  /** perform any necessary async initialization */
193
198
  initialize?(): Promise<void>;
@@ -217,6 +222,11 @@ export interface Swapper<T extends ChainId> {
217
222
  * Get the txid of an approve infinite transaction
218
223
  */
219
224
  approveInfinite(args: ApproveInfiniteInput<T>): Promise<string>;
225
+ /**
226
+ * Get the txid of an approve amount transaction
227
+ * If no amount is specified the sell amount of the quote will be used
228
+ */
229
+ approveAmount(args: ApproveAmountInput<T>): Promise<string>;
220
230
  /**
221
231
  * Get supported buyAssetId's by sellAssetId
222
232
  */
package/dist/api.js CHANGED
@@ -18,6 +18,7 @@ var SwapErrorTypes;
18
18
  (function (SwapErrorTypes) {
19
19
  SwapErrorTypes["ALLOWANCE_REQUIRED_FAILED"] = "ALLOWANCE_REQUIRED_FAILED";
20
20
  SwapErrorTypes["APPROVE_INFINITE_FAILED"] = "APPROVE_INFINITE_FAILED";
21
+ SwapErrorTypes["APPROVE_AMOUNT_FAILED"] = "APPROVE_AMOUNT_FAILED";
21
22
  SwapErrorTypes["BUILD_TRADE_FAILED"] = "BUILD_TRADE_FAILED";
22
23
  SwapErrorTypes["CHECK_APPROVAL_FAILED"] = "CHECK_APPROVAL_FAILED";
23
24
  SwapErrorTypes["EXECUTE_TRADE_FAILED"] = "EXECUTE_TRADE_FAILED";
@@ -9,7 +9,7 @@ const api_1 = require("../api");
9
9
  function validateSwapper(swapper) {
10
10
  if (!(typeof swapper === 'object' && typeof swapper.getType === 'function'))
11
11
  throw new api_1.SwapError('[validateSwapper] - invalid swapper instance', {
12
- code: api_1.SwapErrorTypes.MANAGER_ERROR
12
+ code: api_1.SwapErrorTypes.MANAGER_ERROR,
13
13
  });
14
14
  }
15
15
  // TODO: remove me
@@ -38,7 +38,7 @@ class SwapperManager {
38
38
  if (!swapper)
39
39
  throw new api_1.SwapError('[getSwapper] - swapperType doesnt exist', {
40
40
  code: api_1.SwapErrorTypes.MANAGER_ERROR,
41
- details: { swapperType }
41
+ details: { swapperType },
42
42
  });
43
43
  return swapper;
44
44
  }
@@ -52,7 +52,7 @@ class SwapperManager {
52
52
  if (!swapper)
53
53
  throw new api_1.SwapError('[removeSwapper] - swapperType doesnt exist', {
54
54
  code: api_1.SwapErrorTypes.MANAGER_ERROR,
55
- details: { swapperType }
55
+ details: { swapperType },
56
56
  });
57
57
  this.swappers.delete(swapperType);
58
58
  return this;
@@ -38,7 +38,7 @@ const web3_1 = __importDefault(require("web3"));
38
38
  const SwapperManager_1 = require("./manager/SwapperManager");
39
39
  const ZrxSwapper_1 = require("./swappers/zrx/ZrxSwapper");
40
40
  dotenv_1.default.config();
41
- const { UNCHAINED_HTTP_API = 'http://localhost:31300', UNCHAINED_WS_API = 'wss://localhost:31300', ETH_NODE_URL = 'http://localhost:3000', DEVICE_ID = 'device123', MNEMONIC = 'all all all all all all all all all all all all' } = process.env;
41
+ const { UNCHAINED_HTTP_API = 'http://localhost:31300', UNCHAINED_WS_API = 'wss://localhost:31300', ETH_NODE_URL = 'http://localhost:3000', DEVICE_ID = 'device123', MNEMONIC = 'all all all all all all all all all all all all', } = process.env;
42
42
  const toBaseUnit = (amount, precision) => {
43
43
  return new bignumber_js_1.default(amount)
44
44
  .multipliedBy(new bignumber_js_1.default(10).exponentiatedBy(new bignumber_js_1.default(precision)))
@@ -53,7 +53,7 @@ const getWallet = async () => {
53
53
  }
54
54
  const nativeAdapterArgs = {
55
55
  mnemonic: MNEMONIC,
56
- deviceId: DEVICE_ID
56
+ deviceId: DEVICE_ID,
57
57
  };
58
58
  const wallet = new hdwallet_native_1.NativeHDWallet(nativeAdapterArgs);
59
59
  await wallet.initialize();
@@ -88,10 +88,10 @@ const main = async () => {
88
88
  providers: {
89
89
  ws: new unchained.ws.Client(UNCHAINED_WS_API),
90
90
  http: new unchained.ethereum.V1Api(new unchained.ethereum.Configuration({
91
- basePath: UNCHAINED_HTTP_API
92
- }))
91
+ basePath: UNCHAINED_HTTP_API,
92
+ })),
93
93
  },
94
- rpcUrl: 'https://mainnet.infura.io/v3/d734c7eebcdf400185d7eb67322a7e57'
94
+ rpcUrl: 'https://mainnet.infura.io/v3/d734c7eebcdf400185d7eb67322a7e57',
95
95
  });
96
96
  const web3Provider = new web3_1.default.providers.HttpProvider(ETH_NODE_URL);
97
97
  const web3 = new web3_1.default(web3Provider);
@@ -101,7 +101,7 @@ const main = async () => {
101
101
  manager.addSwapper(zrxSwapper);
102
102
  const swapper = await manager.getBestSwapper({
103
103
  sellAssetId: 'eip155:1/slip44:60',
104
- buyAssetId: 'eip155:1/erc20:0xc770eefad204b5180df6a14ee197d99d808ee52d'
104
+ buyAssetId: 'eip155:1/erc20:0xc770eefad204b5180df6a14ee197d99d808ee52d',
105
105
  });
106
106
  if (!swapper)
107
107
  return;
@@ -116,7 +116,7 @@ const main = async () => {
116
116
  sellAssetAccountNumber: 0,
117
117
  sendMax: false,
118
118
  receiveAddress: '0xc770eefad204b5180df6a14ee197d99d808ee52d',
119
- wallet
119
+ wallet,
120
120
  });
121
121
  }
122
122
  catch (e) {
@@ -137,7 +137,7 @@ const main = async () => {
137
137
  sellAmount: sellAmountBase,
138
138
  sellAsset,
139
139
  sellAssetAccountNumber: 0,
140
- receiveAddress: '0xc770eefad204b5180df6a14ee197d99d808ee52d'
140
+ receiveAddress: '0xc770eefad204b5180df6a14ee197d99d808ee52d',
141
141
  });
142
142
  const txid = await swapper.executeTrade({ trade, wallet });
143
143
  console.info('broadcast tx with id: ', txid);
@@ -21,6 +21,7 @@ export declare class CowSwapper implements Swapper<KnownChainIds.EthereumMainnet
21
21
  executeTrade(args: ExecuteTradeInput<KnownChainIds.EthereumMainnet>): Promise<TradeResult>;
22
22
  approvalNeeded(args: ApprovalNeededInput<KnownChainIds.EthereumMainnet>): Promise<ApprovalNeededOutput>;
23
23
  approveInfinite(args: ApproveInfiniteInput<KnownChainIds.EthereumMainnet>): Promise<string>;
24
+ approveAmount(): Promise<string>;
24
25
  filterBuyAssetsBySellAssetId(args: BuyAssetBySellIdInput): AssetId[];
25
26
  filterAssetIdsBySellable(assetIds: AssetId[]): AssetId[];
26
27
  getTradeTxs(args: TradeResult): Promise<TradeTxs>;
@@ -52,6 +52,11 @@ class CowSwapper {
52
52
  async approveInfinite(args) {
53
53
  return (0, cowApproveInfinite_1.cowApproveInfinite)(this.deps, args);
54
54
  }
55
+ async approveAmount() {
56
+ throw new api_1.SwapError('CowSwapper: approveAmount unimplemented', {
57
+ code: api_1.SwapErrorTypes.RESPONSE_ERROR,
58
+ });
59
+ }
55
60
  filterBuyAssetsBySellAssetId(args) {
56
61
  const { assetIds = [], sellAssetId } = args;
57
62
  if ((0, caip_1.fromAssetId)(sellAssetId).assetNamespace !== 'erc20' ||
@@ -14,7 +14,7 @@ async function cowApprovalNeeded({ adapter, web3 }, { quote, wallet }) {
14
14
  if (assetNamespace !== 'erc20') {
15
15
  throw new api_1.SwapError('[cowApprovalNeeded] - unsupported asset namespace', {
16
16
  code: api_1.SwapErrorTypes.UNSUPPORTED_NAMESPACE,
17
- details: { assetNamespace }
17
+ details: { assetNamespace },
18
18
  });
19
19
  }
20
20
  const receiveAddress = await adapter.getAddress({ wallet });
@@ -23,11 +23,11 @@ async function cowApprovalNeeded({ adapter, web3 }, { quote, wallet }) {
23
23
  erc20AllowanceAbi: erc20Allowance_abi_1.erc20AllowanceAbi,
24
24
  sellAssetErc20Address,
25
25
  spenderAddress: constants_1.COW_SWAP_VAULT_RELAYER_ADDRESS,
26
- ownerAddress: receiveAddress
26
+ ownerAddress: receiveAddress,
27
27
  });
28
28
  const allowanceOnChain = (0, bignumber_1.bnOrZero)(allowanceResult);
29
29
  return {
30
- approvalNeeded: allowanceOnChain.lte((0, bignumber_1.bnOrZero)(quote.sellAmount))
30
+ approvalNeeded: allowanceOnChain.lte((0, bignumber_1.bnOrZero)(quote.sellAmount)),
31
31
  };
32
32
  }
33
33
  catch (e) {
@@ -35,7 +35,7 @@ async function cowApprovalNeeded({ adapter, web3 }, { quote, wallet }) {
35
35
  throw e;
36
36
  throw new api_1.SwapError('[cowApprovalNeeded]', {
37
37
  cause: e,
38
- code: api_1.SwapErrorTypes.CHECK_APPROVAL_FAILED
38
+ code: api_1.SwapErrorTypes.CHECK_APPROVAL_FAILED,
39
39
  });
40
40
  }
41
41
  }
@@ -10,12 +10,12 @@ async function cowApproveInfinite({ adapter, web3 }, { quote, wallet }) {
10
10
  const allowanceGrantRequired = await (0, helpers_1.grantAllowance)({
11
11
  quote: {
12
12
  ...quote,
13
- sellAmount: constants_1.MAX_ALLOWANCE
13
+ sellAmount: constants_1.MAX_ALLOWANCE,
14
14
  },
15
15
  wallet,
16
16
  adapter,
17
17
  erc20Abi: erc20_abi_1.erc20Abi,
18
- web3
18
+ web3,
19
19
  });
20
20
  return allowanceGrantRequired;
21
21
  }
@@ -24,7 +24,7 @@ async function cowApproveInfinite({ adapter, web3 }, { quote, wallet }) {
24
24
  throw e;
25
25
  throw new api_1.SwapError('[cowApproveInfinite]', {
26
26
  cause: e,
27
- code: api_1.SwapErrorTypes.APPROVE_INFINITE_FAILED
27
+ code: api_1.SwapErrorTypes.APPROVE_INFINITE_FAILED,
28
28
  });
29
29
  }
30
30
  }
@@ -19,13 +19,13 @@ async function cowBuildTrade(deps, input) {
19
19
  if (sellAssetNamespace !== 'erc20') {
20
20
  throw new api_1.SwapError('[cowBuildTrade] - Sell asset needs to be ERC-20 to use CowSwap', {
21
21
  code: api_1.SwapErrorTypes.UNSUPPORTED_PAIR,
22
- details: { sellAssetNamespace }
22
+ details: { sellAssetNamespace },
23
23
  });
24
24
  }
25
25
  if (buyAssetChainId !== types_1.KnownChainIds.EthereumMainnet) {
26
26
  throw new api_1.SwapError('[cowBuildTrade] - Buy asset needs to be on ETH mainnet to use CowSwap', {
27
27
  code: api_1.SwapErrorTypes.UNSUPPORTED_PAIR,
28
- details: { buyAssetChainId }
28
+ details: { buyAssetChainId },
29
29
  });
30
30
  }
31
31
  const buyToken = buyAsset.assetId !== caip_1.ethAssetId ? buyAssetErc20Address : constants_1.COW_SWAP_ETH_MARKER_ADDRESS;
@@ -54,21 +54,21 @@ async function cowBuildTrade(deps, input) {
54
54
  partiallyFillable: false,
55
55
  from: receiveAddress,
56
56
  kind: constants_1.ORDER_KIND_SELL,
57
- sellAmountBeforeFee: normalizedSellAmount
57
+ sellAmountBeforeFee: normalizedSellAmount,
58
58
  });
59
- const { data: { quote } } = quoteResponse;
59
+ const { data: { quote }, } = quoteResponse;
60
60
  const buyCryptoAmount = (0, bignumber_1.bn)(quote.buyAmount).div((0, bignumber_1.bn)(10).exponentiatedBy(buyAsset.precision));
61
61
  const sellCryptoAmount = (0, bignumber_1.bn)(quote.sellAmount).div((0, bignumber_1.bn)(10).exponentiatedBy(sellAsset.precision));
62
62
  const rate = buyCryptoAmount.div(sellCryptoAmount).toString();
63
63
  const data = (0, helpers_1.getApproveContractData)({
64
64
  web3,
65
65
  spenderAddress: constants_1.COW_SWAP_VAULT_RELAYER_ADDRESS,
66
- contractAddress: sellAssetErc20Address
66
+ contractAddress: sellAssetErc20Address,
67
67
  });
68
68
  const feeDataOptions = await adapter.getFeeData({
69
69
  to: sellAssetErc20Address,
70
70
  value: '0',
71
- chainSpecific: { from: receiveAddress, contractData: data }
71
+ chainSpecific: { from: receiveAddress, contractData: data },
72
72
  });
73
73
  const feeData = feeDataOptions['fast'];
74
74
  const trade = {
@@ -77,9 +77,9 @@ async function cowBuildTrade(deps, input) {
77
77
  fee: '0',
78
78
  chainSpecific: {
79
79
  estimatedGas: feeData.chainSpecific.gasLimit,
80
- gasPrice: feeData.chainSpecific.gasPrice
80
+ gasPrice: feeData.chainSpecific.gasPrice,
81
81
  },
82
- tradeFee: '0' // Trade fees for buy Asset are always 0 since trade fees are subtracted from sell asset
82
+ tradeFee: '0', // Trade fees for buy Asset are always 0 since trade fees are subtracted from sell asset
83
83
  },
84
84
  sellAmount: normalizedSellAmount,
85
85
  buyAmount: quote.buyAmount,
@@ -89,7 +89,7 @@ async function cowBuildTrade(deps, input) {
89
89
  sellAssetAccountNumber,
90
90
  receiveAddress,
91
91
  feeAmountInSellToken: quote.feeAmount,
92
- sellAmountWithoutFee: quote.sellAmount
92
+ sellAmountWithoutFee: quote.sellAmount,
93
93
  };
94
94
  const allowanceRequired = await (0, helpers_1.getAllowanceRequired)({
95
95
  adapter,
@@ -98,7 +98,7 @@ async function cowBuildTrade(deps, input) {
98
98
  receiveAddress,
99
99
  sellAmount: quote.sellAmount,
100
100
  web3: deps.web3,
101
- erc20AllowanceAbi: erc20Allowance_abi_1.erc20AllowanceAbi
101
+ erc20AllowanceAbi: erc20Allowance_abi_1.erc20AllowanceAbi,
102
102
  });
103
103
  if (!allowanceRequired.isZero()) {
104
104
  trade.feeData.chainSpecific.approvalFee = (0, bignumber_1.bnOrZero)(feeData.chainSpecific.gasLimit)
@@ -112,7 +112,7 @@ async function cowBuildTrade(deps, input) {
112
112
  throw e;
113
113
  throw new api_1.SwapError('[cowBuildTrade]', {
114
114
  cause: e,
115
- code: api_1.SwapErrorTypes.TRADE_QUOTE_FAILED
115
+ code: api_1.SwapErrorTypes.TRADE_QUOTE_FAILED,
116
116
  });
117
117
  }
118
118
  }
@@ -18,13 +18,13 @@ async function cowExecuteTrade({ apiUrl, adapter }, { trade, wallet }) {
18
18
  if (sellAssetNamespace !== 'erc20') {
19
19
  throw new api_1.SwapError('[cowExecuteTrade] - Sell asset needs to be ERC-20 to use CowSwap', {
20
20
  code: api_1.SwapErrorTypes.UNSUPPORTED_PAIR,
21
- details: { sellAssetNamespace }
21
+ details: { sellAssetNamespace },
22
22
  });
23
23
  }
24
24
  if (buyAssetChainId !== types_1.KnownChainIds.EthereumMainnet) {
25
25
  throw new api_1.SwapError('[cowExecuteTrade] - Buy asset needs to be on ETH mainnet to use CowSwap', {
26
26
  code: api_1.SwapErrorTypes.UNSUPPORTED_PAIR,
27
- details: { buyAssetChainId }
27
+ details: { buyAssetChainId },
28
28
  });
29
29
  }
30
30
  const buyToken = buyAsset.assetId !== caip_1.ethAssetId ? buyAssetErc20Address : constants_1.COW_SWAP_ETH_MARKER_ADDRESS;
@@ -41,7 +41,7 @@ async function cowExecuteTrade({ apiUrl, adapter }, { trade, wallet }) {
41
41
  partiallyFillable: false,
42
42
  receiver: trade.receiveAddress,
43
43
  sellTokenBalance: constants_1.ERC20_TOKEN_BALANCE,
44
- buyTokenBalance: constants_1.ERC20_TOKEN_BALANCE
44
+ buyTokenBalance: constants_1.ERC20_TOKEN_BALANCE,
45
45
  };
46
46
  // We need to construct orderDigest, sign it and send it to cowSwap API, in order to submit a trade
47
47
  // Some context about this : https://docs.cow.fi/tutorials/how-to-submit-orders-via-the-api/4.-signing-the-order
@@ -51,9 +51,9 @@ async function cowExecuteTrade({ apiUrl, adapter }, { trade, wallet }) {
51
51
  const message = {
52
52
  messageToSign: {
53
53
  addressNList: (0, hdwallet_core_1.bip32ToAddressNList)((0, chain_adapters_1.toRootDerivationPath)(bip44Params)),
54
- message: ethers_1.ethers.utils.arrayify(orderDigest)
54
+ message: ethers_1.ethers.utils.arrayify(orderDigest),
55
55
  },
56
- wallet
56
+ wallet,
57
57
  };
58
58
  const signatureOrderDigest = await adapter.signMessage(message);
59
59
  // Passing the signature through split/join to normalize the `v` byte.
@@ -83,7 +83,7 @@ async function cowExecuteTrade({ apiUrl, adapter }, { trade, wallet }) {
83
83
  ...orderToSign,
84
84
  signingScheme: constants_1.SIGNING_SCHEME,
85
85
  signature,
86
- from: trade.receiveAddress
86
+ from: trade.receiveAddress,
87
87
  });
88
88
  return { tradeId: ordersResponse.data };
89
89
  }
@@ -92,7 +92,7 @@ async function cowExecuteTrade({ apiUrl, adapter }, { trade, wallet }) {
92
92
  throw e;
93
93
  throw new api_1.SwapError('[cowExecuteTrade]', {
94
94
  cause: e,
95
- code: api_1.SwapErrorTypes.EXECUTE_TRADE_FAILED
95
+ code: api_1.SwapErrorTypes.EXECUTE_TRADE_FAILED,
96
96
  });
97
97
  }
98
98
  }
@@ -7,16 +7,16 @@ const cowService_1 = require("../utils/cowService");
7
7
  async function cowGetTradeTxs(deps, input) {
8
8
  try {
9
9
  const getOrdersResponse = await cowService_1.cowService.get(`${deps.apiUrl}/v1/orders/${input.tradeId}`);
10
- const { data: { status } } = getOrdersResponse;
10
+ const { data: { status }, } = getOrdersResponse;
11
11
  if (status !== constants_1.ORDER_STATUS_FULFILLED) {
12
12
  return {
13
- sellTxid: ''
13
+ sellTxid: '',
14
14
  };
15
15
  }
16
16
  const getTradesResponse = await cowService_1.cowService.get(`${deps.apiUrl}/v1/trades/?orderUid=${input.tradeId}`);
17
17
  return {
18
18
  sellTxid: input.tradeId,
19
- buyTxid: getTradesResponse.data[0].txHash
19
+ buyTxid: getTradesResponse.data[0].txHash,
20
20
  };
21
21
  }
22
22
  catch (e) {
@@ -24,7 +24,7 @@ async function cowGetTradeTxs(deps, input) {
24
24
  throw e;
25
25
  throw new api_1.SwapError('[cowGetTradeTxs]', {
26
26
  cause: e,
27
- code: api_1.SwapErrorTypes.GET_TRADE_TXS_FAILED
27
+ code: api_1.SwapErrorTypes.GET_TRADE_TXS_FAILED,
28
28
  });
29
29
  }
30
30
  }
@@ -19,7 +19,7 @@ const getCowSwapMinMax = async (deps, sellAsset, buyAsset) => {
19
19
  const maximum = constants_1.MAX_COWSWAP_TRADE; // Arbitrarily large value. 10e+28 here.
20
20
  return {
21
21
  minimum,
22
- maximum
22
+ maximum,
23
23
  };
24
24
  }
25
25
  catch (e) {
@@ -24,13 +24,13 @@ async function getCowSwapTradeQuote(deps, input) {
24
24
  if (sellAssetNamespace !== 'erc20') {
25
25
  throw new api_1.SwapError('[getCowSwapTradeQuote] - Sell asset needs to be ERC-20 to use CowSwap', {
26
26
  code: api_1.SwapErrorTypes.UNSUPPORTED_PAIR,
27
- details: { sellAssetNamespace }
27
+ details: { sellAssetNamespace },
28
28
  });
29
29
  }
30
30
  if (buyAssetChainId !== types_1.KnownChainIds.EthereumMainnet) {
31
31
  throw new api_1.SwapError('[getCowSwapTradeQuote] - Buy asset needs to be on ETH mainnet to use CowSwap', {
32
32
  code: api_1.SwapErrorTypes.UNSUPPORTED_PAIR,
33
- details: { buyAssetChainId }
33
+ details: { buyAssetChainId },
34
34
  });
35
35
  }
36
36
  const buyToken = buyAsset.assetId !== caip_1.ethAssetId ? buyAssetErc20Address : constants_1.COW_SWAP_ETH_MARKER_ADDRESS;
@@ -47,7 +47,7 @@ async function getCowSwapTradeQuote(deps, input) {
47
47
  partiallyFillable: false,
48
48
  from: constants_1.DEFAULT_ADDRESS,
49
49
  kind: constants_1.ORDER_KIND_SELL,
50
- sellAmountBeforeFee: normalizedSellAmount
50
+ sellAmountBeforeFee: normalizedSellAmount,
51
51
  };
52
52
  /**
53
53
  * /v1/quote
@@ -64,7 +64,7 @@ async function getCowSwapTradeQuote(deps, input) {
64
64
  * }
65
65
  */
66
66
  const quoteResponse = await cowService_1.cowService.post(`${deps.apiUrl}/v1/quote/`, apiInput);
67
- const { data: { quote } } = quoteResponse;
67
+ const { data: { quote }, } = quoteResponse;
68
68
  const buyCryptoAmount = (0, bignumber_1.bn)(quote.buyAmount).div((0, bignumber_1.bn)(10).exponentiatedBy(buyAsset.precision));
69
69
  const sellCryptoAmount = (0, bignumber_1.bn)(quote.sellAmount).div((0, bignumber_1.bn)(10).exponentiatedBy(sellAsset.precision));
70
70
  const rate = buyCryptoAmount.div(sellCryptoAmount).toString();
@@ -72,15 +72,15 @@ async function getCowSwapTradeQuote(deps, input) {
72
72
  const data = (0, helpers_1.getApproveContractData)({
73
73
  web3,
74
74
  spenderAddress: constants_1.COW_SWAP_VAULT_RELAYER_ADDRESS,
75
- contractAddress: sellAssetErc20Address
75
+ contractAddress: sellAssetErc20Address,
76
76
  });
77
77
  const [feeDataOptions, sellAssetUsdRate] = await Promise.all([
78
78
  adapter.getFeeData({
79
79
  to: sellAssetErc20Address,
80
80
  value: '0',
81
- chainSpecific: { from: receiveAddress, contractData: data }
81
+ chainSpecific: { from: receiveAddress, contractData: data },
82
82
  }),
83
- (0, helpers_2.getUsdRate)(deps, sellAsset)
83
+ (0, helpers_2.getUsdRate)(deps, sellAsset),
84
84
  ]);
85
85
  const feeData = feeDataOptions['fast'];
86
86
  // calculating trade fee in USD
@@ -104,9 +104,9 @@ async function getCowSwapTradeQuote(deps, input) {
104
104
  gasPrice: feeData.chainSpecific.gasPrice,
105
105
  approvalFee: (0, bignumber_1.bnOrZero)(feeData.chainSpecific.gasLimit)
106
106
  .multipliedBy((0, bignumber_1.bnOrZero)(feeData.chainSpecific.gasPrice))
107
- .toString()
107
+ .toString(),
108
108
  },
109
- tradeFee: tradeFeeFiat
109
+ tradeFee: tradeFeeFiat,
110
110
  },
111
111
  sellAmount: quoteSellAmount,
112
112
  buyAmount: quote.buyAmount,
@@ -114,7 +114,7 @@ async function getCowSwapTradeQuote(deps, input) {
114
114
  allowanceContract: constants_1.COW_SWAP_VAULT_RELAYER_ADDRESS,
115
115
  buyAsset,
116
116
  sellAsset,
117
- sellAssetAccountNumber
117
+ sellAssetAccountNumber,
118
118
  };
119
119
  }
120
120
  catch (e) {
@@ -124,14 +124,14 @@ async function getCowSwapTradeQuote(deps, input) {
124
124
  'SellAmountDoesNotCoverFee') {
125
125
  throw new api_1.SwapError('[getCowSwapTradeQuote]', {
126
126
  cause: e,
127
- code: api_1.SwapErrorTypes.TRADE_QUOTE_INPUT_LOWER_THAN_FEES
127
+ code: api_1.SwapErrorTypes.TRADE_QUOTE_INPUT_LOWER_THAN_FEES,
128
128
  });
129
129
  }
130
130
  if (e instanceof api_1.SwapError)
131
131
  throw e;
132
132
  throw new api_1.SwapError('[getCowSwapTradeQuote]', {
133
133
  cause: e,
134
- code: api_1.SwapErrorTypes.TRADE_QUOTE_FAILED
134
+ code: api_1.SwapErrorTypes.TRADE_QUOTE_FAILED,
135
135
  });
136
136
  }
137
137
  }
@@ -5,5 +5,5 @@ exports.COWSWAP_UNSUPPORTED_ASSETS = void 0;
5
5
  // We assume all erc20's are supported and remove these explicitely unsupported assets
6
6
  exports.COWSWAP_UNSUPPORTED_ASSETS = Object.freeze([
7
7
  // Foxy token unsupported by cowswap
8
- 'eip155:1/erc20:0xdc49108ce5c57bc3408c3a5e95f3d864ec386ed3'
8
+ 'eip155:1/erc20:0xdc49108ce5c57bc3408c3a5e95f3d864ec386ed3',
9
9
  ]);
@@ -9,7 +9,7 @@ const axiosConfig = {
9
9
  timeout: 10000,
10
10
  headers: {
11
11
  Accept: 'application/json',
12
- 'Content-Type': 'application/json'
13
- }
12
+ 'Content-Type': 'application/json',
13
+ },
14
14
  };
15
15
  exports.cowService = axios_1.default.create(axiosConfig);
@@ -22,7 +22,7 @@ exports.ORDER_TYPE_FIELDS = [
22
22
  { name: 'kind', type: 'string' },
23
23
  { name: 'partiallyFillable', type: 'bool' },
24
24
  { name: 'sellTokenBalance', type: 'string' },
25
- { name: 'buyTokenBalance', type: 'string' }
25
+ { name: 'buyTokenBalance', type: 'string' },
26
26
  ];
27
27
  const getNowPlusThirtyMinutesTimestamp = () => {
28
28
  const ts = new Date();
@@ -37,7 +37,7 @@ const getUsdRate = async ({ apiUrl }, input) => {
37
37
  if (assetNamespace !== 'erc20') {
38
38
  throw new api_1.SwapError('[getUsdRate] - unsupported asset namespace', {
39
39
  code: api_1.SwapErrorTypes.USD_RATE_FAILED,
40
- details: { assetNamespace }
40
+ details: { assetNamespace },
41
41
  });
42
42
  }
43
43
  if (erc20Address === USDC_CONTRACT_ADDRESS) {
@@ -58,7 +58,7 @@ const getUsdRate = async ({ apiUrl }, input) => {
58
58
  partiallyFillable: false,
59
59
  from: constants_1.DEFAULT_ADDRESS,
60
60
  kind: constants_1.ORDER_KIND_BUY,
61
- buyAmountAfterFee: buyAmount
61
+ buyAmountAfterFee: buyAmount,
62
62
  };
63
63
  /**
64
64
  * /v1/quote
@@ -75,11 +75,11 @@ const getUsdRate = async ({ apiUrl }, input) => {
75
75
  * }
76
76
  */
77
77
  const quoteResponse = await cowService_1.cowService.post(`${apiUrl}/v1/quote/`, apiInput);
78
- const { data: { quote } } = quoteResponse;
78
+ const { data: { quote }, } = quoteResponse;
79
79
  const sellCryptoAmount = (0, bignumber_1.bn)(quote.sellAmount).div((0, bignumber_1.bn)(10).exponentiatedBy(asset.precision));
80
80
  if (!sellCryptoAmount.gt(0))
81
81
  throw new api_1.SwapError('[getUsdRate] - Failed to get sell token amount', {
82
- code: api_1.SwapErrorTypes.RESPONSE_ERROR
82
+ code: api_1.SwapErrorTypes.RESPONSE_ERROR,
83
83
  });
84
84
  // dividing $1000 by amount of sell token received
85
85
  return (0, bignumber_1.bn)(buyAmountInDollars).div(sellCryptoAmount).toString();
@@ -89,7 +89,7 @@ const getUsdRate = async ({ apiUrl }, input) => {
89
89
  throw e;
90
90
  throw new api_1.SwapError('[getUsdRate]', {
91
91
  cause: e,
92
- code: api_1.SwapErrorTypes.USD_RATE_FAILED
92
+ code: api_1.SwapErrorTypes.USD_RATE_FAILED,
93
93
  });
94
94
  }
95
95
  };
@@ -118,7 +118,7 @@ const domain = (chainId, verifyingContract) => {
118
118
  name: 'Gnosis Protocol',
119
119
  version: 'v2',
120
120
  chainId,
121
- verifyingContract
121
+ verifyingContract,
122
122
  };
123
123
  };
124
124
  exports.domain = domain;
@@ -15,6 +15,7 @@ export declare class OsmosisSwapper implements Swapper<ChainId> {
15
15
  }): Promise<MinMaxOutput>;
16
16
  approvalNeeded(): Promise<ApprovalNeededOutput>;
17
17
  approveInfinite(): Promise<string>;
18
+ approveAmount(): Promise<string>;
18
19
  filterBuyAssetsBySellAssetId(args: BuyAssetBySellIdInput): string[];
19
20
  filterAssetIdsBySellable(): AssetId[];
20
21
  buildTrade(args: BuildTradeInput): Promise<Trade<ChainId>>;