@shapeshiftoss/swapper 9.15.0 → 9.16.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 (69) hide show
  1. package/dist/manager/SwapperManager.js +3 -3
  2. package/dist/swappercli.js +8 -8
  3. package/dist/swappers/cow/CowSwapper.d.ts +2 -2
  4. package/dist/swappers/cow/CowSwapper.js +4 -6
  5. package/dist/swappers/cow/cowApprovalNeeded/cowApprovalNeeded.js +4 -4
  6. package/dist/swappers/cow/{cowApproveInfinite/cowApproveInfinite.d.ts → cowApprove/cowApprove.d.ts} +2 -1
  7. package/dist/swappers/cow/cowApprove/cowApprove.js +56 -0
  8. package/dist/swappers/cow/cowBuildTrade/cowBuildTrade.js +11 -11
  9. package/dist/swappers/cow/cowExecuteTrade/cowExecuteTrade.js +7 -7
  10. package/dist/swappers/cow/cowGetTradeTxs/cowGetTradeTxs.js +4 -4
  11. package/dist/swappers/cow/getCowSwapMinMax/getCowSwapMinMax.js +1 -1
  12. package/dist/swappers/cow/getCowSwapTradeQuote/getCowSwapTradeQuote.js +12 -12
  13. package/dist/swappers/cow/utils/blacklist.js +1 -1
  14. package/dist/swappers/cow/utils/cowService.js +2 -2
  15. package/dist/swappers/cow/utils/helpers/helpers.js +7 -7
  16. package/dist/swappers/osmosis/OsmosisSwapper.js +20 -20
  17. package/dist/swappers/osmosis/utils/helpers.d.ts +1 -1
  18. package/dist/swappers/osmosis/utils/helpers.js +35 -35
  19. package/dist/swappers/test/TestSwapper.js +2 -2
  20. package/dist/swappers/thorchain/ThorchainSwapper.js +13 -13
  21. package/dist/swappers/thorchain/buildThorTrade/buildThorTrade.d.ts +1 -1
  22. package/dist/swappers/thorchain/buildThorTrade/buildThorTrade.js +14 -14
  23. package/dist/swappers/thorchain/getThorTradeQuote/getTradeQuote.js +14 -14
  24. package/dist/swappers/thorchain/thorTradeApprovalNeeded/thorTradeApprovalNeeded.d.ts +1 -1
  25. package/dist/swappers/thorchain/thorTradeApprovalNeeded/thorTradeApprovalNeeded.js +7 -7
  26. package/dist/swappers/thorchain/thorTradeApproveInfinite/thorTradeApproveInfinite.d.ts +1 -1
  27. package/dist/swappers/thorchain/thorTradeApproveInfinite/thorTradeApproveInfinite.js +7 -7
  28. package/dist/swappers/thorchain/utils/bitcoin/utils/getThorTxData.js +5 -5
  29. package/dist/swappers/thorchain/utils/constants.js +1 -1
  30. package/dist/swappers/thorchain/utils/cosmos/cosmosTxData.js +6 -6
  31. package/dist/swappers/thorchain/utils/estimateTradeFee/estimateTradeFee.js +6 -6
  32. package/dist/swappers/thorchain/utils/ethereum/makeTradeTx.d.ts +1 -1
  33. package/dist/swappers/thorchain/utils/ethereum/makeTradeTx.js +6 -6
  34. package/dist/swappers/thorchain/utils/ethereum/utils/getThorTxData.js +5 -5
  35. package/dist/swappers/thorchain/utils/getLimit/getLimit.d.ts +1 -1
  36. package/dist/swappers/thorchain/utils/getLimit/getLimit.js +2 -2
  37. package/dist/swappers/thorchain/utils/getPriceRatio/getPriceRatio.js +3 -3
  38. package/dist/swappers/thorchain/utils/getTradeRate/getTradeRate.js +5 -5
  39. package/dist/swappers/thorchain/utils/getUsdRate/getUsdRate.d.ts +1 -1
  40. package/dist/swappers/thorchain/utils/getUsdRate/getUsdRate.js +4 -4
  41. package/dist/swappers/thorchain/utils/makeSwapMemo/makeSwapMemo.d.ts +1 -1
  42. package/dist/swappers/thorchain/utils/makeSwapMemo/makeSwapMemo.js +4 -4
  43. package/dist/swappers/thorchain/utils/test-data/midgardResponse.js +11 -11
  44. package/dist/swappers/thorchain/utils/test-data/setupThorswapDeps.js +9 -9
  45. package/dist/swappers/thorchain/utils/thorService.js +2 -2
  46. package/dist/swappers/thorchain/utils/txFeeHelpers/btcTxFees/getBtcTxFees.d.ts +1 -1
  47. package/dist/swappers/thorchain/utils/txFeeHelpers/btcTxFees/getBtcTxFees.js +4 -4
  48. package/dist/swappers/thorchain/utils/txFeeHelpers/ethTxFees/getEthTxFees.d.ts +1 -1
  49. package/dist/swappers/thorchain/utils/txFeeHelpers/ethTxFees/getEthTxFees.js +7 -7
  50. package/dist/swappers/utils/abi/erc20-abi.js +54 -54
  51. package/dist/swappers/utils/abi/erc20Allowance-abi.js +7 -7
  52. package/dist/swappers/utils/helpers/helpers.d.ts +4 -4
  53. package/dist/swappers/utils/helpers/helpers.js +13 -13
  54. package/dist/swappers/utils/test-data/assets.js +8 -8
  55. package/dist/swappers/utils/test-data/setupDeps.js +3 -3
  56. package/dist/swappers/utils/test-data/setupSwapQuote.js +3 -3
  57. package/dist/swappers/zrx/ZrxSwapper.js +2 -2
  58. package/dist/swappers/zrx/getZrxMinMax/getZrxMinMax.js +1 -1
  59. package/dist/swappers/zrx/getZrxTradeQuote/getZrxTradeQuote.js +7 -7
  60. package/dist/swappers/zrx/utils/blacklist.js +1 -1
  61. package/dist/swappers/zrx/utils/helpers/helpers.js +6 -6
  62. package/dist/swappers/zrx/utils/test-data/setupZrxSwapQuote.js +2 -2
  63. package/dist/swappers/zrx/utils/zrxService.js +2 -2
  64. package/dist/swappers/zrx/zrxApprovalNeeded/zrxApprovalNeeded.js +6 -6
  65. package/dist/swappers/zrx/zrxApprove/zrxApprove.js +6 -6
  66. package/dist/swappers/zrx/zrxBuildTrade/zrxBuildTrade.js +13 -11
  67. package/dist/swappers/zrx/zrxExecuteTrade/zrxExecuteTrade.js +6 -6
  68. package/package.json +1 -1
  69. package/dist/swappers/cow/cowApproveInfinite/cowApproveInfinite.js +0 -31
