@1delta/margin-fetcher 0.0.169 → 0.0.171

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 (117) hide show
  1. package/dist/abis/euler/accountLens.d.ts +191 -0
  2. package/dist/abis/euler/accountLens.d.ts.map +1 -0
  3. package/dist/abis/euler/eVault.d.ts +206 -0
  4. package/dist/abis/euler/eVault.d.ts.map +1 -0
  5. package/dist/abis/euler/evc.d.ts +81 -0
  6. package/dist/abis/euler/evc.d.ts.map +1 -0
  7. package/dist/abis/euler/genericFactory.d.ts +26 -0
  8. package/dist/abis/euler/genericFactory.d.ts.map +1 -0
  9. package/dist/abis/euler/index.d.ts +7 -0
  10. package/dist/abis/euler/index.d.ts.map +1 -0
  11. package/dist/abis/euler/payments.d.ts +140 -0
  12. package/dist/abis/euler/payments.d.ts.map +1 -0
  13. package/dist/abis/euler/swapper.d.ts +143 -0
  14. package/dist/abis/euler/swapper.d.ts.map +1 -0
  15. package/dist/abis/euler/vaultLens.d.ts +336 -0
  16. package/dist/abis/euler/vaultLens.d.ts.map +1 -0
  17. package/dist/index.d.ts +1 -1
  18. package/dist/index.d.ts.map +1 -1
  19. package/dist/index.js +1359 -163
  20. package/dist/index.js.map +1 -1
  21. package/dist/lending/index.d.ts +1 -1
  22. package/dist/lending/index.d.ts.map +1 -1
  23. package/dist/lending/margin/base/borrow.d.ts +1 -1
  24. package/dist/lending/margin/base/deposit.d.ts +1 -1
  25. package/dist/lending/margin/base/repay.d.ts +1 -1
  26. package/dist/lending/margin/base/standard/borrow.d.ts +1 -1
  27. package/dist/lending/margin/base/standard/deposit.d.ts +1 -1
  28. package/dist/lending/margin/base/standard/repay.d.ts +1 -1
  29. package/dist/lending/margin/base/standard/withdraw.d.ts +1 -1
  30. package/dist/lending/margin/base/utils.d.ts +1 -1
  31. package/dist/lending/margin/base/withdraw.d.ts +1 -1
  32. package/dist/lending/margin/base/yield/getRewardYieldChange.d.ts +0 -4
  33. package/dist/lending/margin/base/yield/getRewardYieldChange.d.ts.map +1 -1
  34. package/dist/lending/margin/e-mode/index.d.ts.map +1 -1
  35. package/dist/lending/margin/loop/types.d.ts +3 -3
  36. package/dist/lending/margin/loop/types.d.ts.map +1 -1
  37. package/dist/lending/margin/loop/utils.d.ts +4 -0
  38. package/dist/lending/margin/loop/utils.d.ts.map +1 -1
  39. package/dist/lending/public-data/aave-v2-type/publicCallBuild.d.ts.map +1 -1
  40. package/dist/lending/public-data/aave-v2-type/publicCallParse.d.ts.map +1 -1
  41. package/dist/lending/public-data/compound-v2/convert/benqi.d.ts +1 -1
  42. package/dist/lending/public-data/compound-v2/convert/standard.d.ts +1 -1
  43. package/dist/lending/public-data/compound-v2/convert/sumer.d.ts +1 -1
  44. package/dist/lending/public-data/compound-v2/convert/takara.d.ts +1 -1
  45. package/dist/lending/public-data/compound-v2/convert/tectonic.d.ts +1 -1
  46. package/dist/lending/public-data/compound-v3/publicCallParse.d.ts.map +1 -1
  47. package/dist/lending/public-data/euler/fetcher/cluster.d.ts +21 -0
  48. package/dist/lending/public-data/euler/fetcher/cluster.d.ts.map +1 -0
  49. package/dist/lending/public-data/euler/fetcher/constants.d.ts +29 -0
  50. package/dist/lending/public-data/euler/fetcher/constants.d.ts.map +1 -0
  51. package/dist/lending/public-data/euler/fetcher/normalize.d.ts +171 -0
  52. package/dist/lending/public-data/euler/fetcher/normalize.d.ts.map +1 -0
  53. package/dist/lending/public-data/euler/fetcher/types.d.ts +113 -0
  54. package/dist/lending/public-data/euler/fetcher/types.d.ts.map +1 -0
  55. package/dist/lending/public-data/euler/publicCallBuild.d.ts +335 -0
  56. package/dist/lending/public-data/euler/publicCallBuild.d.ts.map +1 -0
  57. package/dist/lending/public-data/euler/publicCallParse.d.ts +9 -0
  58. package/dist/lending/public-data/euler/publicCallParse.d.ts.map +1 -0
  59. package/dist/lending/public-data/fetchLender.d.ts.map +1 -1
  60. package/dist/lending/public-data/morpho/convertPublic.d.ts.map +1 -1
  61. package/dist/lending/public-data/morpho/fetchPublic.d.ts.map +1 -1
  62. package/dist/lending/public-data/morpho/getMarketsFromChain.d.ts.map +1 -1
  63. package/dist/lending/user-data/abis.d.ts +1 -10437
  64. package/dist/lending/user-data/abis.d.ts.map +1 -1
  65. package/dist/lending/user-data/euler/userCallBuild.d.ts +22 -0
  66. package/dist/lending/user-data/euler/userCallBuild.d.ts.map +1 -0
  67. package/dist/lending/user-data/euler/userCallParse.d.ts +10 -0
  68. package/dist/lending/user-data/euler/userCallParse.d.ts.map +1 -0
  69. package/dist/lending/user-data/fetch-balances/parse.d.ts.map +1 -1
  70. package/dist/lending/user-data/fetch-balances/prepare.d.ts.map +1 -1
  71. package/dist/lending/user-data/fetch-balances/types.d.ts +3 -1
  72. package/dist/lending/user-data/fetch-balances/types.d.ts.map +1 -1
  73. package/dist/lending/user-data/index.d.ts +1 -1
  74. package/dist/lending/user-data/index.d.ts.map +1 -1
  75. package/dist/lending/user-data/init/userCallParse.d.ts.map +1 -1
  76. package/dist/lending/user-data/utils/createEulerMultiAccountTypeUserState.d.ts +51 -0
  77. package/dist/lending/user-data/utils/createEulerMultiAccountTypeUserState.d.ts.map +1 -0
  78. package/dist/lending/user-data/utils/createGeneralUserState.d.ts.map +1 -1
  79. package/dist/lending/user-data/utils/createSumerUserState.d.ts.map +1 -1
  80. package/dist/lending/user-data/utils/getBalanceForMarketUid.d.ts +5 -0
  81. package/dist/lending/user-data/utils/getBalanceForMarketUid.d.ts.map +1 -0
  82. package/dist/lending/user-data/utils/index.d.ts +1 -0
  83. package/dist/lending/user-data/utils/index.d.ts.map +1 -1
  84. package/dist/lending/user-data/utils/types.d.ts +2 -1
  85. package/dist/lending/user-data/utils/types.d.ts.map +1 -1
  86. package/dist/lending/user-data/with-permissions/e2e.d.ts.map +1 -1
  87. package/dist/lending/user-data/with-permissions/prepare.d.ts.map +1 -1
  88. package/dist/lending/user-data/with-permissions/types.d.ts +1 -1
  89. package/dist/lending/user-data/with-permissions/types.d.ts.map +1 -1
  90. package/dist/lending-pairs/computeLendingPairs.d.ts.map +1 -1
  91. package/dist/prices/oracle-prices/fetchOraclePrices.d.ts.map +1 -1
  92. package/dist/prices/oracle-prices/fetchers/euler.d.ts +363 -0
  93. package/dist/prices/oracle-prices/fetchers/euler.d.ts.map +1 -0
  94. package/dist/prices/oracle-prices/fetchers/index.d.ts +1 -0
  95. package/dist/prices/oracle-prices/fetchers/index.d.ts.map +1 -1
  96. package/dist/prices/pendle/fetchPendlePrices.d.ts.map +1 -1
  97. package/dist/types/apiReturnType.d.ts +6 -2
  98. package/dist/types/apiReturnType.d.ts.map +1 -1
  99. package/dist/types/lender/aave-v2-types.d.ts +2 -2
  100. package/dist/types/lender/aave-v2-types.d.ts.map +1 -1
  101. package/dist/types/lender/aave-v3-types.d.ts +5 -1
  102. package/dist/types/lender/aave-v3-types.d.ts.map +1 -1
  103. package/dist/types/lender/compound-v2-types.d.ts +2 -2
  104. package/dist/types/lender/compound-v2-types.d.ts.map +1 -1
  105. package/dist/types/lender/compound-v3-types.d.ts +2 -2
  106. package/dist/types/lender/compound-v3-types.d.ts.map +1 -1
  107. package/dist/types/lender/init-types.d.ts +2 -2
  108. package/dist/types/lender/init-types.d.ts.map +1 -1
  109. package/dist/types/lender/morpho-types.d.ts +7 -6
  110. package/dist/types/lender/morpho-types.d.ts.map +1 -1
  111. package/dist/types/lenderTypes.d.ts +4 -4
  112. package/dist/types/lenderTypes.d.ts.map +1 -1
  113. package/dist/utils/index.d.ts +2 -1
  114. package/dist/utils/index.d.ts.map +1 -1
  115. package/dist/yields/intrinsic/fetchers/usdx.d.ts +1 -0
  116. package/dist/yields/intrinsic/fetchers/usdx.d.ts.map +1 -1
  117. package/package.json +7 -7
package/dist/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import { parseAbi, formatEther, BaseError, encodeFunctionData, formatUnits, decodeFunctionResult, decodeAbiParameters, AbiEncodingLengthMismatchError, concatHex, isAddress, InvalidAddressError, pad, stringToHex, boolToHex, integerRegex, numberToHex, bytesRegex, BytesSizeMismatchError, arrayRegex, UnsupportedPackedAbiType } from './chunk-ZVIJSUIM.js';
2
2
  import './chunk-BYTNVMX7.js';
3
3
  import './chunk-PR4QN5HX.js';
4
- import { Lender, isAaveType, isCompoundV3, isMultiMarket, isInit, isCompoundV2Type, isVenusType, isMorphoType, isSumerType, AAVE_V3_LENDERS, AAVE_V2_LENDERS, isAaveV2Type, isAaveV32Type, isAaveV3Type, isYLDR, isCompoundV3Type, isTectonicType, isBenqiType, isLista } from '@1delta/lender-registry';
4
+ import { Lender, isAaveType, isCompoundV3, isMultiMarket, isInit, isCompoundV2Type, isVenusType, isMorphoType, isSumerType, AAVE_V3_LENDERS, AAVE_V2_LENDERS, isAaveV2Type, isAaveV32Type, isAaveV3Type, isEulerType, isYLDR, isCompoundV3Type, isTectonicType, isBenqiType, isLista } from '@1delta/lender-registry';
5
5
  export { isAaveType, isAaveV2Type, isAaveV32Type, isAaveV3Type, isCompoundV3, isCompoundV3Type, isInit, isMorphoType, isMultiMarket, isYLDR } from '@1delta/lender-registry';
6
6
  import lodash from 'lodash';
7
7
  import { getEvmChain, multicallRetry, getEvmClient, getEvmClientUniversal } from '@1delta/providers';
@@ -6271,7 +6271,9 @@ globalThis[GLOBAL_LENDER_DATA_KEY] = {
6271
6271
  aaveWethGateway: {},
6272
6272
  morphoBundler3: {},
6273
6273
  listaNativeProvider: {},
6274
- compoundV3Bulker: {}
6274
+ compoundV3Bulker: {},
6275
+ eulerConfigs: {},
6276
+ eulerVaults: {}
6275
6277
  };
