@curvefi/llamalend-api 1.0.3 → 1.0.6

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,14 +1,3 @@
1
- var __assign = (this && this.__assign) || function () {
2
- __assign = Object.assign || function(t) {
3
- for (var s, i = 1, n = arguments.length; i < n; i++) {
4
- s = arguments[i];
5
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
6
- t[p] = s[p];
7
- }
8
- return t;
9
- };
10
- return __assign.apply(this, arguments);
11
- };
12
1
  var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
13
2
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
14
3
  return new (P || (P = Promise))(function (resolve, reject) {
@@ -18,419 +7,169 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
18
7
  step((generator = generator.apply(thisArg, _arguments || [])).next());
19
8
  });
20
9
  };
21
- var __generator = (this && this.__generator) || function (thisArg, body) {
22
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
23
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
24
- function verb(n) { return function (v) { return step([n, v]); }; }
25
- function step(op) {
26
- if (f) throw new TypeError("Generator is already executing.");
27
- while (g && (g = 0, op[0] && (_ = 0)), _) try {
28
- 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;
29
- if (y = 0, t) op = [op[0] & 2, t.value];
30
- switch (op[0]) {
31
- case 0: case 1: t = op; break;
32
- case 4: _.label++; return { value: op[1], done: false };
33
- case 5: _.label++; y = op[1]; op = [0]; continue;
34
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
35
- default:
36
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
37
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
38
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
39
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
40
- if (t[2]) _.ops.pop();
41
- _.trys.pop(); continue;
42
- }
43
- op = body.call(thisArg, _);
44
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
45
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
46
- }
47
- };
48
- import axios from "axios";
49
10
  import { ethers } from "ethers";
50
11
  import memoize from "memoizee";
51
- import BigNumber from 'bignumber.js';
52
12
  import { llamalend } from "./llamalend.js";
53
- var _getPoolsFromApi = memoize(function (network, poolFactory) { return __awaiter(void 0, void 0, void 0, function () {
54
- var url, response;
55
- var _a;
56
- return __generator(this, function (_b) {
57
- switch (_b.label) {
58
- case 0:
59
- url = "https://api.curve.fi/api/getPools/".concat(network, "/").concat(poolFactory);
60
- return [4 /*yield*/, axios.get(url, { validateStatus: function () { return true; } })];
61
- case 1:
62
- response = _b.sent();
63
- return [2 /*return*/, (_a = response.data.data) !== null && _a !== void 0 ? _a : { poolData: [], tvl: 0, tvlAll: 0 }];
64
- }
65
- });
66
- }); }, {
13
+ const _getPoolsFromApi = memoize((network, poolFactory) => __awaiter(void 0, void 0, void 0, function* () {
14
+ const response = yield fetch(`https://api.curve.fi/api/getPools/${network}/${poolFactory}`);
15
+ const { data } = yield response.json();
16
+ return data !== null && data !== void 0 ? data : { poolData: [], tvl: 0, tvlAll: 0 };
17
+ }), {
67
18
  promise: true,
68
19
  maxAge: 5 * 60 * 1000, // 5m
69
20
  });
70
- var _getAllPoolsFromApi = function (network) { return __awaiter(void 0, void 0, void 0, function () {
71
- return __generator(this, function (_a) {
72
- switch (_a.label) {
73
- case 0: return [4 /*yield*/, Promise.all([
74
- _getPoolsFromApi(network, "main"),
75
- _getPoolsFromApi(network, "crypto"),
76
- _getPoolsFromApi(network, "factory"),
77
- _getPoolsFromApi(network, "factory-crvusd"),
78
- _getPoolsFromApi(network, "factory-crypto"),
79
- _getPoolsFromApi(network, "factory-twocrypto"),
80
- _getPoolsFromApi(network, "factory-tricrypto"),
81
- _getPoolsFromApi(network, "factory-stable-ng"),
82
- ])];
83
- case 1: return [2 /*return*/, _a.sent()];
84
- }
85
- });
86
- }); };
87
- export var _getUsdPricesFromApi = function () { return __awaiter(void 0, void 0, void 0, function () {
88
- var network, allTypesExtendedPoolData, priceDict, priceDictByMaxTvl, _i, allTypesExtendedPoolData_1, extendedPoolData, _a, _b, pool, lpTokenAddress, totalSupply, _c, _d, coin, _e, _f, coin, address, maxTvlItem;
89
- var _g, _h;
90
- return __generator(this, function (_j) {
91
- switch (_j.label) {
92
- case 0:
93
- network = llamalend.constants.NETWORK_NAME;
94
- return [4 /*yield*/, _getAllPoolsFromApi(network)];
95
- case 1:
96
- allTypesExtendedPoolData = _j.sent();
97
- priceDict = {};
98
- priceDictByMaxTvl = {};
99
- for (_i = 0, allTypesExtendedPoolData_1 = allTypesExtendedPoolData; _i < allTypesExtendedPoolData_1.length; _i++) {
100
- extendedPoolData = allTypesExtendedPoolData_1[_i];
101
- for (_a = 0, _b = extendedPoolData.poolData; _a < _b.length; _a++) {
102
- pool = _b[_a];
103
- lpTokenAddress = (_g = pool.lpTokenAddress) !== null && _g !== void 0 ? _g : pool.address;
104
- totalSupply = pool.totalSupply / (Math.pow(10, 18));
105
- if (lpTokenAddress.toLowerCase() in priceDict) {
106
- priceDict[lpTokenAddress.toLowerCase()].push({
107
- price: pool.usdTotal && totalSupply ? pool.usdTotal / totalSupply : 0,
108
- tvl: pool.usdTotal,
109
- });
110
- }
111
- else {
112
- priceDict[lpTokenAddress.toLowerCase()] = [];
113
- priceDict[lpTokenAddress.toLowerCase()].push({
114
- price: pool.usdTotal && totalSupply ? pool.usdTotal / totalSupply : 0,
115
- tvl: pool.usdTotal,
116
- });
117
- }
118
- for (_c = 0, _d = pool.coins; _c < _d.length; _c++) {
119
- coin = _d[_c];
120
- if (typeof coin.usdPrice === "number") {
121
- if (coin.address.toLowerCase() in priceDict) {
122
- priceDict[coin.address.toLowerCase()].push({
123
- price: coin.usdPrice,
124
- tvl: pool.usdTotal,
125
- });
126
- }
127
- else {
128
- priceDict[coin.address.toLowerCase()] = [];
129
- priceDict[coin.address.toLowerCase()].push({
130
- price: coin.usdPrice,
131
- tvl: pool.usdTotal,
132
- });
133
- }
134
- }
135
- }
136
- for (_e = 0, _f = (_h = pool.gaugeRewards) !== null && _h !== void 0 ? _h : []; _e < _f.length; _e++) {
137
- coin = _f[_e];
138
- if (typeof coin.tokenPrice === "number") {
139
- if (coin.tokenAddress.toLowerCase() in priceDict) {
140
- priceDict[coin.tokenAddress.toLowerCase()].push({
141
- price: coin.tokenPrice,
142
- tvl: pool.usdTotal,
143
- });
144
- }
145
- else {
146
- priceDict[coin.tokenAddress.toLowerCase()] = [];
147
- priceDict[coin.tokenAddress.toLowerCase()].push({
148
- price: coin.tokenPrice,
149
- tvl: pool.usdTotal,
150
- });
151
- }
152
- }
153
- }
21
+ const _getAllPoolsFromApi = (network) => __awaiter(void 0, void 0, void 0, function* () {
22
+ return yield Promise.all([
23
+ _getPoolsFromApi(network, "main"),
24
+ _getPoolsFromApi(network, "crypto"),
25
+ _getPoolsFromApi(network, "factory"),
26
+ _getPoolsFromApi(network, "factory-crvusd"),
27
+ _getPoolsFromApi(network, "factory-crypto"),
28
+ _getPoolsFromApi(network, "factory-twocrypto"),
29
+ _getPoolsFromApi(network, "factory-tricrypto"),
30
+ _getPoolsFromApi(network, "factory-stable-ng"),
31
+ ]);
32
+ });
33
+ export const _getUsdPricesFromApi = () => __awaiter(void 0, void 0, void 0, function* () {
34
+ var _a, _b;
35
+ const network = llamalend.constants.NETWORK_NAME;
36
+ const allTypesExtendedPoolData = yield _getAllPoolsFromApi(network);
37
+ const priceDict = {};
38
+ const priceDictByMaxTvl = {};
39
+ for (const extendedPoolData of allTypesExtendedPoolData) {
40
+ for (const pool of extendedPoolData.poolData) {
41
+ const lpTokenAddress = (_a = pool.lpTokenAddress) !== null && _a !== void 0 ? _a : pool.address;
42
+ const totalSupply = pool.totalSupply / (Math.pow(10, 18));
43
+ if (lpTokenAddress.toLowerCase() in priceDict) {
44
+ priceDict[lpTokenAddress.toLowerCase()].push({
45
+ price: pool.usdTotal && totalSupply ? pool.usdTotal / totalSupply : 0,
46
+ tvl: pool.usdTotal,
47
+ });
48
+ }
49
+ else {
50
+ priceDict[lpTokenAddress.toLowerCase()] = [];
51
+ priceDict[lpTokenAddress.toLowerCase()].push({
52
+ price: pool.usdTotal && totalSupply ? pool.usdTotal / totalSupply : 0,
53
+ tvl: pool.usdTotal,
54
+ });
55
+ }
56
+ for (const coin of pool.coins) {
57
+ if (typeof coin.usdPrice === "number") {
58
+ if (coin.address.toLowerCase() in priceDict) {
59
+ priceDict[coin.address.toLowerCase()].push({
60
+ price: coin.usdPrice,
61
+ tvl: pool.usdTotal,
62
+ });
63
+ }
64
+ else {
65
+ priceDict[coin.address.toLowerCase()] = [];
66
+ priceDict[coin.address.toLowerCase()].push({
67
+ price: coin.usdPrice,
68
+ tvl: pool.usdTotal,
69
+ });
154
70
  }
155
71
  }
156
- for (address in priceDict) {
157
- if (priceDict[address].length > 0) {
158
- maxTvlItem = priceDict[address].reduce(function (prev, current) {
159
- if (+current.tvl > +prev.tvl) {
160
- return current;
161
- }
162
- else {
163
- return prev;
164
- }
72
+ }
73
+ for (const coin of (_b = pool.gaugeRewards) !== null && _b !== void 0 ? _b : []) {
74
+ if (typeof coin.tokenPrice === "number") {
75
+ if (coin.tokenAddress.toLowerCase() in priceDict) {
76
+ priceDict[coin.tokenAddress.toLowerCase()].push({
77
+ price: coin.tokenPrice,
78
+ tvl: pool.usdTotal,
165
79
  });
166
- priceDictByMaxTvl[address] = maxTvlItem.price;
167
80
  }
168
81
  else {
169
- priceDictByMaxTvl[address] = 0;
82
+ priceDict[coin.tokenAddress.toLowerCase()] = [];
83
+ priceDict[coin.tokenAddress.toLowerCase()].push({
84
+ price: coin.tokenPrice,
85
+ tvl: pool.usdTotal,
86
+ });
170
87
  }
171
88
  }
172
- return [2 /*return*/, priceDictByMaxTvl];
89
+ }
173
90
  }
174
- });
175
- }); };
176
- export var _getUserCollateral = memoize(function (network, controller, user) { return __awaiter(void 0, void 0, void 0, function () {
177
- var url, response;
178
- return __generator(this, function (_a) {
179
- switch (_a.label) {
180
- case 0:
181
- url = "https://prices.curve.fi/v1/lending/collateral_events/".concat(network, "/").concat(controller, "/").concat(user);
182
- return [4 /*yield*/, axios.get(url, { validateStatus: function () { return true; } })];
183
- case 1:
184
- response = _a.sent();
185
- return [2 /*return*/, {
186
- total_deposit_precise: response.data.total_deposit_precise,
187
- total_deposit_from_user: response.data.total_deposit_from_user,
188
- total_deposit_usd_value: response.data.total_deposit_usd_value,
189
- }];
91
+ }
92
+ for (const address in priceDict) {
93
+ if (priceDict[address].length > 0) {
94
+ const maxTvlItem = priceDict[address].reduce((prev, current) => {
95
+ if (+current.tvl > +prev.tvl) {
96
+ return current;
97
+ }
98
+ else {
99
+ return prev;
100
+ }
101
+ });
102
+ priceDictByMaxTvl[address] = maxTvlItem.price;
190
103
  }
191
- });
192
- }); }, {
104
+ else {
105
+ priceDictByMaxTvl[address] = 0;
106
+ }
107
+ }
108
+ return priceDictByMaxTvl;
109
+ });
110
+ export const _getUserCollateral = memoize((network, controller, user) => __awaiter(void 0, void 0, void 0, function* () {
111
+ const url = `https://prices.curve.fi/v1/lending/collateral_events/${network}/${controller}/${user}`;
112
+ const response = yield fetch(url);
113
+ const data = yield response.json();
114
+ return {
115
+ total_deposit_precise: data.total_deposit_precise,
116
+ total_deposit_from_user: data.total_deposit_from_user,
117
+ total_deposit_usd_value: data.total_deposit_usd_value,
118
+ };
119
+ }), {
193
120
  promise: true,
194
121
  maxAge: 60 * 1000, // 1m
195
122
  });
196
- export var _getUserCollateralCrvUsd = memoize(function (network, controller, user) { return __awaiter(void 0, void 0, void 0, function () {
197
- var url, response;
198
- return __generator(this, function (_a) {
199
- switch (_a.label) {
200
- case 0:
201
- url = "https://prices.curve.fi/v1/crvusd/collateral_events/".concat(network, "/").concat(controller, "/").concat(user);
202
- return [4 /*yield*/, axios.get(url, { validateStatus: function () { return true; } })];
203
- case 1:
204
- response = _a.sent();
205
- return [2 /*return*/, response.data.total_deposit];
206
- }
207
- });
208
- }); }, {
123
+ export const _getUserCollateralCrvUsd = memoize((network, controller, user) => __awaiter(void 0, void 0, void 0, function* () {
124
+ const url = `https://prices.curve.fi/v1/crvusd/collateral_events/${network}/${controller}/${user}`;
125
+ const response = yield fetch(url);
126
+ const { total_deposit } = yield response.json();
127
+ return total_deposit;
128
+ }), {
209
129
  promise: true,
210
130
  maxAge: 60 * 1000, // 1m
211
131
  });
212
- export var _getMarketsData = memoize(function (network) { return __awaiter(void 0, void 0, void 0, function () {
213
- var url, response;
214
- return __generator(this, function (_a) {
215
- switch (_a.label) {
216
- case 0:
217
- url = "https://api.curve.fi/api/getLendingVaults/".concat(network, "/oneway");
218
- return [4 /*yield*/, axios.get(url, {
219
- headers: { "accept": "application/json" },
220
- validateStatus: function () { return true; },
221
- })];
222
- case 1:
223
- response = _a.sent();
224
- if (response.status !== 200) {
225
- throw Error("Fetch error: ".concat(response.status, " ").concat(response.statusText));
226
- }
227
- return [2 /*return*/, response.data.data];
228
- }
229
- });
230
- }); }, {
132
+ export const _getMarketsData = memoize((network) => __awaiter(void 0, void 0, void 0, function* () {
133
+ const url = `https://api.curve.fi/api/getLendingVaults/${network}/oneway`;
134
+ const response = yield fetch(url, { headers: { "accept": "application/json" } });
135
+ if (response.status !== 200) {
136
+ throw Error(`Fetch error: ${response.status} ${response.statusText}`);
137
+ }
138
+ return yield response.json();
139
+ }), {
231
140
  promise: true,
232
141
  maxAge: 10 * 1000, // 10s
233
142
  });
234
143
  // --- ODOS ---
235
- export var _getQuoteOdos = function (fromToken, toToken, _amount, blacklist, pathVizImage, slippage) {
236
- if (slippage === void 0) { slippage = 0.5; }
237
- return __awaiter(void 0, void 0, void 0, function () {
238
- var url, response;
239
- return __generator(this, function (_a) {
240
- switch (_a.label) {
241
- case 0:
242
- if (_amount === BigInt(0))
243
- return [2 /*return*/, { outAmounts: ["0.0"], pathId: '', pathVizImage: '', priceImpact: 0, slippage: slippage }];
244
- if (ethers.getAddress(fromToken) == "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE")
245
- fromToken = "0x0000000000000000000000000000000000000000";
246
- if (ethers.getAddress(toToken) == "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE")
247
- toToken = "0x0000000000000000000000000000000000000000";
248
- url = "https://prices.curve.fi/odos/quote?chain_id=".concat(llamalend.chainId, "&from_address=").concat(ethers.getAddress(fromToken)) +
249
- "&to_address=".concat(ethers.getAddress(toToken), "&amount=").concat(_amount.toString(), "&slippage=").concat(slippage, "&pathVizImage=").concat(pathVizImage) +
250
- "&caller_address=".concat(ethers.getAddress(llamalend.constants.ALIASES.leverage_zap), "&blacklist=").concat(ethers.getAddress(blacklist));
251
- return [4 /*yield*/, axios.get(url, {
252
- headers: { "accept": "application/json" },
253
- validateStatus: function () { return true; },
254
- })];
255
- case 1:
256
- response = _a.sent();
257
- if (response.status !== 200) {
258
- throw Error("Odos quote error - ".concat(response.status, " ").concat(response.statusText));
259
- }
260
- return [2 /*return*/, __assign(__assign({}, response.data), { slippage: slippage })];
261
- }
262
- });
263
- });
264
- };
265
- export var _getExpectedOdos = function (fromToken, toToken, _amount, blacklist) { return __awaiter(void 0, void 0, void 0, function () {
266
- return __generator(this, function (_a) {
267
- switch (_a.label) {
268
- case 0: return [4 /*yield*/, _getQuoteOdos(fromToken, toToken, _amount, blacklist, false)];
269
- case 1: return [2 /*return*/, (_a.sent()).outAmounts[0]];
270
- }
271
- });
272
- }); };
273
- export var _assembleTxOdos = memoize(function (pathId) { return __awaiter(void 0, void 0, void 0, function () {
274
- var url, response;
275
- return __generator(this, function (_a) {
276
- switch (_a.label) {
277
- case 0:
278
- url = "https://prices.curve.fi/odos/assemble?user=".concat(ethers.getAddress(llamalend.constants.ALIASES.leverage_zap), "&path_id=").concat(pathId);
279
- return [4 /*yield*/, axios.get(url, {
280
- headers: { 'Content-Type': 'application/json' },
281
- validateStatus: function () { return true; },
282
- })];
283
- case 1:
284
- response = _a.sent();
285
- if (response.status !== 200) {
286
- throw Error("Odos assemble error - ".concat(response.status, " ").concat(response.statusText));
287
- }
288
- return [2 /*return*/, response.data['transaction']['data']];
289
- }
290
- });
291
- }); }, {
292
- promise: true,
293
- maxAge: 10 * 1000, // 10s
294
- });
295
- export var _getSpotPriceOdos = memoize(function (fromToken, toToken) { return __awaiter(void 0, void 0, void 0, function () {
296
- var url, response, pricesFromOdos, pricesFromApi, _i, _a, coin, _pricesFromApi, prices;
297
- return __generator(this, function (_b) {
298
- switch (_b.label) {
299
- case 0:
300
- fromToken = ethers.getAddress(fromToken);
301
- toToken = ethers.getAddress(toToken);
302
- url = "https://prices.curve.fi/odos/prices?chain_id=".concat(llamalend.chainId, "&tokens=").concat(fromToken, ",").concat(toToken);
303
- return [4 /*yield*/, axios.get(url, {
304
- headers: { "accept": "application/json" },
305
- validateStatus: function () { return true; },
306
- })];
307
- case 1:
308
- response = _b.sent();
309
- if (response.status !== 200) {
310
- throw Error("Odos spot prices error - ".concat(response.status, " ").concat(response.statusText));
311
- }
312
- pricesFromOdos = response.data.tokenPrices;
313
- pricesFromApi = {};
314
- _i = 0, _a = [fromToken, toToken];
315
- _b.label = 2;
316
- case 2:
317
- if (!(_i < _a.length)) return [3 /*break*/, 5];
318
- coin = _a[_i];
319
- if (pricesFromOdos[coin] !== 0)
320
- return [3 /*break*/, 4];
321
- return [4 /*yield*/, _getUsdPricesFromApi()];
322
- case 3:
323
- _pricesFromApi = _b.sent();
324
- pricesFromApi[coin] = String(_pricesFromApi[coin] || 0);
325
- _b.label = 4;
326
- case 4:
327
- _i++;
328
- return [3 /*break*/, 2];
329
- case 5:
330
- prices = __assign(__assign({}, pricesFromOdos), pricesFromApi);
331
- if (BigNumber(prices[fromToken]).eq(0) || BigNumber(prices[toToken]).eq(0))
332
- return [2 /*return*/, undefined];
333
- return [2 /*return*/, (new BigNumber(prices[toToken])).div(prices[fromToken]).toString()];
334
- }
335
- });
336
- }); }, {
337
- promise: true,
338
- maxAge: 10 * 1000, // 10s
144
+ export const _getQuoteOdos = (fromToken_1, toToken_1, _amount_1, blacklist_1, pathVizImage_1, ...args_1) => __awaiter(void 0, [fromToken_1, toToken_1, _amount_1, blacklist_1, pathVizImage_1, ...args_1], void 0, function* (fromToken, toToken, _amount, blacklist, pathVizImage, slippage = 0.5) {
145
+ if (_amount === BigInt(0))
146
+ return { outAmounts: ["0.0"], pathId: '', pathVizImage: '', priceImpact: 0, slippage };
147
+ if (ethers.getAddress(fromToken) == "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE")
148
+ fromToken = "0x0000000000000000000000000000000000000000";
149
+ if (ethers.getAddress(toToken) == "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE")
150
+ toToken = "0x0000000000000000000000000000000000000000";
151
+ const url = `https://prices.curve.fi/odos/quote?chain_id=${llamalend.chainId}&from_address=${ethers.getAddress(fromToken)}` +
152
+ `&to_address=${ethers.getAddress(toToken)}&amount=${_amount.toString()}&slippage=${slippage}&pathVizImage=${pathVizImage}` +
153
+ `&caller_address=${ethers.getAddress(llamalend.constants.ALIASES.leverage_zap)}&blacklist=${ethers.getAddress(blacklist)}`;
154
+ const response = yield fetch(url, { headers: { "accept": "application/json" } });
155
+ if (response.status !== 200) {
156
+ throw Error(`Odos quote error - ${response.status} ${response.statusText}`);
157
+ }
158
+ const data = yield response.json();
159
+ return Object.assign(Object.assign({}, data), { slippage });
339
160
  });
340
- // --- 1INCH ---
341
- export var _getExpected1inch = memoize(function (fromToken, toToken, _amount) { return __awaiter(void 0, void 0, void 0, function () {
342
- var url, response;
343
- return __generator(this, function (_a) {
344
- switch (_a.label) {
345
- case 0:
346
- if (_amount === BigInt(0))
347
- return [2 /*return*/, "0.0"];
348
- url = "https://prices.curve.fi/1inch/swap/v6.0/".concat(llamalend.chainId, "/quote?src=").concat(fromToken, "&dst=").concat(toToken, "&amount=").concat(_amount, "&excludedProtocols=").concat(llamalend.constants.EXCLUDED_PROTOCOLS_1INCH, "&includeTokensInfo=true&includeProtocols=true");
349
- return [4 /*yield*/, axios.get(url, {
350
- headers: { "accept": "application/json" },
351
- validateStatus: function () { return true; },
352
- })];
353
- case 1:
354
- response = _a.sent();
355
- if (response.status !== 200) {
356
- throw Error("1inch error: ".concat(response.status, " ").concat(response.statusText));
357
- }
358
- return [2 /*return*/, response.data.dstAmount];
359
- }
360
- });
361
- }); }, {
362
- promise: true,
363
- maxAge: 10 * 1000, // 10s
161
+ export const _getExpectedOdos = (fromToken, toToken, _amount, blacklist) => __awaiter(void 0, void 0, void 0, function* () {
162
+ return (yield _getQuoteOdos(fromToken, toToken, _amount, blacklist, false)).outAmounts[0];
364
163
  });
365
- export var _getSwapData1inch = memoize(function (fromToken, toToken, _amount, slippage) { return __awaiter(void 0, void 0, void 0, function () {
366
- var url, response;
367
- return __generator(this, function (_a) {
368
- switch (_a.label) {
369
- case 0:
370
- if (_amount === BigInt(0))
371
- throw Error("Amount must be > 0");
372
- url = "https://prices.curve.fi/1inch/swap/v6.0/".concat(llamalend.chainId, "/swap?src=").concat(fromToken, "&dst=").concat(toToken, "&amount=").concat(_amount, "&from_=").concat(llamalend.constants.ALIASES.leverage_zap, "&slippage=").concat(slippage, "&excludedProtocols=").concat(llamalend.constants.EXCLUDED_PROTOCOLS_1INCH, "&includeTokensInfo=true&includeProtocols=true&disableEstimate=true");
373
- return [4 /*yield*/, axios.get(url, {
374
- headers: { "accept": "application/json" },
375
- validateStatus: function () { return true; },
376
- })];
377
- case 1:
378
- response = _a.sent();
379
- if (response.status !== 200) {
380
- throw Error("1inch error: ".concat(response.status, " ").concat(response.statusText));
381
- }
382
- return [2 /*return*/, response.data];
383
- }
384
- });
385
- }); }, {
386
- promise: true,
387
- maxAge: 10 * 1000, // 10s
388
- });
389
- export var _getSpotPrice1inch = memoize(function (fromToken, toToken) { return __awaiter(void 0, void 0, void 0, function () {
390
- var url, response, pricesFromApi, _a, _b, _c, _i, coin, _pricesFromApi, prices;
391
- return __generator(this, function (_d) {
392
- switch (_d.label) {
393
- case 0:
394
- url = "https://prices.curve.fi/1inch/price/v1.1/".concat(llamalend.chainId, "?tokens=").concat(fromToken, ",").concat(toToken, "&currency=USD");
395
- return [4 /*yield*/, axios.get(url, {
396
- headers: { "accept": "application/json" },
397
- validateStatus: function () { return true; },
398
- })];
399
- case 1:
400
- response = _d.sent();
401
- if (response.status !== 200) {
402
- throw Error("1inch error: ".concat(response.status, " ").concat(response.statusText));
403
- }
404
- pricesFromApi = {};
405
- _a = response.data;
406
- _b = [];
407
- for (_c in _a)
408
- _b.push(_c);
409
- _i = 0;
410
- _d.label = 2;
411
- case 2:
412
- if (!(_i < _b.length)) return [3 /*break*/, 5];
413
- _c = _b[_i];
414
- if (!(_c in _a)) return [3 /*break*/, 4];
415
- coin = _c;
416
- if (response.data[coin] !== "0")
417
- return [3 /*break*/, 4];
418
- return [4 /*yield*/, _getUsdPricesFromApi()];
419
- case 3:
420
- _pricesFromApi = _d.sent();
421
- pricesFromApi[coin] = String(_pricesFromApi[coin] || 0);
422
- _d.label = 4;
423
- case 4:
424
- _i++;
425
- return [3 /*break*/, 2];
426
- case 5:
427
- prices = __assign(__assign({}, response.data), pricesFromApi);
428
- if (prices[fromToken] === '0' || prices[toToken] === '0')
429
- return [2 /*return*/, undefined];
430
- return [2 /*return*/, (new BigNumber(prices[toToken])).div(prices[fromToken]).toString()];
431
- }
432
- });
433
- }); }, {
164
+ export const _assembleTxOdos = memoize((pathId) => __awaiter(void 0, void 0, void 0, function* () {
165
+ const url = `https://prices.curve.fi/odos/assemble?user=${ethers.getAddress(llamalend.constants.ALIASES.leverage_zap)}&path_id=${pathId}`;
166
+ const response = yield fetch(url, { headers: { 'Content-Type': 'application/json' } });
167
+ if (response.status !== 200) {
168
+ throw Error(`Odos assemble error - ${response.status} ${response.statusText}`);
169
+ }
170
+ const { transaction } = yield response.json();
171
+ return transaction.data;
172
+ }), {
434
173
  promise: true,
435
174
  maxAge: 10 * 1000, // 10s
436
175
  });
package/lib/index.d.ts CHANGED
@@ -1,4 +1,3 @@
1
- /// <reference types="memoizee" />
2
1
  import { ethers, Networkish } from "ethers";
3
2
  import { LendMarketTemplate } from "./lendMarkets/index.js";
4
3
  import { MintMarketTemplate } from "./mintMarkets/index.js";
@@ -35,11 +34,11 @@ declare const llamalend: {
35
34
  minted: string;
36
35
  pegKeepersDebt: string;
37
36
  }>;
38
- getLsdApy: ((name: "sfrxETH" | "wstETH") => Promise<{
37
+ getLsdApy: ((name: "wstETH" | "sfrxETH") => Promise<{
39
38
  apy: number;
40
39
  baseApy: number;
41
40
  apyMean30d: number;
42
- }>) & import("memoizee").Memoized<(name: "sfrxETH" | "wstETH") => Promise<{
41
+ }>) & import("memoizee").Memoized<(name: "wstETH" | "sfrxETH") => Promise<{
43
42
  apy: number;
44
43
  baseApy: number;
45
44
  apyMean30d: number;
@@ -47,8 +46,8 @@ declare const llamalend: {
47
46
  setCustomFeeData: typeof setCustomFeeData;
48
47
  getBalances: (coins: string[], address?: string) => Promise<string[]>;
49
48
  getAllowance: (coins: string[], address: string, spender: string) => Promise<string[]>;
50
- hasAllowance: (coins: string[], amounts: (string | number)[], address: string, spender: string) => Promise<boolean>;
51
- ensureAllowance: (coins: string[], amounts: (string | number)[], spender: string, isMax?: boolean) => Promise<string[]>;
49
+ hasAllowance: (coins: string[], amounts: (number | string)[], address: string, spender: string) => Promise<boolean>;
50
+ ensureAllowance: (coins: string[], amounts: (number | string)[], spender: string, isMax?: boolean) => Promise<string[]>;
52
51
  getUsdRate: (coin: string) => Promise<number>;
53
52
  getGasPriceFromL1: () => Promise<number>;
54
53
  getGasPriceFromL2: () => Promise<number>;
@@ -60,18 +59,18 @@ declare const llamalend: {
60
59
  getMarketList: () => string[];
61
60
  };
62
61
  estimateGas: {
63
- ensureAllowance: (coins: string[], amounts: (string | number)[], spender: string, isMax?: boolean) => Promise<import("./interfaces.js").TGas>;
62
+ ensureAllowance: (coins: string[], amounts: (number | string)[], spender: string, isMax?: boolean) => Promise<import("./interfaces.js").TGas>;
64
63
  };
65
64
  st_crvUSD: {
66
65
  convertToAssets: (shares: import("./interfaces.js").TAmount) => Promise<string>;
67
66
  convertToShares: (assets: import("./interfaces.js").TAmount) => Promise<string>;
68
67
  userBalances: (address?: string) => Promise<{
69
- crvUSD: string;
70
- st_crvUSD: string;
68
+ "crvUSD": string;
69
+ "st_crvUSD": string;
71
70
  }>;
72
71
  totalSupplyAndCrvUSDLocked: () => Promise<{
73
- crvUSD: string;
74
- st_crvUSD: string;
72
+ "crvUSD": string;
73
+ "st_crvUSD": string;
75
74
  }>;
76
75
  maxDeposit: (address?: string) => Promise<string>;
77
76
  previewDeposit: (assets: import("./interfaces.js").TAmount) => Promise<string>;