@defisaver/positions-sdk 2.1.59 → 2.1.61-aave-v4-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 (163) hide show
  1. package/cjs/aaveV3/index.d.ts +1 -0
  2. package/cjs/aaveV3/index.js +1 -0
  3. package/cjs/aaveV4/index.d.ts +7 -0
  4. package/cjs/aaveV4/index.js +174 -0
  5. package/cjs/compoundV2/index.d.ts +1 -0
  6. package/cjs/compoundV2/index.js +1 -0
  7. package/cjs/compoundV3/index.d.ts +1 -0
  8. package/cjs/compoundV3/index.js +1 -0
  9. package/cjs/config/contracts.d.ts +1277 -0
  10. package/cjs/config/contracts.js +9 -0
  11. package/cjs/contracts.d.ts +23120 -0
  12. package/cjs/contracts.js +2 -1
  13. package/cjs/eulerV2/index.d.ts +1 -0
  14. package/cjs/eulerV2/index.js +1 -0
  15. package/cjs/fluid/index.d.ts +3 -0
  16. package/cjs/helpers/aaveHelpers/index.js +1 -0
  17. package/cjs/helpers/aaveV4Helpers/index.d.ts +13 -0
  18. package/cjs/helpers/aaveV4Helpers/index.js +117 -0
  19. package/cjs/helpers/compoundHelpers/index.js +2 -0
  20. package/cjs/helpers/curveUsdHelpers/index.js +1 -0
  21. package/cjs/helpers/eulerHelpers/index.js +1 -0
  22. package/cjs/helpers/fluidHelpers/index.js +1 -0
  23. package/cjs/helpers/index.d.ts +1 -0
  24. package/cjs/helpers/index.js +2 -1
  25. package/cjs/helpers/liquityV2Helpers/index.js +1 -0
  26. package/cjs/helpers/llamaLendHelpers/index.js +1 -0
  27. package/cjs/helpers/morphoBlueHelpers/index.js +3 -2
  28. package/cjs/helpers/sparkHelpers/index.js +1 -0
  29. package/cjs/index.d.ts +2 -1
  30. package/cjs/index.js +3 -1
  31. package/cjs/liquity/index.js +2 -0
  32. package/cjs/maker/index.js +2 -0
  33. package/cjs/markets/aaveV4/index.d.ts +16 -0
  34. package/cjs/markets/aaveV4/index.js +59 -0
  35. package/cjs/markets/index.d.ts +1 -0
  36. package/cjs/markets/index.js +3 -1
  37. package/cjs/moneymarket/moneymarketCommonService.d.ts +1 -0
  38. package/cjs/moneymarket/moneymarketCommonService.js +8 -1
  39. package/cjs/portfolio/index.js +20 -0
  40. package/cjs/services/utils.d.ts +1 -0
  41. package/cjs/services/utils.js +2 -1
  42. package/cjs/spark/index.d.ts +1 -0
  43. package/cjs/spark/index.js +1 -0
  44. package/cjs/types/aave.d.ts +1 -0
  45. package/cjs/types/aaveV4.d.ts +139 -0
  46. package/cjs/types/aaveV4.js +13 -0
  47. package/cjs/types/common.d.ts +1 -0
  48. package/cjs/types/compound.d.ts +1 -0
  49. package/cjs/types/curveUsd.d.ts +2 -0
  50. package/cjs/types/euler.d.ts +1 -0
  51. package/cjs/types/fluid.d.ts +1 -0
  52. package/cjs/types/index.d.ts +1 -0
  53. package/cjs/types/index.js +1 -0
  54. package/cjs/types/liquity.d.ts +1 -0
  55. package/cjs/types/liquityV2.d.ts +2 -0
  56. package/cjs/types/llamaLend.d.ts +2 -0
  57. package/cjs/types/maker.d.ts +1 -0
  58. package/cjs/types/morphoBlue.d.ts +2 -0
  59. package/cjs/types/portfolio.d.ts +4 -0
  60. package/cjs/types/spark.d.ts +1 -0
  61. package/esm/aaveV3/index.d.ts +1 -0
  62. package/esm/aaveV3/index.js +1 -0
  63. package/esm/aaveV4/index.d.ts +7 -0
  64. package/esm/aaveV4/index.js +165 -0
  65. package/esm/compoundV2/index.d.ts +1 -0
  66. package/esm/compoundV2/index.js +1 -0
  67. package/esm/compoundV3/index.d.ts +1 -0
  68. package/esm/compoundV3/index.js +1 -0
  69. package/esm/config/contracts.d.ts +1277 -0
  70. package/esm/config/contracts.js +8 -0
  71. package/esm/contracts.d.ts +23120 -0
  72. package/esm/contracts.js +1 -0
  73. package/esm/eulerV2/index.d.ts +1 -0
  74. package/esm/eulerV2/index.js +1 -0
  75. package/esm/fluid/index.d.ts +3 -0
  76. package/esm/helpers/aaveHelpers/index.js +2 -1
  77. package/esm/helpers/aaveV4Helpers/index.d.ts +13 -0
  78. package/esm/helpers/aaveV4Helpers/index.js +108 -0
  79. package/esm/helpers/compoundHelpers/index.js +3 -1
  80. package/esm/helpers/curveUsdHelpers/index.js +2 -1
  81. package/esm/helpers/eulerHelpers/index.js +2 -1
  82. package/esm/helpers/fluidHelpers/index.js +2 -1
  83. package/esm/helpers/index.d.ts +1 -0
  84. package/esm/helpers/index.js +1 -0
  85. package/esm/helpers/liquityV2Helpers/index.js +2 -1
  86. package/esm/helpers/llamaLendHelpers/index.js +2 -1
  87. package/esm/helpers/morphoBlueHelpers/index.js +5 -4
  88. package/esm/helpers/sparkHelpers/index.js +2 -1
  89. package/esm/index.d.ts +2 -1
  90. package/esm/index.js +2 -1
  91. package/esm/liquity/index.js +2 -0
  92. package/esm/maker/index.js +2 -0
  93. package/esm/markets/aaveV4/index.d.ts +16 -0
  94. package/esm/markets/aaveV4/index.js +47 -0
  95. package/esm/markets/index.d.ts +1 -0
  96. package/esm/markets/index.js +1 -0
  97. package/esm/moneymarket/moneymarketCommonService.d.ts +1 -0
  98. package/esm/moneymarket/moneymarketCommonService.js +6 -0
  99. package/esm/portfolio/index.js +21 -1
  100. package/esm/services/utils.d.ts +1 -0
  101. package/esm/services/utils.js +1 -0
  102. package/esm/spark/index.d.ts +1 -0
  103. package/esm/spark/index.js +1 -0
  104. package/esm/types/aave.d.ts +1 -0
  105. package/esm/types/aaveV4.d.ts +139 -0
  106. package/esm/types/aaveV4.js +10 -0
  107. package/esm/types/common.d.ts +1 -0
  108. package/esm/types/compound.d.ts +1 -0
  109. package/esm/types/curveUsd.d.ts +2 -0
  110. package/esm/types/euler.d.ts +1 -0
  111. package/esm/types/fluid.d.ts +1 -0
  112. package/esm/types/index.d.ts +1 -0
  113. package/esm/types/index.js +1 -0
  114. package/esm/types/liquity.d.ts +1 -0
  115. package/esm/types/liquityV2.d.ts +2 -0
  116. package/esm/types/llamaLend.d.ts +2 -0
  117. package/esm/types/maker.d.ts +1 -0
  118. package/esm/types/morphoBlue.d.ts +2 -0
  119. package/esm/types/portfolio.d.ts +4 -0
  120. package/esm/types/spark.d.ts +1 -0
  121. package/package.json +1 -1
  122. package/src/aaveV3/index.ts +1 -0
  123. package/src/aaveV4/index.ts +176 -0
  124. package/src/compoundV2/index.ts +1 -0
  125. package/src/compoundV3/index.ts +1 -0
  126. package/src/config/contracts.ts +8 -0
  127. package/src/contracts.ts +3 -1
  128. package/src/eulerV2/index.ts +1 -0
  129. package/src/helpers/aaveHelpers/index.ts +2 -1
  130. package/src/helpers/aaveV4Helpers/index.ts +128 -0
  131. package/src/helpers/compoundHelpers/index.ts +3 -1
  132. package/src/helpers/curveUsdHelpers/index.ts +5 -1
  133. package/src/helpers/eulerHelpers/index.ts +2 -1
  134. package/src/helpers/fluidHelpers/index.ts +4 -1
  135. package/src/helpers/index.ts +1 -0
  136. package/src/helpers/liquityV2Helpers/index.ts +4 -1
  137. package/src/helpers/llamaLendHelpers/index.ts +4 -1
  138. package/src/helpers/morphoBlueHelpers/index.ts +5 -4
  139. package/src/helpers/sparkHelpers/index.ts +2 -1
  140. package/src/index.ts +2 -0
  141. package/src/liquity/index.ts +2 -0
  142. package/src/maker/index.ts +2 -0
  143. package/src/markets/aaveV4/index.ts +68 -0
  144. package/src/markets/index.ts +6 -1
  145. package/src/moneymarket/moneymarketCommonService.ts +6 -0
  146. package/src/portfolio/index.ts +20 -0
  147. package/src/services/utils.ts +1 -0
  148. package/src/spark/index.ts +1 -0
  149. package/src/types/aave.ts +1 -0
  150. package/src/types/aaveV4.ts +155 -0
  151. package/src/types/common.ts +1 -0
  152. package/src/types/compound.ts +1 -0
  153. package/src/types/curveUsd.ts +2 -0
  154. package/src/types/euler.ts +1 -0
  155. package/src/types/fluid.ts +2 -1
  156. package/src/types/index.ts +2 -1
  157. package/src/types/liquity.ts +1 -0
  158. package/src/types/liquityV2.ts +2 -0
  159. package/src/types/llamaLend.ts +2 -0
  160. package/src/types/maker.ts +1 -0
  161. package/src/types/morphoBlue.ts +2 -0
  162. package/src/types/portfolio.ts +4 -0
  163. package/src/types/spark.ts +1 -0
