@1delta/margin-fetcher 0.0.328 → 0.0.330

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 (91) hide show
  1. package/dist/index.d.ts +13 -0
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +2365 -254
  4. package/dist/index.js.map +1 -1
  5. package/dist/lending/public-data/exactly/convertPublic.d.ts +30 -0
  6. package/dist/lending/public-data/exactly/convertPublic.d.ts.map +1 -0
  7. package/dist/lending/public-data/exactly/convertPublic.test.d.ts +2 -0
  8. package/dist/lending/public-data/exactly/convertPublic.test.d.ts.map +1 -0
  9. package/dist/lending/public-data/exactly/fetchPublic.d.ts +13 -0
  10. package/dist/lending/public-data/exactly/fetchPublic.d.ts.map +1 -0
  11. package/dist/lending/public-data/exactly/index.d.ts +5 -0
  12. package/dist/lending/public-data/exactly/index.d.ts.map +1 -0
  13. package/dist/lending/public-data/exactly/math.d.ts +30 -0
  14. package/dist/lending/public-data/exactly/math.d.ts.map +1 -0
  15. package/dist/lending/public-data/exactly/types.d.ts +80 -0
  16. package/dist/lending/public-data/exactly/types.d.ts.map +1 -0
  17. package/dist/lending/public-data/fetchLenderAll.d.ts.map +1 -1
  18. package/dist/lending/public-data/fetchLenderExt.d.ts.map +1 -1
  19. package/dist/lending/public-data/liquity/convertPublic.d.ts +42 -0
  20. package/dist/lending/public-data/liquity/convertPublic.d.ts.map +1 -0
  21. package/dist/lending/public-data/liquity/convertPublic.test.d.ts +2 -0
  22. package/dist/lending/public-data/liquity/convertPublic.test.d.ts.map +1 -0
  23. package/dist/lending/public-data/liquity/fetchPublic.d.ts +15 -0
  24. package/dist/lending/public-data/liquity/fetchPublic.d.ts.map +1 -0
  25. package/dist/lending/public-data/liquity/index.d.ts +4 -0
  26. package/dist/lending/public-data/liquity/index.d.ts.map +1 -0
  27. package/dist/lending/public-data/liquity/types.d.ts +33 -0
  28. package/dist/lending/public-data/liquity/types.d.ts.map +1 -0
  29. package/dist/lending/public-data/midnight/apiClient.d.ts +9 -0
  30. package/dist/lending/public-data/midnight/apiClient.d.ts.map +1 -1
  31. package/dist/lending/public-data/midnight/convertPublic.d.ts.map +1 -1
  32. package/dist/lending/public-data/midnight/fetchPublic.d.ts +6 -4
  33. package/dist/lending/public-data/midnight/fetchPublic.d.ts.map +1 -1
  34. package/dist/lending/public-data/midnight/types.d.ts +12 -0
  35. package/dist/lending/public-data/midnight/types.d.ts.map +1 -1
  36. package/dist/lending/public-data/river/convertPublic.d.ts +36 -0
  37. package/dist/lending/public-data/river/convertPublic.d.ts.map +1 -0
  38. package/dist/lending/public-data/river/convertPublic.test.d.ts +2 -0
  39. package/dist/lending/public-data/river/convertPublic.test.d.ts.map +1 -0
  40. package/dist/lending/public-data/river/fetchPublic.d.ts +11 -0
  41. package/dist/lending/public-data/river/fetchPublic.d.ts.map +1 -0
  42. package/dist/lending/public-data/river/index.d.ts +4 -0
  43. package/dist/lending/public-data/river/index.d.ts.map +1 -0
  44. package/dist/lending/public-data/river/types.d.ts +30 -0
  45. package/dist/lending/public-data/river/types.d.ts.map +1 -0
  46. package/dist/lending/public-data/term/apiClient.d.ts +36 -0
  47. package/dist/lending/public-data/term/apiClient.d.ts.map +1 -0
  48. package/dist/lending/public-data/term/convertPublic.d.ts +21 -0
  49. package/dist/lending/public-data/term/convertPublic.d.ts.map +1 -0
  50. package/dist/lending/public-data/term/convertPublic.test.d.ts +2 -0
  51. package/dist/lending/public-data/term/convertPublic.test.d.ts.map +1 -0
  52. package/dist/lending/public-data/term/fetchPublic.d.ts +14 -0
  53. package/dist/lending/public-data/term/fetchPublic.d.ts.map +1 -0
  54. package/dist/lending/public-data/term/index.d.ts +6 -0
  55. package/dist/lending/public-data/term/index.d.ts.map +1 -0
  56. package/dist/lending/public-data/term/math.d.ts +24 -0
  57. package/dist/lending/public-data/term/math.d.ts.map +1 -0
  58. package/dist/lending/public-data/term/types.d.ts +77 -0
  59. package/dist/lending/public-data/term/types.d.ts.map +1 -0
  60. package/dist/lending/user-data/abis.d.ts.map +1 -1
  61. package/dist/lending/user-data/exactly/userCallBuild.d.ts +10 -0
  62. package/dist/lending/user-data/exactly/userCallBuild.d.ts.map +1 -0
  63. package/dist/lending/user-data/exactly/userCallParse.d.ts +43 -0
  64. package/dist/lending/user-data/exactly/userCallParse.d.ts.map +1 -0
  65. package/dist/lending/user-data/fetch-balances/parse.d.ts.map +1 -1
  66. package/dist/lending/user-data/fetch-balances/prepare.d.ts.map +1 -1
  67. package/dist/lending/user-data/liquity/userCall.test.d.ts +2 -0
  68. package/dist/lending/user-data/liquity/userCall.test.d.ts.map +1 -0
  69. package/dist/lending/user-data/liquity/userCallBuild.d.ts +30 -0
  70. package/dist/lending/user-data/liquity/userCallBuild.d.ts.map +1 -0
  71. package/dist/lending/user-data/liquity/userCallParse.d.ts +54 -0
  72. package/dist/lending/user-data/liquity/userCallParse.d.ts.map +1 -0
  73. package/dist/lending/user-data/river/userCall.test.d.ts +2 -0
  74. package/dist/lending/user-data/river/userCall.test.d.ts.map +1 -0
  75. package/dist/lending/user-data/river/userCallBuild.d.ts +16 -0
  76. package/dist/lending/user-data/river/userCallBuild.d.ts.map +1 -0
  77. package/dist/lending/user-data/river/userCallParse.d.ts +24 -0
  78. package/dist/lending/user-data/river/userCallParse.d.ts.map +1 -0
  79. package/dist/lending/user-data/term/userCall.test.d.ts +2 -0
  80. package/dist/lending/user-data/term/userCall.test.d.ts.map +1 -0
  81. package/dist/lending/user-data/term/userCallBuild.d.ts +21 -0
  82. package/dist/lending/user-data/term/userCallBuild.d.ts.map +1 -0
  83. package/dist/lending/user-data/term/userCallParse.d.ts +18 -0
  84. package/dist/lending/user-data/term/userCallParse.d.ts.map +1 -0
  85. package/dist/types/lender/morpho-types.d.ts +38 -1
  86. package/dist/types/lender/morpho-types.d.ts.map +1 -1
  87. package/dist/types/lenderTypes.d.ts +26 -6
  88. package/dist/types/lenderTypes.d.ts.map +1 -1
  89. package/dist/utils/index.d.ts +1 -1
  90. package/dist/utils/index.d.ts.map +1 -1
  91. package/package.json +9 -9
package/dist/index.js CHANGED
@@ -1,12 +1,12 @@
1
1
  import { parseAbi, keccak256, encodeAbiParameters, formatEther, BaseError, encodeFunctionData, formatUnits, isAddress, getAddress, decodeFunctionResult, decodeAbiParameters, AbiEncodingLengthMismatchError, concatHex, pad, InvalidAddressError, stringToHex, boolToHex, integerRegex, numberToHex, bytesRegex, BytesSizeMismatchError, arrayRegex, UnsupportedPackedAbiType } from './chunk-Z3MGRQJR.js';
2
2
  import './chunk-BYTNVMX7.js';
3
3
  import './chunk-PR4QN5HX.js';
4
- import { Lender, isAaveType, isCompoundV3, isMultiMarket, isSiloV2Type, isSiloV3Type, isDolomite, isEulerType, isAaveV4Type, isInit, isMorphoType, isCompoundV2Type, isVenusType, isSumerType, AAVE_V3_LENDERS, AAVE_V2_LENDERS, isAaveV2Type, isAaveV32Type, isAaveV3Type, isFluid, isGearboxV3, isMidnight, isYLDR, isCompoundV3Type, isLista, isTectonicType, isKineticType, isBenqiType } from '@1delta/lender-registry';
4
+ import { Lender, LIQUITY_FAMILY_LENDERS, isAaveType, isCompoundV3, isMultiMarket, isSiloV2Type, isSiloV3Type, isDolomite, isEulerType, isAaveV4Type, isInit, isMorphoType, isCompoundV2Type, isVenusType, isSumerType, AAVE_V3_LENDERS, AAVE_V2_LENDERS, isAaveV2Type, isAaveV32Type, isAaveV3Type, isFluid, isGearboxV3, isMidnight, isTerm, isExactly, isLiquityFamily, isRiver, isYLDR, isCompoundV3Type, isLista, isTectonicType, isKineticType, isBenqiType } from '@1delta/lender-registry';
5
5
  export { isAaveType, isAaveV2Type, isAaveV32Type, isAaveV3Type, isCompoundV3, isCompoundV3Type, isInit, isMorphoType, isMultiMarket, isYLDR } from '@1delta/lender-registry';
6
- import { fetchTokenLists, fetchTokenList, aavePools, compoundV3Pools, initConfig, morphoPools, compoundV2Pools, eulerVaults, siloMarkets, siloV2LenderKey, siloMarketsV3, siloV3LenderKey, aaveV4Spokes, aaveV4SpokeLenderKey, fluidResolvers, gearboxResolvers, dolomiteConfigs, midnightConfig, aaveReserves, compoundV3Reserves, morphoTypeMarkets, resolveMidnightApiBase, getSiloV2MarketEntry, getSiloV3MarketEntry, dolomiteEmode, aaveTokens, morphoTypeVaults, eulerConfigs, gearboxMarketCompressor, gearboxMarketConfigurators, gearboxV3LenderKey, midnightMarketsByChain, parseAaveV4SpokeLenderKey, gearboxAccountCompressor, compoundV2Tokens, aaveOracles, aaveOraclesConfig, compoundV2Oracles, compoundV2TokenArray, compoundV2OraclesConfig, compoundV3OraclesData, compoundV3BaseData, compoundV2Reserves, aaveV4Oracles } from '@1delta/data-sdk';
6
+ import { fetchTokenLists, fetchTokenList, aavePools, compoundV3Pools, initConfig, morphoPools, compoundV2Pools, eulerVaults, siloMarkets, siloV2LenderKey, siloMarketsV3, siloV3LenderKey, aaveV4Spokes, aaveV4SpokeLenderKey, fluidResolvers, gearboxResolvers, dolomiteConfigs, midnightConfig, termConfig, termMarketsByChain, exactlyConfig, liquityLendersByChain, riverLendersByChain, aaveReserves, compoundV3Reserves, liquityConfigFor, liquityBranchesByChain, riverConfigFor, riverChainData, morphoTypeMarkets, resolveMidnightApiBase, resolveTermApiBase, getSiloV2MarketEntry, getSiloV3MarketEntry, dolomiteEmode, aaveTokens, morphoTypeVaults, eulerConfigs, gearboxMarketCompressor, gearboxMarketConfigurators, gearboxV3LenderKey, midnightMarketsByChain, parseAaveV4SpokeLenderKey, gearboxAccountCompressor, compoundV2Tokens, aaveOracles, aaveOraclesConfig, compoundV2Oracles, compoundV2TokenArray, compoundV2OraclesConfig, compoundV3OraclesData, compoundV3BaseData, compoundV2Reserves, aaveV4Oracles } from '@1delta/data-sdk';
7
7
  import lodash from 'lodash';
8
- import { getEvmClient, getEvmChain, getEvmClientUniversal, multicallRetryUniversal } from '@1delta/providers';
9
- import { MetaMorphoAbi, FluidLendingResolverAbi, FluidVaultResolverAbi, FluidLiquidityResolverAbi, MoolahVaultAbi, MorphoLensAbi, AaveV4SpokeAbi, AaveV4OracleAbi, AaveV4HubAbi, DolomiteMarginAbi, GearboxMarketCompressorV310Abi, MorphoBlueAbi, MidnightAbi, GearboxCreditAccountCompressorV310Abi } from '@1delta/abis';
8
+ import { getEvmClient, multicallRetryUniversal, getEvmChain, getEvmClientUniversal } from '@1delta/providers';
9
+ import { LiquityTroveManagerAbi, LiquityActivePoolAbi, LiquityStabilityPoolAbi, LiquityPriceFeedAbi, LiquitySortedTrovesAbi, RiverTroveManagerAbi, RiverStabilityPoolAbi, MetaMorphoAbi, ExactlyPreviewerAbi, ExactlyAuditorAbi, FluidLendingResolverAbi, FluidVaultResolverAbi, FluidLiquidityResolverAbi, MoolahVaultAbi, MorphoLensAbi, AaveV4SpokeAbi, AaveV4OracleAbi, AaveV4HubAbi, DolomiteMarginAbi, GearboxMarketCompressorV310Abi, MorphoBlueAbi, MidnightAbi, TermRepoTokenAbi, TermRepoServicerAbi, TermRepoCollateralManagerAbi, LiquityTroveNFTAbi, LiquityCollSurplusPoolAbi, GearboxCreditAccountCompressorV310Abi } from '@1delta/abis';
10
10
  export { MorphoLensAbi } from '@1delta/abis';
11
11
  import { prepareDebitDataMulticall, prepareLenderDebitMulticall, parseDebitDataResult, parseLenderDebitResult, getPermit2ContractAddress, getCompoundV3CometAddress as getCompoundV3CometAddress$1, getMorphoAddress, getAaveCollateralTokenAddress, getSiloHalfForUnderlying, InitMarginAddresses, getLstAcceptedInputs } from '@1delta/calldata-sdk';
12
12
  import { proxyNativeFetch } from '@1delta/proxy-fetch';
@@ -7504,6 +7504,18 @@ var getLendersForChain = (c) => {
7504
7504
  if (midnightConfig()?.[c]?.midnight) {
7505
7505
  lenders.push(Lender.MORPHO_MIDNIGHT);
7506
7506
  }
7507
+ if (termConfig()?.[c]?.termController && termMarketsByChain(c).length > 0) {
7508
+ lenders.push(Lender.TERM_FINANCE);
7509
+ }
7510
+ if (exactlyConfig()?.[c]?.previewer) {
7511
+ lenders.push(Lender.EXACTLY);
7512
+ }
7513
+ for (const l of liquityLendersByChain(c)) {
7514
+ lenders.push(l);
7515
+ }
7516
+ for (const l of riverLendersByChain(c)) {
7517
+ lenders.push(l);
7518
+ }
7507
7519
  return lenders.filter((l) => !isExcludedLender(l));
7508
7520
  };
