@lifi/sdk 1.7.2 → 2.0.0-beta.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/Lifi.js +97 -85
  2. package/dist/allowance/checkAllowance.js +12 -21
  3. package/dist/allowance/tokenApproval.js +20 -29
  4. package/dist/allowance/utils.js +12 -24
  5. package/dist/balance/checkBalance.js +5 -14
  6. package/dist/balance/getTokenBalance.js +12 -21
  7. package/dist/balance/index.d.ts +11 -0
  8. package/dist/balance/index.js +8 -0
  9. package/dist/balance/utils.d.ts +1 -0
  10. package/dist/balance/utils.js +36 -38
  11. package/dist/cjs/Lifi.js +97 -85
  12. package/dist/cjs/allowance/checkAllowance.js +12 -21
  13. package/dist/cjs/allowance/tokenApproval.js +20 -29
  14. package/dist/cjs/allowance/utils.js +12 -24
  15. package/dist/cjs/balance/checkBalance.js +5 -14
  16. package/dist/cjs/balance/getTokenBalance.js +12 -21
  17. package/dist/cjs/balance/index.d.ts +11 -0
  18. package/dist/cjs/balance/index.js +8 -0
  19. package/dist/cjs/balance/utils.d.ts +1 -0
  20. package/dist/cjs/balance/utils.js +39 -39
  21. package/dist/cjs/connectors.js +17 -25
  22. package/dist/cjs/execution/ExecutionManager.js +27 -33
  23. package/dist/cjs/execution/StatusManager.js +13 -13
  24. package/dist/cjs/execution/StepExecutor.js +8 -14
  25. package/dist/cjs/execution/stepComparison.js +4 -14
  26. package/dist/cjs/execution/switchChain.js +5 -14
  27. package/dist/cjs/execution/utils.js +43 -50
  28. package/dist/cjs/helpers.d.ts +12 -1
  29. package/dist/cjs/helpers.js +66 -18
  30. package/dist/cjs/services/ApiService.d.ts +10 -9
  31. package/dist/cjs/services/ApiService.js +190 -152
  32. package/dist/cjs/services/ApiService.unit.handlers.d.ts +1 -0
  33. package/dist/cjs/services/ApiService.unit.handlers.js +50 -0
  34. package/dist/cjs/services/ChainsService.js +16 -31
  35. package/dist/cjs/services/ConfigService.js +6 -16
  36. package/dist/cjs/typeguards.js +1 -1
  37. package/dist/cjs/types/internal.types.d.ts +4 -1
  38. package/dist/cjs/utils/errors.d.ts +5 -0
  39. package/dist/cjs/utils/errors.js +14 -1
  40. package/dist/cjs/utils/multicall.js +6 -15
  41. package/dist/cjs/utils/parseError.d.ts +2 -2
  42. package/dist/cjs/utils/parseError.js +36 -38
  43. package/dist/cjs/utils/preRestart.js +5 -7
  44. package/dist/cjs/utils/utils.d.ts +0 -1
  45. package/dist/cjs/utils/utils.js +21 -28
  46. package/dist/cjs/version.d.ts +1 -1
  47. package/dist/cjs/version.js +1 -1
  48. package/dist/connectors.js +15 -23
  49. package/dist/execution/ExecutionManager.js +27 -33
  50. package/dist/execution/StatusManager.js +11 -11
  51. package/dist/execution/StepExecutor.js +8 -14
  52. package/dist/execution/stepComparison.js +4 -14
  53. package/dist/execution/switchChain.js +5 -14
  54. package/dist/execution/utils.js +43 -50
  55. package/dist/helpers.d.ts +12 -1
  56. package/dist/helpers.js +63 -17
  57. package/dist/services/ApiService.d.ts +10 -9
  58. package/dist/services/ApiService.js +190 -152
  59. package/dist/services/ApiService.unit.handlers.d.ts +1 -0
  60. package/dist/services/ApiService.unit.handlers.js +44 -0
  61. package/dist/services/ChainsService.js +16 -31
  62. package/dist/services/ConfigService.js +6 -16
  63. package/dist/typeguards.js +1 -1
  64. package/dist/types/internal.types.d.ts +4 -1
  65. package/dist/utils/errors.d.ts +5 -0
  66. package/dist/utils/errors.js +12 -0
  67. package/dist/utils/multicall.js +6 -15
  68. package/dist/utils/parseError.d.ts +2 -2
  69. package/dist/utils/parseError.js +36 -38
  70. package/dist/utils/preRestart.js +5 -7
  71. package/dist/utils/utils.d.ts +0 -1
  72. package/dist/utils/utils.js +20 -26
  73. package/dist/version.d.ts +1 -1
  74. package/dist/version.js +1 -1
  75. package/package.json +22 -24
  76. package/CHANGELOG.md +0 -492