@@ -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);
@@ -3,7 +3,7 @@ import { AssetId } from '@shapeshiftoss/caip';
3
3
  import { ethereum } from '@shapeshiftoss/chain-adapters';
4
4
  import { KnownChainIds } from '@shapeshiftoss/types';
5
5
  import Web3 from 'web3';
6
- import { ApprovalNeededInput, ApprovalNeededOutput, ApproveInfiniteInput, BuildTradeInput, BuyAssetBySellIdInput, ExecuteTradeInput, GetTradeQuoteInput, Swapper, SwapperType, TradeQuote, TradeResult, TradeTxs } from '../../api';
6
+ import { ApprovalNeededInput, ApprovalNeededOutput, ApproveAmountInput, ApproveInfiniteInput, BuildTradeInput, BuyAssetBySellIdInput, ExecuteTradeInput, GetTradeQuoteInput, Swapper, SwapperType, TradeQuote, TradeResult, TradeTxs } from '../../api';
7
7
  import { CowTrade } from './types';
8
8
  export declare type CowSwapperDeps = {
9
9
  apiUrl: string;
@@ -21,7 +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
+ approveAmount(args: ApproveAmountInput<KnownChainIds.EthereumMainnet>): Promise<string>;
25
25
  filterBuyAssetsBySellAssetId(args: BuyAssetBySellIdInput): AssetId[];
26
26
  filterAssetIdsBySellable(assetIds: AssetId[]): AssetId[];
27
27
  getTradeTxs(args: TradeResult): Promise<TradeTxs>;
@@ -19,7 +19,7 @@ const caip_1 = require("@shapeshiftoss/caip");
19
19
  const types_1 = require("@shapeshiftoss/types");
20
20
  const api_1 = require("../../api");
21
21
  const cowApprovalNeeded_1 = require("./cowApprovalNeeded/cowApprovalNeeded");
22
- const cowApproveInfinite_1 = require("./cowApproveInfinite/cowApproveInfinite");
22
+ const cowApprove_1 = require("./cowApprove/cowApprove");
23
23
  const cowBuildTrade_1 = require("./cowBuildTrade/cowBuildTrade");
24
24
  const cowExecuteTrade_1 = require("./cowExecuteTrade/cowExecuteTrade");
25
25
  const cowGetTradeTxs_1 = require("./cowGetTradeTxs/cowGetTradeTxs");
@@ -50,12 +50,10 @@ class CowSwapper {
50
50
  return (0, cowApprovalNeeded_1.cowApprovalNeeded)(this.deps, args);
51
51
  }
52
52
  async approveInfinite(args) {
53
- return (0, cowApproveInfinite_1.cowApproveInfinite)(this.deps, args);
53
+ return (0, cowApprove_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
- });
55
+ async approveAmount(args) {
56
+ return (0, cowApprove_1.cowApproveAmount)(this.deps, args);
59
57
  }
60
58
  filterBuyAssetsBySellAssetId(args) {
61
59
  const { assetIds = [], sellAssetId } = args;
@@ -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
  }
@@ -1,4 +1,5 @@
1
1
  import { KnownChainIds } from '@shapeshiftoss/types';
2
- import { ApproveInfiniteInput } from '../../../api';
2
+ import { ApproveAmountInput, ApproveInfiniteInput } from '../../../api';
3
3
  import { CowSwapperDeps } from '../CowSwapper';
4
4
  export declare function cowApproveInfinite({ adapter, web3 }: CowSwapperDeps, { quote, wallet }: ApproveInfiniteInput<KnownChainIds.EthereumMainnet>): Promise<string>;
5
+ export declare function cowApproveAmount({ adapter, web3 }: CowSwapperDeps, { quote, wallet, amount }: ApproveAmountInput<KnownChainIds.EthereumMainnet>): Promise<string>;
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.cowApproveAmount = exports.cowApproveInfinite = void 0;
4
+ const api_1 = require("../../../api");
5
+ const erc20_abi_1 = require("../../utils/abi/erc20-abi");
6
+ const helpers_1 = require("../../utils/helpers/helpers");
7
+ const constants_1 = require("../utils/constants");
8
+ async function cowApproveInfinite({ adapter, web3 }, { quote, wallet }) {
9
+ try {
10
+ const allowanceGrantRequired = await (0, helpers_1.grantAllowance)({
11
+ quote: {
12
+ ...quote,
13
+ sellAmount: constants_1.MAX_ALLOWANCE,
14
+ },
15
+ wallet,
16
+ adapter,
17
+ erc20Abi: erc20_abi_1.erc20Abi,
18
+ web3,
19
+ });
20
+ return allowanceGrantRequired;
21
+ }
22
+ catch (e) {
23
+ if (e instanceof api_1.SwapError)
24
+ throw e;
25
+ throw new api_1.SwapError('[cowApproveInfinite]', {
26
+ cause: e,
27
+ code: api_1.SwapErrorTypes.APPROVE_INFINITE_FAILED,
28
+ });
29
+ }
30
+ }
31
+ exports.cowApproveInfinite = cowApproveInfinite;
32
+ async function cowApproveAmount({ adapter, web3 }, { quote, wallet, amount }) {
33
+ try {
34
+ const approvalAmount = amount !== null && amount !== void 0 ? amount : quote.sellAmount;
35
+ const allowanceGrantRequired = await (0, helpers_1.grantAllowance)({
36
+ quote: {
37
+ ...quote,
38
+ sellAmount: approvalAmount,
39
+ },
40
+ wallet,
41
+ adapter,
42
+ erc20Abi: erc20_abi_1.erc20Abi,
43
+ web3,
44
+ });
45
+ return allowanceGrantRequired;
46
+ }
47
+ catch (e) {
48
+ if (e instanceof api_1.SwapError)
49
+ throw e;
50
+ throw new api_1.SwapError('[cowApproveAmount]', {
51
+ cause: e,
52
+ code: api_1.SwapErrorTypes.APPROVE_AMOUNT_FAILED,
53
+ });
54
+ }
55
+ }
56
+ exports.cowApproveAmount = cowApproveAmount;
@@ -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;