@curvefi/api 1.20.1 → 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/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*/, 2];
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 1:
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 = 2;
420
- case 2: return [2 /*return*/, _usdRatesCache[assetId]['rate']];
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;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@curvefi/api",
3
- "version": "1.20.1",
3
+ "version": "1.22.0",
4
4
  "description": "JavaScript library for curve.fi",
5
5
  "main": "lib/index.js",
6
6
  "scripts": {
@@ -1,32 +0,0 @@
1
- import { Contract, ethers } from "ethers";
2
- import { Contract as MulticallContract, Provider as MulticallProvider } from "ethcall";
3
- import { DictInterface, PoolDataInterface } from "./interfaces";
4
- interface CurveInterface {
5
- provider: ethers.providers.Web3Provider | ethers.providers.JsonRpcProvider;
6
- multicallProvider: MulticallProvider;
7
- signer: ethers.Signer;
8
- signerAddress: string;
9
- chainId: number;
10
- contracts: {
11
- [index: string]: {
12
- contract: Contract;
13
- multicallContract: MulticallContract;
14
- };
15
- };
16
- feeData: {
17
- gasPrice?: number;
18
- maxFeePerGas?: number;
19
- maxPriorityFeePerGas?: number;
20
- };
21
- constantOptions: {
22
- gasLimit: number;
23
- };
24
- options: {
25
- gasPrice?: number | ethers.BigNumber;
26
- maxFeePerGas?: number | ethers.BigNumber;
27
- maxPriorityFeePerGas?: number | ethers.BigNumber;
28
- };
29
- constants: DictInterface<any>;
30
- }
31
- export declare function getCryptoFactoryPoolData(this: CurveInterface): Promise<DictInterface<PoolDataInterface>>;
32
- export {};
package/lib/factory.d.ts DELETED
@@ -1,32 +0,0 @@
1
- import { Contract, ethers } from "ethers";
2
- import { Contract as MulticallContract, Provider as MulticallProvider } from "ethcall";
3
- import { DictInterface, PoolDataInterface } from "./interfaces";
4
- interface CurveInterface {
5
- provider: ethers.providers.Web3Provider | ethers.providers.JsonRpcProvider;
6
- multicallProvider: MulticallProvider;
7
- signer: ethers.Signer;
8
- signerAddress: string;
9
- chainId: number;
10
- contracts: {
11
- [index: string]: {
12
- contract: Contract;
13
- multicallContract: MulticallContract;
14
- };
15
- };
16
- feeData: {
17
- gasPrice?: number;
18
- maxFeePerGas?: number;
19
- maxPriorityFeePerGas?: number;
20
- };
21
- constantOptions: {
22
- gasLimit: number;
23
- };
24
- options: {
25
- gasPrice?: number | ethers.BigNumber;
26
- maxFeePerGas?: number | ethers.BigNumber;
27
- maxPriorityFeePerGas?: number | ethers.BigNumber;
28
- };
29
- constants: DictInterface<any>;
30
- }
31
- export declare function getFactoryPoolData(this: CurveInterface): Promise<DictInterface<PoolDataInterface>>;
32
- export {};