@defisaver/positions-sdk 2.1.161-portfolio-api-dev → 2.1.161-portfolio-api-2-dev

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.
Files changed (58) hide show
  1. package/cjs/aaveV3/index.d.ts +2 -12
  2. package/cjs/aaveV3/sgho.d.ts +2 -16
  3. package/cjs/claiming/aaveV3.d.ts +2 -2
  4. package/cjs/claiming/ethena.d.ts +2 -1
  5. package/cjs/claiming/king.d.ts +2 -1
  6. package/cjs/claiming/spark.d.ts +2 -2
  7. package/cjs/fluid/index.d.ts +5 -49
  8. package/cjs/liquity/index.d.ts +2 -12
  9. package/cjs/liquityV2/index.d.ts +3 -23
  10. package/cjs/portfolio/index.d.ts +5 -5
  11. package/cjs/portfolio/index.js +46 -33
  12. package/cjs/types/aave.d.ts +83 -0
  13. package/cjs/types/fluid.d.ts +13 -0
  14. package/cjs/types/index.d.ts +1 -0
  15. package/cjs/types/index.js +1 -0
  16. package/cjs/types/liquity.d.ts +12 -0
  17. package/cjs/types/liquityV2.d.ts +24 -0
  18. package/cjs/types/portfolio.d.ts +88 -10
  19. package/cjs/umbrella/index.d.ts +2 -3
  20. package/esm/aaveV3/index.d.ts +2 -12
  21. package/esm/aaveV3/sgho.d.ts +2 -16
  22. package/esm/claiming/aaveV3.d.ts +2 -2
  23. package/esm/claiming/aaveV3.js +1 -1
  24. package/esm/claiming/ethena.d.ts +2 -1
  25. package/esm/claiming/king.d.ts +2 -1
  26. package/esm/claiming/spark.d.ts +2 -2
  27. package/esm/claiming/spark.js +1 -1
  28. package/esm/fluid/index.d.ts +5 -49
  29. package/esm/liquity/index.d.ts +2 -12
  30. package/esm/liquityV2/index.d.ts +3 -23
  31. package/esm/portfolio/index.d.ts +5 -5
  32. package/esm/portfolio/index.js +46 -33
  33. package/esm/types/aave.d.ts +83 -0
  34. package/esm/types/fluid.d.ts +13 -0
  35. package/esm/types/index.d.ts +1 -0
  36. package/esm/types/index.js +1 -0
  37. package/esm/types/liquity.d.ts +12 -0
  38. package/esm/types/liquityV2.d.ts +24 -0
  39. package/esm/types/portfolio.d.ts +88 -10
  40. package/esm/umbrella/index.d.ts +2 -3
  41. package/package.json +1 -1
  42. package/src/aaveV3/index.ts +2 -1
  43. package/src/aaveV3/sgho.ts +2 -17
  44. package/src/claiming/aaveV3.ts +4 -2
  45. package/src/claiming/ethena.ts +5 -5
  46. package/src/claiming/king.ts +3 -3
  47. package/src/claiming/spark.ts +6 -4
  48. package/src/fluid/index.ts +4 -3
  49. package/src/liquity/index.ts +2 -2
  50. package/src/liquityV2/index.ts +3 -3
  51. package/src/portfolio/index.ts +72 -55
  52. package/src/types/aave.ts +86 -0
  53. package/src/types/fluid.ts +14 -0
  54. package/src/types/index.ts +2 -1
  55. package/src/types/liquity.ts +13 -1
  56. package/src/types/liquityV2.ts +26 -1
  57. package/src/types/portfolio.ts +111 -11
  58. package/src/umbrella/index.ts +2 -1
@@ -1,19 +1,33 @@
1
- import { AaveV2PositionData, AaveV3PositionData, AaveVersions } from './aave';
2
- import { AaveV4AccountData, AaveV4SpokesType } from './aaveV4';
1
+ import { AaveV2MarketData, AaveV2PositionData, AaveV3MarketData, AaveV3PositionData, AaveVersions, StakeAaveData, UmbrellaStakingData } from './aave';
2
+ import { AaveV4AccountData, AaveV4SpokeData, AaveV4SpokesType } from './aaveV4';
3
+ import { AaveRewardsClaimableToken, EthenaAirdropClaimableToken, KingRewardsClaimableToken, MerklRewardsClaimableToken, SparkAirdropClaimableToken, SparkRewardsClaimableToken, UniswapAirdropClaimableToken } from './claiming';
3
4
  import { EthAddress } from './common';
4
- import { CompoundV2PositionData, CompoundV3PositionData, CompoundVersions } from './compound';
5
- import { CrvUSDUserData, CrvUSDVersions } from './curveUsd';
6
- import { FluidVaultData } from './fluid';
7
- import { LiquityTroveInfo } from './liquity';
8
- import { LlamaLendUserData, LlamaLendVersionsType } from './llamaLend';
5
+ import { CompoundV2MarketsData, CompoundV2PositionData, CompoundV3MarketsData, CompoundV3PositionData, CompoundVersions } from './compound';
6
+ import { CrvUSDGlobalMarketData, CrvUSDUserData, CrvUSDVersions } from './curveUsd';
7
+ import { FluidEarnPositionData, FluidVaultData } from './fluid';
8
+ import { LiquityStakingData, LiquityTroveInfo } from './liquity';
9
+ import { LiquityV2MarketData, LiquityV2SBoldYBoldData, LiquityV2StakingData, LiquityV2Versions } from './liquityV2';
10
+ import { LlamaLendGlobalMarketData, LlamaLendUserData, LlamaLendVersionsType } from './llamaLend';
9
11
  import { CdpData } from './maker';
10
- import { MorphoBluePositionData, MorphoBlueVersions } from './morphoBlue';
11
- import { MorphoMidnightPositionData, MorphoMidnightVersions } from './morphoMidnight';
12
- import { SparkPositionData, SparkVersions } from './spark';
12
+ import { MorphoBlueEarnData, MorphoBlueMarketInfo, MorphoBluePositionData, MorphoBlueVersions } from './morphoBlue';
13
+ import { MorphoMidnightMarketInfo, MorphoMidnightPositionData, MorphoMidnightVersions } from './morphoMidnight';
14
+ import { SparkMarketsData, SparkPositionData, SparkVersions } from './spark';
13
15
  export interface PortfolioProtocolData<T> {
14
16
  error: string;
15
17
  data: T | null;
16
18
  }
