impermax-sdk 2.1.310 → 2.1.311

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/index.d.ts CHANGED
@@ -67,4 +67,5 @@ import OnchainNftlp from './onchain/impermaxFactory/lendingPool/nftlp';
67
67
  import OnchainAccountNftlp from './onchain/account/lendingPool/nftlp';
68
68
  import OffchainAccountBorrowableV3 from './offchain/account/lendingPool/offchainAccountBorrowableV3';
69
69
  import { PairState } from "./config/whitelist";
70
- export { offchain, OffchainMultichain, Offchain, OffchainPoolToken, OffchainLendingPool, OffchainCollateral, OffchainBorrowable, OffchainLendingPoolV2, OffchainCollateralV2, OffchainBorrowableV2, OffchainLendingPoolV3, OffchainCollateralV3, OffchainBorrowableV3, OffchainNftlp, OffchainNftlpUniswapV3, OffchainVault, OffchainLeveragedVault, OffchainLendingVault, OffchainHedgedVault, OffchainConfigManager, OffchainPairConfig, OffchainProposal, OffchainMultichainAccount, OffchainAccount, OffchainAccountPoolToken, OffchainAccountLendingPool, OffchainAccountCollateral, OffchainAccountBorrowable, OffchainAccountLendingPoolV2, OffchainAccountCollateralV2, OffchainAccountBorrowableV2, OffchainAccountLendingPoolV3, OffchainAccountCollateralV3, OffchainAccountBorrowableV3, OffchainAccountNftlp, OffchainAccountNftlpUniswapV3, OffchainLeveragedPosition, OffchainAccountVault, OffchainPriceHelper, OffchainSolidexHelper, PoolTokenData, BorrowableData, CollateralData, BorrowablePastData, TokenData, RewardData, PairData, FarmingPoolData, LendingPoolPastData, LendingPoolData, CollateralPosition, SupplyPosition, BorrowPosition, UserData, TvlData, XimxData, LendingVaultData, VaultPosition, PairConfigData, ProposalData, ProposalMetadata, VaultRisk, VaultType, onchain, Onchain, OnchainImpermaxFactory, OnchainImpermaxFactoryV2, OnchainImpermaxFactoryV3, OnchainPoolToken, OnchainLendingPool, OnchainBorrowable, OnchainCollateral, OnchainLendingPoolV2, OnchainBorrowableV2, OnchainCollateralV2, OnchainLendingPoolV3, OnchainBorrowableV3, OnchainCollateralV3, OnchainNftlp, OnchainNftlpUniswapV3, OnchainLendingVault, OnchainConfigManager, OnchainProposal, OnchainPairConfig, OnchainAccount, OnchainAccountPoolToken, OnchainAccountLendingPool, OnchainAccountBorrowable, OnchainAccountCollateral, OnchainAccountLendingPoolV2, OnchainAccountBorrowableV2, OnchainAccountCollateralV2, OnchainAccountLendingPoolV3, OnchainAccountBorrowableV3, OnchainAccountCollateralV3, OnchainAccountNftlp, OnchainAccountNftlpUniswapV3, OnchainAccountLendingVault, OnchainContractsHelper, OnchainInteractions, OnchainInteractionsPoolToken, OnchainInteractionsLendingPool, OnchainInteractionsCollateral, OnchainInteractionsBorrowable, OnchainInteractionsLendingPoolV2, OnchainInteractionsCollateralV2, OnchainInteractionsBorrowableV2, OnchainInteractionsLendingPoolV3, OnchainInteractionsCollateralV3, OnchainInteractionsBorrowableV3, OnchainInteractionsNftlp, OnchainInteractionsNftlpUniswapV3, OnchainInteractionsLendingVault, OnchainInteractionsConfigManager, Contract, ApprovalType, PermitData, OnchainConfig, Changes, NO_CHANGES, Values, AirdropData, PendingRewardUI, CollateralConfig, BorrowableV2Config, BorrowableV3Config, PairConfig, CLAIM_AGGREGATOR, IMPERMAX_CHEF, IMX, IMPERMAX_FACTORY, getNetworkFactories, getFactoryByAddress, LENDING_VAULT_WATCHER, MERKLE_DISTRIBUTOR_IBEX, MERKLE_DISTRIBUTOR_IBEX_2, MERKLE_DISTRIBUTOR_ETH, ROUTER, SIMPLE_UNISWAP_ORACLE, WETH, MERKLE_URL_ETH, MERKLE_URL_IBEX, MERKLE_URL_IBEX_2, hrAmms, AMM_FACTORY, getAmmByFactory, AMM_SUBGRAPH_URLS, ADD_LIQUIDITY_URLS, AMM_LP_FEE, DEBANK_IDS, ETH_SYMBOL, ETH_NAME, SOLIDEX_FACTORIES, BORROW_FEE_FACTORIES, OLD_KINK_MULTIPLIER_FACTORIES, LIQUIDATION_FEE_FACTORIES, V2_FACTORIES, Farms, hrFarms, FarmIndex, STAKED_LP_FACTORY, getFarmByStakedLPFactory, NOT_SYNCED, DEADLINE, ZERO, APPROVE_AMOUNT, IMPERMAX_SUBGRAPH_URL, IMPERMAX_CHEF_SUBGRAPH_URL, BLOCKS_SUBGRAPH_URL, XIMX_SUBGRAPH_URL, Networks, Factory, Extension, PoolTokenType, Amms, Address, NetworkIndex, FactoryIndex, AddressIndex, NetworkFactoryIndex, LendingPoolIndex, AmmIndex, DistributorDetails, ProposalState, WhitelistState, VaultListOrderBy, VaultListParams, LendingPoolListOrderBy, LendingPoolListParams, SortDirection, LendingPoolVersion, PositionType, AccountPosition, PermitType, Permits, Permit, Borrowable, decimalToBalance, MAX_TICK, MIN_TICK, formatPriceSqrtX96, uniV3TickToPrice, isV3Factory, UniswapV3Position, UniswapV2Position, Position, BorrowableEntity, PairState, SupplyPositionsParams, BorrowPositionsParams, TopPositionsParams, VaultPositionsParams, AccountEarningsParams };
70
+ import { AccountMarketData } from './offchain/account/offchainAccount';
71
+ export { offchain, OffchainMultichain, Offchain, OffchainPoolToken, OffchainLendingPool, OffchainCollateral, OffchainBorrowable, OffchainLendingPoolV2, OffchainCollateralV2, OffchainBorrowableV2, OffchainLendingPoolV3, OffchainCollateralV3, OffchainBorrowableV3, OffchainNftlp, OffchainNftlpUniswapV3, OffchainVault, OffchainLeveragedVault, OffchainLendingVault, OffchainHedgedVault, OffchainConfigManager, OffchainPairConfig, OffchainProposal, OffchainMultichainAccount, OffchainAccount, OffchainAccountPoolToken, OffchainAccountLendingPool, OffchainAccountCollateral, OffchainAccountBorrowable, OffchainAccountLendingPoolV2, OffchainAccountCollateralV2, OffchainAccountBorrowableV2, OffchainAccountLendingPoolV3, OffchainAccountCollateralV3, OffchainAccountBorrowableV3, OffchainAccountNftlp, OffchainAccountNftlpUniswapV3, OffchainLeveragedPosition, OffchainAccountVault, OffchainPriceHelper, OffchainSolidexHelper, PoolTokenData, BorrowableData, CollateralData, BorrowablePastData, TokenData, RewardData, PairData, FarmingPoolData, LendingPoolPastData, LendingPoolData, CollateralPosition, SupplyPosition, BorrowPosition, UserData, TvlData, XimxData, LendingVaultData, VaultPosition, PairConfigData, ProposalData, ProposalMetadata, VaultRisk, VaultType, onchain, Onchain, OnchainImpermaxFactory, OnchainImpermaxFactoryV2, OnchainImpermaxFactoryV3, OnchainPoolToken, OnchainLendingPool, OnchainBorrowable, OnchainCollateral, OnchainLendingPoolV2, OnchainBorrowableV2, OnchainCollateralV2, OnchainLendingPoolV3, OnchainBorrowableV3, OnchainCollateralV3, OnchainNftlp, OnchainNftlpUniswapV3, OnchainLendingVault, OnchainConfigManager, OnchainProposal, OnchainPairConfig, OnchainAccount, OnchainAccountPoolToken, OnchainAccountLendingPool, OnchainAccountBorrowable, OnchainAccountCollateral, OnchainAccountLendingPoolV2, OnchainAccountBorrowableV2, OnchainAccountCollateralV2, OnchainAccountLendingPoolV3, OnchainAccountBorrowableV3, OnchainAccountCollateralV3, OnchainAccountNftlp, OnchainAccountNftlpUniswapV3, OnchainAccountLendingVault, OnchainContractsHelper, OnchainInteractions, OnchainInteractionsPoolToken, OnchainInteractionsLendingPool, OnchainInteractionsCollateral, OnchainInteractionsBorrowable, OnchainInteractionsLendingPoolV2, OnchainInteractionsCollateralV2, OnchainInteractionsBorrowableV2, OnchainInteractionsLendingPoolV3, OnchainInteractionsCollateralV3, OnchainInteractionsBorrowableV3, OnchainInteractionsNftlp, OnchainInteractionsNftlpUniswapV3, OnchainInteractionsLendingVault, OnchainInteractionsConfigManager, Contract, ApprovalType, PermitData, OnchainConfig, Changes, NO_CHANGES, Values, AirdropData, PendingRewardUI, CollateralConfig, BorrowableV2Config, BorrowableV3Config, PairConfig, CLAIM_AGGREGATOR, IMPERMAX_CHEF, IMX, IMPERMAX_FACTORY, getNetworkFactories, getFactoryByAddress, LENDING_VAULT_WATCHER, MERKLE_DISTRIBUTOR_IBEX, MERKLE_DISTRIBUTOR_IBEX_2, MERKLE_DISTRIBUTOR_ETH, ROUTER, SIMPLE_UNISWAP_ORACLE, WETH, MERKLE_URL_ETH, MERKLE_URL_IBEX, MERKLE_URL_IBEX_2, hrAmms, AMM_FACTORY, getAmmByFactory, AMM_SUBGRAPH_URLS, ADD_LIQUIDITY_URLS, AMM_LP_FEE, DEBANK_IDS, ETH_SYMBOL, ETH_NAME, SOLIDEX_FACTORIES, BORROW_FEE_FACTORIES, OLD_KINK_MULTIPLIER_FACTORIES, LIQUIDATION_FEE_FACTORIES, V2_FACTORIES, Farms, hrFarms, FarmIndex, STAKED_LP_FACTORY, getFarmByStakedLPFactory, NOT_SYNCED, DEADLINE, ZERO, APPROVE_AMOUNT, IMPERMAX_SUBGRAPH_URL, IMPERMAX_CHEF_SUBGRAPH_URL, BLOCKS_SUBGRAPH_URL, XIMX_SUBGRAPH_URL, Networks, Factory, Extension, PoolTokenType, Amms, Address, NetworkIndex, FactoryIndex, AddressIndex, NetworkFactoryIndex, LendingPoolIndex, AmmIndex, DistributorDetails, ProposalState, WhitelistState, VaultListOrderBy, VaultListParams, LendingPoolListOrderBy, LendingPoolListParams, SortDirection, LendingPoolVersion, PositionType, AccountPosition, PermitType, Permits, Permit, Borrowable, decimalToBalance, MAX_TICK, MIN_TICK, formatPriceSqrtX96, uniV3TickToPrice, isV3Factory, UniswapV3Position, UniswapV2Position, Position, BorrowableEntity, PairState, SupplyPositionsParams, BorrowPositionsParams, TopPositionsParams, VaultPositionsParams, AccountEarningsParams, AccountMarketData };
@@ -3,6 +3,22 @@ import { Address, AddressIndex, Factory, FactoryIndex } from "../../config/types
3
3
  import OffchainAccountLendingPool from "./lendingPool";
