@1delta/margin-fetcher 0.0.328 → 0.0.329

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