19
+ /** A failed fetch of a protocol that, when it succeeds, getPortfolioData returns unwrapped rather than as `{ error, data }`. */
20
+ export interface PortfolioProtocolError {
21
+ error: string;
22
+ data: null;
23
+ }
24
+ /** What getPortfolioData reads besides positions and markets. Both default to true. */
25
+ export interface PortfolioDataOptions {
26
+ /** stakingPositions; with false it comes back as {} and no staking source is read. */
27
+ staking?: boolean;
28
+ /** rewardsData; with false it comes back as {} and no rewards source is read. */
29
+ rewards?: boolean;
30
+ }
17
31
  export interface PortfolioPositionsDataForAddress {
18
32
  aaveV3: {
19
33
  [key in AaveVersions]?: PortfolioProtocolData<AaveV3PositionData>;
@@ -59,3 +73,67 @@ export interface PortfolioPositionsDataForAddress {
59
73
  export interface PortfolioPositionsData {
60
74
  [key: EthAddress]: PortfolioPositionsDataForAddress;
61
75
  }
76
+ /**
77
+ * The staking positions getPortfolioData returns for an address. The shapes are uneven, and the DeFi Saver app
78
+ * parses them as they are: a protocol read once per address comes back unwrapped on success, as
79
+ * `{ error, data: null }` on failure, and as {} (or Fluid's `{ error: '', data: {} }`) on a network it is not read on.
80
+ */
81
+ export interface PortfolioStakingPositionsDataForAddress {
82
+ /** stkAAVE, stkGHO and sGHO; mainnet only. */
83
+ aaveV3: StakeAaveData | PortfolioProtocolError | {};
84
+ /** Morpho Blue supply without a borrow (Earn), by market; only markets with a deposit or an error. */
85
+ morphoBlue: {
86
+ [key in MorphoBlueVersions]?: PortfolioProtocolData<MorphoBlueEarnData>;
87
+ };
88
+ compoundV3: Record<string, never>;
89
+ spark: Record<string, never>;
90
+ aaveV2: Record<string, never>;
91
+ compoundV2: Record<string, never>;
92
+ /** LQTY staking and the LUSD stability pool; mainnet only. */
93
+ liquity: LiquityStakingData | PortfolioProtocolError | {};
94
+ /** Stability pool deposits, by market; mainnet only, legacy markets left out. */
95
+ liquityV2: {
96
+ [key in LiquityV2Versions]?: PortfolioProtocolData<LiquityV2StakingData>;
97
+ };
98
+ /** Fluid lending (fToken) deposits; `{ error: '', data: {} }` on a network without Fluid. */
99
+ fluid: FluidEarnPositionData[] | PortfolioProtocolError | {
100
+ error: string;
101
+ data: Record<string, never>;
102
+ };
103
+ /** Umbrella stakes; absent off mainnet. */
104
+ umbrella?: UmbrellaStakingData | PortfolioProtocolError;
105
+ /** sBOLD, yBOLD and stYBOLD; data is null off mainnet. */
106
+ liquityV2SBoldYBold: PortfolioProtocolData<LiquityV2SBoldYBoldData>;
107
+ }
108
+ export type PortfolioStakingPositionsData = Record<EthAddress, PortfolioStakingPositionsDataForAddress>;
109
+ /** The claimable rewards getPortfolioData returns for an address. Off mainnet only Merkl and Aave V3 are read. */
110
+ export interface PortfolioRewardsDataForAddress {
111
+ merkl: PortfolioProtocolData<MerklRewardsClaimableToken[]>;
112
+ aaveV3: {
113
+ [key in AaveVersions]?: PortfolioProtocolData<AaveRewardsClaimableToken[]>;
114
+ };
115
+ spark: {
116
+ [key in SparkVersions]?: PortfolioProtocolData<SparkRewardsClaimableToken[]>;
117
+ };
118
+ /** The SPK airdrop. */
119
+ spk: PortfolioProtocolData<SparkAirdropClaimableToken[]>;
120
+ king: PortfolioProtocolData<KingRewardsClaimableToken[]>;
121
+ /** {} off mainnet. */
122
+ ethena: PortfolioProtocolData<EthenaAirdropClaimableToken[]> | {};
123
+ uniswap: PortfolioProtocolData<UniswapAirdropClaimableToken[]>;
124
+ }
125
+ export type PortfolioRewardsData = Record<EthAddress, PortfolioRewardsDataForAddress>;
126
+ /** The `markets` getPortfolioData returns: every market it read, by protocol, keyed by market or spoke. */
127
+ export interface PortfolioMarketsData {
128
+ morphoMarketsData: Record<string, MorphoBlueMarketInfo>;
129
+ morphoMidnightMarketsData: Record<string, MorphoMidnightMarketInfo>;
130
+ compoundV3MarketsData: Record<string, CompoundV3MarketsData>;
131
+ sparkMarketsData: Record<string, SparkMarketsData>;
132
+ aaveV3MarketsData: Record<string, AaveV3MarketData>;
133
+ aaveV2MarketsData: Record<string, AaveV2MarketData>;
134
+ compoundV2MarketsData: Record<string, CompoundV2MarketsData>;
135
+ crvUsdMarketsData: Record<string, CrvUSDGlobalMarketData>;
136
+ llamaLendMarketsData: Record<string, LlamaLendGlobalMarketData>;
137
+ liquityV2MarketsData: Record<string, LiquityV2MarketData>;
138
+ aaveV4SpokesData: Record<string, AaveV4SpokeData>;
139
+ }
@@ -1,5 +1,4 @@
1
1
  import { Client } from 'viem';
2
2
  import { EthAddress, NetworkNumber } from '../types/common';
3
- export declare const getUmbrellaData: (provider: Client, network: NetworkNumber, address: EthAddress) => Promise<{
4
- [k: string]: any;
5
- }>;
3
+ import { UmbrellaStakingData } from '../types/aave';
4
+ export declare const getUmbrellaData: (provider: Client, network: NetworkNumber, address: EthAddress) => Promise<UmbrellaStakingData>;
@@ -1,5 +1,5 @@
1
1
  import { Client } from 'viem';
2
- import { AaveMarketInfo, AaveV3MarketData, AaveV3PositionData, AaveV3UsedAssets, EModeCategoryDataMapping } from '../types';
2
+ import { AaveMarketInfo, AaveV3MarketData, AaveV3PositionData, AaveV3UsedAssets, EModeCategoryDataMapping, StakeAaveData } from '../types';
3
3
  import { Blockish, EthAddress, EthereumProvider, NetworkNumber, PositionBalances } from '../types/common';
4
4
  import { getMeritCampaigns } from './merit';
5
5
  import { getMerkleCampaigns } from './merkl';
@@ -37,17 +37,7 @@ export declare const getAaveV3AccountData: (provider: EthereumProvider, network:
37
37
  export declare const getAaveV3FullPositionData: (provider: EthereumProvider, network: NetworkNumber, address: EthAddress, market: AaveMarketInfo) => Promise<AaveV3PositionData>;
38
38
  export declare const REWARDABLE_ASSETS: readonly ["0x028171bCA77440897B824Ca71D1c56caC55b68A3", "0x6C3c78838c761c6Ac7bE9F59fe808ea2A6E4379d", "0xD37EE7e4f452C6638c96536e68090De8cBcdb583", "0x279AF5b99540c1A3A7E3CDd326e19659401eF99e", "0xBcca60bB61934080951369a648Fb03DF4F96263C", "0x619beb58998eD2278e08620f97007e1116D5D25b", "0x3Ed3B47Dd13EC9a98b44e6204A523E766B225811", "0x531842cEbbdD378f8ee36D171d6cC9C4fcf475Ec", "0x9ff58f4fFB29fA2266Ab25e75e2A8b3503311656", "0x9c39809Dec7F95F5e0713634a4D0701329B3b4d2", "0x030bA81f1c18d280636F32af80b9AAd02Cf0854e", "0xF63B34710400CAd3e044cFfDcAb00a0f32E33eCf", "0xa06bC25B5805d5F8d82847D191Cb4Af5A3e873E0", "0x0b8f12b1788BFdE65Aa1ca52E3e9F3Ba401be16D", "0x6C5024Cd4F8A59110119C56f8933403A539555EB", "0xdC6a3Ab17299D9C2A412B0e0a4C1f55446AE0817", "0x5165d24277cD063F5ac44Efd447B27025e888f37", "0x7EbD09022Be45AD993BAA1CEc61166Fcc8644d97", "0xF256CC7847E919FAc9B808cC216cAc87CCF2f47a", "0xfAFEDF95E21184E3d880bd56D4806c4b8d31c69A", "0xB9D7CB55f463405CDfBe4E90a6D2Df01C2B92BF1", "0x5BdB050A92CADcCfCDcCCBFC17204a1C9cC0Ab73", "0xc713e5E149D5D0715DcD1c156a020976e7E56B88", "0xba728eAd5e496BE00DCF66F650b6d7758eCB50f8", "0x101cc05f4A51C0319f570d5E146a8C625198e636", "0x01C0eb1f8c6F1C1bF74ae028697ce7AA2a8b0E92", "0xc9BC48c72154ef3e5425641a3c747242112a46AF", "0xB5385132EE8321977FfF44b60cDE9fE9AB0B4e6b", "0x272F97b7a56a387aE942350bBC7Df5700f8a4576", "0x13210D4Fe0d5402bd7Ecbc4B5bC5cFcA3b71adB0", "0x2e8f4bdbe3d47d7d7de490437aea9915d930f1a3", "0xfdb93b3b10936cf81fa59a02a7523b6e2149b2b7", "0xA361718326c15715591c299427c62086F69923D9", "0xbA429f7011c9fa04cDd46a2Da24dc0FF0aC6099c", "0xd4937682df3C8aEF4FE912A96A74121C0829E664", "0xfE8F19B17fFeF0fDbfe2671F248903055AFAA8Ca", "0x683923dB55Fead99A79Fa01A27EeC3cB19679cC3", "0xC2e10006AccAb7B45D9184FcF5b7EC7763f5BaAe", "0x8dAE6Cb04688C62d939ed9B68d32Bc62e49970b1", "0x00ad8eBF64F141f1C81e9f8f792d3d1631c6c684", "0x6F634c6135D2EBD550000ac92F494F9CB8183dAe", "0x4dDff5885a67E4EffeC55875a3977D7E60F82ae0"];
39
39
  export declare const fetchYearlyMeritApyForStakingGho: () => Promise<string>;
40
- export declare const getStakeAaveData: (provider: Client, network: NetworkNumber, address: EthAddress) => Promise<{
41
- activatedCooldown: string;
42
- activatedCooldownAmount: string;
43
- stkAaveRewardsBalance: string;
44
- aaveRewardsBalance: string;
45
- stkAaveBalance: string;
46
- stkGhoBalance: string;
47
- ghoMeritApy: string;
48
- stkAaveApy: string;
49
- sgho: import("./sgho").SghoData;
50
- }>;
40
+ export declare const getStakeAaveData: (provider: Client, network: NetworkNumber, address: EthAddress) => Promise<StakeAaveData>;
51
41
  export { getMeritCampaigns, getMerkleCampaigns, };
52
42
  export { getSghoData } from './sgho';
53
43
  export type { SghoData, SghoUserData } from './sgho';
@@ -1,18 +1,4 @@
1
1
  import { EthAddress, NetworkNumber } from '../types/common';
2
- export interface SghoUserData {
3
- shares: string;
4
- balance: string;
5
- maxDeposit: string;
6
- maxWithdraw: string;
7
- underlyingBalance: string;
8
- }
9
- export interface SghoData {
10
- totalAssets: string;
11
- totalSupply: string;
12
- supplyCap: string;
13
- /** Target savings rate as an APY percent (e.g. "4.25" for 4.25%). */
14
- targetRate: string;
15
- paused: boolean;
16
- user: SghoUserData;
17
- }
2
+ import { SghoData } from '../types/aave';
3
+ export type { SghoData, SghoUserData } from '../types/aave';
18
4
  export declare const getSghoData: (network: NetworkNumber, address?: EthAddress) => Promise<SghoData>;
@@ -1,6 +1,6 @@
1
1
  import { Client } from 'viem';
2
2
  import { EthAddress, NetworkNumber } from '../types';
3
- import { ClaimableToken, MerklRewardsClaimableToken } from '../types/claiming';
4
- export declare function getUnclaimedRewardsForAllMarkets(provider: Client, network: NetworkNumber, walletAddress: EthAddress, marketAddress: EthAddress): Promise<ClaimableToken[]>;
3
+ import { AaveRewardsClaimableToken, ClaimableToken, MerklRewardsClaimableToken } from '../types/claiming';
4
+ export declare function getUnclaimedRewardsForAllMarkets(provider: Client, network: NetworkNumber, walletAddress: EthAddress, marketAddress: EthAddress): Promise<AaveRewardsClaimableToken[]>;
5
5
  export declare function getMerklUnclaimedRewards(account: EthAddress, network: NetworkNumber): Promise<MerklRewardsClaimableToken[]>;
6
6
  export declare function getMeritUnclaimedRewards(account: EthAddress, network: NetworkNumber): Promise<ClaimableToken[]>;
@@ -8,7 +8,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
8
8
  });
9
9
  };
10
10
  import Dec from 'decimal.js';
11
- import { ClaimType } from '../types/claiming';
11
+ import { ClaimType, } from '../types/claiming';
12
12
  import { AaveIncentiveDataProviderV3ContractViem, AaveRewardsControllerViem, } from '../contracts';
13
13
  import { compareAddresses, getEthAmountForDecimals, LONGER_TIMEOUT } from '../services/utils';
14
14
  import { getAaveUnderlyingSymbol } from '../helpers/aaveHelpers';
@@ -1,3 +1,4 @@
1
1
  import { EthAddress } from '../types/common';
2
+ import { EthenaAirdropClaimableToken } from '../types/claiming';
2
3
  export declare const fetchEthenaAirdropReward: (address: EthAddress) => Promise<any>;
3
- export declare const fetchEthenaAirdropRewards: (walletAddresses: EthAddress[]) => Promise<Record<string, any[]>>;
4
+ export declare const fetchEthenaAirdropRewards: (walletAddresses: EthAddress[]) => Promise<Record<string, EthenaAirdropClaimableToken[]>>;
@@ -1,4 +1,5 @@
1
1
  import { Client } from 'viem';
2
2
  import { EthAddress, NetworkNumber } from '../types/common';
3
+ import { KingRewardsClaimableToken } from '../types/claiming';
3
4
  export declare const fetchKingRewards: (walletAddress: EthAddress) => Promise<any>;
4
- export declare const getKingRewards: (provider: Client, network: NetworkNumber, walletAddresses: EthAddress[]) => Promise<Record<string, any[]>>;
5
+ export declare const getKingRewards: (provider: Client, network: NetworkNumber, walletAddresses: EthAddress[]) => Promise<Record<string, KingRewardsClaimableToken[]>>;
@@ -1,6 +1,6 @@
1
1
  import { Client } from 'viem';
2
2
  import { EthAddress, NetworkNumber } from '../types/common';
3
- import { SparkRewardsClaimableToken } from '../types/claiming';
3
+ import { SparkAirdropClaimableToken, SparkRewardsClaimableToken } from '../types/claiming';
4
4
  export declare const fetchSpkAirdropRewards: (walletAddress: EthAddress) => Promise<any>;
5
- export declare const fetchSparkAirdropRewards: (provider: Client, network: NetworkNumber, walletAddresses: EthAddress[]) => Promise<Record<string, any[]>>;
5
+ export declare const fetchSparkAirdropRewards: (provider: Client, network: NetworkNumber, walletAddresses: EthAddress[]) => Promise<Record<string, SparkAirdropClaimableToken[]>>;
6
6
  export declare const fetchSparkRewards: (provider: Client, network: NetworkNumber, walletAddress: EthAddress, marketAddress: EthAddress) => Promise<SparkRewardsClaimableToken[]>;
@@ -10,7 +10,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
10
10
  import { assetAmountInEth, getAssetInfoByAddress } from '@defisaver/tokens';
11
11
  import Dec from 'decimal.js';
12
12
  import { createViemContractFromConfigFunc, SparkIncentiveDataProviderContractViem, SparkRewardsControllerViem, } from '../contracts';
13
- import { ClaimType, SparkAirdropType } from '../types/claiming';
13
+ import { ClaimType, SparkAirdropType, } from '../types/claiming';
14
14
  import { compareAddresses, getEthAmountForDecimals } from '../services/utils';
15
15
  const IGNITION_REWARDS = '0xCBA0C0a2a0B6Bb11233ec4EA85C5bFfea33e724d';
16
16
  const PFL3_REWARDS = '0x7ac96180C4d6b2A328D3a19ac059D0E7Fc3C6d41';
@@ -1,6 +1,6 @@
1
1
  import { Client, PublicClient } from 'viem';
2
2
  import { EthAddress, EthereumProvider, NetworkNumber } from '../types/common';
3
- import { FluidAssetsData, FluidMarketData, FluidMarketInfo, FluidUsedAssets, FluidVaultData, InnerFluidMarketData } from '../types';
3
+ import { FluidAssetsData, FluidEarnPositionData, FluidMarketData, FluidMarketInfo, FluidUsedAssets, FluidVaultData, InnerFluidMarketData } from '../types';
4
4
  export { FluidMerklOpportunityType, buildFluidMerklRewardMap, getFluidMerklCampaigns, attachFluidMerklIncentives, } from './merkl';
5
5
  export declare const EMPTY_USED_ASSET: {
6
6
  isSupplied: boolean;
@@ -71,54 +71,10 @@ export declare const getFluidTokenData: (provider: EthereumProvider, network: Ne
71
71
  depositRate: string;
72
72
  withdrawRate: string;
73
73
  }>;
74
- export declare const _getFluidDepositData: (provider: Client, network: NetworkNumber, token: string, address: EthAddress) => Promise<{
75
- fTokenAddress: string | undefined;
76
- fTokenSymbol: string;
77
- decimals: string;
78
- totalDeposited: string;
79
- withdrawable: string;
80
- apy: string;
81
- depositRate: string;
82
- withdrawRate: string;
83
- deposited: string;
84
- depositedShares: string;
85
- }>;
86
- export declare const getFluidDepositData: (provider: EthereumProvider, network: NetworkNumber, token: string, address: EthAddress) => Promise<{
87
- fTokenAddress: string | undefined;
88
- fTokenSymbol: string;
89
- decimals: string;
90
- totalDeposited: string;
91
- withdrawable: string;
92
- apy: string;
93
- depositRate: string;
94
- withdrawRate: string;
95
- deposited: string;
96
- depositedShares: string;
97
- }>;
98
- export declare const _getAllUserEarnPositionsWithFTokens: (provider: Client, network: NetworkNumber, user: EthAddress) => Promise<{
99
- fTokenAddress: string | undefined;
100
- fTokenSymbol: string;
101
- decimals: string;
102
- totalDeposited: string;
103
- withdrawable: string;
104
- apy: string;
105
- depositRate: string;
106
- withdrawRate: string;
107
- deposited: string;
108
- depositedShares: string;
109
- }[]>;
110
- export declare const getAllUserEarnPositionsWithFTokens: (provider: EthereumProvider, network: NetworkNumber, user: EthAddress) => Promise<{
111
- fTokenAddress: string | undefined;
112
- fTokenSymbol: string;
113
- decimals: string;
114
- totalDeposited: string;
115
- withdrawable: string;
116
- apy: string;
117
- depositRate: string;
118
- withdrawRate: string;
119
- deposited: string;
120
- depositedShares: string;
121
- }[]>;
74
+ export declare const _getFluidDepositData: (provider: Client, network: NetworkNumber, token: string, address: EthAddress) => Promise<FluidEarnPositionData>;
75
+ export declare const getFluidDepositData: (provider: EthereumProvider, network: NetworkNumber, token: string, address: EthAddress) => Promise<FluidEarnPositionData>;
76
+ export declare const _getAllUserEarnPositionsWithFTokens: (provider: Client, network: NetworkNumber, user: EthAddress) => Promise<FluidEarnPositionData[]>;
77
+ export declare const getAllUserEarnPositionsWithFTokens: (provider: EthereumProvider, network: NetworkNumber, user: EthAddress) => Promise<FluidEarnPositionData[]>;
122
78
  export declare const _getUserPositions: (provider: PublicClient, network: NetworkNumber, user: EthAddress) => Promise<{
123
79
  marketData: FluidMarketData | undefined;
124
80
  userData: {
@@ -1,6 +1,6 @@
1
1
  import { Client } from 'viem';
2
2
  import { Blockish, EthAddress, EthereumProvider, NetworkNumber, PositionBalances } from '../types/common';
3
- import { LiquityTroveInfo } from '../types';
3
+ import { LiquityStakingData, LiquityTroveInfo } from '../types';
4
4
  export declare const LIQUITY_NORMAL_MODE_RATIO = 110;
5
5
  export declare const LIQUITY_RECOVERY_MODE_RATIO = 150;
6
6
  export declare const _getLiquityAccountBalances: (provider: Client, network: NetworkNumber, block: Blockish, addressMapping: boolean, address: EthAddress) => Promise<PositionBalances>;
@@ -8,14 +8,4 @@ export declare const getLiquityAccountBalances: (provider: EthereumProvider, net
8
8
  export declare const getDebtInFront: (provider: EthereumProvider, address: EthAddress) => Promise<string>;
9
9
  export declare const _getLiquityTroveInfo: (provider: Client, network: NetworkNumber, address: EthAddress) => Promise<LiquityTroveInfo>;
10
10
  export declare const getLiquityTroveInfo: (provider: EthereumProvider, network: NetworkNumber, address: EthAddress) => Promise<LiquityTroveInfo>;
11
- export declare const getLiquityStakingData: (provider: Client, network: NetworkNumber, address: EthAddress) => Promise<{
12
- totalLUSDDeposited: string;
13
- totalLQTYStaked: string;
14
- stakedLQTY: string;
15
- stakedLUSDBalance: string;
16
- rewardETH: string;
17
- rewardLUSD: string;
18
- stabilityRewardETH: string;
19
- stabilityRewardLQTY: string;
20
- showStakingBalances: boolean;
21
- }>;
11
+ export declare const getLiquityStakingData: (provider: Client, network: NetworkNumber, address: EthAddress) => Promise<LiquityStakingData>;
@@ -1,6 +1,6 @@
1
1
  import { Client, PublicClient } from 'viem';
2
2
  import { EthAddress, EthereumProvider, NetworkNumber } from '../types/common';
3
- import { LiquityV2AssetsData, LiquityV2MarketData, LiquityV2MarketInfo, LiquityV2TroveData, LiquityV2Versions } from '../types';
3
+ import { LiquityV2AssetsData, LiquityV2MarketData, LiquityV2MarketInfo, LiquityV2SBoldYBoldData, LiquityV2StakingData, LiquityV2TroveData, LiquityV2Versions } from '../types';
4
4
  export type SPYieldGainParameters = {
5
5
  P: string;
6
6
  aggWeightedDebtSum: string;
@@ -44,25 +44,5 @@ export type sBoldYieldParameters = {
44
44
  wsETH: string;
45
45
  rETH: string;
46
46
  };
47
- export declare const getLiquityV2Staking: (provider: Client, network: NetworkNumber, market: LiquityV2Versions, user: EthAddress) => Promise<{
48
- totalBOLDDeposited: string;
49
- stakedBOLDBalance: string;
50
- stabilityRewardColl: string;
51
- stabilityRewardYield: string;
52
- showStakingBalances: boolean;
53
- debtTokenBalance: string;
54
- stabilityPoolApy: string;
55
- }>;
56
- export declare const getLiquitySAndYBold: (provider: Client, network: NetworkNumber, markets: any, user: EthAddress) => Promise<{
57
- spApy: string;
58
- yBoldApy: string;
59
- totalBoldDepositedSBold: string;
60
- boldRateSBold: string;
61
- maxWithdrawSBold: string;
62
- totalBoldDepositedYBold: string;
63
- boldRateYBold: string;
64
- maxWithdrawYBold: string;
65
- sBoldBalance: string;
66
- yBoldBalance: string;
67
- stYBoldBalance: string;
68
- }>;
47
+ export declare const getLiquityV2Staking: (provider: Client, network: NetworkNumber, market: LiquityV2Versions, user: EthAddress) => Promise<LiquityV2StakingData>;
48
+ export declare const getLiquitySAndYBold: (provider: Client, network: NetworkNumber, markets: any, user: EthAddress) => Promise<LiquityV2SBoldYBoldData>;
@@ -1,9 +1,9 @@
1
1
  import { EthAddress, EthereumProvider, NetworkNumber } from '../types/common';
2
- import { PortfolioPositionsData } from '../types';
3
- export declare function getPortfolioData(provider: EthereumProvider, network: NetworkNumber, defaultProvider: EthereumProvider, addresses: EthAddress[], isSim?: boolean): Promise<{
2
+ import { PortfolioDataOptions, PortfolioMarketsData, PortfolioPositionsData, PortfolioRewardsData, PortfolioStakingPositionsData } from '../types';
3
+ export declare function getPortfolioData(provider: EthereumProvider, network: NetworkNumber, defaultProvider: EthereumProvider, addresses: EthAddress[], isSim?: boolean, options?: PortfolioDataOptions): Promise<{
4
4
  positions: PortfolioPositionsData;
5
- stakingPositions: any;
6
- rewardsData: any;
7
- markets: any;
5
+ stakingPositions: PortfolioStakingPositionsData;
6
+ rewardsData: PortfolioRewardsData;
7
+ markets: PortfolioMarketsData;
8
8
  }>;
9
9
  export * from './discovery';
@@ -34,8 +34,13 @@ import { fetchEthenaAirdropRewards } from '../claiming/ethena';
34
34
  import { _getAaveV4AccountData, _getAaveV4SpokeData } from '../aaveV4';
35
35
  import { getUniswapRewards } from '../claiming/uniswap';
36
36
  export function getPortfolioData(provider_1, network_1, defaultProvider_1, addresses_1) {
37
- return __awaiter(this, arguments, void 0, function* (provider, network, defaultProvider, addresses, isSim = false) {
37
+ return __awaiter(this, arguments, void 0, function* (provider, network, defaultProvider, addresses, isSim = false, options = {}) {
38
38
  const isMainnet = network === NetworkNumber.Eth;
39
+ const includeStaking = options.staking !== false;
40
+ const includeRewards = options.rewards !== false;
41
+ // The addresses staking and rewards are read for: none when left out, so their fetches below make no calls.
42
+ const stakingAddresses = includeStaking ? addresses : [];
43
+ const rewardsAddresses = includeRewards ? addresses : [];
39
44
  const isFluidSupported = [NetworkNumber.Eth, NetworkNumber.Arb, NetworkNumber.Base, NetworkNumber.Plasma].includes(network);
40
45
  const morphoMarkets = Object.values(MorphoBlueMarkets(network)).filter((market) => market.chainIds.includes(network));
41
46
  const morphoMidnightMarkets = Object.values(MorphoMidnightMarkets(network)).filter((market) => market.chainIds.includes(network));
@@ -107,7 +112,7 @@ export function getPortfolioData(provider_1, network_1, defaultProvider_1, addre
107
112
  };
108
113
  }
109
114
  // TODO: check default values, probably needed when fetching portfolio on unsupported networks
110
- for (const address of addresses) {
115
+ for (const address of stakingAddresses) {
111
116
  stakingPositions[address.toLowerCase()] = {
112
117
  aaveV3: {},
113
118
  morphoBlue: {},
@@ -121,14 +126,20 @@ export function getPortfolioData(provider_1, network_1, defaultProvider_1, addre
121
126
  error: '',
122
127
  data: {},
123
128
  },
129
+ // Set by the sBOLD/yBOLD fetch below, whether it succeeds or fails.
130
+ liquityV2SBoldYBold: { error: '', data: null },
124
131
  };
132
+ }
133
+ for (const address of rewardsAddresses) {
134
+ // merkl, spk, king and uniswap are set by their fetches below, whether they succeed or fail.
125
135
  rewardsData[address.toLowerCase()] = {
126
- merkl: {},
136
+ merkl: { error: '', data: null },
127
137
  aaveV3: {},
128
138
  spark: {},
129
- spk: {},
130
- king: {},
139
+ spk: { error: '', data: null },
140
+ king: { error: '', data: null },
131
141
  ethena: {},
142
+ uniswap: { error: '', data: null },
132
143
  };
133
144
  }
134
145
  yield Promise.allSettled([
@@ -204,7 +215,7 @@ export function getPortfolioData(provider_1, network_1, defaultProvider_1, addre
204
215
  }
205
216
  })),
206
217
  // === STAKING DATA (independent of market data) ===
207
- ...addresses.map((address) => __awaiter(this, void 0, void 0, function* () {
218
+ ...stakingAddresses.map((address) => __awaiter(this, void 0, void 0, function* () {
208
219
  try {
209
220
  if (!isFluidSupported)
210
221
  return;
@@ -215,7 +226,7 @@ export function getPortfolioData(provider_1, network_1, defaultProvider_1, addre
215
226
  stakingPositions[address.toLowerCase()].fluid = { error: `Error fetching Fluid lend data for address ${address}`, data: null };
216
227
  }
217
228
  })),
218
- ...addresses.map((address) => __awaiter(this, void 0, void 0, function* () {
229
+ ...stakingAddresses.map((address) => __awaiter(this, void 0, void 0, function* () {
219
230
  try {
220
231
  if (!isMainnet)
221
232
  return;
@@ -226,7 +237,7 @@ export function getPortfolioData(provider_1, network_1, defaultProvider_1, addre
226
237
  stakingPositions[address.toLowerCase()].liquity = { error: `Error fetching Liquity staking data for address ${address}`, data: null };
227
238
  }
228
239
  })),
229
- ...addresses.map((address) => __awaiter(this, void 0, void 0, function* () {
240
+ ...stakingAddresses.map((address) => __awaiter(this, void 0, void 0, function* () {
230
241
  try {
231
242
  if (!isMainnet)
232
243
  return;
@@ -237,7 +248,7 @@ export function getPortfolioData(provider_1, network_1, defaultProvider_1, addre
237
248
  stakingPositions[address.toLowerCase()].aaveV3 = { error: `Error fetching Aave V3 staking data for address ${address}`, data: null };
238
249
  }
239
250
  })),
240
- ...addresses.map((address) => __awaiter(this, void 0, void 0, function* () {
251
+ ...stakingAddresses.map((address) => __awaiter(this, void 0, void 0, function* () {
241
252
  try {
242
253
  if (!isMainnet)
243
254
  return;
@@ -249,7 +260,7 @@ export function getPortfolioData(provider_1, network_1, defaultProvider_1, addre
249
260
  }
250
261
  })),
251
262
  // Liquity V2 staking
252
- ...liquityV2MarketsStaking.map(market => addresses.map((address) => __awaiter(this, void 0, void 0, function* () {
263
+ ...liquityV2MarketsStaking.map(market => stakingAddresses.map((address) => __awaiter(this, void 0, void 0, function* () {
253
264
  try {
254
265
  if (!isMainnet) {
255
266
  stakingPositions[address.toLowerCase()].liquityV2[market.value] = { error: '', data: null };
@@ -268,13 +279,13 @@ export function getPortfolioData(provider_1, network_1, defaultProvider_1, addre
268
279
  (() => __awaiter(this, void 0, void 0, function* () {
269
280
  try {
270
281
  if (!isMainnet) {
271
- for (const address of addresses) {
282
+ for (const address of rewardsAddresses) {
272
283
  rewardsData[address.toLowerCase()].king = { error: '', data: [] };
273
284
  }
274
285
  return;
275
286
  }
276
- const kingRewards = yield getKingRewards(client, network, addresses);
277
- for (const address of addresses) {
287
+ const kingRewards = yield getKingRewards(client, network, rewardsAddresses);
288
+ for (const address of rewardsAddresses) {
278
289
  const lowerAddress = address.toLowerCase();
279
290
  rewardsData[lowerAddress].king = {
280
291
  error: '',
@@ -284,7 +295,7 @@ export function getPortfolioData(provider_1, network_1, defaultProvider_1, addre
284
295
  }
285
296
  catch (error) {
286
297
  console.error('Error fetching King rewards data in batch:', error);
287
- for (const address of addresses) {
298
+ for (const address of rewardsAddresses) {
288
299
  rewardsData[address.toLowerCase()].king = {
289
300
  error: 'Error fetching King rewards data in batch',
290
301
  data: null,
@@ -296,13 +307,13 @@ export function getPortfolioData(provider_1, network_1, defaultProvider_1, addre
296
307
  (() => __awaiter(this, void 0, void 0, function* () {
297
308
  try {
298
309
  if (!isMainnet) {
299
- for (const address of addresses) {
310
+ for (const address of rewardsAddresses) {
300
311
  rewardsData[address.toLowerCase()].uniswap = { error: '', data: [] };
301
312
  }
302
313
  return;
303
314
  }
304
- const uniswapRewards = yield getUniswapRewards(client, network, addresses);
305
- for (const address of addresses) {
315
+ const uniswapRewards = yield getUniswapRewards(client, network, rewardsAddresses);
316
+ for (const address of rewardsAddresses) {
306
317
  const lowerAddress = address.toLowerCase();
307
318
  rewardsData[lowerAddress].uniswap = {
308
319
  error: '',
@@ -312,7 +323,7 @@ export function getPortfolioData(provider_1, network_1, defaultProvider_1, addre
312
323
  }
313
324
  catch (error) {
314
325
  console.error('Error fetching Uniswap rewards data in batch:', error);
315
- for (const address of addresses) {
326
+ for (const address of rewardsAddresses) {
316
327
  rewardsData[address.toLowerCase()].uniswap = {
317
328
  error: 'Error fetching Uniswap rewards data in batch',
318
329
  data: null,
@@ -320,7 +331,7 @@ export function getPortfolioData(provider_1, network_1, defaultProvider_1, addre
320
331
  }
321
332
  }
322
333
  }))(),
323
- ...sparkMarkets.map((market) => addresses.map((address) => __awaiter(this, void 0, void 0, function* () {
334
+ ...sparkMarkets.map((market) => rewardsAddresses.map((address) => __awaiter(this, void 0, void 0, function* () {
324
335
  try {
325
336
  if (!isMainnet) {
326
337
  rewardsData[address.toLowerCase()].spark[market.value] = { error: '', data: [] };
@@ -334,7 +345,7 @@ export function getPortfolioData(provider_1, network_1, defaultProvider_1, addre
334
345
  rewardsData[address.toLowerCase()].spark[market.value] = { error: `Error fetching Spark rewards data for address ${address}`, data: null };
335
346
  }
336
347
  }))).flat(),
337
- ...addresses.map((address) => __awaiter(this, void 0, void 0, function* () {
348
+ ...rewardsAddresses.map((address) => __awaiter(this, void 0, void 0, function* () {
338
349
  try {
339
350
  const merklData = yield getMerklUnclaimedRewards(address, network);
340
351
  rewardsData[address.toLowerCase()].merkl = { error: '', data: merklData };
@@ -344,27 +355,28 @@ export function getPortfolioData(provider_1, network_1, defaultProvider_1, addre
344
355
  rewardsData[address.toLowerCase()].merkl = { error: `Error fetching Merkl rewards data for address ${address}`, data: null };
345
356
  }
346
357
  })),
347
- ...aaveV3Markets.map(market => addresses.map((address) => __awaiter(this, void 0, void 0, function* () {
358
+ ...aaveV3Markets.map(market => rewardsAddresses.map((address) => __awaiter(this, void 0, void 0, function* () {
348
359
  try {
349
360
  const aaveData = yield getUnclaimedRewardsForAllMarkets(client, network, address, market.providerAddress);
350
361
  rewardsData[address.toLowerCase()].aaveV3[market.value] = { error: '', data: aaveData };
351
362
  }
352
363
  catch (error) {
353
364
  console.error(`Error fetching Aave V3 Merit rewards data for address ${address}:`, error);
354
- rewardsData[address.toLowerCase()].aaveV3 = { error: `Error fetching Aave V3 rewards data for address ${address}`, data: null };
365
+ // This market only: the other markets keep their rewards.
366
+ rewardsData[address.toLowerCase()].aaveV3[market.value] = { error: `Error fetching Aave V3 rewards data for address ${address} on market ${market.value}`, data: null };
355
367
  }
356
368
  }))).flat(),
357
369
  // Batch Spark Airdrop rewards
358
370
  (() => __awaiter(this, void 0, void 0, function* () {
359
371
  try {
360
372
  if (!isMainnet) {
361
- for (const address of addresses) {
373
+ for (const address of rewardsAddresses) {
362
374
  rewardsData[address.toLowerCase()].spk = { error: '', data: [] };
363
375
  }
364
376
  return;
365
377
  }
366
- const sparkAirdropRewards = yield fetchSparkAirdropRewards(client, network, addresses);
367
- for (const address of addresses) {
378
+ const sparkAirdropRewards = yield fetchSparkAirdropRewards(client, network, rewardsAddresses);
379
+ for (const address of rewardsAddresses) {
368
380
  const lowerAddress = address.toLowerCase();
369
381
  rewardsData[lowerAddress].spk = {
370
382
  error: '',
@@ -374,7 +386,7 @@ export function getPortfolioData(provider_1, network_1, defaultProvider_1, addre
374
386
  }
375
387
  catch (error) {
376
388
  console.error('Error fetching Spark Airdrop rewards data in batch:', error);
377
- for (const address of addresses) {
389
+ for (const address of rewardsAddresses) {
378
390
  rewardsData[address.toLowerCase()].spk = {
379
391
  error: 'Error fetching Spark Airdrop rewards data in batch',
380
392
  data: null,
@@ -387,8 +399,8 @@ export function getPortfolioData(provider_1, network_1, defaultProvider_1, addre
387
399
  if (!isMainnet) {
388
400
  return;
389
401
  }
390
- const ethenaAirdropRewards = yield fetchEthenaAirdropRewards(addresses);
391
- for (const address of addresses) {
402
+ const ethenaAirdropRewards = yield fetchEthenaAirdropRewards(rewardsAddresses);
403
+ for (const address of rewardsAddresses) {
392
404
  const lowerAddress = address.toLowerCase();
393
405
  rewardsData[lowerAddress].ethena = {
394
406
  error: '',
@@ -398,7 +410,7 @@ export function getPortfolioData(provider_1, network_1, defaultProvider_1, addre
398
410
  }
399
411
  catch (error) {
400
412
  console.error('Error fetching Ethena Airdrop rewards data:', error);
401
- for (const address of addresses) {
413
+ for (const address of rewardsAddresses) {
402
414
  rewardsData[address.toLowerCase()].ethena = {
403
415
  error: 'Error fetching Ethena Airdrop rewards data in batch',
404
416
  data: null,
@@ -434,15 +446,16 @@ export function getPortfolioData(provider_1, network_1, defaultProvider_1, addre
434
446
  try {
435
447
  const [accDataPromise, earnDataPromise] = yield Promise.allSettled([
436
448
  _getMorphoBlueAccountData(client, network, address, market, morphoMarketsData[market.value]),
437
- getMorphoEarn(client, network, address, market, morphoMarketsData[market.value]),
449
+ includeStaking ? getMorphoEarn(client, network, address, market, morphoMarketsData[market.value]) : null,
438
450
  ]);
439
451
  if (accDataPromise.status === 'rejected') {
440
452
  console.error(`Error fetching MorphoBlue account data for address ${address} on market ${market.value}:`, accDataPromise.reason);
441
453
  positions[address.toLowerCase()].morphoBlue[market.value] = { error: `Error fetching MorphoBlue account data for address ${address} on market ${market.value}`, data: null };
442
454
  }
443
455
  if (earnDataPromise.status === 'rejected') {
444
- console.error(`Error fetching MorphoBlue account data for address ${address} on market ${market.value}:`, earnDataPromise.reason);
445
- positions[address.toLowerCase()].morphoBlue[market.value] = { error: `Error fetching MorphoBlue account data for address ${address} on market ${market.value}`, data: null };
456
+ // An Earn failure belongs to the staking entry: the lending position is not the one that failed.
457
+ console.error(`Error fetching MorphoBlue earn data for address ${address} on market ${market.value}:`, earnDataPromise.reason);
458
+ stakingPositions[address.toLowerCase()].morphoBlue[market.value] = { error: `Error fetching MorphoBlue earn data for address ${address} on market ${market.value}`, data: null };
446
459
  }
447
460
  if (accDataPromise.status !== 'rejected') {
448
461
  const accData = accDataPromise.value;
@@ -578,7 +591,7 @@ export function getPortfolioData(provider_1, network_1, defaultProvider_1, addre
578
591
  }
579
592
  }))).flat(),
580
593
  // liquity sBold/yBold and staking options
581
- ...addresses.map((address) => __awaiter(this, void 0, void 0, function* () {
594
+ ...stakingAddresses.map((address) => __awaiter(this, void 0, void 0, function* () {
582
595
  try {
583
596
  if (!isMainnet) {
584
597
  stakingPositions[address.toLowerCase()].liquityV2SBoldYBold = { error: '', data: null };