7509
7521
  var filterLendersByProtocol = (allLenders, protocolList) => {
@@ -7515,8 +7527,11 @@ var filterLendersByProtocol = (allLenders, protocolList) => {
7515
7527
  const hasFluid = protocolList.includes(Lender.FLUID);
7516
7528
  const hasGearboxV3 = protocolList.includes(Lender.GEARBOX_V3);
7517
7529
  const hasDolomite = protocolList.includes(Lender.DOLOMITE);
7530
+ const liquityBases = LIQUITY_FAMILY_LENDERS.filter(
7531
+ (b) => protocolList.includes(b)
7532
+ );
7518
7533
  return allLenders.filter(
7519
- (lender) => protocolList.includes(lender) || hasMorpho && lender?.startsWith("MORPHO_BLUE") || hasMoolah && lender?.startsWith("LISTA_DAO") || hasFluid && lender?.startsWith("FLUID") || hasGearboxV3 && lender?.startsWith("GEARBOX_V3") || hasDolomite && lender?.startsWith("DOLOMITE")
7534
+ (lender) => protocolList.includes(lender) || hasMorpho && lender?.startsWith("MORPHO_BLUE") || hasMoolah && lender?.startsWith("LISTA_DAO") || hasFluid && lender?.startsWith("FLUID") || hasGearboxV3 && lender?.startsWith("GEARBOX_V3") || hasDolomite && lender?.startsWith("DOLOMITE") || liquityBases.some((b) => lender?.startsWith(b)) || protocolList.includes(Lender.RIVER) && lender?.startsWith("RIVER")
7520
7535
  );
7521
7536
  };
7522
7537
  var getAavesForChain = () => {
@@ -11150,8 +11165,8 @@ async function fetchListaBrokerUserData(chainId, account, marketKeys, nowSecs =
11150
11165
  const brokers = await resolveListaBrokers(chainId, marketKeys, getClient);
11151
11166
  const ids = Object.keys(brokers);
11152
11167
  const out = {};
11153
- const cacheKey2 = `${chainId}:${account.toLowerCase()}`;
11154
- BROKER_USER_CACHE[cacheKey2] = out;
11168
+ const cacheKey3 = `${chainId}:${account.toLowerCase()}`;
11169
+ BROKER_USER_CACHE[cacheKey3] = out;
11155
11170
  if (ids.length === 0) return out;
11156
11171
  try {
11157
11172
  const client = getClient(chainId);
@@ -19612,7 +19627,7 @@ var getSiloV2ReservesDataConverter = (lender, chainId, prices, additionalYields,
19612
19627
  { self: market.silo0, other: market.silo1 },
19613
19628
  { self: market.silo1, other: market.silo0 }
19614
19629
  ];
19615
- const toBigInt15 = (v) => {
19630
+ const toBigInt16 = (v) => {
19616
19631
  if (v === void 0 || v === null || v === "0x") return 0n;
19617
19632
  if (typeof v === "bigint") return v;
19618
19633
  try {
@@ -19624,8 +19639,8 @@ var getSiloV2ReservesDataConverter = (lender, chainId, prices, additionalYields,
19624
19639
  for (let s = 0; s < 2; s++) {
19625
19640
  const { self, other } = sides[s];
19626
19641
  const slot = s * SILO_V2_CALLS_PER_SIDE;
19627
- const totalAssetsRaw = toBigInt15(data[slot]);
19628
- const debtAssetsRaw = toBigInt15(data[slot + 1]);
19642
+ const totalAssetsRaw = toBigInt16(data[slot]);
19643
+ const debtAssetsRaw = toBigInt16(data[slot + 1]);
19629
19644
  const irmConfigRaw = data[slot + 2];
19630
19645
  const decimals = self.decimals;
19631
19646
  const totalDeposits = Number(formatUnits(totalAssetsRaw, decimals));
@@ -19780,7 +19795,7 @@ var getSiloV3ReservesDataConverter = (lender, chainId, prices, additionalYields,
19780
19795
  { self: market.silo0, other: market.silo1 },
19781
19796
  { self: market.silo1, other: market.silo0 }
19782
19797
  ];
19783
- const toBigInt15 = (v) => {
19798
+ const toBigInt16 = (v) => {
19784
19799
  if (v === void 0 || v === null || v === "0x") return 0n;
19785
19800
  if (typeof v === "bigint") return v;
19786
19801
  try {
@@ -19792,8 +19807,8 @@ var getSiloV3ReservesDataConverter = (lender, chainId, prices, additionalYields,
19792
19807
  for (let s = 0; s < 2; s++) {
19793
19808
  const { self, other } = sides[s];
19794
19809
  const slot = s * SILO_V3_CALLS_PER_SIDE;
19795
- const totalAssetsRaw = toBigInt15(data[slot]);
19796
- const debtAssetsRaw = toBigInt15(data[slot + 1]);
19810
+ const totalAssetsRaw = toBigInt16(data[slot]);
19811
+ const debtAssetsRaw = toBigInt16(data[slot + 1]);
19797
19812
  const irmConfigRaw = data[slot + 2];
19798
19813
  const decimals = self.decimals;
19799
19814
  const totalDeposits = Number(formatUnits(totalAssetsRaw, decimals));
@@ -20962,6 +20977,41 @@ var ApiBookSource = class {
20962
20977
  return null;
20963
20978
  }
20964
20979
  }
20980
+ /**
20981
+ * ONE fetch → the full-depth aggregate top + a bounded best-first ladder slice
20982
+ * (top `maxLevels` per side). Same `/books/{marketId}` call as `getBookTop`, so
20983
+ * the public batch captures a chunk of the book for free (no extra request).
20984
+ */
20985
+ async getTopAndBook(marketId, maxLevels = 20) {
20986
+ const url = `${this.baseUrl}/books/${marketId}`;
20987
+ try {
20988
+ const res = await this.fetchImpl(url);
20989
+ if (!res.ok) {
20990
+ warn(`book ${marketId} \u2192 HTTP ${res.status}`);
20991
+ return null;
20992
+ }
20993
+ const json = await res.json();
20994
+ const raw = json?.data ?? json;
20995
+ const bids = (Array.isArray(raw?.bids) ? raw.bids.map(parseLevel) : []).filter((l) => l.units > 0n).sort(
20996
+ (a, b) => a.tick < b.tick ? 1 : a.tick > b.tick ? -1 : 0
20997
+ );
20998
+ const asks = (Array.isArray(raw?.asks) ? raw.asks.map(parseLevel) : []).filter((l) => l.units > 0n).sort(
20999
+ (a, b) => a.tick < b.tick ? -1 : a.tick > b.tick ? 1 : 0
21000
+ );
21001
+ const top = reduceTop(bids, asks);
21002
+ const book = {
21003
+ bids: bids.slice(0, maxLevels),
21004
+ asks: asks.slice(0, maxLevels)
21005
+ };
21006
+ return { top, book };
21007
+ } catch (e) {
21008
+ console.error(
21009
+ `[midnight getTopAndBook] ${url} threw:`,
21010
+ e?.message ?? e
21011
+ );
21012
+ return null;
21013
+ }
21014
+ }
20965
21015
  /**
20966
21016
  * Maker addresses per price level, keyed by tick string. `getBook` levels are
20967
21017
  * aggregated by tick and carry NO maker (a level can be several makers), so
@@ -20996,30 +21046,45 @@ function createMidnightBookSource(chainId, fetchImpl = fetch) {
20996
21046
  }
20997
21047
 
20998
21048
  // src/lending/public-data/midnight/fetchPublic.ts
21049
+ var MIDNIGHT_BOOK_LEVELS = 20;
20999
21050
  var LKG_TTL_SEC = 30 * 60;
21000
- var lastGoodTop = /* @__PURE__ */ new Map();
21001
- async function fetchTopWithFallback(source, chainId, marketId, nowSec2) {
21051
+ var lastGood = /* @__PURE__ */ new Map();
21052
+ async function fetchTopAndBookWithFallback(source, chainId, marketId, nowSec5) {
21002
21053
  const key = `${chainId}:${marketId}`;
21003
- const fresh = await source.getBookTop(marketId).catch(() => null);
21054
+ let fresh = null;
21055
+ if (source.getTopAndBook) {
21056
+ fresh = await source.getTopAndBook(marketId, MIDNIGHT_BOOK_LEVELS).catch(() => null);
21057
+ } else {
21058
+ const top = await source.getBookTop(marketId).catch(() => null);
21059
+ if (top) fresh = { top, book: { bids: [], asks: [] } };
21060
+ }
21004
21061
  if (fresh) {
21005
- lastGoodTop.set(key, { top: fresh, at: nowSec2 });
21006
- return fresh;
21062
+ lastGood.set(key, { top: fresh.top, book: fresh.book, at: nowSec5 });
21063
+ return { top: fresh.top, book: fresh.book };
21007
21064
  }
21008
- const cached = lastGoodTop.get(key);
21009
- if (cached && nowSec2 - cached.at <= LKG_TTL_SEC) return cached.top;
21010
- return null;
21065
+ const cached = lastGood.get(key);
21066
+ if (cached && nowSec5 - cached.at <= LKG_TTL_SEC) {
21067
+ return { top: cached.top, book: cached.book };
21068
+ }
21069
+ return { top: null, book: null };
21011
21070
  }
21012
21071
  async function fetchMidnightMarkets(chainId, source = createMidnightBookSource(chainId)) {
21013
21072
  const markets = midnightMarketsByChain(chainId);
21014
21073
  if (markets.length === 0) return [];
21015
- const nowSec2 = Math.floor(Date.now() / 1e3);
21074
+ const nowSec5 = Math.floor(Date.now() / 1e3);
21016
21075
  return Promise.all(
21017
- markets.map(async (config) => ({
21018
- config,
21019
- // Matured markets are emitted with zeroed rates/depth by the converter, so
21020
- // the book fetch is wasted — skip the upstream call for them.
21021
- top: Number(config.maturity) <= nowSec2 ? null : await fetchTopWithFallback(source, chainId, config.marketId, nowSec2)
21022
- }))
21076
+ markets.map(async (config) => {
21077
+ if (Number(config.maturity) <= nowSec5) {
21078
+ return { config, top: null, book: null };
21079
+ }
21080
+ const { top, book } = await fetchTopAndBookWithFallback(
21081
+ source,
21082
+ chainId,
21083
+ config.marketId,
21084
+ nowSec5
21085
+ );
21086
+ return { config, top, book };
21087
+ })
21023
21088
  );
21024
21089
  }
21025
21090
 
@@ -21138,7 +21203,7 @@ function convertMidnightMarketsToResponse(raw, chainId, prices = {}, _additional
21138
21203
  }, tokens = {}) {
21139
21204
  const out = {};
21140
21205
  const now = nowSec();
21141
- for (const { config, top } of raw) {
21206
+ for (const { config, top, book } of raw) {
21142
21207
  if (!config?.marketId || !config.loanToken) continue;
21143
21208
  const m = midnightLenderKey(config.marketId);
21144
21209
  const maturity = Number(config.maturity);
@@ -21275,6 +21340,12 @@ function convertMidnightMarketsToResponse(raw, chainId, prices = {}, _additional
21275
21340
  isFrozen: false
21276
21341
  };
21277
21342
  });
21343
+ const toLevels = (levels) => (levels ?? []).map((l) => ({
21344
+ apr: tickToAprNumber(l.tick, ttmBig) * 100,
21345
+ units: l.units.toString(),
21346
+ assets: formatNr(l.assets, config.loanDecimals)
21347
+ }));
21348
+ const marketBook = book && !matured ? { bids: toLevels(book.bids), asks: toLevels(book.asks) } : void 0;
21278
21349
  const primaryCollateral = config.collateralParams[0];
21279
21350
  entry.params = {
21280
21351
  market: {
@@ -21316,7 +21387,401 @@ function convertMidnightMarketsToResponse(raw, chainId, prices = {}, _additional
21316
21387
  },
21317
21388
  enterGate: config.enterGate,
21318
21389
  liquidatorGate: config.liquidatorGate,
21319
- collateralParams: config.collateralParams
21390
+ collateralParams: config.collateralParams,
21391
+ // Bounded top-of-book slice (top-N levels/side) for later filtering.
21392
+ book: marketBook
21393
+ }
21394
+ };
21395
+ entry.chainId = chainId;
21396
+ out[m] = entry;
21397
+ }
21398
+ return out;
21399
+ }
21400
+ var WAD3 = 1e18;
21401
+ var TERM_SUBGRAPH_BY_CHAIN = {
21402
+ "1": "https://api.subgraph.ormilabs.com/api/public/05e9a4e2-103b-4163-a81e-3b1b038d0055/subgraphs/term-finance-mainnet/latest/gn",
21403
+ "43114": "https://api.subgraph.ormilabs.com/api/public/05e9a4e2-103b-4163-a81e-3b1b038d0055/subgraphs/term-finance-avalanche/latest/gn",
21404
+ "56": "https://api.subgraph.ormilabs.com/api/public/05e9a4e2-103b-4163-a81e-3b1b038d0055/subgraphs/term-finance-bnb/latest/gn",
21405
+ "8453": "https://api.subgraph.ormilabs.com/api/public/05e9a4e2-103b-4163-a81e-3b1b038d0055/subgraphs/term-finance-base/latest/gn",
21406
+ "42161": "https://api.subgraph.ormilabs.com/api/public/05e9a4e2-103b-4163-a81e-3b1b038d0055/subgraphs/term-finance-arbitrum/latest/gn"
21407
+ };
21408
+ var warn2 = (...args) => {
21409
+ };
21410
+ function termApiBaseUrl(chainId) {
21411
+ return resolveTermApiBase(chainId) || TERM_SUBGRAPH_BY_CHAIN[chainId] || "";
21412
+ }
21413
+ var toNum = (v) => {
21414
+ if (v == null || v === "") return 0;
21415
+ const n = typeof v === "number" ? v : Number(v);
21416
+ return Number.isFinite(n) ? n : 0;
21417
+ };
21418
+ var toBig3 = (v) => {
21419
+ try {
21420
+ return v == null ? 0n : BigInt(String(v));
21421
+ } catch {
21422
+ return 0n;
21423
+ }
21424
+ };
21425
+ var TermSubgraphSource = class {
21426
+ url;
21427
+ fetchImpl;
21428
+ constructor(url, fetchImpl = fetch) {
21429
+ this.url = url;
21430
+ this.fetchImpl = (input, init) => fetchImpl.call(globalThis, input, init);
21431
+ }
21432
+ async gql(query3, variables) {
21433
+ if (!this.url) return null;
21434
+ try {
21435
+ const res = await this.fetchImpl(this.url, {
21436
+ method: "POST",
21437
+ headers: { "content-type": "application/json" },
21438
+ body: JSON.stringify({ query: query3, variables })
21439
+ });
21440
+ if (!res.ok) {
21441
+ warn2(`HTTP ${res.status}`);
21442
+ return null;
21443
+ }
21444
+ const json = await res.json();
21445
+ if (json?.errors) {
21446
+ warn2("graphql errors", json.errors);
21447
+ return null;
21448
+ }
21449
+ return json?.data ?? null;
21450
+ } catch (e) {
21451
+ return null;
21452
+ }
21453
+ }
21454
+ async getBookTop(config) {
21455
+ return (await this.getTopAndBook(config))?.top ?? null;
21456
+ }
21457
+ /**
21458
+ * ONE query → the aggregate top (best APR + FULL depth) PLUS a bounded book
21459
+ * slice (top `maxLevels` open orders per side). `asks` = orders selling repo
21460
+ * tokens (the secondary LEND book); `bids` = the rest (borrow side, usually
21461
+ * empty — Term borrow is sealed-bid auction, not a continuous book). Term
21462
+ * secondary orders carry no per-order rate, so every level shares the market's
21463
+ * clearing APR; the levels expose per-order SIZE for filtering.
21464
+ */
21465
+ async getTopAndBook(config, maxLevels = 20) {
21466
+ const id = config.termRepoId.toLowerCase();
21467
+ const repoToken = config.repoToken.toLowerCase();
21468
+ const data = await this.gql(
21469
+ `query Top($id: ID!, $repoId: Bytes!) {
21470
+ termRepo(id: $id) { termRepoTokenRedemptionRatio }
21471
+ termAuctions(where: { term: $id, auctionComplete: true }, orderBy: auctionEndTime, orderDirection: desc, first: 1) {
21472
+ auctionClearingPrice
21473
+ dayCountFractionMantissa
21474
+ }
21475
+ termOrders(where: { termRepoId: $repoId, orderCancelled: false }, first: 500) {
21476
+ makerToken
21477
+ originalOrderAmount
21478
+ filledAmount
21479
+ }
21480
+ }`,
21481
+ { id, repoId: id }
21482
+ );
21483
+ if (!data) return null;
21484
+ const redemptionRatio = toBig3(data.termRepo?.termRepoTokenRedemptionRatio) || BigInt(WAD3);
21485
+ const auction = data.termAuctions?.[0];
21486
+ const clearingRate = toNum(auction?.auctionClearingPrice);
21487
+ const aprPct = clearingRate > 0 ? clearingRate / WAD3 * 100 : 0;
21488
+ const scale = Math.pow(10, config.loanDecimals);
21489
+ const toLoan = (repoUnits) => Number(repoUnits * redemptionRatio / BigInt(WAD3)) / scale;
21490
+ const orders = (data.termOrders ?? []).map((o) => ({
21491
+ remaining: toBig3(o.originalOrderAmount) - toBig3(o.filledAmount),
21492
+ isAsk: String(o.makerToken).toLowerCase() === repoToken
21493
+ })).filter((o) => o.remaining > 0n).sort(
21494
+ (a, b) => a.remaining < b.remaining ? 1 : a.remaining > b.remaining ? -1 : 0
21495
+ );
21496
+ let supplyUnits = 0n;
21497
+ let borrowUnits = 0n;
21498
+ const asks = [];
21499
+ const bids = [];
21500
+ for (const o of orders) {
21501
+ const arr = o.isAsk ? asks : bids;
21502
+ if (o.isAsk) supplyUnits += o.remaining;
21503
+ else borrowUnits += o.remaining;
21504
+ if (arr.length < maxLevels) {
21505
+ arr.push({
21506
+ apr: aprPct,
21507
+ units: o.remaining.toString(),
21508
+ assets: toLoan(o.remaining)
21509
+ });
21510
+ }
21511
+ }
21512
+ const top = {
21513
+ supplyAprPct: aprPct,
21514
+ borrowAprPct: aprPct,
21515
+ supplyLiquidity: toLoan(supplyUnits),
21516
+ borrowLiquidity: toLoan(borrowUnits)
21517
+ };
21518
+ return { top, book: { bids, asks } };
21519
+ }
21520
+ async getListings(config) {
21521
+ const id = config.termRepoId.toLowerCase();
21522
+ const repoToken = config.repoToken.toLowerCase();
21523
+ const data = await this.gql(
21524
+ `query Listings($repoId: Bytes!) {
21525
+ termOrders(where: { termRepoId: $repoId, orderCancelled: false }, first: 500) {
21526
+ id
21527
+ maker
21528
+ makerToken
21529
+ originalOrderAmount
21530
+ filledAmount
21531
+ }
21532
+ }`,
21533
+ { repoId: id }
21534
+ );
21535
+ if (!data) return null;
21536
+ return (data.termOrders ?? []).filter((o) => String(o.makerToken).toLowerCase() === repoToken).map((o) => {
21537
+ const remaining = toBig3(o.originalOrderAmount) - toBig3(o.filledAmount);
21538
+ return {
21539
+ listingId: String(o.id),
21540
+ seller: String(o.maker),
21541
+ repoToken: config.repoToken,
21542
+ amount: remaining.toString()
21543
+ };
21544
+ }).filter((l) => toBig3(l.amount) > 0n);
21545
+ }
21546
+ };
21547
+ function createTermBookSource(chainId, fetchImpl = fetch) {
21548
+ return new TermSubgraphSource(termApiBaseUrl(chainId), fetchImpl);
21549
+ }
21550
+
21551
+ // src/lending/public-data/term/fetchPublic.ts
21552
+ var TERM_BOOK_LEVELS = 20;
21553
+ var LKG_TTL_SEC2 = 30 * 60;
21554
+ var lastGood2 = /* @__PURE__ */ new Map();
21555
+ async function fetchTopAndBookWithFallback2(source, chainId, config, nowSec5) {
21556
+ const key = `${chainId}:${config.termRepoId}`;
21557
+ let fresh = null;
21558
+ if (source.getTopAndBook) {
21559
+ fresh = await source.getTopAndBook(config, TERM_BOOK_LEVELS).catch(() => null);
21560
+ } else {
21561
+ const top = await source.getBookTop(config).catch(() => null);
21562
+ if (top) fresh = { top, book: { bids: [], asks: [] } };
21563
+ }
21564
+ if (fresh) {
21565
+ lastGood2.set(key, { top: fresh.top, book: fresh.book, at: nowSec5 });
21566
+ return { top: fresh.top, book: fresh.book };
21567
+ }
21568
+ const cached = lastGood2.get(key);
21569
+ if (cached && nowSec5 - cached.at <= LKG_TTL_SEC2) {
21570
+ return { top: cached.top, book: cached.book };
21571
+ }
21572
+ return { top: null, book: null };
21573
+ }
21574
+ async function fetchTermMarkets(chainId, source = createTermBookSource(chainId)) {
21575
+ const markets = termMarketsByChain(chainId);
21576
+ if (markets.length === 0) return [];
21577
+ const nowSec5 = Math.floor(Date.now() / 1e3);
21578
+ return Promise.all(
21579
+ markets.map(async (config) => {
21580
+ if (Number(config.maturity) <= nowSec5) {
21581
+ return { config, top: null, book: null };
21582
+ }
21583
+ const { top, book } = await fetchTopAndBookWithFallback2(
21584
+ source,
21585
+ chainId,
21586
+ config,
21587
+ nowSec5
21588
+ );
21589
+ return { config, top, book };
21590
+ })
21591
+ );
21592
+ }
21593
+
21594
+ // src/lending/public-data/term/math.ts
21595
+ var WAD4 = 1e18;
21596
+ function termMaintenanceRatioToLtv(maintenanceRatio) {
21597
+ if (!maintenanceRatio) return 0;
21598
+ let r;
21599
+ try {
21600
+ r = BigInt(maintenanceRatio);
21601
+ } catch {
21602
+ return 0;
21603
+ }
21604
+ if (r <= 0n) return 0;
21605
+ const ratio = Number(r) / WAD4;
21606
+ return ratio > 0 ? 1 / ratio : 0;
21607
+ }
21608
+ function termLiquidatedDamagesToPenalty(liquidatedDamages) {
21609
+ if (!liquidatedDamages) return 0;
21610
+ try {
21611
+ return Number(BigInt(liquidatedDamages)) / WAD4;
21612
+ } catch {
21613
+ return 0;
21614
+ }
21615
+ }
21616
+
21617
+ // src/lending/public-data/term/convertPublic.ts
21618
+ var nowSec2 = () => Math.floor(Date.now() / 1e3);
21619
+ function termLenderKey(termRepoId) {
21620
+ const body = termRepoId.startsWith("0x") ? termRepoId.slice(2) : termRepoId;
21621
+ return "TERM_FINANCE_" + body.toUpperCase();
21622
+ }
21623
+ function currencyFor2(address, decimals, tokens) {
21624
+ const lower = address.toLowerCase();
21625
+ return tokens[lower] ?? { address: lower, symbol: "", name: "", decimals };
21626
+ }
21627
+ function convertTermMarketsToResponse(raw, chainId, prices = {}, _additionalYields = { intrinsicYields: {}, lenderRewards: {}, loaded: true }, tokens = {}) {
21628
+ const out = {};
21629
+ const now = nowSec2();
21630
+ for (const { config, top, book } of raw) {
21631
+ if (!config?.termRepoId || !config.purchaseToken) continue;
21632
+ const m = termLenderKey(config.termRepoId);
21633
+ const maturity = Number(config.maturity);
21634
+ const ttm = maturity - now;
21635
+ const matured = ttm <= 0;
21636
+ const supplyAprPct = !matured ? top?.supplyAprPct ?? 0 : 0;
21637
+ const borrowAprPct = !matured ? top?.borrowAprPct ?? 0 : 0;
21638
+ const terms = borrowAprPct > 0 && !matured ? [
21639
+ {
21640
+ termId: 0,
21641
+ durationSecs: Math.max(0, ttm),
21642
+ durationDays: ttm / 86400,
21643
+ apr: borrowAprPct
21644
+ }
21645
+ ] : void 0;
21646
+ const loanAddr = config.purchaseToken.toLowerCase();
21647
+ const loanAsset = tokens[loanAddr];
21648
+ const loanKey = toOracleKey(loanAsset?.assetGroup) || toGenericPriceKey(loanAddr, chainId);
21649
+ const loanPrice = prices[loanKey] ?? 0;
21650
+ const supplyLiquidity = top?.supplyLiquidity ?? 0;
21651
+ const borrowLiquidity = top?.borrowLiquidity ?? 0;
21652
+ const entry = { data: {} };
21653
+ const loanUid = createMarketUid(chainId, m, loanAddr);
21654
+ entry.data[loanUid] = {
21655
+ marketUid: loanUid,
21656
+ name: "Loan " + (tokens[loanAddr]?.symbol ?? ""),
21657
+ poolId: loanAddr,
21658
+ underlying: loanAddr,
21659
+ asset: currencyFor2(loanAddr, config.loanDecimals, tokens),
21660
+ totalDeposits: supplyLiquidity,
21661
+ totalDebtStable: 0,
21662
+ totalDebt: 0,
21663
+ totalLiquidity: borrowLiquidity,
21664
+ borrowLiquidity,
21665
+ totalLiquidityUSD: borrowLiquidity * loanPrice,
21666
+ borrowLiquidityUSD: borrowLiquidity * loanPrice,
21667
+ totalDepositsUSD: supplyLiquidity * loanPrice,
21668
+ totalDebtStableUSD: 0,
21669
+ totalDebtUSD: 0,
21670
+ utilization: 0,
21671
+ depositRate: supplyAprPct,
21672
+ variableBorrowRate: borrowAprPct,
21673
+ // Term is fixed-rate: mirror the fixed borrow APR on stableBorrowRate too.
21674
+ stableBorrowRate: borrowAprPct,
21675
+ intrinsicYield: 0,
21676
+ rewards: void 0,
21677
+ decimals: config.loanDecimals,
21678
+ config: {
21679
+ 0: {
21680
+ category: 0,
21681
+ borrowCollateralFactor: 0,
21682
+ collateralFactor: 0,
21683
+ borrowFactor: 1,
21684
+ liquidationPenalty: 0,
21685
+ closeFactor: 1,
21686
+ collateralDisabled: true,
21687
+ debtDisabled: false
21688
+ }
21689
+ },
21690
+ closeFactor: 1,
21691
+ collateralActive: false,
21692
+ borrowingEnabled: !matured,
21693
+ depositsEnabled: !matured,
21694
+ hasStable: false,
21695
+ variableBorrowDisabled: false,
21696
+ isActive: true,
21697
+ isFrozen: false
21698
+ };
21699
+ config.collateralParams.forEach((c) => {
21700
+ const collAddr = c.token.toLowerCase();
21701
+ const ltv = termMaintenanceRatioToLtv(c.maintenanceRatio);
21702
+ const liquidationPenalty = termLiquidatedDamagesToPenalty(c.liquidatedDamages) || liquidationPenaltyFromLltv(ltv);
21703
+ const collUid = createMarketUid(chainId, m, collAddr);
21704
+ entry.data[collUid] = {
21705
+ marketUid: collUid,
21706
+ name: "Collateral " + (tokens[collAddr]?.symbol ?? ""),
21707
+ poolId: collAddr,
21708
+ underlying: collAddr,
21709
+ asset: currencyFor2(collAddr, c.decimals, tokens),
21710
+ totalDeposits: 0,
21711
+ totalDebtStable: 0,
21712
+ totalDebt: 0,
21713
+ totalLiquidity: 0,
21714
+ borrowLiquidity: 0,
21715
+ totalLiquidityUSD: 0,
21716
+ borrowLiquidityUSD: 0,
21717
+ totalDepositsUSD: 0,
21718
+ totalDebtStableUSD: 0,
21719
+ totalDebtUSD: 0,
21720
+ utilization: 0,
21721
+ depositRate: 0,
21722
+ variableBorrowRate: 0,
21723
+ stableBorrowRate: 0,
21724
+ intrinsicYield: 0,
21725
+ rewards: void 0,
21726
+ decimals: c.decimals,
21727
+ config: {
21728
+ 0: {
21729
+ category: 0,
21730
+ borrowCollateralFactor: ltv,
21731
+ collateralFactor: ltv,
21732
+ borrowFactor: 1,
21733
+ liquidationPenalty,
21734
+ closeFactor: 1,
21735
+ collateralDisabled: false,
21736
+ debtDisabled: true
21737
+ }
21738
+ },
21739
+ closeFactor: 1,
21740
+ collateralActive: true,
21741
+ borrowingEnabled: false,
21742
+ depositsEnabled: !matured,
21743
+ hasStable: false,
21744
+ isActive: true,
21745
+ isFrozen: false
21746
+ };
21747
+ });
21748
+ const primaryCollateral = config.collateralParams[0];
21749
+ entry.params = {
21750
+ market: {
21751
+ lender: m,
21752
+ name: config.name,
21753
+ loanDecimals: config.loanDecimals,
21754
+ collateralDecimals: primaryCollateral?.decimals,
21755
+ id: config.termRepoId,
21756
+ lltv: primaryCollateral?.maintenanceRatio ?? "0",
21757
+ oracle: zeroAddress,
21758
+ irm: zeroAddress,
21759
+ collateralAddress: primaryCollateral?.token ?? zeroAddress,
21760
+ loanAddress: loanAddr,
21761
+ terms,
21762
+ // Term-specific extras (consumed by calldata / worker-api resolvers)
21763
+ maturity: config.maturity,
21764
+ redemptionTimestamp: config.redemptionTimestamp,
21765
+ endOfRepurchaseWindow: config.endOfRepurchaseWindow,
21766
+ redemptionValue: config.redemptionValue,
21767
+ servicingFee: config.servicingFee,
21768
+ // Canonical cross-protocol fixed-term descriptor. Term: single calendar
21769
+ // maturity, auction-cleared fixed rate, no early-repay penalty on the
21770
+ // lender (exit = sell the repo token on the secondary book).
21771
+ fixedTerm: {
21772
+ model: "term",
21773
+ maturity: Number(config.maturity),
21774
+ fees: {},
21775
+ earlyRepay: { kind: "none" },
21776
+ // Fixed rate is discovered by the periodic sealed-bid auction; the
21777
+ // per-repo servicer is the market-level venue reference.
21778
+ provider: { kind: "auction", address: config.servicer }
21779
+ },
21780
+ collateralParams: config.collateralParams,
21781
+ // Bounded book slice (top-N open orders/side) for later filtering. Term
21782
+ // levels are already rate+size normalized; pass through (empty when
21783
+ // matured or no book). `asks` = secondary lend orders, `bids` = borrow.
21784
+ book: !matured && book ? { bids: book.bids, asks: book.asks } : void 0
21320
21785
  }
21321
21786
  };
21322
21787
  entry.chainId = chainId;
@@ -21324,6 +21789,783 @@ function convertMidnightMarketsToResponse(raw, chainId, prices = {}, _additional
21324
21789
  }
21325
21790
  return out;
21326
21791
  }
21792
+ async function fetchExactlyMarkets(chainId) {
21793
+ const cfg = exactlyConfig()?.[chainId];
21794
+ if (!cfg?.previewer || !cfg?.auditor) {
21795
+ return { markets: [], liquidationIncentive: null };
21796
+ }
21797
+ const client = getEvmClient(chainId);
21798
+ const [markets, liquidationIncentive] = await Promise.all([
21799
+ client.readContract({
21800
+ address: cfg.previewer,
21801
+ abi: ExactlyPreviewerAbi,
21802
+ functionName: "exactly",
21803
+ args: [zeroAddress]
21804
+ }).then((res) => res).catch(() => []),
21805
+ client.readContract({
21806
+ address: cfg.auditor,
21807
+ abi: ExactlyAuditorAbi,
21808
+ functionName: "liquidationIncentive"
21809
+ }).then((res) => ({
21810
+ liquidator: res[0],
21811
+ lenders: res[1]
21812
+ })).catch(() => null)
21813
+ ]);
21814
+ return { markets: [...markets], liquidationIncentive };
21815
+ }
21816
+
21817
+ // src/lending/public-data/exactly/math.ts
21818
+ var WAD5 = 1e18;
21819
+ var YEAR_SECONDS = 31536e3;
21820
+ function exactlyWadRateToPercent(rate) {
21821
+ if (!rate) return 0;
21822
+ return Number(rate) / WAD5 * 100;
21823
+ }
21824
+ function exactlyUsdPrice(usdPrice) {
21825
+ if (!usdPrice) return 0;
21826
+ return Number(usdPrice) / WAD5;
21827
+ }
21828
+ function exactlyPenaltyRateToAprPercent(penaltyRatePerSecond) {
21829
+ if (!penaltyRatePerSecond) return 0;
21830
+ return Number(penaltyRatePerSecond) / WAD5 * YEAR_SECONDS * 100;
21831
+ }
21832
+ function exactlyFloatingDepositAprPercent(floatingBorrowRate, floatingDebt, floatingBackupBorrowed, floatingAssets) {
21833
+ if (!floatingBorrowRate || !floatingAssets) return 0;
21834
+ const lent = Number((floatingDebt ?? 0n) + (floatingBackupBorrowed ?? 0n));
21835
+ const assets = Number(floatingAssets);
21836
+ if (assets <= 0 || lent <= 0) return 0;
21837
+ return Number(floatingBorrowRate) / WAD5 * (lent / assets) * 100;
21838
+ }
21839
+ function exactlyPairLtv(collateralAdjustFactor, borrowAdjustFactor) {
21840
+ if (!collateralAdjustFactor || !borrowAdjustFactor) return 0;
21841
+ return Number(collateralAdjustFactor) / WAD5 * (Number(borrowAdjustFactor) / WAD5);
21842
+ }
21843
+
21844
+ // src/lending/public-data/exactly/convertPublic.ts
21845
+ var nowSec3 = () => Math.floor(Date.now() / 1e3);
21846
+ function exactlyLenderKey(market) {
21847
+ const body = market.startsWith("0x") ? market.slice(2) : market;
21848
+ return "EXACTLY_" + body.toUpperCase();
21849
+ }
21850
+ function exactlyMarketFromLenderKey(lender) {
21851
+ if (!lender.startsWith("EXACTLY_")) return void 0;
21852
+ const body = lender.slice("EXACTLY_".length);
21853
+ return body.length === 40 ? "0x" + body.toLowerCase() : void 0;
21854
+ }
21855
+ function toHuman(raw, decimals) {
21856
+ return Number(raw) / 10 ** decimals;
21857
+ }
21858
+ function currencyFor3(address, decimals, symbol, tokens) {
21859
+ const lower = address.toLowerCase();
21860
+ return tokens[lower] ?? { address: lower, symbol, name: symbol, decimals };
21861
+ }
21862
+ function convertExactlyMarketsToResponse(raw, chainId, prices = {}, _additionalYields = {
21863
+ intrinsicYields: {},
21864
+ lenderRewards: {},
21865
+ loaded: true
21866
+ }, tokens = {}) {
21867
+ const out = {};
21868
+ const now = nowSec3();
21869
+ const markets = raw?.markets ?? [];
21870
+ const liqBonus = raw?.liquidationIncentive ? Number(raw.liquidationIncentive.liquidator) / 1e18 : 0;
21871
+ for (const m of markets) {
21872
+ const lenderKey = exactlyLenderKey(m.market);
21873
+ const assetAddr = m.asset.toLowerCase();
21874
+ const decimals = m.decimals;
21875
+ const asset = tokens[assetAddr];
21876
+ const priceKey = toOracleKey(asset?.assetGroup) || toGenericPriceKey(assetAddr, chainId);
21877
+ const price2 = exactlyUsdPrice(m.usdPrice) || (prices[priceKey] ?? 0);
21878
+ const livePools = m.fixedPools.filter((p) => Number(p.maturity) > now);
21879
+ const terms = livePools.map((p) => {
21880
+ const maturity = Number(p.maturity);
21881
+ const ttm = maturity - now;
21882
+ return {
21883
+ termId: maturity,
21884
+ durationSecs: ttm,
21885
+ durationDays: ttm / 86400,
21886
+ apr: exactlyWadRateToPercent(p.minBorrowRate),
21887
+ depositApr: exactlyWadRateToPercent(p.depositRate),
21888
+ available: toHuman(p.available, decimals)
21889
+ };
21890
+ });
21891
+ const bestFixedBorrowApr = terms.length > 0 ? Math.min(...terms.map((t) => t.apr)) : 0;
21892
+ const fixedBorrowed = livePools.reduce(
21893
+ (acc, p) => acc + toHuman(p.borrowed, decimals),
21894
+ 0
21895
+ );
21896
+ const fixedSupplied = livePools.reduce(
21897
+ (acc, p) => acc + toHuman(p.supplied, decimals),
21898
+ 0
21899
+ );
21900
+ const totalDeposits = toHuman(m.totalFloatingDepositAssets, decimals) + fixedSupplied;
21901
+ const totalDebt = toHuman(m.totalFloatingBorrowAssets, decimals) + fixedBorrowed;
21902
+ const borrowLiquidity = toHuman(m.floatingAvailableAssets, decimals);
21903
+ const utilization = totalDeposits > 0 ? totalDebt / totalDeposits : 0;
21904
+ const selfLtv = exactlyPairLtv(m.adjustFactor, m.adjustFactor);
21905
+ const penaltyApr = exactlyPenaltyRateToAprPercent(m.penaltyRate);
21906
+ const entry = { data: {} };
21907
+ const loanUid = createMarketUid(chainId, lenderKey, assetAddr);
21908
+ entry.data[loanUid] = {
21909
+ marketUid: loanUid,
21910
+ name: m.assetSymbol,
21911
+ poolId: m.market.toLowerCase(),
21912
+ underlying: assetAddr,
21913
+ asset: currencyFor3(assetAddr, decimals, m.assetSymbol, tokens),
21914
+ totalDeposits,
21915
+ totalDebtStable: 0,
21916
+ totalDebt,
21917
+ totalLiquidity: borrowLiquidity,
21918
+ borrowLiquidity,
21919
+ totalLiquidityUSD: borrowLiquidity * price2,
21920
+ borrowLiquidityUSD: borrowLiquidity * price2,
21921
+ totalDepositsUSD: totalDeposits * price2,
21922
+ totalDebtStableUSD: 0,
21923
+ totalDebtUSD: totalDebt * price2,
21924
+ utilization,
21925
+ depositRate: exactlyFloatingDepositAprPercent(
21926
+ m.floatingBorrowRate,
21927
+ m.floatingDebt,
21928
+ m.floatingBackupBorrowed,
21929
+ m.floatingAssets
21930
+ ),
21931
+ variableBorrowRate: exactlyWadRateToPercent(m.floatingBorrowRate),
21932
+ // Fixed-rate lender convention (Term/Lista): best fixed borrow APR on the
21933
+ // stable slot; the full per-maturity menu is params.market.terms.
21934
+ stableBorrowRate: bestFixedBorrowApr,
21935
+ intrinsicYield: 0,
21936
+ rewards: void 0,
21937
+ decimals,
21938
+ config: {
21939
+ 0: {
21940
+ category: 0,
21941
+ borrowCollateralFactor: selfLtv,
21942
+ collateralFactor: selfLtv,
21943
+ borrowFactor: 1,
21944
+ liquidationPenalty: liqBonus,
21945
+ closeFactor: 1,
21946
+ collateralDisabled: false,
21947
+ debtDisabled: false
21948
+ }
21949
+ },
21950
+ closeFactor: 1,
21951
+ collateralActive: true,
21952
+ borrowingEnabled: true,
21953
+ depositsEnabled: true,
21954
+ hasStable: false,
21955
+ // Exactly DOES have a variable (floating) borrow side.
21956
+ variableBorrowDisabled: false,
21957
+ isActive: true,
21958
+ isFrozen: false
21959
+ };
21960
+ for (const c of markets) {
21961
+ if (c.market.toLowerCase() === m.market.toLowerCase()) continue;
21962
+ const collAddr = c.asset.toLowerCase();
21963
+ const ltv = exactlyPairLtv(c.adjustFactor, m.adjustFactor);
21964
+ const collUid = createMarketUid(chainId, lenderKey, collAddr);
21965
+ entry.data[collUid] = {
21966
+ marketUid: collUid,
21967
+ name: "Collateral " + c.assetSymbol,
21968
+ poolId: c.market.toLowerCase(),
21969
+ underlying: collAddr,
21970
+ asset: currencyFor3(collAddr, c.decimals, c.assetSymbol, tokens),
21971
+ totalDeposits: 0,
21972
+ totalDebtStable: 0,
21973
+ totalDebt: 0,
21974
+ totalLiquidity: 0,
21975
+ borrowLiquidity: 0,
21976
+ totalLiquidityUSD: 0,
21977
+ borrowLiquidityUSD: 0,
21978
+ totalDepositsUSD: 0,
21979
+ totalDebtStableUSD: 0,
21980
+ totalDebtUSD: 0,
21981
+ utilization: 0,
21982
+ depositRate: 0,
21983
+ variableBorrowRate: 0,
21984
+ stableBorrowRate: 0,
21985
+ intrinsicYield: 0,
21986
+ rewards: void 0,
21987
+ decimals: c.decimals,
21988
+ config: {
21989
+ 0: {
21990
+ category: 0,
21991
+ borrowCollateralFactor: ltv,
21992
+ collateralFactor: ltv,
21993
+ borrowFactor: 1,
21994
+ liquidationPenalty: liqBonus,
21995
+ closeFactor: 1,
21996
+ collateralDisabled: false,
21997
+ debtDisabled: true
21998
+ }
21999
+ },
22000
+ closeFactor: 1,
22001
+ collateralActive: true,
22002
+ borrowingEnabled: false,
22003
+ depositsEnabled: true,
22004
+ hasStable: false,
22005
+ isActive: true,
22006
+ isFrozen: false
22007
+ };
22008
+ }
22009
+ entry.params = {
22010
+ market: {
22011
+ lender: lenderKey,
22012
+ name: "Exactly " + m.assetSymbol,
22013
+ loanDecimals: decimals,
22014
+ collateralDecimals: decimals,
22015
+ // Market address doubles as the market id (it IS the lender-key body).
22016
+ id: m.market.toLowerCase(),
22017
+ // Self-pair adjust factor (WAD string); pairwise LTVs live on the
22018
+ // per-collateral entries above.
22019
+ lltv: m.adjustFactor.toString(),
22020
+ oracle: zeroAddress,
22021
+ irm: zeroAddress,
22022
+ collateralAddress: assetAddr,
22023
+ loanAddress: assetAddr,
22024
+ terms: terms.length > 0 ? terms : void 0,
22025
+ // Canonical cross-protocol fixed-term descriptor. Exactly: MENU of
22026
+ // calendar maturities (terms[], termId = maturity), pool-fronted
22027
+ // utilization-curve rates, early repay = DISCOUNT (unassigned-earnings
22028
+ // rebate via previewRepayAtMaturity), late repay = per-second penalty.
22029
+ fixedTerm: {
22030
+ model: "exactly",
22031
+ fees: { latePenaltyApr: penaltyApr },
22032
+ earlyRepay: { kind: "discount" },
22033
+ provider: { kind: "pool", address: m.market.toLowerCase() }
22034
+ },
22035
+ // Exactly-specific extras (consumed by calldata / worker-api resolvers)
22036
+ penaltyRate: m.penaltyRate.toString(),
22037
+ adjustFactor: m.adjustFactor.toString(),
22038
+ maxFuturePools: m.maxFuturePools,
22039
+ usdPrice: m.usdPrice.toString()
22040
+ }
22041
+ };
22042
+ entry.chainId = chainId;
22043
+ out[lenderKey] = entry;
22044
+ }
22045
+ return out;
22046
+ }
22047
+ var READS_PER_BRANCH = 8;
22048
+ var LIQUITY_PUBLIC_READ_ABI = [
22049
+ ...LiquityTroveManagerAbi,
22050
+ ...LiquityActivePoolAbi,
22051
+ ...LiquityStabilityPoolAbi,
22052
+ ...LiquityPriceFeedAbi,
22053
+ ...LiquitySortedTrovesAbi
22054
+ ];
22055
+ async function fetchLiquityMarkets(lender, chainId) {
22056
+ const config = liquityConfigFor(lender, chainId);
22057
+ const branches = liquityBranchesByChain(lender, chainId);
22058
+ if (!config || branches.length === 0) {
22059
+ return { lender, config, branches: [] };
22060
+ }
22061
+ const calls = branches.flatMap((b) => [
22062
+ { address: b.troveManager, name: "getEntireBranchDebt", params: [] },
22063
+ { address: b.troveManager, name: "getEntireBranchColl", params: [] },
22064
+ { address: b.troveManager, name: "shutdownTime", params: [] },
22065
+ { address: b.activePool, name: "aggRecordedDebt", params: [] },
22066
+ { address: b.activePool, name: "aggWeightedDebtSum", params: [] },
22067
+ { address: b.stabilityPool, name: "getTotalBoldDeposits", params: [] },
22068
+ { address: b.priceFeed, name: "lastGoodPrice", params: [] },
22069
+ { address: b.sortedTroves, name: "getSize", params: [] }
22070
+ ]);
22071
+ let results = [];
22072
+ try {
22073
+ results = await multicallRetryUniversal({
22074
+ chain: chainId,
22075
+ calls,
22076
+ abi: LIQUITY_PUBLIC_READ_ABI,
22077
+ allowFailure: true
22078
+ });
22079
+ } catch {
22080
+ return { lender, config, branches: [] };
22081
+ }
22082
+ const val = (i) => {
22083
+ const r = results[i];
22084
+ if (typeof r === "bigint") return r;
22085
+ if (typeof r === "number") return BigInt(r);
22086
+ return null;
22087
+ };
22088
+ const out = branches.map((branch, i) => {
22089
+ const base = i * READS_PER_BRANCH;
22090
+ return {
22091
+ branch,
22092
+ entireDebt: val(base),
22093
+ entireColl: val(base + 1),
22094
+ shutdownTime: val(base + 2),
22095
+ aggRecordedDebt: val(base + 3),
22096
+ aggWeightedDebtSum: val(base + 4),
22097
+ spDeposits: val(base + 5),
22098
+ collPrice: val(base + 6),
22099
+ troveCount: val(base + 7)
22100
+ };
22101
+ });
22102
+ return { lender, config, branches: out };
22103
+ }
22104
+ function liquityLenderKey(lender, collIndex) {
22105
+ return `${lender}_${collIndex}`;
22106
+ }
22107
+ function liquityKeyParts(key) {
22108
+ const base = LIQUITY_FAMILY_LENDERS.find((b) => key.startsWith(b));
22109
+ if (!base) return void 0;
22110
+ const suffix = key.slice(base.length + 1);
22111
+ if (!/^\d+$/.test(suffix)) return void 0;
22112
+ return { lender: base, collIndex: Number(suffix) };
22113
+ }
22114
+ var WAD6 = 1e18;
22115
+ function toHuman2(raw, decimals) {
22116
+ return Number(raw) / 10 ** decimals;
22117
+ }
22118
+ function currencyFor4(address, decimals, symbol, tokens) {
22119
+ const lower = address.toLowerCase();
22120
+ return tokens[lower] ?? { address: lower, symbol, name: symbol, decimals };
22121
+ }
22122
+ function convertLiquityMarketsToResponse(raw, chainId, prices = {}, _additionalYields = {
22123
+ intrinsicYields: {},
22124
+ lenderRewards: {},
22125
+ loaded: true
22126
+ }, tokens = {}) {
22127
+ const out = {};
22128
+ const cfg = raw?.config;
22129
+ if (!cfg) return out;
22130
+ const stableAddr = cfg.boldToken.toLowerCase();
22131
+ const stableDecimals = cfg.boldDecimals ?? 18;
22132
+ const stableToken = tokens[stableAddr];
22133
+ const stableSymbol = stableToken?.symbol ?? "BOLD";
22134
+ const stablePriceKey = toOracleKey(stableToken?.assetGroup) || toGenericPriceKey(stableAddr, chainId);
22135
+ const stablePrice = prices[stablePriceKey] || 1;
22136
+ const spYieldSplit = cfg.spYieldSplit ? Number(cfg.spYieldSplit) / WAD6 : 0.75;
22137
+ for (const b of raw.branches ?? []) {
22138
+ const branch = b.branch;
22139
+ const lenderKey = liquityLenderKey(raw.lender, branch.collIndex);
22140
+ const collAddr = branch.collToken.toLowerCase();
22141
+ const collDecimals = branch.collDecimals;
22142
+ const collToken = tokens[collAddr];
22143
+ const collSymbol = collToken?.symbol ?? branch.name?.split(" / ").pop() ?? "COLL";
22144
+ const marketName = branch.name ?? `${stableSymbol} / ${collSymbol}`;
22145
+ const collPriceKey = toOracleKey(collToken?.assetGroup) || toGenericPriceKey(collAddr, chainId);
22146
+ const collPrice = (b.collPrice !== null ? Number(b.collPrice) / WAD6 : 0) || (prices[collPriceKey] ?? 0);
22147
+ const entireDebt = b.entireDebt !== null ? toHuman2(b.entireDebt, stableDecimals) : 0;
22148
+ const entireColl = b.entireColl !== null ? toHuman2(b.entireColl, collDecimals) : 0;
22149
+ const spDeposits = b.spDeposits !== null ? toHuman2(b.spDeposits, stableDecimals) : 0;
22150
+ const shutdown = b.shutdownTime !== null && b.shutdownTime > 0n;
22151
+ const avgRate = b.aggWeightedDebtSum !== null && b.aggRecordedDebt !== null && b.aggRecordedDebt > 0n ? Number(b.aggWeightedDebtSum / b.aggRecordedDebt) / WAD6 : 0;
22152
+ const annualInterest = b.aggWeightedDebtSum !== null ? Number(b.aggWeightedDebtSum) / WAD6 / 10 ** stableDecimals : 0;
22153
+ const spApr = spDeposits > 0 ? spYieldSplit * annualInterest / spDeposits : 0;
22154
+ const mcr = Number(branch.mcr) / WAD6 || 1.1;
22155
+ const ltv = 1 / mcr;
22156
+ const liqPenalty = branch.liquidationPenaltySP ? Number(branch.liquidationPenaltySP) / WAD6 : 0.05;
22157
+ let borrowLiquidity = Math.max(
22158
+ 0,
22159
+ entireColl * collPrice / mcr / stablePrice - entireDebt
22160
+ );
22161
+ if (branch.debtCap) {
22162
+ const cap = Number(branch.debtCap) / 10 ** stableDecimals;
22163
+ borrowLiquidity = Math.min(borrowLiquidity, Math.max(0, cap - entireDebt));
22164
+ }
22165
+ if (shutdown) borrowLiquidity = 0;
22166
+ const entry = { data: {} };
22167
+ const collUid = createMarketUid(chainId, lenderKey, collAddr);
22168
+ entry.data[collUid] = {
22169
+ marketUid: collUid,
22170
+ name: "Collateral " + collSymbol,
22171
+ poolId: branch.troveManager.toLowerCase(),
22172
+ underlying: collAddr,
22173
+ asset: currencyFor4(collAddr, collDecimals, collSymbol, tokens),
22174
+ totalDeposits: entireColl,
22175
+ totalDebtStable: 0,
22176
+ totalDebt: 0,
22177
+ totalLiquidity: entireColl,
22178
+ borrowLiquidity: 0,
22179
+ totalLiquidityUSD: entireColl * collPrice,
22180
+ borrowLiquidityUSD: 0,
22181
+ totalDepositsUSD: entireColl * collPrice,
22182
+ totalDebtStableUSD: 0,
22183
+ totalDebtUSD: 0,
22184
+ utilization: 0,
22185
+ depositRate: 0,
22186
+ variableBorrowRate: 0,
22187
+ stableBorrowRate: 0,
22188
+ intrinsicYield: 0,
22189
+ rewards: void 0,
22190
+ decimals: collDecimals,
22191
+ config: {
22192
+ 0: {
22193
+ category: 0,
22194
+ borrowCollateralFactor: ltv,
22195
+ collateralFactor: ltv,
22196
+ borrowFactor: 1,
22197
+ liquidationPenalty: liqPenalty,
22198
+ closeFactor: 1,
22199
+ collateralDisabled: false,
22200
+ debtDisabled: true
22201
+ }
22202
+ },
22203
+ closeFactor: 1,
22204
+ collateralActive: true,
22205
+ borrowingEnabled: false,
22206
+ depositsEnabled: !shutdown,
22207
+ hasStable: false,
22208
+ isActive: !shutdown,
22209
+ isFrozen: shutdown
22210
+ };
22211
+ const loanUid = createMarketUid(chainId, lenderKey, stableAddr);
22212
+ entry.data[loanUid] = {
22213
+ marketUid: loanUid,
22214
+ name: stableSymbol,
22215
+ poolId: branch.stabilityPool.toLowerCase(),
22216
+ underlying: stableAddr,
22217
+ asset: currencyFor4(stableAddr, stableDecimals, stableSymbol, tokens),
22218
+ totalDeposits: spDeposits,
22219
+ totalDebtStable: 0,
22220
+ totalDebt: entireDebt,
22221
+ totalLiquidity: borrowLiquidity,
22222
+ borrowLiquidity,
22223
+ totalLiquidityUSD: borrowLiquidity * stablePrice,
22224
+ borrowLiquidityUSD: borrowLiquidity * stablePrice,
22225
+ totalDepositsUSD: spDeposits * stablePrice,
22226
+ totalDebtStableUSD: 0,
22227
+ totalDebtUSD: entireDebt * stablePrice,
22228
+ // Share of branch debt covered by its own Stability Pool.
22229
+ utilization: spDeposits > 0 ? Math.min(entireDebt / spDeposits, 1) : 0,
22230
+ depositRate: spApr * 100,
22231
+ variableBorrowRate: avgRate * 100,
22232
+ stableBorrowRate: 0,
22233
+ intrinsicYield: 0,
22234
+ rewards: void 0,
22235
+ decimals: stableDecimals,
22236
+ config: {
22237
+ 0: {
22238
+ category: 0,
22239
+ borrowCollateralFactor: 0,
22240
+ collateralFactor: 0,
22241
+ borrowFactor: 1,
22242
+ liquidationPenalty: liqPenalty,
22243
+ closeFactor: 1,
22244
+ // SP deposits earn yield but never collateralize.
22245
+ collateralDisabled: true,
22246
+ debtDisabled: shutdown
22247
+ }
22248
+ },
22249
+ closeFactor: 1,
22250
+ collateralActive: false,
22251
+ borrowingEnabled: !shutdown,
22252
+ depositsEnabled: !shutdown,
22253
+ hasStable: false,
22254
+ variableBorrowDisabled: shutdown,
22255
+ isActive: !shutdown,
22256
+ isFrozen: shutdown
22257
+ };
22258
+ entry.params = {
22259
+ market: {
22260
+ lender: lenderKey,
22261
+ name: marketName,
22262
+ loanDecimals: stableDecimals,
22263
+ collateralDecimals: collDecimals,
22264
+ // TroveManager doubles as the branch/market id (marketUid address).
22265
+ id: branch.troveManager.toLowerCase(),
22266
+ lltv: branch.mcr,
22267
+ oracle: branch.priceFeed ?? zeroAddress,
22268
+ irm: zeroAddress,
22269
+ collateralAddress: collAddr,
22270
+ loanAddress: stableAddr,
22271
+ // --- Liquity-family descriptor (all values from metadata/on-chain;
22272
+ // consumed by calldata builders + worker-api resolvers) ---
22273
+ liquity: {
22274
+ collIndex: branch.collIndex,
22275
+ userSetRate: true,
22276
+ redemptionOrdered: true,
22277
+ minDebt: cfg.minDebt,
22278
+ minAnnualInterestRate: cfg.minAnnualInterestRate,
22279
+ maxAnnualInterestRate: cfg.maxAnnualInterestRate,
22280
+ avgBorrowRate: String(Math.round(avgRate * WAD6)),
22281
+ gasCompensation: cfg.gasCompensation,
22282
+ upfrontInterestPeriodSeconds: cfg.upfrontInterestPeriodSeconds,
22283
+ interestRateAdjCooldownSeconds: cfg.interestRateAdjCooldownSeconds,
22284
+ ccr: branch.ccr,
22285
+ mcr: branch.mcr,
22286
+ scr: branch.scr,
22287
+ bcr: branch.bcr,
22288
+ liquidationPenaltySP: branch.liquidationPenaltySP,
22289
+ liquidationPenaltyRedistribution: branch.liquidationPenaltyRedistribution,
22290
+ debtCap: branch.debtCap ?? void 0,
22291
+ collWrapper: branch.collWrapper ?? void 0,
22292
+ shutdown,
22293
+ troveCount: b.troveCount !== null ? Number(b.troveCount) : void 0,
22294
+ addresses: {
22295
+ borrowerOperations: branch.borrowerOperations,
22296
+ troveManager: branch.troveManager,
22297
+ troveNFT: branch.troveNFT,
22298
+ stabilityPool: branch.stabilityPool,
22299
+ sortedTroves: branch.sortedTroves,
22300
+ priceFeed: branch.priceFeed,
22301
+ collSurplusPool: branch.collSurplusPool,
22302
+ collateralRegistry: cfg.collateralRegistry,
22303
+ hintHelpers: cfg.hintHelpers,
22304
+ multiTroveGetter: cfg.multiTroveGetter,
22305
+ wethToken: cfg.wethToken
22306
+ }
22307
+ }
22308
+ }
22309
+ };
22310
+ entry.chainId = chainId;
22311
+ out[lenderKey] = entry;
22312
+ }
22313
+ return out;
22314
+ }
22315
+ var READS_PER_TM = 5;
22316
+ var RIVER_PUBLIC_READ_ABI = [
22317
+ ...RiverTroveManagerAbi,
22318
+ ...RiverStabilityPoolAbi
22319
+ ];
22320
+ async function fetchRiverMarkets(lender, chainId) {
22321
+ const config = riverConfigFor(lender, chainId);
22322
+ const chainData = riverChainData(lender, chainId);
22323
+ const markets = chainData?.markets ?? [];
22324
+ if (!config || markets.length === 0) {
22325
+ return { lender, config, chainData, spDeposits: null, markets: [] };
22326
+ }
22327
+ const calls = [
22328
+ // Single per-chain StabilityPool (diamond facet) — the earn side.
22329
+ { address: config.xapp, name: "getTotalDebtTokenDeposits", params: [] },
22330
+ ...markets.flatMap((m) => [
22331
+ { address: m.troveManager, name: "getEntireSystemDebt", params: [] },
22332
+ { address: m.troveManager, name: "getEntireSystemColl", params: [] },
22333
+ {
22334
+ address: m.troveManager,
22335
+ name: "getBorrowingRateWithDecay",
22336
+ params: []
22337
+ },
22338
+ { address: m.troveManager, name: "fetchPrice", params: [] },
22339
+ { address: m.troveManager, name: "getTroveOwnersCount", params: [] }
22340
+ ])
22341
+ ];
22342
+ let results = [];
22343
+ try {
22344
+ results = await multicallRetryUniversal({
22345
+ chain: chainId,
22346
+ calls,
22347
+ abi: RIVER_PUBLIC_READ_ABI,
22348
+ allowFailure: true
22349
+ });
22350
+ } catch {
22351
+ return { lender, config, chainData, spDeposits: null, markets: [] };
22352
+ }
22353
+ const val = (i) => {
22354
+ const r = results[i];
22355
+ if (typeof r === "bigint") return r;
22356
+ if (typeof r === "number") return BigInt(r);
22357
+ return null;
22358
+ };
22359
+ const out = markets.map((market, i) => {
22360
+ const base = 1 + i * READS_PER_TM;
22361
+ return {
22362
+ market,
22363
+ entireDebt: val(base),
22364
+ entireColl: val(base + 1),
22365
+ mintFeeRate: val(base + 2),
22366
+ price: val(base + 3),
22367
+ troveCount: val(base + 4)
22368
+ };
22369
+ });
22370
+ return { lender, config, chainData, spDeposits: val(0), markets: out };
22371
+ }
22372
+
22373
+ // src/lending/public-data/river/convertPublic.ts
22374
+ function riverLenderKey(lender, index) {
22375
+ return `${lender}_${index}`;
22376
+ }
22377
+ function riverKeyParts(key) {
22378
+ if (!key.startsWith("RIVER_")) return void 0;
22379
+ const suffix = key.slice("RIVER_".length);
22380
+ if (!/^\d+$/.test(suffix)) return void 0;
22381
+ return { lender: "RIVER", index: Number(suffix) };
22382
+ }
22383
+ var WAD7 = 1e18;
22384
+ function toHuman3(raw, decimals) {
22385
+ return Number(raw) / 10 ** decimals;
22386
+ }
22387
+ function currencyFor5(address, decimals, symbol, tokens) {
22388
+ const lower = address.toLowerCase();
22389
+ return tokens[lower] ?? { address: lower, symbol, name: symbol, decimals };
22390
+ }
22391
+ function convertRiverMarketsToResponse(raw, chainId, prices = {}, _additionalYields = {
22392
+ intrinsicYields: {},
22393
+ lenderRewards: {},
22394
+ loaded: true
22395
+ }, tokens = {}) {
22396
+ const out = {};
22397
+ const cfg = raw?.config;
22398
+ const chainData = raw?.chainData;
22399
+ if (!cfg || !chainData) return out;
22400
+ const debtAddr = cfg.debtToken.toLowerCase();
22401
+ const debtDecimals = cfg.debtDecimals ?? 18;
22402
+ const debtToken = tokens[debtAddr];
22403
+ const debtSymbol = debtToken?.symbol ?? "satUSD";
22404
+ const debtPriceKey = toOracleKey(debtToken?.assetGroup) || toGenericPriceKey(debtAddr, chainId);
22405
+ const debtPrice = prices[debtPriceKey] || 1;
22406
+ const spDeposits = raw.spDeposits !== null ? toHuman3(raw.spDeposits, debtDecimals) : 0;
22407
+ for (const m of raw.markets ?? []) {
22408
+ const market = m.market;
22409
+ const lenderKey = riverLenderKey(raw.lender, market.index);
22410
+ const collAddr = market.collToken.toLowerCase();
22411
+ const collDecimals = market.collDecimals;
22412
+ const collToken = tokens[collAddr];
22413
+ const collSymbol = collToken?.symbol ?? market.name?.split(" / ").pop() ?? "COLL";
22414
+ const marketName = market.name ?? `${debtSymbol} / ${collSymbol}`;
22415
+ const collPriceKey = toOracleKey(collToken?.assetGroup) || toGenericPriceKey(collAddr, chainId);
22416
+ const collPrice = (m.price !== null ? Number(m.price) / WAD7 : 0) || (prices[collPriceKey] ?? 0);
22417
+ const entireDebt = m.entireDebt !== null ? toHuman3(m.entireDebt, debtDecimals) : 0;
22418
+ const entireColl = m.entireColl !== null ? toHuman3(m.entireColl, collDecimals) : 0;
22419
+ const halted = !!market.paused || !!market.sunsetting;
22420
+ const mcr = Number(market.mcr) / WAD7 || 1.1;
22421
+ const ltv = 1 / mcr;
22422
+ const liqPenalty = Math.max(mcr - 1, 0);
22423
+ let borrowLiquidity = Math.max(
22424
+ 0,
22425
+ entireColl * collPrice / mcr / debtPrice - entireDebt
22426
+ );
22427
+ if (market.maxSystemDebt) {
22428
+ const cap = Number(market.maxSystemDebt) / 10 ** debtDecimals;
22429
+ borrowLiquidity = Math.min(borrowLiquidity, Math.max(0, cap - entireDebt));
22430
+ }
22431
+ if (halted) borrowLiquidity = 0;
22432
+ const spHere = market.index === 0 ? spDeposits : 0;
22433
+ const entry = { data: {} };
22434
+ const collUid = createMarketUid(chainId, lenderKey, collAddr);
22435
+ entry.data[collUid] = {
22436
+ marketUid: collUid,
22437
+ name: "Collateral " + collSymbol,
22438
+ poolId: market.troveManager.toLowerCase(),
22439
+ underlying: collAddr,
22440
+ asset: currencyFor5(collAddr, collDecimals, collSymbol, tokens),
22441
+ totalDeposits: entireColl,
22442
+ totalDebtStable: 0,
22443
+ totalDebt: 0,
22444
+ totalLiquidity: entireColl,
22445
+ borrowLiquidity: 0,
22446
+ totalLiquidityUSD: entireColl * collPrice,
22447
+ borrowLiquidityUSD: 0,
22448
+ totalDepositsUSD: entireColl * collPrice,
22449
+ totalDebtStableUSD: 0,
22450
+ totalDebtUSD: 0,
22451
+ utilization: 0,
22452
+ depositRate: 0,
22453
+ variableBorrowRate: 0,
22454
+ stableBorrowRate: 0,
22455
+ intrinsicYield: 0,
22456
+ rewards: void 0,
22457
+ decimals: collDecimals,
22458
+ config: {
22459
+ 0: {
22460
+ category: 0,
22461
+ borrowCollateralFactor: ltv,
22462
+ collateralFactor: ltv,
22463
+ borrowFactor: 1,
22464
+ liquidationPenalty: liqPenalty,
22465
+ closeFactor: 1,
22466
+ collateralDisabled: false,
22467
+ debtDisabled: true
22468
+ }
22469
+ },
22470
+ closeFactor: 1,
22471
+ collateralActive: true,
22472
+ borrowingEnabled: false,
22473
+ depositsEnabled: !halted,
22474
+ hasStable: false,
22475
+ isActive: !halted,
22476
+ isFrozen: halted
22477
+ };
22478
+ const loanUid = createMarketUid(chainId, lenderKey, debtAddr);
22479
+ entry.data[loanUid] = {
22480
+ marketUid: loanUid,
22481
+ name: debtSymbol,
22482
+ poolId: cfg.xapp.toLowerCase(),
22483
+ underlying: debtAddr,
22484
+ asset: currencyFor5(debtAddr, debtDecimals, debtSymbol, tokens),
22485
+ totalDeposits: spHere,
22486
+ totalDebtStable: 0,
22487
+ totalDebt: entireDebt,
22488
+ totalLiquidity: borrowLiquidity,
22489
+ borrowLiquidity,
22490
+ totalLiquidityUSD: borrowLiquidity * debtPrice,
22491
+ borrowLiquidityUSD: borrowLiquidity * debtPrice,
22492
+ totalDepositsUSD: spHere * debtPrice,
22493
+ totalDebtStableUSD: 0,
22494
+ totalDebtUSD: entireDebt * debtPrice,
22495
+ utilization: 0,
22496
+ // No interest yield while the protocol rate is 0% — SP earns
22497
+ // liquidation gains + OSHI emissions only (not modeled here).
22498
+ depositRate: 0,
22499
+ variableBorrowRate: market.interestRate ? Number(market.interestRate) : 0,
22500
+ stableBorrowRate: 0,
22501
+ intrinsicYield: 0,
22502
+ rewards: void 0,
22503
+ decimals: debtDecimals,
22504
+ config: {
22505
+ 0: {
22506
+ category: 0,
22507
+ borrowCollateralFactor: 0,
22508
+ collateralFactor: 0,
22509
+ borrowFactor: 1,
22510
+ liquidationPenalty: liqPenalty,
22511
+ closeFactor: 1,
22512
+ // SP deposits earn but never collateralize.
22513
+ collateralDisabled: true,
22514
+ debtDisabled: halted
22515
+ }
22516
+ },
22517
+ closeFactor: 1,
22518
+ collateralActive: false,
22519
+ borrowingEnabled: !halted,
22520
+ depositsEnabled: !halted,
22521
+ hasStable: false,
22522
+ variableBorrowDisabled: halted,
22523
+ isActive: !halted,
22524
+ isFrozen: halted
22525
+ };
22526
+ entry.params = {
22527
+ market: {
22528
+ lender: lenderKey,
22529
+ name: marketName,
22530
+ loanDecimals: debtDecimals,
22531
+ collateralDecimals: collDecimals,
22532
+ // TroveManager doubles as the market id (marketUid address).
22533
+ id: market.troveManager.toLowerCase(),
22534
+ lltv: market.mcr,
22535
+ oracle: zeroAddress,
22536
+ irm: zeroAddress,
22537
+ collateralAddress: collAddr,
22538
+ loanAddress: debtAddr,
22539
+ // --- River descriptor (verbatim metadata + live snapshot; consumed
22540
+ // by calldata builders + worker-api resolvers + yield-tracer) ---
22541
+ river: {
22542
+ index: market.index,
22543
+ minNetDebt: chainData.minNetDebt,
22544
+ debtGasCompensation: market.debtGasCompensation,
22545
+ mintFeeFloor: market.borrowingFeeFloor,
22546
+ mintFeeCap: market.maxBorrowingFee,
22547
+ /** Current decayed one-off mint-fee rate (WAD string). */
22548
+ mintFeeRate: m.mintFeeRate !== null ? m.mintFeeRate.toString() : void 0,
22549
+ interestRate: market.interestRate,
22550
+ maxSystemDebt: market.maxSystemDebt,
22551
+ paused: !!market.paused,
22552
+ sunsetting: !!market.sunsetting,
22553
+ troveCount: m.troveCount !== null ? Number(m.troveCount) : void 0,
22554
+ addresses: {
22555
+ xapp: cfg.xapp,
22556
+ troveManager: market.troveManager,
22557
+ sortedTroves: market.sortedTroves,
22558
+ debtToken: cfg.debtToken,
22559
+ periphery: cfg.periphery ?? void 0
22560
+ }
22561
+ }
22562
+ }
22563
+ };
22564
+ entry.chainId = chainId;
22565
+ out[lenderKey] = entry;
22566
+ }
22567
+ return out;
22568
+ }
21327
22569
 
21328
22570
  // src/lending/public-data/silo-v2/fetchPublic.ts
21329
22571
  var BASE_URL2 = "https://api-v3.silo.finance";
@@ -21921,12 +23163,16 @@ function convertDolomiteSubgraphMarkets(raw, chainId, prices, additionalYields,
21921
23163
  }
21922
23164
  return { data: result, chainId };
21923
23165
  }
21924
- var warn2 = (...args) => {
23166
+ var warn3 = (...args) => {
21925
23167
  };
21926
23168
  async function getLenderDataFromApi(lender, chainId, prices, additionalYields, includeUnlisted = false) {
21927
23169
  if (isMorphoType(lender))
21928
23170
  return await fetchMorphoMarkets(chainId, includeUnlisted);
21929
23171
  if (isMidnight(lender)) return await fetchMidnightMarkets(chainId);
23172
+ if (isTerm(lender)) return await fetchTermMarkets(chainId);
23173
+ if (isExactly(lender)) return await fetchExactlyMarkets(chainId);
23174
+ if (isLiquityFamily(lender)) return await fetchLiquityMarkets(lender, chainId);
23175
+ if (isRiver(lender)) return await fetchRiverMarkets(lender, chainId);
21930
23176
  return {};
21931
23177
  }
21932
23178
  function convertLenderDataFromApi(lender, chainId, data, prices, additionalYields, list = {}) {
@@ -21940,6 +23186,38 @@ function convertLenderDataFromApi(lender, chainId, data, prices, additionalYield
21940
23186
  additionalYields,
21941
23187
  list
21942
23188
  );
23189
+ if (isTerm(lender))
23190
+ return convertTermMarketsToResponse(
23191
+ data,
23192
+ chainId,
23193
+ prices,
23194
+ additionalYields,
23195
+ list
23196
+ );
23197
+ if (isExactly(lender))
23198
+ return convertExactlyMarketsToResponse(
23199
+ data,
23200
+ chainId,
23201
+ prices,
23202
+ additionalYields,
23203
+ list
23204
+ );
23205
+ if (isLiquityFamily(lender))
23206
+ return convertLiquityMarketsToResponse(
23207
+ data,
23208
+ chainId,
23209
+ prices,
23210
+ additionalYields,
23211
+ list
23212
+ );
23213
+ if (isRiver(lender))
23214
+ return convertRiverMarketsToResponse(
23215
+ data,
23216
+ chainId,
23217
+ prices,
23218
+ additionalYields,
23219
+ list
23220
+ );
21943
23221
  return {};
21944
23222
  }
21945
23223
  var getLenderPublicDataViaApi = async (chainId, lenders, prices, additionalYields, tokenList = async () => {
@@ -21980,7 +23258,7 @@ var getLenderPublicDataViaApi = async (chainId, lenders, prices, additionalYield
21980
23258
  const listResult = settled[0];
21981
23259
  const list = listResult.status === "fulfilled" ? listResult.value : {};
21982
23260
  if (listResult.status === "rejected") {
21983
- warn2(
23261
+ warn3(
21984
23262
  `[lending] tokenList fetch failed on chain ${chainId}:`,
21985
23263
  listResult.reason
21986
23264
  );
@@ -22002,13 +23280,13 @@ var getLenderPublicDataViaApi = async (chainId, lenders, prices, additionalYield
22002
23280
  if (converted[lk]) lenderData[lk] = converted[lk];
22003
23281
  }
22004
23282
  } catch (e) {
22005
- warn2(
23283
+ warn3(
22006
23284
  `[lending] Silo v2 API convert failed on chain ${chainId}:`,
22007
23285
  e?.message ?? e
22008
23286
  );
22009
23287
  }
22010
23288
  } else {
22011
- warn2(
23289
+ warn3(
22012
23290
  `[lending] Silo v2 API fetch failed on chain ${chainId}:`,
22013
23291
  siloV2Result.reason?.message ?? siloV2Result.reason
22014
23292
  );
@@ -22030,13 +23308,13 @@ var getLenderPublicDataViaApi = async (chainId, lenders, prices, additionalYield
22030
23308
  if (converted[lk]) lenderData[lk] = converted[lk];
22031
23309
  }
22032
23310
  } catch (e) {
22033
- warn2(
23311
+ warn3(
22034
23312
  `[lending] Silo v3 API convert failed on chain ${chainId}:`,
22035
23313
  e?.message ?? e
22036
23314
  );
22037
23315
  }
22038
23316
  } else {
22039
- warn2(
23317
+ warn3(
22040
23318
  `[lending] Silo v3 API fetch failed on chain ${chainId}:`,
22041
23319
  siloV3Result.reason?.message ?? siloV3Result.reason
22042
23320
  );
@@ -22046,7 +23324,7 @@ var getLenderPublicDataViaApi = async (chainId, lenders, prices, additionalYield
22046
23324
  try {
22047
23325
  const result = settled[i + 3];
22048
23326
  if (result.status === "rejected") {
22049
- warn2(
23327
+ warn3(
22050
23328
  `[lending] API fetch failed for ${otherLenders[i]} on chain ${chainId}:`,
22051
23329
  result.reason?.message ?? result.reason
22052
23330
  );
@@ -22090,13 +23368,13 @@ var getLenderPublicDataViaApi = async (chainId, lenders, prices, additionalYield
22090
23368
  );
22091
23369
  for (const lk of dolomiteLenders) lenderData[lk] = converted;
22092
23370
  } catch (e) {
22093
- warn2(
23371
+ warn3(
22094
23372
  `[lending] Dolomite subgraph convert failed on chain ${chainId}:`,
22095
23373
  e?.message ?? e
22096
23374
  );
22097
23375
  }
22098
23376
  } else if (dolomiteResult.status === "rejected") {
22099
- warn2(
23377
+ warn3(
22100
23378
  `[lending] Dolomite subgraph fetch failed on chain ${chainId}:`,
22101
23379
  dolomiteResult.reason?.message ?? dolomiteResult.reason
22102
23380
  );
@@ -22104,7 +23382,7 @@ var getLenderPublicDataViaApi = async (chainId, lenders, prices, additionalYield
22104
23382
  }
22105
23383
  return lenderData;
22106
23384
  };
22107
- var warn3 = (...args) => {
23385
+ var warn4 = (...args) => {
22108
23386
  };
22109
23387
  function lenderApiOnly(lender, chainId) {
22110
23388
  if (lender === Lender.MORPHO_BLUE) {
@@ -22124,6 +23402,10 @@ function lenderApiOnly(lender, chainId) {
22124
23402
  return true;
22125
23403
  }
22126
23404
  if (isMidnight(lender)) return true;
23405
+ if (isTerm(lender)) return true;
23406
+ if (isExactly(lender)) return true;
23407
+ if (isLiquityFamily(lender)) return true;
23408
+ if (isRiver(lender)) return true;
22127
23409
  return false;
22128
23410
  }
22129
23411
  function lenderApiWithOnChainFallback(lender, chainId) {
@@ -22151,7 +23433,7 @@ var getLenderPublicDataAll = async (chainId, lenders, prices, additionalYields,
22151
23433
  includeUnlistedMorphoMarkets
22152
23434
  );
22153
23435
  } catch (e) {
22154
- warn3(
23436
+ warn4(
22155
23437
  `[lending] API fetch failed for chain ${chainId}:`,
22156
23438
  e?.message ?? e
22157
23439
  );
@@ -22174,7 +23456,7 @@ var getLenderPublicDataAll = async (chainId, lenders, prices, additionalYields,
22174
23456
  tokenList
22175
23457
  );
22176
23458
  } catch (e) {
22177
- warn3(
23459
+ warn4(
22178
23460
  `[lending] on-chain fetch failed for chain ${chainId}:`,
22179
23461
  e?.message ?? e
22180
23462
  );
@@ -22859,6 +24141,179 @@ var buildMidnightUserCall = (chainId, _lender, account) => {
22859
24141
  }
22860
24142
  return calls;
22861
24143
  };
24144
+ var termMarketCallCount = (collateralCount) => 3 + collateralCount;
24145
+ var buildTermUserCall = (chainId, _lender, account) => {
24146
+ const markets = termMarketsByChain(chainId);
24147
+ if (markets.length === 0) return [];
24148
+ const calls = [];
24149
+ for (const market of markets) {
24150
+ calls.push({ address: market.repoToken, name: "balanceOf", params: [account] });
24151
+ calls.push({ address: market.repoToken, name: "redemptionValue", params: [] });
24152
+ calls.push({
24153
+ address: market.servicer,
24154
+ name: "getBorrowerRepurchaseObligation",
24155
+ params: [account]
24156
+ });
24157
+ for (const c of market.collateralParams) {
24158
+ calls.push({
24159
+ address: market.collateralManager,
24160
+ name: "getCollateralBalance",
24161
+ params: [account, c.token]
24162
+ });
24163
+ }
24164
+ }
24165
+ return calls;
24166
+ };
24167
+ var buildExactlyUserCall = (chainId, _lender, account) => {
24168
+ const cfg = exactlyConfig()?.[chainId];
24169
+ if (!cfg?.previewer) return [];
24170
+ return [{ address: cfg.previewer, name: "exactly", params: [account] }];
24171
+ };
24172
+ var OWNER_INDEX_PROBE_COUNT = 8;
24173
+ var CACHE_TTL_MS = 5 * 6e4;
24174
+ var discoveryCache = /* @__PURE__ */ new Map();
24175
+ var cacheKey = (chainId, lender, account) => `${chainId}:${lender}:${account.toLowerCase()}`;
24176
+ var getCachedLiquityTroves = (chainId, lender, account) => {
24177
+ const hit = discoveryCache.get(cacheKey(chainId, lender, account));
24178
+ if (!hit || Date.now() - hit.at > CACHE_TTL_MS) return void 0;
24179
+ return hit;
24180
+ };
24181
+ var ADDRESS_ADDRESS_UINT = [
24182
+ { type: "address" },
24183
+ { type: "address" },
24184
+ { type: "uint256" }
24185
+ ];
24186
+ var ADDRESS_UINT = [{ type: "address" }, { type: "uint256" }];
24187
+ function liquityCandidateTroveIds(account, zappers) {
24188
+ const user = account;
24189
+ const ids = [];
24190
+ for (let i = 0; i < OWNER_INDEX_PROBE_COUNT; i++) {
24191
+ ids.push(
24192
+ BigInt(
24193
+ keccak256(
24194
+ encodeAbiParameters(ADDRESS_ADDRESS_UINT, [
24195
+ user,
24196
+ user,
24197
+ BigInt(i)
24198
+ ])
24199
+ )
24200
+ ).toString()
24201
+ );
24202
+ for (const z of zappers) {
24203
+ const saltedIndex = BigInt(
24204
+ keccak256(encodeAbiParameters(ADDRESS_UINT, [user, BigInt(i)]))
24205
+ );
24206
+ ids.push(
24207
+ BigInt(
24208
+ keccak256(
24209
+ encodeAbiParameters(ADDRESS_ADDRESS_UINT, [
24210
+ z,
24211
+ user,
24212
+ saltedIndex
24213
+ ])
24214
+ )
24215
+ ).toString()
24216
+ );
24217
+ }
24218
+ }
24219
+ return ids;
24220
+ }
24221
+ var liquityBranchCallCount = (branch, troveCount) => troveCount * 2 + 4 + (branch.collSurplusPool ? 1 : 0);
24222
+ var buildLiquityUserCall = async (chainId, lender, account) => {
24223
+ const cfg = liquityConfigFor(lender, chainId);
24224
+ const branches = liquityBranchesByChain(lender, chainId);
24225
+ if (!cfg || branches.length === 0) return [];
24226
+ const candidates = liquityCandidateTroveIds(account, cfg.zappers ?? []);
24227
+ let statuses = [];
24228
+ try {
24229
+ statuses = await multicallRetryUniversal({
24230
+ chain: chainId,
24231
+ calls: branches.flatMap(
24232
+ (b) => candidates.map((id) => ({
24233
+ address: b.troveManager,
24234
+ name: "getTroveStatus",
24235
+ params: [id]
24236
+ }))
24237
+ ),
24238
+ abi: LiquityTroveManagerAbi,
24239
+ allowFailure: true
24240
+ });
24241
+ } catch {
24242
+ return [];
24243
+ }
24244
+ const perBranch = branches.map(
24245
+ (_3, bi) => candidates.map((id, ci) => {
24246
+ const r = statuses[bi * candidates.length + ci];
24247
+ const status = typeof r === "bigint" || typeof r === "number" ? Number(r) : 0;
24248
+ if (status !== 1 && status !== 4) return void 0;
24249
+ return { troveId: id, zombie: status === 4 };
24250
+ }).filter((t) => !!t)
24251
+ );
24252
+ discoveryCache.set(cacheKey(chainId, lender, account), {
24253
+ perBranch,
24254
+ at: Date.now()
24255
+ });
24256
+ const calls = [];
24257
+ branches.forEach((b, bi) => {
24258
+ for (const t of perBranch[bi]) {
24259
+ calls.push({
24260
+ address: b.troveManager,
24261
+ name: "getLatestTroveData",
24262
+ params: [t.troveId]
24263
+ });
24264
+ calls.push({ address: b.troveNFT, name: "ownerOf", params: [t.troveId] });
24265
+ }
24266
+ calls.push({
24267
+ address: b.stabilityPool,
24268
+ name: "getCompoundedBoldDeposit",
24269
+ params: [account]
24270
+ });
24271
+ calls.push({
24272
+ address: b.stabilityPool,
24273
+ name: "getDepositorYieldGainWithPending",
24274
+ params: [account]
24275
+ });
24276
+ calls.push({
24277
+ address: b.stabilityPool,
24278
+ name: "getDepositorCollGain",
24279
+ params: [account]
24280
+ });
24281
+ calls.push({
24282
+ address: b.stabilityPool,
24283
+ name: "stashedColl",
24284
+ params: [account]
24285
+ });
24286
+ if (b.collSurplusPool) {
24287
+ calls.push({
24288
+ address: b.collSurplusPool,
24289
+ name: "getCollateral",
24290
+ params: [account]
24291
+ });
24292
+ }
24293
+ });
24294
+ return calls;
24295
+ };
24296
+ var RIVER_CALLS_PER_MARKET = 3;
24297
+ var buildRiverUserCall = (chainId, lender, account) => {
24298
+ const cfg = riverConfigFor(lender, chainId);
24299
+ const markets = riverChainData(lender, chainId)?.markets ?? [];
24300
+ if (!cfg || markets.length === 0) return [];
24301
+ const calls = markets.flatMap((m) => [
24302
+ {
24303
+ address: m.troveManager,
24304
+ name: "getEntireDebtAndColl",
24305
+ params: [account]
24306
+ },
24307
+ { address: m.troveManager, name: "getTroveStatus", params: [account] },
24308
+ { address: m.troveManager, name: "surplusBalances", params: [account] }
24309
+ ]);
24310
+ calls.push({
24311
+ address: cfg.xapp,
24312
+ name: "getCompoundedDebtDeposit",
24313
+ params: [account]
24314
+ });
24315
+ return calls;
24316
+ };
22862
24317
 
22863
24318
  // src/lending/user-data/fetch-balances/prepare.ts
22864
24319
  async function buildUserCall(chainId, lender, account, params, getClient) {
@@ -22875,6 +24330,11 @@ async function buildUserCall(chainId, lender, account, params, getClient) {
22875
24330
  getClient
22876
24331
  );
22877
24332
  if (isMidnight(lender)) return buildMidnightUserCall(chainId, lender, account);
24333
+ if (isTerm(lender)) return buildTermUserCall(chainId, lender, account);
24334
+ if (isExactly(lender)) return buildExactlyUserCall(chainId, lender, account);
24335
+ if (isLiquityFamily(lender))
24336
+ return buildLiquityUserCall(chainId, lender, account);
24337
+ if (isRiver(lender)) return buildRiverUserCall(chainId, lender, account);
22878
24338
  if (isCompoundV3Type(lender))
22879
24339
  return buildCompoundV3UserCall(chainId, lender, account);
22880
24340
  if (isEulerType(lender))
@@ -22897,10 +24357,14 @@ function organizeUserQueries(queries) {
22897
24357
  const morphos = queries.filter((q) => isMorphoType(q.lender));
22898
24358
  const gearbox = queries.filter((q) => isGearboxV3(q.lender));
22899
24359
  const midnight = queries.filter((q) => isMidnight(q.lender));
22900
- if (morphos.length === 0 && gearbox.length === 0 && midnight.length === 0)
24360
+ const term = queries.filter((q) => isTerm(q.lender));
24361
+ const exactly = queries.filter((q) => isExactly(q.lender));
24362
+ const liquity = queries.filter((q) => isLiquityFamily(q.lender));
24363
+ const river = queries.filter((q) => isRiver(q.lender));
24364
+ if (morphos.length === 0 && gearbox.length === 0 && midnight.length === 0 && term.length === 0 && exactly.length === 0 && liquity.length === 0 && river.length === 0)
22901
24365
  return queries;
22902
24366
  const others = queries.filter(
22903
- (q) => !isMorphoType(q.lender) && !isGearboxV3(q.lender) && !isMidnight(q.lender)
24367
+ (q) => !isMorphoType(q.lender) && !isGearboxV3(q.lender) && !isMidnight(q.lender) && !isTerm(q.lender) && !isExactly(q.lender) && !isLiquityFamily(q.lender) && !isRiver(q.lender)
22904
24368
  );
22905
24369
  const morphoBlue = morphos.filter((q) => q.lender.startsWith("MORPHO_BLUE"));
22906
24370
  const moolah = morphos.filter((q) => q.lender.startsWith("LISTA_DAO"));
@@ -22937,6 +24401,42 @@ function organizeUserQueries(queries) {
22937
24401
  assets: void 0
22938
24402
  });
22939
24403
  }
24404
+ if (term.length > 0) {
24405
+ result.push({
24406
+ lender: Lender.TERM_FINANCE,
24407
+ account: term[0].account,
24408
+ params: term.map((p) => p.lender),
24409
+ assets: void 0
24410
+ });
24411
+ }
24412
+ if (exactly.length > 0) {
24413
+ result.push({
24414
+ lender: Lender.EXACTLY,
24415
+ account: exactly[0].account,
24416
+ params: exactly.map((p) => p.lender),
24417
+ assets: void 0
24418
+ });
24419
+ }
24420
+ if (river.length > 0) {
24421
+ result.push({
24422
+ lender: Lender.RIVER,
24423
+ account: river[0].account,
24424
+ params: river.map((p) => p.lender),
24425
+ assets: void 0
24426
+ });
24427
+ }
24428
+ if (liquity.length > 0) {
24429
+ for (const base of LIQUITY_FAMILY_LENDERS) {
24430
+ const members = liquity.filter((q) => q.lender.startsWith(base));
24431
+ if (members.length === 0) continue;
24432
+ result.push({
24433
+ lender: base,
24434
+ account: members[0].account,
24435
+ params: members.map((p) => p.lender),
24436
+ assets: void 0
24437
+ });
24438
+ }
24439
+ }
22940
24440
  return result;
22941
24441
  }
22942
24442
 
@@ -25257,6 +26757,593 @@ var getMidnightUserDataConverter = (_lender, chainId, account, meta) => {
25257
26757
  totalCalls
25258
26758
  ];
25259
26759
  };
26760
+ var WAD8 = 1000000000000000000n;
26761
+ function toBigInt11(v) {
26762
+ if (v === void 0 || v === null || v === "0x") return 0n;
26763
+ if (typeof v === "bigint") return v;
26764
+ try {
26765
+ return BigInt(v);
26766
+ } catch {
26767
+ return 0n;
26768
+ }
26769
+ }
26770
+ var getTermUserDataConverter = (_lender, chainId, account, meta) => {
26771
+ const markets = termMarketsByChain(chainId);
26772
+ const totalCalls = markets.reduce(
26773
+ (sum, m) => sum + termMarketCallCount(m.collateralParams.length),
26774
+ 0
26775
+ );
26776
+ return [
26777
+ (data) => {
26778
+ if (!data || data.length < totalCalls) return void 0;
26779
+ const out = {};
26780
+ let cursor = 0;
26781
+ for (const market of markets) {
26782
+ const balanceResult = data[cursor];
26783
+ const redemptionResult = data[cursor + 1];
26784
+ const obligationResult = data[cursor + 2];
26785
+ const collateralResults = market.collateralParams.map(
26786
+ (_c, i) => data[cursor + 3 + i]
26787
+ );
26788
+ cursor += termMarketCallCount(market.collateralParams.length);
26789
+ const lenderKey = termLenderKey(market.termRepoId);
26790
+ const metaMap = meta?.[lenderKey];
26791
+ if (!metaMap) continue;
26792
+ const loanAddr = market.purchaseToken.toLowerCase();
26793
+ const loanUid = createMarketUid(chainId, lenderKey, loanAddr);
26794
+ const loanMeta = metaMap[loanUid];
26795
+ const loanDisplayPrice = loanMeta ? getDisplayPrice(loanMeta) : 0;
26796
+ const loanOraclePrice = loanMeta ? getOraclePrice(loanMeta) : 0;
26797
+ const loanPriceHist = loanMeta?.price?.priceUsd24h ?? loanDisplayPrice;
26798
+ const debtUnits = toBigInt11(obligationResult);
26799
+ const debtStr = parseRawAmount(debtUnits.toString(), market.loanDecimals);
26800
+ const debtNum = Number(debtStr);
26801
+ const repoBalance = toBigInt11(balanceResult);
26802
+ const redemptionValue = toBigInt11(redemptionResult) || toBigInt11(market.redemptionValue) || WAD8;
26803
+ const lentUnits = repoBalance * redemptionValue / WAD8;
26804
+ const depositsStr = parseRawAmount(lentUnits.toString(), market.loanDecimals);
26805
+ const depositsNum = Number(depositsStr);
26806
+ const posData = {};
26807
+ let anyBalance = debtUnits > 0n || lentUnits > 0n;
26808
+ let depositsUSD24h = depositsNum * loanPriceHist;
26809
+ posData[loanUid] = {
26810
+ marketUid: loanUid,
26811
+ underlying: loanAddr,
26812
+ deposits: depositsStr,
26813
+ debt: debtStr,
26814
+ debtStable: "0",
26815
+ depositsUSD: depositsNum * loanDisplayPrice,
26816
+ debtUSD: debtNum * loanDisplayPrice,
26817
+ debtStableUSD: 0,
26818
+ depositsUSDOracle: depositsNum * loanOraclePrice,
26819
+ debtUSDOracle: debtNum * loanOraclePrice,
26820
+ debtStableUSDOracle: 0,
26821
+ stableBorrowRate: "0",
26822
+ collateralEnabled: false,
26823
+ claimableRewards: 0
26824
+ };
26825
+ market.collateralParams.forEach((c, i) => {
26826
+ const collAmt = toBigInt11(collateralResults[i]);
26827
+ if (collAmt === 0n) return;
26828
+ anyBalance = true;
26829
+ const collAddr = c.token.toLowerCase();
26830
+ const collUid = createMarketUid(chainId, lenderKey, collAddr);
26831
+ const collMeta = metaMap[collUid];
26832
+ const collDec = collMeta?.asset?.decimals ?? c.decimals;
26833
+ const collDisplayPrice = collMeta ? getDisplayPrice(collMeta) : 0;
26834
+ const collOraclePrice = collMeta ? getOraclePrice(collMeta) : 0;
26835
+ const collPriceHist = collMeta?.price?.priceUsd24h ?? collDisplayPrice;
26836
+ const collDepositsStr = parseRawAmount(collAmt.toString(), collDec);
26837
+ const collDepositsNum = Number(collDepositsStr);
26838
+ depositsUSD24h += collDepositsNum * collPriceHist;
26839
+ posData[collUid] = {
26840
+ marketUid: collUid,
26841
+ underlying: collAddr,
26842
+ deposits: collDepositsStr,
26843
+ debt: "0",
26844
+ debtStable: "0",
26845
+ depositsUSD: collDepositsNum * collDisplayPrice,
26846
+ debtUSD: 0,
26847
+ debtStableUSD: 0,
26848
+ depositsUSDOracle: collDepositsNum * collOraclePrice,
26849
+ debtUSDOracle: 0,
26850
+ debtStableUSDOracle: 0,
26851
+ stableBorrowRate: "0",
26852
+ collateralEnabled: true,
26853
+ claimableRewards: 0
26854
+ };
26855
+ });
26856
+ if (!anyBalance) continue;
26857
+ const userData = createMultiAccountTypeUserState(
26858
+ {
26859
+ chainId,
26860
+ account,
26861
+ lendingPositions: { "0": posData },
26862
+ modes: { "0": 0 }
26863
+ },
26864
+ metaMap,
26865
+ {
26866
+ "0": {
26867
+ totalDeposits24h: depositsUSD24h,
26868
+ totalDebt24h: debtNum * loanPriceHist
26869
+ }
26870
+ }
26871
+ );
26872
+ if (userData && userData.data.length > 0) out[lenderKey] = userData;
26873
+ }
26874
+ return Object.keys(out).length > 0 ? out : void 0;
26875
+ },
26876
+ totalCalls
26877
+ ];
26878
+ };
26879
+ var nowSec4 = () => Math.floor(Date.now() / 1e3);
26880
+ function sumPreview(positions) {
26881
+ return positions.reduce((acc, p) => acc + p.previewValue, 0n);
26882
+ }
26883
+ function toDetail(positions, kind, now) {
26884
+ return positions.map((p) => ({
26885
+ maturity: Number(p.maturity),
26886
+ kind,
26887
+ principal: p.position.principal.toString(),
26888
+ fee: p.position.fee.toString(),
26889
+ previewValue: p.previewValue.toString(),
26890
+ overdue: Number(p.maturity) < now
26891
+ }));
26892
+ }
26893
+ var getExactlyUserDataConverter = (_lender, chainId, account, meta) => {
26894
+ const expected = exactlyConfig()?.[chainId]?.previewer ? 1 : 0;
26895
+ return [
26896
+ (data) => {
26897
+ if (!data || data.length < expected || expected === 0) return void 0;
26898
+ const res = data[0];
26899
+ if (!res || res === "0x" || !Array.isArray(res)) return void 0;
26900
+ const markets = res;
26901
+ const now = nowSec4();
26902
+ const out = {};
26903
+ for (const m of markets) {
26904
+ const lenderKey = exactlyLenderKey(m.market);
26905
+ const metaMap = meta?.[lenderKey];
26906
+ if (!metaMap) continue;
26907
+ const assetAddr = m.asset.toLowerCase();
26908
+ const loanUid = createMarketUid(chainId, lenderKey, assetAddr);
26909
+ const loanMeta = metaMap[loanUid];
26910
+ const decimals = loanMeta?.asset?.decimals ?? m.decimals;
26911
+ const loanDisplayPrice = loanMeta ? getDisplayPrice(loanMeta) : 0;
26912
+ const loanOraclePrice = loanMeta ? getOraclePrice(loanMeta) : 0;
26913
+ const loanPriceHist = loanMeta?.price?.priceUsd24h ?? loanDisplayPrice;
26914
+ const depositUnits = m.floatingDepositAssets + sumPreview(m.fixedDepositPositions);
26915
+ const debtUnits = m.floatingBorrowAssets + sumPreview(m.fixedBorrowPositions);
26916
+ if (depositUnits === 0n && debtUnits === 0n) continue;
26917
+ const depositsStr = parseRawAmount(depositUnits.toString(), decimals);
26918
+ const depositsNum = Number(depositsStr);
26919
+ const debtStr = parseRawAmount(debtUnits.toString(), decimals);
26920
+ const debtNum = Number(debtStr);
26921
+ const fixedPositions = [
26922
+ ...toDetail(m.fixedDepositPositions, "deposit", now),
26923
+ ...toDetail(m.fixedBorrowPositions, "borrow", now)
26924
+ ];
26925
+ const posData = {};
26926
+ let depositsUSD24h = depositsNum * loanPriceHist;
26927
+ posData[loanUid] = {
26928
+ marketUid: loanUid,
26929
+ underlying: assetAddr,
26930
+ deposits: depositsStr,
26931
+ debt: debtStr,
26932
+ debtStable: "0",
26933
+ depositsUSD: depositsNum * loanDisplayPrice,
26934
+ debtUSD: debtNum * loanDisplayPrice,
26935
+ debtStableUSD: 0,
26936
+ depositsUSDOracle: depositsNum * loanOraclePrice,
26937
+ debtUSDOracle: debtNum * loanOraclePrice,
26938
+ debtStableUSDOracle: 0,
26939
+ stableBorrowRate: "0",
26940
+ collateralEnabled: m.isCollateral,
26941
+ claimableRewards: 0,
26942
+ // Per-maturity fixed-position detail (survives to the output — the
26943
+ // multi-account state builder mutates posData in place).
26944
+ fixedPositions: fixedPositions.length > 0 ? fixedPositions : void 0
26945
+ };
26946
+ if (debtUnits > 0n) {
26947
+ for (const c of markets) {
26948
+ if (c.market.toLowerCase() === m.market.toLowerCase()) continue;
26949
+ if (!c.isCollateral) continue;
26950
+ const cDeposit = c.floatingDepositAssets + sumPreview(c.fixedDepositPositions);
26951
+ if (cDeposit === 0n) continue;
26952
+ const collAddr = c.asset.toLowerCase();
26953
+ const collUid = createMarketUid(chainId, lenderKey, collAddr);
26954
+ const collMeta = metaMap[collUid];
26955
+ const collDec = collMeta?.asset?.decimals ?? c.decimals;
26956
+ const collDisplayPrice = collMeta ? getDisplayPrice(collMeta) : 0;
26957
+ const collOraclePrice = collMeta ? getOraclePrice(collMeta) : 0;
26958
+ const collPriceHist = collMeta?.price?.priceUsd24h ?? collDisplayPrice;
26959
+ const collStr = parseRawAmount(cDeposit.toString(), collDec);
26960
+ const collNum = Number(collStr);
26961
+ depositsUSD24h += collNum * collPriceHist;
26962
+ posData[collUid] = {
26963
+ marketUid: collUid,
26964
+ underlying: collAddr,
26965
+ deposits: collStr,
26966
+ debt: "0",
26967
+ debtStable: "0",
26968
+ depositsUSD: collNum * collDisplayPrice,
26969
+ debtUSD: 0,
26970
+ debtStableUSD: 0,
26971
+ depositsUSDOracle: collNum * collOraclePrice,
26972
+ debtUSDOracle: 0,
26973
+ debtStableUSDOracle: 0,
26974
+ stableBorrowRate: "0",
26975
+ collateralEnabled: true,
26976
+ claimableRewards: 0
26977
+ };
26978
+ }
26979
+ }
26980
+ const userData = createMultiAccountTypeUserState(
26981
+ {
26982
+ chainId,
26983
+ account,
26984
+ lendingPositions: { "0": posData },
26985
+ modes: { "0": 0 }
26986
+ },
26987
+ metaMap,
26988
+ {
26989
+ "0": {
26990
+ totalDeposits24h: depositsUSD24h,
26991
+ totalDebt24h: debtNum * loanPriceHist
26992
+ }
26993
+ }
26994
+ );
26995
+ if (userData && userData.data.length > 0) out[lenderKey] = userData;
26996
+ }
26997
+ return Object.keys(out).length > 0 ? out : void 0;
26998
+ },
26999
+ expected
27000
+ ];
27001
+ };
27002
+ var big = (v) => {
27003
+ try {
27004
+ if (typeof v === "bigint") return v;
27005
+ if (typeof v === "number" || typeof v === "string") return BigInt(v);
27006
+ } catch {
27007
+ }
27008
+ return 0n;
27009
+ };
27010
+ var field6 = (res, name, idx) => big(res?.[name] ?? res?.[idx]);
27011
+ var getLiquityUserDataConverter = (lender, chainId, account, meta) => {
27012
+ const cfg = liquityConfigFor(lender, chainId);
27013
+ const branches = liquityBranchesByChain(lender, chainId);
27014
+ const discovery = getCachedLiquityTroves(chainId, lender, account);
27015
+ const expected = cfg && discovery ? branches.reduce(
27016
+ (acc, b, i) => acc + liquityBranchCallCount(b, discovery.perBranch[i]?.length ?? 0),
27017
+ 0
27018
+ ) : 0;
27019
+ return [
27020
+ (data) => {
27021
+ if (!cfg || !discovery || expected === 0) return void 0;
27022
+ if (!data || data.length < expected) return void 0;
27023
+ const stableAddr = cfg.boldToken.toLowerCase();
27024
+ const stableDecimals = cfg.boldDecimals ?? 18;
27025
+ const accountLower = account.toLowerCase();
27026
+ const out = {};
27027
+ let cursor = 0;
27028
+ branches.forEach((branch, bi) => {
27029
+ const troves = discovery.perBranch[bi] ?? [];
27030
+ const callCount = liquityBranchCallCount(branch, troves.length);
27031
+ const slice = data.slice(cursor, cursor + callCount);
27032
+ cursor += callCount;
27033
+ const lenderKey = liquityLenderKey(lender, branch.collIndex);
27034
+ const metaMap = meta?.[lenderKey];
27035
+ if (!metaMap) return;
27036
+ const collAddr = branch.collToken.toLowerCase();
27037
+ const collUid = createMarketUid(chainId, lenderKey, collAddr);
27038
+ const loanUid = createMarketUid(chainId, lenderKey, stableAddr);
27039
+ const collMeta = metaMap[collUid];
27040
+ const loanMeta = metaMap[loanUid];
27041
+ const collDecimals = collMeta?.asset?.decimals ?? branch.collDecimals;
27042
+ const collDisplay = collMeta ? getDisplayPrice(collMeta) : 0;
27043
+ const collOracle = collMeta ? getOraclePrice(collMeta) : 0;
27044
+ const collHist = collMeta?.price?.priceUsd24h ?? collDisplay;
27045
+ const loanDisplay = loanMeta ? getDisplayPrice(loanMeta) : 0;
27046
+ const loanOracle = loanMeta ? getOraclePrice(loanMeta) : 0;
27047
+ const loanHist = loanMeta?.price?.priceUsd24h ?? loanDisplay;
27048
+ const lendingPositions = {};
27049
+ const modes = {};
27050
+ const hist = {};
27051
+ troves.forEach((t, ti) => {
27052
+ const troveData = slice[ti * 2];
27053
+ const ownerRaw = slice[ti * 2 + 1];
27054
+ const owner = typeof ownerRaw === "string" ? ownerRaw.toLowerCase() : void 0;
27055
+ if (owner !== accountLower) return;
27056
+ if (!troveData || troveData === "0x") return;
27057
+ const entireDebt = field6(troveData, "entireDebt", 0);
27058
+ const entireColl = field6(troveData, "entireColl", 1);
27059
+ if (entireDebt === 0n && entireColl === 0n) return;
27060
+ const troveInfo = {
27061
+ troveId: t.troveId,
27062
+ collIndex: branch.collIndex,
27063
+ annualInterestRate: field6(
27064
+ troveData,
27065
+ "annualInterestRate",
27066
+ 6
27067
+ ).toString(),
27068
+ lastInterestRateAdjTime: Number(
27069
+ field6(troveData, "lastInterestRateAdjTime", 9)
27070
+ ),
27071
+ zombie: t.zombie,
27072
+ redistCollGain: field6(troveData, "redistCollGain", 3).toString(),
27073
+ redistBoldDebtGain: field6(
27074
+ troveData,
27075
+ "redistBoldDebtGain",
27076
+ 2
27077
+ ).toString(),
27078
+ accruedInterest: field6(troveData, "accruedInterest", 4).toString(),
27079
+ accruedBatchManagementFee: field6(
27080
+ troveData,
27081
+ "accruedBatchManagementFee",
27082
+ 8
27083
+ ).toString()
27084
+ };
27085
+ const collStr = parseRawAmount(entireColl.toString(), collDecimals);
27086
+ const collNum = Number(collStr);
27087
+ const debtStr = parseRawAmount(entireDebt.toString(), stableDecimals);
27088
+ const debtNum = Number(debtStr);
27089
+ lendingPositions[t.troveId] = {
27090
+ [collUid]: {
27091
+ marketUid: collUid,
27092
+ underlying: collAddr,
27093
+ deposits: collStr,
27094
+ debt: "0",
27095
+ debtStable: "0",
27096
+ depositsUSD: collNum * collDisplay,
27097
+ debtUSD: 0,
27098
+ debtStableUSD: 0,
27099
+ depositsUSDOracle: collNum * collOracle,
27100
+ debtUSDOracle: 0,
27101
+ debtStableUSDOracle: 0,
27102
+ stableBorrowRate: "0",
27103
+ collateralEnabled: true,
27104
+ claimableRewards: 0
27105
+ },
27106
+ [loanUid]: {
27107
+ marketUid: loanUid,
27108
+ underlying: stableAddr,
27109
+ deposits: "0",
27110
+ debt: debtStr,
27111
+ debtStable: "0",
27112
+ depositsUSD: 0,
27113
+ debtUSD: debtNum * loanDisplay,
27114
+ debtStableUSD: 0,
27115
+ depositsUSDOracle: 0,
27116
+ debtUSDOracle: debtNum * loanOracle,
27117
+ debtStableUSDOracle: 0,
27118
+ stableBorrowRate: "0",
27119
+ collateralEnabled: false,
27120
+ claimableRewards: 0,
27121
+ troveInfo
27122
+ }
27123
+ };
27124
+ modes[t.troveId] = 0;
27125
+ hist[t.troveId] = {
27126
+ totalDeposits24h: collNum * collHist,
27127
+ totalDebt24h: debtNum * loanHist
27128
+ };
27129
+ });
27130
+ const spBase = troves.length * 2;
27131
+ const spDeposit = big(slice[spBase]);
27132
+ const spYield = big(slice[spBase + 1]);
27133
+ const spCollGain = big(slice[spBase + 2]);
27134
+ const spStashed = big(slice[spBase + 3]);
27135
+ const collSurplus = branch.collSurplusPool ? big(slice[spBase + 4]) : 0n;
27136
+ const spStable = spDeposit + spYield;
27137
+ const spColl = spCollGain + spStashed + collSurplus;
27138
+ if (spStable > 0n || spColl > 0n) {
27139
+ const spInfo = {
27140
+ deposit: spDeposit.toString(),
27141
+ yieldGain: spYield.toString(),
27142
+ collGain: spCollGain.toString(),
27143
+ stashedColl: spStashed.toString(),
27144
+ collSurplus: collSurplus.toString()
27145
+ };
27146
+ const spStableStr = parseRawAmount(
27147
+ spStable.toString(),
27148
+ stableDecimals
27149
+ );
27150
+ const spStableNum = Number(spStableStr);
27151
+ const spCollStr = parseRawAmount(spColl.toString(), collDecimals);
27152
+ const spCollNum = Number(spCollStr);
27153
+ lendingPositions["sp"] = {
27154
+ [loanUid]: {
27155
+ marketUid: loanUid,
27156
+ underlying: stableAddr,
27157
+ deposits: spStableStr,
27158
+ debt: "0",
27159
+ debtStable: "0",
27160
+ depositsUSD: spStableNum * loanDisplay,
27161
+ debtUSD: 0,
27162
+ debtStableUSD: 0,
27163
+ depositsUSDOracle: spStableNum * loanOracle,
27164
+ debtUSDOracle: 0,
27165
+ debtStableUSDOracle: 0,
27166
+ stableBorrowRate: "0",
27167
+ collateralEnabled: false,
27168
+ claimableRewards: 0,
27169
+ spInfo
27170
+ },
27171
+ ...spColl > 0n ? {
27172
+ [collUid]: {
27173
+ marketUid: collUid,
27174
+ underlying: collAddr,
27175
+ deposits: spCollStr,
27176
+ debt: "0",
27177
+ debtStable: "0",
27178
+ depositsUSD: spCollNum * collDisplay,
27179
+ debtUSD: 0,
27180
+ debtStableUSD: 0,
27181
+ depositsUSDOracle: spCollNum * collOracle,
27182
+ debtUSDOracle: 0,
27183
+ debtStableUSDOracle: 0,
27184
+ stableBorrowRate: "0",
27185
+ collateralEnabled: false,
27186
+ claimableRewards: 0
27187
+ }
27188
+ } : {}
27189
+ };
27190
+ modes["sp"] = 0;
27191
+ hist["sp"] = {
27192
+ totalDeposits24h: spStableNum * loanHist + spCollNum * collHist,
27193
+ totalDebt24h: 0
27194
+ };
27195
+ }
27196
+ if (Object.keys(lendingPositions).length === 0) return;
27197
+ const userData = createMultiAccountTypeUserState(
27198
+ {
27199
+ chainId,
27200
+ account,
27201
+ lendingPositions,
27202
+ modes
27203
+ },
27204
+ metaMap,
27205
+ hist
27206
+ );
27207
+ if (userData && userData.data.length > 0) out[lenderKey] = userData;
27208
+ });
27209
+ return Object.keys(out).length > 0 ? out : void 0;
27210
+ },
27211
+ expected
27212
+ ];
27213
+ };
27214
+ var big2 = (v) => {
27215
+ try {
27216
+ if (typeof v === "bigint") return v;
27217
+ if (typeof v === "number" || typeof v === "string") return BigInt(v);
27218
+ } catch {
27219
+ }
27220
+ return 0n;
27221
+ };
27222
+ var field7 = (res, name, idx) => big2(res?.[name] ?? res?.[idx]);
27223
+ var getRiverUserDataConverter = (lender, chainId, account, meta) => {
27224
+ const cfg = riverConfigFor(lender, chainId);
27225
+ const markets = riverChainData(lender, chainId)?.markets ?? [];
27226
+ const expected = cfg && markets.length > 0 ? markets.length * RIVER_CALLS_PER_MARKET + 1 : 0;
27227
+ return [
27228
+ (data) => {
27229
+ if (!cfg || expected === 0) return void 0;
27230
+ if (!data || data.length < expected) return void 0;
27231
+ const debtAddr = cfg.debtToken.toLowerCase();
27232
+ const debtDecimals = cfg.debtDecimals ?? 18;
27233
+ const out = {};
27234
+ const spDeposit = big2(data[markets.length * RIVER_CALLS_PER_MARKET]);
27235
+ markets.forEach((market, i) => {
27236
+ const base = i * RIVER_CALLS_PER_MARKET;
27237
+ const entire = data[base];
27238
+ const status = Number(big2(data[base + 1]));
27239
+ const surplus = big2(data[base + 2]);
27240
+ const lenderKey = riverLenderKey(lender, market.index);
27241
+ const metaMap = meta?.[lenderKey];
27242
+ if (!metaMap) return;
27243
+ const collAddr = market.collToken.toLowerCase();
27244
+ const collUid = createMarketUid(chainId, lenderKey, collAddr);
27245
+ const loanUid = createMarketUid(chainId, lenderKey, debtAddr);
27246
+ const collMeta = metaMap[collUid];
27247
+ const loanMeta = metaMap[loanUid];
27248
+ const collDecimals = collMeta?.asset?.decimals ?? market.collDecimals;
27249
+ const collDisplay = collMeta ? getDisplayPrice(collMeta) : 0;
27250
+ const collOracle = collMeta ? getOraclePrice(collMeta) : 0;
27251
+ const collHist = collMeta?.price?.priceUsd24h ?? collDisplay;
27252
+ const loanDisplay = loanMeta ? getDisplayPrice(loanMeta) : 0;
27253
+ const loanOracle = loanMeta ? getOraclePrice(loanMeta) : 0;
27254
+ const loanHist = loanMeta?.price?.priceUsd24h ?? loanDisplay;
27255
+ const lendingPositions = {};
27256
+ const modes = {};
27257
+ const hist = {};
27258
+ const debt = field7(entire, "debt", 0);
27259
+ const coll = field7(entire, "coll", 1);
27260
+ if (status === 1 && (debt > 0n || coll > 0n)) {
27261
+ const riverInfo = {
27262
+ index: market.index,
27263
+ collateralSurplus: surplus.toString()
27264
+ };
27265
+ const collStr = parseRawAmount(coll.toString(), collDecimals);
27266
+ const collNum = Number(collStr);
27267
+ const debtStr = parseRawAmount(debt.toString(), debtDecimals);
27268
+ const debtNum = Number(debtStr);
27269
+ lendingPositions["0"] = {
27270
+ [collUid]: {
27271
+ marketUid: collUid,
27272
+ underlying: collAddr,
27273
+ deposits: collStr,
27274
+ debt: "0",
27275
+ debtStable: "0",
27276
+ depositsUSD: collNum * collDisplay,
27277
+ debtUSD: 0,
27278
+ debtStableUSD: 0,
27279
+ depositsUSDOracle: collNum * collOracle,
27280
+ debtUSDOracle: 0,
27281
+ debtStableUSDOracle: 0,
27282
+ stableBorrowRate: "0",
27283
+ collateralEnabled: true,
27284
+ claimableRewards: 0
27285
+ },
27286
+ [loanUid]: {
27287
+ marketUid: loanUid,
27288
+ underlying: debtAddr,
27289
+ deposits: "0",
27290
+ debt: debtStr,
27291
+ debtStable: "0",
27292
+ depositsUSD: 0,
27293
+ debtUSD: debtNum * loanDisplay,
27294
+ debtStableUSD: 0,
27295
+ depositsUSDOracle: 0,
27296
+ debtUSDOracle: debtNum * loanOracle,
27297
+ debtStableUSDOracle: 0,
27298
+ stableBorrowRate: "0",
27299
+ collateralEnabled: false,
27300
+ claimableRewards: 0,
27301
+ riverInfo
27302
+ }
27303
+ };
27304
+ modes["0"] = 0;
27305
+ hist["0"] = {
27306
+ totalDeposits24h: collNum * collHist,
27307
+ totalDebt24h: debtNum * loanHist
27308
+ };
27309
+ }
27310
+ if (market.index === 0 && spDeposit > 0n) {
27311
+ const spStr = parseRawAmount(spDeposit.toString(), debtDecimals);
27312
+ const spNum = Number(spStr);
27313
+ lendingPositions["sp"] = {
27314
+ [loanUid]: {
27315
+ marketUid: loanUid,
27316
+ underlying: debtAddr,
27317
+ deposits: spStr,
27318
+ debt: "0",
27319
+ debtStable: "0",
27320
+ depositsUSD: spNum * loanDisplay,
27321
+ debtUSD: 0,
27322
+ debtStableUSD: 0,
27323
+ depositsUSDOracle: spNum * loanOracle,
27324
+ debtUSDOracle: 0,
27325
+ debtStableUSDOracle: 0,
27326
+ stableBorrowRate: "0",
27327
+ collateralEnabled: false,
27328
+ claimableRewards: 0
27329
+ }
27330
+ };
27331
+ modes["sp"] = 0;
27332
+ hist["sp"] = { totalDeposits24h: spNum * loanHist, totalDebt24h: 0 };
27333
+ }
27334
+ if (Object.keys(lendingPositions).length === 0) return;
27335
+ const userData = createMultiAccountTypeUserState(
27336
+ { chainId, account, lendingPositions, modes },
27337
+ metaMap,
27338
+ hist
27339
+ );
27340
+ if (userData && userData.data.length > 0) out[lenderKey] = userData;
27341
+ });
27342
+ return Object.keys(out).length > 0 ? out : void 0;
27343
+ },
27344
+ expected
27345
+ ];
27346
+ };
25260
27347
 
25261
27348
  // src/lending/user-data/fetch-balances/parse.ts
25262
27349
  function getUserDataConverter(lender, chainId, account, params, meta) {
@@ -25280,6 +27367,14 @@ function getUserDataConverter(lender, chainId, account, params, meta) {
25280
27367
  );
25281
27368
  if (isMidnight(lender))
25282
27369
  return getMidnightUserDataConverter(lender, chainId, account, meta);
27370
+ if (isTerm(lender))
27371
+ return getTermUserDataConverter(lender, chainId, account, meta);
27372
+ if (isExactly(lender))
27373
+ return getExactlyUserDataConverter(lender, chainId, account, meta);
27374
+ if (isLiquityFamily(lender))
27375
+ return getLiquityUserDataConverter(lender, chainId, account, meta);
27376
+ if (isRiver(lender))
27377
+ return getRiverUserDataConverter(lender, chainId, account, meta);
25283
27378
  if (isCompoundV3Type(lender))
25284
27379
  return getCompoundV3UserDataConverter(
25285
27380
  lender,
@@ -25453,9 +27548,9 @@ var MULTICALL_ADDRESS = {
25453
27548
  // src/utils/multicall.ts
25454
27549
  var { isArray } = lodash;
25455
27550
  var maxRetries = 3;
25456
- var multicallViemAbiArray = async (chainId, abi, calls, getEvmClient17, retry = true, providerId = 0, retries = maxRetries, allowFailure = true, batchSize = MULTICALL_DEFAULT_BATCH_SIZE, logs = false) => {
27551
+ var multicallViemAbiArray = async (chainId, abi, calls, getEvmClient18, retry = true, providerId = 0, retries = maxRetries, allowFailure = true, batchSize = MULTICALL_DEFAULT_BATCH_SIZE, logs = false) => {
25457
27552
  try {
25458
- const provider = getEvmClient17(chainId, providerId);
27553
+ const provider = getEvmClient18(chainId, providerId);
25459
27554
  const abiIsArray = isArray(abi[0]);
25460
27555
  const returnData = await provider.multicall({
25461
27556
  allowFailure,
@@ -25481,7 +27576,7 @@ var multicallViemAbiArray = async (chainId, abi, calls, getEvmClient17, retry =
25481
27576
  chainId,
25482
27577
  abi,
25483
27578
  calls,
25484
- getEvmClient17,
27579
+ getEvmClient18,
25485
27580
  retry,
25486
27581
  providerId,
25487
27582
  retries,
@@ -25491,13 +27586,13 @@ var multicallViemAbiArray = async (chainId, abi, calls, getEvmClient17, retry =
25491
27586
  );
25492
27587
  }
25493
27588
  };
25494
- var multicallShardedAbiArray = async (chainId, abi, calls, getEvmClient17, poolSize, retries = maxRetries, allowFailure = true, batchSize = MULTICALL_DEFAULT_BATCH_SIZE, logs = false) => {
27589
+ var multicallShardedAbiArray = async (chainId, abi, calls, getEvmClient18, poolSize, retries = maxRetries, allowFailure = true, batchSize = MULTICALL_DEFAULT_BATCH_SIZE, logs = false) => {
25495
27590
  if (poolSize <= 1) {
25496
27591
  return multicallViemAbiArray(
25497
27592
  chainId,
25498
27593
  abi,
25499
27594
  calls,
25500
- getEvmClient17,
27595
+ getEvmClient18,
25501
27596
  true,
25502
27597
  0,
25503
27598
  retries,
@@ -25520,7 +27615,7 @@ var multicallShardedAbiArray = async (chainId, abi, calls, getEvmClient17, poolS
25520
27615
  const results = new Array(contracts.length);
25521
27616
  const runBatch = async (batch, rpcId, attemptsLeft, size) => {
25522
27617
  try {
25523
- const provider = getEvmClient17(chainId, rpcId);
27618
+ const provider = getEvmClient18(chainId, rpcId);
25524
27619
  const returnData = await provider.multicall({
25525
27620
  allowFailure,
25526
27621
  batchSize: size,
@@ -30035,6 +32130,22 @@ var getAbi2 = (lender) => {
30035
32130
  return [...CometAbi, ...CometExtAbi, ...CometRewardsAbi];
30036
32131
  if (isMorphoType(lender)) return [...MorphoBlueAbi, ...MorphoLensAbi];
30037
32132
  if (isMidnight(lender)) return [...MidnightAbi];
32133
+ if (isTerm(lender))
32134
+ return [
32135
+ ...TermRepoTokenAbi,
32136
+ ...TermRepoServicerAbi,
32137
+ ...TermRepoCollateralManagerAbi
32138
+ ];
32139
+ if (isExactly(lender)) return [...ExactlyPreviewerAbi];
32140
+ if (isLiquityFamily(lender))
32141
+ return [
32142
+ ...LiquityTroveManagerAbi,
32143
+ ...LiquityStabilityPoolAbi,
32144
+ ...LiquityTroveNFTAbi,
32145
+ ...LiquityCollSurplusPoolAbi
32146
+ ];
32147
+ if (isRiver(lender))
32148
+ return [...RiverTroveManagerAbi, ...RiverStabilityPoolAbi];
30038
32149
  if (isInit(lender)) return InitLensAbi;
30039
32150
  if (isEulerType(lender)) return accountLensAbi;
30040
32151
  if (isCompoundV2Type(lender))
@@ -30148,7 +32259,7 @@ function unflattenLenderData(pools) {
30148
32259
  }
30149
32260
  return result;
30150
32261
  }
30151
- var getLenderUserDataResult = async (chainId, queriesRaw, getEvmClient17, allowFailure = true, batchSize = MULTICALL_DEFAULT_BATCH_SIZE, retries = 3, logs = false, concurrency = 1) => {
32262
+ var getLenderUserDataResult = async (chainId, queriesRaw, getEvmClient18, allowFailure = true, batchSize = MULTICALL_DEFAULT_BATCH_SIZE, retries = 3, logs = false, concurrency = 1) => {
30152
32263
  const queries = organizeUserQueries(queriesRaw);
30153
32264
  const builtCalls = await Promise.all(
30154
32265
  queries.map(async (query3) => {
@@ -30158,7 +32269,7 @@ var getLenderUserDataResult = async (chainId, queriesRaw, getEvmClient17, allowF
30158
32269
  query3.lender,
30159
32270
  query3.account,
30160
32271
  query3.params,
30161
- getEvmClient17
32272
+ getEvmClient18
30162
32273
  );
30163
32274
  return callData.map((call) => ({ call, abi: call.abi ?? abi }));
30164
32275
  })
@@ -30168,7 +32279,7 @@ var getLenderUserDataResult = async (chainId, queriesRaw, getEvmClient17, allowF
30168
32279
  chainId,
30169
32280
  calls.map((call) => call.abi),
30170
32281
  calls.map((call) => call.call),
30171
- getEvmClient17,
32282
+ getEvmClient18,
30172
32283
  concurrency,
30173
32284
  retries,
30174
32285
  allowFailure,
@@ -30588,7 +32699,7 @@ var MORPHO_API_CHAIN_IDS = {
30588
32699
  [Chain.UNICHAIN]: 130
30589
32700
  };
30590
32701
  var FETCH_TIMEOUT_MS = 3e3;
30591
- var CACHE_TTL_MS = 2e3;
32702
+ var CACHE_TTL_MS2 = 2e3;
30592
32703
  var buildSubgraphQuery = (account) => `
30593
32704
  {
30594
32705
  account(id: "${account.toLowerCase()}") {
@@ -30643,11 +32754,11 @@ async function fetchJsonWithProxyFallback(url, body, proxyConfig) {
30643
32754
  }
30644
32755
  var inflight = /* @__PURE__ */ new Map();
30645
32756
  var resolved = /* @__PURE__ */ new Map();
30646
- function cacheKey(chainId, account) {
32757
+ function cacheKey2(chainId, account) {
30647
32758
  return `${chainId}:${account.toLowerCase()}`;
30648
32759
  }
30649
32760
  async function dedupedFetch(chainId, account, loader) {
30650
- const key = cacheKey(chainId, account);
32761
+ const key = cacheKey2(chainId, account);
30651
32762
  const now = Date.now();
30652
32763
  const cached = resolved.get(key);
30653
32764
  if (cached && cached.expiresAt > now) {
@@ -30656,7 +32767,7 @@ async function dedupedFetch(chainId, account, loader) {
30656
32767
  const existing = inflight.get(key);
30657
32768
  if (existing) return existing;
30658
32769
  const promise = loader().then((value) => {
30659
- resolved.set(key, { value, expiresAt: Date.now() + CACHE_TTL_MS });
32770
+ resolved.set(key, { value, expiresAt: Date.now() + CACHE_TTL_MS2 });
30660
32771
  return value;
30661
32772
  }).finally(() => {
30662
32773
  inflight.delete(key);
@@ -30788,8 +32899,8 @@ function calculateOverallNetApr(totalDepositsUSD, totalDebtUSD, avgDepositApr, a
30788
32899
  return (totalDepositsUSD * avgDepositApr - totalDebtUSD * avgBorrowApr) / Math.abs(totalNetWorth) * (totalNetWorth > 0 ? 1 : -1);
30789
32900
  }
30790
32901
  function calculateWeightedAprs(items) {
30791
- const wa = (field6, weightField) => calculateWeightedAverage(
30792
- items.filter((i) => i[weightField] !== 0).map((i) => ({ value: i[field6], weight: Math.abs(i[weightField]) }))
32902
+ const wa = (field8, weightField) => calculateWeightedAverage(
32903
+ items.filter((i) => i[weightField] !== 0).map((i) => ({ value: i[field8], weight: Math.abs(i[weightField]) }))
30793
32904
  );
30794
32905
  return {
30795
32906
  apr: wa("apr", "nav"),
@@ -32059,8 +34170,8 @@ var rswethFetcher = {
32059
34170
  };
32060
34171
 
32061
34172
  // src/yields/intrinsic/annualizeRate.ts
32062
- var YEAR_SECONDS = 365 * 24 * 60 * 60;
32063
- var annualizeGrowthPercent = (growth, elapsedSeconds) => growth * (YEAR_SECONDS / elapsedSeconds) * 100;
34173
+ var YEAR_SECONDS2 = 365 * 24 * 60 * 60;
34174
+ var annualizeGrowthPercent = (growth, elapsedSeconds) => growth * (YEAR_SECONDS2 / elapsedSeconds) * 100;
32064
34175
  var annualizeRateDeltaPercent = (rateNow, rateThen, elapsedSeconds) => {
32065
34176
  const growth = typeof rateNow === "bigint" && typeof rateThen === "bigint" ? Number(rateNow - rateThen) / Number(rateThen) : Number(rateNow) / Number(rateThen) - 1;
32066
34177
  return annualizeGrowthPercent(growth, elapsedSeconds);
@@ -32528,8 +34639,8 @@ var TIMEOUT_MS = 8e3;
32528
34639
  var slisBnbFetcher = {
32529
34640
  label: "SLISBNB",
32530
34641
  fetch: async () => {
32531
- const nowSec2 = Math.floor(Date.now() / 1e3);
32532
- const url = `${HISTORY_URL}?name=slisBNBRate&cycle=1&startTime=${nowSec2 - LOOKBACK_SECONDS}&endTime=${nowSec2}`;
34642
+ const nowSec5 = Math.floor(Date.now() / 1e3);
34643
+ const url = `${HISTORY_URL}?name=slisBNBRate&cycle=1&startTime=${nowSec5 - LOOKBACK_SECONDS}&endTime=${nowSec5}`;
32533
34644
  const controller = new AbortController();
32534
34645
  const timer = setTimeout(() => controller.abort(), TIMEOUT_MS);
32535
34646
  try {
@@ -38811,10 +40922,10 @@ function createAssetArrayPerChain() {
38811
40922
  return assetsPerChain;
38812
40923
  }
38813
40924
  var RELEVANT_LENDING_ASSETS = () => createAssetArrayPerChain();
38814
- function createSimpleArrayPerChain(fork, field6 = void 0) {
40925
+ function createSimpleArrayPerChain(fork, field8 = void 0) {
38815
40926
  let pools = {};
38816
40927
  Object.entries(fork ?? {}).forEach(([b2, data]) => {
38817
- Object.entries(field6 ? data[field6] : data).forEach(
40928
+ Object.entries(field8 ? data[field8] : data).forEach(
38818
40929
  ([chainId, address]) => {
38819
40930
  if (!pools[chainId]) pools[chainId] = [];
38820
40931
  pools[chainId] = uniq2([...pools[chainId], { address, pool: b2 }]);
@@ -41023,9 +43134,9 @@ query EvkByAssets($assets: [Bytes!]!) {
41023
43134
  `;
41024
43135
  var ZERO = 0n;
41025
43136
  var RAY_TO_PERCENT3 = 1e25;
41026
- function readAddress2(field6) {
41027
- if (!field6) return void 0;
41028
- return field6.toLowerCase();
43137
+ function readAddress2(field8) {
43138
+ if (!field8) return void 0;
43139
+ return field8.toLowerCase();
41029
43140
  }
41030
43141
  function parseVaultFee(v) {
41031
43142
  if (v.performanceFee == null) return 0;
@@ -41459,7 +43570,7 @@ var Multicall3BalanceAbi = [
41459
43570
  outputs: [{ type: "uint256" }]
41460
43571
  }
41461
43572
  ];
41462
- var toBigInt11 = (v) => {
43573
+ var toBigInt12 = (v) => {
41463
43574
  if (v === void 0 || v === null) return void 0;
41464
43575
  if (typeof v === "bigint") return v;
41465
43576
  if (typeof v === "number") return BigInt(v);
@@ -41483,12 +43594,12 @@ var readerBeetsStS = (entry) => ({
41483
43594
  ],
41484
43595
  abis: [TotalSupplyAbi, BeetsStSAbi, BeetsStSAbi],
41485
43596
  parse: ([supply, rate, pool]) => {
41486
- const totalSupply = toBigInt11(supply);
41487
- const exchangeRate = toBigInt11(rate);
43597
+ const totalSupply = toBigInt12(supply);
43598
+ const exchangeRate = toBigInt12(rate);
41488
43599
  if (totalSupply === void 0 || exchangeRate === void 0) {
41489
43600
  return void 0;
41490
43601
  }
41491
- const liquidity = toBigInt11(pool);
43602
+ const liquidity = toBigInt12(pool);
41492
43603
  return {
41493
43604
  totalAssets: totalSupply * exchangeRate / ONE_E186,
41494
43605
  totalSupply,
@@ -41529,12 +43640,12 @@ var readerBenqiSavax = (entry) => ({
41529
43640
  ],
41530
43641
  abis: [TotalSupplyAbi, BenqiSavaxAbi, BenqiSavaxAbi],
41531
43642
  parse: ([supply, rate, totalPooled]) => {
41532
- const totalSupply = toBigInt11(supply);
41533
- const exchangeRate = toBigInt11(rate);
43643
+ const totalSupply = toBigInt12(supply);
43644
+ const exchangeRate = toBigInt12(rate);
41534
43645
  if (totalSupply === void 0 || exchangeRate === void 0) {
41535
43646
  return void 0;
41536
43647
  }
41537
- const totalAssets = toBigInt11(totalPooled) ?? totalSupply * exchangeRate / ONE_E186;
43648
+ const totalAssets = toBigInt12(totalPooled) ?? totalSupply * exchangeRate / ONE_E186;
41538
43649
  return {
41539
43650
  totalAssets,
41540
43651
  totalSupply,
@@ -41548,7 +43659,7 @@ var readerBgtWrapper1to1 = (entry) => ({
41548
43659
  calls: [{ address: entry.address, name: "totalSupply", params: [] }],
41549
43660
  abis: [TotalSupplyAbi],
41550
43661
  parse: ([supply]) => {
41551
- const totalSupply = toBigInt11(supply);
43662
+ const totalSupply = toBigInt12(supply);
41552
43663
  if (totalSupply === void 0) return void 0;
41553
43664
  return {
41554
43665
  totalAssets: totalSupply,
@@ -41577,8 +43688,8 @@ var readerDineroBeraEth = (entry) => ({
41577
43688
  ],
41578
43689
  abis: [TotalSupplyAbi, DineroBeraEthAbi],
41579
43690
  parse: ([supply, rate]) => {
41580
- const totalSupply = toBigInt11(supply);
41581
- const exchangeRate = toBigInt11(rate);
43691
+ const totalSupply = toBigInt12(supply);
43692
+ const exchangeRate = toBigInt12(rate);
41582
43693
  if (totalSupply === void 0 || exchangeRate === void 0) {
41583
43694
  return void 0;
41584
43695
  }
@@ -41599,9 +43710,9 @@ var readerErc4626 = (entry) => ({
41599
43710
  ],
41600
43711
  abis: [Erc4626ReadAbi, TotalSupplyAbi, Erc4626ReadAbi],
41601
43712
  parse: ([assets, supply, rate]) => {
41602
- const totalAssets = toBigInt11(assets);
41603
- const totalSupply = toBigInt11(supply);
41604
- const exchangeRate = toBigInt11(rate);
43713
+ const totalAssets = toBigInt12(assets);
43714
+ const totalSupply = toBigInt12(supply);
43715
+ const exchangeRate = toBigInt12(rate);
41605
43716
  if (totalAssets === void 0 || totalSupply === void 0 || exchangeRate === void 0) {
41606
43717
  return void 0;
41607
43718
  }
@@ -41616,9 +43727,9 @@ var readerErc4626PreviewRedeem = (entry) => ({
41616
43727
  ],
41617
43728
  abis: [Erc4626PreviewRedeemAbi, TotalSupplyAbi, Erc4626PreviewRedeemAbi],
41618
43729
  parse: ([assets, supply, rate]) => {
41619
- const totalAssets = toBigInt11(assets);
41620
- const totalSupply = toBigInt11(supply);
41621
- const exchangeRate = toBigInt11(rate);
43730
+ const totalAssets = toBigInt12(assets);
43731
+ const totalSupply = toBigInt12(supply);
43732
+ const exchangeRate = toBigInt12(rate);
41622
43733
  if (totalAssets === void 0 || totalSupply === void 0 || exchangeRate === void 0) {
41623
43734
  return void 0;
41624
43735
  }
@@ -41678,15 +43789,15 @@ var readerEtherFiWeEth = (entry) => {
41678
43789
  calls,
41679
43790
  abis,
41680
43791
  parse: (slice) => {
41681
- const totalSupply = toBigInt11(slice[0]);
41682
- const exchangeRate = toBigInt11(slice[1]);
43792
+ const totalSupply = toBigInt12(slice[0]);
43793
+ const exchangeRate = toBigInt12(slice[1]);
41683
43794
  if (totalSupply === void 0 || exchangeRate === void 0) {
41684
43795
  return void 0;
41685
43796
  }
41686
43797
  let liquidity;
41687
43798
  if (lp) {
41688
- const lpBalance = toBigInt11(slice[2]);
41689
- const locked = toBigInt11(slice[3]);
43799
+ const lpBalance = toBigInt12(slice[2]);
43800
+ const locked = toBigInt12(slice[3]);
41690
43801
  if (lpBalance !== void 0 && locked !== void 0) {
41691
43802
  liquidity = lpBalance > locked ? lpBalance - locked : 0n;
41692
43803
  }
@@ -41720,7 +43831,7 @@ var readerHyperbeatBeHype = (entry) => {
41720
43831
  calls: [{ address: entry.address, name: "totalSupply", params: [] }],
41721
43832
  abis: [TotalSupplyAbi],
41722
43833
  parse: ([supply]) => {
41723
- const totalSupply = toBigInt11(supply);
43834
+ const totalSupply = toBigInt12(supply);
41724
43835
  if (totalSupply === void 0) return void 0;
41725
43836
  return {
41726
43837
  totalAssets: totalSupply,
@@ -41737,8 +43848,8 @@ var readerHyperbeatBeHype = (entry) => {
41737
43848
  ],
41738
43849
  abis: [TotalSupplyAbi, HyperbeatStakingCoreAbi],
41739
43850
  parse: ([supply, rate]) => {
41740
- const totalSupply = toBigInt11(supply);
41741
- const exchangeRate = toBigInt11(rate);
43851
+ const totalSupply = toBigInt12(supply);
43852
+ const exchangeRate = toBigInt12(rate);
41742
43853
  if (totalSupply === void 0 || exchangeRate === void 0) {
41743
43854
  return void 0;
41744
43855
  }
@@ -41770,7 +43881,7 @@ var readerKelpRsEth = (entry) => {
41770
43881
  calls: [{ address: entry.address, name: "totalSupply", params: [] }],
41771
43882
  abis: [TotalSupplyAbi],
41772
43883
  parse: ([supply]) => {
41773
- const totalSupply = toBigInt11(supply);
43884
+ const totalSupply = toBigInt12(supply);
41774
43885
  if (totalSupply === void 0) return void 0;
41775
43886
  return {
41776
43887
  totalAssets: totalSupply,
@@ -41787,8 +43898,8 @@ var readerKelpRsEth = (entry) => {
41787
43898
  ],
41788
43899
  abis: [TotalSupplyAbi, KelpLrtOracleAbi],
41789
43900
  parse: ([supply, rate]) => {
41790
- const totalSupply = toBigInt11(supply);
41791
- const exchangeRate = toBigInt11(rate);
43901
+ const totalSupply = toBigInt12(supply);
43902
+ const exchangeRate = toBigInt12(rate);
41792
43903
  if (totalSupply === void 0 || exchangeRate === void 0) {
41793
43904
  return void 0;
41794
43905
  }
@@ -41820,7 +43931,7 @@ var readerKinetiqKHype = (entry) => {
41820
43931
  calls: [{ address: entry.address, name: "totalSupply", params: [] }],
41821
43932
  abis: [TotalSupplyAbi],
41822
43933
  parse: ([supply]) => {
41823
- const totalSupply = toBigInt11(supply);
43934
+ const totalSupply = toBigInt12(supply);
41824
43935
  if (totalSupply === void 0) return void 0;
41825
43936
  return {
41826
43937
  totalAssets: totalSupply,
@@ -41837,8 +43948,8 @@ var readerKinetiqKHype = (entry) => {
41837
43948
  ],
41838
43949
  abis: [TotalSupplyAbi, KinetiqStakingAccountantAbi],
41839
43950
  parse: ([supply, rate]) => {
41840
- const totalSupply = toBigInt11(supply);
41841
- const exchangeRate = toBigInt11(rate);
43951
+ const totalSupply = toBigInt12(supply);
43952
+ const exchangeRate = toBigInt12(rate);
41842
43953
  if (totalSupply === void 0 || exchangeRate === void 0) {
41843
43954
  return void 0;
41844
43955
  }
@@ -41878,12 +43989,12 @@ var readerLairStKaia = (entry) => ({
41878
43989
  ],
41879
43990
  abis: [TotalSupplyAbi, LairStKaiaAbi, LairStKaiaAbi],
41880
43991
  parse: ([supply, rate, totalStaking]) => {
41881
- const totalSupply = toBigInt11(supply);
41882
- const exchangeRate = toBigInt11(rate);
43992
+ const totalSupply = toBigInt12(supply);
43993
+ const exchangeRate = toBigInt12(rate);
41883
43994
  if (totalSupply === void 0 || exchangeRate === void 0) {
41884
43995
  return void 0;
41885
43996
  }
41886
- const totalAssets = toBigInt11(totalStaking) ?? totalSupply * exchangeRate / ONE_E186;
43997
+ const totalAssets = toBigInt12(totalStaking) ?? totalSupply * exchangeRate / ONE_E186;
41887
43998
  return {
41888
43999
  totalAssets,
41889
44000
  totalSupply,
@@ -41911,8 +44022,8 @@ var readerLidoWstEth = (entry) => ({
41911
44022
  ],
41912
44023
  abis: [TotalSupplyAbi, LidoWstEthAbi],
41913
44024
  parse: ([supply, rate]) => {
41914
- const totalSupply = toBigInt11(supply);
41915
- const exchangeRate = toBigInt11(rate);
44025
+ const totalSupply = toBigInt12(supply);
44026
+ const exchangeRate = toBigInt12(rate);
41916
44027
  if (totalSupply === void 0 || exchangeRate === void 0) {
41917
44028
  return void 0;
41918
44029
  }
@@ -41950,7 +44061,7 @@ var readerListaSlisBnb = (entry) => {
41950
44061
  calls: [{ address: entry.address, name: "totalSupply", params: [] }],
41951
44062
  abis: [TotalSupplyAbi],
41952
44063
  parse: ([supply]) => {
41953
- const totalSupply = toBigInt11(supply);
44064
+ const totalSupply = toBigInt12(supply);
41954
44065
  if (totalSupply === void 0) return void 0;
41955
44066
  return {
41956
44067
  totalAssets: totalSupply,
@@ -41968,12 +44079,12 @@ var readerListaSlisBnb = (entry) => {
41968
44079
  ],
41969
44080
  abis: [TotalSupplyAbi, ListaStakeManagerReadAbi, ListaStakeManagerReadAbi],
41970
44081
  parse: ([supply, rate, pooled]) => {
41971
- const totalSupply = toBigInt11(supply);
41972
- const exchangeRate = toBigInt11(rate);
44082
+ const totalSupply = toBigInt12(supply);
44083
+ const exchangeRate = toBigInt12(rate);
41973
44084
  if (totalSupply === void 0 || exchangeRate === void 0) {
41974
44085
  return void 0;
41975
44086
  }
41976
- const pooledBnb = toBigInt11(pooled);
44087
+ const pooledBnb = toBigInt12(pooled);
41977
44088
  const totalAssets = pooledBnb ?? totalSupply * exchangeRate / ONE_E186;
41978
44089
  return { totalAssets, totalSupply, exchangeRate };
41979
44090
  }
@@ -41999,7 +44110,7 @@ var readerMantleMEth = (entry) => {
41999
44110
  calls: [{ address: entry.address, name: "totalSupply", params: [] }],
42000
44111
  abis: [TotalSupplyAbi],
42001
44112
  parse: ([supply]) => {
42002
- const totalSupply = toBigInt11(supply);
44113
+ const totalSupply = toBigInt12(supply);
42003
44114
  if (totalSupply === void 0) return void 0;
42004
44115
  return {
42005
44116
  totalAssets: totalSupply,
@@ -42016,8 +44127,8 @@ var readerMantleMEth = (entry) => {
42016
44127
  ],
42017
44128
  abis: [TotalSupplyAbi, MantleStakingAbi],
42018
44129
  parse: ([supply, rate]) => {
42019
- const totalSupply = toBigInt11(supply);
42020
- const exchangeRate = toBigInt11(rate);
44130
+ const totalSupply = toBigInt12(supply);
44131
+ const exchangeRate = toBigInt12(rate);
42021
44132
  if (totalSupply === void 0 || exchangeRate === void 0) {
42022
44133
  return void 0;
42023
44134
  }
@@ -42038,7 +44149,7 @@ var readerOffChain = (entry) => {
42038
44149
  calls: [{ address: entry.address, name: "totalSupply", params: [] }],
42039
44150
  abis: [TotalSupplyAbi],
42040
44151
  parse: ([supply]) => {
42041
- const totalSupply = toBigInt11(supply);
44152
+ const totalSupply = toBigInt12(supply);
42042
44153
  if (totalSupply === void 0) return void 0;
42043
44154
  return {
42044
44155
  totalAssets: rescaleDecimals(totalSupply, shareDec, underlyingDec),
@@ -42072,7 +44183,7 @@ var readerRenzoEzEth = (entry) => {
42072
44183
  calls: [{ address: entry.address, name: "totalSupply", params: [] }],
42073
44184
  abis: [TotalSupplyAbi],
42074
44185
  parse: ([supply]) => {
42075
- const totalSupply = toBigInt11(supply);
44186
+ const totalSupply = toBigInt12(supply);
42076
44187
  if (totalSupply === void 0) return void 0;
42077
44188
  return {
42078
44189
  totalAssets: totalSupply,
@@ -42089,9 +44200,9 @@ var readerRenzoEzEth = (entry) => {
42089
44200
  ],
42090
44201
  abis: [TotalSupplyAbi, RenzoRestakeManagerAbi],
42091
44202
  parse: ([supply, tvls]) => {
42092
- const totalSupply = toBigInt11(supply);
44203
+ const totalSupply = toBigInt12(supply);
42093
44204
  if (totalSupply === void 0 || totalSupply === 0n) return void 0;
42094
- const totalTvl = Array.isArray(tvls) && tvls.length >= 3 ? toBigInt11(tvls[2]) : void 0;
44205
+ const totalTvl = Array.isArray(tvls) && tvls.length >= 3 ? toBigInt12(tvls[2]) : void 0;
42095
44206
  if (totalTvl === void 0) return void 0;
42096
44207
  return {
42097
44208
  totalAssets: totalTvl,
@@ -42145,12 +44256,12 @@ var readerRocketReth = (entry) => {
42145
44256
  calls,
42146
44257
  abis,
42147
44258
  parse: (slice) => {
42148
- const totalSupply = toBigInt11(slice[0]);
42149
- const exchangeRate = toBigInt11(slice[1]);
44259
+ const totalSupply = toBigInt12(slice[0]);
44260
+ const exchangeRate = toBigInt12(slice[1]);
42150
44261
  if (totalSupply === void 0 || exchangeRate === void 0) {
42151
44262
  return void 0;
42152
44263
  }
42153
- const liquidity = depositPool ? toBigInt11(slice[2]) : void 0;
44264
+ const liquidity = depositPool ? toBigInt12(slice[2]) : void 0;
42154
44265
  return {
42155
44266
  totalAssets: totalSupply * exchangeRate / ONE_E186,
42156
44267
  totalSupply,
@@ -42189,7 +44300,7 @@ var readerStaderEthx = (entry) => {
42189
44300
  calls: [{ address: entry.address, name: "totalSupply", params: [] }],
42190
44301
  abis: [TotalSupplyAbi],
42191
44302
  parse: ([supply]) => {
42192
- const totalSupply = toBigInt11(supply);
44303
+ const totalSupply = toBigInt12(supply);
42193
44304
  if (totalSupply === void 0) return void 0;
42194
44305
  return {
42195
44306
  totalAssets: totalSupply,
@@ -42206,8 +44317,8 @@ var readerStaderEthx = (entry) => {
42206
44317
  ],
42207
44318
  abis: [TotalSupplyAbi, StaderEthxAbi],
42208
44319
  parse: ([supply, rate]) => {
42209
- const totalSupply = toBigInt11(supply);
42210
- const exchangeRate = toBigInt11(rate);
44320
+ const totalSupply = toBigInt12(supply);
44321
+ const exchangeRate = toBigInt12(rate);
42211
44322
  if (totalSupply === void 0 || exchangeRate === void 0) {
42212
44323
  return void 0;
42213
44324
  }
@@ -42235,10 +44346,10 @@ var readerStaderMaticX = (entry) => {
42235
44346
  ],
42236
44347
  abis: [TotalSupplyAbi, StaderMaticXAbi],
42237
44348
  parse: ([supply, tup]) => {
42238
- const totalSupply = toBigInt11(supply);
44349
+ const totalSupply = toBigInt12(supply);
42239
44350
  if (!Array.isArray(tup) || tup.length < 3) return void 0;
42240
- const amountInMatic = toBigInt11(tup[0]);
42241
- const totalPooledMatic = toBigInt11(tup[2]);
44351
+ const amountInMatic = toBigInt12(tup[0]);
44352
+ const totalPooledMatic = toBigInt12(tup[2]);
42242
44353
  if (totalSupply === void 0 || amountInMatic === void 0) {
42243
44354
  return void 0;
42244
44355
  }
@@ -42271,7 +44382,7 @@ var readerStakeWiseOsEth = (entry) => {
42271
44382
  calls: [{ address: entry.address, name: "totalSupply", params: [] }],
42272
44383
  abis: [TotalSupplyAbi],
42273
44384
  parse: ([supply]) => {
42274
- const totalSupply = toBigInt11(supply);
44385
+ const totalSupply = toBigInt12(supply);
42275
44386
  if (totalSupply === void 0) return void 0;
42276
44387
  return {
42277
44388
  totalAssets: totalSupply,
@@ -42288,8 +44399,8 @@ var readerStakeWiseOsEth = (entry) => {
42288
44399
  ],
42289
44400
  abis: [TotalSupplyAbi, StakeWiseOsTokenAbi],
42290
44401
  parse: ([supply, rate]) => {
42291
- const totalSupply = toBigInt11(supply);
42292
- const exchangeRate = toBigInt11(rate);
44402
+ const totalSupply = toBigInt12(supply);
44403
+ const exchangeRate = toBigInt12(rate);
42293
44404
  if (totalSupply === void 0 || exchangeRate === void 0) {
42294
44405
  return void 0;
42295
44406
  }
@@ -42321,7 +44432,7 @@ var readerStCelo = (entry) => {
42321
44432
  calls: [{ address: entry.address, name: "totalSupply", params: [] }],
42322
44433
  abis: [TotalSupplyAbi],
42323
44434
  parse: ([supply]) => {
42324
- const totalSupply = toBigInt11(supply);
44435
+ const totalSupply = toBigInt12(supply);
42325
44436
  if (totalSupply === void 0) return void 0;
42326
44437
  return {
42327
44438
  totalAssets: totalSupply,
@@ -42338,8 +44449,8 @@ var readerStCelo = (entry) => {
42338
44449
  ],
42339
44450
  abis: [TotalSupplyAbi, StCeloManagerAbi],
42340
44451
  parse: ([supply, rate]) => {
42341
- const totalSupply = toBigInt11(supply);
42342
- const exchangeRate = toBigInt11(rate);
44452
+ const totalSupply = toBigInt12(supply);
44453
+ const exchangeRate = toBigInt12(rate);
42343
44454
  if (totalSupply === void 0 || exchangeRate === void 0) {
42344
44455
  return void 0;
42345
44456
  }
@@ -42371,8 +44482,8 @@ var readerSwellGetRate = (entry) => ({
42371
44482
  ],
42372
44483
  abis: [TotalSupplyAbi, SwellGetRateAbi],
42373
44484
  parse: ([supply, rate]) => {
42374
- const totalSupply = toBigInt11(supply);
42375
- const exchangeRate = toBigInt11(rate);
44485
+ const totalSupply = toBigInt12(supply);
44486
+ const exchangeRate = toBigInt12(rate);
42376
44487
  if (totalSupply === void 0 || exchangeRate === void 0) {
42377
44488
  return void 0;
42378
44489
  }
@@ -42403,7 +44514,7 @@ var readerValantisWstHype = (entry) => {
42403
44514
  calls: [{ address: entry.address, name: "totalSupply", params: [] }],
42404
44515
  abis: [TotalSupplyAbi],
42405
44516
  parse: ([supply]) => {
42406
- const totalSupply = toBigInt11(supply);
44517
+ const totalSupply = toBigInt12(supply);
42407
44518
  if (totalSupply === void 0) return void 0;
42408
44519
  return {
42409
44520
  totalAssets: totalSupply,
@@ -42420,8 +44531,8 @@ var readerValantisWstHype = (entry) => {
42420
44531
  ],
42421
44532
  abis: [TotalSupplyAbi, ValantisStHypeAbi],
42422
44533
  parse: ([supply, rate]) => {
42423
- const totalSupply = toBigInt11(supply);
42424
- const exchangeRate = toBigInt11(rate);
44534
+ const totalSupply = toBigInt12(supply);
44535
+ const exchangeRate = toBigInt12(rate);
42425
44536
  if (totalSupply === void 0 || exchangeRate === void 0) {
42426
44537
  return void 0;
42427
44538
  }
@@ -42455,7 +44566,7 @@ var readerVedaAccountant = (entry) => {
42455
44566
  calls: [{ address: entry.address, name: "totalSupply", params: [] }],
42456
44567
  abis: [TotalSupplyAbi],
42457
44568
  parse: ([supply]) => {
42458
- const totalSupply = toBigInt11(supply);
44569
+ const totalSupply = toBigInt12(supply);
42459
44570
  if (totalSupply === void 0) return void 0;
42460
44571
  return {
42461
44572
  totalAssets: rescaleDecimals(totalSupply, shareDec, underlyingDec),
@@ -42473,8 +44584,8 @@ var readerVedaAccountant = (entry) => {
42473
44584
  ],
42474
44585
  abis: [TotalSupplyAbi, VedaAccountantGetRateAbi],
42475
44586
  parse: ([supply, rate]) => {
42476
- const totalSupply = toBigInt11(supply);
42477
- const rawRate = toBigInt11(rate);
44587
+ const totalSupply = toBigInt12(supply);
44588
+ const rawRate = toBigInt12(rate);
42478
44589
  if (totalSupply === void 0 || rawRate === void 0) return void 0;
42479
44590
  const exchangeRate = rawRate * scale;
42480
44591
  return {
@@ -42509,8 +44620,8 @@ var readerAnkrRatio = (entry) => ({
42509
44620
  ],
42510
44621
  abis: [TotalSupplyAbi, AnkrRatioAbi],
42511
44622
  parse: ([supply, ratio]) => {
42512
- const totalSupply = toBigInt11(supply);
42513
- const r = toBigInt11(ratio);
44623
+ const totalSupply = toBigInt12(supply);
44624
+ const r = toBigInt12(ratio);
42514
44625
  if (totalSupply === void 0 || r === void 0 || r === 0n) {
42515
44626
  return void 0;
42516
44627
  }
@@ -42553,8 +44664,8 @@ var readerCoreEarnRate = (entry) => {
42553
44664
  ],
42554
44665
  abis: [CoreEarnRateAbi, TotalSupplyAbi],
42555
44666
  parse: ([rate, supply]) => {
42556
- const r = toBigInt11(rate);
42557
- const totalSupply = toBigInt11(supply);
44667
+ const r = toBigInt12(rate);
44668
+ const totalSupply = toBigInt12(supply);
42558
44669
  if (r === void 0 || r === 0n || totalSupply === void 0) {
42559
44670
  return void 0;
42560
44671
  }
@@ -42575,8 +44686,8 @@ var readerCoreStakedRatio = (entry) => {
42575
44686
  ],
42576
44687
  abis: [CoreTotalStakedAbi, TotalSupplyAbi],
42577
44688
  parse: ([staked, supply]) => {
42578
- const totalStaked = toBigInt11(staked);
42579
- const totalSupply = toBigInt11(supply);
44689
+ const totalStaked = toBigInt12(staked);
44690
+ const totalSupply = toBigInt12(supply);
42580
44691
  if (totalStaked === void 0 || totalSupply === void 0 || totalSupply === 0n) {
42581
44692
  return void 0;
42582
44693
  }
@@ -42620,12 +44731,12 @@ var readerStellaStDot = (entry) => ({
42620
44731
  ],
42621
44732
  abis: [TotalSupplyAbi, StellaStDotAbi, StellaStDotAbi],
42622
44733
  parse: ([supply, rate, pooled]) => {
42623
- const totalSupply = toBigInt11(supply);
42624
- const exchangeRate = toBigInt11(rate);
44734
+ const totalSupply = toBigInt12(supply);
44735
+ const exchangeRate = toBigInt12(rate);
42625
44736
  if (totalSupply === void 0 || exchangeRate === void 0) {
42626
44737
  return void 0;
42627
44738
  }
42628
- const totalAssets = toBigInt11(pooled) ?? totalSupply * exchangeRate / ONE_E186;
44739
+ const totalAssets = toBigInt12(pooled) ?? totalSupply * exchangeRate / ONE_E186;
42629
44740
  return {
42630
44741
  totalAssets,
42631
44742
  totalSupply,
@@ -42660,8 +44771,8 @@ var readerKintsuSMon = (entry) => ({
42660
44771
  ],
42661
44772
  abis: [KintsuSMonAbi, KintsuSMonAbi],
42662
44773
  parse: ([pooled, shares]) => {
42663
- const totalAssets = toBigInt11(pooled);
42664
- const totalSupply = toBigInt11(shares);
44774
+ const totalAssets = toBigInt12(pooled);
44775
+ const totalSupply = toBigInt12(shares);
42665
44776
  if (totalAssets === void 0 || totalSupply === void 0) return void 0;
42666
44777
  const exchangeRate = totalSupply > 0n ? totalAssets * ONE_E186 / totalSupply : ONE_E186;
42667
44778
  return { totalAssets, totalSupply, exchangeRate };
@@ -43182,7 +45293,7 @@ var fetchLstShareTokens = async (chainId, multicallRetry, prices = {}, tokenList
43182
45293
  const validatorsByAddress = new Map(validatorEntries);
43183
45294
  const idleByAddress = /* @__PURE__ */ new Map();
43184
45295
  idleEntries.forEach((e, i) => {
43185
- const bal = toBigInt11(idleResults[i]);
45296
+ const bal = toBigInt12(idleResults[i]);
43186
45297
  if (bal !== void 0) idleByAddress.set(e.address.toLowerCase(), bal);
43187
45298
  });
43188
45299
  const rawResults = new Array(allCalls.length);
@@ -43312,7 +45423,7 @@ var BeetsStSWithdrawalAbi = [
43312
45423
  ];
43313
45424
 
43314
45425
  // src/vaults/lst/withdrawals/readers/shared.ts
43315
- var toBigInt12 = (v) => {
45426
+ var toBigInt13 = (v) => {
43316
45427
  if (v === void 0 || v === null) return void 0;
43317
45428
  if (typeof v === "bigint") return v;
43318
45429
  if (typeof v === "number") return BigInt(v);
@@ -43327,7 +45438,7 @@ var toBigInt12 = (v) => {
43327
45438
  return void 0;
43328
45439
  };
43329
45440
  var toNumber = (v) => {
43330
- const b = toBigInt12(v);
45441
+ const b = toBigInt13(v);
43331
45442
  if (b === void 0) return void 0;
43332
45443
  if (b > BigInt(Number.MAX_SAFE_INTEGER)) return void 0;
43333
45444
  return Number(b);
@@ -43364,7 +45475,7 @@ var readerBeets = {
43364
45475
  const out = [];
43365
45476
  for (let i = 0; i < reqs.length; i++) {
43366
45477
  const r = reqs[i];
43367
- const amount = toBigInt12(r.assetAmount);
45478
+ const amount = toBigInt13(r.assetAmount);
43368
45479
  const ts = toNumber(r.requestTimestamp);
43369
45480
  const isWithdrawn = Boolean(r.isWithdrawn);
43370
45481
  if (amount === void 0 || ts === void 0) continue;
@@ -43456,13 +45567,13 @@ var readerBeHype = {
43456
45567
  const q = stage2[i * 2];
43457
45568
  const canClaim = Boolean(stage2[i * 2 + 1]);
43458
45569
  if (!q) continue;
43459
- const hypeAmount = Array.isArray(q) ? toBigInt12(q[2]) : toBigInt12(q.hypeAmount);
45570
+ const hypeAmount = Array.isArray(q) ? toBigInt13(q[2]) : toBigInt13(q.hypeAmount);
43460
45571
  if (hypeAmount === void 0) continue;
43461
45572
  out.push({
43462
45573
  lst: entry.lst,
43463
45574
  brand: entry.brand,
43464
45575
  symbol: entry.symbol,
43465
- requestId: String(toBigInt12(ids[i]) ?? i),
45576
+ requestId: String(toBigInt13(ids[i]) ?? i),
43466
45577
  amountUnderlying: hypeAmount.toString(),
43467
45578
  status: canClaim ? "claimable" : "pending"
43468
45579
  });
@@ -43565,7 +45676,7 @@ var readerBenqi = {
43565
45676
  for (let i = 0; i < reqs.length; i++) {
43566
45677
  const r = reqs[i];
43567
45678
  const startedAt = toNumber(r.startedAt);
43568
- const shareAmount = toBigInt12(r.shareAmount);
45679
+ const shareAmount = toBigInt13(r.shareAmount);
43569
45680
  if (startedAt === void 0 || shareAmount === void 0) continue;
43570
45681
  const readyAt = startedAt + cooldown;
43571
45682
  const expiresAt = readyAt + claimWindow;
@@ -43628,8 +45739,8 @@ var readerBeraPaw = {
43628
45739
  }
43629
45740
  const pos = res[0];
43630
45741
  if (!pos) return [];
43631
- const queued = Array.isArray(pos) ? toBigInt12(pos[0]) : toBigInt12(pos.queued);
43632
- const available = Array.isArray(pos) ? toBigInt12(pos[1]) : toBigInt12(pos.available);
45742
+ const queued = Array.isArray(pos) ? toBigInt13(pos[0]) : toBigInt13(pos.queued);
45743
+ const available = Array.isArray(pos) ? toBigInt13(pos[1]) : toBigInt13(pos.available);
43633
45744
  const out = [];
43634
45745
  if (available !== void 0 && available > 0n) {
43635
45746
  out.push({
@@ -43711,7 +45822,7 @@ var readerIbera = {
43711
45822
  return [];
43712
45823
  }
43713
45824
  const length = toNumber(stage1[0]) ?? 0;
43714
- const frontier = toBigInt12(stage1[1]) ?? 0n;
45825
+ const frontier = toBigInt13(stage1[1]) ?? 0n;
43715
45826
  if (length === 0) return [];
43716
45827
  const start = length > MAX_SCAN ? length - MAX_SCAN : 0;
43717
45828
  const ids = Array.from({ length: length - start }, (_3, k) => start + k);
@@ -43735,7 +45846,7 @@ var readerIbera = {
43735
45846
  const r = stage2[k];
43736
45847
  if (!r) continue;
43737
45848
  const receiver = Array.isArray(r) ? r[2] : r.receiver;
43738
- const amount = Array.isArray(r) ? toBigInt12(r[3]) : toBigInt12(r.amount);
45849
+ const amount = Array.isArray(r) ? toBigInt13(r[3]) : toBigInt13(r.amount);
43739
45850
  if (typeof receiver !== "string" || receiver.toLowerCase() !== target || amount === void 0 || amount === 0n) {
43740
45851
  continue;
43741
45852
  }
@@ -43808,7 +45919,7 @@ var readerPrimeStaking = {
43808
45919
  return [];
43809
45920
  }
43810
45921
  const length = toNumber(stage1[0]) ?? 0;
43811
- const frontier = toBigInt12(stage1[1]) ?? 0n;
45922
+ const frontier = toBigInt13(stage1[1]) ?? 0n;
43812
45923
  if (length === 0) return [];
43813
45924
  const start = length > MAX_SCAN2 ? length - MAX_SCAN2 : 0;
43814
45925
  const ids = Array.from({ length: length - start }, (_3, k) => start + k);
@@ -43832,7 +45943,7 @@ var readerPrimeStaking = {
43832
45943
  const r = stage2[k];
43833
45944
  if (!r) continue;
43834
45945
  const receiver = Array.isArray(r) ? r[1] : r.receiver;
43835
- const assets = Array.isArray(r) ? toBigInt12(r[3]) : toBigInt12(r.assets);
45946
+ const assets = Array.isArray(r) ? toBigInt13(r[3]) : toBigInt13(r.assets);
43836
45947
  const processed = Array.isArray(r) ? r[4] : r.processed;
43837
45948
  if (typeof receiver !== "string" || receiver.toLowerCase() !== target || assets === void 0 || assets === 0n) {
43838
45949
  continue;
@@ -43902,8 +46013,8 @@ var readerErc7540 = {
43902
46013
  ],
43903
46014
  abi: [Erc7540Abi, Erc7540Abi]
43904
46015
  });
43905
- const pending = toBigInt12(stage1[0]) ?? 0n;
43906
- const claimable = toBigInt12(stage1[1]) ?? 0n;
46016
+ const pending = toBigInt13(stage1[0]) ?? 0n;
46017
+ const claimable = toBigInt13(stage1[1]) ?? 0n;
43907
46018
  const out = [];
43908
46019
  if (claimable > 0n) {
43909
46020
  const stage2 = await multicallRetry({
@@ -43917,7 +46028,7 @@ var readerErc7540 = {
43917
46028
  ],
43918
46029
  abi: [Erc7540Abi]
43919
46030
  });
43920
- const amount = toBigInt12(stage2[0]) ?? claimable;
46031
+ const amount = toBigInt13(stage2[0]) ?? claimable;
43921
46032
  out.push({
43922
46033
  lst: entry.lst,
43923
46034
  brand: entry.brand,
@@ -43971,11 +46082,11 @@ var readerEthenaCooldown = {
43971
46082
  let cooldownEnd;
43972
46083
  let amount;
43973
46084
  if (Array.isArray(cell)) {
43974
- cooldownEnd = toBigInt12(cell[0]);
43975
- amount = toBigInt12(cell[1]);
46085
+ cooldownEnd = toBigInt13(cell[0]);
46086
+ amount = toBigInt13(cell[1]);
43976
46087
  } else if (cell && typeof cell === "object") {
43977
- cooldownEnd = toBigInt12(cell.cooldownEnd);
43978
- amount = toBigInt12(cell.underlyingAmount);
46088
+ cooldownEnd = toBigInt13(cell.cooldownEnd);
46089
+ amount = toBigInt13(cell.underlyingAmount);
43979
46090
  }
43980
46091
  if (!amount || amount === 0n) return [];
43981
46092
  const readyAt = Number(cooldownEnd ?? 0n);
@@ -44070,7 +46181,7 @@ var readerEtherFi = {
44070
46181
  calls: enumCalls,
44071
46182
  abi: enumCalls.map(() => EtherFiWithdrawRequestAbi)
44072
46183
  });
44073
- const ids = stage2.map(toBigInt12).filter((v) => v !== void 0);
46184
+ const ids = stage2.map(toBigInt13).filter((v) => v !== void 0);
44074
46185
  if (ids.length === 0) return [];
44075
46186
  const detailCalls = ids.flatMap((id) => [
44076
46187
  { address: entry.withdrawalContract, name: "getRequest", params: [id] },
@@ -44090,7 +46201,7 @@ var readerEtherFi = {
44090
46201
  const isValid = Boolean(stage3[i * 3 + 2]);
44091
46202
  if (!req) continue;
44092
46203
  if (!isValid) continue;
44093
- const amount = toBigInt12(req.amountOfEEth);
46204
+ const amount = toBigInt13(req.amountOfEEth);
44094
46205
  if (amount === void 0) continue;
44095
46206
  out.push({
44096
46207
  lst: entry.lst,
@@ -44185,7 +46296,7 @@ var readerKelp = {
44185
46296
  }
44186
46297
  ],
44187
46298
  abi: [KelpWithdrawalManagerAbi]
44188
- }).then((res) => toBigInt12(res[0]) ?? 0n)
46299
+ }).then((res) => toBigInt13(res[0]) ?? 0n)
44189
46300
  ]);
44190
46301
  lengths = storageReads;
44191
46302
  currentBlock = block;
@@ -44215,9 +46326,9 @@ var readerKelp = {
44215
46326
  for (let i = 0; i < detailCalls.length; i++) {
44216
46327
  const r = stage2[i];
44217
46328
  if (!r) continue;
44218
- const expected = Array.isArray(r) ? toBigInt12(r[1]) : toBigInt12(r.expectedAssetAmount);
44219
- const startBlock = Array.isArray(r) ? toBigInt12(r[2]) : toBigInt12(r.withdrawalStartBlock);
44220
- const nonce = Array.isArray(r) ? toBigInt12(r[3]) : toBigInt12(r.userNonce);
46329
+ const expected = Array.isArray(r) ? toBigInt13(r[1]) : toBigInt13(r.expectedAssetAmount);
46330
+ const startBlock = Array.isArray(r) ? toBigInt13(r[2]) : toBigInt13(r.withdrawalStartBlock);
46331
+ const nonce = Array.isArray(r) ? toBigInt13(r[3]) : toBigInt13(r.userNonce);
44221
46332
  if (expected === void 0 || startBlock === void 0) continue;
44222
46333
  const claimable = currentBlock >= startBlock + delayBlocks;
44223
46334
  out.push({
@@ -44294,7 +46405,7 @@ var readerLido = {
44294
46405
  abi: [LidoWithdrawalQueueAbi, LidoWithdrawalQueueAbi]
44295
46406
  });
44296
46407
  const ids = stage1[0];
44297
- const frontier = toBigInt12(stage1[1]) ?? 0n;
46408
+ const frontier = toBigInt13(stage1[1]) ?? 0n;
44298
46409
  if (!Array.isArray(ids) || ids.length === 0) return [];
44299
46410
  const stage2 = await multicallRetry({
44300
46411
  chain: chainId,
@@ -44311,10 +46422,10 @@ var readerLido = {
44311
46422
  if (!Array.isArray(statuses)) return [];
44312
46423
  const out = [];
44313
46424
  for (let i = 0; i < ids.length; i++) {
44314
- const id = toBigInt12(ids[i]);
46425
+ const id = toBigInt13(ids[i]);
44315
46426
  const s = statuses[i];
44316
46427
  if (id === void 0 || !s) continue;
44317
- const amountOfStETH = toBigInt12(s.amountOfStETH);
46428
+ const amountOfStETH = toBigInt13(s.amountOfStETH);
44318
46429
  const isFinalized = Boolean(s.isFinalized);
44319
46430
  const isClaimed = Boolean(s.isClaimed);
44320
46431
  if (amountOfStETH === void 0) continue;
@@ -44423,11 +46534,11 @@ var readerLista = {
44423
46534
  const status = stage2[i];
44424
46535
  if (!status) continue;
44425
46536
  const isClaimable = Array.isArray(status) ? Boolean(status[0]) : Boolean(status._isClaimable);
44426
- const bnbAmount = Array.isArray(status) ? toBigInt12(status[1]) : toBigInt12(status._amount);
44427
- const snbnbAmount = Array.isArray(req) ? toBigInt12(req[1]) : toBigInt12(req?.amountInSnBnb);
46537
+ const bnbAmount = Array.isArray(status) ? toBigInt13(status[1]) : toBigInt13(status._amount);
46538
+ const snbnbAmount = Array.isArray(req) ? toBigInt13(req[1]) : toBigInt13(req?.amountInSnBnb);
44428
46539
  const amount = bnbAmount ?? snbnbAmount;
44429
46540
  if (amount === void 0) continue;
44430
- const uuid = Array.isArray(req) ? toBigInt12(req[0]) : toBigInt12(req?.uuid);
46541
+ const uuid = Array.isArray(req) ? toBigInt13(req[0]) : toBigInt13(req?.uuid);
44431
46542
  out.push({
44432
46543
  lst: entry.lst,
44433
46544
  brand: entry.brand,
@@ -44512,7 +46623,7 @@ var readerRenzo = {
44512
46623
  for (let i = 0; i < count; i++) {
44513
46624
  const tup = stage2[i];
44514
46625
  if (!Array.isArray(tup) || tup.length < 5) continue;
44515
- const amountToRedeem = toBigInt12(tup[2]);
46626
+ const amountToRedeem = toBigInt13(tup[2]);
44516
46627
  const createdAt = toNumber(tup[4]);
44517
46628
  if (amountToRedeem === void 0 || createdAt === void 0) continue;
44518
46629
  const readyAt = createdAt + cooldown;
@@ -44585,9 +46696,9 @@ var readerStaderEthx2 = {
44585
46696
  ]
44586
46697
  });
44587
46698
  const ids = stage1[0];
44588
- const frontier = toBigInt12(stage1[1]) ?? 0n;
46699
+ const frontier = toBigInt13(stage1[1]) ?? 0n;
44589
46700
  if (!Array.isArray(ids) || ids.length === 0) return [];
44590
- const idBigInts = ids.map(toBigInt12).filter((v) => v !== void 0);
46701
+ const idBigInts = ids.map(toBigInt13).filter((v) => v !== void 0);
44591
46702
  const detailCalls = idBigInts.map((id) => ({
44592
46703
  address: entry.withdrawalContract,
44593
46704
  name: "userWithdrawRequests",
@@ -44603,8 +46714,8 @@ var readerStaderEthx2 = {
44603
46714
  const id = idBigInts[i];
44604
46715
  const tup = stage2[i];
44605
46716
  if (!Array.isArray(tup) || tup.length < 5) continue;
44606
- const ethExpected = toBigInt12(tup[2]) ?? 0n;
44607
- const ethFinalized = toBigInt12(tup[3]) ?? 0n;
46717
+ const ethExpected = toBigInt13(tup[2]) ?? 0n;
46718
+ const ethFinalized = toBigInt13(tup[3]) ?? 0n;
44608
46719
  const isFinalized = id < frontier && ethFinalized > 0n;
44609
46720
  const queuePosition = isFinalized ? 0 : Number(id - frontier);
44610
46721
  out.push({
@@ -44683,13 +46794,13 @@ var readerStaderMaticX2 = {
44683
46794
  });
44684
46795
  const arr = stage1[0];
44685
46796
  if (!Array.isArray(arr)) return [];
44686
- const currentEpoch = stakeManager ? toBigInt12(stage1[1]) ?? 0n : 0n;
44687
- const delay = stakeManager ? toBigInt12(stage1[2]) ?? 0n : 0n;
46797
+ const currentEpoch = stakeManager ? toBigInt13(stage1[1]) ?? 0n : 0n;
46798
+ const delay = stakeManager ? toBigInt13(stage1[2]) ?? 0n : 0n;
44688
46799
  const out = [];
44689
46800
  for (let i = 0; i < arr.length; i++) {
44690
46801
  const r = arr[i];
44691
- const amount = toBigInt12(r.amount) ?? 0n;
44692
- const requestEpoch = toBigInt12(r.requestEpoch);
46802
+ const amount = toBigInt13(r.amount) ?? 0n;
46803
+ const requestEpoch = toBigInt13(r.requestEpoch);
44693
46804
  if (requestEpoch === void 0) continue;
44694
46805
  const ready = stakeManager ? currentEpoch >= requestEpoch + delay : false;
44695
46806
  out.push({
@@ -44776,9 +46887,9 @@ var readerMantle = {
44776
46887
  if (typeof requester === "string" && requester.toLowerCase() !== lcUser) {
44777
46888
  continue;
44778
46889
  }
44779
- const ethRequested = Array.isArray(detail) ? toBigInt12(detail[3]) : toBigInt12(detail.ethRequested);
46890
+ const ethRequested = Array.isArray(detail) ? toBigInt13(detail[3]) : toBigInt13(detail.ethRequested);
44780
46891
  const isFinalized = Array.isArray(info) ? Boolean(info[0]) : Boolean(info.isFinalized);
44781
- const claimable = Array.isArray(info) ? toBigInt12(info[1]) : toBigInt12(info.claimableAmount);
46892
+ const claimable = Array.isArray(info) ? toBigInt13(info[1]) : toBigInt13(info.claimableAmount);
44782
46893
  if (ethRequested === void 0) continue;
44783
46894
  out.push({
44784
46895
  lst: entry.lst,
@@ -44857,8 +46968,8 @@ var readerPuffer = {
44857
46968
  calls,
44858
46969
  abi: calls.map(() => PufferWithdrawalManagerAbi)
44859
46970
  });
44860
- const finalizedBatch = toBigInt12(results[detailCalls.length]) ?? 0n;
44861
- const batchSize = toBigInt12(results[detailCalls.length + 1]) ?? 0n;
46971
+ const finalizedBatch = toBigInt13(results[detailCalls.length]) ?? 0n;
46972
+ const batchSize = toBigInt13(results[detailCalls.length + 1]) ?? 0n;
44862
46973
  const out = [];
44863
46974
  const lcUser = user.toLowerCase();
44864
46975
  for (let i = 0; i < ids.length; i++) {
@@ -44868,7 +46979,7 @@ var readerPuffer = {
44868
46979
  if (typeof recipient === "string" && recipient.toLowerCase() !== lcUser) {
44869
46980
  continue;
44870
46981
  }
44871
- const pufETHAmount = Array.isArray(d) ? toBigInt12(d[0]) : toBigInt12(d.pufETHAmount);
46982
+ const pufETHAmount = Array.isArray(d) ? toBigInt13(d[0]) : toBigInt13(d.pufETHAmount);
44872
46983
  if (pufETHAmount === void 0) continue;
44873
46984
  const batchIdx = batchSize > 0n ? ids[i] / batchSize : 0n;
44874
46985
  const claimable = batchIdx <= finalizedBatch;
@@ -44966,7 +47077,7 @@ var readerKinetiq = {
44966
47077
  for (let i = 0; i < count; i++) {
44967
47078
  const r = stage2[i];
44968
47079
  if (!r) continue;
44969
- const hypeAmount = Array.isArray(r) ? toBigInt12(r[0]) : toBigInt12(r.hypeAmount);
47080
+ const hypeAmount = Array.isArray(r) ? toBigInt13(r[0]) : toBigInt13(r.hypeAmount);
44970
47081
  const timestamp = Array.isArray(r) ? toNumber(r[4]) : toNumber(r.timestamp);
44971
47082
  if (hypeAmount === void 0 || hypeAmount === 0n || timestamp === void 0) {
44972
47083
  continue;
@@ -45094,7 +47205,7 @@ var readerStakeWise = {
45094
47205
  const claimedByIdx = /* @__PURE__ */ new Map();
45095
47206
  for (let i = 0; i < onChainChecks.length; i++) {
45096
47207
  const cell = checkResults[i];
45097
- const claimed = Array.isArray(cell) ? toBigInt12(cell[2]) : toBigInt12(cell?.claimedAssets);
47208
+ const claimed = Array.isArray(cell) ? toBigInt13(cell[2]) : toBigInt13(cell?.claimedAssets);
45098
47209
  if (claimed !== void 0 && claimed > 0n) {
45099
47210
  claimedByIdx.set(onChainChecks[i].idx, claimed);
45100
47211
  }
@@ -45102,7 +47213,7 @@ var readerStakeWise = {
45102
47213
  const out = [];
45103
47214
  for (let i = 0; i < requests.length; i++) {
45104
47215
  const r = requests[i];
45105
- const amount = toBigInt12(r.totalAssets) ?? 0n;
47216
+ const amount = toBigInt13(r.totalAssets) ?? 0n;
45106
47217
  const onChainClaimed = claimedByIdx.get(i);
45107
47218
  const claimable = onChainClaimed !== void 0 || r.isClaimable;
45108
47219
  out.push({
@@ -45159,7 +47270,7 @@ var readerStCelo2 = {
45159
47270
  const timestamps = cell[1] ?? [];
45160
47271
  const out = [];
45161
47272
  for (let i = 0; i < values.length; i++) {
45162
- const amount = toBigInt12(values[i]);
47273
+ const amount = toBigInt13(values[i]);
45163
47274
  const readyAt = toNumber(timestamps[i]);
45164
47275
  if (amount === void 0 || readyAt === void 0) continue;
45165
47276
  out.push({
@@ -45204,11 +47315,11 @@ var readerStellaUnbond = {
45204
47315
  let waiting;
45205
47316
  let unbonded;
45206
47317
  if (Array.isArray(cell)) {
45207
- waiting = toBigInt12(cell[0]);
45208
- unbonded = toBigInt12(cell[1]);
47318
+ waiting = toBigInt13(cell[0]);
47319
+ unbonded = toBigInt13(cell[1]);
45209
47320
  } else if (cell && typeof cell === "object") {
45210
- waiting = toBigInt12(cell.waiting);
45211
- unbonded = toBigInt12(cell.unbonded);
47321
+ waiting = toBigInt13(cell.waiting);
47322
+ unbonded = toBigInt13(cell.unbonded);
45212
47323
  }
45213
47324
  const out = [];
45214
47325
  if (unbonded && unbonded > 0n) {
@@ -45298,7 +47409,7 @@ var readerSwell = {
45298
47409
  abi: [SwellRswExitAbi, SwellRswExitAbi]
45299
47410
  });
45300
47411
  const count = toNumber(stage1[0]) ?? 0;
45301
- const lastProcessed = toBigInt12(stage1[1]) ?? 0n;
47412
+ const lastProcessed = toBigInt13(stage1[1]) ?? 0n;
45302
47413
  if (count === 0) return [];
45303
47414
  const enumCalls = Array.from({ length: count }, (_3, i) => ({
45304
47415
  address: entry.withdrawalContract,
@@ -45310,7 +47421,7 @@ var readerSwell = {
45310
47421
  calls: enumCalls,
45311
47422
  abi: enumCalls.map(() => SwellRswExitAbi)
45312
47423
  });
45313
- const ids = stage2.map(toBigInt12).filter((v) => v !== void 0);
47424
+ const ids = stage2.map(toBigInt13).filter((v) => v !== void 0);
45314
47425
  if (ids.length === 0) return [];
45315
47426
  const detailCalls = ids.map((id) => ({
45316
47427
  address: entry.withdrawalContract,
@@ -45327,7 +47438,7 @@ var readerSwell = {
45327
47438
  const id = ids[i];
45328
47439
  const r = stage3[i];
45329
47440
  if (!r) continue;
45330
- const amount = toBigInt12(r.amount);
47441
+ const amount = toBigInt13(r.amount);
45331
47442
  if (amount === void 0) continue;
45332
47443
  const claimable = id <= lastProcessed;
45333
47444
  out.push({
@@ -45401,14 +47512,14 @@ var readerValantis = {
45401
47512
  for (let i = 0; i < burns.length; i++) {
45402
47513
  const b = burns[i];
45403
47514
  if (!b) continue;
45404
- const amount = Array.isArray(b) ? toBigInt12(b[0]) : toBigInt12(b.amount);
47515
+ const amount = Array.isArray(b) ? toBigInt13(b[0]) : toBigInt13(b.amount);
45405
47516
  const completed = Array.isArray(b) ? Boolean(b[2]) : Boolean(b.completed);
45406
47517
  if (amount === void 0 || completed) continue;
45407
47518
  out.push({
45408
47519
  lst: entry.lst,
45409
47520
  brand: entry.brand,
45410
47521
  symbol: entry.symbol,
45411
- requestId: String(toBigInt12(ids[i]) ?? i),
47522
+ requestId: String(toBigInt13(ids[i]) ?? i),
45412
47523
  amountUnderlying: amount.toString(),
45413
47524
  status: redeemable[i] ? "claimable" : "pending"
45414
47525
  });
@@ -45481,7 +47592,7 @@ var readerTruFin = {
45481
47592
  if (typeof recipient === "string" && recipient.toLowerCase() !== lcUser) {
45482
47593
  continue;
45483
47594
  }
45484
- const amount = Array.isArray(w) ? toBigInt12(w[1]) : toBigInt12(w.amount);
47595
+ const amount = Array.isArray(w) ? toBigInt13(w[1]) : toBigInt13(w.amount);
45485
47596
  if (amount === void 0 || amount === 0n) continue;
45486
47597
  out.push({
45487
47598
  lst: entry.lst,
@@ -45577,7 +47688,7 @@ var readerYieldNest = {
45577
47688
  calls: enumCalls,
45578
47689
  abi: enumCalls.map(() => YieldNestWithdrawalQueueAbi)
45579
47690
  });
45580
- const ids = stage2.map(toBigInt12).filter((v) => v !== void 0);
47691
+ const ids = stage2.map(toBigInt13).filter((v) => v !== void 0);
45581
47692
  if (ids.length === 0) return [];
45582
47693
  const detailCalls = ids.map((id) => ({
45583
47694
  address: entry.withdrawalContract,
@@ -45596,7 +47707,7 @@ var readerYieldNest = {
45596
47707
  const id = ids[i];
45597
47708
  const r = stage3[i];
45598
47709
  if (!r) continue;
45599
- const amount = toBigInt12(r.amount);
47710
+ const amount = toBigInt13(r.amount);
45600
47711
  const created = toNumber(r.creationTimestamp);
45601
47712
  const processed = Boolean(r.processed);
45602
47713
  if (amount === void 0 || created === void 0) continue;
@@ -46189,7 +48300,7 @@ var getLstWithdrawalRegistry = (chainId, extraEntries) => {
46189
48300
  const extra = extraEntries.filter((e) => !seen.has(e.lst.toLowerCase()));
46190
48301
  return extra.length === 0 ? base : [...base, ...extra];
46191
48302
  };
46192
- var warn4 = (...args) => {
48303
+ var warn5 = (...args) => {
46193
48304
  };
46194
48305
  var getLstWithdrawalRequests = async (user, chainId, multicallRetry, options) => {
46195
48306
  const entries = getLstWithdrawalRegistry(chainId, options?.extraEntries);
@@ -46204,7 +48315,7 @@ var getLstWithdrawalRequests = async (user, chainId, multicallRetry, options) =>
46204
48315
  try {
46205
48316
  return await reader.fetch(lcUser, multicallRetry, chainId, entry, ids);
46206
48317
  } catch (e) {
46207
- warn4(
48318
+ warn5(
46208
48319
  `[lst-withdrawals] ${entry.brand} ${entry.symbol} (${entry.lst}) failed:`,
46209
48320
  e?.message ?? e
46210
48321
  );
@@ -46249,7 +48360,7 @@ var Erc4626ReadAbi2 = [
46249
48360
 
46250
48361
  // src/vaults/savings/readers/shared.ts
46251
48362
  var ONE_E188 = 10n ** 18n;
46252
- var toBigInt13 = (v) => {
48363
+ var toBigInt14 = (v) => {
46253
48364
  if (v === void 0 || v === null) return void 0;
46254
48365
  if (typeof v === "bigint") return v;
46255
48366
  if (typeof v === "number") return BigInt(v);
@@ -46280,9 +48391,9 @@ var readerErc46262 = (entry) => {
46280
48391
  ],
46281
48392
  abis: [Erc4626ReadAbi2, TotalSupplyAbi2, Erc4626ReadAbi2],
46282
48393
  parse: ([assets, supply, rate]) => {
46283
- const totalAssets = toBigInt13(assets);
46284
- const totalSupply = toBigInt13(supply);
46285
- const convertToAssetsRaw = toBigInt13(rate);
48394
+ const totalAssets = toBigInt14(assets);
48395
+ const totalSupply = toBigInt14(supply);
48396
+ const convertToAssetsRaw = toBigInt14(rate);
46286
48397
  if (totalAssets === void 0 || totalSupply === void 0 || convertToAssetsRaw === void 0) {
46287
48398
  return void 0;
46288
48399
  }
@@ -46733,7 +48844,7 @@ var resolveAaveEarnCuratorName = (chainId, owner) => {
46733
48844
 
46734
48845
  // src/vaults/aave-earn/fetchPublic.ts
46735
48846
  var BRAND2 = "Aave";
46736
- var toBigInt14 = (v) => {
48847
+ var toBigInt15 = (v) => {
46737
48848
  if (v === void 0 || v === null) return void 0;
46738
48849
  if (typeof v === "bigint") return v;
46739
48850
  if (typeof v === "number") return BigInt(v);
@@ -46793,15 +48904,15 @@ var fetchAaveEarnVaults = async (chainId, multicallRetry, prices = {}, tokenList
46793
48904
  const token = v.usedReserve.underlyingToken;
46794
48905
  const underlyingLc = token.address.toLowerCase();
46795
48906
  const assetDecimals = token.decimals;
46796
- const shareDecOnChain = toBigInt14(slice[1]);
48907
+ const shareDecOnChain = toBigInt15(slice[1]);
46797
48908
  const decimals = shareDecOnChain !== void 0 ? Number(shareDecOnChain) : assetDecimals;
46798
- const totalSupply = toBigInt14(slice[2]);
48909
+ const totalSupply = toBigInt15(slice[2]);
46799
48910
  if (totalSupply === void 0) continue;
46800
48911
  const shareUnit = 10n ** BigInt(decimals);
46801
48912
  const underlyingUnit = 10n ** BigInt(assetDecimals);
46802
- const convertToAssets = toBigInt14(slice[3]) ?? 0n;
48913
+ const convertToAssets = toBigInt15(slice[3]) ?? 0n;
46803
48914
  const convertToShares = convertToAssets > 0n ? shareUnit * underlyingUnit / convertToAssets : 0n;
46804
- const totalAssets = toBigInt14(slice[0]) ?? totalSupply * convertToAssets / shareUnit;
48915
+ const totalAssets = toBigInt15(slice[0]) ?? totalSupply * convertToAssets / shareUnit;
46805
48916
  const totalAssetsFormatted = Number(totalAssets) / 10 ** assetDecimals;
46806
48917
  const asset = tokenList[underlyingLc];
46807
48918
  const priceUsd = prices[underlyingLc] ?? (v.balance?.usdPerToken != null ? num2(v.balance.usdPerToken) : void 0);
@@ -48045,23 +50156,23 @@ var priceGmMarkets = async (chainId, multicallRetry, markets, prices) => {
48045
50156
  const indexMax = price(prices, m.indexToken)?.max;
48046
50157
  if (Array.isArray(dsRes) && longMax != null && shortMax != null) {
48047
50158
  const base = i * SLOTS;
48048
- const big = (j) => typeof dsRes[base + j] === "bigint" ? dsRes[base + j] : 0n;
50159
+ const big3 = (j) => typeof dsRes[base + j] === "bigint" ? dsRes[base + j] : 0n;
48049
50160
  const cap = computeDepositCapacityUsd(
48050
- [info?.longTokenAmount, longMax, big(0), big(2)],
48051
- [info?.shortTokenAmount, shortMax, big(1), big(3)]
50161
+ [info?.longTokenAmount, longMax, big3(0), big3(2)],
50162
+ [info?.shortTokenAmount, shortMax, big3(1), big3(3)]
48052
50163
  );
48053
50164
  if (cap != null) value.depositCapacityUsd = cap;
48054
50165
  if (indexMax != null) {
48055
50166
  const divisor = m.longToken.toLowerCase() === m.shortToken.toLowerCase() ? 2n : 1n;
48056
- const reservedUsdLong = (big(4) + big(5)) / divisor * indexMax;
48057
- const reservedUsdShort = (big(6) + big(7)) / divisor;
50167
+ const reservedUsdLong = (big3(4) + big3(5)) / divisor * indexMax;
50168
+ const reservedUsdShort = (big3(6) + big3(7)) / divisor;
48058
50169
  const liq = computeLiquidityUsd(
48059
50170
  info?.longTokenUsd,
48060
50171
  info?.shortTokenUsd,
48061
50172
  reservedUsdLong,
48062
50173
  reservedUsdShort,
48063
- big(8),
48064
- big(9)
50174
+ big3(8),
50175
+ big3(9)
48065
50176
  );
48066
50177
  if (liq != null)
48067
50178
  value.liquidityUsd = Math.max(0, Math.min(liq, value.tvlUsd));
@@ -48260,21 +50371,21 @@ var fetchGmxExecutionFees = async (chainId, multicallRetry, gasPriceWei) => {
48260
50371
  } catch {
48261
50372
  return void 0;
48262
50373
  }
48263
- const big = (i) => typeof res[i] === "bigint" ? res[i] : 0n;
48264
- const base = big(0);
48265
- const mult = big(1);
50374
+ const big3 = (i) => typeof res[i] === "bigint" ? res[i] : 0n;
50375
+ const base = big3(0);
50376
+ const mult = big3(1);
48266
50377
  if (base === 0n && mult === 0n) return void 0;
48267
50378
  const PRECISION = 10n ** 30n;
48268
50379
  const adjusted = (opGas) => base + opGas * mult / PRECISION;
48269
50380
  const fee = (opGas) => (adjusted(opGas) * gasPriceWei).toString();
48270
- const glvExtra = big(6) * GLV_NOMINAL_MARKET_COUNT;
50381
+ const glvExtra = big3(6) * GLV_NOMINAL_MARKET_COUNT;
48271
50382
  return {
48272
50383
  chainId,
48273
50384
  gasPriceWei: gasPriceWei.toString(),
48274
- deposit: fee(big(2)),
48275
- withdrawal: fee(big(3)),
48276
- glvDeposit: fee(big(4) + glvExtra),
48277
- glvWithdrawal: fee(big(5) + glvExtra)
50385
+ deposit: fee(big3(2)),
50386
+ withdrawal: fee(big3(3)),
50387
+ glvDeposit: fee(big3(4) + glvExtra),
50388
+ glvWithdrawal: fee(big3(5) + glvExtra)
48278
50389
  };
48279
50390
  };
48280
50391
 
@@ -48661,7 +50772,7 @@ var readVaultSharePrices = async (chainId, addresses, multicallRetry) => {
48661
50772
  };
48662
50773
 
48663
50774
  // src/vaults/yield/annualize.ts
48664
- var YEAR_SECONDS2 = 365 * 24 * 60 * 60;
50775
+ var YEAR_SECONDS3 = 365 * 24 * 60 * 60;
48665
50776
  var SCALE = 10n ** 18n;
48666
50777
  var appendSnapshot = (points, snap, options) => {
48667
50778
  const maxPoints = options?.maxPoints ?? 90;
@@ -48690,7 +50801,7 @@ var computeVaultApr = (points, options) => {
48690
50801
  if (pThen === 0n) return void 0;
48691
50802
  const ratioScaled = BigInt(now.p) * SCALE / pThen;
48692
50803
  const ratio = Number(ratioScaled) / 1e18;
48693
- const apr = (ratio - 1) * (YEAR_SECONDS2 / windowSeconds);
50804
+ const apr = (ratio - 1) * (YEAR_SECONDS3 / windowSeconds);
48694
50805
  return {
48695
50806
  apr,
48696
50807
  sharePriceNow: now.p,
@@ -48745,7 +50856,7 @@ function buildVaultLookup(data) {
48745
50856
  addEntries(data.yearn, "yearn");
48746
50857
  return map;
48747
50858
  }
48748
- var warn5 = (...args) => {
50859
+ var warn6 = (...args) => {
48749
50860
  };
48750
50861
  var HYPERCORE_PROVIDER_CHAIN = "999";
48751
50862
  var getVaultPublicDataAll = async (chainId, providers, multicallRetry, prices = {}, tokenList = {}, options) => {
@@ -48758,7 +50869,7 @@ var getVaultPublicDataAll = async (chainId, providers, multicallRetry, prices =
48758
50869
  fetchFluidFTokens(chainId, multicallRetry, prices, tokenList).then((res) => {
48759
50870
  out.fluid = res;
48760
50871
  }).catch((e) => {
48761
- warn5(
50872
+ warn6(
48762
50873
  `[vaults] fluid fetch failed for chain ${chainId}:`,
48763
50874
  e?.message ?? e
48764
50875
  );
@@ -48770,7 +50881,7 @@ var getVaultPublicDataAll = async (chainId, providers, multicallRetry, prices =
48770
50881
  fetchGearboxV3Pools(chainId, multicallRetry, prices, tokenList).then((res) => {
48771
50882
  out.gearbox = res;
48772
50883
  }).catch((e) => {
48773
- warn5(
50884
+ warn6(
48774
50885
  `[vaults] gearbox fetch failed for chain ${chainId}:`,
48775
50886
  e?.message ?? e
48776
50887
  );
@@ -48782,7 +50893,7 @@ var getVaultPublicDataAll = async (chainId, providers, multicallRetry, prices =
48782
50893
  fetchMorphoVaults(chainId, multicallRetry, prices, tokenList).then((res) => {
48783
50894
  out.morpho = res;
48784
50895
  }).catch((e) => {
48785
- warn5(
50896
+ warn6(
48786
50897
  `[vaults] morpho fetch failed for chain ${chainId}:`,
48787
50898
  e?.message ?? e
48788
50899
  );
@@ -48794,7 +50905,7 @@ var getVaultPublicDataAll = async (chainId, providers, multicallRetry, prices =
48794
50905
  fetchListaVaultsFromChain(chainId, multicallRetry, prices, tokenList).then((res) => {
48795
50906
  out.lista = res;
48796
50907
  }).catch((e) => {
48797
- warn5(
50908
+ warn6(
48798
50909
  `[vaults] lista fetch failed for chain ${chainId}:`,
48799
50910
  e?.message ?? e
48800
50911
  );
@@ -48809,7 +50920,7 @@ var getVaultPublicDataAll = async (chainId, providers, multicallRetry, prices =
48809
50920
  }).then((res) => {
48810
50921
  out.silo = res;
48811
50922
  }).catch((e) => {
48812
- warn5(
50923
+ warn6(
48813
50924
  `[vaults] silo fetch failed for chain ${chainId}:`,
48814
50925
  e?.message ?? e
48815
50926
  );
@@ -48821,7 +50932,7 @@ var getVaultPublicDataAll = async (chainId, providers, multicallRetry, prices =
48821
50932
  fetchEulerEarnVaults(chainId, prices, tokenList, multicallRetry).then((res) => {
48822
50933
  out["euler-earn"] = res;
48823
50934
  }).catch((e) => {
48824
- warn5(
50935
+ warn6(
48825
50936
  `[vaults] euler-earn fetch failed for chain ${chainId}:`,
48826
50937
  e?.message ?? e
48827
50938
  );
@@ -48833,7 +50944,7 @@ var getVaultPublicDataAll = async (chainId, providers, multicallRetry, prices =
48833
50944
  fetchLstShareTokens(chainId, multicallRetry, prices, tokenList).then((res) => {
48834
50945
  out.lst = res;
48835
50946
  }).catch((e) => {
48836
- warn5(
50947
+ warn6(
48837
50948
  `[vaults] lst fetch failed for chain ${chainId}:`,
48838
50949
  e?.message ?? e
48839
50950
  );
@@ -48845,7 +50956,7 @@ var getVaultPublicDataAll = async (chainId, providers, multicallRetry, prices =
48845
50956
  fetchSavingsVaults(chainId, multicallRetry, prices, tokenList).then((res) => {
48846
50957
  out.savings = res;
48847
50958
  }).catch((e) => {
48848
- warn5(
50959
+ warn6(
48849
50960
  `[vaults] savings fetch failed for chain ${chainId}:`,
48850
50961
  e?.message ?? e
48851
50962
  );
@@ -48857,7 +50968,7 @@ var getVaultPublicDataAll = async (chainId, providers, multicallRetry, prices =
48857
50968
  fetchLagoonVaults(chainId, prices, tokenList).then((res) => {
48858
50969
  out.lagoon = res;
48859
50970
  }).catch((e) => {
48860
- warn5(
50971
+ warn6(
48861
50972
  `[vaults] lagoon fetch failed for chain ${chainId}:`,
48862
50973
  e?.message ?? e
48863
50974
  );
@@ -48869,7 +50980,7 @@ var getVaultPublicDataAll = async (chainId, providers, multicallRetry, prices =
48869
50980
  fetchAaveEarnVaults(chainId, multicallRetry, prices, tokenList).then((res) => {
48870
50981
  out["aave-earn"] = res;
48871
50982
  }).catch((e) => {
48872
- warn5(
50983
+ warn6(
48873
50984
  `[vaults] aave-earn fetch failed for chain ${chainId}:`,
48874
50985
  e?.message ?? e
48875
50986
  );
@@ -48881,7 +50992,7 @@ var getVaultPublicDataAll = async (chainId, providers, multicallRetry, prices =
48881
50992
  fetchUpshiftVaults(chainId, prices, tokenList).then((res) => {
48882
50993
  out.upshift = res;
48883
50994
  }).catch((e) => {
48884
- warn5(
50995
+ warn6(
48885
50996
  `[vaults] upshift fetch failed for chain ${chainId}:`,
48886
50997
  e?.message ?? e
48887
50998
  );
@@ -48893,7 +51004,7 @@ var getVaultPublicDataAll = async (chainId, providers, multicallRetry, prices =
48893
51004
  fetchYearnVaults(chainId, multicallRetry, prices, tokenList).then((res) => {
48894
51005
  out.yearn = res;
48895
51006
  }).catch((e) => {
48896
- warn5(
51007
+ warn6(
48897
51008
  `[vaults] yearn fetch failed for chain ${chainId}:`,
48898
51009
  e?.message ?? e
48899
51010
  );
@@ -48905,7 +51016,7 @@ var getVaultPublicDataAll = async (chainId, providers, multicallRetry, prices =
48905
51016
  fetchHypercoreVaults().then((res) => {
48906
51017
  out.hypercore = res;
48907
51018
  }).catch((e) => {
48908
- warn5(
51019
+ warn6(
48909
51020
  `[vaults] hypercore fetch failed for chain ${chainId}:`,
48910
51021
  e?.message ?? e
48911
51022
  );
@@ -48917,7 +51028,7 @@ var getVaultPublicDataAll = async (chainId, providers, multicallRetry, prices =
48917
51028
  fetchGmxVaults(chainId, multicallRetry).then((res) => {
48918
51029
  out.gmx = res;
48919
51030
  }).catch((e) => {
48920
- warn5(
51031
+ warn6(
48921
51032
  `[vaults] gmx fetch failed for chain ${chainId}:`,
48922
51033
  e?.message ?? e
48923
51034
  );
@@ -48933,7 +51044,7 @@ var getVaultPublicDataAll = async (chainId, providers, multicallRetry, prices =
48933
51044
  );
48934
51045
  if (fees) out.gmxExecutionFees = fees;
48935
51046
  })().catch((e) => {
48936
- warn5(
51047
+ warn6(
48937
51048
  `[vaults] gmx execution-fee fetch failed for chain ${chainId}:`,
48938
51049
  e?.message ?? e
48939
51050
  );
@@ -49480,6 +51591,6 @@ async function fetchTokenBalances(chainId, account, tokens, options = {}) {
49480
51591
  return parseTokenBalanceResult(rawResult, prepared.query);
49481
51592
  }
49482
51593
 
49483
- export { ApiBookSource, DEFAULT_MIDNIGHT_API, EMPTY_BALANCE, GMX_API_HOSTS, GMX_READ_CONTRACTS, GMX_SUPPORTED_CHAINS, HYPERCORE_VAULT_REGISTRY, IDLE_MARKET_ID, INTERFACE_IDS, LAGOON_API_URL, LAGOON_CHAIN_IDS, MORPHO_LENS, MaxParamThresholds, STABLECOIN_SYMBOLS, STCELO_MANAGER_ADDRESS, UPSHIFT_CHAIN_IDS, UPSHIFT_VAULTS_URL, VAULT_SHARE_PRICE_PROBE, VOLATILE_VAULT_OVERRIDES, YEARN_CHAIN_IDS, YEARN_YDAEMON_BASE, accountDepositListKey, accountWithdrawalListKey, appendSnapshot, applyPositionDelta, attachPricesToFlashLiquidity, buildFluidFTokensCall, buildLoopResult, buildMorphoTypeCall, buildMorphoTypeUserCallWithLens, buildPortfolioTotals, buildSumerAccumulators, buildSummaries, buildVaultLookup, calculateLeverage, calculateNetApr, calculateOverallNetApr, calculateWeightedAverage, classifyVault, computeBorrowDelta2 as computeBorrowDelta, computeCloseTradeDeltas, computeCollateralSwapDeltas, computeDebtSwapDeltas, computeDepositDelta2 as computeDepositDelta, computeEModeAnalysis, computeOpenTradeDeltas, computePostTradeMetrics, computeRepayDelta2 as computeRepayDelta, computeSumerBorrowDelta, computeSumerDepositDelta, computeSumerRepayDelta, computeSumerWaterfall, computeSumerWithdrawDelta, computeVaultApr, computeWithdrawDelta2 as computeWithdrawDelta, computeZapTradeDeltas, convertLenderUserDataResult, createMarketUid, createMidnightBookSource, createMulticallRpcCall, createRawRpcCalls, decodeListaMarkets, decodeMarkets, decodePackedListaUserDataset, decodePackedMorphoUserDataset, detectInterfaceKinds, encodeBalanceFetcherCalldata, fetchDolomiteAccountNumbers, fetchEulerEarnVaults, fetchEulerEarnVaultsFromSubgraph, fetchEulerSubAccountIndexes, fetchFlashLiquidityForChain, fetchFluidFTokens, fetchGeneralYields, fetchGeneralYieldsByMarketUid, fetchGmxExecutionFees, fetchGmxTickerPrices, fetchGmxVaults, fetchHypercoreVaults, fetchLagoonApiVaults, fetchLagoonVaults, fetchListaVaultsFromChain, fetchMorphoUserBalances, fetchMorphoUserPositionMarkets, fetchMorphoVaults, fetchMorphoVaultsFromApi, fetchMorphoVaultsFromChain, fetchOraclePrices, fetchPendlePrices, fetchSiloVaults, fetchTokenBalances, fetchTokenMetadata, fetchUpshiftApiVaults, fetchUpshiftVaults, fetchYearnApiVaults, fetchYearnVaults, filterActiveLenders, filterLendersByProtocol, fuseLenderData, generateLendingPools, getAavesForChain, getAssetConfig, getBalanceForMarketUid, getBorrowCapacity, getCoreValidators, getFluidFTokensConverter, getGmxApiHost, getGmxReadContracts, getGmxUserPositions, getHealthFactor, getHypercoreUserPositions, getHypercoreVaultRegistry, getLenderAssets, getLenderPublicData, getLenderPublicDataAll, getLenderPublicDataViaApi, getLenderUserDataMulti, getLenderUserDataResult, getLendersForChain, getLstDelegation, getLstValidators, getLstWithdrawalRegistry, getLstWithdrawalRequests, getMaxAmountClose, getMaxAmountCollateralSwap, getMaxAmountDebtSwap, getMaxAmountOpen, getMergedUserData, getMorphoTypeMarketConverter, getResolvedDolomiteAccountNumbers, getStCeloValidatorGroups, getSubAccountAddress, getSubAccountIndex, getVaultPublicDataAll, getVaultWithdrawalRequests, hasEulerEarnVaultSubgraph, hasLagoonVaults, hasMorphoPositionIndex, hasMorphoUserApi, hasMorphoUserSubgraph, hasUpshiftVaults, hasYearnVaults, isStablecoinSymbol, isYearnV3, keysFromMaps, multicall3Abi, nanTo, needsLenderApproval, needsTokenApproval, noOpResult, normalizeToBytes, parseBalanceFetcherResult, parseMergedResult, parseMulticallRpcResponses, parseRawRpcBatchResponses, parseRawRpcResponses, parseTokenBalanceResult, positivePart2 as positivePart, prepareLenderUserDataRpcCalls, prepareMergedMulticallParams, prepareMergedRpcCalls, prepareMulticallInputs, prepareTokenBalanceRpcCalls, priceGlvVaults, priceGmMarkets, readVaultSharePrices, resolveStCeloDepositGroup, selectAssetGroupPrices, stampVaultClassification, tickToAprNumber, tickToPrice, unflattenLenderData };
51594
+ export { ApiBookSource, DEFAULT_MIDNIGHT_API, EMPTY_BALANCE, GMX_API_HOSTS, GMX_READ_CONTRACTS, GMX_SUPPORTED_CHAINS, HYPERCORE_VAULT_REGISTRY, IDLE_MARKET_ID, INTERFACE_IDS, LAGOON_API_URL, LAGOON_CHAIN_IDS, MORPHO_LENS, MaxParamThresholds, STABLECOIN_SYMBOLS, STCELO_MANAGER_ADDRESS, TermSubgraphSource, UPSHIFT_CHAIN_IDS, UPSHIFT_VAULTS_URL, VAULT_SHARE_PRICE_PROBE, VOLATILE_VAULT_OVERRIDES, YEARN_CHAIN_IDS, YEARN_YDAEMON_BASE, accountDepositListKey, accountWithdrawalListKey, appendSnapshot, applyPositionDelta, attachPricesToFlashLiquidity, buildFluidFTokensCall, buildLiquityUserCall, buildLoopResult, buildMorphoTypeCall, buildMorphoTypeUserCallWithLens, buildPortfolioTotals, buildSumerAccumulators, buildSummaries, buildVaultLookup, calculateLeverage, calculateNetApr, calculateOverallNetApr, calculateWeightedAverage, classifyVault, computeBorrowDelta2 as computeBorrowDelta, computeCloseTradeDeltas, computeCollateralSwapDeltas, computeDebtSwapDeltas, computeDepositDelta2 as computeDepositDelta, computeEModeAnalysis, computeOpenTradeDeltas, computePostTradeMetrics, computeRepayDelta2 as computeRepayDelta, computeSumerBorrowDelta, computeSumerDepositDelta, computeSumerRepayDelta, computeSumerWaterfall, computeSumerWithdrawDelta, computeVaultApr, computeWithdrawDelta2 as computeWithdrawDelta, computeZapTradeDeltas, convertExactlyMarketsToResponse, convertLenderUserDataResult, convertLiquityMarketsToResponse, convertRiverMarketsToResponse, convertTermMarketsToResponse, createMarketUid, createMidnightBookSource, createMulticallRpcCall, createRawRpcCalls, createTermBookSource, decodeListaMarkets, decodeMarkets, decodePackedListaUserDataset, decodePackedMorphoUserDataset, detectInterfaceKinds, encodeBalanceFetcherCalldata, exactlyLenderKey, exactlyMarketFromLenderKey, exactlyPairLtv, exactlyPenaltyRateToAprPercent, exactlyWadRateToPercent, fetchDolomiteAccountNumbers, fetchEulerEarnVaults, fetchEulerEarnVaultsFromSubgraph, fetchEulerSubAccountIndexes, fetchExactlyMarkets, fetchFlashLiquidityForChain, fetchFluidFTokens, fetchGeneralYields, fetchGeneralYieldsByMarketUid, fetchGmxExecutionFees, fetchGmxTickerPrices, fetchGmxVaults, fetchHypercoreVaults, fetchLagoonApiVaults, fetchLagoonVaults, fetchLiquityMarkets, fetchListaVaultsFromChain, fetchMorphoUserBalances, fetchMorphoUserPositionMarkets, fetchMorphoVaults, fetchMorphoVaultsFromApi, fetchMorphoVaultsFromChain, fetchOraclePrices, fetchPendlePrices, fetchRiverMarkets, fetchSiloVaults, fetchTermMarkets, fetchTokenBalances, fetchTokenMetadata, fetchUpshiftApiVaults, fetchUpshiftVaults, fetchYearnApiVaults, fetchYearnVaults, filterActiveLenders, filterLendersByProtocol, fuseLenderData, generateLendingPools, getAavesForChain, getAssetConfig, getBalanceForMarketUid, getBorrowCapacity, getCachedLiquityTroves, getCoreValidators, getFluidFTokensConverter, getGmxApiHost, getGmxReadContracts, getGmxUserPositions, getHealthFactor, getHypercoreUserPositions, getHypercoreVaultRegistry, getLenderAssets, getLenderPublicData, getLenderPublicDataAll, getLenderPublicDataViaApi, getLenderUserDataMulti, getLenderUserDataResult, getLendersForChain, getLstDelegation, getLstValidators, getLstWithdrawalRegistry, getLstWithdrawalRequests, getMaxAmountClose, getMaxAmountCollateralSwap, getMaxAmountDebtSwap, getMaxAmountOpen, getMergedUserData, getMorphoTypeMarketConverter, getResolvedDolomiteAccountNumbers, getStCeloValidatorGroups, getSubAccountAddress, getSubAccountIndex, getVaultPublicDataAll, getVaultWithdrawalRequests, hasEulerEarnVaultSubgraph, hasLagoonVaults, hasMorphoPositionIndex, hasMorphoUserApi, hasMorphoUserSubgraph, hasUpshiftVaults, hasYearnVaults, isStablecoinSymbol, isYearnV3, keysFromMaps, liquityCandidateTroveIds, liquityKeyParts, liquityLenderKey, multicall3Abi, nanTo, needsLenderApproval, needsTokenApproval, noOpResult, normalizeToBytes, parseBalanceFetcherResult, parseMergedResult, parseMulticallRpcResponses, parseRawRpcBatchResponses, parseRawRpcResponses, parseTokenBalanceResult, positivePart2 as positivePart, prepareLenderUserDataRpcCalls, prepareMergedMulticallParams, prepareMergedRpcCalls, prepareMulticallInputs, prepareTokenBalanceRpcCalls, priceGlvVaults, priceGmMarkets, readVaultSharePrices, resolveStCeloDepositGroup, riverKeyParts, riverLenderKey, selectAssetGroupPrices, stampVaultClassification, termLenderKey, tickToAprNumber, tickToPrice, unflattenLenderData };
49484
51595
  //# sourceMappingURL=index.js.map
49485
51596
  //# sourceMappingURL=index.js.map