impermax-sdk 2.1.9 → 2.1.10

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.
@@ -183,9 +183,12 @@ class OffchainLendingPool {
183
183
  }
184
184
  // Amms and farms
185
185
  getAmm() {
186
+ var _a, _b, _c;
186
187
  return __awaiter(this, void 0, void 0, function* () {
187
188
  const lendingPoolData = yield this.getLendingPoolData();
188
- return (0, amms_1.getAmmByFactory)(this.offchain.network, lendingPoolData.pair.uniswapV2Factory);
189
+ // TODO: this properly
190
+ const pairFactory = (_b = (_a = lendingPoolData.pair) === null || _a === void 0 ? void 0 : _a.uniswapV2Factory) !== null && _b !== void 0 ? _b : (_c = lendingPoolData.nftlp) === null || _c === void 0 ? void 0 : _c.dexFactory;
191
+ return (0, amms_1.getAmmByFactory)(this.offchain.network, pairFactory);
189
192
  });
190
193
  }
191
194
  getFarm() {
@@ -43,7 +43,7 @@ export default class Offchain {
43
43
  protected vaultsUsersData: {
44
44
  [key in Address]?: Promise<AddressIndex<AddressIndex<VaultPosition>>>;
45
45
  };
46
- constructor(offchainMultichain: OffchainMultichain, network: Networks);
46
+ constructor(offchainMultichain: OffchainMultichain, network: Networks, whitelist?: FactoryIndex<Address[]>);
47
47
  cleanCache(): void;
48
48
  getLendingPool(factory: Factory, pairAddress: Address): Promise<OffchainLendingPool>;
49
49
  getVault(vaultAddress: Address): Promise<OffchainVault>;
@@ -45,7 +45,7 @@ const offchainVault_1 = __importDefault(require("./vault/offchainVault"));
45
45
  const configManager_1 = __importDefault(require("./configManager"));
46
46
  const chainId_1 = require("../config/chainId");
47
47
  class Offchain {
48
- constructor(offchainMultichain, network) {
48
+ constructor(offchainMultichain, network, whitelist) {
49
49
  this.whitelistedPairs = {};
50
50
  this.getPriceHelper = () => this.priceHelper;
51
51
  this.getSolidexHelper = () => this.solidexHelper;
@@ -91,7 +91,7 @@ class Offchain {
91
91
  // TODO fix conflicting lines (commented)
92
92
  //this.network = cfg.network;
93
93
  //this.chainId = cfg.chainId;
94
- //this.whitelistedPairs = cfg.whitelistedPairs ? cfg.whitelistedPairs : {};
94
+ this.whitelistedPairs = whitelist !== null && whitelist !== void 0 ? whitelist : {};
95
95
  this.offchainMultichain = offchainMultichain;
96
96
  this.network = network;
97
97
  this.chainId = chainId_1.CHAIN_IDS[network];
@@ -99,18 +99,29 @@ exports.fetchVaults = fetchVaults;
99
99
  function fetchLendingPools() {
100
100
  return __awaiter(this, void 0, void 0, function* () {
101
101
  const calls = [];
102
+ const factories = [];
102
103
  let factory;
103
104
  for (factory in subgraphs_1.IMPERMAX_SUBGRAPH_URL[this.network]) {
104
- // Multiple endpoints
105
105
  const subgraphs = subgraphs_1.IMPERMAX_SUBGRAPH_URL[this.network][factory];
106
- calls.push(this.endpointManager.fetch(subgraphs, this.network, (queryBuilder) => queryBuilder.lendingPoolsQuery(factory, [], this.network)));
106
+ calls.push(this.endpointManager.fetch(subgraphs, this.network, (queryBuilder) => queryBuilder.lendingPoolsQuery(factory, this.whitelistedPairs[factory], this.network)));
107
+ factories.push(factory);
107
108
  }
108
109
  const results = yield Promise.all(calls);
109
110
  const lendingPools = {};
110
- let i = 0;
111
- for (factory in subgraphs_1.IMPERMAX_SUBGRAPH_URL[this.network]) {
112
- lendingPools[factory] = results[i++].data.lendingPools;
113
- }
111
+ results.forEach((result, index) => {
112
+ var _a;
113
+ // `offchainEndpointManager` returns null when using filters and cant find subgraph with filter
114
+ if (!result)
115
+ return;
116
+ // Get the factory for this result
117
+ const factory = factories[index];
118
+ // Get pools data
119
+ const poolsForFactory = (_a = result.data) === null || _a === void 0 ? void 0 : _a.lendingPools;
120
+ if (!poolsForFactory)
121
+ return;
122
+ // Add all pools for this factory
123
+ lendingPools[factory] = poolsForFactory;
124
+ });
114
125
  return lendingPools;
115
126
  });
116
127
  }
@@ -123,6 +134,7 @@ function fetchLendingPoolsPast(seconds) {
123
134
  return null;
124
135
  try {
125
136
  const calls = [];
137
+ const factories = [];
126
138
  let factory;
127
139
  for (factory in subgraphs_1.IMPERMAX_SUBGRAPH_URL[this.network]) {
128
140
  const endpoints = subgraphs_1.IMPERMAX_SUBGRAPH_URL[this.network][factory];
@@ -131,15 +143,25 @@ function fetchLendingPoolsPast(seconds) {
131
143
  // Skip if no endpoints support past queries for this factory
132
144
  if (supportedEndpoints.length === 0)
133
145
  continue;
134
- // Query only from supported endpoints
135
146
  calls.push(this.endpointManager.fetch(supportedEndpoints, this.network, (queryBuilder) => queryBuilder.lendingPoolsPastQuery(blockNumber, this.whitelistedPairs[factory])));
147
+ factories.push(factory);
136
148
  }
137
149
  const results = yield Promise.all(calls);
138
150
  const lendingPools = {};
139
- let i = 0;
140
- for (factory in subgraphs_1.IMPERMAX_SUBGRAPH_URL[this.network]) {
141
- lendingPools[factory] = results[i++].data.lendingPools;
142
- }
151
+ results.forEach((result, index) => {
152
+ var _a;
153
+ // `offchainEndpointManager` returns null when using filters and cant find subgraph with filter
154
+ if (!result)
155
+ return;
156
+ // Get the factory for this result
157
+ const factory = factories[index];
158
+ // Get pools data
159
+ const poolsForFactory = (_a = result.data) === null || _a === void 0 ? void 0 : _a.lendingPools;
160
+ if (!poolsForFactory)
161
+ return;
162
+ // Add all pools for this factory
163
+ lendingPools[factory] = poolsForFactory;
164
+ });
143
165
  return lendingPools;
144
166
  }
145
167
  catch (_a) {
@@ -309,14 +331,14 @@ function initializeLendingPoolsData() {
309
331
  lendingPoolsOfAmm.push(lendingPool);
310
332
  }
311
333
  }
312
- const uniswapAPR = yield this.fetchUniswapAPR(lendingPoolsByAmm);
334
+ // const uniswapAPR = await this.fetchUniswapAPR(lendingPoolsByAmm);
313
335
  // Organize lending pools data
314
336
  for (const factory in lendingPools) {
315
337
  for (const lendingPool of lendingPools[factory]) {
316
338
  // WARN: Quick temporary fix, to be removed after
317
339
  if (factory === "8")
318
- lendingPool['pair'] = lendingPool['nftlp'];
319
- lendingPool.pair.uniswapAPR = uniswapAPR[lendingPool.id] || 0;
340
+ lendingPool["pair"] = lendingPool["nftlp"];
341
+ lendingPool.pair.uniswapAPR = 0;
320
342
  if (impermaxChefRewardRates) {
321
343
  lendingPool.borrowable0.rewards =
322
344
  impermaxChefRewardRates[lendingPool.borrowable0.id];
@@ -384,37 +406,6 @@ function initializeLendingPoolsData() {
384
406
  lendingPoolsDataV2V2[ETH_RDNT].pair.rewards[0].rewardRate = (parseFloat(lendingPoolsDataV2V2[ETH_RDNT].pair.rewards[0].rewardRate) / 2).toString();
385
407
  }
386
408
  }
387
- /*if (lendingPoolsData[Factory.SOLV2][LIZ_LIZ_ETH]) {
388
- const LIZ = lendingPoolsData[Factory.SOLV2][LIZ_LIZ_ETH].borrowable0.underlying;
389
- lendingPoolsData[Factory.SOLV2][LIZ_LIZ_ETH].pair.rewards = [{
390
- id: '',
391
- rewardsToken: LIZ,
392
- rewardRate: '3.724',
393
- periodFinish: '0',
394
- }];
395
- lendingPoolsData[Factory.SOLV2][LIZ_LIZ_ETH].pair.stakedTotalSupply = '40131.19426';
396
- lendingPoolsData[Factory.SOLV2][LIZ_ETH_USDC].pair.rewards = [{
397
- id: '',
398
- rewardsToken: LIZ,
399
- rewardRate: '1.284',
400
- periodFinish: '0',
401
- }];
402
- lendingPoolsData[Factory.SOLV2][LIZ_ETH_USDC].pair.stakedTotalSupply = '0.182614';
403
- lendingPoolsData[Factory.SOLV2][LIZ_ETH_BTC].pair.rewards = [{
404
- id: '',
405
- rewardsToken: LIZ,
406
- rewardRate: '0.159',
407
- periodFinish: '0',
408
- }];
409
- lendingPoolsData[Factory.SOLV2][LIZ_ETH_BTC].pair.stakedTotalSupply = '0.002468';
410
- lendingPoolsData[Factory.SOLV2][LIZ_LIZ_USDC].pair.rewards = [{
411
- id: '',
412
- rewardsToken: LIZ,
413
- rewardRate: '1.566',
414
- periodFinish: '0',
415
- }];
416
- lendingPoolsData[Factory.SOLV2][LIZ_LIZ_USDC].pair.stakedTotalSupply = '0.568227';
417
- }*/
418
409
  }
419
410
  if (this.network === types_1.Networks.Polygon) {
420
411
  const lendingPoolsDataV2V2 = lendingPoolsData[types_1.Factory.V2V2];
@@ -449,38 +440,6 @@ function initializeLendingPoolsData() {
449
440
  "0.000000992210460243"; //https://snowtrace.io/token/0xe530dc2095ef5653205cf5ea79f8979a7028065c?a=0x784da19e61cf348a8c54547531795ecfee2affd1
450
441
  }
451
442
  }
452
- /*REWARD STOPPED const sAVAX_AVAX = '0x5b588f4481035b0f765393fc9f4752615a6d0498';
453
- if (lendingPoolsData[Factory.V2V1_2][sAVAX_AVAX]) {
454
- const QI = lendingPoolsData[Factory.V2V1_2][QI_AVAX].borrowable0.underlying;
455
- lendingPoolsData[Factory.V2V1_2][sAVAX_AVAX].pair.rewards[1] = {
456
- id: '',
457
- rewardsToken: QI,
458
- rewardRate: '1.74',
459
- periodFinish: '0',
460
- };
461
- }
462
- const UST_AVAX = '0xc6e68d77d0f4fa925a1cf2611dab6b10900eaf2b';
463
- if (lendingPoolsData[Factory.V2V1_2][UST_AVAX]) {
464
- const AVAX = lendingPoolsData[Factory.V2V1_2][UST_AVAX].borrowable1.underlying;
465
- lendingPoolsData[Factory.V2V1_2][UST_AVAX].pair.rewards[0].rewardRate = '0.000099';
466
- lendingPoolsData[Factory.V2V1_2][UST_AVAX].pair.rewards[2] = {
467
- id: '',
468
- rewardsToken: AVAX,
469
- rewardRate: '0.00047',
470
- periodFinish: '0',
471
- };
472
- }
473
- const UST_USDC = '0x69c1c44e8742b66d892294a7eeb9aac51891b0eb';
474
- if (lendingPoolsData[Factory.V2V1_2][UST_USDC]) {
475
- const AVAX = lendingPoolsData[Factory.V2V1_2][UST_AVAX].borrowable1.underlying;
476
- lendingPoolsData[Factory.V2V1_2][UST_USDC].pair.rewards[0].rewardRate = '0.000099';
477
- lendingPoolsData[Factory.V2V1_2][UST_USDC].pair.rewards[2] = {
478
- id: '',
479
- rewardsToken: AVAX,
480
- rewardRate: '0.00047',
481
- periodFinish: '0',
482
- };
483
- }*/
484
443
  }
485
444
  return lendingPoolsData;
486
445
  });
@@ -1,4 +1,4 @@
1
- import { NetworkIndex, Networks, VaultType } from "../config/types";
1
+ import { NetworkIndex, Networks, VaultType, Address, FactoryIndex } from "../config/types";
2
2
  import Offchain from "./offchain";
3
3
  import OffchainVault from "./vault/offchainVault";
4
4
  import { Amms } from "../config/amms";
@@ -48,7 +48,7 @@ export default class OffchainMultichain {
48
48
  protected offchains: NetworkIndex<Offchain>;
49
49
  private constructor();
50
50
  static get instance(): OffchainMultichain;
51
- getOffchain(network: Networks): Offchain;
51
+ getOffchain(network: Networks, whitelist?: FactoryIndex<Address[]>): Offchain;
52
52
  getVaultList(params?: VaultListParams): Promise<Array<OffchainVault>>;
53
53
  networkHasVault(network: Networks): boolean;
54
54
  getLendingPoolList(params?: LendingPoolListParams): Promise<Array<OffchainLendingPool>>;
@@ -61,9 +61,9 @@ class OffchainMultichain {
61
61
  }
62
62
  return __classPrivateFieldGet(OffchainMultichain, _a, "f", _OffchainMultichain_instance);
63
63
  }
64
- getOffchain(network) {
64
+ getOffchain(network, whitelist) {
65
65
  if (!this.offchains[network])
66
- this.offchains[network] = new offchain_1.default(this, network);
66
+ this.offchains[network] = new offchain_1.default(this, network, whitelist);
67
67
  return this.offchains[network];
68
68
  }
69
69
  /*--------------------------------------------------------*
@@ -73,18 +73,14 @@ class OffchainMultichain {
73
73
  return __awaiter(this, void 0, void 0, function* () {
74
74
  console.time("Vaults");
75
75
  const allNetworks = params.networks || Object.values(types_1.Networks);
76
- // Filter out networks without vaults
77
76
  const networksWithVaults = allNetworks.filter((network) => this.networkHasVault(network));
78
77
  // Networks
79
78
  const networkPromises = networksWithVaults.map((network) => __awaiter(this, void 0, void 0, function* () {
80
79
  const offchain = this.getOffchain(network);
81
80
  const vaultsData = yield offchain.getVaultsData();
81
+ // VaultTypes
82
82
  const vaultPromises = Object.keys(vaultsData).map((address) => offchain.getVault(address));
83
- const vaults = yield Promise.all(vaultPromises);
84
- // TODO: Reomve this? Types
85
- return params.type
86
- ? vaults.filter((vault) => vault.getVaultType() === params.type)
87
- : vaults;
83
+ return Promise.all(vaultPromises);
88
84
  }));
89
85
  const results = yield Promise.all(networkPromises);
90
86
  console.timeEnd("Vaults");
@@ -83,7 +83,7 @@ class PonderQueryBuilder {
83
83
  }
84
84
  }
85
85
  }`;
86
- const id_in_string = addressesFilter.length > 0 ? `id_in: ["${addressesFilter.join('","').toLowerCase()}"]}` : "";
86
+ const id_in_string = (addressesFilter === null || addressesFilter === void 0 ? void 0 : addressesFilter.length) > 0 ? `id_in: ["${addressesFilter.join('","').toLowerCase()}"]` : "";
87
87
  return (0, graphql_tag_1.default) `{
88
88
  lendingPools(
89
89
  limit: 1000
@@ -176,7 +176,7 @@ class PonderQueryBuilder {
176
176
  }
177
177
  }
178
178
  }`;
179
- const id_in_string = addressesFilter.length > 0 ? `id_in: ["${addressesFilter.join('","').toLowerCase()}"]}` : "";
179
+ const id_in_string = (addressesFilter === null || addressesFilter === void 0 ? void 0 : addressesFilter.length) > 0 ? `id_in: ["${addressesFilter.join('","').toLowerCase()}"]` : "";
180
180
  return (0, graphql_tag_1.default) `{
181
181
  lendingPools(
182
182
  limit: 1000
@@ -264,7 +264,7 @@ class PonderQueryBuilder {
264
264
  *-----------------------------*/
265
265
  vaultsQuery(vaultType, addressesFilter) {
266
266
  // do something here for difference kind of vault type, currently only lending
267
- const id_in_string = addressesFilter.length > 0 ? `where: {id_in: ["${addressesFilter.join('","').toLowerCase()}"]}` : "";
267
+ const id_in_string = (addressesFilter === null || addressesFilter === void 0 ? void 0 : addressesFilter.length) > 0 ? `id_in: ["${addressesFilter.join('","').toLowerCase()}"]` : "";
268
268
  return (0, graphql_tag_1.default) `{
269
269
  lendingVaults(limit: 1000, ${id_in_string}) {
270
270
  items {
@@ -5,6 +5,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.TheGraphQueryBuilder = void 0;
7
7
  const graphql_tag_1 = __importDefault(require("graphql-tag"));
8
+ const types_1 = require("../../../../config/types");
8
9
  const factories_1 = require("../../../../config/factories");
9
10
  // TODO: Might need to separate Vaults query based on vault type, maybe not.
10
11
  class TheGraphQueryBuilder {
@@ -37,6 +38,8 @@ class TheGraphQueryBuilder {
37
38
  return (0, graphql_tag_1.default) `{}`;
38
39
  }
39
40
  lendingPoolsQuery(factory, addressesFilter) {
41
+ if (factory == types_1.Factory.V3)
42
+ return this.lendingPoolsV3Query(factory, addressesFilter);
40
43
  const tokenStr = `{
41
44
  id
42
45
  symbol
@@ -107,7 +110,7 @@ class TheGraphQueryBuilder {
107
110
  periodFinish
108
111
  }
109
112
  }`;
110
- const id_in_string = addressesFilter.length > 0 ? `where: {id_in: ["${addressesFilter.join('","').toLowerCase()}"]}` : "";
113
+ const id_in_string = (addressesFilter === null || addressesFilter === void 0 ? void 0 : addressesFilter.length) > 0 ? `where: {id_in: ["${addressesFilter.join('","').toLowerCase()}"]}` : "";
111
114
  return (0, graphql_tag_1.default) `{
112
115
  lendingPools(first: 1000, orderBy: totalBorrowsUSD, orderDirection: desc ${id_in_string}) {
113
116
  id
@@ -190,7 +193,7 @@ class TheGraphQueryBuilder {
190
193
  *-----------------------------*/
191
194
  vaultsQuery(vaultType, addressesFilter) {
192
195
  // do something here for difference kind of vault type, currently only lending
193
- const id_in_string = addressesFilter.length > 0 ? `where: {id_in: ["${addressesFilter.join('","').toLowerCase()}"]}` : "";
196
+ const id_in_string = (addressesFilter === null || addressesFilter === void 0 ? void 0 : addressesFilter.length) > 0 ? `where: {id_in: ["${addressesFilter.join('","').toLowerCase()}"]}` : "";
194
197
  return (0, graphql_tag_1.default) `{
195
198
  lendingVaults(first: 1000 ${id_in_string}) {
196
199
  id
@@ -293,7 +296,7 @@ class TheGraphQueryBuilder {
293
296
  accrualTimestamp
294
297
  exchangeRate
295
298
  }`;
296
- const id_in_string = addressesFilter.length > 0 ? `where: {id_in: ["${addressesFilter.join('","').toLowerCase()}"]}` : "";
299
+ const id_in_string = (addressesFilter === null || addressesFilter === void 0 ? void 0 : addressesFilter.length) > 0 ? `where: {id_in: ["${addressesFilter.join('","').toLowerCase()}"]}` : "";
297
300
  return (0, graphql_tag_1.default) `{
298
301
  lendingPools(first: 1000, orderBy: totalBorrowsUSD, orderDirection: desc, block: {number: ${blockNumber}} ${id_in_string}) {
299
302
  id
@@ -329,7 +332,7 @@ class TheGraphQueryBuilder {
329
332
  }`;
330
333
  }
331
334
  pastVolumeQuery(blockNumber, addressesFilter) {
332
- const id_in_string = addressesFilter.length > 0 ? `where: {id_in: ["${addressesFilter.join('","').toLowerCase()}"]}` : "";
335
+ const id_in_string = (addressesFilter === null || addressesFilter === void 0 ? void 0 : addressesFilter.length) > 0 ? `where: {id_in: ["${addressesFilter.join('","').toLowerCase()}"]}` : "";
333
336
  return (0, graphql_tag_1.default) `{
334
337
  pairs (block: {number: ${blockNumber}} ${id_in_string}) {
335
338
  id
@@ -338,7 +341,7 @@ class TheGraphQueryBuilder {
338
341
  }`;
339
342
  }
340
343
  currentVolumeAndReservesQuery(addressesFilter) {
341
- const id_in_string = addressesFilter.length > 0 ? `where: {id_in: ["${addressesFilter.join('","').toLowerCase()}"]}` : "";
344
+ const id_in_string = (addressesFilter === null || addressesFilter === void 0 ? void 0 : addressesFilter.length) > 0 ? `where: {id_in: ["${addressesFilter.join('","').toLowerCase()}"]}` : "";
342
345
  return (0, graphql_tag_1.default) `{
343
346
  pairs (${id_in_string}) {
344
347
  id
@@ -4,7 +4,7 @@ export interface IQueryBuilder {
4
4
  blockQuery(timestamp: number): DocumentNode;
5
5
  getBlockNumber: (response: any, network: Networks) => number;
6
6
  lendingPoolsV3Query(factory: Factory, addressesFilter: Address[], network: Networks): DocumentNode;
7
- lendingPoolsQuery(factory: Factory, addressesFilter: Address[], network: Networks): DocumentNode;
7
+ lendingPoolsQuery(factory: Factory, addressesFilter: Address[] | undefined, network: Networks): DocumentNode;
8
8
  userQuery(account: Address, network: Networks, factory: Factory): DocumentNode;
9
9
  tvlQuery(): DocumentNode;
10
10
  vaultsQuery(vaultType: VaultType, addressesFilter: Address[]): DocumentNode;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "impermax-sdk",
3
- "version": "2.1.9",
3
+ "version": "2.1.10",
4
4
  "description": "",
5
5
  "main": "./lib/index.js",
6
6
  "module": "./lib/index.js",