4
4
  import OffchainAccountVault from "./vault/offchainAccountVault";
5
5
  import { VaultPosition, UserData } from "../offchainTypes";
6
+ import { PairState } from '../../config/whitelist';
7
+ import { Networks } from "../../config/types";
8
+ export type AccountEarningsParams = {
9
+ networks?: Array<Networks>;
10
+ pairState?: PairState;
11
+ };
12
+ export interface AccountMarketData {
13
+ borrowing: {
14
+ totalBalanceUSD: number;
15
+ totalAPR: number;
16
+ };
17
+ lending: {
18
+ totalBalanceUSD: number;
19
+ totalAPR: number;
20
+ };
21
+ }
6
22
  export default class OffchainAccount {
7
23
  private readonly offchain;
8
24
  private readonly accountAddress;
@@ -22,12 +38,20 @@ export default class OffchainAccount {
22
38
  getVaultsSuppliedUSD(): Promise<number>;
23
39
  getNftlpPositions(): Promise<FactoryIndex<Address[]>>;
24
40
  getVaultsEarningsUSD(): Promise<number>;
25
- getVaultsYearlyYieldUSD(): Promise<number>;
41
+ getVaultsYearlyYieldUSD(params?: AccountEarningsParams): Promise<number>;
26
42
  getVaultsDailyYieldUSD(): Promise<number>;
27
43
  getSupplyEarningsUSD(): Promise<number>;
28
- getSupplyYearlyYieldUSD(): Promise<number>;
44
+ getSupplyYearlyYieldUSD(params?: AccountEarningsParams): Promise<number>;
29
45
  getSupplyDailyYieldUSD(): Promise<number>;
46
+ getV2PositionsYearlyYieldUSD(params?: AccountEarningsParams): Promise<number>;
47
+ getV3PositionsYearlyYieldUSD(params?: AccountEarningsParams): Promise<number>;
48
+ getAccountMarketData(factory: Factory, poolAddress: Address): Promise<AccountMarketData>;
49
+ getMarketDailyProfitUSD(factory: Factory, poolAddress: Address): Promise<number>;
30
50
  getTotalEarningsUSD(): Promise<number>;
31
- getTotalYearlyYieldUSD(): Promise<number>;
51
+ getTotalYearlyYieldUSD(params?: AccountEarningsParams): Promise<number>;
32
52
  getTotalDailyYieldUSD(): Promise<number>;
53
+ /**
54
+ * 1. Filter by whitelisted/deprecated/blacklisted pairs
55
+ */
56
+ filterPairState(offchainAccountLendingPools: Array<OffchainAccountLendingPool>, pairState: PairState): OffchainAccountLendingPool[];
33
57
  }
@@ -5,8 +5,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const offchainAccountVault_1 = __importDefault(require("./vault/offchainAccountVault"));
7
7
  const offchainTypes_1 = require("../offchainTypes");
8
- // NOTE: Skipping supply positions earnings from blacklisted pools
9
- // TODO: Vault earnings the same, move vault whitelist to sdk
8
+ const offchainLendingPool_1 = require("../lendingPool/offchainLendingPool");
10
9
  class OffchainAccount {
11
10
  constructor(offchain, account) {
12
11
  this.getOffchain = () => this.offchain;
@@ -118,7 +117,7 @@ class OffchainAccount {
118
117
  }
119
118
  return earningsUSD;
120
119
  }
121
- async getVaultsYearlyYieldUSD() {
120
+ async getVaultsYearlyYieldUSD(params = {}) {
122
121
  let yieldUSD = 0;
123
122
  const vaultsUserData = await this.getVaultsUserData();
124
123
  if (!vaultsUserData)
@@ -165,30 +164,32 @@ class OffchainAccount {
165
164
  }
166
165
  return earningsUSD;
167
166
  }
168
- async getSupplyYearlyYieldUSD() {
167
+ async getSupplyYearlyYieldUSD(params = {}) {
169
168
  let yieldUSD = 0;
170
169
  const positionsUserData = await this.getSupplyPositions();
171
170
  if (!positionsUserData)
172
171
  return 0;
172
+ const lendingPools = [];
173
173
  // Get positions by factory
174
174
  for (const factory in positionsUserData) {
175
175
  const poolsOfFactory = positionsUserData[factory];
176
176
  // Get pools of this factory
177
177
  for (const poolAddress of poolsOfFactory) {
178
178
  const pool = await this.getLendingPool(factory, poolAddress);
179
- // Don't take into account earnings with blacklisted pools
180
- if (pool.getLendingPool().isBlacklisted())
181
- continue;
182
- // Get yearly yield = value * APR
183
- const [valueA, valueB, aprA, aprB] = await Promise.all([
184
- pool.getBorrowableA().getValue(),
185
- pool.getBorrowableB().getValue(),
186
- pool.getBorrowableA().getPoolToken().getSupplyAPR(),
187
- pool.getBorrowableB().getPoolToken().getSupplyAPR()
188
- ]);
189
- yieldUSD += valueA * aprA + valueB * aprB;
179
+ lendingPools.push(pool);
190
180
  }
191
181
  }
182
+ const filteredPools = this.filterPairState(lendingPools, params.pairState ?? { whitelisted: true, deprecated: true });
183
+ for (const pool of filteredPools) {
184
+ // Get yearly yield = value * APR
185
+ const [valueA, valueB, aprA, aprB] = await Promise.all([
186
+ pool.getBorrowableA().getValue(),
187
+ pool.getBorrowableB().getValue(),
188
+ pool.getBorrowableA().getPoolToken().getSupplyAPR(),
189
+ pool.getBorrowableB().getPoolToken().getSupplyAPR()
190
+ ]);
191
+ yieldUSD += valueA * aprA + valueB * aprB;
192
+ }
192
193
  return yieldUSD;
193
194
  }
194
195
  async getSupplyDailyYieldUSD() {
@@ -196,10 +197,162 @@ class OffchainAccount {
196
197
  const yearlyYield = await this.getSupplyYearlyYieldUSD();
197
198
  return yearlyYield / 365;
198
199
  }
199
- // TODO: Collaterals
200
- //
201
- // Overview
202
- //
200
+ async getV2PositionsYearlyYieldUSD(params = {}) {
201
+ let yieldUSD = 0;
202
+ const positionsUserData = await this.getBorrowPositions();
203
+ if (!positionsUserData)
204
+ return 0;
205
+ const lendingPools = [];
206
+ // Get positions by factory
207
+ for (const factory in positionsUserData) {
208
+ const poolsOfFactory = positionsUserData[factory];
209
+ // Get pools of this factory
210
+ for (const poolAddress of poolsOfFactory) {
211
+ const pool = await this.getLendingPool(factory, poolAddress);
212
+ lendingPools.push(pool);
213
+ }
214
+ }
215
+ const filteredPools = this.filterPairState(lendingPools, params.pairState ?? { whitelisted: true, deprecated: true });
216
+ for (const pool of filteredPools) {
217
+ const [position, priceX, priceY] = await Promise.all([
218
+ pool.getCollateral().getPositionObject(),
219
+ pool.getBorrowableA().getPoolToken().getTokenPriceAccurate(),
220
+ pool.getBorrowableB().getPoolToken().getTokenPriceAccurate(),
221
+ ]);
222
+ const poolYieldUSD = position.getLeveragedApr() * (position.getNetX() * priceX + position.getNetY() * priceY);
223
+ // NaN issue
224
+ yieldUSD += (poolYieldUSD || 0);
225
+ }
226
+ return yieldUSD;
227
+ }
228
+ async getV3PositionsYearlyYieldUSD(params = {}) {
229
+ let yieldUSD = 0;
230
+ const positionsUserData = await this.getNftlpPositions();
231
+ if (!positionsUserData)
232
+ return 0;
233
+ const lendingPools = [];
234
+ // Get positions by factory
235
+ for (const factory in positionsUserData) {
236
+ const poolsOfFactory = positionsUserData[factory];
237
+ // Get pools of this factory
238
+ for (const poolAddress of poolsOfFactory) {
239
+ const pool = await this.getLendingPool(factory, poolAddress);
240
+ lendingPools.push(pool);
241
+ }
242
+ }
243
+ const filteredPools = this.filterPairState(lendingPools, params.pairState ?? { whitelisted: true, deprecated: true });
244
+ for (const pool of filteredPools) {
245
+ const nftlp = pool.getCollateral().getNftlp();
246
+ const [priceX, priceY, tokenIds] = await Promise.all([
247
+ pool.getBorrowableA().getPoolToken().getTokenPriceAccurate(),
248
+ pool.getBorrowableB().getPoolToken().getTokenPriceAccurate(),
249
+ nftlp.getTokenPositions()
250
+ ]);
251
+ const nftlpPromises = Object.values(tokenIds).map(async (i) => {
252
+ const position = await nftlp.getPositionObject(Number(i.tokenId));
253
+ const poolYieldUSD = position.getLeveragedApr() * (position.getNetX() * priceX + position.getNetY() * priceY);
254
+ return yieldUSD += (poolYieldUSD || 0);
255
+ });
256
+ await Promise.all([...nftlpPromises]);
257
+ }
258
+ return yieldUSD;
259
+ }
260
+ async getAccountMarketData(factory, poolAddress) {
261
+ // Get market
262
+ const pool = await this.getLendingPool(factory, poolAddress);
263
+ // 1. Lending
264
+ const [valueA, valueB, aprA, aprB] = await Promise.all([
265
+ pool.getBorrowableA().getValue(),
266
+ pool.getBorrowableB().getValue(),
267
+ pool.getBorrowableA().getPoolToken().getSupplyAPR(),
268
+ pool.getBorrowableB().getPoolToken().getSupplyAPR()
269
+ ]);
270
+ const lending = {
271
+ totalBalanceUSD: valueA + valueB,
272
+ totalAPR: (valueA * aprA + valueB * aprB) / (valueA + valueB)
273
+ };
274
+ let collateralBalanceUSD = 0;
275
+ let collateralAPR = 0;
276
+ // 2. Borrowing
277
+ if (pool.getLendingPool().getLendingPoolVersion() === offchainLendingPool_1.LendingPoolVersion.V3) {
278
+ const nftlp = pool.getCollateral().getNftlp();
279
+ // Weighted APR of all nftlp positions
280
+ let totalWeightedAPR = 0;
281
+ const [priceX, priceY, tokenIds] = await Promise.all([
282
+ pool.getBorrowableA().getPoolToken().getTokenPriceAccurate(),
283
+ pool.getBorrowableB().getPoolToken().getTokenPriceAccurate(),
284
+ nftlp.getTokenPositions(),
285
+ ]);
286
+ await Promise.all([...Object.values(tokenIds).map(async (i) => {
287
+ const position = await nftlp.getPositionObject(Number(i.tokenId));
288
+ const positionValueUSD = position.getNetX() * priceX + position.getNetY() * priceY;
289
+ collateralBalanceUSD += positionValueUSD;
290
+ totalWeightedAPR += positionValueUSD * position.getLeveragedApr();
291
+ return;
292
+ })]);
293
+ collateralAPR = collateralBalanceUSD > 0 ? totalWeightedAPR / collateralBalanceUSD : 0;
294
+ }
295
+ else {
296
+ // For V2 just get position and add yto collateralYields
297
+ const collateral = pool.getCollateral();
298
+ ;
299
+ const [position, priceX, priceY] = await Promise.all([
300
+ collateral.getPositionObject(),
301
+ pool.getBorrowableA().getPoolToken().getTokenPriceAccurate(),
302
+ pool.getBorrowableB().getPoolToken().getTokenPriceAccurate(),
303
+ ]);
304
+ collateralBalanceUSD += (position.getNetX() * priceX + position.getNetY() * priceY);
305
+ collateralAPR = position.getLeveragedApr();
306
+ }
307
+ const borrowing = {
308
+ totalBalanceUSD: collateralBalanceUSD,
309
+ totalAPR: collateralAPR
310
+ };
311
+ return { borrowing, lending };
312
+ }
313
+ async getMarketDailyProfitUSD(factory, poolAddress) {
314
+ // Get market
315
+ const pool = await this.getLendingPool(factory, poolAddress);
316
+ // Escape if blacklisted pool
317
+ if (!pool.getLendingPool().isBlacklisted())
318
+ return 0;
319
+ // 1. Market Supply Yearly Yields
320
+ const [valueA, valueB, aprA, aprB] = await Promise.all([
321
+ pool.getBorrowableA().getValue(),
322
+ pool.getBorrowableB().getValue(),
323
+ pool.getBorrowableA().getPoolToken().getSupplyAPR(),
324
+ pool.getBorrowableB().getPoolToken().getSupplyAPR()
325
+ ]);
326
+ const yearlyMarketSupplyYields = valueA * aprA + valueB * aprB;
327
+ // 2. Collateral yearly yields
328
+ let yearlyMarketCollateralYields = 0;
329
+ // For V3, loop through all token Ids and add to collateralYields
330
+ if (pool.getLendingPool().getLendingPoolVersion() === offchainLendingPool_1.LendingPoolVersion.V3) {
331
+ const nftlp = pool.getCollateral().getNftlp();
332
+ const [priceX, priceY, tokenIds] = await Promise.all([
333
+ pool.getBorrowableA().getPoolToken().getTokenPriceAccurate(),
334
+ pool.getBorrowableB().getPoolToken().getTokenPriceAccurate(),
335
+ nftlp.getTokenPositions(),
336
+ ]);
337
+ await Promise.all([...Object.values(tokenIds).map(async (i) => {
338
+ const position = await nftlp.getPositionObject(Number(i.tokenId));
339
+ return yearlyMarketCollateralYields += position.getLeveragedApr() * (position.getNetX() * priceX + position.getNetY() * priceY);
340
+ })]);
341
+ }
342
+ else {
343
+ // For V2 just get position and add yto collateralYields
344
+ const collateral = pool.getCollateral();
345
+ ;
346
+ const [position, priceX, priceY] = await Promise.all([
347
+ collateral.getPositionObject(),
348
+ pool.getBorrowableA().getPoolToken().getTokenPriceAccurate(),
349
+ pool.getBorrowableB().getPoolToken().getTokenPriceAccurate(),
350
+ ]);
351
+ yearlyMarketCollateralYields += position.getLeveragedApr() * (position.getNetX() * priceX + position.getNetY() * priceY);
352
+ }
353
+ return (yearlyMarketCollateralYields + yearlyMarketSupplyYields) / 365;
354
+ }
355
+ // TODO: Collateral earnings? Not using this atm i think for anything other than vaults?
203
356
  async getTotalEarningsUSD() {
204
357
  const [supplyEarnings, vaultEarnings] = await Promise.all([
205
358
  this.getSupplyEarningsUSD(),
@@ -207,16 +360,33 @@ class OffchainAccount {
207
360
  ]);
208
361
  return supplyEarnings + vaultEarnings;
209
362
  }
210
- async getTotalYearlyYieldUSD() {
211
- const [supplyYield, vaultYield] = await Promise.all([
212
- this.getSupplyYearlyYieldUSD(),
213
- this.getVaultsYearlyYieldUSD()
363
+ async getTotalYearlyYieldUSD(params = {}) {
364
+ const [supplyYield, vaultYield, v2PositionYields, v3PositionYields] = await Promise.all([
365
+ this.getSupplyYearlyYieldUSD(params),
366
+ this.getVaultsYearlyYieldUSD(params),
367
+ this.getV2PositionsYearlyYieldUSD(params),
368
+ this.getV3PositionsYearlyYieldUSD(params),
214
369
  ]);
215
- return supplyYield + vaultYield;
370
+ return supplyYield + vaultYield + v2PositionYields + v3PositionYields;
216
371
  }
217
372
  async getTotalDailyYieldUSD() {
218
373
  const yearlyYield = await this.getTotalYearlyYieldUSD();
219
374
  return yearlyYield / 365;
220
375
  }
376
+ /**
377
+ * 1. Filter by whitelisted/deprecated/blacklisted pairs
378
+ */
379
+ filterPairState(offchainAccountLendingPools, pairState) {
380
+ if (!pairState.whitelisted && !pairState.blacklisted && !pairState.deprecated)
381
+ return offchainAccountLendingPools;
382
+ const pools = [];
383
+ if (pairState.whitelisted)
384
+ pools.push(...offchainAccountLendingPools.filter(i => i.getLendingPool().isWhitelisted()));
385
+ if (pairState.blacklisted)
386
+ pools.push(...offchainAccountLendingPools.filter(i => i.getLendingPool().isBlacklisted()));
387
+ if (pairState.deprecated)
388
+ pools.push(...offchainAccountLendingPools.filter(i => i.getLendingPool().isDeprecated()));
389
+ return pools;
390
+ }
221
391
  }
222
392
  exports.default = OffchainAccount;
@@ -85,6 +85,7 @@ export default class OffchainMultichainAccount {
85
85
  getCollateralV2BalanceUSD(): Promise<number>;
86
86
  getNetAPR(): Promise<number>;
87
87
  getVaultsEarningsUSD(params?: AccountEarningsParams): Promise<number>;
88
+ getCollateralV2EarningsUSD(params?: AccountEarningsParams): Promise<number>;
88
89
  getSupplyEarningsUSD(params?: AccountEarningsParams): Promise<number>;
89
90
  getTotalEarningsUSD(params?: AccountEarningsParams): Promise<number>;
90
91
  getTotalYearlyYieldUSD(params?: AccountEarningsParams): Promise<number>;
@@ -178,7 +178,7 @@ class OffchainMultichainAccount {
178
178
  pool.getLendingPool().getLendingPoolData(),
179
179
  pool.getLendingPool().getFactory(),
180
180
  ]);
181
- const totalValue = position.getNetX() * priceX + position.getNetY() * priceY;
181
+ const totalValue = (position.getNetX() * priceX + position.getNetY() * priceY) || 0;
182
182
  return {
183
183
  name: `${symbolA}/${symbolB}`,
184
184
  value: totalValue,
@@ -190,7 +190,7 @@ class OffchainMultichainAccount {
190
190
  }));
191
191
  const v3PositionValues = await Promise.all(v3Positions.map(async (pool) => {
192
192
  const nftlp = pool.getCollateral().getNftlp();
193
- const [priceX, priceY, symbolA, symbolB, network, data, factory] = await Promise.all([
193
+ const [priceX, priceY, symbolA, symbolB, network, data, factory, tokenIds] = await Promise.all([
194
194
  pool.getBorrowableA().getPoolToken().getTokenPriceAccurate(),
195
195
  pool.getBorrowableB().getPoolToken().getTokenPriceAccurate(),
196
196
  pool.getBorrowableA().getPoolToken().getSymbol(),
@@ -198,14 +198,14 @@ class OffchainMultichainAccount {
198
198
  pool.getLendingPool().getOffchain().network,
199
199
  pool.getLendingPool().getLendingPoolData(),
200
200
  pool.getLendingPool().getFactory(),
201
+ nftlp.getTokenPositions()
201
202
  ]);
202
- const tokenIds = await nftlp.getTokenPositions();
203
203
  const nftlpPromises = Object.values(tokenIds).map(async (i) => {
204
204
  const position = await nftlp.getPositionObject(Number(i.tokenId));
205
205
  return position.getNetX() * priceX + position.getNetY() * priceY;
206
206
  });
207
207
  const nftlpValues = await Promise.all([...nftlpPromises]);
208
- const totalValue = nftlpValues.reduce((acc, val) => acc + val, 0);
208
+ const totalValue = nftlpValues.reduce((acc, val) => acc + val, 0) || 0;
209
209
  return {
210
210
  name: `${symbolA}/${symbolB}`,
211
211
  value: totalValue,
@@ -226,7 +226,7 @@ class OffchainMultichainAccount {
226
226
  pool.getLendingPool().getLendingPoolData(),
227
227
  pool.getLendingPool().getFactory(),
228
228
  ]);
229
- const totalValue = valueA + valueB;
229
+ const totalValue = (valueA + valueB) || 0;
230
230
  return {
231
231
  name: `${symbolA}/${symbolB}`,
232
232
  value: totalValue,
@@ -341,6 +341,15 @@ class OffchainMultichainAccount {
341
341
  const results = await Promise.all(networkPromises);
342
342
  return results.reduce((acc, val) => acc + val, 0);
343
343
  }
344
+ async getCollateralV2EarningsUSD(params = {}) {
345
+ const allNetworks = params.networks ?? Object.values(types_1.Networks);
346
+ const networkPromises = allNetworks.map(async (network) => {
347
+ const offchainAccount = this.getOffchainAccount(network);
348
+ return offchainAccount.getSupplyEarningsUSD();
349
+ });
350
+ const results = await Promise.all(networkPromises);
351
+ return results.reduce((acc, val) => acc + val, 0);
352
+ }
344
353
  async getSupplyEarningsUSD(params = {}) {
345
354
  const allNetworks = params.networks ?? Object.values(types_1.Networks);
346
355
  const networkPromises = allNetworks.map(async (network) => {
@@ -363,7 +372,7 @@ class OffchainMultichainAccount {
363
372
  const allNetworks = params.networks ?? Object.values(types_1.Networks);
364
373
  const networkPromises = allNetworks.map(async (network) => {
365
374
  const offchainAccount = this.getOffchainAccount(network);
366
- return offchainAccount.getTotalYearlyYieldUSD();
375
+ return offchainAccount.getTotalYearlyYieldUSD(params);
367
376
  });
368
377
  const results = await Promise.all(networkPromises);
369
378
  return results.reduce((acc, val) => acc + val, 0);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "impermax-sdk",
3
- "version": "2.1.310",
3
+ "version": "2.1.311",
4
4
  "description": "",
5
5
  "main": "./lib/index.js",
6
6
  "module": "./lib/index.js",