@@ -1,40 +1,31 @@
1
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
- return new (P || (P = Promise))(function (resolve, reject) {
4
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
- step((generator = generator.apply(thisArg, _arguments || [])).next());
8
- });
9
- };
10
1
  import BigNumber from 'bignumber.js';
11
2
  import { Contract } from 'ethers';
12
3
  import ChainsService from '../services/ChainsService';
13
4
  import { ERC20_ABI } from '../types';
14
5
  import { ServerError } from '../utils/errors';
15
6
  import { fetchDataUsingMulticall } from '../utils/multicall';
16
- export const getApproved = (signer, tokenAddress, contractAddress) => __awaiter(void 0, void 0, void 0, function* () {
17
- const signerAddress = yield signer.getAddress();
7
+ export const getApproved = async (signer, tokenAddress, contractAddress) => {
8
+ const signerAddress = await signer.getAddress();
18
9
  const erc20 = new Contract(tokenAddress, ERC20_ABI, signer);
19
10
  try {
20
- const approved = yield erc20.allowance(signerAddress, contractAddress);
11
+ const approved = await erc20.allowance(signerAddress, contractAddress);
21
12
  return new BigNumber(approved.toString());
22
13
  }
23
14
  catch (e) {
24
15
  return new BigNumber(0);
25
16
  }
26
- });
17
+ };
27
18
  export const setApproval = (signer, tokenAddress, contractAddress, amount) => {
28
19
  const erc20 = new Contract(tokenAddress, ERC20_ABI, signer);
29
20
  return erc20.approve(contractAddress, amount);
30
21
  };
31
- export const getAllowanceViaMulticall = (signer, chainId, tokenData) => __awaiter(void 0, void 0, void 0, function* () {
22
+ export const getAllowanceViaMulticall = async (signer, chainId, tokenData) => {
32
23
  const chainsService = ChainsService.getInstance();
33
- const chain = yield chainsService.getChainById(chainId);
24
+ const chain = await chainsService.getChainById(chainId);
34
25
  if (!chain.multicallAddress) {
35
26
  throw new ServerError(`No multicall address configured for chainId ${chainId}.`);
36
27
  }
37
- const ownerAddress = yield signer.getAddress();
28
+ const ownerAddress = await signer.getAddress();
38
29
  const calls = [];
39
30
  tokenData.map(({ token, approvalAddress }) => {
40
31
  calls.push({
@@ -43,22 +34,19 @@ export const getAllowanceViaMulticall = (signer, chainId, tokenData) => __awaite
43
34
  params: [ownerAddress, approvalAddress],
44
35
  });
45
36
  });
46
- const result = yield fetchDataUsingMulticall(calls, ERC20_ABI, chainId, chain.multicallAddress);
37
+ const result = await fetchDataUsingMulticall(calls, ERC20_ABI, chainId, chain.multicallAddress);
47
38
  if (!result.length) {
48
39
  throw new ServerError(`Couldn't load allowance from chainId ${chainId} using multicall.`);
49
40
  }
50
- const parsedResult = result.map(({ data }) => {
51
- var _a;
52
- return ({
53
- approvalAmount: (_a = data) !== null && _a !== void 0 ? _a : new BigNumber(0),
54
- });
55
- });
41
+ const parsedResult = result.map(({ data }) => ({
42
+ approvalAmount: data ?? new BigNumber(0),
43
+ }));
56
44
  return tokenData.map(({ token, approvalAddress }, i) => ({
57
45
  token,
58
46
  approvalAddress,
59
47
  approvedAmount: parsedResult[i].approvalAmount,
60
48
  }));
61
- });
49
+ };
62
50
  export const groupByChain = (tokenDataList) => {
63
51
  // group by chain
64
52
  const tokenDataByChain = {};
@@ -1,26 +1,17 @@
1
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
- return new (P || (P = Promise))(function (resolve, reject) {
4
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
- step((generator = generator.apply(thisArg, _arguments || [])).next());
8
- });
9
- };
10
1
  import BigNumber from 'bignumber.js';
