@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.
@@ -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
- var __generator = (this && this.__generator) || function (thisArg, body) {
12
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
- function verb(n) { return function (v) { return step([n, v]); }; }
15
- function step(op) {
16
- if (f) throw new TypeError("Generator is already executing.");
17
- while (_) try {
18
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
- if (y = 0, t) op = [op[0] & 2, t.value];
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
- var __importDefault = (this && this.__importDefault) || function (mod) {
39
- return (mod && mod.__esModule) ? mod : { "default": mod };
40
- };
41
- Object.defineProperty(exports, "__esModule", { value: true });
42
- exports.revokeTokenApproval = exports.approveToken = exports.bulkGetTokenApproval = exports.getTokenApproval = void 0;
43
- var bignumber_js_1 = __importDefault(require("bignumber.js"));
44
- var ethers_1 = require("ethers");
45
- var helpers_1 = require("../helpers");
46
- var utils_1 = require("../utils/utils");
47
- var utils_2 = require("./utils");
48
- var getTokenApproval = function (signer, token, approvalAddress) { return __awaiter(void 0, void 0, void 0, function () {
49
- var approved;
50
- return __generator(this, function (_a) {
51
- switch (_a.label) {
52
- case 0:
53
- // native token don't need approval
54
- if ((0, utils_1.isNativeTokenAddress)(token.address)) {
55
- return [2 /*return*/];
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
- exports.bulkGetTokenApproval = bulkGetTokenApproval;
102
- var approveToken = function (_a) {
103
- var signer = _a.signer, token = _a.token, approvalAddress = _a.approvalAddress, amount = _a.amount, _b = _a.infiniteApproval, infiniteApproval = _b === void 0 ? false : _b;
104
- return __awaiter(void 0, void 0, void 0, function () {
105
- var approvedAmount, approvalAmount, approveTx;
106
- return __generator(this, function (_c) {
107
- switch (_c.label) {
108
- case 0:
109
- // native token don't need approval
110
- if ((0, utils_1.isNativeTokenAddress)(token.address)) {
111
- return [2 /*return*/];
112
- }
113
- return [4 /*yield*/, (0, utils_2.getApproved)(signer, token.address, approvalAddress)];
114
- case 1:
115
- approvedAmount = _c.sent();
116
- if (!new bignumber_js_1.default(amount).gt(approvedAmount)) return [3 /*break*/, 4];
117
- approvalAmount = infiniteApproval
118
- ? ethers_1.constants.MaxUint256.toString()
119
- : amount;
120
- return [4 /*yield*/, (0, utils_2.setApproval)(signer, token.address, approvalAddress, approvalAmount)];
121
- case 2:
122
- approveTx = _c.sent();
123
- return [4 /*yield*/, approveTx.wait()];
124
- case 3:
125
- _c.sent();
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
+ });
@@ -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
- var __generator = (this && this.__generator) || function (thisArg, body) {
12
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
- function verb(n) { return function (v) { return step([n, v]); }; }
15
- function step(op) {
16
- if (f) throw new TypeError("Generator is already executing.");
17
- while (_) try {
18
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
- if (y = 0, t) op = [op[0] & 2, t.value];
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 { 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
- var __importDefault = (this && this.__importDefault) || function (mod) {
39
- return (mod && mod.__esModule) ? mod : { "default": mod };
40
- };
41
- Object.defineProperty(exports, "__esModule", { value: true });
42
- exports.groupByChain = exports.getAllowanceViaMulticall = exports.setApproval = exports.getApproved = void 0;
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
- exports.setApproval = setApproval;
77
- var getAllowanceViaMulticall = function (signer, chainId, tokenData) { return __awaiter(void 0, void 0, void 0, function () {
78
- var chainsService, chain, ownerAddress, calls, result, parsedResult;
79
- return __generator(this, function (_a) {
80
- switch (_a.label) {
81
- case 0:
82
- chainsService = ChainsService_1.default.getInstance();
83
- return [4 /*yield*/, chainsService.getChainById(chainId)];
84
- case 1:
85
- chain = _a.sent();
86
- if (!chain.multicallAddress) {
87
- throw new errors_1.ServerError("No multicall address configured for chainId ".concat(chainId, "."));
88
- }
89
- return [4 /*yield*/, signer.getAddress()];
90
- case 2:
91
- ownerAddress = _a.sent();
92
- calls = [];
93
- tokenData.map(function (_a) {
94
- var token = _a.token, approvalAddress = _a.approvalAddress;
95
- calls.push({
96
- address: token.address,
97
- name: 'allowance',
98
- params: [ownerAddress, approvalAddress],
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
- exports.getAllowanceViaMulticall = getAllowanceViaMulticall;
126
- var groupByChain = function (tokenDataList) {
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
- var tokenDataByChain = {};
129
- tokenDataList.forEach(function (tokenData) {
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;
@@ -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
- var __generator = (this && this.__generator) || function (thisArg, body) {
12
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
- function verb(n) { return function (v) { return step([n, v]); }; }
15
- function step(op) {
16
- if (f) throw new TypeError("Generator is already executing.");
17
- while (_) try {
18
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
- if (y = 0, t) op = [op[0] & 2, t.value];
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 };
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
- exports.default = {
101
- getTokenBalance: getTokenBalance,
102
- getTokenBalances: getTokenBalances,
103
- getTokenBalancesForChains: getTokenBalancesForChains,
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
  };