6276
6278
  function getGlobalData2() {
6277
6279
  return globalThis[GLOBAL_LENDER_DATA_KEY];
@@ -6293,6 +6295,8 @@ var compoundV2Pools = () => getGlobalData2()?.compoundV2Pools;
6293
6295
  var compoundV2Tokens = () => getGlobalData2()?.compoundV2Tokens;
6294
6296
  var compoundV2TokenArray = () => getGlobalData2()?.compoundV2TokenArray;
6295
6297
  var initConfig = () => getGlobalData2()?.initConfig;
6298
+ var eulerConfigs = () => getGlobalData2()?.eulerConfigs;
6299
+ var eulerVaults = () => getGlobalData2()?.eulerVaults;
6296
6300
  var getListUrl = (chainId) => `https://raw.githubusercontent.com/1delta-DAO/token-lists/main/${chainId}.json`;
6297
6301
  async function fetchTokenList(chainId) {
6298
6302
  const data = await fetch(getListUrl(chainId));
@@ -7441,6 +7445,9 @@ var ENABLED_COMPOUNDS = [
7441
7445
  var DISABLED_COMPOUNDS = {
7442
7446
  [Chain.ETHEREUM_MAINNET]: [Lender.CREAM_FINANCE]
7443
7447
  };
7448
+ var ENABLED_EULER_V2_CHAINS = [
7449
+ Chain.BNB_SMART_CHAIN_MAINNET
7450
+ ];
7444
7451
  var getLendersForChain = (c) => {
7445
7452
  let lenders = [];
7446
7453
  Object.entries(aavePools() ?? {}).forEach(([l, data]) => {
@@ -7462,6 +7469,11 @@ var getLendersForChain = (c) => {
7462
7469
  if (!DISABLED_COMPOUNDS[c]?.includes(l) && chains.includes(c) && ENABLED_COMPOUNDS.includes(l))
7463
7470
  lenders.push(l);
7464
7471
  });
7472
+ if (ENABLED_EULER_V2_CHAINS.includes(c)) {
7473
+ Object.entries(eulerVaults() ?? {}).forEach(([l, data]) => {
7474
+ if (data[c]?.length > 0) lenders.push(l);
7475
+ });
7476
+ }
7465
7477
  return lenders;
7466
7478
  };
7467
7479
  var filterLendersByProtocol = (allLenders, protocolList) => {
@@ -8108,13 +8120,14 @@ var getAaveV2ReservesDataConverter = (lender, chainId, prices, additionalYields,
8108
8120
  ),
8109
8121
  intrinsicYield: additionalYields?.intrinsicYields[oracleKey] ?? 0,
8110
8122
  // rewards
8111
- rewards: lender === Lender.MERIDIAN && chainId === Chain.TAIKO_ALETHIA && additionalYields?.lenderRewards ? {
8112
- TAIKO: {
8123
+ rewards: lender === Lender.MERIDIAN && chainId === Chain.TAIKO_ALETHIA && additionalYields?.lenderRewards ? [
8124
+ {
8125
+ asset: "0xa9d23408b9ba935c230493c40c73824df71a0975",
8113
8126
  depositRate: additionalYields?.lenderRewards[Lender.MERIDIAN]?.[asset]?.deposit ?? 0,
8114
8127
  variableBorrowRate: additionalYields?.lenderRewards[Lender.MERIDIAN]?.[asset]?.borrow ?? 0,
8115
8128
  stableBorrowRate: 0
8116
8129
  }
8117
- } : {},
8130
+ ] : [],
8118
8131
  decimals: Number(
8119
8132
  configData?.[0 /* decimals */]
8120
8133
  ),
@@ -8266,9 +8279,9 @@ var getAaveV3ReservesDataConverter = (lender, chainId, prices, additionalYields,
8266
8279
  stableBorrowRate: formatAaveRawApyToApr(
8267
8280
  reserveData?.[7 /* stableBorrowRate */]?.toString()
8268
8281
  ),
8269
- intrinsicYield: additionalYields.intrinsicYields[toOracleKey(assetMeta?.assetGroup)] ?? 0,
8282
+ intrinsicYield: additionalYields?.intrinsicYields?.[toOracleKey(assetMeta?.assetGroup)] ?? 0,
8270
8283
  // rewards
8271
- rewards: {}
8284
+ rewards: []
8272
8285
  };
8273
8286
  const eModeCategory = Number(reserveEMode?.toString());
8274
8287
  resultReserves[marketUid] = {
@@ -8468,9 +8481,9 @@ function parseYLDRCall(chainId, lender, additionalYields, prices, tokenList) {
8468
8481
  reserveData?.[4 /* variableBorrowRate */]?.toString()
8469
8482
  ),
8470
8483
  stableBorrowRate: 0,
8471
- intrinsicYield: additionalYields.intrinsicYields[oracleKey] ?? 0,
8484
+ intrinsicYield: additionalYields?.intrinsicYields?.[oracleKey] ?? 0,
8472
8485
  // rewards
8473
- rewards: {},
8486
+ rewards: [],
8474
8487
  decimals: Number(
8475
8488
  configData?.[0 /* decimals */]
8476
8489
  ),
@@ -8607,9 +8620,9 @@ function parseAave32(chainId, lender, prices, additionalYields, tokenList) {
8607
8620
  stableBorrowRate: formatAaveRawApyToApr(
8608
8621
  reserveData?.[7 /* stableBorrowRate */]?.toString()
8609
8622
  ),
8610
- intrinsicYield: additionalYields.intrinsicYields[toOracleKey(assetMeta?.assetGroup)] ?? 0,
8623
+ intrinsicYield: additionalYields?.intrinsicYields?.[toOracleKey(assetMeta?.assetGroup)] ?? 0,
8611
8624
  // rewards
8612
- rewards: {}
8625
+ rewards: []
8613
8626
  };
8614
8627
  const assetIndex = lowerReservesList.indexOf(asset);
8615
8628
  const usageAsCollateralEnabled = configData?.[5 /* usageAsCollateralEnabled */];
@@ -8737,8 +8750,8 @@ var getInitReservesDataConverter = (lender, chainId, prices, additionalYields, t
8737
8750
  ),
8738
8751
  stableBorrowRate: 0,
8739
8752
  collateralActive: true,
8740
- intrinsicYield: additionalYields.intrinsicYields[oracleKey] ?? 0,
8741
- rewards: {},
8753
+ intrinsicYield: additionalYields?.intrinsicYields?.[oracleKey] ?? 0,
8754
+ rewards: [],
8742
8755
  config: {},
8743
8756
  borrowingEnabled: totalDebt !== "0",
8744
8757
  params
@@ -8795,6 +8808,16 @@ var getInitReservesDataConverter = (lender, chainId, prices, additionalYields, t
8795
8808
  var COMET_RISK_DECIMALS = 18;
8796
8809
  var SECONDS_PER_DAY = 3600 * 24;
8797
8810
  var DAYS_IN_YEAR = 365;
8811
+ var COMP_ADDRESSES = {
8812
+ "1": "0xc00e94cb662c3520282e6f5717214004a7f26888",
8813
+ "10": "0x7e7d4467112689329f7e06571ed0e8cbad4910ee",
8814
+ "130": "0xdf78e4f0a8279942ca68046476919a90f2288656",
8815
+ "137": "0x8505b9d2254a7ae468c0e9dd10ccea3a837aef5c",
8816
+ "5000": "0x52b7d8851d6ccbc6342ba0855be65f7b82a3f17f",
8817
+ "8453": "0x9e1028f5f1d5ede59748ffcee5532509976840e0",
8818
+ "42161": "0x354a6da3fcde098f8389cad84b0182725c6c91de",
8819
+ "534352": "0x643e160a3c3e2b7eae198f0beb1bfd2441450e86"
8820
+ };
8798
8821
  var getCompoundV3ReservesDataConverter = (lender, chainId, prices, additionalYields, tokenList = {}) => {
8799
8822
  const assetsToQuery = getCompoundV3Assets(chainId, lender);
8800
8823
  const baseAssetData = getCompoundV3BaseAsset(lender, chainId);
@@ -8849,7 +8872,7 @@ var getCompoundV3ReservesDataConverter = (lender, chainId, prices, additionalYie
8849
8872
  variableBorrowRate: 0,
8850
8873
  stableBorrowRate: 0,
8851
8874
  depositRate: 0,
8852
- intrinsicYield: additionalYields.intrinsicYields[oracleKey] ?? 0,
8875
+ intrinsicYield: additionalYields?.intrinsicYields?.[oracleKey] ?? 0,
8853
8876
  utilization: 0,
8854
8877
  // debt and liquidity are zero
8855
8878
  totalDebt: 0,
@@ -8860,7 +8883,7 @@ var getCompoundV3ReservesDataConverter = (lender, chainId, prices, additionalYie
8860
8883
  totalDeposits: totals,
8861
8884
  totalDepositsUSD: totalUsd,
8862
8885
  // rewards
8863
- rewards: {},
8886
+ rewards: [],
8864
8887
  collateralActive: true,
8865
8888
  isActive: true,
8866
8889
  isFrozen: false,
@@ -8887,7 +8910,11 @@ var getCompoundV3ReservesDataConverter = (lender, chainId, prices, additionalYie
8887
8910
  const price = prices[oracleKeyBase] ?? 1;
8888
8911
  const liquidity = Number(resultsSupply) - Number(resultsBorrow);
8889
8912
  const compPrice = prices["COMP"];
8890
- const baseMarketUid = createMarketUid(chainId, lender, baseAssetData.baseAsset);
8913
+ const baseMarketUid = createMarketUid(
8914
+ chainId,
8915
+ lender,
8916
+ baseAssetData.baseAsset
8917
+ );
8891
8918
  const baseData = {
8892
8919
  [baseAssetData.baseAsset]: {
8893
8920
  marketUid: baseMarketUid,
@@ -8924,19 +8951,20 @@ var getCompoundV3ReservesDataConverter = (lender, chainId, prices, additionalYie
8924
8951
  totalDeposits: resultsSupply,
8925
8952
  totalDebtUSD: Number(resultsBorrow) * price,
8926
8953
  totalDepositsUSD: Number(resultsSupply) * price,
8927
- // rewards
8928
- rewards: {
8929
- COMP: {
8954
+ // rewards - only populate if COMP exists on this chain
8955
+ rewards: COMP_ADDRESSES[chainId] ? [
8956
+ {
8957
+ asset: COMP_ADDRESSES[chainId],
8930
8958
  depositRate: compPrice * compToSuppliersPerDay / Number(resultsSupply) * DAYS_IN_YEAR * 100 / price,
8931
8959
  variableBorrowRate: compPrice * compToBorrowersPerDay / Number(resultsBorrow) * DAYS_IN_YEAR * 100 / price,
8932
8960
  stableBorrowRate: 0
8933
8961
  }
8934
- },
8962
+ ] : [],
8935
8963
  borrowingEnabled: true,
8936
8964
  collateralActive: false,
8937
8965
  isActive: true,
8938
8966
  isFrozen: false,
8939
- intrinsicYield: additionalYields.intrinsicYields[oracleKeyBase] ?? 0
8967
+ intrinsicYield: additionalYields?.intrinsicYields?.[oracleKeyBase] ?? 0
8940
8968
  }
8941
8969
  };
8942
8970
  return { data: { ...result, ...baseData }, chainId };
@@ -10846,7 +10874,7 @@ function getMarketUidsFromMeta(meta) {
10846
10874
  function createBaseTypeUserState(payload, lenderData, totalDeposits24h = 0, totalDebt24h = 0) {
10847
10875
  let assetKeys = getMarketUidsFromMeta(lenderData);
10848
10876
  const { chainId, account } = payload;
10849
- const mode = Number(payload.userEMode ?? 0);
10877
+ const mode = String(payload.userEMode ?? 0);
10850
10878
  const isWhitelisted = !Boolean(payload?.notWhitelisted ?? false);
10851
10879
  let depositInterest = 0;
10852
10880
  let borrowInterest = 0;
@@ -10880,32 +10908,32 @@ function createBaseTypeUserState(payload, lenderData, totalDeposits24h = 0, tota
10880
10908
  flags,
10881
10909
  configs
10882
10910
  } = lenderData[marketUid];
10911
+ const userConfigForAsset = configs[mode];
10883
10912
  deposits += depositsUSD;
10884
10913
  debt += debtStableUSD;
10885
10914
  debt += debtUSD;
10886
10915
  oracleDebt += debtStableUSDOracle;
10887
10916
  oracleDebt += debtUSDOracle;
10888
- Object.entries(rewards ?? {}).forEach(
10889
- ([key, rewardData]) => {
10890
- rewardDepositAccrual += rewardData.depositRate * depositsUSD;
10891
- rewardBorrowAccrual += rewardData.variableBorrowRate * debtUSD + (rewardData.stableBorrowRate ?? 0) * debtStableUSD;
10892
- const rewDepo = rewardData.depositRate * depositsUSD;
10893
- const rewDebt = rewardData.variableBorrowRate * debtUSD + (rewardData.stableBorrowRate ?? 0) * (debtStableUSD ?? 0);
10894
- if (!rewardsPerAsset[key])
10895
- rewardsPerAsset[key] = { depositApr: 0, borrowApr: 0 };
10896
- if (rewDepo > 0) rewardsPerAsset[key].depositApr += rewDepo;
10897
- if (rewDebt > 0) rewardsPerAsset[key].borrowApr += rewDebt;
10898
- }
10899
- );
10917
+ (rewards ?? []).forEach((rewardData) => {
10918
+ const key = rewardData.asset;
10919
+ rewardDepositAccrual += rewardData.depositRate * depositsUSD;
10920
+ rewardBorrowAccrual += rewardData.variableBorrowRate * debtUSD + (rewardData.stableBorrowRate ?? 0) * debtStableUSD;
10921
+ const rewDepo = rewardData.depositRate * depositsUSD;
10922
+ const rewDebt = rewardData.variableBorrowRate * debtUSD + (rewardData.stableBorrowRate ?? 0) * (debtStableUSD ?? 0);
10923
+ if (!rewardsPerAsset[key])
10924
+ rewardsPerAsset[key] = { depositApr: 0, borrowApr: 0 };
10925
+ if (rewDepo > 0) rewardsPerAsset[key].depositApr += rewDepo;
10926
+ if (rewDebt > 0) rewardsPerAsset[key].borrowApr += rewDebt;
10927
+ });
10900
10928
  stakingDepositAccrual += (intrinsicYield ?? 0) * depositsUSD;
10901
10929
  stakingBorrowAccrual += (intrinsicYield ?? 0) * (debtStableUSD + debtUSD);
10902
- if (flags?.collateralActive) {
10930
+ if (flags?.collateralActive || userConfigForAsset && !userConfigForAsset.collateralDisabled) {
10903
10931
  if (collateralEnabled) {
10904
- collateral += (configs[mode]?.collateralFactor ?? 1) * depositsUSDOracle;
10905
- borrowDiscountedCollateral += (configs[mode]?.borrowCollateralFactor ?? 1) * depositsUSDOracle;
10932
+ collateral += (userConfigForAsset?.collateralFactor ?? 1) * depositsUSDOracle;
10933
+ borrowDiscountedCollateral += (userConfigForAsset?.borrowCollateralFactor ?? 1) * depositsUSDOracle;
10906
10934
  }
10907
- borrowDiscountedCollateralAllActive += (configs[mode]?.borrowCollateralFactor ?? 1) * depositsUSDOracle;
10908
- collateralAllActive += (configs[mode]?.collateralFactor ?? 1) * depositsUSDOracle;
10935
+ borrowDiscountedCollateralAllActive += (userConfigForAsset?.borrowCollateralFactor ?? 1) * depositsUSDOracle;
10936
+ collateralAllActive += (userConfigForAsset?.collateralFactor ?? 1) * depositsUSDOracle;
10909
10937
  }
10910
10938
  depositInterest += depositRate * depositsUSD;
10911
10939
  borrowInterest += debtStableUSD * stableBorrowRate + debtUSD * variableBorrowRate;
@@ -11016,6 +11044,15 @@ function createBaseTypeUserState(payload, lenderData, totalDeposits24h = 0, tota
11016
11044
  };
11017
11045
  }
11018
11046
 
11047
+ // src/lending/user-data/utils/getBalanceForMarketUid.ts
11048
+ function getBalanceForMarketUid(lender, marketUid, balances, subAccount) {
11049
+ const accountPositions = balances?.[lender]?.data;
11050
+ if (!accountPositions) return void 0;
11051
+ if (accountPositions.length === 1)
11052
+ return accountPositions[0].positions.find((a) => a.marketUid === marketUid);
11053
+ return accountPositions.find((p) => p.accountId === subAccount)?.positions.find((a) => a.marketUid === marketUid);
11054
+ }
11055
+
11019
11056
  // src/lending/margin/base/utils.ts
11020
11057
  var EMPTY_BALANCE = {
11021
11058
  rewards: void 0,
@@ -11142,13 +11179,13 @@ function getIntrinsicYieldRepay(amountUSD, cashFlowDeposits, cashFlowDebt, depos
11142
11179
  // src/lending/margin/base/yield/getRewardYieldChange.ts
11143
11180
  function getRewardYieldDeposit(amountUSD, cashFlowDeposits, cashFlowDebt, deposits, debt, yieldParams) {
11144
11181
  const rewards = yieldParams?.rewards;
11145
- if (!rewards) return {};
11182
+ if (!Array.isArray(rewards) || rewards.length === 0) return {};
11146
11183
  const data = {};
11147
- for (const key of Object.keys(rewards)) {
11148
- const _flowOut = amountUSD * (rewards[key]?.depositRate ?? 0);
11184
+ for (const reward of rewards) {
11185
+ const _flowOut = amountUSD * (reward.depositRate ?? 0);
11149
11186
  const totalCashFlowDeposits = cashFlowDeposits + _flowOut;
11150
11187
  const newCollat = deposits + amountUSD;
11151
- data[key] = {
11188
+ data[reward.asset] = {
11152
11189
  borrowApr: Math.abs(debt) < 0.01 ? 0 : cashFlowDebt / debt,
11153
11190
  depositApr: totalCashFlowDeposits / newCollat,
11154
11191
  apr: (cashFlowDeposits + cashFlowDebt + _flowOut) / (newCollat - debt)
@@ -11158,13 +11195,13 @@ function getRewardYieldDeposit(amountUSD, cashFlowDeposits, cashFlowDebt, deposi
11158
11195
  }
11159
11196
  function getRewardYieldBorrow(amountUSD, irMode, cashFlowDeposits, cashFlowDebt, deposits, debt, yieldParams) {
11160
11197
  const rewards = yieldParams?.rewards;
11161
- if (!rewards) return {};
11198
+ if (!Array.isArray(rewards) || rewards.length === 0) return {};
11162
11199
  const data = {};
11163
- for (const key of Object.keys(rewards)) {
11164
- const _flowIn = amountUSD * ((irMode === 1 ? rewards[key]?.stableBorrowRate : rewards[key]?.variableBorrowRate) ?? 0);
11200
+ for (const reward of rewards) {
11201
+ const _flowIn = amountUSD * ((irMode === 1 ? reward.stableBorrowRate : reward.variableBorrowRate) ?? 0);
11165
11202
  const totalCashFlowDebt = cashFlowDebt + _flowIn;
11166
11203
  const newDebt = debt + amountUSD;
11167
- data[key] = {
11204
+ data[reward.asset] = {
11168
11205
  borrowApr: totalCashFlowDebt / newDebt,
11169
11206
  depositApr: Math.abs(deposits) < 0.01 ? 0 : cashFlowDeposits / deposits,
11170
11207
  apr: (cashFlowDeposits + cashFlowDebt + _flowIn) / (deposits - newDebt)
@@ -11174,13 +11211,13 @@ function getRewardYieldBorrow(amountUSD, irMode, cashFlowDeposits, cashFlowDebt,
11174
11211
  }
11175
11212
  function getRewardYieldWithdraw(amountUSD, cashFlowDeposits, cashFlowDebt, deposits, debt, yieldParams) {
11176
11213
  const rewards = yieldParams?.rewards;
11177
- if (!rewards) return {};
11214
+ if (!Array.isArray(rewards) || rewards.length === 0) return {};
11178
11215
  const data = {};
11179
- for (const key of Object.keys(rewards)) {
11180
- const _flowIn = amountUSD * (rewards[key]?.depositRate ?? 0);
11216
+ for (const reward of rewards) {
11217
+ const _flowIn = amountUSD * (reward.depositRate ?? 0);
11181
11218
  const totalCashFlowDeposits = cashFlowDeposits - _flowIn;
11182
11219
  const newCollat = deposits - amountUSD;
11183
- data[key] = {
11220
+ data[reward.asset] = {
11184
11221
  borrowApr: Math.abs(debt) < 0.01 ? 0 : cashFlowDebt / debt,
11185
11222
  depositApr: totalCashFlowDeposits / newCollat,
11186
11223
  apr: (cashFlowDeposits + cashFlowDebt - _flowIn) / (newCollat - debt)
@@ -11190,13 +11227,13 @@ function getRewardYieldWithdraw(amountUSD, cashFlowDeposits, cashFlowDebt, depos
11190
11227
  }
11191
11228
  function getRewardYieldRepay(amountUSD, irMode, cashFlowDeposits, cashFlowDebt, deposits, debt, yieldParams) {
11192
11229
  const rewards = yieldParams?.rewards;
11193
- if (!rewards) return {};
11230
+ if (!Array.isArray(rewards) || rewards.length === 0) return {};
11194
11231
  const data = {};
11195
- for (const key of Object.keys(rewards)) {
11196
- const _flowOut = amountUSD * ((irMode === 1 ? rewards[key]?.stableBorrowRate : rewards[key]?.variableBorrowRate) ?? 0);
11232
+ for (const reward of rewards) {
11233
+ const _flowOut = amountUSD * ((irMode === 1 ? reward.stableBorrowRate : reward.variableBorrowRate) ?? 0);
11197
11234
  const totalCashFlowDebt = cashFlowDebt - _flowOut;
11198
11235
  const newDebt = debt - amountUSD;
11199
- data[key] = {
11236
+ data[reward.asset] = {
11200
11237
  borrowApr: Math.abs(newDebt) < 0.01 ? 0 : totalCashFlowDebt / newDebt,
11201
11238
  depositApr: Math.abs(deposits) < 0.01 ? 0 : cashFlowDeposits / deposits,
11202
11239
  apr: (cashFlowDeposits + cashFlowDebt - _flowOut) / (deposits - newDebt)
@@ -11601,18 +11638,17 @@ function createSumerUserState(payload, lenderData, totalDeposits24h = 0, totalDe
11601
11638
  debt += debtUSD;
11602
11639
  oracleDebt += debtStableUSDOracle;
11603
11640
  oracleDebt += debtUSDOracle;
11604
- Object.entries(rewards ?? {}).forEach(
11605
- ([key, rewardData]) => {
11606
- rewardDepositAccrual += rewardData.depositRate * depositsUSD;
11607
- rewardBorrowAccrual += rewardData.variableBorrowRate * debtUSD + (rewardData.stableBorrowRate ?? 0) * debtStableUSD;
11608
- const rewDepo = rewardData.depositRate * depositsUSD;
11609
- const rewDebt = rewardData.variableBorrowRate * debtUSD + (rewardData.stableBorrowRate ?? 0) * (debtStableUSD ?? 0);
11610
- if (!rewardsPerAsset[key])
11611
- rewardsPerAsset[key] = { depositApr: 0, borrowApr: 0 };
11612
- if (rewDepo > 0) rewardsPerAsset[key].depositApr += rewDepo;
11613
- if (rewDebt > 0) rewardsPerAsset[key].borrowApr += rewDebt;
11614
- }
11615
- );
11641
+ (rewards ?? []).forEach((rewardData) => {
11642
+ const key = rewardData.asset;
11643
+ rewardDepositAccrual += rewardData.depositRate * depositsUSD;
11644
+ rewardBorrowAccrual += rewardData.variableBorrowRate * debtUSD + (rewardData.stableBorrowRate ?? 0) * debtStableUSD;
11645
+ const rewDepo = rewardData.depositRate * depositsUSD;
11646
+ const rewDebt = rewardData.variableBorrowRate * debtUSD + (rewardData.stableBorrowRate ?? 0) * (debtStableUSD ?? 0);
11647
+ if (!rewardsPerAsset[key])
11648
+ rewardsPerAsset[key] = { depositApr: 0, borrowApr: 0 };
11649
+ if (rewDepo > 0) rewardsPerAsset[key].depositApr += rewDepo;
11650
+ if (rewDebt > 0) rewardsPerAsset[key].borrowApr += rewDebt;
11651
+ });
11616
11652
  stakingDepositAccrual += (intrinsicYield ?? 0) * depositsUSD;
11617
11653
  stakingBorrowAccrual += (intrinsicYield ?? 0) * (debtStableUSD + debtUSD);
11618
11654
  if (sumerMeta) {
@@ -11674,7 +11710,7 @@ function createSumerUserState(payload, lenderData, totalDeposits24h = 0, totalDe
11674
11710
  intrinsicDepositApr: safeDivide(stakingDepositAccrual, deposits),
11675
11711
  intrinsicBorrowApr: safeDivide(stakingBorrowAccrual, debt)
11676
11712
  };
11677
- const userConfig = { selectedMode: 0, id: account, isWhitelisted };
11713
+ const userConfig = { selectedMode: "0", id: account, isWhitelisted };
11678
11714
  const creditLine = Math.max(
11679
11715
  0,
11680
11716
  borrowDiscountedCollateral - balanceData2.adjustedDebt
@@ -11768,7 +11804,7 @@ function createMultiAccountTypeUserState(payload, lenderData, histData) {
11768
11804
  for (let j = 0; j < positionKeys.length; j++) {
11769
11805
  const posId = positionKeys[j];
11770
11806
  const posMode = payload.modes?.[posId];
11771
- const mode = posMode ?? LENDER_MODE_NO_MODE;
11807
+ const mode = String(posMode ?? LENDER_MODE_NO_MODE);
11772
11808
  const userConfig = {
11773
11809
  id: posId,
11774
11810
  selectedMode: mode,
@@ -11802,9 +11838,9 @@ function createMultiAccountTypeUserState(payload, lenderData, histData) {
11802
11838
  } = lenderData[marketUid];
11803
11839
  deposits += depositsUSD;
11804
11840
  debt += debtUSD;
11805
- Object.entries(rewards ?? {}).map(([key, rewardData]) => {
11841
+ (rewards ?? []).forEach((rewardData) => {
11806
11842
  rewardDepositAccrual += rewardData.depositRate * depositsUSD;
11807
- rewardBorrowAccrual += rewardData.variableBorrowRate * debtUSD + rewardData.stableBorrowRate * debtUSD;
11843
+ rewardBorrowAccrual += rewardData.variableBorrowRate * debtUSD + (rewardData.stableBorrowRate ?? 0) * debtUSD;
11808
11844
  });
11809
11845
  stakingDepositAccrual += (intrinsicYield ?? 0) * depositsUSD;
11810
11846
  stakingBorrowAccrual += (intrinsicYield ?? 0) * debtUSD;
@@ -11984,7 +12020,15 @@ function convertMarketsToMorphoResponse(response, chainId, additionalYields = {
11984
12020
  if (collateralAsset && loanAsset && oracleAddress && oracleAddress !== zeroAddress) {
11985
12021
  const m = "MORPHO_BLUE_" + uniqueKey.slice(2).toUpperCase();
11986
12022
  if (!data[m]) data[m] = { data: {} };
11987
- const loanRewards = {};
12023
+ const loanRewards = [];
12024
+ state.rewards?.forEach((reward) => {
12025
+ loanRewards.push({
12026
+ asset: reward.asset.address,
12027
+ depositRate: reward.supplyApr * 100,
12028
+ variableBorrowRate: reward.borrowApr * 100,
12029
+ stableBorrowRate: 0
12030
+ });
12031
+ });
11988
12032
  const loanAssetAddress = loanAsset.address.toLowerCase();
11989
12033
  const meta = tokens[loanAssetAddress] ?? loanAsset;
11990
12034
  const totalDeposits = formatNr(state.supplyAssets, loanAsset.decimals);
@@ -12006,8 +12050,8 @@ function convertMarketsToMorphoResponse(response, chainId, additionalYields = {
12006
12050
  depositRate: apyToApr2(Number(state.supplyApy)) * 100,
12007
12051
  variableBorrowRate: apyToApr2(Number(state.borrowApy)) * 100,
12008
12052
  stableBorrowRate: 0,
12009
- intrinsicYield: additionalYields.intrinsicYields[meta?.assetGroup] ?? 0,
12010
- rewards: Object.keys(loanRewards).length > 0 ? loanRewards : void 0,
12053
+ intrinsicYield: additionalYields?.intrinsicYields?.[meta?.assetGroup] ?? 0,
12054
+ rewards: loanRewards.length > 0 ? loanRewards : void 0,
12011
12055
  decimals: loanAsset.decimals,
12012
12056
  config: {
12013
12057
  0: {
@@ -12055,7 +12099,7 @@ function convertMarketsToMorphoResponse(response, chainId, additionalYields = {
12055
12099
  depositRate: 0,
12056
12100
  variableBorrowRate: 0,
12057
12101
  stableBorrowRate: 0,
12058
- intrinsicYield: additionalYields.intrinsicYields[metaCollateral?.assetGroup] ?? 0,
12102
+ intrinsicYield: additionalYields?.intrinsicYields?.[metaCollateral?.assetGroup] ?? 0,
12059
12103
  rewards: void 0,
12060
12104
  decimals: collateralAsset.decimals,
12061
12105
  config: {
@@ -12129,12 +12173,9 @@ query GetMarkets {
12129
12173
  rewards {
12130
12174
  asset {
12131
12175
  address
12132
- name
12133
- symbol
12134
- decimals
12135
12176
  }
12136
- amountPerBorrowedToken
12137
- amountPerSuppliedToken
12177
+ supplyApr
12178
+ borrowApr
12138
12179
  }
12139
12180
  borrowAssets
12140
12181
  borrowAssetsUsd
@@ -12633,7 +12674,7 @@ function getListaMarketDataConverter(lender, chainId, prices, additionalYields =
12633
12674
  if (collateralToken && loanToken && oracle && oracle !== zeroAddress) {
12634
12675
  const m = "LISTA_DAO_" + uniqueKey.slice(2).toUpperCase();
12635
12676
  if (!data[m]) data[m] = { data: {} };
12636
- const loanRewards = {};
12677
+ const loanRewards = [];
12637
12678
  const loanTokenAddress = loanToken.toLowerCase();
12638
12679
  const collateralAssetAddress = collateralToken.toLowerCase();
12639
12680
  const loanAsset = tokens[loanTokenAddress];
@@ -12692,8 +12733,8 @@ function getListaMarketDataConverter(lender, chainId, prices, additionalYields =
12692
12733
  depositRate: depositApr,
12693
12734
  variableBorrowRate: borrowApr,
12694
12735
  stableBorrowRate: 0,
12695
- intrinsicYield: additionalYields.intrinsicYields[meta?.assetGroup] ?? 0,
12696
- rewards: Object.keys(loanRewards).length > 0 ? loanRewards : void 0,
12736
+ intrinsicYield: additionalYields?.intrinsicYields?.[meta?.assetGroup] ?? 0,
12737
+ rewards: loanRewards.length > 0 ? loanRewards : void 0,
12697
12738
  decimals: loanDecimals,
12698
12739
  config: {
12699
12740
  0: {
@@ -12731,7 +12772,7 @@ function getListaMarketDataConverter(lender, chainId, prices, additionalYields =
12731
12772
  depositRate: 0,
12732
12773
  variableBorrowRate: 0,
12733
12774
  stableBorrowRate: 0,
12734
- intrinsicYield: additionalYields.intrinsicYields[metaCollateral?.assetGroup] ?? 0,
12775
+ intrinsicYield: additionalYields?.intrinsicYields?.[metaCollateral?.assetGroup] ?? 0,
12735
12776
  rewards: void 0,
12736
12777
  decimals: collateralDecimals,
12737
12778
  config: {
@@ -12832,7 +12873,7 @@ function getMorphoMarketDataConverter(lender, chainId, prices, additionalYields
12832
12873
  if (collateralToken && loanToken && oracle && collateralToken !== zeroAddress && loanToken !== zeroAddress) {
12833
12874
  const m = "MORPHO_BLUE_" + uniqueKey.slice(2).toUpperCase();
12834
12875
  if (!data[m]) data[m] = { data: {} };
12835
- const loanRewards = {};
12876
+ const loanRewards = [];
12836
12877
  const loanAsset = tokens[loanToken.toLowerCase()];
12837
12878
  const collateralAsset = tokens[collateralToken.toLowerCase()];
12838
12879
  const loanDecimals = loanAsset?.decimals ?? 18;
@@ -12893,8 +12934,8 @@ function getMorphoMarketDataConverter(lender, chainId, prices, additionalYields
12893
12934
  depositRate: depositApr,
12894
12935
  variableBorrowRate: borrowApr,
12895
12936
  stableBorrowRate: 0,
12896
- intrinsicYield: additionalYields.intrinsicYields[meta?.assetGroup] ?? 0,
12897
- rewards: Object.keys(loanRewards).length > 0 ? loanRewards : void 0,
12937
+ intrinsicYield: additionalYields?.intrinsicYields?.[meta?.assetGroup] ?? 0,
12938
+ rewards: loanRewards.length > 0 ? loanRewards : void 0,
12898
12939
  decimals: loanDecimals,
12899
12940
  config: {
12900
12941
  0: {
@@ -12915,7 +12956,11 @@ function getMorphoMarketDataConverter(lender, chainId, prices, additionalYields
12915
12956
  const ltv = parseLtv(lltv);
12916
12957
  const collateralAssetAddress = (collateralAsset?.address ?? collateralToken).toLowerCase();
12917
12958
  const metaCollateral = tokens[collateralAssetAddress] ?? collateralAsset;
12918
- const collateralMarketUid = createMarketUid(chainId, m, collateralAssetAddress);
12959
+ const collateralMarketUid = createMarketUid(
12960
+ chainId,
12961
+ m,
12962
+ collateralAssetAddress
12963
+ );
12919
12964
  data[m].data[collateralMarketUid] = {
12920
12965
  marketUid: collateralMarketUid,
12921
12966
  poolId: collateralAssetAddress,
@@ -12933,7 +12978,7 @@ function getMorphoMarketDataConverter(lender, chainId, prices, additionalYields
12933
12978
  depositRate: 0,
12934
12979
  variableBorrowRate: 0,
12935
12980
  stableBorrowRate: 0,
12936
- intrinsicYield: additionalYields.intrinsicYields[metaCollateral?.assetGroup] ?? 0,
12981
+ intrinsicYield: additionalYields?.intrinsicYields?.[metaCollateral?.assetGroup] ?? 0,
12937
12982
  rewards: void 0,
12938
12983
  decimals: collateralDecimals,
12939
12984
  config: {
@@ -15518,7 +15563,7 @@ function convertSingleEntry(opts) {
15518
15563
  totalDepositsUSD: totalSupplyUnderlying * price,
15519
15564
  totalDebtStable: 0,
15520
15565
  totalDebtStableUSD: 0,
15521
- intrinsicYield: additionalYields.intrinsicYields[asset.assetGroup] ?? 0,
15566
+ intrinsicYield: additionalYields?.intrinsicYields?.[asset.assetGroup] ?? 0,
15522
15567
  config: {
15523
15568
  [LENDER_MODE_NO_MODE]: {
15524
15569
  category: LENDER_MODE_NO_MODE,
@@ -15534,7 +15579,7 @@ function convertSingleEntry(opts) {
15534
15579
  underlying: asset.address,
15535
15580
  isActive: Boolean(currentEntry?.isListed) && !allPaused,
15536
15581
  isFrozen: pausedActions[0 /* MINT */] && pausedActions[2 /* BORROW */],
15537
- rewards: {},
15582
+ rewards: [],
15538
15583
  collateralActive,
15539
15584
  borrowingEnabled,
15540
15585
  params: {
@@ -15617,13 +15662,13 @@ function convertSumerEntry(opts) {
15617
15662
  totalDepositsUSD: totalSupplyUnderlying * price,
15618
15663
  totalDebtStable: 0,
15619
15664
  totalDebtStableUSD: 0,
15620
- stakingYield: additionalYields.intrinsicYields[asset.assetGroup] ?? 0,
15665
+ stakingYield: additionalYields?.intrinsicYields?.[asset.assetGroup] ?? 0,
15621
15666
  config,
15622
15667
  hasStable: false,
15623
15668
  underlying: asset.address,
15624
15669
  isActive: Boolean(currentEntry.isListed),
15625
15670
  isFrozen: false,
15626
- rewards: {},
15671
+ rewards: [],
15627
15672
  collateralActive,
15628
15673
  borrowingEnabled,
15629
15674
  params: {
@@ -15678,7 +15723,7 @@ function convertTakaraEntry(opts) {
15678
15723
  totalDepositsUSD: totalSupplyUSD,
15679
15724
  totalDebtStable: 0,
15680
15725
  totalDebtStableUSD: 0,
15681
- intrinsicYield: additionalYields.intrinsicYields[asset.assetGroup] ?? 0,
15726
+ intrinsicYield: additionalYields?.intrinsicYields?.[asset.assetGroup] ?? 0,
15682
15727
  config: {
15683
15728
  [LENDER_MODE_NO_MODE]: {
15684
15729
  category: LENDER_MODE_NO_MODE,
@@ -15693,7 +15738,7 @@ function convertTakaraEntry(opts) {
15693
15738
  underlying: asset.address,
15694
15739
  isActive: info.isListed,
15695
15740
  isFrozen: false,
15696
- rewards: {},
15741
+ rewards: [],
15697
15742
  collateralActive: info.isListed,
15698
15743
  borrowingEnabled: info.isListed,
15699
15744
  params: {
@@ -15741,7 +15786,7 @@ function convertTectonicEntry(opts) {
15741
15786
  totalDepositsUSD: totalSupplyUnderlying * price,
15742
15787
  totalDebtStable: 0,
15743
15788
  totalDebtStableUSD: 0,
15744
- intrinsicYield: additionalYields.intrinsicYields[asset.assetGroup] ?? 0,
15789
+ intrinsicYield: additionalYields?.intrinsicYields?.[asset.assetGroup] ?? 0,
15745
15790
  config: {
15746
15791
  [LENDER_MODE_NO_MODE]: {
15747
15792
  category: LENDER_MODE_NO_MODE,
@@ -15756,7 +15801,7 @@ function convertTectonicEntry(opts) {
15756
15801
  underlying: asset.address,
15757
15802
  isActive: info.asCollateralEnabled,
15758
15803
  isFrozen: false,
15759
- rewards: {},
15804
+ rewards: [],
15760
15805
  collateralActive: info.asCollateralEnabled,
15761
15806
  borrowingEnabled: info.asCollateralEnabled,
15762
15807
  params: {
@@ -15903,7 +15948,7 @@ function convertBenqiEntry(opts) {
15903
15948
  totalDepositsUSD: totalDeposits * price,
15904
15949
  totalDebtStable: 0,
15905
15950
  totalDebtStableUSD: 0,
15906
- intrinsicYield: additionalYields.intrinsicYields[asset.assetGroup] ?? 0,
15951
+ intrinsicYield: additionalYields?.intrinsicYields?.[asset.assetGroup] ?? 0,
15907
15952
  config: {
15908
15953
  [LENDER_MODE_NO_MODE]: {
15909
15954
  category: LENDER_MODE_NO_MODE,
@@ -15918,7 +15963,7 @@ function convertBenqiEntry(opts) {
15918
15963
  underlying: asset.address,
15919
15964
  isActive: !parsed.mintPaused || !parsed.borrowPaused,
15920
15965
  isFrozen: parsed.mintPaused && parsed.borrowPaused,
15921
- rewards: {},
15966
+ rewards: [],
15922
15967
  collateralActive,
15923
15968
  borrowingEnabled,
15924
15969
  params: {
@@ -17042,6 +17087,634 @@ var VenusLensAbi = [
17042
17087
  }
17043
17088
  ];
17044
17089
 
17090
+ // src/abis/euler/vaultLens.ts
17091
+ var vaultLensAbi = [
17092
+ {
17093
+ type: "function",
17094
+ name: "getVaultInfoFull",
17095
+ inputs: [{ name: "vault", type: "address" }],
17096
+ outputs: [
17097
+ {
17098
+ name: "",
17099
+ type: "tuple",
17100
+ components: [
17101
+ { name: "timestamp", type: "uint256" },
17102
+ { name: "vault", type: "address" },
17103
+ { name: "vaultName", type: "string" },
17104
+ { name: "vaultSymbol", type: "string" },
17105
+ { name: "vaultDecimals", type: "uint256" },
17106
+ { name: "asset", type: "address" },
17107
+ { name: "assetName", type: "string" },
17108
+ { name: "assetSymbol", type: "string" },
17109
+ { name: "assetDecimals", type: "uint256" },
17110
+ { name: "unitOfAccount", type: "address" },
17111
+ { name: "unitOfAccountName", type: "string" },
17112
+ { name: "unitOfAccountSymbol", type: "string" },
17113
+ { name: "unitOfAccountDecimals", type: "uint256" },
17114
+ { name: "totalShares", type: "uint256" },
17115
+ { name: "totalCash", type: "uint256" },
17116
+ { name: "totalBorrowed", type: "uint256" },
17117
+ { name: "totalAssets", type: "uint256" },
17118
+ { name: "accumulatedFeesShares", type: "uint256" },
17119
+ { name: "accumulatedFeesAssets", type: "uint256" },
17120
+ { name: "governorFeeReceiver", type: "address" },
17121
+ { name: "protocolFeeReceiver", type: "address" },
17122
+ { name: "protocolFeeShare", type: "uint256" },
17123
+ { name: "interestFee", type: "uint256" },
17124
+ { name: "hookedOperations", type: "uint256" },
17125
+ { name: "configFlags", type: "uint256" },
17126
+ { name: "supplyCap", type: "uint256" },
17127
+ { name: "borrowCap", type: "uint256" },
17128
+ { name: "maxLiquidationDiscount", type: "uint256" },
17129
+ { name: "liquidationCoolOffTime", type: "uint256" },
17130
+ { name: "dToken", type: "address" },
17131
+ { name: "oracle", type: "address" },
17132
+ { name: "interestRateModel", type: "address" },
17133
+ { name: "hookTarget", type: "address" },
17134
+ { name: "evc", type: "address" },
17135
+ { name: "protocolConfig", type: "address" },
17136
+ { name: "balanceTracker", type: "address" },
17137
+ { name: "permit2", type: "address" },
17138
+ { name: "creator", type: "address" },
17139
+ { name: "governorAdmin", type: "address" },
17140
+ // irmInfo: VaultInterestRateModelInfo
17141
+ {
17142
+ name: "irmInfo",
17143
+ type: "tuple",
17144
+ components: [
17145
+ { name: "queryFailure", type: "bool" },
17146
+ { name: "queryFailureReason", type: "bytes" },
17147
+ { name: "vault", type: "address" },
17148
+ { name: "interestRateModel", type: "address" },
17149
+ {
17150
+ name: "interestRateInfo",
17151
+ type: "tuple[]",
17152
+ components: [
17153
+ { name: "cash", type: "uint256" },
17154
+ { name: "borrows", type: "uint256" },
17155
+ { name: "borrowSPY", type: "uint256" },
17156
+ { name: "borrowAPY", type: "uint256" },
17157
+ { name: "supplyAPY", type: "uint256" }
17158
+ ]
17159
+ },
17160
+ {
17161
+ name: "interestRateModelInfo",
17162
+ type: "tuple",
17163
+ components: [
17164
+ { name: "interestRateModel", type: "address" },
17165
+ { name: "interestRateModelType", type: "uint8" },
17166
+ { name: "interestRateModelParams", type: "bytes" }
17167
+ ]
17168
+ }
17169
+ ]
17170
+ },
17171
+ // collateralLTVInfo: LTVInfo[]
17172
+ {
17173
+ name: "collateralLTVInfo",
17174
+ type: "tuple[]",
17175
+ components: [
17176
+ { name: "collateral", type: "address" },
17177
+ { name: "borrowLTV", type: "uint256" },
17178
+ { name: "liquidationLTV", type: "uint256" },
17179
+ { name: "initialLiquidationLTV", type: "uint256" },
17180
+ { name: "targetTimestamp", type: "uint256" },
17181
+ { name: "rampDuration", type: "uint256" }
17182
+ ]
17183
+ },
17184
+ // liabilityPriceInfo: AssetPriceInfo
17185
+ {
17186
+ name: "liabilityPriceInfo",
17187
+ type: "tuple",
17188
+ components: [
17189
+ { name: "queryFailure", type: "bool" },
17190
+ { name: "queryFailureReason", type: "bytes" },
17191
+ { name: "timestamp", type: "uint256" },
17192
+ { name: "oracle", type: "address" },
17193
+ { name: "asset", type: "address" },
17194
+ { name: "unitOfAccount", type: "address" },
17195
+ { name: "amountIn", type: "uint256" },
17196
+ { name: "amountOutMid", type: "uint256" },
17197
+ { name: "amountOutBid", type: "uint256" },
17198
+ { name: "amountOutAsk", type: "uint256" }
17199
+ ]
17200
+ },
17201
+ // collateralPriceInfo: AssetPriceInfo[]
17202
+ {
17203
+ name: "collateralPriceInfo",
17204
+ type: "tuple[]",
17205
+ components: [
17206
+ { name: "queryFailure", type: "bool" },
17207
+ { name: "queryFailureReason", type: "bytes" },
17208
+ { name: "timestamp", type: "uint256" },
17209
+ { name: "oracle", type: "address" },
17210
+ { name: "asset", type: "address" },
17211
+ { name: "unitOfAccount", type: "address" },
17212
+ { name: "amountIn", type: "uint256" },
17213
+ { name: "amountOutMid", type: "uint256" },
17214
+ { name: "amountOutBid", type: "uint256" },
17215
+ { name: "amountOutAsk", type: "uint256" }
17216
+ ]
17217
+ },
17218
+ // oracleInfo: OracleDetailedInfo
17219
+ {
17220
+ name: "oracleInfo",
17221
+ type: "tuple",
17222
+ components: [
17223
+ { name: "oracle", type: "address" },
17224
+ { name: "name", type: "string" },
17225
+ { name: "oracleInfo", type: "bytes" }
17226
+ ]
17227
+ },
17228
+ // backupAssetPriceInfo: AssetPriceInfo
17229
+ {
17230
+ name: "backupAssetPriceInfo",
17231
+ type: "tuple",
17232
+ components: [
17233
+ { name: "queryFailure", type: "bool" },
17234
+ { name: "queryFailureReason", type: "bytes" },
17235
+ { name: "timestamp", type: "uint256" },
17236
+ { name: "oracle", type: "address" },
17237
+ { name: "asset", type: "address" },
17238
+ { name: "unitOfAccount", type: "address" },
17239
+ { name: "amountIn", type: "uint256" },
17240
+ { name: "amountOutMid", type: "uint256" },
17241
+ { name: "amountOutBid", type: "uint256" },
17242
+ { name: "amountOutAsk", type: "uint256" }
17243
+ ]
17244
+ },
17245
+ // backupAssetOracleInfo: OracleDetailedInfo
17246
+ {
17247
+ name: "backupAssetOracleInfo",
17248
+ type: "tuple",
17249
+ components: [
17250
+ { name: "oracle", type: "address" },
17251
+ { name: "name", type: "string" },
17252
+ { name: "oracleInfo", type: "bytes" }
17253
+ ]
17254
+ }
17255
+ ]
17256
+ }
17257
+ ],
17258
+ stateMutability: "view"
17259
+ }
17260
+ ];
17261
+
17262
+ // src/lending/public-data/euler/publicCallBuild.ts
17263
+ var buildEulerV2LenderReserveCall = (chainId, lender) => {
17264
+ if (!ENABLED_EULER_V2_CHAINS.includes(chainId)) return [];
17265
+ const config = eulerConfigs()?.[lender]?.[chainId];
17266
+ const vaults = eulerVaults()?.[lender]?.[chainId] ?? [];
17267
+ if (!config || vaults.length === 0) return [];
17268
+ return vaults.map((vault) => ({
17269
+ address: config.vaultLens,
17270
+ name: "getVaultInfoFull",
17271
+ params: [vault],
17272
+ abi: vaultLensAbi
17273
+ }));
17274
+ };
17275
+
17276
+ // src/lending/public-data/euler/fetcher/constants.ts
17277
+ var ZERO_ADDRESS = "0x0000000000000000000000000000000000000000";
17278
+
17279
+ // src/lending/public-data/euler/fetcher/cluster.ts
17280
+ function getActiveCollaterals(ltvInfo) {
17281
+ const active = /* @__PURE__ */ new Set();
17282
+ for (const entry of ltvInfo) {
17283
+ if (entry.borrowLTV > 0n) {
17284
+ active.add(entry.collateral.toLowerCase());
17285
+ }
17286
+ }
17287
+ return active;
17288
+ }
17289
+ function findVaultInfo(normalizedAddr, vaultData) {
17290
+ for (const [key, value] of vaultData) {
17291
+ if (key.toLowerCase() === normalizedAddr) return value;
17292
+ }
17293
+ return void 0;
17294
+ }
17295
+ function buildAdjacencyList(vaultData) {
17296
+ const adj = /* @__PURE__ */ new Map();
17297
+ const knownVaults = /* @__PURE__ */ new Set();
17298
+ for (const addr of vaultData.keys()) {
17299
+ const norm = addr.toLowerCase();
17300
+ knownVaults.add(norm);
17301
+ adj.set(norm, /* @__PURE__ */ new Set());
17302
+ }
17303
+ for (const [addr, info] of vaultData) {
17304
+ const from = addr.toLowerCase();
17305
+ const activeCollaterals = getActiveCollaterals(info.collateralLTVInfo);
17306
+ for (const to of activeCollaterals) {
17307
+ if (knownVaults.has(to) && from !== to) {
17308
+ adj.get(from).add(to);
17309
+ adj.get(to).add(from);
17310
+ }
17311
+ }
17312
+ }
17313
+ return adj;
17314
+ }
17315
+ function bfs(start, adj, visited) {
17316
+ const component = [];
17317
+ const queue = [start];
17318
+ visited.add(start);
17319
+ while (queue.length > 0) {
17320
+ const current = queue.shift();
17321
+ component.push(current);
17322
+ const neighbors = adj.get(current);
17323
+ if (!neighbors) continue;
17324
+ for (const neighbor of neighbors) {
17325
+ if (!visited.has(neighbor)) {
17326
+ visited.add(neighbor);
17327
+ queue.push(neighbor);
17328
+ }
17329
+ }
17330
+ }
17331
+ return component;
17332
+ }
17333
+ function findConnectedComponents(adj) {
17334
+ const visited = /* @__PURE__ */ new Set();
17335
+ const components = [];
17336
+ for (const vault of adj.keys()) {
17337
+ if (!visited.has(vault)) {
17338
+ const component = bfs(vault, adj, visited);
17339
+ components.push(component);
17340
+ }
17341
+ }
17342
+ return components;
17343
+ }
17344
+ function deriveGovernor(vaultAddresses, vaultData) {
17345
+ const counts = /* @__PURE__ */ new Map();
17346
+ const zeroNorm = ZERO_ADDRESS.toLowerCase();
17347
+ for (const addr of vaultAddresses) {
17348
+ const info = findVaultInfo(addr, vaultData);
17349
+ if (!info) continue;
17350
+ const gov = info.governorAdmin.toLowerCase();
17351
+ if (gov === zeroNorm) continue;
17352
+ counts.set(gov, (counts.get(gov) ?? 0) + 1);
17353
+ }
17354
+ let best = ZERO_ADDRESS;
17355
+ let bestCount = 0;
17356
+ for (const [gov, count] of counts) {
17357
+ if (count > bestCount) {
17358
+ best = gov;
17359
+ bestCount = count;
17360
+ }
17361
+ }
17362
+ return best;
17363
+ }
17364
+ function deriveClusters(vaultData, includeSingletons = false) {
17365
+ if (vaultData.size === 0) return [];
17366
+ const adj = buildAdjacencyList(vaultData);
17367
+ const components = findConnectedComponents(adj);
17368
+ const clusters = [];
17369
+ for (const component of components) {
17370
+ if (!includeSingletons && component.length < 2) continue;
17371
+ if (!includeSingletons) {
17372
+ let hasActiveEdge = false;
17373
+ for (const addr of component) {
17374
+ const neighbors = adj.get(addr);
17375
+ if (neighbors && neighbors.size > 0) {
17376
+ hasActiveEdge = true;
17377
+ break;
17378
+ }
17379
+ }
17380
+ if (!hasActiveEdge) continue;
17381
+ }
17382
+ const clusterVaultData = /* @__PURE__ */ new Map();
17383
+ for (const addr of component) {
17384
+ const info = findVaultInfo(addr, vaultData);
17385
+ if (info) clusterVaultData.set(addr, info);
17386
+ }
17387
+ clusters.push({
17388
+ governor: deriveGovernor(component, vaultData),
17389
+ vaults: component,
17390
+ vaultData: clusterVaultData
17391
+ });
17392
+ }
17393
+ return clusters;
17394
+ }
17395
+
17396
+ // src/lending/public-data/euler/fetcher/normalize.ts
17397
+ var LTV_SCALE = 10000n;
17398
+ function ltvToNumber(ltv) {
17399
+ return Number(ltv) / Number(LTV_SCALE);
17400
+ }
17401
+ var RAY = 10n ** 27n;
17402
+ function rayToNumber(ray) {
17403
+ return Number(ray) / Number(RAY);
17404
+ }
17405
+ function toTokenAmount(raw, decimals) {
17406
+ return Number(raw) / 10 ** Number(decimals);
17407
+ }
17408
+ function identifyBorrowVaults(cluster) {
17409
+ const borrowVaults = /* @__PURE__ */ new Set();
17410
+ for (const [addr, info] of cluster.vaultData) {
17411
+ const hasIRM = info.interestRateModel.toLowerCase() !== ZERO_ADDRESS.toLowerCase();
17412
+ const hasActiveCollateral = info.collateralLTVInfo.some(
17413
+ (ltv) => ltv.borrowLTV > 0n
17414
+ );
17415
+ if (hasIRM && hasActiveCollateral) {
17416
+ borrowVaults.add(addr.toLowerCase());
17417
+ }
17418
+ }
17419
+ return borrowVaults;
17420
+ }
17421
+ function buildReverseLTVIndex(cluster) {
17422
+ const index = /* @__PURE__ */ new Map();
17423
+ for (const [addr, info] of cluster.vaultData) {
17424
+ const borrowVault = addr.toLowerCase();
17425
+ for (const ltv of info.collateralLTVInfo) {
17426
+ if (ltv.borrowLTV <= 0n) continue;
17427
+ const collateral = ltv.collateral.toLowerCase();
17428
+ let entries = index.get(collateral);
17429
+ if (!entries) {
17430
+ entries = [];
17431
+ index.set(collateral, entries);
17432
+ }
17433
+ entries.push({ borrowVault, ltv });
17434
+ }
17435
+ }
17436
+ return index;
17437
+ }
17438
+ function buildForwardLTVIndex(cluster) {
17439
+ const index = /* @__PURE__ */ new Map();
17440
+ for (const [addr, info] of cluster.vaultData) {
17441
+ const borrowVault = addr.toLowerCase();
17442
+ const entries = [];
17443
+ for (const ltv of info.collateralLTVInfo) {
17444
+ if (ltv.borrowLTV <= 0n) continue;
17445
+ entries.push({
17446
+ collateralVault: ltv.collateral.toLowerCase(),
17447
+ ltv
17448
+ });
17449
+ }
17450
+ if (entries.length > 0) {
17451
+ index.set(borrowVault, entries);
17452
+ }
17453
+ }
17454
+ return index;
17455
+ }
17456
+ function buildTokenConfig(vaultAddr, reverseLTV, forwardLTV, borrowVaults, clusterVaults) {
17457
+ const config = {};
17458
+ const reverseEntries = reverseLTV.get(vaultAddr) ?? [];
17459
+ for (const { borrowVault, ltv } of reverseEntries) {
17460
+ if (!borrowVaults.has(borrowVault)) continue;
17461
+ config[borrowVault] = {
17462
+ category: borrowVault,
17463
+ borrowCollateralFactor: ltvToNumber(ltv.borrowLTV),
17464
+ collateralFactor: ltvToNumber(ltv.liquidationLTV),
17465
+ borrowFactor: 1
17466
+ };
17467
+ }
17468
+ if (borrowVaults.has(vaultAddr)) {
17469
+ const forwardEntries = forwardLTV.get(vaultAddr) ?? [];
17470
+ for (const { collateralVault } of forwardEntries) {
17471
+ if (!clusterVaults.has(collateralVault)) continue;
17472
+ if (config[collateralVault]) continue;
17473
+ config[collateralVault] = {
17474
+ category: collateralVault,
17475
+ borrowCollateralFactor: 0,
17476
+ collateralFactor: 0,
17477
+ borrowFactor: 1
17478
+ };
17479
+ }
17480
+ }
17481
+ return config;
17482
+ }
17483
+ function buildEModes(borrowVaults, cluster) {
17484
+ const eModes = {};
17485
+ for (const addr of borrowVaults) {
17486
+ const info = findInfo(addr, cluster.vaultData);
17487
+ if (!info) continue;
17488
+ const activeLTVs = info.collateralLTVInfo.filter(
17489
+ (l) => l.borrowLTV > 0n
17490
+ );
17491
+ const avgBorrowLTV = activeLTVs.length > 0 ? activeLTVs.reduce((sum, l) => sum + ltvToNumber(l.borrowLTV), 0) / activeLTVs.length : 0;
17492
+ const avgLiqLTV = activeLTVs.length > 0 ? activeLTVs.reduce(
17493
+ (sum, l) => sum + ltvToNumber(l.liquidationLTV),
17494
+ 0
17495
+ ) / activeLTVs.length : 0;
17496
+ eModes[addr] = {
17497
+ category: addr,
17498
+ label: `${info.assetSymbol} Borrow (${info.vaultSymbol})`,
17499
+ borrowCollateralFactor: avgBorrowLTV,
17500
+ collateralFactor: avgLiqLTV,
17501
+ priceSource: info.oracle
17502
+ };
17503
+ }
17504
+ return eModes;
17505
+ }
17506
+ function buildMetadata(info) {
17507
+ return {
17508
+ vault: info.vault.toLowerCase(),
17509
+ dToken: info.dToken.toLowerCase(),
17510
+ oracle: info.oracle.toLowerCase(),
17511
+ interestRateModel: info.interestRateModel.toLowerCase(),
17512
+ unitOfAccount: info.unitOfAccount.toLowerCase(),
17513
+ evc: info.evc.toLowerCase(),
17514
+ governorAdmin: info.governorAdmin.toLowerCase()
17515
+ };
17516
+ }
17517
+ function buildTokenEntry(info, config, collateralActive, borrowVaults, opts) {
17518
+ const addr = info.asset.toLowerCase();
17519
+ const tokenMeta = opts.tokenList?.[addr];
17520
+ const asset = {
17521
+ chainId: opts.chainId,
17522
+ address: addr,
17523
+ name: tokenMeta?.name ?? info.assetName,
17524
+ symbol: tokenMeta?.symbol ?? info.assetSymbol,
17525
+ decimals: tokenMeta?.decimals ?? Number(info.assetDecimals)
17526
+ };
17527
+ const irmData = info.irmInfo.interestRateInfo;
17528
+ const currentRate = irmData.length > 0 ? irmData[irmData.length - 1] : null;
17529
+ const depositRate = currentRate ? rayToNumber(currentRate.supplyAPY) : 0;
17530
+ const variableBorrowRate = currentRate ? rayToNumber(currentRate.borrowAPY) : 0;
17531
+ const totalDeposits = toTokenAmount(info.totalAssets, info.assetDecimals);
17532
+ const totalDebt = toTokenAmount(info.totalBorrowed, info.assetDecimals);
17533
+ const priceInfo = info.liabilityPriceInfo;
17534
+ const hasPrice = !priceInfo.queryFailure && priceInfo.amountOutMid > 0n;
17535
+ const pricePerUnit = hasPrice ? Number(priceInfo.amountOutMid) / Number(10n ** info.unitOfAccountDecimals) : 0;
17536
+ const vaultAddrNorm = info.vault.toLowerCase();
17537
+ const isBorrowVault = borrowVaults.has(vaultAddrNorm);
17538
+ const selfEMode = isBorrowVault ? {
17539
+ label: `${info.assetSymbol} Borrow`,
17540
+ category: vaultAddrNorm,
17541
+ borrowCollateralFactor: 0,
17542
+ collateralFactor: 0,
17543
+ priceSource: info.oracle
17544
+ } : {
17545
+ label: "None",
17546
+ category: ZERO_ADDRESS,
17547
+ borrowCollateralFactor: 0,
17548
+ collateralFactor: 0,
17549
+ priceSource: ZERO_ADDRESS
17550
+ };
17551
+ return {
17552
+ vaultName: info.vaultName,
17553
+ asset,
17554
+ totalDeposits,
17555
+ totalDebtStable: 0,
17556
+ totalDebt,
17557
+ totalDepositsUSD: totalDeposits * pricePerUnit,
17558
+ totalDebtStableUSD: 0,
17559
+ totalDebtUSD: totalDebt * pricePerUnit,
17560
+ depositRate,
17561
+ variableBorrowRate,
17562
+ stableBorrowRate: 0,
17563
+ averageStableBorrowRate: 0,
17564
+ liquidityIndex: "0",
17565
+ variableBorrowIndex: "0",
17566
+ lastUpdateTimestamp: Number(info.timestamp),
17567
+ config,
17568
+ collateralActive,
17569
+ borrowingEnabled: isBorrowVault,
17570
+ hasStable: false,
17571
+ isActive: true,
17572
+ isFrozen: false,
17573
+ borrowCap: toTokenAmount(info.borrowCap, info.assetDecimals),
17574
+ supplyCap: toTokenAmount(info.supplyCap, info.assetDecimals),
17575
+ debtCeiling: 0,
17576
+ eMode: selfEMode,
17577
+ decimals: Number(info.assetDecimals),
17578
+ params: { metadata: buildMetadata(info) }
17579
+ };
17580
+ }
17581
+ function findInfo(addr, vaultData) {
17582
+ for (const [key, value] of vaultData) {
17583
+ if (key.toLowerCase() === addr) return value;
17584
+ }
17585
+ return void 0;
17586
+ }
17587
+ function normalizeCluster(cluster, opts) {
17588
+ const borrowVaults = identifyBorrowVaults(cluster);
17589
+ const reverseLTV = buildReverseLTVIndex(cluster);
17590
+ const forwardLTV = buildForwardLTVIndex(cluster);
17591
+ const clusterVaults = new Set(
17592
+ [...cluster.vaultData.keys()].map((a) => a.toLowerCase())
17593
+ );
17594
+ const collateralActiveVaults = /* @__PURE__ */ new Set();
17595
+ for (const [collateral, entries] of reverseLTV) {
17596
+ if (entries.some((e) => borrowVaults.has(e.borrowVault))) {
17597
+ collateralActiveVaults.add(collateral);
17598
+ }
17599
+ }
17600
+ const eModes = buildEModes(borrowVaults, cluster);
17601
+ const data = {};
17602
+ for (const [addr, info] of cluster.vaultData) {
17603
+ const norm = addr.toLowerCase();
17604
+ const config = buildTokenConfig(
17605
+ norm,
17606
+ reverseLTV,
17607
+ forwardLTV,
17608
+ borrowVaults,
17609
+ clusterVaults
17610
+ );
17611
+ data[norm] = buildTokenEntry(
17612
+ info,
17613
+ config,
17614
+ collateralActiveVaults.has(norm),
17615
+ borrowVaults,
17616
+ opts
17617
+ );
17618
+ }
17619
+ return {
17620
+ data,
17621
+ chainId: opts.chainId,
17622
+ eModes
17623
+ };
17624
+ }
17625
+
17626
+ // src/lending/public-data/euler/publicCallParse.ts
17627
+ var getEulerV2ReservesDataConverter = (lender, chainId, prices, additionalYields, tokenList = {}) => {
17628
+ const vaultAddresses = eulerVaults()?.[lender]?.[chainId] ?? [];
17629
+ const expectedNumberOfCalls = vaultAddresses.length;
17630
+ return [
17631
+ (data) => {
17632
+ if (data.length !== expectedNumberOfCalls) {
17633
+ return void 0;
17634
+ }
17635
+ const vaultDataMap = /* @__PURE__ */ new Map();
17636
+ for (let i = 0; i < vaultAddresses.length; i++) {
17637
+ const result = data[i];
17638
+ if (result) {
17639
+ vaultDataMap.set(vaultAddresses[i].toLowerCase(), result);
17640
+ }
17641
+ }
17642
+ if (vaultDataMap.size === 0) return void 0;
17643
+ const clusters = deriveClusters(vaultDataMap, true);
17644
+ const resultReserves = {};
17645
+ for (const cluster of clusters) {
17646
+ const normalized = normalizeCluster(cluster, {
17647
+ chainId,
17648
+ tokenList
17649
+ });
17650
+ for (const [vaultAddr, entry] of Object.entries(normalized.data)) {
17651
+ const marketUid = createMarketUid(chainId, lender, vaultAddr);
17652
+ const assetMeta = tokenList[entry.asset.address];
17653
+ const oracleKey = toOracleKey(assetMeta?.assetGroup ?? null) || toGenericPriceKey(entry.asset.address, chainId);
17654
+ const price = prices[oracleKey] ?? 0;
17655
+ const totalDeposits = entry.totalDeposits;
17656
+ const totalDebt = entry.totalDebt;
17657
+ const totalLiquidity = totalDeposits - totalDebt;
17658
+ const totalDepositsUSD = price > 0 ? totalDeposits * price : entry.totalDepositsUSD;
17659
+ const totalDebtUSD = price > 0 ? totalDebt * price : entry.totalDebtUSD;
17660
+ const totalLiquidityUSD = price > 0 ? totalLiquidity * price : totalDepositsUSD - totalDebtUSD;
17661
+ resultReserves[marketUid] = {
17662
+ marketUid,
17663
+ poolId: vaultAddr,
17664
+ underlying: entry.asset.address,
17665
+ asset: {
17666
+ chainId,
17667
+ decimals: entry.asset.decimals,
17668
+ name: entry.asset.name,
17669
+ address: entry.asset.address,
17670
+ symbol: entry.asset.symbol
17671
+ },
17672
+ // token amounts
17673
+ totalDeposits: String(totalDeposits),
17674
+ totalDebtStable: String(entry.totalDebtStable),
17675
+ totalDebt: String(totalDebt),
17676
+ totalLiquidity: String(totalLiquidity),
17677
+ // USD amounts
17678
+ totalDepositsUSD,
17679
+ totalDebtStableUSD: entry.totalDebtStableUSD,
17680
+ totalDebtUSD,
17681
+ totalLiquidityUSD,
17682
+ // rates (normalizer yields APY as decimal, convert to APR percentage)
17683
+ depositRate: apyToApr(entry.depositRate) * 100,
17684
+ variableBorrowRate: apyToApr(entry.variableBorrowRate) * 100,
17685
+ stableBorrowRate: entry.stableBorrowRate,
17686
+ intrinsicYield: additionalYields?.intrinsicYields?.[oracleKey] ?? 0,
17687
+ // rewards
17688
+ rewards: [],
17689
+ decimals: entry.decimals,
17690
+ // config (keyed by counterparty vault address)
17691
+ config: entry.config,
17692
+ // flags
17693
+ collateralActive: entry.collateralActive,
17694
+ borrowingEnabled: entry.borrowingEnabled,
17695
+ hasStable: entry.hasStable,
17696
+ isActive: entry.isActive,
17697
+ isFrozen: entry.isFrozen,
17698
+ // caps
17699
+ borrowCap: entry.borrowCap,
17700
+ supplyCap: entry.supplyCap,
17701
+ debtCeiling: entry.debtCeiling,
17702
+ // metadata
17703
+ params: {
17704
+ metadata: entry.params.metadata
17705
+ }
17706
+ };
17707
+ }
17708
+ }
17709
+ return {
17710
+ data: resultReserves,
17711
+ chainId
17712
+ };
17713
+ },
17714
+ expectedNumberOfCalls
17715
+ ];
17716
+ };
17717
+
17045
17718
  // src/lending/public-data/fetchLender.ts
17046
17719
  function getMorphoTypeMarketConverter(lender, chainId, prices, additionalYields, tokenList = {}, marketsOverride) {
17047
17720
  if (lender.startsWith("LISTA_DAO"))
@@ -17075,6 +17748,8 @@ function buildLenderCall(chainId, lender) {
17075
17748
  }
17076
17749
  if (isCompoundV2Type(lender))
17077
17750
  return buildCompoundV2StyleLenderReserveCall(chainId, lender);
17751
+ if (isEulerType(lender))
17752
+ return buildEulerV2LenderReserveCall(chainId, lender);
17078
17753
  return [];
17079
17754
  }
17080
17755
  function getLenderDataConverter(lender, chainId, prices, additionalYields, tokenList = {}) {
@@ -17127,6 +17802,14 @@ function getLenderDataConverter(lender, chainId, prices, additionalYields, token
17127
17802
  additionalYields,
17128
17803
  tokenList
17129
17804
  );
17805
+ if (isEulerType(lender))
17806
+ return getEulerV2ReservesDataConverter(
17807
+ lender,
17808
+ chainId,
17809
+ prices,
17810
+ additionalYields,
17811
+ tokenList
17812
+ );
17130
17813
  return [() => null, 0];
17131
17814
  }
17132
17815
  var getAbi = (lender) => {
@@ -17145,6 +17828,7 @@ var getAbi = (lender) => {
17145
17828
  if (isCompoundV3(lender)) return [...IrgetterAbi, ...CometAbi, ...CometExtAbi];
17146
17829
  if (isInit(lender)) return InitLensAbi;
17147
17830
  if (isMorphoType(lender)) return MorphoLensAbi;
17831
+ if (isEulerType(lender)) return vaultLensAbi;
17148
17832
  if (isSumerType(lender)) return [...SumerLensAbi, ...SumerComptrollerAbi];
17149
17833
  if (lender === Lender.TAKARA) return [...TakaraMarketStateAbi];
17150
17834
  if (isCompoundV2Type(lender)) return VenusLensAbi;
@@ -17525,6 +18209,37 @@ function createCompoundV2Entry(i, data, key, assetsIn, vToken, meta, claimableRe
17525
18209
  };
17526
18210
  }
17527
18211
 
18212
+ // src/lending/user-data/euler/userCallBuild.ts
18213
+ var DEFAULT_MAX_SUB_ACCOUNTS = 255;
18214
+ function getSubAccountAddress(owner, index) {
18215
+ const prefix = owner.slice(0, 40);
18216
+ const suffix = index.toString(16).padStart(2, "0");
18217
+ return (prefix + suffix).toLowerCase();
18218
+ }
18219
+ function getSubAccountIndex(addr) {
18220
+ return parseInt(addr.slice(40), 16);
18221
+ }
18222
+ var buildEulerUserCall = (chainId, lender, account, maxSubAccounts = DEFAULT_MAX_SUB_ACCOUNTS) => {
18223
+ if (!ENABLED_EULER_V2_CHAINS.includes(chainId)) return [];
18224
+ const config = eulerConfigs()?.[lender]?.[chainId];
18225
+ if (!config) return [];
18226
+ const accountLensAddress = config.accountLens;
18227
+ const evcAddress = config.evc;
18228
+ if (!accountLensAddress || !evcAddress) return [];
18229
+ const ownerIndex = getSubAccountIndex(account);
18230
+ const indices = /* @__PURE__ */ new Set();
18231
+ indices.add(ownerIndex);
18232
+ for (let i = 0; indices.size < maxSubAccounts && i < 256; i++) {
18233
+ indices.add(i);
18234
+ }
18235
+ const sortedIndices = [...indices].sort((a, b) => a - b);
18236
+ return sortedIndices.map((i) => ({
18237
+ address: accountLensAddress,
18238
+ name: "getAccountEnabledVaultsInfo",
18239
+ params: [evcAddress, getSubAccountAddress(account, i)]
18240
+ }));
18241
+ };
18242
+
17528
18243
  // src/lending/user-data/fetch-balances/prepare.ts
17529
18244
  function buildUserCall(chainId, lender, account, params) {
17530
18245
  if (isAaveV2Type(lender)) return buildAaveV2UserCall(chainId, lender, account);
@@ -17534,6 +18249,8 @@ function buildUserCall(chainId, lender, account, params) {
17534
18249
  return buildMorphoTypeUserCallWithLens(chainId, account, lender, params);
17535
18250
  if (isCompoundV3Type(lender))
17536
18251
  return buildCompoundV3UserCall(chainId, lender, account);
18252
+ if (isEulerType(lender))
18253
+ return buildEulerUserCall(chainId, lender, account);
17537
18254
  return buildCompoundV2UserCall(chainId, lender, account);
17538
18255
  }
17539
18256
  function organizeUserQueries(queries) {
@@ -17776,20 +18493,18 @@ function parseSingleBrokerData(data, validOwner, brokerAddress, lender, chainId,
17776
18493
  );
17777
18494
  const debtData = Object.assign(
17778
18495
  {},
17779
- ...data[2 /* debts */][index].map(
17780
- (c) => {
17781
- const pool = c.pool.toLowerCase();
17782
- allPools[pool] = c.underlying.toLowerCase();
17783
- const key = createMarketUid(chainId, lender, pool);
17784
- const metaEntity = metaMap?.[key];
17785
- const decimals = metaEntity.asset?.decimals ?? 18;
17786
- return {
17787
- [pool]: {
17788
- debt: parseRawAmount(c.amount.toString(), decimals)
17789
- }
17790
- };
17791
- }
17792
- )
18496
+ ...data[2 /* debts */][index].map((c) => {
18497
+ const pool = c.pool.toLowerCase();
18498
+ allPools[pool] = c.underlying.toLowerCase();
18499
+ const key = createMarketUid(chainId, lender, pool);
18500
+ const metaEntity = metaMap?.[key];
18501
+ const decimals = metaEntity.asset?.decimals ?? 18;
18502
+ return {
18503
+ [pool]: {
18504
+ debt: parseRawAmount(c.amount.toString(), decimals)
18505
+ }
18506
+ };
18507
+ })
17793
18508
  );
17794
18509
  return {
17795
18510
  [id]: Object.assign(
@@ -17806,8 +18521,8 @@ function parseSingleBrokerData(data, validOwner, brokerAddress, lender, chainId,
17806
18521
  totalDebt24h: 0,
17807
18522
  totalDeposits24h: 0
17808
18523
  };
17809
- const debt = debtData[pool]?.debt ?? 0;
17810
- const deposits = collatData[pool]?.deposits ?? 0;
18524
+ const debt = debtData[pool]?.debt ?? "0";
18525
+ const deposits = collatData[pool]?.deposits ?? "0";
17811
18526
  histData[id].totalDebt24h += Number(debt) * priceHist;
17812
18527
  histData[id].totalDeposits24h += Number(deposits) * priceHist;
17813
18528
  return {
@@ -17845,8 +18560,22 @@ var getInitUserDataConverter = (lender, chainId, account, metaMap) => {
17845
18560
  if (_data.length !== expectedNumberOfCalls) {
17846
18561
  return void 0;
17847
18562
  }
17848
- const legacy = parseSingleBrokerData(_data[0], validOwner, legacyBroker, lender, chainId, metaMap);
17849
- const current = parseSingleBrokerData(_data[1], validOwner, currentBroker, lender, chainId, metaMap);
18563
+ const legacy = parseSingleBrokerData(
18564
+ _data[0],
18565
+ validOwner,
18566
+ legacyBroker,
18567
+ lender,
18568
+ chainId,
18569
+ metaMap
18570
+ );
18571
+ const current = parseSingleBrokerData(
18572
+ _data[1],
18573
+ validOwner,
18574
+ currentBroker,
18575
+ lender,
18576
+ chainId,
18577
+ metaMap
18578
+ );
17850
18579
  const result = { ...legacy.result, ...current.result };
17851
18580
  const modes = { ...legacy.modes, ...current.modes };
17852
18581
  const histData = { ...legacy.histData, ...current.histData };
@@ -18176,7 +18905,7 @@ var userDataEmpty = (account, chainId, notWhitelisted = false) => {
18176
18905
  balanceData,
18177
18906
  aprData,
18178
18907
  positions: [],
18179
- userConfig: { selectedMode: 0, id: account, notWhitelisted }
18908
+ userConfig: { selectedMode: "0", id: account, notWhitelisted }
18180
18909
  }
18181
18910
  ]
18182
18911
  };
@@ -18407,6 +19136,266 @@ function createMorphoEntryFromMarketWithLens(balanceInfo, metaMap, chainId, lend
18407
19136
  };
18408
19137
  }
18409
19138
 
19139
+ // src/lending/user-data/utils/createEulerMultiAccountTypeUserState.ts
19140
+ function createEulerMultiAccountTypeUserState(payload, lenderData, histData) {
19141
+ const subAccountKeys = Object.keys(payload.lendingPositions ?? {});
19142
+ const marketUids = getMarketUidsFromMeta(lenderData);
19143
+ const { chainId, account } = payload;
19144
+ const data = [];
19145
+ for (let j = 0; j < subAccountKeys.length; j++) {
19146
+ const subAccount = subAccountKeys[j];
19147
+ const controller = payload.controllers?.[subAccount];
19148
+ const configKey = controller ?? String(LENDER_MODE_NO_MODE);
19149
+ const userConfig = {
19150
+ id: subAccount,
19151
+ selectedMode: configKey,
19152
+ isWhitelisted: true
19153
+ };
19154
+ let depositInterest = 0;
19155
+ let borrowInterest = 0;
19156
+ let rewardDepositAccrual = 0;
19157
+ let rewardBorrowAccrual = 0;
19158
+ let stakingDepositAccrual = 0;
19159
+ let stakingBorrowAccrual = 0;
19160
+ let deposits = 0;
19161
+ let debt = 0;
19162
+ let collateral = 0;
19163
+ let borrowDiscountedCollateral = 0;
19164
+ let adjustedDebt = 0;
19165
+ for (let i = 0; i < marketUids.length; i++) {
19166
+ const marketUid = marketUids[i];
19167
+ if (!lenderData?.[marketUid] || !payload.lendingPositions[subAccount][marketUid])
19168
+ continue;
19169
+ const pos = payload.lendingPositions[subAccount][marketUid];
19170
+ const { depositsUSD, debtUSD } = pos;
19171
+ const depositsUSDOracle = pos.depositsUSDOracle ?? depositsUSD;
19172
+ const debtUSDOracle = pos.debtUSDOracle ?? debtUSD;
19173
+ const {
19174
+ depositRate,
19175
+ intrinsicYield,
19176
+ variableBorrowRate,
19177
+ rewards,
19178
+ configs
19179
+ } = lenderData[marketUid];
19180
+ deposits += depositsUSD;
19181
+ debt += debtUSD;
19182
+ (rewards ?? []).forEach((rewardData) => {
19183
+ rewardDepositAccrual += rewardData.depositRate * depositsUSD;
19184
+ rewardBorrowAccrual += rewardData.variableBorrowRate * debtUSD + (rewardData.stableBorrowRate ?? 0) * debtUSD;
19185
+ });
19186
+ stakingDepositAccrual += (intrinsicYield ?? 0) * depositsUSD;
19187
+ stakingBorrowAccrual += (intrinsicYield ?? 0) * debtUSD;
19188
+ const config = configs?.[configKey];
19189
+ collateral += (config?.collateralFactor ?? 1) * depositsUSDOracle;
19190
+ borrowDiscountedCollateral += (config?.borrowCollateralFactor ?? 1) * depositsUSDOracle;
19191
+ adjustedDebt += (config?.borrowFactor ?? 1) * debtUSDOracle;
19192
+ depositInterest += depositRate * depositsUSD;
19193
+ borrowInterest += debtUSD * variableBorrowRate;
19194
+ }
19195
+ const nav = deposits - debt;
19196
+ const balanceData2 = {
19197
+ borrowDiscountedCollateral,
19198
+ borrowDiscountedCollateralAllActive: borrowDiscountedCollateral,
19199
+ collateral,
19200
+ collateralAllActive: collateral,
19201
+ deposits,
19202
+ debt,
19203
+ adjustedDebt,
19204
+ nav,
19205
+ deposits24h: histData[subAccount]?.totalDeposits24h,
19206
+ debt24h: histData[subAccount]?.totalDebt24h,
19207
+ nav24h: histData[subAccount]?.totalDeposits24h - histData[subAccount]?.totalDebt24h
19208
+ };
19209
+ const aprData2 = {
19210
+ apr: safeDivide(depositInterest - borrowInterest, nav),
19211
+ borrowApr: safeDivide(borrowInterest, debt),
19212
+ depositApr: safeDivide(depositInterest, deposits),
19213
+ rewardApr: safeDivide(rewardDepositAccrual + rewardBorrowAccrual, nav),
19214
+ rewardDepositApr: safeDivide(rewardDepositAccrual, deposits),
19215
+ rewardBorrowApr: safeDivide(rewardBorrowAccrual, debt),
19216
+ intrinsicApr: safeDivide(
19217
+ stakingDepositAccrual - stakingBorrowAccrual,
19218
+ nav
19219
+ ),
19220
+ intrinsicDepositApr: safeDivide(stakingDepositAccrual, deposits),
19221
+ intrinsicBorrowApr: safeDivide(stakingBorrowAccrual, debt),
19222
+ rewards: {}
19223
+ };
19224
+ const creditLine = Math.max(0, borrowDiscountedCollateral - adjustedDebt);
19225
+ for (let i = 0; i < marketUids.length; i++) {
19226
+ const marketUid = marketUids[i];
19227
+ if (!lenderData?.[marketUid]) continue;
19228
+ const { configs, flags, borrowLiquidity, withdrawLiquidity } = lenderData[marketUid];
19229
+ const config = configs?.[configKey];
19230
+ const price = getOraclePrice(lenderData[marketUid]);
19231
+ const bcf = config?.borrowCollateralFactor ?? 1;
19232
+ const bf = config?.borrowFactor ?? 1;
19233
+ const pos = payload.lendingPositions[subAccount]?.[marketUid];
19234
+ if (pos) {
19235
+ let withdrawable;
19236
+ if (!pos.collateralEnabled || config?.collateralDisabled) {
19237
+ withdrawable = String(pos.deposits);
19238
+ } else if (balanceData2.debt === 0) {
19239
+ withdrawable = String(pos.deposits);
19240
+ } else {
19241
+ const withdrawableUSD = Math.max(creditLine / bcf, 0);
19242
+ withdrawable = String(
19243
+ Math.min(withdrawableUSD / price, Number(pos.deposits))
19244
+ );
19245
+ }
19246
+ if (withdrawLiquidity != null) {
19247
+ withdrawable = String(
19248
+ Math.min(Number(withdrawable), withdrawLiquidity)
19249
+ );
19250
+ }
19251
+ let borrowable;
19252
+ if (!flags?.borrowingEnabled || flags?.isFrozen || config?.debtDisabled) {
19253
+ borrowable = "0";
19254
+ } else {
19255
+ const borrowableUSD = Math.max(creditLine / bf, 0);
19256
+ borrowable = String(borrowableUSD / price);
19257
+ }
19258
+ if (borrowLiquidity != null) {
19259
+ borrowable = String(Math.min(Number(borrowable), borrowLiquidity));
19260
+ }
19261
+ pos.withdrawable = withdrawable;
19262
+ pos.borrowable = borrowable;
19263
+ } else if ((deposits > 0 || debt > 0) && flags?.borrowingEnabled && !flags?.isFrozen && !config?.debtDisabled) {
19264
+ let borrowable = String(Math.max(creditLine / bf, 0) / price);
19265
+ if (borrowLiquidity != null) {
19266
+ borrowable = String(Math.min(Number(borrowable), borrowLiquidity));
19267
+ }
19268
+ payload.lendingPositions[subAccount][marketUid] = {
19269
+ marketUid,
19270
+ underlying: lenderData[marketUid].underlying,
19271
+ deposits: "0",
19272
+ debt: "0",
19273
+ debtStable: "0",
19274
+ depositsUSD: 0,
19275
+ debtUSD: 0,
19276
+ debtStableUSD: 0,
19277
+ depositsUSDOracle: 0,
19278
+ debtUSDOracle: 0,
19279
+ debtStableUSDOracle: 0,
19280
+ collateralEnabled: false,
19281
+ isAllowed: false,
19282
+ withdrawable: "0",
19283
+ borrowable
19284
+ };
19285
+ }
19286
+ }
19287
+ data.push({
19288
+ accountId: subAccount,
19289
+ health: balanceData2.debt === 0 ? null : balanceData2.adjustedDebt > 0 ? balanceData2.borrowDiscountedCollateral / balanceData2.adjustedDebt : balanceData2.collateral / balanceData2.debt,
19290
+ borrowCapacityUSD: creditLine,
19291
+ userConfig,
19292
+ balanceData: balanceData2,
19293
+ aprData: aprData2,
19294
+ positions: Object.values(payload.lendingPositions[subAccount])
19295
+ });
19296
+ }
19297
+ return {
19298
+ lender: "",
19299
+ account,
19300
+ chainId,
19301
+ data
19302
+ };
19303
+ }
19304
+
19305
+ // src/lending/user-data/euler/userCallParse.ts
19306
+ var getEulerUserDataConverter = (lender, chainId, account, metaMap, maxSubAccounts = DEFAULT_MAX_SUB_ACCOUNTS) => {
19307
+ const ownerIndex = getSubAccountIndex(account);
19308
+ const indices = /* @__PURE__ */ new Set();
19309
+ indices.add(ownerIndex);
19310
+ for (let i = 0; indices.size < maxSubAccounts && i < 256; i++) {
19311
+ indices.add(i);
19312
+ }
19313
+ const sortedIndices = [...indices].sort((a, b) => a - b);
19314
+ const expectedNumberOfCalls = sortedIndices.length;
19315
+ return [
19316
+ (_data) => {
19317
+ if (_data.length !== expectedNumberOfCalls) {
19318
+ return void 0;
19319
+ }
19320
+ const lendingPositions = {};
19321
+ const controllers = {};
19322
+ const histData = {};
19323
+ for (let idx = 0; idx < sortedIndices.length; idx++) {
19324
+ const result = _data[idx];
19325
+ if (!result) continue;
19326
+ const evcInfo = result.evcAccountInfo ?? result[0];
19327
+ const vaultAccounts = result.vaultAccountInfo ?? result[1] ?? [];
19328
+ if (vaultAccounts.length === 0) continue;
19329
+ const subAccountAddr = getSubAccountAddress(
19330
+ account,
19331
+ sortedIndices[idx]
19332
+ ).toLowerCase();
19333
+ const enabledControllers = (evcInfo?.enabledControllers ?? []).map((a) => a.toLowerCase());
19334
+ const controller = enabledControllers.length > 0 ? enabledControllers[0] : void 0;
19335
+ if (controller) {
19336
+ controllers[subAccountAddr] = controller;
19337
+ }
19338
+ const positions = {};
19339
+ let totalDebt24h = 0;
19340
+ let totalDeposits24h = 0;
19341
+ for (const va of vaultAccounts) {
19342
+ const vaultAddr = (va.vault?.toString() ?? "").toLowerCase();
19343
+ const assetAddr = (va.asset?.toString() ?? "").toLowerCase();
19344
+ const assets = BigInt(va.assets ?? 0);
19345
+ const borrowed = BigInt(va.borrowed ?? 0);
19346
+ if (assets === 0n && borrowed === 0n) continue;
19347
+ const marketUid = createMarketUid(chainId, lender, vaultAddr);
19348
+ const meta = metaMap?.[marketUid];
19349
+ const decimals = meta?.asset?.decimals ?? 18;
19350
+ const depositsStr = parseRawAmount(assets.toString(), decimals);
19351
+ const debtStr = parseRawAmount(borrowed.toString(), decimals);
19352
+ const depositsNum = Number(depositsStr);
19353
+ const debtNum = Number(debtStr);
19354
+ const displayPrice = meta ? getDisplayPrice(meta) : 0;
19355
+ const oraclePrice = meta ? getOraclePrice(meta) : 0;
19356
+ const priceHist = meta?.price?.priceUsd24h ?? displayPrice;
19357
+ const depositsUSD = depositsNum * displayPrice;
19358
+ const debtUSD = debtNum * displayPrice;
19359
+ const depositsUSDOracle = depositsNum * oraclePrice;
19360
+ const debtUSDOracle = debtNum * oraclePrice;
19361
+ totalDeposits24h += depositsNum * priceHist;
19362
+ totalDebt24h += debtNum * priceHist;
19363
+ positions[marketUid] = {
19364
+ marketUid,
19365
+ underlying: assetAddr,
19366
+ deposits: depositsStr,
19367
+ debt: debtStr,
19368
+ debtStable: "0",
19369
+ depositsUSD,
19370
+ debtUSD,
19371
+ debtStableUSD: 0,
19372
+ depositsUSDOracle,
19373
+ debtUSDOracle,
19374
+ debtStableUSDOracle: 0,
19375
+ collateralEnabled: Boolean(va.isCollateral),
19376
+ isAllowed: assets > 0n || borrowed > 0n
19377
+ };
19378
+ }
19379
+ if (Object.keys(positions).length > 0) {
19380
+ lendingPositions[subAccountAddr] = positions;
19381
+ histData[subAccountAddr] = { totalDebt24h, totalDeposits24h };
19382
+ }
19383
+ }
19384
+ if (Object.keys(lendingPositions).length === 0) {
19385
+ return void 0;
19386
+ }
19387
+ const payload = {
19388
+ chainId,
19389
+ lendingPositions,
19390
+ controllers,
19391
+ account
19392
+ };
19393
+ return createEulerMultiAccountTypeUserState(payload, metaMap, histData);
19394
+ },
19395
+ expectedNumberOfCalls
19396
+ ];
19397
+ };
19398
+
18410
19399
  // src/lending/user-data/fetch-balances/parse.ts
18411
19400
  function getUserDataConverter(lender, chainId, account, params, meta) {
18412
19401
  if (isYLDR(lender))
@@ -18432,6 +19421,8 @@ function getUserDataConverter(lender, chainId, account, params, meta) {
18432
19421
  account,
18433
19422
  meta?.[lender]
18434
19423
  );
19424
+ if (isEulerType(lender))
19425
+ return getEulerUserDataConverter(lender, chainId, account, meta?.[lender]);
18435
19426
  return getCompoundV2UserDataConverter(
18436
19427
  lender,
18437
19428
  chainId,
@@ -22978,6 +23969,111 @@ var CompoundV2CollateralToken = [
22978
23969
  }
22979
23970
  ];
22980
23971
 
23972
+ // src/abis/euler/accountLens.ts
23973
+ var accountLensAbi = [
23974
+ {
23975
+ type: "function",
23976
+ name: "getAccountEnabledVaultsInfo",
23977
+ inputs: [
23978
+ { name: "evc", type: "address" },
23979
+ { name: "account", type: "address" }
23980
+ ],
23981
+ outputs: [
23982
+ {
23983
+ name: "",
23984
+ type: "tuple",
23985
+ components: [
23986
+ // EVCAccountInfo
23987
+ {
23988
+ name: "evcAccountInfo",
23989
+ type: "tuple",
23990
+ components: [
23991
+ { name: "timestamp", type: "uint256" },
23992
+ { name: "evc", type: "address" },
23993
+ { name: "account", type: "address" },
23994
+ { name: "addressPrefix", type: "bytes19" },
23995
+ { name: "owner", type: "address" },
23996
+ { name: "isLockdownMode", type: "bool" },
23997
+ { name: "isPermitDisabledMode", type: "bool" },
23998
+ { name: "lastAccountStatusCheckTimestamp", type: "uint256" },
23999
+ { name: "enabledControllers", type: "address[]" },
24000
+ { name: "enabledCollaterals", type: "address[]" }
24001
+ ]
24002
+ },
24003
+ // VaultAccountInfo[]
24004
+ {
24005
+ name: "vaultAccountInfo",
24006
+ type: "tuple[]",
24007
+ components: [
24008
+ { name: "timestamp", type: "uint256" },
24009
+ { name: "account", type: "address" },
24010
+ { name: "vault", type: "address" },
24011
+ { name: "asset", type: "address" },
24012
+ { name: "assetsAccount", type: "uint256" },
24013
+ { name: "shares", type: "uint256" },
24014
+ { name: "assets", type: "uint256" },
24015
+ { name: "borrowed", type: "uint256" },
24016
+ { name: "assetAllowanceVault", type: "uint256" },
24017
+ { name: "assetAllowanceVaultPermit2", type: "uint256" },
24018
+ { name: "assetAllowanceExpirationVaultPermit2", type: "uint256" },
24019
+ { name: "assetAllowancePermit2", type: "uint256" },
24020
+ { name: "balanceForwarderEnabled", type: "bool" },
24021
+ { name: "isController", type: "bool" },
24022
+ { name: "isCollateral", type: "bool" },
24023
+ // AccountLiquidityInfo
24024
+ {
24025
+ name: "liquidityInfo",
24026
+ type: "tuple",
24027
+ components: [
24028
+ { name: "queryFailure", type: "bool" },
24029
+ { name: "queryFailureReason", type: "bytes" },
24030
+ { name: "account", type: "address" },
24031
+ { name: "vault", type: "address" },
24032
+ { name: "unitOfAccount", type: "address" },
24033
+ { name: "timeToLiquidation", type: "int256" },
24034
+ { name: "liabilityValueBorrowing", type: "uint256" },
24035
+ { name: "liabilityValueLiquidation", type: "uint256" },
24036
+ { name: "collateralValueBorrowing", type: "uint256" },
24037
+ { name: "collateralValueLiquidation", type: "uint256" },
24038
+ { name: "collateralValueRaw", type: "uint256" },
24039
+ { name: "collaterals", type: "address[]" },
24040
+ { name: "collateralValuesBorrowing", type: "uint256[]" },
24041
+ { name: "collateralValuesLiquidation", type: "uint256[]" },
24042
+ { name: "collateralValuesRaw", type: "uint256[]" }
24043
+ ]
24044
+ }
24045
+ ]
24046
+ },
24047
+ // AccountRewardInfo[]
24048
+ {
24049
+ name: "accountRewardInfo",
24050
+ type: "tuple[]",
24051
+ components: [
24052
+ { name: "timestamp", type: "uint256" },
24053
+ { name: "account", type: "address" },
24054
+ { name: "vault", type: "address" },
24055
+ { name: "balanceTracker", type: "address" },
24056
+ { name: "balanceForwarderEnabled", type: "bool" },
24057
+ { name: "balance", type: "uint256" },
24058
+ // EnabledRewardInfo[]
24059
+ {
24060
+ name: "enabledRewardsInfo",
24061
+ type: "tuple[]",
24062
+ components: [
24063
+ { name: "reward", type: "address" },
24064
+ { name: "earnedReward", type: "uint256" },
24065
+ { name: "earnedRewardRecentIgnored", type: "uint256" }
24066
+ ]
24067
+ }
24068
+ ]
24069
+ }
24070
+ ]
24071
+ }
24072
+ ],
24073
+ stateMutability: "view"
24074
+ }
24075
+ ];
24076
+
22981
24077
  // src/lending/user-data/abis.ts
22982
24078
  var getAbi2 = (lender) => {
22983
24079
  if (isAaveV2Type(lender))
@@ -23002,6 +24098,7 @@ var getAbi2 = (lender) => {
23002
24098
  return [...CometAbi, ...CometExtAbi, ...CometRewardsAbi];
23003
24099
  if (isMorphoType(lender)) return [...MorphoBlueAbi, ...MorphoLensAbi];
23004
24100
  if (isInit(lender)) return InitLensAbi;
24101
+ if (isEulerType(lender)) return accountLensAbi;
23005
24102
  if (isCompoundV2Type(lender))
23006
24103
  return [...ComptrollerAbi, ...CompoundV2CollateralToken];
23007
24104
  return [];
@@ -24091,6 +25188,11 @@ function keysFromMaps(a, b) {
24091
25188
  if (b) for (const k of Object.keys(b)) set.add(k);
24092
25189
  return [...set];
24093
25190
  }
25191
+ function rewardsToMap(rewards) {
25192
+ const map = {};
25193
+ if (Array.isArray(rewards)) for (const r of rewards) map[r.asset] = r;
25194
+ return map;
25195
+ }
24094
25196
  function noOpResult(balance, apr) {
24095
25197
  const hf = getHealthFactor2(balance.collateral, balance.adjustedDebt);
24096
25198
  const bc = balance.collateral - balance.adjustedDebt;
@@ -24167,13 +25269,13 @@ function getOrganicYieldCollateralSwap(amountInUSD, amountOutUSD, cashFlowDeposi
24167
25269
 
24168
25270
  // src/lending/margin/loop/yield/getRewardYieldChange.ts
24169
25271
  function getRewardYieldOpen(amountInUSD, amountOutUSD, irModeIn, cashFlowDeposits, cashFlowDebt, deposits, debt, yieldIn, yieldOut) {
24170
- const rewardsIn = yieldIn?.rewards;
24171
- const rewardsOut = yieldOut?.rewards;
24172
- if (!rewardsIn || !rewardsOut) return {};
25272
+ const mapIn = rewardsToMap(yieldIn?.rewards);
25273
+ const mapOut = rewardsToMap(yieldOut?.rewards);
25274
+ if (!yieldIn?.rewards?.length && !yieldOut?.rewards?.length) return {};
24173
25275
  const data = {};
24174
- for (const key of keysFromMaps(rewardsIn, rewardsOut)) {
24175
- const _flowIn = amountInUSD * ((irModeIn === 1 ? rewardsIn[key]?.stableBorrowRate : rewardsIn[key]?.variableBorrowRate) ?? 0);
24176
- const _flowOut = amountOutUSD * (rewardsOut[key]?.depositRate ?? 0);
25276
+ for (const key of keysFromMaps(mapIn, mapOut)) {
25277
+ const _flowIn = amountInUSD * ((irModeIn === 1 ? mapIn[key]?.stableBorrowRate : mapIn[key]?.variableBorrowRate) ?? 0);
25278
+ const _flowOut = amountOutUSD * (mapOut[key]?.depositRate ?? 0);
24177
25279
  const totalCashFlowDebt = cashFlowDebt + _flowIn;
24178
25280
  const totalCashFlowDeposits = cashFlowDeposits + _flowOut;
24179
25281
  const newCollat = deposits + amountOutUSD;
@@ -24187,13 +25289,13 @@ function getRewardYieldOpen(amountInUSD, amountOutUSD, irModeIn, cashFlowDeposit
24187
25289
  return data;
24188
25290
  }
24189
25291
  function getRewardYieldClose(amountInUSD, amountOutUSD, irModeOut, cashFlowDeposits, cashFlowDebt, deposits, debt, yieldIn, yieldOut) {
24190
- const rewardsIn = yieldIn?.rewards;
24191
- const rewardsOut = yieldOut?.rewards;
24192
- if (!rewardsIn || !rewardsOut) return {};
25292
+ const mapIn = rewardsToMap(yieldIn?.rewards);
25293
+ const mapOut = rewardsToMap(yieldOut?.rewards);
25294
+ if (!yieldIn?.rewards?.length && !yieldOut?.rewards?.length) return {};
24193
25295
  const data = {};
24194
- for (const key of keysFromMaps(rewardsIn, rewardsOut)) {
24195
- const _flowIn = amountInUSD * (rewardsIn[key]?.depositRate ?? 0);
24196
- const _flowOut = amountOutUSD * ((irModeOut === 1 ? rewardsOut[key]?.stableBorrowRate : rewardsOut[key]?.variableBorrowRate) ?? 0);
25296
+ for (const key of keysFromMaps(mapIn, mapOut)) {
25297
+ const _flowIn = amountInUSD * (mapIn[key]?.depositRate ?? 0);
25298
+ const _flowOut = amountOutUSD * ((irModeOut === 1 ? mapOut[key]?.stableBorrowRate : mapOut[key]?.variableBorrowRate) ?? 0);
24197
25299
  const totalCashFlowDebt = cashFlowDebt - _flowOut;
24198
25300
  const totalCashFlowDeposits = cashFlowDeposits - _flowIn;
24199
25301
  const newCollat = deposits - amountInUSD;
@@ -24207,13 +25309,13 @@ function getRewardYieldClose(amountInUSD, amountOutUSD, irModeOut, cashFlowDepos
24207
25309
  return data;
24208
25310
  }
24209
25311
  function getRewardYieldDebtSwap(amountInUSD, amountOutUSD, irModeIn, irModeOut, cashFlowDeposits, cashFlowDebt, deposits, debt, yieldIn, yieldOut) {
24210
- const rewardsIn = yieldIn?.rewards;
24211
- const rewardsOut = yieldOut?.rewards;
24212
- if (!rewardsIn || !rewardsOut) return {};
25312
+ const mapIn = rewardsToMap(yieldIn?.rewards);
25313
+ const mapOut = rewardsToMap(yieldOut?.rewards);
25314
+ if (!yieldIn?.rewards?.length && !yieldOut?.rewards?.length) return {};
24213
25315
  const data = {};
24214
- for (const key of keysFromMaps(rewardsIn, rewardsOut)) {
24215
- const _flowIn = amountInUSD * ((irModeIn === 1 ? rewardsIn[key]?.stableBorrowRate : rewardsIn[key]?.variableBorrowRate) ?? 0);
24216
- const _flowOut = amountOutUSD * ((irModeOut === 1 ? rewardsOut[key]?.stableBorrowRate : rewardsOut[key]?.variableBorrowRate) ?? 0);
25316
+ for (const key of keysFromMaps(mapIn, mapOut)) {
25317
+ const _flowIn = amountInUSD * ((irModeIn === 1 ? mapIn[key]?.stableBorrowRate : mapIn[key]?.variableBorrowRate) ?? 0);
25318
+ const _flowOut = amountOutUSD * ((irModeOut === 1 ? mapOut[key]?.stableBorrowRate : mapOut[key]?.variableBorrowRate) ?? 0);
24217
25319
  const totalCashFlowDebt = cashFlowDebt + _flowIn - _flowOut;
24218
25320
  const newDebt = debt - amountOutUSD + amountInUSD;
24219
25321
  data[key] = {
@@ -24225,13 +25327,13 @@ function getRewardYieldDebtSwap(amountInUSD, amountOutUSD, irModeIn, irModeOut,
24225
25327
  return data;
24226
25328
  }
24227
25329
  function getRewardYieldCollateralSwap(amountInUSD, amountOutUSD, cashFlowDeposits, cashFlowDebt, deposits, debt, yieldIn, yieldOut) {
24228
- const rewardsIn = yieldIn?.rewards;
24229
- const rewardsOut = yieldOut?.rewards;
24230
- if (!rewardsIn || !rewardsOut) return {};
25330
+ const mapIn = rewardsToMap(yieldIn?.rewards);
25331
+ const mapOut = rewardsToMap(yieldOut?.rewards);
25332
+ if (!yieldIn?.rewards?.length && !yieldOut?.rewards?.length) return {};
24231
25333
  const data = {};
24232
- for (const key of keysFromMaps(rewardsIn, rewardsOut)) {
24233
- const _flowIn = amountInUSD * (rewardsIn[key]?.depositRate ?? 0);
24234
- const _flowOut = amountOutUSD * (rewardsOut[key]?.depositRate ?? 0);
25334
+ for (const key of keysFromMaps(mapIn, mapOut)) {
25335
+ const _flowIn = amountInUSD * (mapIn[key]?.depositRate ?? 0);
25336
+ const _flowOut = amountOutUSD * (mapOut[key]?.depositRate ?? 0);
24235
25337
  const totalCashFlowDeposits = cashFlowDeposits + _flowOut - _flowIn;
24236
25338
  const newCollat = deposits + amountOutUSD - amountInUSD;
24237
25339
  data[key] = {
@@ -24605,9 +25707,8 @@ function meetsLiquidityThresholdsShort(pool, thresholds) {
24605
25707
  }
24606
25708
  function findMaxBorrowCollateralFactorRatio(lender, configsIn, configsOut) {
24607
25709
  let maxRatio = -Infinity;
24608
- let result = { modeId: 0, eModeCategory: 0 };
24609
- for (const modeIdStr of Object.keys(configsIn)) {
24610
- const modeId = Number(modeIdStr);
25710
+ let result = { modeId: "0", eModeCategory: 0 };
25711
+ for (const modeId of Object.keys(configsIn)) {
24611
25712
  const dataIn = configsIn[modeId];
24612
25713
  const dataOut = configsOut[modeId];
24613
25714
  if (dataIn.debtDisabled || isAaveV32Type(lender) && dataOut.collateralDisabled) {
@@ -24636,7 +25737,7 @@ var isEMode = (lender, longData, shortData) => findMaxBorrowCollateralFactorRati
24636
25737
  var intersection = (a0, a1) => {
24637
25738
  return a0.filter((a) => a1.includes(a));
24638
25739
  };
24639
- var LENDER_MODE_NO_MODE2 = 0;
25740
+ var LENDER_MODE_NO_MODE2 = "0";
24640
25741
  var getMaxLeverage = (lender, longData, shortData) => {
24641
25742
  if (isAaveV3Type(lender)) {
24642
25743
  const emode = isEMode(lender, longData, shortData).modeId;
@@ -24649,9 +25750,9 @@ var getMaxLeverage = (lender, longData, shortData) => {
24649
25750
  Object.values(shortData.config).map((c) => c.category)
24650
25751
  );
24651
25752
  if (modeIntersect.length === 0) return 1;
24652
- const configId = Object.values(longData.config).filter((c) => modeIntersect.includes(c.category)).sort(
25753
+ const configId = String(Object.values(longData.config).filter((c) => modeIntersect.includes(c.category)).sort(
24653
25754
  (c, d) => c.borrowCollateralFactor < d.borrowCollateralFactor ? 1 : -1
24654
- )[0].category;
25755
+ )[0].category);
24655
25756
  const cf2 = longData.config[configId]?.borrowCollateralFactor;
24656
25757
  const bf = shortData.config[configId]?.borrowFactor;
24657
25758
  return 1 / (1 - cf2 / bf);
@@ -24659,11 +25760,9 @@ var getMaxLeverage = (lender, longData, shortData) => {
24659
25760
  if (isSumerType(lender)) {
24660
25761
  const shortEntries = Object.entries(shortData?.config ?? {});
24661
25762
  if (shortEntries.length === 0) return 1;
24662
- const shortGroupId = Number(
24663
- shortEntries.sort(
24664
- ([, a], [, b]) => b.borrowCollateralFactor - a.borrowCollateralFactor
24665
- )[0][0]
24666
- );
25763
+ const shortGroupId = shortEntries.sort(
25764
+ ([, a], [, b]) => b.borrowCollateralFactor - a.borrowCollateralFactor
25765
+ )[0][0];
24667
25766
  const cf2 = longData?.config?.[shortGroupId]?.borrowCollateralFactor ?? 0;
24668
25767
  return cf2 > 0 && cf2 < 1 ? 1 / (1 - cf2) : 1;
24669
25768
  }
@@ -25432,13 +26531,14 @@ var hwhlpFetcher = {
25432
26531
  };
25433
26532
 
25434
26533
  // src/yields/intrinsic/fetchers/usdx.ts
25435
- var SUSDX_URL = "https://app.usdx.money/v1/base/apyInfo";
25436
26534
  var susdx = "SUSDX";
25437
26535
  var susdxFetcher = {
25438
26536
  label: "SUSDX",
25439
26537
  fetch: async () => {
25440
- const res = await fetch(SUSDX_URL).then((r) => r.json());
25441
- return { [susdx]: apyToApr(res.result.susdxApy) * 100 };
26538
+ return {
26539
+ [susdx]: 0
26540
+ // apyToApr(res.result.susdxApy) * 100
26541
+ };
25442
26542
  }
25443
26543
  };
25444
26544
 
@@ -25678,11 +26778,16 @@ async function fetchPendleYields(lists = {}) {
25678
26778
  dataArr.forEach((market) => {
25679
26779
  const ptPrice = prices[market.pt];
25680
26780
  const ytPrice = prices[market.yt];
26781
+ const [chainId, address] = market.pt.split("-");
26782
+ const assetKey = lists[chainId]?.list?.[address.toLowerCase()]?.assetGroup ?? market.pt;
26783
+ const expiry = new Date(market.expiry);
26784
+ if (expiry <= now) {
26785
+ yields[assetKey] = 0;
26786
+ return;
26787
+ }
25681
26788
  if (ytPrice && ytPrice > 0) {
25682
26789
  const yearFraction = yearFractionToExpiry(market.expiry, now);
25683
26790
  const apr = ytPrice / ptPrice * 100 / yearFraction;
25684
- const [chainId, address] = market.pt.split("-");
25685
- const assetKey = lists[chainId]?.list?.[address.toLowerCase()]?.assetGroup ?? market.pt;
25686
26791
  yields[assetKey] = apr;
25687
26792
  }
25688
26793
  });
@@ -29281,6 +30386,84 @@ var listaFetcher = {
29281
30386
  getAbi: getListaAbi
29282
30387
  };
29283
30388
 
30389
+ // src/prices/oracle-prices/fetchers/euler.ts
30390
+ var MAX_VIRTUAL_ADDRESS = 65535;
30391
+ function isUsdUnitOfAccount(addr) {
30392
+ const numeric = parseInt(addr, 16);
30393
+ return numeric <= MAX_VIRTUAL_ADDRESS;
30394
+ }
30395
+ function getEulerV2Calls(chainId) {
30396
+ if (!ENABLED_EULER_V2_CHAINS.includes(chainId)) return [];
30397
+ const configs = eulerConfigs() ?? {};
30398
+ const vaults = eulerVaults() ?? {};
30399
+ const results = [];
30400
+ for (const [lender, chainVaults] of Object.entries(vaults)) {
30401
+ const vaultList = chainVaults[chainId] ?? [];
30402
+ const config = configs[lender]?.[chainId];
30403
+ if (!config || vaultList.length === 0) continue;
30404
+ const calls = [];
30405
+ const meta = [];
30406
+ for (const vault of vaultList) {
30407
+ calls.push({
30408
+ address: config.vaultLens,
30409
+ name: "getVaultInfoFull",
30410
+ params: [vault]
30411
+ });
30412
+ meta.push({
30413
+ vault: vault.toLowerCase(),
30414
+ lender
30415
+ });
30416
+ }
30417
+ if (calls.length > 0) {
30418
+ results.push({ calls, meta, lender });
30419
+ }
30420
+ }
30421
+ return results;
30422
+ }
30423
+ function parseEulerV2Results(data, meta, context) {
30424
+ const entries = [];
30425
+ data.forEach((result, index) => {
30426
+ const queryMeta = meta[index];
30427
+ if (!queryMeta || !result) return;
30428
+ try {
30429
+ const priceInfo = result.liabilityPriceInfo;
30430
+ if (!priceInfo || priceInfo.queryFailure) return;
30431
+ const amountOutMid = BigInt(priceInfo.amountOutMid);
30432
+ if (amountOutMid === 0n) return;
30433
+ const unitOfAccountDecimals = BigInt(result.unitOfAccountDecimals);
30434
+ const priceInUoA = Number(amountOutMid) / Number(10n ** unitOfAccountDecimals);
30435
+ if (isNaN(priceInUoA) || priceInUoA === 0) return;
30436
+ const unitOfAccount = result.unitOfAccount.toLowerCase();
30437
+ let priceUSD;
30438
+ if (isUsdUnitOfAccount(unitOfAccount)) {
30439
+ priceUSD = priceInUoA;
30440
+ } else {
30441
+ const uoaUSD = context.usdPrices[unitOfAccount] ?? 0;
30442
+ if (uoaUSD === 0) return;
30443
+ priceUSD = priceInUoA * uoaUSD;
30444
+ }
30445
+ if (isNaN(priceUSD) || priceUSD === 0) return;
30446
+ const asset = result.asset.toLowerCase();
30447
+ entries.push({
30448
+ asset,
30449
+ price: priceInUoA,
30450
+ priceUSD,
30451
+ marketUid: createMarketUid(context.chainId, queryMeta.lender, queryMeta.vault)
30452
+ });
30453
+ } catch {
30454
+ }
30455
+ });
30456
+ return entries;
30457
+ }
30458
+ function getEulerV2Abi() {
30459
+ return vaultLensAbi;
30460
+ }
30461
+ var eulerV2Fetcher = {
30462
+ getCalls: getEulerV2Calls,
30463
+ parse: parseEulerV2Results,
30464
+ getAbi: getEulerV2Abi
30465
+ };
30466
+
29284
30467
  // src/prices/oracle-prices/fetchOraclePrices.ts
29285
30468
  async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3, batchSize = void 0, allowFailure = true, basePrices = {}, morphoMarketOverrides, listaMarketOverrides) {
29286
30469
  const result = {};
@@ -29288,7 +30471,8 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
29288
30471
  ...AaveOracleAbi,
29289
30472
  ...ProxyOracleAbi,
29290
30473
  ...CompoundV2OracleAbi,
29291
- ...ChainlinkAggregatorAbi
30474
+ ...ChainlinkAggregatorAbi,
30475
+ ...vaultLensAbi
29292
30476
  ];
29293
30477
  const chainPromises = chainIds.map(async (chainId) => {
29294
30478
  const chainResult = {};
@@ -29299,6 +30483,7 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
29299
30483
  const listaResults = listaFetcher.getCalls(chainId, {
29300
30484
  marketOverrides: listaMarketOverrides
29301
30485
  });
30486
+ const eulerResults = eulerV2Fetcher.getCalls(chainId);
29302
30487
  const morphoResults = morphoFetcher.getCalls(chainId, {
29303
30488
  marketOverrides: morphoMarketOverrides
29304
30489
  });
@@ -29344,6 +30529,16 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
29344
30529
  });
29345
30530
  allCalls.push(...fr.calls);
29346
30531
  }
30532
+ for (const fr of eulerResults) {
30533
+ fetcherTracker.push({
30534
+ lender: fr.lender,
30535
+ meta: fr.meta,
30536
+ offset: allCalls.length,
30537
+ count: fr.calls.length,
30538
+ parse: eulerV2Fetcher.parse
30539
+ });
30540
+ allCalls.push(...fr.calls);
30541
+ }
29347
30542
  for (const fr of morphoResults) {
29348
30543
  fetcherTracker.push({
29349
30544
  lender: fr.lender,
@@ -29949,19 +31144,20 @@ function computeEModeAnalysis(subAccount, lenderMeta, eModes) {
29949
31144
  const { positions, balanceData: balanceData2, userConfig } = subAccount;
29950
31145
  const currentMode = userConfig.selectedMode;
29951
31146
  return Object.values(eModes).map((eMode) => {
31147
+ const targetMode = String(eMode.category);
29952
31148
  const healthFactor = computeEModeSwitchHealth(
29953
31149
  positions,
29954
31150
  lenderMeta,
29955
31151
  balanceData2.collateral,
29956
31152
  balanceData2.adjustedDebt,
29957
31153
  currentMode,
29958
- eMode.category
31154
+ targetMode
29959
31155
  );
29960
- const supportedAssets = getSupportedAssets(lenderMeta, eMode.category);
31156
+ const supportedAssets = getSupportedAssets(lenderMeta, targetMode);
29961
31157
  const canSwitch = canSwitchToEMode(
29962
31158
  positions,
29963
31159
  lenderMeta,
29964
- eMode.category,
31160
+ targetMode,
29965
31161
  healthFactor
29966
31162
  );
29967
31163
  return {
@@ -30334,6 +31530,6 @@ async function fetchTokenBalances(chainId, account, tokens, options = {}) {
30334
31530
  return parseTokenBalanceResult(rawResult, prepared.query);
30335
31531
  }
30336
31532
 
30337
- export { EMPTY_BALANCE, MORPHO_LENS, applyPositionDelta, attachPricesToFlashLiquidity, buildLoopResult, buildMorphoTypeCall, buildMorphoTypeUserCallWithLens, buildPortfolioTotals, buildSumerAccumulators, buildSummaries, calculateLeverage, calculateNetApr, calculateOverallNetApr, calculateWeightedAverage, computeBorrowDelta2 as computeBorrowDelta, computeCloseTradeDeltas, computeCollateralSwapDeltas, computeDebtSwapDeltas, computeDepositDelta2 as computeDepositDelta, computeEModeAnalysis, computeOpenTradeDeltas, computePostTradeMetrics, computeRepayDelta2 as computeRepayDelta, computeSumerBorrowDelta, computeSumerDepositDelta, computeSumerRepayDelta, computeSumerWaterfall, computeSumerWithdrawDelta, computeWithdrawDelta2 as computeWithdrawDelta, computeZapTradeDeltas, convertLenderUserDataResult, createMarketUid, createMulticallRpcCall, createRawRpcCalls, decodeListaMarkets, decodeMarkets, decodePackedListaUserDataset, decodePackedMorphoUserDataset, encodeBalanceFetcherCalldata, fetchDefillamaData, fetchDefillamaHistData, fetchFlashLiquidityForChain, fetchGeneralYields, fetchGeneralYieldsByMarketUid, fetchMainPrices, fetchOraclePrices, fetchPendlePrices, fetchTokenBalances, fetchTokenMetadata, filterActiveLenders, filterLendersByProtocol, fuseLenderData, generateLendingPairs, generateLendingPools, getAavesForChain, getAssetConfig, getBorrowCapacity, getHealthFactor, getLenderAssets, getLenderPublicData, getLenderPublicDataAll, getLenderPublicDataViaApi, getLenderUserDataMulti, getLenderUserDataResult, getLendersForChain, getMergedUserData, getMorphoTypeMarketConverter, getTopPairs, keysFromMaps, multicall3Abi, nanTo, needsLenderApproval, needsTokenApproval, noOpResult, normalizeToBytes, parseBalanceFetcherResult, parseMergedResult, parseMulticallRpcResponses, parseRawRpcBatchResponses, parseRawRpcResponses, parseTokenBalanceResult, positivePart2 as positivePart, prepareLenderUserDataRpcCalls, prepareMergedMulticallParams, prepareMergedRpcCalls, prepareMulticallInputs, prepareTokenBalanceRpcCalls, selectAssetGroupPrices, unflattenLenderData };
31533
+ export { EMPTY_BALANCE, MORPHO_LENS, applyPositionDelta, attachPricesToFlashLiquidity, buildLoopResult, buildMorphoTypeCall, buildMorphoTypeUserCallWithLens, buildPortfolioTotals, buildSumerAccumulators, buildSummaries, calculateLeverage, calculateNetApr, calculateOverallNetApr, calculateWeightedAverage, computeBorrowDelta2 as computeBorrowDelta, computeCloseTradeDeltas, computeCollateralSwapDeltas, computeDebtSwapDeltas, computeDepositDelta2 as computeDepositDelta, computeEModeAnalysis, computeOpenTradeDeltas, computePostTradeMetrics, computeRepayDelta2 as computeRepayDelta, computeSumerBorrowDelta, computeSumerDepositDelta, computeSumerRepayDelta, computeSumerWaterfall, computeSumerWithdrawDelta, computeWithdrawDelta2 as computeWithdrawDelta, computeZapTradeDeltas, convertLenderUserDataResult, createMarketUid, createMulticallRpcCall, createRawRpcCalls, decodeListaMarkets, decodeMarkets, decodePackedListaUserDataset, decodePackedMorphoUserDataset, encodeBalanceFetcherCalldata, fetchDefillamaData, fetchDefillamaHistData, fetchFlashLiquidityForChain, fetchGeneralYields, fetchGeneralYieldsByMarketUid, fetchMainPrices, fetchOraclePrices, fetchPendlePrices, fetchTokenBalances, fetchTokenMetadata, filterActiveLenders, filterLendersByProtocol, fuseLenderData, generateLendingPairs, generateLendingPools, getAavesForChain, getAssetConfig, getBalanceForMarketUid, getBorrowCapacity, getHealthFactor, getLenderAssets, getLenderPublicData, getLenderPublicDataAll, getLenderPublicDataViaApi, getLenderUserDataMulti, getLenderUserDataResult, getLendersForChain, getMergedUserData, getMorphoTypeMarketConverter, getTopPairs, keysFromMaps, multicall3Abi, nanTo, needsLenderApproval, needsTokenApproval, noOpResult, normalizeToBytes, parseBalanceFetcherResult, parseMergedResult, parseMulticallRpcResponses, parseRawRpcBatchResponses, parseRawRpcResponses, parseTokenBalanceResult, positivePart2 as positivePart, prepareLenderUserDataRpcCalls, prepareMergedMulticallParams, prepareMergedRpcCalls, prepareMulticallInputs, prepareTokenBalanceRpcCalls, selectAssetGroupPrices, unflattenLenderData };
30338
31534
  //# sourceMappingURL=index.js.map
30339
31535
  //# sourceMappingURL=index.js.map