11
2
  import { BalanceError } from '../utils/errors';
12
3
  import { getTokenBalance } from './getTokenBalance';
13
- export const checkBalance = (signer, step, depth = 0) => __awaiter(void 0, void 0, void 0, function* () {
14
- const tokenAmount = yield getTokenBalance(yield signer.getAddress(), step.action.fromToken);
4
+ export const checkBalance = async (signer, step, depth = 0) => {
5
+ const tokenAmount = await getTokenBalance(await signer.getAddress(), step.action.fromToken);
15
6
  if (tokenAmount) {
16
7
  const currentBalance = new BigNumber(tokenAmount.amount).shiftedBy(tokenAmount.decimals);
17
8
  const neededBalance = new BigNumber(step.action.fromAmount);
18
9
  if (currentBalance.lt(neededBalance)) {
19
10
  if (depth <= 3) {
20
- yield new Promise((resolve) => {
11
+ await new Promise((resolve) => {
21
12
  setTimeout(resolve, 200);
22
13
  });
23
- yield checkBalance(signer, step, depth + 1);
14
+ await checkBalance(signer, step, depth + 1);
24
15
  }
25
16
  else if (neededBalance.multipliedBy(1 - step.action.slippage).lte(currentBalance)) {
26
17
  // adjust amount in slippage limits
@@ -44,4 +35,4 @@ export const checkBalance = (signer, step, depth = 0) => __awaiter(void 0, void
44
35
  }
45
36
  }
46
37
  }
47
- });
38
+ };
@@ -1,18 +1,9 @@
1
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
- return new (P || (P = Promise))(function (resolve, reject) {
4
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
- step((generator = generator.apply(thisArg, _arguments || [])).next());
8
- });
9
- };
10
1
  import utils from './utils';
11
- export const getTokenBalance = (walletAddress, token) => __awaiter(void 0, void 0, void 0, function* () {
12
- const tokenAmounts = yield getTokenBalances(walletAddress, [token]);
2
+ export const getTokenBalance = async (walletAddress, token) => {
3
+ const tokenAmounts = await getTokenBalances(walletAddress, [token]);
13
4
  return tokenAmounts.length ? tokenAmounts[0] : null;
14
- });
15
- export const getTokenBalances = (walletAddress, tokens) => __awaiter(void 0, void 0, void 0, function* () {
5
+ };
6
+ export const getTokenBalances = async (walletAddress, tokens) => {
16
7
  // split by chain
17
8
  const tokensByChain = {};
18
9
  tokens.forEach((token) => {
@@ -21,16 +12,16 @@ export const getTokenBalances = (walletAddress, tokens) => __awaiter(void 0, voi
21
12
  }
22
13
  tokensByChain[token.chainId].push(token);
23
14
  });
24
- const tokenAmountsByChain = yield getTokenBalancesForChains(walletAddress, tokensByChain);
15
+ const tokenAmountsByChain = await getTokenBalancesForChains(walletAddress, tokensByChain);
25
16
  return Object.values(tokenAmountsByChain).flat();
26
- });
27
- export const getTokenBalancesForChains = (walletAddress, tokensByChain) => __awaiter(void 0, void 0, void 0, function* () {
17
+ };
18
+ export const getTokenBalancesForChains = async (walletAddress, tokensByChain) => {
28
19
  const tokenAmountsByChain = {};
29
- const promises = Object.keys(tokensByChain).map((chainIdStr) => __awaiter(void 0, void 0, void 0, function* () {
20
+ const promises = Object.keys(tokensByChain).map(async (chainIdStr) => {
30
21
  const chainId = parseInt(chainIdStr);
31
- const tokenAmounts = yield utils.getBalances(walletAddress, tokensByChain[chainId]);
22
+ const tokenAmounts = await utils.getBalances(walletAddress, tokensByChain[chainId]);
32
23
  tokenAmountsByChain[chainId] = tokenAmounts;
33
- }));
34
- yield Promise.allSettled(promises);
24
+ });
25
+ await Promise.allSettled(promises);
35
26
  return tokenAmountsByChain;
36
- });
27
+ };
@@ -1,2 +1,13 @@
1
1
  export * from './checkBalance';
2
2
  export * from './getTokenBalance';
3
+ declare const _default: {
4
+ checkBalance: (signer: import("ethers").Signer, step: import("@lifi/types").Step, depth?: number) => Promise<void>;
5
+ getTokenBalance: (walletAddress: string, token: import("@lifi/types").Token) => Promise<import("@lifi/types").TokenAmount | null>;
6
+ getTokenBalances: (walletAddress: string, tokens: import("@lifi/types").Token[]) => Promise<import("@lifi/types").TokenAmount[]>;
7
+ getTokenBalancesForChains: (walletAddress: string, tokensByChain: {
8
+ [chainId: number]: import("@lifi/types").Token[];
9
+ }) => Promise<{
10
+ [chainId: number]: import("@lifi/types").TokenAmount[];
11
+ }>;
12
+ };
13
+ export default _default;
@@ -1,2 +1,10 @@
1
1
  export * from './checkBalance';
2
2
  export * from './getTokenBalance';
3
+ import { checkBalance } from './checkBalance';
4
+ import { getTokenBalance, getTokenBalances, getTokenBalancesForChains, } from './getTokenBalance';
5
+ export default {
6
+ checkBalance,
7
+ getTokenBalance,
8
+ getTokenBalances,
9
+ getTokenBalancesForChains,
10
+ };
@@ -1,4 +1,5 @@
1
1
  import { Token, TokenAmount } from '@lifi/types';
2
+ export declare const getBalances: (walletAddress: string, tokens: Token[]) => Promise<TokenAmount[]>;
2
3
  declare const _default: {
3
4
  getBalances: (walletAddress: string, tokens: Token[]) => Promise<TokenAmount[]>;
4
5
  };
@@ -1,12 +1,3 @@
1
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
- return new (P || (P = Promise))(function (resolve, reject) {
4
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
- step((generator = generator.apply(thisArg, _arguments || [])).next());
8
- });
9
- };
10
1
  import BigNumber from 'bignumber.js';
11
2
  import { ethers } from 'ethers';
12
3
  import { getMulticallAddress, getRpcProvider } from '../connectors';
@@ -32,7 +23,7 @@ const balanceAbi = [
32
23
  type: 'function',
33
24
  },
34
25
  ];
