@curvefi/api 1.21.0 → 1.22.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -0
- package/lib/external-api.d.ts +3 -0
- package/lib/external-api.js +67 -0
- package/lib/index.d.ts +1 -0
- package/lib/index.js +1 -0
- package/lib/interfaces.d.ts +7 -0
- package/lib/pools.d.ts +1 -1
- package/lib/pools.js +44 -21
- package/lib/utils.d.ts +2 -0
- package/lib/utils.js +67 -7
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -241,6 +241,9 @@ import curve from "@curvefi/api";
|
|
|
241
241
|
|
|
242
242
|
(async () => {
|
|
243
243
|
await curve.init('JsonRpc', {}, {gasPrice: 0, maxFeePerGas: 0, maxPriorityFeePerGas: 0});
|
|
244
|
+
|
|
245
|
+
console.log(await curve.getTVL());
|
|
246
|
+
// 19281307454.671753
|
|
244
247
|
|
|
245
248
|
const aave = new curve.Pool('aave');
|
|
246
249
|
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { IExtendedPoolDataFromApi } from "./interfaces";
|
|
2
|
+
import memoize from "memoizee";
|
|
3
|
+
export declare const _getPoolsFromApi: ((network: "ethereum" | "polygon", poolType: "main" | "crypto" | "factory" | "factory-crypto") => Promise<IExtendedPoolDataFromApi>) & memoize.Memoized<(network: "ethereum" | "polygon", poolType: "main" | "crypto" | "factory" | "factory-crypto") => Promise<IExtendedPoolDataFromApi>>;
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
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
|
+
exports._getPoolsFromApi = void 0;
|
|
43
|
+
var axios_1 = __importDefault(require("axios"));
|
|
44
|
+
var memoizee_1 = __importDefault(require("memoizee"));
|
|
45
|
+
exports._getPoolsFromApi = (0, memoizee_1.default)(function (network, poolType) { return __awaiter(void 0, void 0, void 0, function () {
|
|
46
|
+
var url, response, err_1;
|
|
47
|
+
return __generator(this, function (_a) {
|
|
48
|
+
switch (_a.label) {
|
|
49
|
+
case 0:
|
|
50
|
+
url = "https://api.curve.fi/api/getPools/".concat(network, "/").concat(poolType);
|
|
51
|
+
_a.label = 1;
|
|
52
|
+
case 1:
|
|
53
|
+
_a.trys.push([1, 3, , 4]);
|
|
54
|
+
return [4 /*yield*/, axios_1.default.get(url)];
|
|
55
|
+
case 2:
|
|
56
|
+
response = _a.sent();
|
|
57
|
+
return [2 /*return*/, response.data.data];
|
|
58
|
+
case 3:
|
|
59
|
+
err_1 = _a.sent();
|
|
60
|
+
return [2 /*return*/, { poolData: [], tvl: 0, tvlAll: 0 }];
|
|
61
|
+
case 4: return [2 /*return*/];
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
}); }, {
|
|
65
|
+
promise: true,
|
|
66
|
+
maxAge: 5 * 60 * 1000, // 5m
|
|
67
|
+
});
|
package/lib/index.d.ts
CHANGED
|
@@ -30,6 +30,7 @@ declare const curve: {
|
|
|
30
30
|
getFactoryPoolList: () => string[];
|
|
31
31
|
getCryptoFactoryPoolList: () => string[];
|
|
32
32
|
getUsdRate: (coin: string) => Promise<number>;
|
|
33
|
+
getTVL: (chainId?: number) => Promise<number>;
|
|
33
34
|
setCustomFeeData: typeof setCustomFeeData;
|
|
34
35
|
signerAddress: string;
|
|
35
36
|
chainId: number;
|
package/lib/index.js
CHANGED
|
@@ -94,6 +94,7 @@ var curve = {
|
|
|
94
94
|
getFactoryPoolList: utils_1.getFactoryPoolList,
|
|
95
95
|
getCryptoFactoryPoolList: utils_1.getCryptoFactoryPoolList,
|
|
96
96
|
getUsdRate: utils_1.getUsdRate,
|
|
97
|
+
getTVL: utils_1.getTVL,
|
|
97
98
|
setCustomFeeData: setCustomFeeData,
|
|
98
99
|
signerAddress: '',
|
|
99
100
|
chainId: 0,
|
package/lib/interfaces.d.ts
CHANGED
|
@@ -92,6 +92,7 @@ export interface ICoinFromPoolDataApi {
|
|
|
92
92
|
address: string;
|
|
93
93
|
symbol: string;
|
|
94
94
|
decimals: string;
|
|
95
|
+
usdPrice: number | string;
|
|
95
96
|
}
|
|
96
97
|
export interface IPoolDataFromApi {
|
|
97
98
|
id: string;
|
|
@@ -104,6 +105,12 @@ export interface IPoolDataFromApi {
|
|
|
104
105
|
implementation: string;
|
|
105
106
|
implementationAddress: string;
|
|
106
107
|
coins: ICoinFromPoolDataApi[];
|
|
108
|
+
usdTotal: number;
|
|
109
|
+
}
|
|
110
|
+
export interface IExtendedPoolDataFromApi {
|
|
111
|
+
poolData: IPoolDataFromApi[];
|
|
112
|
+
tvl?: number;
|
|
113
|
+
tvlAll: number;
|
|
107
114
|
}
|
|
108
115
|
export interface RewardsApyInterface {
|
|
109
116
|
token: string;
|
package/lib/pools.d.ts
CHANGED
|
@@ -64,7 +64,7 @@ export declare class Pool {
|
|
|
64
64
|
}>;
|
|
65
65
|
getPoolBalances: () => Promise<string[]>;
|
|
66
66
|
getPoolWrappedBalances: () => Promise<string[]>;
|
|
67
|
-
getTotalLiquidity: () => Promise<string>;
|
|
67
|
+
getTotalLiquidity: (useApi?: boolean) => Promise<string>;
|
|
68
68
|
getVolume: () => Promise<string>;
|
|
69
69
|
getBaseApy: () => Promise<{
|
|
70
70
|
day: string;
|
package/lib/pools.js
CHANGED
|
@@ -60,10 +60,11 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
60
60
|
};
|
|
61
61
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
62
62
|
exports.getUserPoolList = exports.crossAssetExchange = exports.crossAssetExchangeEstimateGas = exports.crossAssetExchangeApprove = exports.crossAssetExchangeApproveEstimateGas = exports.crossAssetExchangeIsApproved = exports.crossAssetExchangeExpected = exports.crossAssetExchangeOutputAndSlippage = exports._crossAssetExchangeInfo = exports._getSmallAmountForCoin = exports.crossAssetExchangeAvailable = exports.exchange = exports.exchangeEstimateGas = exports.exchangeApprove = exports.exchangeApproveEstimateGas = exports.exchangeIsApproved = exports.exchangeExpected = exports.getBestPoolAndOutput = exports.Pool = void 0;
|
|
63
|
+
var axios_1 = __importDefault(require("axios"));
|
|
63
64
|
var ethers_1 = require("ethers");
|
|
65
|
+
var external_api_1 = require("./external-api");
|
|
64
66
|
var utils_1 = require("./utils");
|
|
65
67
|
var curve_1 = require("./curve");
|
|
66
|
-
var axios_1 = __importDefault(require("axios"));
|
|
67
68
|
var Pool = /** @class */ (function () {
|
|
68
69
|
function Pool(id) {
|
|
69
70
|
var _this = this;
|
|
@@ -224,26 +225,48 @@ var Pool = /** @class */ (function () {
|
|
|
224
225
|
}
|
|
225
226
|
});
|
|
226
227
|
}); };
|
|
227
|
-
this.getTotalLiquidity = function () {
|
|
228
|
-
|
|
229
|
-
return
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
228
|
+
this.getTotalLiquidity = function (useApi) {
|
|
229
|
+
if (useApi === void 0) { useApi = true; }
|
|
230
|
+
return __awaiter(_this, void 0, void 0, function () {
|
|
231
|
+
var network, poolType, poolsData, totalLiquidity_1, balances, promises, _i, _a, addr, prices, totalLiquidity;
|
|
232
|
+
var _this = this;
|
|
233
|
+
return __generator(this, function (_c) {
|
|
234
|
+
switch (_c.label) {
|
|
235
|
+
case 0:
|
|
236
|
+
if (!useApi) return [3 /*break*/, 2];
|
|
237
|
+
network = curve_1.curve.chainId === 137 ? "polygon" : "ethereum";
|
|
238
|
+
poolType = !this.isFactory && !this.isCrypto ? "main" :
|
|
239
|
+
!this.isFactory ? "crypto" :
|
|
240
|
+
!this.isCryptoFactory ? "factory" :
|
|
241
|
+
"factory-crypto";
|
|
242
|
+
return [4 /*yield*/, (0, external_api_1._getPoolsFromApi)(network, poolType)];
|
|
243
|
+
case 1:
|
|
244
|
+
poolsData = (_c.sent()).poolData;
|
|
245
|
+
try {
|
|
246
|
+
totalLiquidity_1 = poolsData.filter(function (data) { return data.address.toLowerCase() === _this.swap.toLowerCase(); })[0].usdTotal;
|
|
247
|
+
return [2 /*return*/, String(totalLiquidity_1)];
|
|
248
|
+
}
|
|
249
|
+
catch (err) {
|
|
250
|
+
console.log(err.message);
|
|
251
|
+
}
|
|
252
|
+
_c.label = 2;
|
|
253
|
+
case 2: return [4 /*yield*/, this.getPoolBalances()];
|
|
254
|
+
case 3:
|
|
255
|
+
balances = _c.sent();
|
|
256
|
+
promises = [];
|
|
257
|
+
for (_i = 0, _a = this.underlyingCoinAddresses; _i < _a.length; _i++) {
|
|
258
|
+
addr = _a[_i];
|
|
259
|
+
promises.push((0, utils_1._getUsdRate)(addr));
|
|
260
|
+
}
|
|
261
|
+
return [4 /*yield*/, Promise.all(promises)];
|
|
262
|
+
case 4:
|
|
263
|
+
prices = _c.sent();
|
|
264
|
+
totalLiquidity = balances.reduce(function (liquidity, b, i) { return liquidity + (Number(b) * prices[i]); }, 0);
|
|
265
|
+
return [2 /*return*/, totalLiquidity.toFixed(8)];
|
|
266
|
+
}
|
|
267
|
+
});
|
|
245
268
|
});
|
|
246
|
-
}
|
|
269
|
+
};
|
|
247
270
|
this._getPoolStats = function () { return __awaiter(_this, void 0, void 0, function () {
|
|
248
271
|
var statsUrl, name, key;
|
|
249
272
|
return __generator(this, function (_a) {
|
|
@@ -273,7 +296,7 @@ var Pool = /** @class */ (function () {
|
|
|
273
296
|
if (!(this.isCrypto || (curve_1.curve.chainId === 1 && this.isFactory))) return [3 /*break*/, 2];
|
|
274
297
|
_a = 1;
|
|
275
298
|
return [3 /*break*/, 4];
|
|
276
|
-
case 2: return [4 /*yield*/, (0, utils_1._getUsdRate)(this.
|
|
299
|
+
case 2: return [4 /*yield*/, (0, utils_1._getUsdRate)(this.coinAddresses[0])];
|
|
277
300
|
case 3:
|
|
278
301
|
_a = _c.sent();
|
|
279
302
|
_c.label = 4;
|
package/lib/utils.d.ts
CHANGED
|
@@ -21,6 +21,7 @@ export declare const _ensureAllowance: (coins: string[], amounts: ethers.BigNumb
|
|
|
21
21
|
export declare const ensureAllowanceEstimateGas: (coins: string[], amounts: string[], spender: string) => Promise<number>;
|
|
22
22
|
export declare const ensureAllowance: (coins: string[], amounts: string[], spender: string) => Promise<string[]>;
|
|
23
23
|
export declare const getPoolNameBySwapAddress: (swapAddress: string) => string;
|
|
24
|
+
export declare const _getUsdPricesFromApi: () => Promise<DictInterface<number>>;
|
|
24
25
|
export declare const _getUsdRate: (assetId: string) => Promise<number>;
|
|
25
26
|
export declare const _getFactoryStatsUrl: () => string;
|
|
26
27
|
export declare const _getStatsUrl: (isCrypto?: boolean) => string;
|
|
@@ -31,3 +32,4 @@ export declare const getPoolList: () => string[];
|
|
|
31
32
|
export declare const getFactoryPoolList: () => string[];
|
|
32
33
|
export declare const getCryptoFactoryPoolList: () => string[];
|
|
33
34
|
export declare const getUsdRate: (coin: string) => Promise<number>;
|
|
35
|
+
export declare const getTVL: (chainId?: number) => Promise<number>;
|
package/lib/utils.js
CHANGED
|
@@ -59,13 +59,14 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
59
59
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
60
60
|
};
|
|
61
61
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
62
|
-
exports.getUsdRate = exports.getCryptoFactoryPoolList = exports.getFactoryPoolList = exports.getPoolList = exports._getFactoryStatsPolygon = exports._getFactoryStatsEthereum = exports._getStats = exports._getStatsUrl = exports._getFactoryStatsUrl = exports._getUsdRate = exports.getPoolNameBySwapAddress = exports.ensureAllowance = exports.ensureAllowanceEstimateGas = exports._ensureAllowance = exports.hasAllowance = exports.getAllowance = exports._getAllowance = exports.getBalances = exports._prepareAddresses = exports._getBalances = exports._getCoinDecimals = exports._getCoinAddresses = exports.getEthIndex = exports.isEth = exports.fromBN = exports.toStringFromBN = exports.toBN = exports.BN = exports.MAX_ALLOWANCE = void 0;
|
|
62
|
+
exports.getTVL = exports.getUsdRate = exports.getCryptoFactoryPoolList = exports.getFactoryPoolList = exports.getPoolList = exports._getFactoryStatsPolygon = exports._getFactoryStatsEthereum = exports._getStats = exports._getStatsUrl = exports._getFactoryStatsUrl = exports._getUsdRate = exports._getUsdPricesFromApi = exports.getPoolNameBySwapAddress = exports.ensureAllowance = exports.ensureAllowanceEstimateGas = exports._ensureAllowance = exports.hasAllowance = exports.getAllowance = exports._getAllowance = exports.getBalances = exports._prepareAddresses = exports._getBalances = exports._getCoinDecimals = exports._getCoinAddresses = exports.getEthIndex = exports.isEth = exports.fromBN = exports.toStringFromBN = exports.toBN = exports.BN = exports.MAX_ALLOWANCE = void 0;
|
|
63
63
|
var axios_1 = __importDefault(require("axios"));
|
|
64
64
|
var memoizee_1 = __importDefault(require("memoizee"));
|
|
65
65
|
var ethers_1 = require("ethers");
|
|
66
66
|
var bignumber_js_1 = __importDefault(require("bignumber.js"));
|
|
67
67
|
var curve_1 = require("./curve");
|
|
68
68
|
var curve_2 = require("./curve");
|
|
69
|
+
var external_api_1 = require("./external-api");
|
|
69
70
|
var ETH_ADDRESS = '0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE';
|
|
70
71
|
exports.MAX_ALLOWANCE = ethers_1.ethers.BigNumber.from(2).pow(ethers_1.ethers.BigNumber.from(256)).sub(ethers_1.ethers.BigNumber.from(1));
|
|
71
72
|
// bignumber.js
|
|
@@ -374,13 +375,49 @@ var getPoolNameBySwapAddress = function (swapAddress) {
|
|
|
374
375
|
})[0][0];
|
|
375
376
|
};
|
|
376
377
|
exports.getPoolNameBySwapAddress = getPoolNameBySwapAddress;
|
|
378
|
+
var _getUsdPricesFromApi = function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
379
|
+
var network, promises, allTypesExtendedPoolData, priceDict, _i, allTypesExtendedPoolData_1, extendedPoolData, _a, _b, pool, _c, _d, coin;
|
|
380
|
+
return __generator(this, function (_e) {
|
|
381
|
+
switch (_e.label) {
|
|
382
|
+
case 0:
|
|
383
|
+
network = curve_1.curve.chainId === 137 ? "polygon" : "ethereum";
|
|
384
|
+
promises = [
|
|
385
|
+
(0, external_api_1._getPoolsFromApi)(network, "main"),
|
|
386
|
+
(0, external_api_1._getPoolsFromApi)(network, "crypto"),
|
|
387
|
+
(0, external_api_1._getPoolsFromApi)(network, "factory"),
|
|
388
|
+
(0, external_api_1._getPoolsFromApi)(network, "factory-crypto"),
|
|
389
|
+
];
|
|
390
|
+
return [4 /*yield*/, Promise.all(promises)];
|
|
391
|
+
case 1:
|
|
392
|
+
allTypesExtendedPoolData = _e.sent();
|
|
393
|
+
priceDict = {};
|
|
394
|
+
for (_i = 0, allTypesExtendedPoolData_1 = allTypesExtendedPoolData; _i < allTypesExtendedPoolData_1.length; _i++) {
|
|
395
|
+
extendedPoolData = allTypesExtendedPoolData_1[_i];
|
|
396
|
+
for (_a = 0, _b = extendedPoolData.poolData; _a < _b.length; _a++) {
|
|
397
|
+
pool = _b[_a];
|
|
398
|
+
for (_c = 0, _d = pool.coins; _c < _d.length; _c++) {
|
|
399
|
+
coin = _d[_c];
|
|
400
|
+
if (typeof coin.usdPrice === "number")
|
|
401
|
+
priceDict[coin.address.toLowerCase()] = coin.usdPrice;
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
return [2 /*return*/, priceDict];
|
|
406
|
+
}
|
|
407
|
+
});
|
|
408
|
+
}); };
|
|
409
|
+
exports._getUsdPricesFromApi = _getUsdPricesFromApi;
|
|
377
410
|
var _usdRatesCache = {};
|
|
378
411
|
var _getUsdRate = function (assetId) { return __awaiter(void 0, void 0, void 0, function () {
|
|
379
|
-
var chainName, url, response;
|
|
412
|
+
var pricesFromApi, chainName, url, response;
|
|
380
413
|
var _a, _b;
|
|
381
414
|
return __generator(this, function (_c) {
|
|
382
415
|
switch (_c.label) {
|
|
383
|
-
case 0:
|
|
416
|
+
case 0: return [4 /*yield*/, (0, exports._getUsdPricesFromApi)()];
|
|
417
|
+
case 1:
|
|
418
|
+
pricesFromApi = _c.sent();
|
|
419
|
+
if (assetId.toLowerCase() in pricesFromApi)
|
|
420
|
+
return [2 /*return*/, pricesFromApi[assetId.toLowerCase()]];
|
|
384
421
|
if (assetId === 'USD' || (curve_1.curve.chainId === 137 && (assetId.toLowerCase() === curve_2.COINS.am3crv.toLowerCase())))
|
|
385
422
|
return [2 /*return*/, 1];
|
|
386
423
|
chainName = {
|
|
@@ -403,12 +440,12 @@ var _getUsdRate = function (assetId) { return __awaiter(void 0, void 0, void 0,
|
|
|
403
440
|
chainName = 'ethereum';
|
|
404
441
|
assetId = '0xC581b735A1688071A1746c968e0798D642EDE491'.toLowerCase(); // EURT Ethereum
|
|
405
442
|
}
|
|
406
|
-
if (!((((_a = _usdRatesCache[assetId]) === null || _a === void 0 ? void 0 : _a.time) || 0) + 600000 < Date.now())) return [3 /*break*/,
|
|
443
|
+
if (!((((_a = _usdRatesCache[assetId]) === null || _a === void 0 ? void 0 : _a.time) || 0) + 600000 < Date.now())) return [3 /*break*/, 3];
|
|
407
444
|
url = ['bitcoin', 'ethereum', 'link'].includes(assetId.toLowerCase()) ?
|
|
408
445
|
"https://api.coingecko.com/api/v3/simple/price?ids=".concat(assetId, "&vs_currencies=usd") :
|
|
409
446
|
"https://api.coingecko.com/api/v3/simple/token_price/".concat(chainName, "?contract_addresses=").concat(assetId, "&vs_currencies=usd");
|
|
410
447
|
return [4 /*yield*/, axios_1.default.get(url)];
|
|
411
|
-
case
|
|
448
|
+
case 2:
|
|
412
449
|
response = _c.sent();
|
|
413
450
|
try {
|
|
414
451
|
_usdRatesCache[assetId] = { 'rate': (_b = response.data[assetId]['usd']) !== null && _b !== void 0 ? _b : 1, 'time': Date.now() };
|
|
@@ -416,8 +453,8 @@ var _getUsdRate = function (assetId) { return __awaiter(void 0, void 0, void 0,
|
|
|
416
453
|
catch (err) { // TODO pay attention!
|
|
417
454
|
_usdRatesCache[assetId] = { 'rate': 1, 'time': Date.now() };
|
|
418
455
|
}
|
|
419
|
-
_c.label =
|
|
420
|
-
case
|
|
456
|
+
_c.label = 3;
|
|
457
|
+
case 3: return [2 /*return*/, _usdRatesCache[assetId]['rate']];
|
|
421
458
|
}
|
|
422
459
|
});
|
|
423
460
|
}); };
|
|
@@ -546,3 +583,26 @@ var getUsdRate = function (coin) { return __awaiter(void 0, void 0, void 0, func
|
|
|
546
583
|
});
|
|
547
584
|
}); };
|
|
548
585
|
exports.getUsdRate = getUsdRate;
|
|
586
|
+
var getTVL = function (chainId) {
|
|
587
|
+
if (chainId === void 0) { chainId = curve_1.curve.chainId; }
|
|
588
|
+
return __awaiter(void 0, void 0, void 0, function () {
|
|
589
|
+
var network, promises, allTypesExtendedPoolData;
|
|
590
|
+
return __generator(this, function (_a) {
|
|
591
|
+
switch (_a.label) {
|
|
592
|
+
case 0:
|
|
593
|
+
network = chainId === 137 ? "polygon" : "ethereum";
|
|
594
|
+
promises = [
|
|
595
|
+
(0, external_api_1._getPoolsFromApi)(network, "main"),
|
|
596
|
+
(0, external_api_1._getPoolsFromApi)(network, "crypto"),
|
|
597
|
+
(0, external_api_1._getPoolsFromApi)(network, "factory"),
|
|
598
|
+
(0, external_api_1._getPoolsFromApi)(network, "factory-crypto"),
|
|
599
|
+
];
|
|
600
|
+
return [4 /*yield*/, Promise.all(promises)];
|
|
601
|
+
case 1:
|
|
602
|
+
allTypesExtendedPoolData = _a.sent();
|
|
603
|
+
return [2 /*return*/, allTypesExtendedPoolData.reduce(function (sum, data) { var _a; return sum + ((_a = data.tvl) !== null && _a !== void 0 ? _a : data.tvlAll); }, 0)];
|
|
604
|
+
}
|
|
605
|
+
});
|
|
606
|
+
});
|
|
607
|
+
};
|
|
608
|
+
exports.getTVL = getTVL;
|