@lifi/sdk 1.1.1 → 1.1.4
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/CHANGELOG.md +16 -0
- package/dist/Lifi.d.ts +1 -1
- package/dist/Lifi.js +179 -285
- package/dist/allowance/index.js +56 -148
- package/dist/allowance/utils.js +51 -116
- package/dist/balances/index.js +29 -92
- package/dist/balances/utils.js +108 -218
- package/dist/connectors.js +50 -133
- package/dist/execution/StatusManager.js +38 -40
- package/dist/execution/StepExecutor.js +54 -123
- package/dist/execution/allowance.execute.js +76 -142
- package/dist/execution/balanceCheck.execute.js +29 -74
- package/dist/execution/bridges/bridge.execute.js +132 -221
- package/dist/execution/exchanges/swap.execute.js +142 -225
- package/dist/execution/index.js +1 -17
- package/dist/execution/stepComparison.js +22 -61
- package/dist/execution/switchChain.js +33 -81
- package/dist/execution/utils.js +60 -119
- package/dist/helpers.js +15 -53
- package/dist/index.js +6 -25
- package/dist/services/ApiService.js +248 -385
- package/dist/services/ChainsService.js +29 -89
- package/dist/services/ConfigService.js +47 -86
- package/dist/typeguards.js +13 -21
- package/dist/types/ERC20.js +1 -4
- package/dist/types/index.js +4 -22
- package/dist/types/internal.types.js +1 -2
- package/dist/utils/errors.js +47 -93
- package/dist/utils/getProvider.js +3 -7
- package/dist/utils/multicall.js +61 -117
- package/dist/utils/parseError.js +73 -141
- package/dist/utils/preRestart.js +14 -21
- package/dist/utils/utils.js +47 -130
- package/package.json +3 -3
package/dist/allowance/index.js
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
2
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
3
|
return new (P || (P = Promise))(function (resolve, reject) {
|
|
@@ -8,153 +7,62 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
8
7
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
8
|
});
|
|
10
9
|
};
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
switch (op[0]) {
|
|
21
|
-
case 0: case 1: t = op; break;
|
|
22
|
-
case 4: _.label++; return { value: op[1], done: false };
|
|
23
|
-
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
24
|
-
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
25
|
-
default:
|
|
26
|
-
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
27
|
-
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
28
|
-
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
29
|
-
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
30
|
-
if (t[2]) _.ops.pop();
|
|
31
|
-
_.trys.pop(); continue;
|
|
32
|
-
}
|
|
33
|
-
op = body.call(thisArg, _);
|
|
34
|
-
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
35
|
-
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
10
|
+
import BigNumber from 'bignumber.js';
|
|
11
|
+
import { constants } from 'ethers';
|
|
12
|
+
import { isSameToken } from '../helpers';
|
|
13
|
+
import { isNativeTokenAddress } from '../utils/utils';
|
|
14
|
+
import { getAllowanceViaMulticall, getApproved, groupByChain, setApproval, } from './utils';
|
|
15
|
+
export const getTokenApproval = (signer, token, approvalAddress) => __awaiter(void 0, void 0, void 0, function* () {
|
|
16
|
+
// native token don't need approval
|
|
17
|
+
if (isNativeTokenAddress(token.address)) {
|
|
18
|
+
return;
|
|
36
19
|
}
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
}
|
|
57
|
-
return [4 /*yield*/, (0, utils_2.getApproved)(signer, token.address, approvalAddress)];
|
|
58
|
-
case 1:
|
|
59
|
-
approved = _a.sent();
|
|
60
|
-
return [2 /*return*/, approved.toString()];
|
|
61
|
-
}
|
|
62
|
-
});
|
|
63
|
-
}); };
|
|
64
|
-
exports.getTokenApproval = getTokenApproval;
|
|
65
|
-
var bulkGetTokenApproval = function (signer, tokenData) { return __awaiter(void 0, void 0, void 0, function () {
|
|
66
|
-
var filteredTokenData, tokenDataByChain, approvalPromises, approvalsByChain, approvals;
|
|
67
|
-
return __generator(this, function (_a) {
|
|
68
|
-
switch (_a.label) {
|
|
69
|
-
case 0:
|
|
70
|
-
filteredTokenData = tokenData.filter(function (_a) {
|
|
71
|
-
var token = _a.token;
|
|
72
|
-
return !(0, utils_1.isNativeTokenAddress)(token.address);
|
|
73
|
-
});
|
|
74
|
-
tokenDataByChain = (0, utils_2.groupByChain)(filteredTokenData);
|
|
75
|
-
approvalPromises = Object.keys(tokenDataByChain).map(function (chainId) { return __awaiter(void 0, void 0, void 0, function () {
|
|
76
|
-
var parsedChainId;
|
|
77
|
-
return __generator(this, function (_a) {
|
|
78
|
-
parsedChainId = Number.parseInt(chainId);
|
|
79
|
-
// get allowances for current chain and token list
|
|
80
|
-
return [2 /*return*/, (0, utils_2.getAllowanceViaMulticall)(signer, parsedChainId, tokenDataByChain[parsedChainId])];
|
|
81
|
-
});
|
|
82
|
-
}); });
|
|
83
|
-
return [4 /*yield*/, Promise.all(approvalPromises)];
|
|
84
|
-
case 1:
|
|
85
|
-
approvalsByChain = _a.sent();
|
|
86
|
-
approvals = approvalsByChain.flat();
|
|
87
|
-
return [2 /*return*/, tokenData.map(function (_a) {
|
|
88
|
-
var token = _a.token;
|
|
89
|
-
// native token don't need approval
|
|
90
|
-
if ((0, utils_1.isNativeTokenAddress)(token.address)) {
|
|
91
|
-
return { token: token, approval: undefined };
|
|
92
|
-
}
|
|
93
|
-
var approved = approvals.find(function (approval) {
|
|
94
|
-
return (0, helpers_1.isSameToken)(approval.token, token);
|
|
95
|
-
});
|
|
96
|
-
return { token: token, approval: approved === null || approved === void 0 ? void 0 : approved.approvedAmount.toString() };
|
|
97
|
-
})];
|
|
20
|
+
const approved = yield getApproved(signer, token.address, approvalAddress);
|
|
21
|
+
return approved.toString();
|
|
22
|
+
});
|
|
23
|
+
export const bulkGetTokenApproval = (signer, tokenData) => __awaiter(void 0, void 0, void 0, function* () {
|
|
24
|
+
// filter out native tokens
|
|
25
|
+
const filteredTokenData = tokenData.filter(({ token }) => !isNativeTokenAddress(token.address));
|
|
26
|
+
// group by chain
|
|
27
|
+
const tokenDataByChain = groupByChain(filteredTokenData);
|
|
28
|
+
const approvalPromises = Object.keys(tokenDataByChain).map((chainId) => __awaiter(void 0, void 0, void 0, function* () {
|
|
29
|
+
const parsedChainId = Number.parseInt(chainId);
|
|
30
|
+
// get allowances for current chain and token list
|
|
31
|
+
return getAllowanceViaMulticall(signer, parsedChainId, tokenDataByChain[parsedChainId]);
|
|
32
|
+
}));
|
|
33
|
+
const approvalsByChain = yield Promise.all(approvalPromises);
|
|
34
|
+
const approvals = approvalsByChain.flat();
|
|
35
|
+
return tokenData.map(({ token }) => {
|
|
36
|
+
// native token don't need approval
|
|
37
|
+
if (isNativeTokenAddress(token.address)) {
|
|
38
|
+
return { token, approval: undefined };
|
|
98
39
|
}
|
|
40
|
+
const approved = approvals.find((approval) => isSameToken(approval.token, token));
|
|
41
|
+
return { token, approval: approved === null || approved === void 0 ? void 0 : approved.approvedAmount.toString() };
|
|
99
42
|
});
|
|
100
|
-
});
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
_c.label = 4;
|
|
127
|
-
case 4: return [2 /*return*/];
|
|
128
|
-
}
|
|
129
|
-
});
|
|
130
|
-
});
|
|
131
|
-
};
|
|
132
|
-
exports.approveToken = approveToken;
|
|
133
|
-
var revokeTokenApproval = function (_a) {
|
|
134
|
-
var signer = _a.signer, token = _a.token, approvalAddress = _a.approvalAddress;
|
|
135
|
-
return __awaiter(void 0, void 0, void 0, function () {
|
|
136
|
-
var approvedAmount, approveTx;
|
|
137
|
-
return __generator(this, function (_b) {
|
|
138
|
-
switch (_b.label) {
|
|
139
|
-
case 0:
|
|
140
|
-
// native token don't need approval
|
|
141
|
-
if ((0, utils_1.isNativeTokenAddress)(token.address)) {
|
|
142
|
-
return [2 /*return*/];
|
|
143
|
-
}
|
|
144
|
-
return [4 /*yield*/, (0, utils_2.getApproved)(signer, token.address, approvalAddress)];
|
|
145
|
-
case 1:
|
|
146
|
-
approvedAmount = _b.sent();
|
|
147
|
-
if (!!approvedAmount.isZero()) return [3 /*break*/, 4];
|
|
148
|
-
return [4 /*yield*/, (0, utils_2.setApproval)(signer, token.address, approvalAddress, '0')];
|
|
149
|
-
case 2:
|
|
150
|
-
approveTx = _b.sent();
|
|
151
|
-
return [4 /*yield*/, approveTx.wait()];
|
|
152
|
-
case 3:
|
|
153
|
-
_b.sent();
|
|
154
|
-
_b.label = 4;
|
|
155
|
-
case 4: return [2 /*return*/];
|
|
156
|
-
}
|
|
157
|
-
});
|
|
158
|
-
});
|
|
159
|
-
};
|
|
160
|
-
exports.revokeTokenApproval = revokeTokenApproval;
|
|
43
|
+
});
|
|
44
|
+
export const approveToken = ({ signer, token, approvalAddress, amount, infiniteApproval = false, }) => __awaiter(void 0, void 0, void 0, function* () {
|
|
45
|
+
// native token don't need approval
|
|
46
|
+
if (isNativeTokenAddress(token.address)) {
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
const approvedAmount = yield getApproved(signer, token.address, approvalAddress);
|
|
50
|
+
if (new BigNumber(amount).gt(approvedAmount)) {
|
|
51
|
+
const approvalAmount = infiniteApproval
|
|
52
|
+
? constants.MaxUint256.toString()
|
|
53
|
+
: amount;
|
|
54
|
+
const approveTx = yield setApproval(signer, token.address, approvalAddress, approvalAmount);
|
|
55
|
+
yield approveTx.wait();
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
export const revokeTokenApproval = ({ signer, token, approvalAddress, }) => __awaiter(void 0, void 0, void 0, function* () {
|
|
59
|
+
// native token don't need approval
|
|
60
|
+
if (isNativeTokenAddress(token.address)) {
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
const approvedAmount = yield getApproved(signer, token.address, approvalAddress);
|
|
64
|
+
if (!approvedAmount.isZero()) {
|
|
65
|
+
const approveTx = yield setApproval(signer, token.address, approvalAddress, '0');
|
|
66
|
+
yield approveTx.wait();
|
|
67
|
+
}
|
|
68
|
+
});
|
package/dist/allowance/utils.js
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
2
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
3
|
return new (P || (P = Promise))(function (resolve, reject) {
|
|
@@ -8,125 +7,62 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
8
7
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
8
|
});
|
|
10
9
|
};
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
24
|
-
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
25
|
-
default:
|
|
26
|
-
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
27
|
-
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
28
|
-
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
29
|
-
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
30
|
-
if (t[2]) _.ops.pop();
|
|
31
|
-
_.trys.pop(); continue;
|
|
32
|
-
}
|
|
33
|
-
op = body.call(thisArg, _);
|
|
34
|
-
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
35
|
-
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
10
|
+
import BigNumber from 'bignumber.js';
|
|
11
|
+
import { Contract } from 'ethers';
|
|
12
|
+
import ChainsService from '../services/ChainsService';
|
|
13
|
+
import { ERC20_ABI } from '../types';
|
|
14
|
+
import { ServerError } from '../utils/errors';
|
|
15
|
+
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();
|
|
18
|
+
const erc20 = new Contract(tokenAddress, ERC20_ABI, signer);
|
|
19
|
+
try {
|
|
20
|
+
const approved = yield erc20.allowance(signerAddress, contractAddress);
|
|
21
|
+
return new BigNumber(approved.toString());
|
|
36
22
|
}
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
};
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
var bignumber_js_1 = __importDefault(require("bignumber.js"));
|
|
44
|
-
var ethers_1 = require("ethers");
|
|
45
|
-
var ChainsService_1 = __importDefault(require("../services/ChainsService"));
|
|
46
|
-
var types_1 = require("../types");
|
|
47
|
-
var errors_1 = require("../utils/errors");
|
|
48
|
-
var multicall_1 = require("../utils/multicall");
|
|
49
|
-
var getApproved = function (signer, tokenAddress, contractAddress) { return __awaiter(void 0, void 0, void 0, function () {
|
|
50
|
-
var signerAddress, erc20, approved, e_1;
|
|
51
|
-
return __generator(this, function (_a) {
|
|
52
|
-
switch (_a.label) {
|
|
53
|
-
case 0: return [4 /*yield*/, signer.getAddress()];
|
|
54
|
-
case 1:
|
|
55
|
-
signerAddress = _a.sent();
|
|
56
|
-
erc20 = new ethers_1.Contract(tokenAddress, types_1.ERC20_ABI, signer);
|
|
57
|
-
_a.label = 2;
|
|
58
|
-
case 2:
|
|
59
|
-
_a.trys.push([2, 4, , 5]);
|
|
60
|
-
return [4 /*yield*/, erc20.allowance(signerAddress, contractAddress)];
|
|
61
|
-
case 3:
|
|
62
|
-
approved = _a.sent();
|
|
63
|
-
return [2 /*return*/, new bignumber_js_1.default(approved.toString())];
|
|
64
|
-
case 4:
|
|
65
|
-
e_1 = _a.sent();
|
|
66
|
-
return [2 /*return*/, new bignumber_js_1.default(0)];
|
|
67
|
-
case 5: return [2 /*return*/];
|
|
68
|
-
}
|
|
69
|
-
});
|
|
70
|
-
}); };
|
|
71
|
-
exports.getApproved = getApproved;
|
|
72
|
-
var setApproval = function (signer, tokenAddress, contractAddress, amount) {
|
|
73
|
-
var erc20 = new ethers_1.Contract(tokenAddress, types_1.ERC20_ABI, signer);
|
|
23
|
+
catch (e) {
|
|
24
|
+
return new BigNumber(0);
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
export const setApproval = (signer, tokenAddress, contractAddress, amount) => {
|
|
28
|
+
const erc20 = new Contract(tokenAddress, ERC20_ABI, signer);
|
|
74
29
|
return erc20.approve(contractAddress, amount);
|
|
75
30
|
};
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
});
|
|
101
|
-
return [4 /*yield*/, (0, multicall_1.fetchDataUsingMulticall)(calls, types_1.ERC20_ABI, chainId, chain.multicallAddress)];
|
|
102
|
-
case 3:
|
|
103
|
-
result = _a.sent();
|
|
104
|
-
if (!result.length) {
|
|
105
|
-
throw new errors_1.ServerError("Couldn't load allowance from chainId ".concat(chainId, " using multicall."));
|
|
106
|
-
}
|
|
107
|
-
parsedResult = result.map(function (_a) {
|
|
108
|
-
var _b;
|
|
109
|
-
var data = _a.data;
|
|
110
|
-
return ({
|
|
111
|
-
approvalAmount: (_b = data) !== null && _b !== void 0 ? _b : new bignumber_js_1.default(0),
|
|
112
|
-
});
|
|
113
|
-
});
|
|
114
|
-
return [2 /*return*/, tokenData.map(function (_a, i) {
|
|
115
|
-
var token = _a.token, approvalAddress = _a.approvalAddress;
|
|
116
|
-
return ({
|
|
117
|
-
token: token,
|
|
118
|
-
approvalAddress: approvalAddress,
|
|
119
|
-
approvedAmount: parsedResult[i].approvalAmount,
|
|
120
|
-
});
|
|
121
|
-
})];
|
|
122
|
-
}
|
|
31
|
+
export const getAllowanceViaMulticall = (signer, chainId, tokenData) => __awaiter(void 0, void 0, void 0, function* () {
|
|
32
|
+
const chainsService = ChainsService.getInstance();
|
|
33
|
+
const chain = yield chainsService.getChainById(chainId);
|
|
34
|
+
if (!chain.multicallAddress) {
|
|
35
|
+
throw new ServerError(`No multicall address configured for chainId ${chainId}.`);
|
|
36
|
+
}
|
|
37
|
+
const ownerAddress = yield signer.getAddress();
|
|
38
|
+
const calls = [];
|
|
39
|
+
tokenData.map(({ token, approvalAddress }) => {
|
|
40
|
+
calls.push({
|
|
41
|
+
address: token.address,
|
|
42
|
+
name: 'allowance',
|
|
43
|
+
params: [ownerAddress, approvalAddress],
|
|
44
|
+
});
|
|
45
|
+
});
|
|
46
|
+
const result = yield fetchDataUsingMulticall(calls, ERC20_ABI, chainId, chain.multicallAddress);
|
|
47
|
+
if (!result.length) {
|
|
48
|
+
throw new ServerError(`Couldn't load allowance from chainId ${chainId} using multicall.`);
|
|
49
|
+
}
|
|
50
|
+
const parsedResult = result.map(({ data }) => {
|
|
51
|
+
var _a;
|
|
52
|
+
return ({
|
|
53
|
+
approvalAmount: (_a = data) !== null && _a !== void 0 ? _a : new BigNumber(0),
|
|
54
|
+
});
|
|
123
55
|
});
|
|
124
|
-
})
|
|
125
|
-
|
|
126
|
-
|
|
56
|
+
return tokenData.map(({ token, approvalAddress }, i) => ({
|
|
57
|
+
token,
|
|
58
|
+
approvalAddress,
|
|
59
|
+
approvedAmount: parsedResult[i].approvalAmount,
|
|
60
|
+
}));
|
|
61
|
+
});
|
|
62
|
+
export const groupByChain = (tokenDataList) => {
|
|
127
63
|
// group by chain
|
|
128
|
-
|
|
129
|
-
tokenDataList.forEach(
|
|
64
|
+
const tokenDataByChain = {};
|
|
65
|
+
tokenDataList.forEach((tokenData) => {
|
|
130
66
|
if (!tokenDataByChain[tokenData.token.chainId]) {
|
|
131
67
|
tokenDataByChain[tokenData.token.chainId] = [];
|
|
132
68
|
}
|
|
@@ -134,4 +70,3 @@ var groupByChain = function (tokenDataList) {
|
|
|
134
70
|
});
|
|
135
71
|
return tokenDataByChain;
|
|
136
72
|
};
|
|
137
|
-
exports.groupByChain = groupByChain;
|
package/dist/balances/index.js
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
2
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
3
|
return new (P || (P = Promise))(function (resolve, reject) {
|
|
@@ -8,97 +7,35 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
8
7
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
8
|
});
|
|
10
9
|
};
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
case 4: _.label++; return { value: op[1], done: false };
|
|
23
|
-
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
24
|
-
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
25
|
-
default:
|
|
26
|
-
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
27
|
-
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
28
|
-
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
29
|
-
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
30
|
-
if (t[2]) _.ops.pop();
|
|
31
|
-
_.trys.pop(); continue;
|
|
32
|
-
}
|
|
33
|
-
op = body.call(thisArg, _);
|
|
34
|
-
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
35
|
-
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
36
|
-
}
|
|
37
|
-
};
|
|
38
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
39
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
40
|
-
};
|
|
41
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
42
|
-
var utils_1 = __importDefault(require("./utils"));
|
|
43
|
-
var getTokenBalance = function (walletAddress, token) { return __awaiter(void 0, void 0, void 0, function () {
|
|
44
|
-
var tokenAmounts;
|
|
45
|
-
return __generator(this, function (_a) {
|
|
46
|
-
switch (_a.label) {
|
|
47
|
-
case 0: return [4 /*yield*/, getTokenBalances(walletAddress, [token])];
|
|
48
|
-
case 1:
|
|
49
|
-
tokenAmounts = _a.sent();
|
|
50
|
-
return [2 /*return*/, tokenAmounts.length ? tokenAmounts[0] : null];
|
|
51
|
-
}
|
|
52
|
-
});
|
|
53
|
-
}); };
|
|
54
|
-
var getTokenBalances = function (walletAddress, tokens) { return __awaiter(void 0, void 0, void 0, function () {
|
|
55
|
-
var tokensByChain, tokenAmountsByChain;
|
|
56
|
-
return __generator(this, function (_a) {
|
|
57
|
-
switch (_a.label) {
|
|
58
|
-
case 0:
|
|
59
|
-
tokensByChain = {};
|
|
60
|
-
tokens.forEach(function (token) {
|
|
61
|
-
if (!tokensByChain[token.chainId]) {
|
|
62
|
-
tokensByChain[token.chainId] = [];
|
|
63
|
-
}
|
|
64
|
-
tokensByChain[token.chainId].push(token);
|
|
65
|
-
});
|
|
66
|
-
return [4 /*yield*/, getTokenBalancesForChains(walletAddress, tokensByChain)];
|
|
67
|
-
case 1:
|
|
68
|
-
tokenAmountsByChain = _a.sent();
|
|
69
|
-
return [2 /*return*/, Object.values(tokenAmountsByChain).flat()];
|
|
70
|
-
}
|
|
71
|
-
});
|
|
72
|
-
}); };
|
|
73
|
-
var getTokenBalancesForChains = function (walletAddress, tokensByChain) { return __awaiter(void 0, void 0, void 0, function () {
|
|
74
|
-
var tokenAmountsByChain, promises;
|
|
75
|
-
return __generator(this, function (_a) {
|
|
76
|
-
switch (_a.label) {
|
|
77
|
-
case 0:
|
|
78
|
-
tokenAmountsByChain = {};
|
|
79
|
-
promises = Object.keys(tokensByChain).map(function (chainIdStr) { return __awaiter(void 0, void 0, void 0, function () {
|
|
80
|
-
var chainId, tokenAmounts;
|
|
81
|
-
return __generator(this, function (_a) {
|
|
82
|
-
switch (_a.label) {
|
|
83
|
-
case 0:
|
|
84
|
-
chainId = parseInt(chainIdStr);
|
|
85
|
-
return [4 /*yield*/, utils_1.default.getBalances(walletAddress, tokensByChain[chainId])];
|
|
86
|
-
case 1:
|
|
87
|
-
tokenAmounts = _a.sent();
|
|
88
|
-
tokenAmountsByChain[chainId] = tokenAmounts;
|
|
89
|
-
return [2 /*return*/];
|
|
90
|
-
}
|
|
91
|
-
});
|
|
92
|
-
}); });
|
|
93
|
-
return [4 /*yield*/, Promise.allSettled(promises)];
|
|
94
|
-
case 1:
|
|
95
|
-
_a.sent();
|
|
96
|
-
return [2 /*return*/, tokenAmountsByChain];
|
|
10
|
+
import utils from './utils';
|
|
11
|
+
const getTokenBalance = (walletAddress, token) => __awaiter(void 0, void 0, void 0, function* () {
|
|
12
|
+
const tokenAmounts = yield getTokenBalances(walletAddress, [token]);
|
|
13
|
+
return tokenAmounts.length ? tokenAmounts[0] : null;
|
|
14
|
+
});
|
|
15
|
+
const getTokenBalances = (walletAddress, tokens) => __awaiter(void 0, void 0, void 0, function* () {
|
|
16
|
+
// split by chain
|
|
17
|
+
const tokensByChain = {};
|
|
18
|
+
tokens.forEach((token) => {
|
|
19
|
+
if (!tokensByChain[token.chainId]) {
|
|
20
|
+
tokensByChain[token.chainId] = [];
|
|
97
21
|
}
|
|
22
|
+
tokensByChain[token.chainId].push(token);
|
|
98
23
|
});
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
24
|
+
const tokenAmountsByChain = yield getTokenBalancesForChains(walletAddress, tokensByChain);
|
|
25
|
+
return Object.values(tokenAmountsByChain).flat();
|
|
26
|
+
});
|
|
27
|
+
const getTokenBalancesForChains = (walletAddress, tokensByChain) => __awaiter(void 0, void 0, void 0, function* () {
|
|
28
|
+
const tokenAmountsByChain = {};
|
|
29
|
+
const promises = Object.keys(tokensByChain).map((chainIdStr) => __awaiter(void 0, void 0, void 0, function* () {
|
|
30
|
+
const chainId = parseInt(chainIdStr);
|
|
31
|
+
const tokenAmounts = yield utils.getBalances(walletAddress, tokensByChain[chainId]);
|
|
32
|
+
tokenAmountsByChain[chainId] = tokenAmounts;
|
|
33
|
+
}));
|
|
34
|
+
yield Promise.allSettled(promises);
|
|
35
|
+
return tokenAmountsByChain;
|
|
36
|
+
});
|
|
37
|
+
export default {
|
|
38
|
+
getTokenBalance,
|
|
39
|
+
getTokenBalances,
|
|
40
|
+
getTokenBalancesForChains,
|
|
104
41
|
};
|