35
- const getBalances = (walletAddress, tokens) => __awaiter(void 0, void 0, void 0, function* () {
26
+ export const getBalances = async (walletAddress, tokens) => {
36
27
  if (tokens.length === 0) {
37
28
  return [];
38
29
  }
@@ -44,23 +35,23 @@ const getBalances = (walletAddress, tokens) => __awaiter(void 0, void 0, void 0,
44
35
  return [];
45
36
  }
46
37
  });
47
- if ((yield getMulticallAddress(chainId)) && tokens.length > 1) {
38
+ if ((await getMulticallAddress(chainId)) && tokens.length > 1) {
48
39
  return getBalancesFromProviderUsingMulticall(walletAddress, tokens);
49
40
  }
50
41
  else {
51
42
  return getBalancesFromProvider(walletAddress, tokens);
52
43
  }
53
- });
54
- const getBalancesFromProviderUsingMulticall = (walletAddress, tokens) => __awaiter(void 0, void 0, void 0, function* () {
44
+ };
45
+ const getBalancesFromProviderUsingMulticall = async (walletAddress, tokens) => {
55
46
  // Configuration
56
47
  const { chainId } = tokens[0];
57
- const multicallAddress = yield getMulticallAddress(chainId);
48
+ const multicallAddress = await getMulticallAddress(chainId);
58
49
  if (!multicallAddress) {
59
50
  throw new Error('No multicallAddress found for the given chain.');
60
51
  }
61
52
  return executeMulticall(walletAddress, tokens, multicallAddress, chainId);
62
- });
63
- const executeMulticall = (walletAddress, tokens, multicallAddress, chainId) => __awaiter(void 0, void 0, void 0, function* () {
53
+ };
54
+ const executeMulticall = async (walletAddress, tokens, multicallAddress, chainId) => {
64
55
  // Collect calls we want to make
65
56
  const calls = [];
66
57
  tokens.map((token) => {
@@ -79,7 +70,7 @@ const executeMulticall = (walletAddress, tokens, multicallAddress, chainId) => _
79
70
  });
80
71
  }
81
72
  });
82
- const res = yield fetchViaMulticall(calls, balanceAbi, chainId, multicallAddress);
73
+ const res = await fetchViaMulticall(calls, balanceAbi, chainId, multicallAddress);
83
74
  if (!res.length) {
84
75
  return [];
85
76
  }
