@shapeshiftoss/swapper 5.4.0 → 5.7.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.
package/dist/api.d.ts CHANGED
@@ -129,6 +129,7 @@ export declare type ApprovalNeededOutput = {
129
129
  export declare enum SwapperType {
130
130
  Zrx = "0x",
131
131
  Thorchain = "Thorchain",
132
+ CowSwap = "CowSwap",
132
133
  Test = "Test"
133
134
  }
134
135
  export declare type TradeTxs = {
package/dist/api.js CHANGED
@@ -7,6 +7,7 @@ var SwapperType;
7
7
  (function (SwapperType) {
8
8
  SwapperType["Zrx"] = "0x";
9
9
  SwapperType["Thorchain"] = "Thorchain";
10
+ SwapperType["CowSwap"] = "CowSwap";
10
11
  SwapperType["Test"] = "Test";
11
12
  })(SwapperType = exports.SwapperType || (exports.SwapperType = {}));
12
13
  // Swap Errors
@@ -84,7 +84,7 @@ const main = async () => {
84
84
  const web3 = new web3_1.default(web3Provider);
85
85
  const zrxSwapperDeps = { wallet, adapterManager, web3 };
86
86
  const thorchainSwapperDeps = {
87
- midgardUrl: 'https://midgard.thorchain.info/v2/pools'
87
+ midgardUrl: 'https://midgard.thorchain.info/v2'
88
88
  };
89
89
  const manager = new SwapperManager_1.SwapperManager();
90
90
  const zrxSwapper = new ZrxSwapper_1.ZrxSwapper(zrxSwapperDeps);
@@ -0,0 +1,18 @@
1
+ import { AssetId } from '@shapeshiftoss/caip';
2
+ import { Asset, SupportedChainIds } from '@shapeshiftoss/types';
3
+ import { ApprovalNeededInput, ApprovalNeededOutput, ApproveInfiniteInput, BuildTradeInput, BuyAssetBySellIdInput, ExecuteTradeInput, GetMinMaxInput, GetTradeQuoteInput, MinMaxOutput, Swapper, SwapperType, Trade, TradeQuote, TradeResult, TradeTxs } from '../../api';
4
+ export declare class CowSwapper implements Swapper {
5
+ static swapperName: string;
6
+ initialize(): Promise<void>;
7
+ getType(): SwapperType;
8
+ buildTrade(args: BuildTradeInput): Promise<Trade<SupportedChainIds>>;
9
+ getTradeQuote(input: GetTradeQuoteInput): Promise<TradeQuote<SupportedChainIds>>;
10
+ getUsdRate(input: Pick<Asset, 'symbol' | 'assetId'>): Promise<string>;
11
+ getMinMax(input: GetMinMaxInput): Promise<MinMaxOutput>;
12
+ executeTrade(args: ExecuteTradeInput<SupportedChainIds>): Promise<TradeResult>;
13
+ approvalNeeded(args: ApprovalNeededInput<SupportedChainIds>): Promise<ApprovalNeededOutput>;
14
+ approveInfinite(args: ApproveInfiniteInput<SupportedChainIds>): Promise<string>;
15
+ filterBuyAssetsBySellAssetId(args: BuyAssetBySellIdInput): AssetId[];
16
+ filterAssetIdsBySellable(assetIds: AssetId[]): AssetId[];
17
+ getTradeTxs(): Promise<TradeTxs>;
18
+ }
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CowSwapper = void 0;
4
+ const api_1 = require("../../api");
5
+ class CowSwapper {
6
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
7
+ async initialize() { }
8
+ getType() {
9
+ return api_1.SwapperType.CowSwap;
10
+ }
11
+ async buildTrade(args) {
12
+ console.info(args);
13
+ throw new Error('CowSwapper: buildTrade unimplemented');
14
+ }
15
+ async getTradeQuote(input) {
16
+ console.info(input);
17
+ throw new Error('CowSwapper: getTradeQuote unimplemented');
18
+ }
19
+ getUsdRate(input) {
20
+ console.info(input);
21
+ throw new Error('CowSwapper: getUsdRate unimplemented');
22
+ }
23
+ getMinMax(input) {
24
+ console.info(input);
25
+ throw new Error('CowSwapper: getMinMax unimplemented');
26
+ }
27
+ async executeTrade(args) {
28
+ console.info(args);
29
+ throw new Error('CowSwapper: executeTrade unimplemented');
30
+ }
31
+ async approvalNeeded(args) {
32
+ console.info(args);
33
+ throw new Error('CowSwapper: approvalNeeded unimplemented');
34
+ }
35
+ async approveInfinite(args) {
36
+ console.info(args);
37
+ throw new Error('CowSwapper: approveInfinite unimplemented');
38
+ }
39
+ filterBuyAssetsBySellAssetId(args) {
40
+ console.info(args);
41
+ return [];
42
+ }
43
+ filterAssetIdsBySellable(assetIds) {
44
+ console.info(assetIds);
45
+ return [];
46
+ }
47
+ async getTradeTxs() {
48
+ throw new Error('CowSwapper: executeTrade unimplemented');
49
+ }
50
+ }
51
+ exports.CowSwapper = CowSwapper;
52
+ CowSwapper.swapperName = 'CowSwapper';
@@ -1,9 +1,7 @@
1
1
  import { AssetId } from '@shapeshiftoss/caip';
2
2
  import { Asset, SupportedChainIds } from '@shapeshiftoss/types';
3
3
  import { ApprovalNeededOutput, BuyAssetBySellIdInput, GetMinMaxInput, MinMaxOutput, Swapper, SwapperType, Trade, TradeQuote, TradeResult, TradeTxs } from '../../api';
4
- export declare type ThorchainSwapperDeps = {
5
- midgardUrl: string;
6
- };
4
+ import { ThorchainSwapperDeps } from './types';
7
5
  export declare class ThorchainSwapper implements Swapper {
8
6
  private supportedAssetIds;
9
7
  deps: ThorchainSwapperDeps;
@@ -1,12 +1,10 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
2
  Object.defineProperty(exports, "__esModule", { value: true });
6
3
  exports.ThorchainSwapper = void 0;
7
4
  const caip_1 = require("@shapeshiftoss/caip");
8
- const axios_1 = __importDefault(require("axios"));
9
5
  const api_1 = require("../../api");
6
+ const getUsdRate_1 = require("./utils/getUsdRate/getUsdRate");
7
+ const thorService_1 = require("./utils/thorService");
10
8
  class ThorchainSwapper {
11
9
  constructor(deps) {
12
10
  this.supportedAssetIds = [];
@@ -14,7 +12,7 @@ class ThorchainSwapper {
14
12
  }
15
13
  async initialize() {
16
14
  try {
17
- const { data: responseData } = await axios_1.default.get(this.deps.midgardUrl);
15
+ const { data: responseData } = await thorService_1.thorService.get(`${this.deps.midgardUrl}/pools`);
18
16
  const supportedAssetIds = responseData.reduce((acc, midgardPool) => {
19
17
  const assetId = caip_1.adapters.poolAssetIdToAssetId(midgardPool.asset);
20
18
  if (!assetId)
@@ -35,8 +33,7 @@ class ThorchainSwapper {
35
33
  return api_1.SwapperType.Thorchain;
36
34
  }
37
35
  getUsdRate(input) {
38
- console.info(input);
39
- throw new Error('ThorchainSwapper: getUsdRate unimplemented');
36
+ return (0, getUsdRate_1.getUsdRate)({ deps: this.deps, input });
40
37
  }
41
38
  getMinMax(input) {
42
39
  console.info(input);
@@ -12,3 +12,6 @@ export declare type MidgardResponse = {
12
12
  units: string;
13
13
  volume24h: string;
14
14
  };
15
+ export declare type ThorchainSwapperDeps = {
16
+ midgardUrl: string;
17
+ };
@@ -0,0 +1,2 @@
1
+ import { AbiItem } from 'web3-utils';
2
+ export declare const routerAbi: AbiItem[];
@@ -0,0 +1,153 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.routerAbi = void 0;
4
+ /* eslint-disable */
5
+ exports.routerAbi = [
6
+ {
7
+ "inputs": [{ "internalType": "address", "name": "rune", "type": "address" }],
8
+ "stateMutability": "nonpayable",
9
+ "type": "constructor"
10
+ },
11
+ {
12
+ "anonymous": false,
13
+ "inputs": [
14
+ { "indexed": true, "internalType": "address", "name": "to", "type": "address" },
15
+ { "indexed": true, "internalType": "address", "name": "asset", "type": "address" },
16
+ { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" },
17
+ { "indexed": false, "internalType": "string", "name": "memo", "type": "string" }
18
+ ],
19
+ "name": "Deposit",
20
+ "type": "event"
21
+ },
22
+ {
23
+ "anonymous": false,
24
+ "inputs": [
25
+ { "indexed": true, "internalType": "address", "name": "oldVault", "type": "address" },
26
+ { "indexed": true, "internalType": "address", "name": "newVault", "type": "address" },
27
+ { "indexed": false, "internalType": "address", "name": "asset", "type": "address" },
28
+ { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" },
29
+ { "indexed": false, "internalType": "string", "name": "memo", "type": "string" }
30
+ ],
31
+ "name": "TransferAllowance",
32
+ "type": "event"
33
+ },
34
+ {
35
+ "anonymous": false,
36
+ "inputs": [
37
+ { "indexed": true, "internalType": "address", "name": "vault", "type": "address" },
38
+ { "indexed": true, "internalType": "address", "name": "to", "type": "address" },
39
+ { "indexed": false, "internalType": "address", "name": "asset", "type": "address" },
40
+ { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" },
41
+ { "indexed": false, "internalType": "string", "name": "memo", "type": "string" }
42
+ ],
43
+ "name": "TransferOut",
44
+ "type": "event"
45
+ },
46
+ {
47
+ "anonymous": false,
48
+ "inputs": [
49
+ { "indexed": true, "internalType": "address", "name": "oldVault", "type": "address" },
50
+ { "indexed": true, "internalType": "address", "name": "newVault", "type": "address" },
51
+ {
52
+ "components": [
53
+ { "internalType": "address", "name": "asset", "type": "address" },
54
+ { "internalType": "uint256", "name": "amount", "type": "uint256" }
55
+ ],
56
+ "indexed": false,
57
+ "internalType": "struct THORChain_Router.Coin[]",
58
+ "name": "coins",
59
+ "type": "tuple[]"
60
+ },
61
+ { "indexed": false, "internalType": "string", "name": "memo", "type": "string" }
62
+ ],
63
+ "name": "VaultTransfer",
64
+ "type": "event"
65
+ },
66
+ {
67
+ "inputs": [],
68
+ "name": "RUNE",
69
+ "outputs": [{ "internalType": "address", "name": "", "type": "address" }],
70
+ "stateMutability": "view",
71
+ "type": "function"
72
+ },
73
+ {
74
+ "inputs": [
75
+ { "internalType": "address payable", "name": "vault", "type": "address" },
76
+ { "internalType": "address", "name": "asset", "type": "address" },
77
+ { "internalType": "uint256", "name": "amount", "type": "uint256" },
78
+ { "internalType": "string", "name": "memo", "type": "string" }
79
+ ],
80
+ "name": "deposit",
81
+ "outputs": [],
82
+ "stateMutability": "payable",
83
+ "type": "function"
84
+ },
85
+ {
86
+ "inputs": [
87
+ { "internalType": "address payable", "name": "vault", "type": "address" },
88
+ { "internalType": "address", "name": "asset", "type": "address" },
89
+ { "internalType": "uint256", "name": "amount", "type": "uint256" },
90
+ { "internalType": "string", "name": "memo", "type": "string" },
91
+ { "internalType": "uint256", "name": "expiration", "type": "uint256" }
92
+ ],
93
+ "name": "depositWithExpiry",
94
+ "outputs": [],
95
+ "stateMutability": "payable",
96
+ "type": "function"
97
+ },
98
+ {
99
+ "inputs": [
100
+ { "internalType": "address", "name": "router", "type": "address" },
101
+ { "internalType": "address payable", "name": "asgard", "type": "address" },
102
+ {
103
+ "components": [
104
+ { "internalType": "address", "name": "asset", "type": "address" },
105
+ { "internalType": "uint256", "name": "amount", "type": "uint256" }
106
+ ],
107
+ "internalType": "struct THORChain_Router.Coin[]",
108
+ "name": "coins",
109
+ "type": "tuple[]"
110
+ },
111
+ { "internalType": "string", "name": "memo", "type": "string" }
112
+ ],
113
+ "name": "returnVaultAssets",
114
+ "outputs": [],
115
+ "stateMutability": "payable",
116
+ "type": "function"
117
+ },
118
+ {
119
+ "inputs": [
120
+ { "internalType": "address", "name": "router", "type": "address" },
121
+ { "internalType": "address", "name": "newVault", "type": "address" },
122
+ { "internalType": "address", "name": "asset", "type": "address" },
123
+ { "internalType": "uint256", "name": "amount", "type": "uint256" },
124
+ { "internalType": "string", "name": "memo", "type": "string" }
125
+ ],
126
+ "name": "transferAllowance",
127
+ "outputs": [],
128
+ "stateMutability": "nonpayable",
129
+ "type": "function"
130
+ },
131
+ {
132
+ "inputs": [
133
+ { "internalType": "address payable", "name": "to", "type": "address" },
134
+ { "internalType": "address", "name": "asset", "type": "address" },
135
+ { "internalType": "uint256", "name": "amount", "type": "uint256" },
136
+ { "internalType": "string", "name": "memo", "type": "string" }
137
+ ],
138
+ "name": "transferOut",
139
+ "outputs": [],
140
+ "stateMutability": "payable",
141
+ "type": "function"
142
+ },
143
+ {
144
+ "inputs": [
145
+ { "internalType": "address", "name": "vault", "type": "address" },
146
+ { "internalType": "address", "name": "token", "type": "address" }
147
+ ],
148
+ "name": "vaultAllowance",
149
+ "outputs": [{ "internalType": "uint256", "name": "amount", "type": "uint256" }],
150
+ "stateMutability": "view",
151
+ "type": "function"
152
+ }
153
+ ];
@@ -0,0 +1 @@
1
+ export declare const deposit: (contractAddress: string, vault: string, asset: string, amount: string, memo: string) => Promise<any>;
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.deposit = void 0;
7
+ const web3_1 = __importDefault(require("web3"));
8
+ const routerAbi_1 = require("./routerAbi");
9
+ const deposit = async (contractAddress, vault, asset, amount, memo) => {
10
+ const web3 = new web3_1.default();
11
+ const routerContract = new web3.eth.Contract(routerAbi_1.routerAbi, contractAddress);
12
+ const data = routerContract.methods.deposit(vault, asset, amount, memo).encodeABI();
13
+ return data;
14
+ };
15
+ exports.deposit = deposit;
@@ -0,0 +1,6 @@
1
+ import { Asset } from '@shapeshiftoss/types';
2
+ import { ThorchainSwapperDeps } from '../../types';
3
+ export declare const getUsdRate: ({ deps, input }: {
4
+ deps: ThorchainSwapperDeps;
5
+ input: Pick<Asset, 'assetId'>;
6
+ }) => Promise<string>;
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getUsdRate = void 0;
4
+ const caip_1 = require("@shapeshiftoss/caip");
5
+ const api_1 = require("../../../../api");
6
+ const thorService_1 = require("../thorService");
7
+ const getUsdRate = async ({ deps, input }) => {
8
+ const { assetId } = input;
9
+ try {
10
+ const thorchainPoolId = caip_1.adapters.assetIdToPoolAssetId({ assetId });
11
+ if (!thorchainPoolId)
12
+ throw new api_1.SwapError(`[getUsdRate]: No thorchainPoolId found for assetId: ${assetId}`, {
13
+ code: api_1.SwapErrorTypes.USD_RATE_FAILED
14
+ });
15
+ const { data: responseData } = await thorService_1.thorService.get(`${deps.midgardUrl}/pool/${thorchainPoolId}`);
16
+ const rate = responseData === null || responseData === void 0 ? void 0 : responseData.assetPriceUSD;
17
+ if (!rate)
18
+ throw new api_1.SwapError(`[getUsdRate]: No rate found`, {
19
+ code: api_1.SwapErrorTypes.USD_RATE_FAILED
20
+ });
21
+ return rate;
22
+ }
23
+ catch (e) {
24
+ if (e instanceof api_1.SwapError)
25
+ throw e;
26
+ throw new api_1.SwapError('[getUsdRate]: Thorchain getUsdRate failed', {
27
+ code: api_1.SwapErrorTypes.USD_RATE_FAILED,
28
+ cause: e
29
+ });
30
+ }
31
+ };
32
+ exports.getUsdRate = getUsdRate;
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.makeSwapMemo = void 0;
4
4
  const caip_1 = require("@shapeshiftoss/caip");
5
- const api_1 = require("../../../api");
5
+ const api_1 = require("../../../../api");
6
6
  // BTC (and likely other utxo coins) can only support up to 80 character memos
7
7
  const MAX_LENGTH = 80;
8
8
  /**
@@ -1,14 +1,5 @@
1
- export declare const midgardResponse: {
2
- asset: string;
3
- assetDepth: string;
4
- assetPrice: string;
5
- assetPriceUSD: string;
6
- liquidityUnits: string;
7
- poolAPY: string;
8
- runeDepth: string;
9
- status: string;
10
- synthSupply: string;
11
- synthUnits: string;
12
- units: string;
13
- volume24h: string;
14
- }[];
1
+ import { MidgardResponse } from '../../types';
2
+ export declare const btcMidgardPool: MidgardResponse;
3
+ export declare const ethMidgardPool: MidgardResponse;
4
+ export declare const foxMidgardPool: MidgardResponse;
5
+ export declare const midgardResponse: MidgardResponse[];
@@ -1,47 +1,46 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.midgardResponse = void 0;
4
- exports.midgardResponse = [
5
- {
6
- asset: 'BTC.BTC',
7
- assetDepth: '91027798705',
8
- assetPrice: '10280.68095465986',
9
- assetPriceUSD: '29850.505131750208',
10
- liquidityUnits: '536055974608843',
11
- poolAPY: '0.09305294391574037',
12
- runeDepth: '935827756491105',
13
- status: 'available',
14
- synthSupply: '3281284823',
15
- synthUnits: '9838954536080',
16
- units: '545894929144923',
17
- volume24h: '15031085906495'
18
- },
19
- {
20
- asset: 'ETH.ETH',
21
- assetDepth: '915018987646',
22
- assetPrice: '676.2118757936507',
23
- assetPriceUSD: '1963.4172247490626',
24
- liquidityUnits: '273709963437801',
25
- poolAPY: '0.10532151323548256',
26
- runeDepth: '618746706022909',
27
- status: 'available',
28
- synthSupply: '3572065751',
29
- synthUnits: '535301524652',
30
- units: '274245264962453',
31
- volume24h: '9890096673763'
32
- },
33
- {
34
- asset: 'ETH.FOX-0XC770EEFAD204B5180DF6A14EE197D99D808EE52D',
35
- assetDepth: '166650912393467',
36
- assetPrice: '0.05303710198887871',
37
- assetPriceUSD: '0.15399605260336216',
38
- liquidityUnits: '10015457121887',
39
- poolAPY: '0.2597568967423438',
40
- runeDepth: '8838681437152',
41
- status: 'available',
42
- synthSupply: '17428372569375',
43
- synthUnits: '552604585625',
44
- units: '10568061707512',
45
- volume24h: '251596933033'
46
- }
47
- ];
3
+ exports.midgardResponse = exports.foxMidgardPool = exports.ethMidgardPool = exports.btcMidgardPool = void 0;
4
+ exports.btcMidgardPool = {
5
+ asset: 'BTC.BTC',
6
+ assetDepth: '91027798705',
7
+ assetPrice: '10280.68095465986',
8
+ assetPriceUSD: '29850.505131750208',
9
+ liquidityUnits: '536055974608843',
10
+ poolAPY: '0.09305294391574037',
11
+ runeDepth: '935827756491105',
12
+ status: 'available',
13
+ synthSupply: '3281284823',
14
+ synthUnits: '9838954536080',
15
+ units: '545894929144923',
16
+ volume24h: '15031085906495'
17
+ };
18
+ exports.ethMidgardPool = {
19
+ asset: 'ETH.ETH',
20
+ assetDepth: '915018987646',
21
+ assetPrice: '676.2118757936507',
22
+ assetPriceUSD: '1963.4172247490626',
23
+ liquidityUnits: '273709963437801',
24
+ poolAPY: '0.10532151323548256',
25
+ runeDepth: '618746706022909',
26
+ status: 'available',
27
+ synthSupply: '3572065751',
28
+ synthUnits: '535301524652',
29
+ units: '274245264962453',
30
+ volume24h: '9890096673763'
31
+ };
32
+ exports.foxMidgardPool = {
33
+ asset: 'ETH.FOX-0XC770EEFAD204B5180DF6A14EE197D99D808EE52D',
34
+ assetDepth: '166650912393467',
35
+ assetPrice: '0.05303710198887871',
36
+ assetPriceUSD: '0.15399605260336216',
37
+ liquidityUnits: '10015457121887',
38
+ poolAPY: '0.2597568967423438',
39
+ runeDepth: '8838681437152',
40
+ status: 'available',
41
+ synthSupply: '17428372569375',
42
+ synthUnits: '552604585625',
43
+ units: '10568061707512',
44
+ volume24h: '251596933033'
45
+ };
46
+ exports.midgardResponse = [exports.btcMidgardPool, exports.ethMidgardPool, exports.foxMidgardPool];
@@ -0,0 +1 @@
1
+ export declare const thorService: import("axios").AxiosInstance;
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.thorService = void 0;
7
+ const axios_1 = __importDefault(require("axios"));
8
+ const axiosConfig = {
9
+ timeout: 10000,
10
+ headers: {
11
+ Accept: 'application/json',
12
+ 'Content-Type': 'application/json'
13
+ }
14
+ };
15
+ exports.thorService = axios_1.default.create(axiosConfig);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@shapeshiftoss/swapper",
3
- "version": "5.4.0",
3
+ "version": "5.7.0",
4
4
  "description": "TODO: description",
5
5
  "repository": "https://github.com/shapeshift/lib",
6
6
  "license": "MIT",