package/esm/contracts.js CHANGED
@@ -132,3 +132,4 @@ export const StkAAVEViem = createViemContractFromConfigFunc('StkAAVE');
132
132
  export const YearnViewContractViem = createViemContractFromConfigFunc('YearnView');
133
133
  export const MakerDsrContractViem = createViemContractFromConfigFunc('MakerDsr');
134
134
  export const SkySavingsContractView = createViemContractFromConfigFunc('SkySavings');
135
+ export const AaveV4ViewContractViem = createViemContractFromConfigFunc('AaveV4View');
@@ -34,6 +34,7 @@ export declare const EMPTY_EULER_V2_DATA: {
34
34
  lastUpdated: number;
35
35
  hasBorrowInDifferentVault: boolean;
36
36
  addressSpaceTakenByAnotherAccount: boolean;
37
+ exposure: string;
37
38
  };
38
39
  export declare const _getEulerV2AccountData: (provider: Client, network: NetworkNumber, addressForPosition: EthAddress, ownerAddress: EthAddress, extractedState: ({
39
40
  selectedMarket: EulerV2Market;
@@ -171,6 +171,7 @@ export const EMPTY_EULER_V2_DATA = {
171
171
  lastUpdated: Date.now(),
172
172
  hasBorrowInDifferentVault: false,
173
173
  addressSpaceTakenByAnotherAccount: false,
174
+ exposure: 'N/A',
174
175
  };
175
176
  export const _getEulerV2AccountData = (provider, network, addressForPosition, ownerAddress, extractedState) => __awaiter(void 0, void 0, void 0, function* () {
176
177
  if (!addressForPosition)
@@ -136,6 +136,7 @@ export declare const _getUserPositions: (provider: PublicClient, network: Networ
136
136
  currentVolatilePairRatio?: string;
137
137
  minCollRatio?: string;
138
138
  collLiquidationRatio?: string;
139
+ exposure: string;
139
140
  owner: string;
140
141
  vaultId: number;
141
142
  usedAssets: FluidUsedAssets;
@@ -167,6 +168,7 @@ export declare const getUserPositions: (provider: EthereumProvider, network: Net
167
168
  currentVolatilePairRatio?: string;
168
169
  minCollRatio?: string;
169
170
  collLiquidationRatio?: string;
171
+ exposure: string;
170
172
  owner: string;
171
173
  vaultId: number;
172
174
  usedAssets: FluidUsedAssets;
@@ -198,6 +200,7 @@ export declare const _getUserPositionsPortfolio: (provider: PublicClient, networ
198
200
  currentVolatilePairRatio?: string;
199
201
  minCollRatio?: string;
200
202
  collLiquidationRatio?: string;
203
+ exposure: string;
201
204
  owner: string;
202
205
  vaultId: number;
203
206
  usedAssets: FluidUsedAssets;
@@ -22,7 +22,7 @@ import Dec from 'decimal.js';
22
22
  import { assetAmountInWei, getAssetInfo, getAssetInfoByAddress } from '@defisaver/tokens';
23
23
  import { AaveVersions, } from '../../types';
24
24
  import { getNativeAssetFromWrapped, getWrappedNativeAssetFromUnwrapped } from '../../services/utils';
25
- import { aprToApy, calcLeverageLiqPrice, getAssetsTotal, isLeveragedPos, } from '../../moneymarket';
25
+ import { aprToApy, calcLeverageLiqPrice, getAssetsTotal, getExposure, isLeveragedPos, } from '../../moneymarket';
26
26
  import { calculateNetApy } from '../../staking';
27
27
  import { borrowOperations } from '../../constants';
28
28
  import { LeverageType, } from '../../types/common';
@@ -119,6 +119,7 @@ export const aaveAnyGetAggregatedPositionData = (_a) => {
119
119
  payload.netApy = netApy;
120
120
  payload.incentiveUsd = incentiveUsd;
121
121
  payload.totalInterestUsd = totalInterestUsd;
122
+ payload.exposure = getExposure(payload.borrowedUsd, payload.suppliedUsd);
122
123
  return payload;
123
124
  };
124
125
  const getApyAfterValuesEstimationInner = (selectedMarket, actions, client, network) => __awaiter(void 0, void 0, void 0, function* () {
@@ -0,0 +1,13 @@
1
+ import { AaveV4AggregatedPositionData, AaveV4AssetsData, AaveV4ReserveAssetData, AaveV4UsedReserveAsset, AaveV4UsedReserveAssets } from '../../types';
2
+ import { LeverageType, NetworkNumber } from '../../types/common';
3
+ export declare const aaveV4GetCollateralFactor: (assetData: AaveV4ReserveAssetData, usedAssetData: AaveV4UsedReserveAsset, useUserCollateralFactor?: boolean) => number;
4
+ export declare const isLeveragedPosAaveV4: (usedAssets: AaveV4UsedReserveAssets, dustLimit?: number) => {
5
+ leveragedType: LeverageType;
6
+ leveragedAsset: string;
7
+ };
8
+ export declare const aaveV4GetAggregatedPositionData: ({ usedAssets, assetsData, network, useUserCollateralFactor, }: {
9
+ usedAssets: AaveV4UsedReserveAssets;
10
+ assetsData: AaveV4AssetsData;
11
+ network: NetworkNumber;
12
+ useUserCollateralFactor?: boolean;
13
+ }) => AaveV4AggregatedPositionData;
@@ -0,0 +1,108 @@
1
+ import Dec from 'decimal.js';
2
+ import { calcLeverageLiqPrice, getAssetsTotal, STABLE_ASSETS } from '../../moneymarket';
3
+ import { LeverageType } from '../../types/common';
4
+ export const aaveV4GetCollateralFactor = (assetData, usedAssetData, useUserCollateralFactor = false) => (useUserCollateralFactor ? usedAssetData.collateralFactor : assetData.collateralFactor);
5
+ export const isLeveragedPosAaveV4 = (usedAssets, dustLimit = 5) => {
6
+ let borrowUnstable = 0;
7
+ let supplyStable = 0;
8
+ let borrowStable = 0;
9
+ let supplyUnstable = 0;
10
+ let longAsset = '';
11
+ let shortAsset = '';
12
+ Object.values(usedAssets).forEach(({ symbol, suppliedUsd, borrowedUsd, collateral, reserveId, }) => {
13
+ const spokeAsset = `${symbol}-${reserveId}`;
14
+ const isSupplied = (+suppliedUsd) > dustLimit; // ignore dust like <limit leftover supply
15
+ const isBorrowed = (+borrowedUsd) > dustLimit; // ignore dust like <limit leftover supply
16
+ if (isSupplied && STABLE_ASSETS.includes(symbol) && collateral)
17
+ supplyStable += 1;
18
+ if (isBorrowed && STABLE_ASSETS.includes(symbol))
19
+ borrowStable += 1;
20
+ if (isBorrowed && !STABLE_ASSETS.includes(symbol)) {
21
+ borrowUnstable += 1;
22
+ shortAsset = spokeAsset;
23
+ }
24
+ if (isSupplied && !STABLE_ASSETS.includes(symbol) && collateral) {
25
+ supplyUnstable += 1;
26
+ longAsset = spokeAsset;
27
+ }
28
+ });
29
+ const isLong = borrowStable > 0 && borrowUnstable === 0 && supplyUnstable === 1 && supplyStable === 0;
30
+ const isShort = supplyStable > 0 && supplyUnstable === 0 && borrowUnstable === 1 && borrowStable === 0;
31
+ const isVolatilePair = supplyUnstable === 1 && borrowUnstable === 1 && supplyStable === 0 && borrowStable === 0;
32
+ if (isLong) {
33
+ return {
34
+ leveragedType: LeverageType.Long,
35
+ leveragedAsset: longAsset,
36
+ };
37
+ }
38
+ if (isShort) {
39
+ return {
40
+ leveragedType: LeverageType.Short,
41
+ leveragedAsset: shortAsset,
42
+ };
43
+ }
44
+ if (isVolatilePair) {
45
+ return {
46
+ leveragedType: LeverageType.VolatilePair,
47
+ leveragedAsset: longAsset,
48
+ };
49
+ }
50
+ return {
51
+ leveragedType: LeverageType.None,
52
+ leveragedAsset: '',
53
+ };
54
+ };
55
+ export const aaveV4GetAggregatedPositionData = ({ usedAssets, assetsData, network, useUserCollateralFactor = false, }) => {
56
+ const payload = {};
57
+ payload.suppliedUsd = getAssetsTotal(usedAssets, ({ isSupplied }) => isSupplied, ({ suppliedUsd }) => suppliedUsd);
58
+ payload.suppliedCollateralUsd = getAssetsTotal(usedAssets, ({ isSupplied, collateral }) => isSupplied && collateral, ({ suppliedUsd }) => suppliedUsd);
59
+ payload.borrowLimitUsd = getAssetsTotal(usedAssets, ({ isSupplied, collateral }) => isSupplied && collateral, ({ symbol, suppliedUsd, reserveId }) => new Dec(suppliedUsd).mul(aaveV4GetCollateralFactor(assetsData[`${symbol}-${reserveId}`], usedAssets[`${symbol}-${reserveId}`], useUserCollateralFactor)));
60
+ payload.liquidationLimitUsd = payload.borrowLimitUsd;
61
+ payload.borrowedUsd = getAssetsTotal(usedAssets, ({ isBorrowed }) => isBorrowed, ({ borrowedUsd }) => borrowedUsd);
62
+ payload.drawnUsd = getAssetsTotal(usedAssets, ({ isBorrowed }) => isBorrowed, ({ drawnUsd }) => drawnUsd);
63
+ payload.premiumUsd = getAssetsTotal(usedAssets, ({ isBorrowed }) => isBorrowed, ({ premiumUsd }) => premiumUsd);
64
+ const leftToBorrowUsd = new Dec(payload.borrowLimitUsd).sub(payload.borrowedUsd);
65
+ payload.leftToBorrowUsd = leftToBorrowUsd.lte('0') ? '0' : leftToBorrowUsd.toString();
66
+ payload.ratio = +payload.suppliedUsd ? new Dec(payload.borrowLimitUsd).div(payload.borrowedUsd).mul(100).toString() : '0';
67
+ payload.collRatio = +payload.suppliedUsd ? new Dec(payload.suppliedCollateralUsd).div(payload.borrowedUsd).mul(100).toString() : '0';
68
+ payload.liqRatio = new Dec(payload.borrowLimitUsd).div(payload.liquidationLimitUsd).toString();
69
+ payload.liqPercent = new Dec(payload.borrowLimitUsd).div(payload.liquidationLimitUsd).mul(100).toString();
70
+ const { leveragedType, leveragedAsset } = isLeveragedPosAaveV4(usedAssets);
71
+ payload.leveragedType = leveragedType;
72
+ payload.leveragedAsset = leveragedAsset;
73
+ payload.liquidationPrice = '';
74
+ if (leveragedType !== '') {
75
+ const leveragedAssetData = assetsData[leveragedAsset];
76
+ let assetPrice = (leveragedAssetData === null || leveragedAssetData === void 0 ? void 0 : leveragedAssetData.price) || '0';
77
+ if (leveragedType === LeverageType.VolatilePair) {
78
+ const borrowedAsset = Object.values(usedAssets).find(({ borrowedUsd }) => +borrowedUsd > 0);
79
+ const borrowedAssetPrice = assetsData[`${borrowedAsset.symbol}-${borrowedAsset.reserveId}`].price;
80
+ const leveragedAssetPrice = assetsData[leveragedAsset].price;
81
+ const isReverse = new Dec(leveragedAssetPrice).lt(borrowedAssetPrice);
82
+ if (isReverse) {
83
+ payload.leveragedType = LeverageType.VolatilePairReverse;
84
+ payload.currentVolatilePairRatio = new Dec(borrowedAssetPrice).div(leveragedAssetPrice).toDP(18).toString();
85
+ assetPrice = new Dec(borrowedAssetPrice).div(assetPrice).toString();
86
+ }
87
+ else {
88
+ assetPrice = new Dec(assetPrice).div(borrowedAssetPrice).toString();
89
+ payload.currentVolatilePairRatio = new Dec(leveragedAssetPrice).div(borrowedAssetPrice).toDP(18).toString();
90
+ }
91
+ }
92
+ payload.liquidationPrice = calcLeverageLiqPrice(payload.leveragedType, assetPrice, payload.borrowedUsd, payload.liquidationLimitUsd);
93
+ }
94
+ payload.minCollRatio = new Dec(payload.suppliedCollateralUsd).div(payload.borrowLimitUsd).mul(100).toString();
95
+ payload.collLiquidationRatio = new Dec(payload.suppliedCollateralUsd).div(payload.liquidationLimitUsd).mul(100).toString();
96
+ // payload.healthRatio = new Dec(payload.liquidationLimitUsd).div(payload.borrowedUsd).toDP(4).toString();
97
+ payload.minHealthRatio = new Dec(payload.liquidationLimitUsd).div(payload.borrowLimitUsd).toDP(4).toString();
98
+ // TODO: Re-implement netApy calculation
99
+ // const { netApy, incentiveUsd, totalInterestUsd } = calculateNetApy({
100
+ // usedAssets,
101
+ // assetsData,
102
+ // optionalData: { healthRatio: payload.healthRatio },
103
+ // });
104
+ payload.netApy = '0';
105
+ payload.incentiveUsd = '0';
106
+ payload.totalInterestUsd = '0';
107
+ return payload;
108
+ };
@@ -23,7 +23,7 @@ import { assetAmountInWei, getAssetInfo, getAssetInfoByAddress } from '@defisave
23
23
  import { CompoundVersions, } from '../../types';
24
24
  import { addToArrayIf, getEthAmountForDecimals, handleWbtcLegacy, wethToEth, } from '../../services/utils';
25
25
  import { BLOCKS_IN_A_YEAR, borrowOperations, SECONDS_PER_YEAR } from '../../constants';
26
- import { aprToApy, calcLeverageLiqPrice, calculateBorrowingAssetLimit, getAssetsTotal, isLeveragedPos, } from '../../moneymarket';
26
+ import { aprToApy, calcLeverageLiqPrice, calculateBorrowingAssetLimit, getAssetsTotal, getExposure, isLeveragedPos, } from '../../moneymarket';
27
27
  import { calculateNetApy, getStakingApy, STAKING_ASSETS } from '../../staking';
28
28
  import { IncentiveKind, LeverageType, NetworkNumber, } from '../../types/common';
29
29
  import { CompoundLoanInfoContractViem, CompV3ViewContractViem } from '../../contracts';
@@ -111,6 +111,7 @@ export const getCompoundV2AggregatedData = (_a) => {
111
111
  const assetPrice = assetsData[handleWbtcLegacy(leveragedAsset)].price;
112
112
  payload.liquidationPrice = calcLeverageLiqPrice(leveragedType, assetPrice, payload.borrowedUsd, payload.liquidationLimitUsd);
113
113
  }
114
+ payload.exposure = getExposure(payload.borrowedUsd, payload.suppliedUsd);
114
115
  return payload;
115
116
  };
116
117
  export const getCompoundV3AggregatedData = (_a) => {
@@ -159,6 +160,7 @@ export const getCompoundV3AggregatedData = (_a) => {
159
160
  }
160
161
  payload.minCollRatio = new Dec(payload.suppliedCollateralUsd).div(payload.borrowLimitUsd).mul(100).toString();
161
162
  payload.collLiquidationRatio = new Dec(payload.suppliedCollateralUsd).div(payload.liquidationLimitUsd).mul(100).toString();
163
+ payload.exposure = getExposure(payload.borrowedUsd, payload.suppliedUsd);
162
164
  return payload;
163
165
  };
164
166
  export const getApyAfterValuesEstimationCompoundV2 = (actions, provider) => __awaiter(void 0, void 0, void 0, function* () {
@@ -10,7 +10,7 @@ var __rest = (this && this.__rest) || function (s, e) {
10
10
  return t;
11
11
  };
12
12
  import Dec from 'decimal.js';
13
- import { calcLeverageLiqPrice, getAssetsTotal, isLeveragedPos } from '../../moneymarket';
13
+ import { calcLeverageLiqPrice, getAssetsTotal, getExposure, isLeveragedPos, } from '../../moneymarket';
14
14
  import { mapRange } from '../../services/utils';
15
15
  export const getCrvUsdAggregatedData = (_a) => {
16
16
  var _b;
@@ -39,5 +39,6 @@ export const getCrvUsdAggregatedData = (_a) => {
39
39
  payload.leveragedAsset = leveragedAsset;
40
40
  payload.liquidationPrice = calcLeverageLiqPrice(leveragedType, usedAssets[selectedMarket.collAsset].price, payload.borrowedUsd, payload.borrowLimitUsd);
41
41
  }
42
+ payload.exposure = getExposure(payload.borrowedUsd, payload.suppliedUsd);
42
43
  return payload;
43
44
  };
@@ -21,7 +21,7 @@ var __rest = (this && this.__rest) || function (s, e) {
21
21
  import Dec from 'decimal.js';
22
22
  import { assetAmountInWei } from '@defisaver/tokens';
23
23
  import { LeverageType, } from '../../types/common';
24
- import { calcLeverageLiqPrice, getAssetsTotal, STABLE_ASSETS, } from '../../moneymarket';
24
+ import { calcLeverageLiqPrice, getAssetsTotal, getExposure, STABLE_ASSETS, } from '../../moneymarket';
25
25
  import { calculateNetApy } from '../../staking';
26
26
  import { EulerV2ViewContractViem } from '../../contracts';
27
27
  import { borrowOperations } from '../../constants';
@@ -125,6 +125,7 @@ export const getEulerV2AggregatedData = (_a) => {
125
125
  }
126
126
  payload.minCollRatio = new Dec(payload.suppliedCollateralUsd).div(payload.borrowLimitUsd).mul(100).toString();
127
127
  payload.collLiquidationRatio = new Dec(payload.suppliedCollateralUsd).div(payload.liquidationLimitUsd).mul(100).toString();
128
+ payload.exposure = getExposure(payload.borrowedUsd, payload.suppliedUsd);
128
129
  return payload;
129
130
  };
130
131
  export const getEulerV2BorrowRate = (interestRate) => {
@@ -1,7 +1,7 @@
1
1
  import Dec from 'decimal.js';
2
2
  import { assetAmountInEth } from '@defisaver/tokens';
3
3
  import { FluidVaultType, } from '../../types';
4
- import { calcLeverageLiqPrice, getAssetsTotal, isLeveragedPos } from '../../moneymarket';
4
+ import { calcLeverageLiqPrice, getAssetsTotal, getExposure, isLeveragedPos, } from '../../moneymarket';
5
5
  import { calculateNetApy } from '../../staking';
6
6
  import { LeverageType } from '../../types/common';
7
7
  import { getEthAmountForDecimals } from '../../services/utils';
@@ -69,6 +69,7 @@ export const getFluidAggregatedData = ({ usedAssets, assetsData, marketData, },
69
69
  }
70
70
  payload.minCollRatio = new Dec(payload.suppliedUsd).div(payload.borrowLimitUsd).mul(100).toString();
71
71
  payload.collLiquidationRatio = new Dec(payload.suppliedUsd).div(payload.liquidationLimitUsd).mul(100).toString();
72
+ payload.exposure = getExposure(payload.borrowedUsd, payload.suppliedUsd);
72
73
  return payload;
73
74
  };
74
75
  export const parseDexSupplyData = (dexSupplyData, collAsset0, collAsset1) => {
@@ -8,3 +8,4 @@ export * as llamaLendHelpers from './llamaLendHelpers';
8
8
  export * as liquityV2Helpers from './liquityV2Helpers';
9
9
  export * as eulerV2Helpers from './eulerHelpers';
10
10
  export * as fluidHelpers from './fluidHelpers';
11
+ export * as aaveV4Helpers from './aaveV4Helpers';
@@ -8,3 +8,4 @@ export * as llamaLendHelpers from './llamaLendHelpers';
8
8
  export * as liquityV2Helpers from './liquityV2Helpers';
9
9
  export * as eulerV2Helpers from './eulerHelpers';
10
10
  export * as fluidHelpers from './fluidHelpers';
11
+ export * as aaveV4Helpers from './aaveV4Helpers';
@@ -1,5 +1,5 @@
1
1
  import Dec from 'decimal.js';
2
- import { calcLeverageLiqPrice, getAssetsTotal, isLeveragedPos } from '../../moneymarket';
2
+ import { calcLeverageLiqPrice, getAssetsTotal, getExposure, isLeveragedPos, } from '../../moneymarket';
3
3
  import { calculateInterestEarned } from '../../staking';
4
4
  export const calculateNetApyLiquityV2 = (usedAssets, assetsData, interestRate) => {
5
5
  const sumValues = Object.values(usedAssets).reduce((_acc, usedAsset) => {
@@ -52,5 +52,6 @@ export const getLiquityV2AggregatedPositionData = ({ usedAssets, assetsData, min
52
52
  const assetPrice = assetsData[leveragedAsset].price;
53
53
  payload.liquidationPrice = calcLeverageLiqPrice(leveragedType, assetPrice, payload.borrowedUsd, payload.borrowLimitUsd);
54
54
  }
55
+ payload.exposure = getExposure(payload.borrowedUsd, payload.suppliedUsd);
55
56
  return payload;
56
57
  };
@@ -10,7 +10,7 @@ var __rest = (this && this.__rest) || function (s, e) {
10
10
  return t;
11
11
  };
12
12
  import Dec from 'decimal.js';
13
- import { calcLeverageLiqPrice, getAssetsTotal, isLeveragedPos } from '../../moneymarket';
13
+ import { calcLeverageLiqPrice, getAssetsTotal, getExposure, isLeveragedPos, } from '../../moneymarket';
14
14
  import { mapRange } from '../../services/utils';
15
15
  import { calculateNetApy } from '../../staking';
16
16
  export const getLlamaLendAggregatedData = (_a) => {
@@ -47,5 +47,6 @@ export const getLlamaLendAggregatedData = (_a) => {
47
47
  payload.leveragedAsset = leveragedAsset;
48
48
  payload.liquidationPrice = calcLeverageLiqPrice(leveragedType, usedAssets[collAsset].price, payload.borrowedUsd, payload.borrowLimitUsd);
49
49
  }
50
+ payload.exposure = getExposure(payload.borrowedUsd, payload.suppliedUsd);
50
51
  return payload;
51
52
  };
@@ -9,12 +9,12 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
9
9
  };
10
10
  import Dec from 'decimal.js';
11
11
  import { assetAmountInWei, getAssetInfo, getAssetInfoByAddress } from '@defisaver/tokens';
12
- import { aprToApy, calcLeverageLiqPrice, getAssetsTotal, isLeveragedPos, } from '../../moneymarket';
12
+ import { aprToApy, calcLeverageLiqPrice, getAssetsTotal, getExposure, isLeveragedPos, } from '../../moneymarket';
13
13
  import { calculateNetApy } from '../../staking';
14
14
  import { LeverageType, NetworkNumber, } from '../../types/common';
15
15
  import { borrowOperations, SECONDS_PER_YEAR, WAD } from '../../constants';
16
16
  import { MorphoBlueViewContractViem } from '../../contracts';
17
- import { compareAddresses, DEFAULT_TIMEOUT, wethToEth } from '../../services/utils';
17
+ import { compareAddresses, LONGER_TIMEOUT, wethToEth } from '../../services/utils';
18
18
  import { getViemProvider } from '../../services/viem';
19
19
  export const getMorphoBlueAggregatedPositionData = ({ usedAssets, assetsData, marketInfo }) => {
20
20
  var _a, _b, _c, _d, _e, _f;
@@ -64,6 +64,7 @@ export const getMorphoBlueAggregatedPositionData = ({ usedAssets, assetsData, ma
64
64
  }
65
65
  payload.minCollRatio = new Dec(payload.suppliedCollateralUsd).div(payload.borrowLimitUsd).mul(100).toString();
66
66
  payload.collLiquidationRatio = new Dec(payload.suppliedCollateralUsd).div(payload.liquidationLimitUsd).mul(100).toString();
67
+ payload.exposure = getExposure(payload.borrowedUsd, payload.suppliedUsd);
67
68
  return payload;
68
69
  };
69
70
  const compound = (ratePerSeconds) => {
@@ -212,7 +213,7 @@ export const getReallocatableLiquidity = (marketId_1, ...args_1) => __awaiter(vo
212
213
  query: MARKET_QUERY,
213
214
  variables: { uniqueKey: marketId, chainId: network },
214
215
  }),
215
- signal: AbortSignal.timeout(DEFAULT_TIMEOUT),
216
+ signal: AbortSignal.timeout(LONGER_TIMEOUT),
216
217
  });
217
218
  const data = yield response.json();
218
219
  const marketData = (_a = data === null || data === void 0 ? void 0 : data.data) === null || _a === void 0 ? void 0 : _a.marketByUniqueKey;
@@ -274,7 +275,7 @@ export const getReallocation = (market_1, assetsData_1, amountToBorrow_1, ...arg
274
275
  query: MARKET_QUERY,
275
276
  variables: { uniqueKey: marketId, chainId: network },
276
277
  }),
277
- signal: AbortSignal.timeout(DEFAULT_TIMEOUT),
278
+ signal: AbortSignal.timeout(LONGER_TIMEOUT),
278
279
  });
279
280
  const data = yield response.json();
280
281
  const marketData = (_a = data === null || data === void 0 ? void 0 : data.data) === null || _a === void 0 ? void 0 : _a.marketByUniqueKey;
@@ -20,7 +20,7 @@ var __rest = (this && this.__rest) || function (s, e) {
20
20
  };
21
21
  import Dec from 'decimal.js';
22
22
  import { assetAmountInWei, getAssetInfo, getAssetInfoByAddress } from '@defisaver/tokens';
23
- import { aprToApy, calcLeverageLiqPrice, getAssetsTotal, isLeveragedPos, } from '../../moneymarket';
23
+ import { aprToApy, calcLeverageLiqPrice, getAssetsTotal, getExposure, isLeveragedPos, } from '../../moneymarket';
24
24
  import { calculateNetApy } from '../../staking';
25
25
  import { ethToWeth, getNativeAssetFromWrapped, wethToEth } from '../../services/utils';
26
26
  import { SparkViewContractViem } from '../../contracts';
@@ -102,6 +102,7 @@ export const sparkGetAggregatedPositionData = (_a) => {
102
102
  payload.collLiquidationRatio = new Dec(payload.suppliedCollateralUsd).div(payload.liquidationLimitUsd).mul(100).toString();
103
103
  payload.healthRatio = new Dec(payload.liquidationLimitUsd).div(payload.borrowedUsd).toDP(4).toString();
104
104
  payload.minHealthRatio = new Dec(payload.liquidationLimitUsd).div(payload.borrowLimitUsd).toDP(4).toString();
105
+ payload.exposure = getExposure(payload.borrowedUsd, payload.suppliedUsd);
105
106
  return payload;
106
107
  };
107
108
  export const getApyAfterValuesEstimation = (selectedMarket, actions, provider) => __awaiter(void 0, void 0, void 0, function* () {
package/esm/index.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  import './setup';
2
2
  import * as fluid from './fluid';
3
+ import * as aaveV4 from './aaveV4';
3
4
  import * as aaveV3 from './aaveV3';
4
5
  import * as aaveV2 from './aaveV2';
5
6
  import * as compoundV3 from './compoundV3';
@@ -21,4 +22,4 @@ import * as portfolio from './portfolio';
21
22
  import * as claiming from './claiming';
22
23
  import * as savings from './savings';
23
24
  export * from './types';
24
- export { aaveV2, aaveV3, compoundV2, compoundV3, spark, curveUsd, liquity, liquityV2, maker, exchange, staking, moneymarket, markets, helpers, morphoBlue, llamaLend, eulerV2, fluid, portfolio, claiming, savings, };
25
+ export { aaveV2, aaveV3, aaveV4, compoundV2, compoundV3, spark, curveUsd, liquity, liquityV2, maker, exchange, staking, moneymarket, markets, helpers, morphoBlue, llamaLend, eulerV2, fluid, portfolio, claiming, savings, };
package/esm/index.js CHANGED
@@ -1,5 +1,6 @@
1
1
  import './setup';
2
2
  import * as fluid from './fluid';
3
+ import * as aaveV4 from './aaveV4';
3
4
  import * as aaveV3 from './aaveV3';
4
5
  import * as aaveV2 from './aaveV2';
5
6
  import * as compoundV3 from './compoundV3';
@@ -21,4 +22,4 @@ import * as portfolio from './portfolio';
21
22
  import * as claiming from './claiming';
22
23
  import * as savings from './savings';
23
24
  export * from './types';
24
- export { aaveV2, aaveV3, compoundV2, compoundV3, spark, curveUsd, liquity, liquityV2, maker, exchange, staking, moneymarket, markets, helpers, morphoBlue, llamaLend, eulerV2, fluid, portfolio, claiming, savings, };
25
+ export { aaveV2, aaveV3, aaveV4, compoundV2, compoundV3, spark, curveUsd, liquity, liquityV2, maker, exchange, staking, moneymarket, markets, helpers, morphoBlue, llamaLend, eulerV2, fluid, portfolio, claiming, savings, };
@@ -15,6 +15,7 @@ import { LIQUITY_TROVE_STATUS_ENUM } from '../types';
15
15
  import { ZERO_ADDRESS } from '../constants';
16
16
  import { getViemProvider, setViemBlockNumber } from '../services/viem';
17
17
  import { getEthAmountForDecimals } from '../services/utils';
18
+ import { getExposure } from '../moneymarket';
18
19
  export const LIQUITY_NORMAL_MODE_RATIO = 110; // MCR
19
20
  export const LIQUITY_RECOVERY_MODE_RATIO = 150; // CCR
20
21
  export const _getLiquityAccountBalances = (provider, network, block, addressMapping, address) => __awaiter(void 0, void 0, void 0, function* () {
@@ -82,6 +83,7 @@ export const _getLiquityTroveInfo = (provider, network, address) => __awaiter(vo
82
83
  minCollateralRatio: recoveryMode ? LIQUITY_RECOVERY_MODE_RATIO : LIQUITY_NORMAL_MODE_RATIO,
83
84
  priceForRecovery: new Dec(recoveryMode ? LIQUITY_RECOVERY_MODE_RATIO : LIQUITY_NORMAL_MODE_RATIO).mul(totalLUSD).div(totalETH).div(100)
84
85
  .toString(),
86
+ exposure: getExposure(assetAmountInEth(troveInfo[2].toString()), new Dec(assetAmountInEth(troveInfo[1].toString())).mul(assetPrice).toString()),
85
87
  };
86
88
  return payload;
87
89
  });
@@ -14,6 +14,7 @@ import { CdpType } from '../types';
14
14
  import { wethToEth } from '../services/utils';
15
15
  import { parseCollateralInfo } from '../helpers/makerHelpers';
16
16
  import { getViemProvider, setViemBlockNumber } from '../services/viem';
17
+ import { getExposure } from '../moneymarket';
17
18
  export const _getMakerAccountBalances = (provider, network, block, addressMapping, cdpId, _managerAddress) => __awaiter(void 0, void 0, void 0, function* () {
18
19
  let balances = {
19
20
  collateral: {},
@@ -139,6 +140,7 @@ export const _getMakerCdpData = (provider, network, cdp) => __awaiter(void 0, vo
139
140
  globalDebtCurrent: collInfo.globalDebtCurrent,
140
141
  liquidationFee: collInfo.liquidationFee,
141
142
  lastUpdated: Date.now(),
143
+ exposure: getExposure(assetAmountInEth(debt, 'DAI'), collateralUsd),
142
144
  };
143
145
  });
144
146
  export const getMakerCdpData = (provider, network, cdp) => __awaiter(void 0, void 0, void 0, function* () { return _getMakerCdpData(getViemProvider(provider, network), network, cdp); });
@@ -0,0 +1,16 @@
1
+ import { AaveV4HubInfo, AaveV4HubsType, AaveV4SpokeInfo, AaveV4SpokesType, NetworkNumber } from '../../types';
2
+ export declare const AAVE_V4_CORE_HUB: (networkId: NetworkNumber) => AaveV4HubInfo;
3
+ export declare const AAVE_V4_YIELD_SEEKING_HUB: (networkId: NetworkNumber) => AaveV4HubInfo;
4
+ export declare const AaveV4Hubs: (networkId: NetworkNumber) => {
5
+ readonly aave_v4_core_hub: AaveV4HubInfo;
6
+ readonly aave_v4_yield_seeking_hub: AaveV4HubInfo;
7
+ };
8
+ export declare const getAaveV4HubTypeInfo: (type: AaveV4HubsType, network?: NetworkNumber) => AaveV4HubInfo;
9
+ export declare const getAaveV4HubByAddress: (networkId: NetworkNumber, address: string) => AaveV4HubInfo | undefined;
10
+ export declare const AAVE_V4_CORE_SPOKE: (networkId: NetworkNumber) => AaveV4SpokeInfo;
11
+ export declare const AAVE_V4_YIELD_SEEKING_SPOKE: (networkId: NetworkNumber) => AaveV4SpokeInfo;
12
+ export declare const AaveV4Spokes: (networkId: NetworkNumber) => {
13
+ readonly aave_v4_core_spoke: AaveV4SpokeInfo;
14
+ readonly aave_v4_yield_seeking_spoke: AaveV4SpokeInfo;
15
+ };
16
+ export declare const getAaveV4SpokeTypeInfo: (type: AaveV4SpokesType, network?: NetworkNumber) => AaveV4SpokeInfo;
@@ -0,0 +1,47 @@
1
+ import { AaveV4HubsType, AaveV4SpokesType, NetworkNumber, } from '../../types';
2
+ // HUBS
3
+ export const AAVE_V4_CORE_HUB = (networkId) => ({
4
+ chainIds: [NetworkNumber.Eth],
5
+ label: 'Core Hub',
6
+ value: AaveV4HubsType.AaveV4CoreHub,
7
+ address: '0xaD905aD5EA5B98cD50AE40Cfe368344686a21366',
8
+ });
9
+ export const AAVE_V4_YIELD_SEEKING_HUB = (networkId) => ({
10
+ chainIds: [NetworkNumber.Eth],
11
+ label: 'Yield Seeking Hub',
12
+ value: AaveV4HubsType.AaveV4YieldSeekingHub,
13
+ address: '0x86F37ba3b480c5fE22A7eb1ba2B2D49c94089FBB',
14
+ });
15
+ export const AaveV4Hubs = (networkId) => ({
16
+ [AaveV4HubsType.AaveV4CoreHub]: AAVE_V4_CORE_HUB(networkId),
17
+ [AaveV4HubsType.AaveV4YieldSeekingHub]: AAVE_V4_YIELD_SEEKING_HUB(networkId),
18
+ });
19
+ export const getAaveV4HubTypeInfo = (type, network) => (Object.assign({}, AaveV4Hubs(network !== null && network !== void 0 ? network : NetworkNumber.Eth))[type]);
20
+ export const getAaveV4HubByAddress = (networkId, address) => Object.values(AaveV4Hubs(networkId)).find(hub => hub.address.toLowerCase() === address.toLowerCase());
21
+ // SPOKES
22
+ export const AAVE_V4_CORE_SPOKE = (networkId) => ({
23
+ chainIds: [NetworkNumber.Eth],
24
+ label: 'Core Spoke',
25
+ value: AaveV4SpokesType.AaveV4CoreSpoke,
26
+ url: 'core',
27
+ address: '0xBa97c5E52cd5BC3D7950Ae70779F8FfE92d40CdC',
28
+ hubs: [
29
+ AAVE_V4_CORE_HUB(NetworkNumber.Eth).address,
30
+ ],
31
+ });
32
+ export const AAVE_V4_YIELD_SEEKING_SPOKE = (networkId) => ({
33
+ chainIds: [NetworkNumber.Eth],
34
+ label: 'Yield Seeking Spoke',
35
+ value: AaveV4SpokesType.AaveV4YieldSeekingSpoke,
36
+ url: 'yield-seeking',
37
+ address: '0x2559e4e04f2ca7180e5f20c2872d22ec89601b56',
38
+ hubs: [
39
+ AAVE_V4_CORE_HUB(NetworkNumber.Eth).address,
40
+ AAVE_V4_YIELD_SEEKING_HUB(NetworkNumber.Eth).address,
41
+ ],
42
+ });
43
+ export const AaveV4Spokes = (networkId) => ({
44
+ [AaveV4SpokesType.AaveV4CoreSpoke]: AAVE_V4_CORE_SPOKE(networkId),
45
+ [AaveV4SpokesType.AaveV4YieldSeekingSpoke]: AAVE_V4_YIELD_SEEKING_SPOKE(networkId),
46
+ });
47
+ export const getAaveV4SpokeTypeInfo = (type, network) => (Object.assign({}, AaveV4Spokes(network !== null && network !== void 0 ? network : NetworkNumber.Eth))[type]);
@@ -7,3 +7,4 @@ export { LlamaLendMarkets } from './llamaLend';
7
7
  export { LiquityV2Markets, findLiquityV2MarketByAddress } from './liquityV2';
8
8
  export { EulerV2Markets } from './euler';
9
9
  export { FluidMarkets, getFluidVersionsDataForNetwork, getFluidMarketInfoById, getFTokenAddress, getFluidMarketInfoByAddress, } from './fluid';
10
+ export { AaveV4Spokes } from './aaveV4';
@@ -7,3 +7,4 @@ export { LlamaLendMarkets } from './llamaLend';
7
7
  export { LiquityV2Markets, findLiquityV2MarketByAddress } from './liquityV2';
8
8
  export { EulerV2Markets } from './euler';
9
9
  export { FluidMarkets, getFluidVersionsDataForNetwork, getFluidMarketInfoById, getFTokenAddress, getFluidMarketInfoByAddress, } from './fluid';
10
+ export { AaveV4Spokes } from './aaveV4';
@@ -10,3 +10,4 @@ export declare const isLeveragedPos: (usedAssets: MMUsedAssets, dustLimit?: numb
10
10
  leveragedAsset: string;
11
11
  };
12
12
  export declare const aprToApy: (interest: string | number, frequency?: number) => string;
13
+ export declare const getExposure: (borrowedUsd: string, suppliedUsd: string) => string;
@@ -77,3 +77,9 @@ export const aprToApy = (interest, frequency = BLOCKS_IN_A_YEAR) => new Dec(inte
77
77
  .minus(1)
78
78
  .times(100)
79
79
  .toString();
80
+ export const getExposure = (borrowedUsd, suppliedUsd) => {
81
+ if (borrowedUsd === '0' || suppliedUsd === '0')
82
+ return 'N/A';
83
+ const balanceUsd = new Dec(suppliedUsd).sub(borrowedUsd).toString();
84
+ return new Dec(suppliedUsd).div(balanceUsd).toDecimalPlaces(2).toString();
85
+ };
@@ -9,7 +9,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
9
9
  };
10
10
  import Dec from 'decimal.js';
11
11
  import { NetworkNumber } from '../types/common';
12
- import { AaveMarkets, CompoundMarkets, CrvUsdMarkets, EulerV2Markets, LiquityV2Markets, LlamaLendMarkets, MorphoBlueMarkets, SparkMarkets, } from '../markets';
12
+ import { AaveMarkets, AaveV4Spokes, CompoundMarkets, CrvUsdMarkets, EulerV2Markets, LiquityV2Markets, LlamaLendMarkets, MorphoBlueMarkets, SparkMarkets, } from '../markets';
13
13
  import { _getMorphoBlueAccountData, _getMorphoBlueMarketData, getMorphoEarn } from '../morphoBlue';
14
14
  import { AaveVersions, CompoundVersions, } from '../types';
15
15
  import { _getCompoundV3AccountData, _getCompoundV3MarketsData } from '../compoundV3';
@@ -34,6 +34,7 @@ import { fetchSparkAirdropRewards, fetchSparkRewards } from '../claiming/spark';
34
34
  import { fetchMorphoBlueRewards } from '../claiming/morphoBlue';
35
35
  import { getKingRewards } from '../claiming/king';
36
36
  import { fetchEthenaAirdropRewards } from '../claiming/ethena';
37
+ import { _getAaveV4AccountData, _getAaveV4SpokeData } from '../aaveV4';
37
38
  export function getPortfolioData(provider_1, network_1, defaultProvider_1, addresses_1) {
38
39
  return __awaiter(this, arguments, void 0, function* (provider, network, defaultProvider, addresses, isSim = false) {
39
40
  const isMainnet = network === NetworkNumber.Eth;
@@ -50,6 +51,7 @@ export function getPortfolioData(provider_1, network_1, defaultProvider_1, addre
50
51
  const llamaLendMarkets = [NetworkNumber.Eth, NetworkNumber.Arb].includes(network) ? Object.values(LlamaLendMarkets(network)).filter((market) => market.chainIds.includes(network)) : [];
51
52
  const liquityV2Markets = [NetworkNumber.Eth].includes(network) ? Object.values(LiquityV2Markets(network)) : [];
52
53
  const liquityV2MarketsStaking = [NetworkNumber.Eth].includes(network) ? Object.values(LiquityV2Markets(network)).filter(market => !market.isLegacy) : [];
54
+ const aaveV4Spokes = Object.values(AaveV4Spokes(network)).filter((market) => market.chainIds.includes(network));
53
55
  const args = [network, { batch: { multicall: { batchSize: isSim ? 500000 : 2500000 } } }];
54
56
  const client = getViemProvider(provider, ...args);
55
57
  const defaultClient = getViemProvider(defaultProvider, ...args);
@@ -64,6 +66,7 @@ export function getPortfolioData(provider_1, network_1, defaultProvider_1, addre
64
66
  const crvUsdMarketsData = {};
65
67
  const llamaLendMarketsData = {};
66
68
  const liquityV2MarketsData = {};
69
+ const aaveV4SpokesData = {};
67
70
  const markets = {
68
71
  morphoMarketsData,
69
72
  compoundV3MarketsData,
@@ -75,6 +78,7 @@ export function getPortfolioData(provider_1, network_1, defaultProvider_1, addre
75
78
  crvUsdMarketsData,
76
79
  llamaLendMarketsData,
77
80
  liquityV2MarketsData,
81
+ aaveV4SpokesData,
78
82
  };
79
83
  const positions = {};
80
84
  const stakingPositions = {};
@@ -83,6 +87,7 @@ export function getPortfolioData(provider_1, network_1, defaultProvider_1, addre
83
87
  for (const address of allAddresses) {
84
88
  positions[address.toLowerCase()] = {
85
89
  aaveV3: {},
90
+ aaveV4: {},
86
91
  morphoBlue: {},
87
92
  compoundV3: {},
88
93
  spark: {},
@@ -148,6 +153,10 @@ export function getPortfolioData(provider_1, network_1, defaultProvider_1, addre
148
153
  const marketData = yield _getAaveV3MarketData(client, network, market);
149
154
  aaveV3MarketsData[market.value] = marketData;
150
155
  })),
156
+ ...aaveV4Spokes.map((spoke) => __awaiter(this, void 0, void 0, function* () {
157
+ const spokeData = yield _getAaveV4SpokeData(client, network, spoke);
158
+ aaveV4SpokesData[spoke.value] = spokeData;
159
+ })),
151
160
  ...aaveV2Markets.map((market) => __awaiter(this, void 0, void 0, function* () {
152
161
  const marketData = yield _getAaveV2MarketsData(client, network, market);
153
162
  aaveV2MarketsData[market.value] = marketData;
@@ -417,6 +426,17 @@ export function getPortfolioData(provider_1, network_1, defaultProvider_1, addre
417
426
  positions[address.toLowerCase()].aaveV3[market.value] = { error: `Error fetching AaveV3 account data for address ${address} on market ${market.value}`, data: null };
418
427
  }
419
428
  }))).flat(),
429
+ ...aaveV4Spokes.map((spoke) => allAddresses.map((address) => __awaiter(this, void 0, void 0, function* () {
430
+ try {
431
+ const accData = yield _getAaveV4AccountData(client, network, aaveV4SpokesData[spoke.value], address);
432
+ if (new Dec(accData.suppliedUsd).gt(0))
433
+ positions[address.toLowerCase()].aaveV4[spoke.value] = { error: '', data: accData };
434
+ }
435
+ catch (error) {
436
+ console.error(`Error fetching AaveV4 account data for address ${address} on spoke ${spoke.value}:`, error);
437
+ positions[address.toLowerCase()].aaveV4[spoke.value] = { error: `Error fetching AaveV4 account data for address ${address} on spoke ${spoke.value}`, data: null };
438
+ }
439
+ }))).flat(),
420
440
  ...morphoMarkets.map((market) => addresses.map((address) => __awaiter(this, void 0, void 0, function* () {
421
441
  try {
422
442
  const [accDataPromise, earnDataPromise] = yield Promise.allSettled([
@@ -21,6 +21,7 @@ export declare const MAXUINT: string;
21
21
  export declare const isMaxuint: (amount: string) => boolean;
22
22
  export declare const isMainnetNetwork: (network: NetworkNumber) => network is NetworkNumber.Eth;
23
23
  export declare const DEFAULT_TIMEOUT = 2000;
24
+ export declare const LONGER_TIMEOUT = 5000;
24
25
  /**
25
26
  * Converts web3 hybrid response (that can be used as objects and arrays, so has duplicated values) to objects.
26
27
  * @param value
@@ -34,6 +34,7 @@ export const MAXUINT = '11579208923731619542357098500868790785326998466564056403
34
34
  export const isMaxuint = (amount) => compareAddresses(MAXUINT, amount);
35
35
  export const isMainnetNetwork = (network) => network === NetworkNumber.Eth;
36
36
  export const DEFAULT_TIMEOUT = 2000; // 2 seconds
37
+ export const LONGER_TIMEOUT = 5000; // 5 seconds
37
38
  /**
38
39
  * Converts web3 hybrid response (that can be used as objects and arrays, so has duplicated values) to objects.
39
40
  * @param value