@@ -87,24 +78,28 @@ const executeMulticall = (walletAddress, tokens, multicallAddress, chainId) => _
87
78
  const amount = new BigNumber(res[i].amount.toString() || '0')
88
79
  .shiftedBy(-token.decimals)
89
80
  .toFixed();
90
- return Object.assign(Object.assign({}, token), { amount: amount || '0', blockNumber: res[i].blockNumber });
81
+ return {
82
+ ...token,
83
+ amount: amount || '0',
84
+ blockNumber: res[i].blockNumber,
85
+ };
91
86
  });
92
- });
93
- const fetchViaMulticall = (calls, abi, chainId, multicallAddress) => __awaiter(void 0, void 0, void 0, function* () {
94
- const result = yield fetchDataUsingMulticall(calls, abi, chainId, multicallAddress);
87
+ };
88
+ const fetchViaMulticall = async (calls, abi, chainId, multicallAddress) => {
89
+ const result = await fetchDataUsingMulticall(calls, abi, chainId, multicallAddress);
95
90
  return result.map(({ data, blockNumber }) => ({
96
91
  amount: data ? data : new BigNumber(0),
97
92
  blockNumber,
98
93
  }));
99
- });
100
- const getBalancesFromProvider = (walletAddress, tokens) => __awaiter(void 0, void 0, void 0, function* () {
94
+ };
95
+ const getBalancesFromProvider = async (walletAddress, tokens) => {
101
96
  const chainId = tokens[0].chainId;
102
- const rpc = yield getRpcProvider(chainId);
103
- const tokenAmountPromises = tokens.map((token) => __awaiter(void 0, void 0, void 0, function* () {
97
+ const rpc = await getRpcProvider(chainId);
98
+ const tokenAmountPromises = tokens.map(async (token) => {
104
99
  let amount = '0';
105
100
  let blockNumber;
106
101
  try {
107
- const balance = yield getBalanceFromProvider(walletAddress, token.address, chainId, rpc);
102
+ const balance = await getBalanceFromProvider(walletAddress, token.address, chainId, rpc);
108
103
  amount = new BigNumber(balance.amount.toString())
109
104
  .shiftedBy(-token.decimals)
110
105
  .toString();
@@ -114,20 +109,23 @@ const getBalancesFromProvider = (walletAddress, tokens) => __awaiter(void 0, voi
114
109
  // eslint-disable-next-line no-console
115
110
  console.warn(e);
116
111
  }
117
- return Object.assign(Object.assign({}, token), { amount,
118
- blockNumber });
119
- }));
112
+ return {
113
+ ...token,
114
+ amount,
115
+ blockNumber,
116
+ };
117
+ });
120
118
  return Promise.all(tokenAmountPromises);
121
- });
122
- const getBalanceFromProvider = (walletAddress, assetId, chainId, provider) => __awaiter(void 0, void 0, void 0, function* () {
123
- const blockNumber = yield getCurrentBlockNumber(chainId);
119
+ };
120
+ const getBalanceFromProvider = async (walletAddress, assetId, chainId, provider) => {
121
+ const blockNumber = await getCurrentBlockNumber(chainId);
124
122
  let balance;
125
123
  if (isZeroAddress(assetId)) {
126
- balance = yield provider.getBalance(walletAddress, blockNumber);
124
+ balance = await provider.getBalance(walletAddress, blockNumber);
127
125
  }
128
126
  else {
129
127
  const contract = new ethers.Contract(assetId, ['function balanceOf(address owner) view returns (uint256)'], provider);
130
- balance = yield contract.balanceOf(walletAddress, {
128
+ balance = await contract.balanceOf(walletAddress, {
131
129
  blockTag: blockNumber,
132
130
  });
133
131
  }
@@ -135,11 +133,11 @@ const getBalanceFromProvider = (walletAddress, assetId, chainId, provider) => __
135
133
  amount: balance,
136
134
  blockNumber,
137
135
  };
138
- });
139
- const getCurrentBlockNumber = (chainId) => __awaiter(void 0, void 0, void 0, function* () {
140
- const rpc = yield getRpcProvider(chainId);
136
+ };
137
+ const getCurrentBlockNumber = async (chainId) => {
138
+ const rpc = await getRpcProvider(chainId);
141
139
  return rpc.getBlockNumber();
142
- });
140
+ };
143
141
  export default {
144
142
  getBalances,
145
143
  };