@1delta/margin-fetcher 0.0.327 → 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 +14 -1
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +2398 -258
  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 +18 -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));
@@ -20853,6 +20865,7 @@ var getLenderPublicData = async (chainId, lenders, prices, additionalYields, mul
20853
20865
  }
20854
20866
  return lenderData;
20855
20867
  };
20868
+ var DEFAULT_MIDNIGHT_API = "https://api.morpho.org/v0/midnight";
20856
20869
  var warn = (...args) => {
20857
20870
  };
20858
20871
  function midnightApiBaseUrl(chainId) {
@@ -20904,12 +20917,12 @@ function reduceTop(bids, asks) {
20904
20917
  };
20905
20918
  }
20906
20919
  var ApiBookSource = class {
20920
+ baseUrl;
20921
+ fetchImpl;
20907
20922
  constructor(baseUrl, fetchImpl = fetch) {
20908
20923
  this.baseUrl = baseUrl;
20909
- this.fetchImpl = fetchImpl;
20924
+ this.fetchImpl = (input, init) => fetchImpl.call(globalThis, input, init);
20910
20925
  }
20911
- baseUrl;
20912
- fetchImpl;
20913
20926
  async getBookTop(marketId) {
20914
20927
  const url = `${this.baseUrl}/books/${marketId}`;
20915
20928
  try {
@@ -20954,40 +20967,121 @@ var ApiBookSource = class {
20954
20967
  );
20955
20968
  return { bids, asks };
20956
20969
  } catch (e) {
20957
- warn(`book ${marketId} fetch failed:`, e?.message ?? e);
20970
+ console.error(
20971
+ `[midnight getBook] ${url} threw:`,
20972
+ e?.message ?? e
20973
+ );
20974
+ return null;
20975
+ }
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
+ );
20958
21009
  return null;
20959
21010
  }
20960
21011
  }
21012
+ /**
21013
+ * Maker addresses per price level, keyed by tick string. `getBook` levels are
21014
+ * aggregated by tick and carry NO maker (a level can be several makers), so
21015
+ * this reads the individual offers from the `{side}/quote` endpoint (which the
21016
+ * book endpoint lacks) and groups their makers by tick. `assets` should be the
21017
+ * book's total depth so the quote returns EVERY offer (it returns none when the
21018
+ * target exceeds depth). Best-effort: `{}` on any failure.
21019
+ */
21020
+ async getOfferMakers(marketId, side, assets) {
21021
+ const map = {};
21022
+ const url = `${this.baseUrl}/books/${marketId}/${side}/quote?assets=${assets}`;
21023
+ try {
21024
+ const res = await this.fetchImpl(url);
21025
+ if (!res.ok) return map;
21026
+ const json = await res.json();
21027
+ const d = json?.data ?? json;
21028
+ const takeable = Array.isArray(d?.takeable_offers) ? d.takeable_offers : [];
21029
+ for (const t of takeable) {
21030
+ const offer = t?.offer ?? {};
21031
+ const tick = String(offer?.tick ?? "");
21032
+ const maker = String(offer?.maker ?? "").toLowerCase();
21033
+ if (!tick || !/^0x[0-9a-f]{40}$/.test(maker)) continue;
21034
+ (map[tick] ??= []).push(maker);
21035
+ }
21036
+ } catch {
21037
+ }
21038
+ return map;
21039
+ }
20961
21040
  };
20962
21041
  function createMidnightBookSource(chainId, fetchImpl = fetch) {
20963
21042
  return new ApiBookSource(midnightApiBaseUrl(chainId), fetchImpl);
20964
21043
  }
20965
21044
 
20966
21045
  // src/lending/public-data/midnight/fetchPublic.ts
21046
+ var MIDNIGHT_BOOK_LEVELS = 20;
20967
21047
  var LKG_TTL_SEC = 30 * 60;
20968
- var lastGoodTop = /* @__PURE__ */ new Map();
20969
- async function fetchTopWithFallback(source, chainId, marketId, nowSec2) {
21048
+ var lastGood = /* @__PURE__ */ new Map();
21049
+ async function fetchTopAndBookWithFallback(source, chainId, marketId, nowSec5) {
20970
21050
  const key = `${chainId}:${marketId}`;
20971
- 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
+ }
20972
21058
  if (fresh) {
20973
- lastGoodTop.set(key, { top: fresh, at: nowSec2 });
20974
- 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 };
20975
21065
  }
20976
- const cached = lastGoodTop.get(key);
20977
- if (cached && nowSec2 - cached.at <= LKG_TTL_SEC) return cached.top;
20978
- return null;
21066
+ return { top: null, book: null };
20979
21067
  }
20980
21068
  async function fetchMidnightMarkets(chainId, source = createMidnightBookSource(chainId)) {
20981
21069
  const markets = midnightMarketsByChain(chainId);
20982
21070
  if (markets.length === 0) return [];
20983
- const nowSec2 = Math.floor(Date.now() / 1e3);
21071
+ const nowSec5 = Math.floor(Date.now() / 1e3);
20984
21072
  return Promise.all(
20985
- markets.map(async (config) => ({
20986
- config,
20987
- // Matured markets are emitted with zeroed rates/depth by the converter, so
20988
- // the book fetch is wasted — skip the upstream call for them.
20989
- top: Number(config.maturity) <= nowSec2 ? null : await fetchTopWithFallback(source, chainId, config.marketId, nowSec2)
20990
- }))
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
+ })
20991
21085
  );
20992
21086
  }
20993
21087
 
@@ -21106,7 +21200,7 @@ function convertMidnightMarketsToResponse(raw, chainId, prices = {}, _additional
21106
21200
  }, tokens = {}) {
21107
21201
  const out = {};
21108
21202
  const now = nowSec();
21109
- for (const { config, top } of raw) {
21203
+ for (const { config, top, book } of raw) {
21110
21204
  if (!config?.marketId || !config.loanToken) continue;
21111
21205
  const m = midnightLenderKey(config.marketId);
21112
21206
  const maturity = Number(config.maturity);
@@ -21243,6 +21337,12 @@ function convertMidnightMarketsToResponse(raw, chainId, prices = {}, _additional
21243
21337
  isFrozen: false
21244
21338
  };
21245
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;
21246
21346
  const primaryCollateral = config.collateralParams[0];
21247
21347
  entry.params = {
21248
21348
  market: {
@@ -21284,7 +21384,9 @@ function convertMidnightMarketsToResponse(raw, chainId, prices = {}, _additional
21284
21384
  },
21285
21385
  enterGate: config.enterGate,
21286
21386
  liquidatorGate: config.liquidatorGate,
21287
- collateralParams: config.collateralParams
21387
+ collateralParams: config.collateralParams,
21388
+ // Bounded top-of-book slice (top-N levels/side) for later filtering.
21389
+ book: marketBook
21288
21390
  }
21289
21391
  };
21290
21392
  entry.chainId = chainId;
@@ -21292,6 +21394,1175 @@ function convertMidnightMarketsToResponse(raw, chainId, prices = {}, _additional
21292
21394
  }
21293
21395
  return out;
21294
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
21782
+ }
21783
+ };
21784
+ entry.chainId = chainId;
21785
+ out[m] = entry;
21786
+ }
21787
+ return out;
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
+ }
21295
22566
 
21296
22567
  // src/lending/public-data/silo-v2/fetchPublic.ts
21297
22568
  var BASE_URL2 = "https://api-v3.silo.finance";
@@ -21889,12 +23160,16 @@ function convertDolomiteSubgraphMarkets(raw, chainId, prices, additionalYields,
21889
23160
  }
21890
23161
  return { data: result, chainId };
21891
23162
  }
21892
- var warn2 = (...args) => {
23163
+ var warn3 = (...args) => {
21893
23164
  };
21894
23165
  async function getLenderDataFromApi(lender, chainId, prices, additionalYields, includeUnlisted = false) {
21895
23166
  if (isMorphoType(lender))
21896
23167
  return await fetchMorphoMarkets(chainId, includeUnlisted);
21897
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);
21898
23173
  return {};
21899
23174
  }
21900
23175
  function convertLenderDataFromApi(lender, chainId, data, prices, additionalYields, list = {}) {
@@ -21908,6 +23183,38 @@ function convertLenderDataFromApi(lender, chainId, data, prices, additionalYield
21908
23183
  additionalYields,
21909
23184
  list
21910
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
+ );
21911
23218
  return {};
21912
23219
  }
21913
23220
  var getLenderPublicDataViaApi = async (chainId, lenders, prices, additionalYields, tokenList = async () => {
@@ -21948,7 +23255,7 @@ var getLenderPublicDataViaApi = async (chainId, lenders, prices, additionalYield
21948
23255
  const listResult = settled[0];
21949
23256
  const list = listResult.status === "fulfilled" ? listResult.value : {};
21950
23257
  if (listResult.status === "rejected") {
21951
- warn2(
23258
+ warn3(
21952
23259
  `[lending] tokenList fetch failed on chain ${chainId}:`,
21953
23260
  listResult.reason
21954
23261
  );
@@ -21970,13 +23277,13 @@ var getLenderPublicDataViaApi = async (chainId, lenders, prices, additionalYield
21970
23277
  if (converted[lk]) lenderData[lk] = converted[lk];
21971
23278
  }
21972
23279
  } catch (e) {
21973
- warn2(
23280
+ warn3(
21974
23281
  `[lending] Silo v2 API convert failed on chain ${chainId}:`,
21975
23282
  e?.message ?? e
21976
23283
  );
21977
23284
  }
21978
23285
  } else {
21979
- warn2(
23286
+ warn3(
21980
23287
  `[lending] Silo v2 API fetch failed on chain ${chainId}:`,
21981
23288
  siloV2Result.reason?.message ?? siloV2Result.reason
21982
23289
  );
@@ -21998,13 +23305,13 @@ var getLenderPublicDataViaApi = async (chainId, lenders, prices, additionalYield
21998
23305
  if (converted[lk]) lenderData[lk] = converted[lk];
21999
23306
  }
22000
23307
  } catch (e) {
22001
- warn2(
23308
+ warn3(
22002
23309
  `[lending] Silo v3 API convert failed on chain ${chainId}:`,
22003
23310
  e?.message ?? e
22004
23311
  );
22005
23312
  }
22006
23313
  } else {
22007
- warn2(
23314
+ warn3(
22008
23315
  `[lending] Silo v3 API fetch failed on chain ${chainId}:`,
22009
23316
  siloV3Result.reason?.message ?? siloV3Result.reason
22010
23317
  );
@@ -22014,7 +23321,7 @@ var getLenderPublicDataViaApi = async (chainId, lenders, prices, additionalYield
22014
23321
  try {
22015
23322
  const result = settled[i + 3];
22016
23323
  if (result.status === "rejected") {
22017
- warn2(
23324
+ warn3(
22018
23325
  `[lending] API fetch failed for ${otherLenders[i]} on chain ${chainId}:`,
22019
23326
  result.reason?.message ?? result.reason
22020
23327
  );
@@ -22058,13 +23365,13 @@ var getLenderPublicDataViaApi = async (chainId, lenders, prices, additionalYield
22058
23365
  );
22059
23366
  for (const lk of dolomiteLenders) lenderData[lk] = converted;
22060
23367
  } catch (e) {
22061
- warn2(
23368
+ warn3(
22062
23369
  `[lending] Dolomite subgraph convert failed on chain ${chainId}:`,
22063
23370
  e?.message ?? e
22064
23371
  );
22065
23372
  }
22066
23373
  } else if (dolomiteResult.status === "rejected") {
22067
- warn2(
23374
+ warn3(
22068
23375
  `[lending] Dolomite subgraph fetch failed on chain ${chainId}:`,
22069
23376
  dolomiteResult.reason?.message ?? dolomiteResult.reason
22070
23377
  );
@@ -22072,7 +23379,7 @@ var getLenderPublicDataViaApi = async (chainId, lenders, prices, additionalYield
22072
23379
  }
22073
23380
  return lenderData;
22074
23381
  };
22075
- var warn3 = (...args) => {
23382
+ var warn4 = (...args) => {
22076
23383
  };
22077
23384
  function lenderApiOnly(lender, chainId) {
22078
23385
  if (lender === Lender.MORPHO_BLUE) {
@@ -22092,6 +23399,10 @@ function lenderApiOnly(lender, chainId) {
22092
23399
  return true;
22093
23400
  }
22094
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;
22095
23406
  return false;
22096
23407
  }
22097
23408
  function lenderApiWithOnChainFallback(lender, chainId) {
@@ -22119,7 +23430,7 @@ var getLenderPublicDataAll = async (chainId, lenders, prices, additionalYields,
22119
23430
  includeUnlistedMorphoMarkets
22120
23431
  );
22121
23432
  } catch (e) {
22122
- warn3(
23433
+ warn4(
22123
23434
  `[lending] API fetch failed for chain ${chainId}:`,
22124
23435
  e?.message ?? e
22125
23436
  );
@@ -22142,7 +23453,7 @@ var getLenderPublicDataAll = async (chainId, lenders, prices, additionalYields,
22142
23453
  tokenList
22143
23454
  );
22144
23455
  } catch (e) {
22145
- warn3(
23456
+ warn4(
22146
23457
  `[lending] on-chain fetch failed for chain ${chainId}:`,
22147
23458
  e?.message ?? e
22148
23459
  );
@@ -22827,6 +24138,179 @@ var buildMidnightUserCall = (chainId, _lender, account) => {
22827
24138
  }
22828
24139
  return calls;
22829
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
+ };
22830
24314
 
22831
24315
  // src/lending/user-data/fetch-balances/prepare.ts
22832
24316
  async function buildUserCall(chainId, lender, account, params, getClient) {
@@ -22843,6 +24327,11 @@ async function buildUserCall(chainId, lender, account, params, getClient) {
22843
24327
  getClient
22844
24328
  );
22845
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);
22846
24335
  if (isCompoundV3Type(lender))
22847
24336
  return buildCompoundV3UserCall(chainId, lender, account);
22848
24337
  if (isEulerType(lender))
@@ -22865,10 +24354,14 @@ function organizeUserQueries(queries) {
22865
24354
  const morphos = queries.filter((q) => isMorphoType(q.lender));
22866
24355
  const gearbox = queries.filter((q) => isGearboxV3(q.lender));
22867
24356
  const midnight = queries.filter((q) => isMidnight(q.lender));
22868
- 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)
22869
24362
  return queries;
22870
24363
  const others = queries.filter(
22871
- (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)
22872
24365
  );
22873
24366
  const morphoBlue = morphos.filter((q) => q.lender.startsWith("MORPHO_BLUE"));
22874
24367
  const moolah = morphos.filter((q) => q.lender.startsWith("LISTA_DAO"));
@@ -22905,6 +24398,42 @@ function organizeUserQueries(queries) {
22905
24398
  assets: void 0
22906
24399
  });
22907
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
+ }
22908
24437
  return result;
22909
24438
  }
22910
24439
 
@@ -25225,6 +26754,593 @@ var getMidnightUserDataConverter = (_lender, chainId, account, meta) => {
25225
26754
  totalCalls
25226
26755
  ];
25227
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
+ };
25228
27344
 
25229
27345
  // src/lending/user-data/fetch-balances/parse.ts
25230
27346
  function getUserDataConverter(lender, chainId, account, params, meta) {
@@ -25248,6 +27364,14 @@ function getUserDataConverter(lender, chainId, account, params, meta) {
25248
27364
  );
25249
27365
  if (isMidnight(lender))
25250
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);
25251
27375
  if (isCompoundV3Type(lender))
25252
27376
  return getCompoundV3UserDataConverter(
25253
27377
  lender,
@@ -25421,9 +27545,9 @@ var MULTICALL_ADDRESS = {
25421
27545
  // src/utils/multicall.ts
25422
27546
  var { isArray } = lodash;
25423
27547
  var maxRetries = 3;
25424
- 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) => {
25425
27549
  try {
25426
- const provider = getEvmClient17(chainId, providerId);
27550
+ const provider = getEvmClient18(chainId, providerId);
25427
27551
  const abiIsArray = isArray(abi[0]);
25428
27552
  const returnData = await provider.multicall({
25429
27553
  allowFailure,
@@ -25449,7 +27573,7 @@ var multicallViemAbiArray = async (chainId, abi, calls, getEvmClient17, retry =
25449
27573
  chainId,
25450
27574
  abi,
25451
27575
  calls,
25452
- getEvmClient17,
27576
+ getEvmClient18,
25453
27577
  retry,
25454
27578
  providerId,
25455
27579
  retries,
@@ -25459,13 +27583,13 @@ var multicallViemAbiArray = async (chainId, abi, calls, getEvmClient17, retry =
25459
27583
  );
25460
27584
  }
25461
27585
  };
25462
- 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) => {
25463
27587
  if (poolSize <= 1) {
25464
27588
  return multicallViemAbiArray(
25465
27589
  chainId,
25466
27590
  abi,
25467
27591
  calls,
25468
- getEvmClient17,
27592
+ getEvmClient18,
25469
27593
  true,
25470
27594
  0,
25471
27595
  retries,
@@ -25488,7 +27612,7 @@ var multicallShardedAbiArray = async (chainId, abi, calls, getEvmClient17, poolS
25488
27612
  const results = new Array(contracts.length);
25489
27613
  const runBatch = async (batch, rpcId, attemptsLeft, size) => {
25490
27614
  try {
25491
- const provider = getEvmClient17(chainId, rpcId);
27615
+ const provider = getEvmClient18(chainId, rpcId);
25492
27616
  const returnData = await provider.multicall({
25493
27617
  allowFailure,
25494
27618
  batchSize: size,
@@ -30003,6 +32127,22 @@ var getAbi2 = (lender) => {
30003
32127
  return [...CometAbi, ...CometExtAbi, ...CometRewardsAbi];
30004
32128
  if (isMorphoType(lender)) return [...MorphoBlueAbi, ...MorphoLensAbi];
30005
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];
30006
32146
  if (isInit(lender)) return InitLensAbi;
30007
32147
  if (isEulerType(lender)) return accountLensAbi;
30008
32148
  if (isCompoundV2Type(lender))
@@ -30116,7 +32256,7 @@ function unflattenLenderData(pools) {
30116
32256
  }
30117
32257
  return result;
30118
32258
  }
30119
- 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) => {
30120
32260
  const queries = organizeUserQueries(queriesRaw);
30121
32261
  const builtCalls = await Promise.all(
30122
32262
  queries.map(async (query3) => {
@@ -30126,7 +32266,7 @@ var getLenderUserDataResult = async (chainId, queriesRaw, getEvmClient17, allowF
30126
32266
  query3.lender,
30127
32267
  query3.account,
30128
32268
  query3.params,
30129
- getEvmClient17
32269
+ getEvmClient18
30130
32270
  );
30131
32271
  return callData.map((call) => ({ call, abi: call.abi ?? abi }));
30132
32272
  })
@@ -30136,7 +32276,7 @@ var getLenderUserDataResult = async (chainId, queriesRaw, getEvmClient17, allowF
30136
32276
  chainId,
30137
32277
  calls.map((call) => call.abi),
30138
32278
  calls.map((call) => call.call),
30139
- getEvmClient17,
32279
+ getEvmClient18,
30140
32280
  concurrency,
30141
32281
  retries,
30142
32282
  allowFailure,
@@ -30556,7 +32696,7 @@ var MORPHO_API_CHAIN_IDS = {
30556
32696
  [Chain.UNICHAIN]: 130
30557
32697
  };
30558
32698
  var FETCH_TIMEOUT_MS = 3e3;
30559
- var CACHE_TTL_MS = 2e3;
32699
+ var CACHE_TTL_MS2 = 2e3;
30560
32700
  var buildSubgraphQuery = (account) => `
30561
32701
  {
30562
32702
  account(id: "${account.toLowerCase()}") {
@@ -30611,11 +32751,11 @@ async function fetchJsonWithProxyFallback(url, body, proxyConfig) {
30611
32751
  }
30612
32752
  var inflight = /* @__PURE__ */ new Map();
30613
32753
  var resolved = /* @__PURE__ */ new Map();
30614
- function cacheKey(chainId, account) {
32754
+ function cacheKey2(chainId, account) {
30615
32755
  return `${chainId}:${account.toLowerCase()}`;
30616
32756
  }
30617
32757
  async function dedupedFetch(chainId, account, loader) {
30618
- const key = cacheKey(chainId, account);
32758
+ const key = cacheKey2(chainId, account);
30619
32759
  const now = Date.now();
30620
32760
  const cached = resolved.get(key);
30621
32761
  if (cached && cached.expiresAt > now) {
@@ -30624,7 +32764,7 @@ async function dedupedFetch(chainId, account, loader) {
30624
32764
  const existing = inflight.get(key);
30625
32765
  if (existing) return existing;
30626
32766
  const promise = loader().then((value) => {
30627
- resolved.set(key, { value, expiresAt: Date.now() + CACHE_TTL_MS });
32767
+ resolved.set(key, { value, expiresAt: Date.now() + CACHE_TTL_MS2 });
30628
32768
  return value;
30629
32769
  }).finally(() => {
30630
32770
  inflight.delete(key);
@@ -30756,8 +32896,8 @@ function calculateOverallNetApr(totalDepositsUSD, totalDebtUSD, avgDepositApr, a
30756
32896
  return (totalDepositsUSD * avgDepositApr - totalDebtUSD * avgBorrowApr) / Math.abs(totalNetWorth) * (totalNetWorth > 0 ? 1 : -1);
30757
32897
  }
30758
32898
  function calculateWeightedAprs(items) {
30759
- const wa = (field6, weightField) => calculateWeightedAverage(
30760
- 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]) }))
30761
32901
  );
30762
32902
  return {
30763
32903
  apr: wa("apr", "nav"),
@@ -32027,8 +34167,8 @@ var rswethFetcher = {
32027
34167
  };
32028
34168
 
32029
34169
  // src/yields/intrinsic/annualizeRate.ts
32030
- var YEAR_SECONDS = 365 * 24 * 60 * 60;
32031
- 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;
32032
34172
  var annualizeRateDeltaPercent = (rateNow, rateThen, elapsedSeconds) => {
32033
34173
  const growth = typeof rateNow === "bigint" && typeof rateThen === "bigint" ? Number(rateNow - rateThen) / Number(rateThen) : Number(rateNow) / Number(rateThen) - 1;
32034
34174
  return annualizeGrowthPercent(growth, elapsedSeconds);
@@ -32496,8 +34636,8 @@ var TIMEOUT_MS = 8e3;
32496
34636
  var slisBnbFetcher = {
32497
34637
  label: "SLISBNB",
32498
34638
  fetch: async () => {
32499
- const nowSec2 = Math.floor(Date.now() / 1e3);
32500
- 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}`;
32501
34641
  const controller = new AbortController();
32502
34642
  const timer = setTimeout(() => controller.abort(), TIMEOUT_MS);
32503
34643
  try {
@@ -38779,10 +40919,10 @@ function createAssetArrayPerChain() {
38779
40919
  return assetsPerChain;
38780
40920
  }
38781
40921
  var RELEVANT_LENDING_ASSETS = () => createAssetArrayPerChain();
38782
- function createSimpleArrayPerChain(fork, field6 = void 0) {
40922
+ function createSimpleArrayPerChain(fork, field8 = void 0) {
38783
40923
  let pools = {};
38784
40924
  Object.entries(fork ?? {}).forEach(([b2, data]) => {
38785
- Object.entries(field6 ? data[field6] : data).forEach(
40925
+ Object.entries(field8 ? data[field8] : data).forEach(
38786
40926
  ([chainId, address]) => {
38787
40927
  if (!pools[chainId]) pools[chainId] = [];
38788
40928
  pools[chainId] = uniq2([...pools[chainId], { address, pool: b2 }]);
@@ -40991,9 +43131,9 @@ query EvkByAssets($assets: [Bytes!]!) {
40991
43131
  `;
40992
43132
  var ZERO = 0n;
40993
43133
  var RAY_TO_PERCENT3 = 1e25;
40994
- function readAddress2(field6) {
40995
- if (!field6) return void 0;
40996
- return field6.toLowerCase();
43134
+ function readAddress2(field8) {
43135
+ if (!field8) return void 0;
43136
+ return field8.toLowerCase();
40997
43137
  }
40998
43138
  function parseVaultFee(v) {
40999
43139
  if (v.performanceFee == null) return 0;
@@ -41427,7 +43567,7 @@ var Multicall3BalanceAbi = [
41427
43567
  outputs: [{ type: "uint256" }]
41428
43568
  }
41429
43569
  ];
41430
- var toBigInt11 = (v) => {
43570
+ var toBigInt12 = (v) => {
41431
43571
  if (v === void 0 || v === null) return void 0;
41432
43572
  if (typeof v === "bigint") return v;
41433
43573
  if (typeof v === "number") return BigInt(v);
@@ -41451,12 +43591,12 @@ var readerBeetsStS = (entry) => ({
41451
43591
  ],
41452
43592
  abis: [TotalSupplyAbi, BeetsStSAbi, BeetsStSAbi],
41453
43593
  parse: ([supply, rate, pool]) => {
41454
- const totalSupply = toBigInt11(supply);
41455
- const exchangeRate = toBigInt11(rate);
43594
+ const totalSupply = toBigInt12(supply);
43595
+ const exchangeRate = toBigInt12(rate);
41456
43596
  if (totalSupply === void 0 || exchangeRate === void 0) {
41457
43597
  return void 0;
41458
43598
  }
41459
- const liquidity = toBigInt11(pool);
43599
+ const liquidity = toBigInt12(pool);
41460
43600
  return {
41461
43601
  totalAssets: totalSupply * exchangeRate / ONE_E186,
41462
43602
  totalSupply,
@@ -41497,12 +43637,12 @@ var readerBenqiSavax = (entry) => ({
41497
43637
  ],
41498
43638
  abis: [TotalSupplyAbi, BenqiSavaxAbi, BenqiSavaxAbi],
41499
43639
  parse: ([supply, rate, totalPooled]) => {
41500
- const totalSupply = toBigInt11(supply);
41501
- const exchangeRate = toBigInt11(rate);
43640
+ const totalSupply = toBigInt12(supply);
43641
+ const exchangeRate = toBigInt12(rate);
41502
43642
  if (totalSupply === void 0 || exchangeRate === void 0) {
41503
43643
  return void 0;
41504
43644
  }
41505
- const totalAssets = toBigInt11(totalPooled) ?? totalSupply * exchangeRate / ONE_E186;
43645
+ const totalAssets = toBigInt12(totalPooled) ?? totalSupply * exchangeRate / ONE_E186;
41506
43646
  return {
41507
43647
  totalAssets,
41508
43648
  totalSupply,
@@ -41516,7 +43656,7 @@ var readerBgtWrapper1to1 = (entry) => ({
41516
43656
  calls: [{ address: entry.address, name: "totalSupply", params: [] }],
41517
43657
  abis: [TotalSupplyAbi],
41518
43658
  parse: ([supply]) => {
41519
- const totalSupply = toBigInt11(supply);
43659
+ const totalSupply = toBigInt12(supply);
41520
43660
  if (totalSupply === void 0) return void 0;
41521
43661
  return {
41522
43662
  totalAssets: totalSupply,
@@ -41545,8 +43685,8 @@ var readerDineroBeraEth = (entry) => ({
41545
43685
  ],
41546
43686
  abis: [TotalSupplyAbi, DineroBeraEthAbi],
41547
43687
  parse: ([supply, rate]) => {
41548
- const totalSupply = toBigInt11(supply);
41549
- const exchangeRate = toBigInt11(rate);
43688
+ const totalSupply = toBigInt12(supply);
43689
+ const exchangeRate = toBigInt12(rate);
41550
43690
  if (totalSupply === void 0 || exchangeRate === void 0) {
41551
43691
  return void 0;
41552
43692
  }
@@ -41567,9 +43707,9 @@ var readerErc4626 = (entry) => ({
41567
43707
  ],
41568
43708
  abis: [Erc4626ReadAbi, TotalSupplyAbi, Erc4626ReadAbi],
41569
43709
  parse: ([assets, supply, rate]) => {
41570
- const totalAssets = toBigInt11(assets);
41571
- const totalSupply = toBigInt11(supply);
41572
- const exchangeRate = toBigInt11(rate);
43710
+ const totalAssets = toBigInt12(assets);
43711
+ const totalSupply = toBigInt12(supply);
43712
+ const exchangeRate = toBigInt12(rate);
41573
43713
  if (totalAssets === void 0 || totalSupply === void 0 || exchangeRate === void 0) {
41574
43714
  return void 0;
41575
43715
  }
@@ -41584,9 +43724,9 @@ var readerErc4626PreviewRedeem = (entry) => ({
41584
43724
  ],
41585
43725
  abis: [Erc4626PreviewRedeemAbi, TotalSupplyAbi, Erc4626PreviewRedeemAbi],
41586
43726
  parse: ([assets, supply, rate]) => {
41587
- const totalAssets = toBigInt11(assets);
41588
- const totalSupply = toBigInt11(supply);
41589
- const exchangeRate = toBigInt11(rate);
43727
+ const totalAssets = toBigInt12(assets);
43728
+ const totalSupply = toBigInt12(supply);
43729
+ const exchangeRate = toBigInt12(rate);
41590
43730
  if (totalAssets === void 0 || totalSupply === void 0 || exchangeRate === void 0) {
41591
43731
  return void 0;
41592
43732
  }
@@ -41646,15 +43786,15 @@ var readerEtherFiWeEth = (entry) => {
41646
43786
  calls,
41647
43787
  abis,
41648
43788
  parse: (slice) => {
41649
- const totalSupply = toBigInt11(slice[0]);
41650
- const exchangeRate = toBigInt11(slice[1]);
43789
+ const totalSupply = toBigInt12(slice[0]);
43790
+ const exchangeRate = toBigInt12(slice[1]);
41651
43791
  if (totalSupply === void 0 || exchangeRate === void 0) {
41652
43792
  return void 0;
41653
43793
  }
41654
43794
  let liquidity;
41655
43795
  if (lp) {
41656
- const lpBalance = toBigInt11(slice[2]);
41657
- const locked = toBigInt11(slice[3]);
43796
+ const lpBalance = toBigInt12(slice[2]);
43797
+ const locked = toBigInt12(slice[3]);
41658
43798
  if (lpBalance !== void 0 && locked !== void 0) {
41659
43799
  liquidity = lpBalance > locked ? lpBalance - locked : 0n;
41660
43800
  }
@@ -41688,7 +43828,7 @@ var readerHyperbeatBeHype = (entry) => {
41688
43828
  calls: [{ address: entry.address, name: "totalSupply", params: [] }],
41689
43829
  abis: [TotalSupplyAbi],
41690
43830
  parse: ([supply]) => {
41691
- const totalSupply = toBigInt11(supply);
43831
+ const totalSupply = toBigInt12(supply);
41692
43832
  if (totalSupply === void 0) return void 0;
41693
43833
  return {
41694
43834
  totalAssets: totalSupply,
@@ -41705,8 +43845,8 @@ var readerHyperbeatBeHype = (entry) => {
41705
43845
  ],
41706
43846
  abis: [TotalSupplyAbi, HyperbeatStakingCoreAbi],
41707
43847
  parse: ([supply, rate]) => {
41708
- const totalSupply = toBigInt11(supply);
41709
- const exchangeRate = toBigInt11(rate);
43848
+ const totalSupply = toBigInt12(supply);
43849
+ const exchangeRate = toBigInt12(rate);
41710
43850
  if (totalSupply === void 0 || exchangeRate === void 0) {
41711
43851
  return void 0;
41712
43852
  }
@@ -41738,7 +43878,7 @@ var readerKelpRsEth = (entry) => {
41738
43878
  calls: [{ address: entry.address, name: "totalSupply", params: [] }],
41739
43879
  abis: [TotalSupplyAbi],
41740
43880
  parse: ([supply]) => {
41741
- const totalSupply = toBigInt11(supply);
43881
+ const totalSupply = toBigInt12(supply);
41742
43882
  if (totalSupply === void 0) return void 0;
41743
43883
  return {
41744
43884
  totalAssets: totalSupply,
@@ -41755,8 +43895,8 @@ var readerKelpRsEth = (entry) => {
41755
43895
  ],
41756
43896
  abis: [TotalSupplyAbi, KelpLrtOracleAbi],
41757
43897
  parse: ([supply, rate]) => {
41758
- const totalSupply = toBigInt11(supply);
41759
- const exchangeRate = toBigInt11(rate);
43898
+ const totalSupply = toBigInt12(supply);
43899
+ const exchangeRate = toBigInt12(rate);
41760
43900
  if (totalSupply === void 0 || exchangeRate === void 0) {
41761
43901
  return void 0;
41762
43902
  }
@@ -41788,7 +43928,7 @@ var readerKinetiqKHype = (entry) => {
41788
43928
  calls: [{ address: entry.address, name: "totalSupply", params: [] }],
41789
43929
  abis: [TotalSupplyAbi],
41790
43930
  parse: ([supply]) => {
41791
- const totalSupply = toBigInt11(supply);
43931
+ const totalSupply = toBigInt12(supply);
41792
43932
  if (totalSupply === void 0) return void 0;
41793
43933
  return {
41794
43934
  totalAssets: totalSupply,
@@ -41805,8 +43945,8 @@ var readerKinetiqKHype = (entry) => {
41805
43945
  ],
41806
43946
  abis: [TotalSupplyAbi, KinetiqStakingAccountantAbi],
41807
43947
  parse: ([supply, rate]) => {
41808
- const totalSupply = toBigInt11(supply);
41809
- const exchangeRate = toBigInt11(rate);
43948
+ const totalSupply = toBigInt12(supply);
43949
+ const exchangeRate = toBigInt12(rate);
41810
43950
  if (totalSupply === void 0 || exchangeRate === void 0) {
41811
43951
  return void 0;
41812
43952
  }
@@ -41846,12 +43986,12 @@ var readerLairStKaia = (entry) => ({
41846
43986
  ],
41847
43987
  abis: [TotalSupplyAbi, LairStKaiaAbi, LairStKaiaAbi],
41848
43988
  parse: ([supply, rate, totalStaking]) => {
41849
- const totalSupply = toBigInt11(supply);
41850
- const exchangeRate = toBigInt11(rate);
43989
+ const totalSupply = toBigInt12(supply);
43990
+ const exchangeRate = toBigInt12(rate);
41851
43991
  if (totalSupply === void 0 || exchangeRate === void 0) {
41852
43992
  return void 0;
41853
43993
  }
41854
- const totalAssets = toBigInt11(totalStaking) ?? totalSupply * exchangeRate / ONE_E186;
43994
+ const totalAssets = toBigInt12(totalStaking) ?? totalSupply * exchangeRate / ONE_E186;
41855
43995
  return {
41856
43996
  totalAssets,
41857
43997
  totalSupply,
@@ -41879,8 +44019,8 @@ var readerLidoWstEth = (entry) => ({
41879
44019
  ],
41880
44020
  abis: [TotalSupplyAbi, LidoWstEthAbi],
41881
44021
  parse: ([supply, rate]) => {
41882
- const totalSupply = toBigInt11(supply);
41883
- const exchangeRate = toBigInt11(rate);
44022
+ const totalSupply = toBigInt12(supply);
44023
+ const exchangeRate = toBigInt12(rate);
41884
44024
  if (totalSupply === void 0 || exchangeRate === void 0) {
41885
44025
  return void 0;
41886
44026
  }
@@ -41918,7 +44058,7 @@ var readerListaSlisBnb = (entry) => {
41918
44058
  calls: [{ address: entry.address, name: "totalSupply", params: [] }],
41919
44059
  abis: [TotalSupplyAbi],
41920
44060
  parse: ([supply]) => {
41921
- const totalSupply = toBigInt11(supply);
44061
+ const totalSupply = toBigInt12(supply);
41922
44062
  if (totalSupply === void 0) return void 0;
41923
44063
  return {
41924
44064
  totalAssets: totalSupply,
@@ -41936,12 +44076,12 @@ var readerListaSlisBnb = (entry) => {
41936
44076
  ],
41937
44077
  abis: [TotalSupplyAbi, ListaStakeManagerReadAbi, ListaStakeManagerReadAbi],
41938
44078
  parse: ([supply, rate, pooled]) => {
41939
- const totalSupply = toBigInt11(supply);
41940
- const exchangeRate = toBigInt11(rate);
44079
+ const totalSupply = toBigInt12(supply);
44080
+ const exchangeRate = toBigInt12(rate);
41941
44081
  if (totalSupply === void 0 || exchangeRate === void 0) {
41942
44082
  return void 0;
41943
44083
  }
41944
- const pooledBnb = toBigInt11(pooled);
44084
+ const pooledBnb = toBigInt12(pooled);
41945
44085
  const totalAssets = pooledBnb ?? totalSupply * exchangeRate / ONE_E186;
41946
44086
  return { totalAssets, totalSupply, exchangeRate };
41947
44087
  }
@@ -41967,7 +44107,7 @@ var readerMantleMEth = (entry) => {
41967
44107
  calls: [{ address: entry.address, name: "totalSupply", params: [] }],
41968
44108
  abis: [TotalSupplyAbi],
41969
44109
  parse: ([supply]) => {
41970
- const totalSupply = toBigInt11(supply);
44110
+ const totalSupply = toBigInt12(supply);
41971
44111
  if (totalSupply === void 0) return void 0;
41972
44112
  return {
41973
44113
  totalAssets: totalSupply,
@@ -41984,8 +44124,8 @@ var readerMantleMEth = (entry) => {
41984
44124
  ],
41985
44125
  abis: [TotalSupplyAbi, MantleStakingAbi],
41986
44126
  parse: ([supply, rate]) => {
41987
- const totalSupply = toBigInt11(supply);
41988
- const exchangeRate = toBigInt11(rate);
44127
+ const totalSupply = toBigInt12(supply);
44128
+ const exchangeRate = toBigInt12(rate);
41989
44129
  if (totalSupply === void 0 || exchangeRate === void 0) {
41990
44130
  return void 0;
41991
44131
  }
@@ -42006,7 +44146,7 @@ var readerOffChain = (entry) => {
42006
44146
  calls: [{ address: entry.address, name: "totalSupply", params: [] }],
42007
44147
  abis: [TotalSupplyAbi],
42008
44148
  parse: ([supply]) => {
42009
- const totalSupply = toBigInt11(supply);
44149
+ const totalSupply = toBigInt12(supply);
42010
44150
  if (totalSupply === void 0) return void 0;
42011
44151
  return {
42012
44152
  totalAssets: rescaleDecimals(totalSupply, shareDec, underlyingDec),
@@ -42040,7 +44180,7 @@ var readerRenzoEzEth = (entry) => {
42040
44180
  calls: [{ address: entry.address, name: "totalSupply", params: [] }],
42041
44181
  abis: [TotalSupplyAbi],
42042
44182
  parse: ([supply]) => {
42043
- const totalSupply = toBigInt11(supply);
44183
+ const totalSupply = toBigInt12(supply);
42044
44184
  if (totalSupply === void 0) return void 0;
42045
44185
  return {
42046
44186
  totalAssets: totalSupply,
@@ -42057,9 +44197,9 @@ var readerRenzoEzEth = (entry) => {
42057
44197
  ],
42058
44198
  abis: [TotalSupplyAbi, RenzoRestakeManagerAbi],
42059
44199
  parse: ([supply, tvls]) => {
42060
- const totalSupply = toBigInt11(supply);
44200
+ const totalSupply = toBigInt12(supply);
42061
44201
  if (totalSupply === void 0 || totalSupply === 0n) return void 0;
42062
- 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;
42063
44203
  if (totalTvl === void 0) return void 0;
42064
44204
  return {
42065
44205
  totalAssets: totalTvl,
@@ -42113,12 +44253,12 @@ var readerRocketReth = (entry) => {
42113
44253
  calls,
42114
44254
  abis,
42115
44255
  parse: (slice) => {
42116
- const totalSupply = toBigInt11(slice[0]);
42117
- const exchangeRate = toBigInt11(slice[1]);
44256
+ const totalSupply = toBigInt12(slice[0]);
44257
+ const exchangeRate = toBigInt12(slice[1]);
42118
44258
  if (totalSupply === void 0 || exchangeRate === void 0) {
42119
44259
  return void 0;
42120
44260
  }
42121
- const liquidity = depositPool ? toBigInt11(slice[2]) : void 0;
44261
+ const liquidity = depositPool ? toBigInt12(slice[2]) : void 0;
42122
44262
  return {
42123
44263
  totalAssets: totalSupply * exchangeRate / ONE_E186,
42124
44264
  totalSupply,
@@ -42157,7 +44297,7 @@ var readerStaderEthx = (entry) => {
42157
44297
  calls: [{ address: entry.address, name: "totalSupply", params: [] }],
42158
44298
  abis: [TotalSupplyAbi],
42159
44299
  parse: ([supply]) => {
42160
- const totalSupply = toBigInt11(supply);
44300
+ const totalSupply = toBigInt12(supply);
42161
44301
  if (totalSupply === void 0) return void 0;
42162
44302
  return {
42163
44303
  totalAssets: totalSupply,
@@ -42174,8 +44314,8 @@ var readerStaderEthx = (entry) => {
42174
44314
  ],
42175
44315
  abis: [TotalSupplyAbi, StaderEthxAbi],
42176
44316
  parse: ([supply, rate]) => {
42177
- const totalSupply = toBigInt11(supply);
42178
- const exchangeRate = toBigInt11(rate);
44317
+ const totalSupply = toBigInt12(supply);
44318
+ const exchangeRate = toBigInt12(rate);
42179
44319
  if (totalSupply === void 0 || exchangeRate === void 0) {
42180
44320
  return void 0;
42181
44321
  }
@@ -42203,10 +44343,10 @@ var readerStaderMaticX = (entry) => {
42203
44343
  ],
42204
44344
  abis: [TotalSupplyAbi, StaderMaticXAbi],
42205
44345
  parse: ([supply, tup]) => {
42206
- const totalSupply = toBigInt11(supply);
44346
+ const totalSupply = toBigInt12(supply);
42207
44347
  if (!Array.isArray(tup) || tup.length < 3) return void 0;
42208
- const amountInMatic = toBigInt11(tup[0]);
42209
- const totalPooledMatic = toBigInt11(tup[2]);
44348
+ const amountInMatic = toBigInt12(tup[0]);
44349
+ const totalPooledMatic = toBigInt12(tup[2]);
42210
44350
  if (totalSupply === void 0 || amountInMatic === void 0) {
42211
44351
  return void 0;
42212
44352
  }
@@ -42239,7 +44379,7 @@ var readerStakeWiseOsEth = (entry) => {
42239
44379
  calls: [{ address: entry.address, name: "totalSupply", params: [] }],
42240
44380
  abis: [TotalSupplyAbi],
42241
44381
  parse: ([supply]) => {
42242
- const totalSupply = toBigInt11(supply);
44382
+ const totalSupply = toBigInt12(supply);
42243
44383
  if (totalSupply === void 0) return void 0;
42244
44384
  return {
42245
44385
  totalAssets: totalSupply,
@@ -42256,8 +44396,8 @@ var readerStakeWiseOsEth = (entry) => {
42256
44396
  ],
42257
44397
  abis: [TotalSupplyAbi, StakeWiseOsTokenAbi],
42258
44398
  parse: ([supply, rate]) => {
42259
- const totalSupply = toBigInt11(supply);
42260
- const exchangeRate = toBigInt11(rate);
44399
+ const totalSupply = toBigInt12(supply);
44400
+ const exchangeRate = toBigInt12(rate);
42261
44401
  if (totalSupply === void 0 || exchangeRate === void 0) {
42262
44402
  return void 0;
42263
44403
  }
@@ -42289,7 +44429,7 @@ var readerStCelo = (entry) => {
42289
44429
  calls: [{ address: entry.address, name: "totalSupply", params: [] }],
42290
44430
  abis: [TotalSupplyAbi],
42291
44431
  parse: ([supply]) => {
42292
- const totalSupply = toBigInt11(supply);
44432
+ const totalSupply = toBigInt12(supply);
42293
44433
  if (totalSupply === void 0) return void 0;
42294
44434
  return {
42295
44435
  totalAssets: totalSupply,
@@ -42306,8 +44446,8 @@ var readerStCelo = (entry) => {
42306
44446
  ],
42307
44447
  abis: [TotalSupplyAbi, StCeloManagerAbi],
42308
44448
  parse: ([supply, rate]) => {
42309
- const totalSupply = toBigInt11(supply);
42310
- const exchangeRate = toBigInt11(rate);
44449
+ const totalSupply = toBigInt12(supply);
44450
+ const exchangeRate = toBigInt12(rate);
42311
44451
  if (totalSupply === void 0 || exchangeRate === void 0) {
42312
44452
  return void 0;
42313
44453
  }
@@ -42339,8 +44479,8 @@ var readerSwellGetRate = (entry) => ({
42339
44479
  ],
42340
44480
  abis: [TotalSupplyAbi, SwellGetRateAbi],
42341
44481
  parse: ([supply, rate]) => {
42342
- const totalSupply = toBigInt11(supply);
42343
- const exchangeRate = toBigInt11(rate);
44482
+ const totalSupply = toBigInt12(supply);
44483
+ const exchangeRate = toBigInt12(rate);
42344
44484
  if (totalSupply === void 0 || exchangeRate === void 0) {
42345
44485
  return void 0;
42346
44486
  }
@@ -42371,7 +44511,7 @@ var readerValantisWstHype = (entry) => {
42371
44511
  calls: [{ address: entry.address, name: "totalSupply", params: [] }],
42372
44512
  abis: [TotalSupplyAbi],
42373
44513
  parse: ([supply]) => {
42374
- const totalSupply = toBigInt11(supply);
44514
+ const totalSupply = toBigInt12(supply);
42375
44515
  if (totalSupply === void 0) return void 0;
42376
44516
  return {
42377
44517
  totalAssets: totalSupply,
@@ -42388,8 +44528,8 @@ var readerValantisWstHype = (entry) => {
42388
44528
  ],
42389
44529
  abis: [TotalSupplyAbi, ValantisStHypeAbi],
42390
44530
  parse: ([supply, rate]) => {
42391
- const totalSupply = toBigInt11(supply);
42392
- const exchangeRate = toBigInt11(rate);
44531
+ const totalSupply = toBigInt12(supply);
44532
+ const exchangeRate = toBigInt12(rate);
42393
44533
  if (totalSupply === void 0 || exchangeRate === void 0) {
42394
44534
  return void 0;
42395
44535
  }
@@ -42423,7 +44563,7 @@ var readerVedaAccountant = (entry) => {
42423
44563
  calls: [{ address: entry.address, name: "totalSupply", params: [] }],
42424
44564
  abis: [TotalSupplyAbi],
42425
44565
  parse: ([supply]) => {
42426
- const totalSupply = toBigInt11(supply);
44566
+ const totalSupply = toBigInt12(supply);
42427
44567
  if (totalSupply === void 0) return void 0;
42428
44568
  return {
42429
44569
  totalAssets: rescaleDecimals(totalSupply, shareDec, underlyingDec),
@@ -42441,8 +44581,8 @@ var readerVedaAccountant = (entry) => {
42441
44581
  ],
42442
44582
  abis: [TotalSupplyAbi, VedaAccountantGetRateAbi],
42443
44583
  parse: ([supply, rate]) => {
42444
- const totalSupply = toBigInt11(supply);
42445
- const rawRate = toBigInt11(rate);
44584
+ const totalSupply = toBigInt12(supply);
44585
+ const rawRate = toBigInt12(rate);
42446
44586
  if (totalSupply === void 0 || rawRate === void 0) return void 0;
42447
44587
  const exchangeRate = rawRate * scale;
42448
44588
  return {
@@ -42477,8 +44617,8 @@ var readerAnkrRatio = (entry) => ({
42477
44617
  ],
42478
44618
  abis: [TotalSupplyAbi, AnkrRatioAbi],
42479
44619
  parse: ([supply, ratio]) => {
42480
- const totalSupply = toBigInt11(supply);
42481
- const r = toBigInt11(ratio);
44620
+ const totalSupply = toBigInt12(supply);
44621
+ const r = toBigInt12(ratio);
42482
44622
  if (totalSupply === void 0 || r === void 0 || r === 0n) {
42483
44623
  return void 0;
42484
44624
  }
@@ -42521,8 +44661,8 @@ var readerCoreEarnRate = (entry) => {
42521
44661
  ],
42522
44662
  abis: [CoreEarnRateAbi, TotalSupplyAbi],
42523
44663
  parse: ([rate, supply]) => {
42524
- const r = toBigInt11(rate);
42525
- const totalSupply = toBigInt11(supply);
44664
+ const r = toBigInt12(rate);
44665
+ const totalSupply = toBigInt12(supply);
42526
44666
  if (r === void 0 || r === 0n || totalSupply === void 0) {
42527
44667
  return void 0;
42528
44668
  }
@@ -42543,8 +44683,8 @@ var readerCoreStakedRatio = (entry) => {
42543
44683
  ],
42544
44684
  abis: [CoreTotalStakedAbi, TotalSupplyAbi],
42545
44685
  parse: ([staked, supply]) => {
42546
- const totalStaked = toBigInt11(staked);
42547
- const totalSupply = toBigInt11(supply);
44686
+ const totalStaked = toBigInt12(staked);
44687
+ const totalSupply = toBigInt12(supply);
42548
44688
  if (totalStaked === void 0 || totalSupply === void 0 || totalSupply === 0n) {
42549
44689
  return void 0;
42550
44690
  }
@@ -42588,12 +44728,12 @@ var readerStellaStDot = (entry) => ({
42588
44728
  ],
42589
44729
  abis: [TotalSupplyAbi, StellaStDotAbi, StellaStDotAbi],
42590
44730
  parse: ([supply, rate, pooled]) => {
42591
- const totalSupply = toBigInt11(supply);
42592
- const exchangeRate = toBigInt11(rate);
44731
+ const totalSupply = toBigInt12(supply);
44732
+ const exchangeRate = toBigInt12(rate);
42593
44733
  if (totalSupply === void 0 || exchangeRate === void 0) {
42594
44734
  return void 0;
42595
44735
  }
42596
- const totalAssets = toBigInt11(pooled) ?? totalSupply * exchangeRate / ONE_E186;
44736
+ const totalAssets = toBigInt12(pooled) ?? totalSupply * exchangeRate / ONE_E186;
42597
44737
  return {
42598
44738
  totalAssets,
42599
44739
  totalSupply,
@@ -42628,8 +44768,8 @@ var readerKintsuSMon = (entry) => ({
42628
44768
  ],
42629
44769
  abis: [KintsuSMonAbi, KintsuSMonAbi],
42630
44770
  parse: ([pooled, shares]) => {
42631
- const totalAssets = toBigInt11(pooled);
42632
- const totalSupply = toBigInt11(shares);
44771
+ const totalAssets = toBigInt12(pooled);
44772
+ const totalSupply = toBigInt12(shares);
42633
44773
  if (totalAssets === void 0 || totalSupply === void 0) return void 0;
42634
44774
  const exchangeRate = totalSupply > 0n ? totalAssets * ONE_E186 / totalSupply : ONE_E186;
42635
44775
  return { totalAssets, totalSupply, exchangeRate };
@@ -43150,7 +45290,7 @@ var fetchLstShareTokens = async (chainId, multicallRetry, prices = {}, tokenList
43150
45290
  const validatorsByAddress = new Map(validatorEntries);
43151
45291
  const idleByAddress = /* @__PURE__ */ new Map();
43152
45292
  idleEntries.forEach((e, i) => {
43153
- const bal = toBigInt11(idleResults[i]);
45293
+ const bal = toBigInt12(idleResults[i]);
43154
45294
  if (bal !== void 0) idleByAddress.set(e.address.toLowerCase(), bal);
43155
45295
  });
43156
45296
  const rawResults = new Array(allCalls.length);
@@ -43280,7 +45420,7 @@ var BeetsStSWithdrawalAbi = [
43280
45420
  ];
43281
45421
 
43282
45422
  // src/vaults/lst/withdrawals/readers/shared.ts
43283
- var toBigInt12 = (v) => {
45423
+ var toBigInt13 = (v) => {
43284
45424
  if (v === void 0 || v === null) return void 0;
43285
45425
  if (typeof v === "bigint") return v;
43286
45426
  if (typeof v === "number") return BigInt(v);
@@ -43295,7 +45435,7 @@ var toBigInt12 = (v) => {
43295
45435
  return void 0;
43296
45436
  };
43297
45437
  var toNumber = (v) => {
43298
- const b = toBigInt12(v);
45438
+ const b = toBigInt13(v);
43299
45439
  if (b === void 0) return void 0;
43300
45440
  if (b > BigInt(Number.MAX_SAFE_INTEGER)) return void 0;
43301
45441
  return Number(b);
@@ -43332,7 +45472,7 @@ var readerBeets = {
43332
45472
  const out = [];
43333
45473
  for (let i = 0; i < reqs.length; i++) {
43334
45474
  const r = reqs[i];
43335
- const amount = toBigInt12(r.assetAmount);
45475
+ const amount = toBigInt13(r.assetAmount);
43336
45476
  const ts = toNumber(r.requestTimestamp);
43337
45477
  const isWithdrawn = Boolean(r.isWithdrawn);
43338
45478
  if (amount === void 0 || ts === void 0) continue;
@@ -43424,13 +45564,13 @@ var readerBeHype = {
43424
45564
  const q = stage2[i * 2];
43425
45565
  const canClaim = Boolean(stage2[i * 2 + 1]);
43426
45566
  if (!q) continue;
43427
- const hypeAmount = Array.isArray(q) ? toBigInt12(q[2]) : toBigInt12(q.hypeAmount);
45567
+ const hypeAmount = Array.isArray(q) ? toBigInt13(q[2]) : toBigInt13(q.hypeAmount);
43428
45568
  if (hypeAmount === void 0) continue;
43429
45569
  out.push({
43430
45570
  lst: entry.lst,
43431
45571
  brand: entry.brand,
43432
45572
  symbol: entry.symbol,
43433
- requestId: String(toBigInt12(ids[i]) ?? i),
45573
+ requestId: String(toBigInt13(ids[i]) ?? i),
43434
45574
  amountUnderlying: hypeAmount.toString(),
43435
45575
  status: canClaim ? "claimable" : "pending"
43436
45576
  });
@@ -43533,7 +45673,7 @@ var readerBenqi = {
43533
45673
  for (let i = 0; i < reqs.length; i++) {
43534
45674
  const r = reqs[i];
43535
45675
  const startedAt = toNumber(r.startedAt);
43536
- const shareAmount = toBigInt12(r.shareAmount);
45676
+ const shareAmount = toBigInt13(r.shareAmount);
43537
45677
  if (startedAt === void 0 || shareAmount === void 0) continue;
43538
45678
  const readyAt = startedAt + cooldown;
43539
45679
  const expiresAt = readyAt + claimWindow;
@@ -43596,8 +45736,8 @@ var readerBeraPaw = {
43596
45736
  }
43597
45737
  const pos = res[0];
43598
45738
  if (!pos) return [];
43599
- const queued = Array.isArray(pos) ? toBigInt12(pos[0]) : toBigInt12(pos.queued);
43600
- 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);
43601
45741
  const out = [];
43602
45742
  if (available !== void 0 && available > 0n) {
43603
45743
  out.push({
@@ -43679,7 +45819,7 @@ var readerIbera = {
43679
45819
  return [];
43680
45820
  }
43681
45821
  const length = toNumber(stage1[0]) ?? 0;
43682
- const frontier = toBigInt12(stage1[1]) ?? 0n;
45822
+ const frontier = toBigInt13(stage1[1]) ?? 0n;
43683
45823
  if (length === 0) return [];
43684
45824
  const start = length > MAX_SCAN ? length - MAX_SCAN : 0;
43685
45825
  const ids = Array.from({ length: length - start }, (_3, k) => start + k);
@@ -43703,7 +45843,7 @@ var readerIbera = {
43703
45843
  const r = stage2[k];
43704
45844
  if (!r) continue;
43705
45845
  const receiver = Array.isArray(r) ? r[2] : r.receiver;
43706
- const amount = Array.isArray(r) ? toBigInt12(r[3]) : toBigInt12(r.amount);
45846
+ const amount = Array.isArray(r) ? toBigInt13(r[3]) : toBigInt13(r.amount);
43707
45847
  if (typeof receiver !== "string" || receiver.toLowerCase() !== target || amount === void 0 || amount === 0n) {
43708
45848
  continue;
43709
45849
  }
@@ -43776,7 +45916,7 @@ var readerPrimeStaking = {
43776
45916
  return [];
43777
45917
  }
43778
45918
  const length = toNumber(stage1[0]) ?? 0;
43779
- const frontier = toBigInt12(stage1[1]) ?? 0n;
45919
+ const frontier = toBigInt13(stage1[1]) ?? 0n;
43780
45920
  if (length === 0) return [];
43781
45921
  const start = length > MAX_SCAN2 ? length - MAX_SCAN2 : 0;
43782
45922
  const ids = Array.from({ length: length - start }, (_3, k) => start + k);
@@ -43800,7 +45940,7 @@ var readerPrimeStaking = {
43800
45940
  const r = stage2[k];
43801
45941
  if (!r) continue;
43802
45942
  const receiver = Array.isArray(r) ? r[1] : r.receiver;
43803
- const assets = Array.isArray(r) ? toBigInt12(r[3]) : toBigInt12(r.assets);
45943
+ const assets = Array.isArray(r) ? toBigInt13(r[3]) : toBigInt13(r.assets);
43804
45944
  const processed = Array.isArray(r) ? r[4] : r.processed;
43805
45945
  if (typeof receiver !== "string" || receiver.toLowerCase() !== target || assets === void 0 || assets === 0n) {
43806
45946
  continue;
@@ -43870,8 +46010,8 @@ var readerErc7540 = {
43870
46010
  ],
43871
46011
  abi: [Erc7540Abi, Erc7540Abi]
43872
46012
  });
43873
- const pending = toBigInt12(stage1[0]) ?? 0n;
43874
- const claimable = toBigInt12(stage1[1]) ?? 0n;
46013
+ const pending = toBigInt13(stage1[0]) ?? 0n;
46014
+ const claimable = toBigInt13(stage1[1]) ?? 0n;
43875
46015
  const out = [];
43876
46016
  if (claimable > 0n) {
43877
46017
  const stage2 = await multicallRetry({
@@ -43885,7 +46025,7 @@ var readerErc7540 = {
43885
46025
  ],
43886
46026
  abi: [Erc7540Abi]
43887
46027
  });
43888
- const amount = toBigInt12(stage2[0]) ?? claimable;
46028
+ const amount = toBigInt13(stage2[0]) ?? claimable;
43889
46029
  out.push({
43890
46030
  lst: entry.lst,
43891
46031
  brand: entry.brand,
@@ -43939,11 +46079,11 @@ var readerEthenaCooldown = {
43939
46079
  let cooldownEnd;
43940
46080
  let amount;
43941
46081
  if (Array.isArray(cell)) {
43942
- cooldownEnd = toBigInt12(cell[0]);
43943
- amount = toBigInt12(cell[1]);
46082
+ cooldownEnd = toBigInt13(cell[0]);
46083
+ amount = toBigInt13(cell[1]);
43944
46084
  } else if (cell && typeof cell === "object") {
43945
- cooldownEnd = toBigInt12(cell.cooldownEnd);
43946
- amount = toBigInt12(cell.underlyingAmount);
46085
+ cooldownEnd = toBigInt13(cell.cooldownEnd);
46086
+ amount = toBigInt13(cell.underlyingAmount);
43947
46087
  }
43948
46088
  if (!amount || amount === 0n) return [];
43949
46089
  const readyAt = Number(cooldownEnd ?? 0n);
@@ -44038,7 +46178,7 @@ var readerEtherFi = {
44038
46178
  calls: enumCalls,
44039
46179
  abi: enumCalls.map(() => EtherFiWithdrawRequestAbi)
44040
46180
  });
44041
- const ids = stage2.map(toBigInt12).filter((v) => v !== void 0);
46181
+ const ids = stage2.map(toBigInt13).filter((v) => v !== void 0);
44042
46182
  if (ids.length === 0) return [];
44043
46183
  const detailCalls = ids.flatMap((id) => [
44044
46184
  { address: entry.withdrawalContract, name: "getRequest", params: [id] },
@@ -44058,7 +46198,7 @@ var readerEtherFi = {
44058
46198
  const isValid = Boolean(stage3[i * 3 + 2]);
44059
46199
  if (!req) continue;
44060
46200
  if (!isValid) continue;
44061
- const amount = toBigInt12(req.amountOfEEth);
46201
+ const amount = toBigInt13(req.amountOfEEth);
44062
46202
  if (amount === void 0) continue;
44063
46203
  out.push({
44064
46204
  lst: entry.lst,
@@ -44153,7 +46293,7 @@ var readerKelp = {
44153
46293
  }
44154
46294
  ],
44155
46295
  abi: [KelpWithdrawalManagerAbi]
44156
- }).then((res) => toBigInt12(res[0]) ?? 0n)
46296
+ }).then((res) => toBigInt13(res[0]) ?? 0n)
44157
46297
  ]);
44158
46298
  lengths = storageReads;
44159
46299
  currentBlock = block;
@@ -44183,9 +46323,9 @@ var readerKelp = {
44183
46323
  for (let i = 0; i < detailCalls.length; i++) {
44184
46324
  const r = stage2[i];
44185
46325
  if (!r) continue;
44186
- const expected = Array.isArray(r) ? toBigInt12(r[1]) : toBigInt12(r.expectedAssetAmount);
44187
- const startBlock = Array.isArray(r) ? toBigInt12(r[2]) : toBigInt12(r.withdrawalStartBlock);
44188
- 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);
44189
46329
  if (expected === void 0 || startBlock === void 0) continue;
44190
46330
  const claimable = currentBlock >= startBlock + delayBlocks;
44191
46331
  out.push({
@@ -44262,7 +46402,7 @@ var readerLido = {
44262
46402
  abi: [LidoWithdrawalQueueAbi, LidoWithdrawalQueueAbi]
44263
46403
  });
44264
46404
  const ids = stage1[0];
44265
- const frontier = toBigInt12(stage1[1]) ?? 0n;
46405
+ const frontier = toBigInt13(stage1[1]) ?? 0n;
44266
46406
  if (!Array.isArray(ids) || ids.length === 0) return [];
44267
46407
  const stage2 = await multicallRetry({
44268
46408
  chain: chainId,
@@ -44279,10 +46419,10 @@ var readerLido = {
44279
46419
  if (!Array.isArray(statuses)) return [];
44280
46420
  const out = [];
44281
46421
  for (let i = 0; i < ids.length; i++) {
44282
- const id = toBigInt12(ids[i]);
46422
+ const id = toBigInt13(ids[i]);
44283
46423
  const s = statuses[i];
44284
46424
  if (id === void 0 || !s) continue;
44285
- const amountOfStETH = toBigInt12(s.amountOfStETH);
46425
+ const amountOfStETH = toBigInt13(s.amountOfStETH);
44286
46426
  const isFinalized = Boolean(s.isFinalized);
44287
46427
  const isClaimed = Boolean(s.isClaimed);
44288
46428
  if (amountOfStETH === void 0) continue;
@@ -44391,11 +46531,11 @@ var readerLista = {
44391
46531
  const status = stage2[i];
44392
46532
  if (!status) continue;
44393
46533
  const isClaimable = Array.isArray(status) ? Boolean(status[0]) : Boolean(status._isClaimable);
44394
- const bnbAmount = Array.isArray(status) ? toBigInt12(status[1]) : toBigInt12(status._amount);
44395
- 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);
44396
46536
  const amount = bnbAmount ?? snbnbAmount;
44397
46537
  if (amount === void 0) continue;
44398
- const uuid = Array.isArray(req) ? toBigInt12(req[0]) : toBigInt12(req?.uuid);
46538
+ const uuid = Array.isArray(req) ? toBigInt13(req[0]) : toBigInt13(req?.uuid);
44399
46539
  out.push({
44400
46540
  lst: entry.lst,
44401
46541
  brand: entry.brand,
@@ -44480,7 +46620,7 @@ var readerRenzo = {
44480
46620
  for (let i = 0; i < count; i++) {
44481
46621
  const tup = stage2[i];
44482
46622
  if (!Array.isArray(tup) || tup.length < 5) continue;
44483
- const amountToRedeem = toBigInt12(tup[2]);
46623
+ const amountToRedeem = toBigInt13(tup[2]);
44484
46624
  const createdAt = toNumber(tup[4]);
44485
46625
  if (amountToRedeem === void 0 || createdAt === void 0) continue;
44486
46626
  const readyAt = createdAt + cooldown;
@@ -44553,9 +46693,9 @@ var readerStaderEthx2 = {
44553
46693
  ]
44554
46694
  });
44555
46695
  const ids = stage1[0];
44556
- const frontier = toBigInt12(stage1[1]) ?? 0n;
46696
+ const frontier = toBigInt13(stage1[1]) ?? 0n;
44557
46697
  if (!Array.isArray(ids) || ids.length === 0) return [];
44558
- const idBigInts = ids.map(toBigInt12).filter((v) => v !== void 0);
46698
+ const idBigInts = ids.map(toBigInt13).filter((v) => v !== void 0);
44559
46699
  const detailCalls = idBigInts.map((id) => ({
44560
46700
  address: entry.withdrawalContract,
44561
46701
  name: "userWithdrawRequests",
@@ -44571,8 +46711,8 @@ var readerStaderEthx2 = {
44571
46711
  const id = idBigInts[i];
44572
46712
  const tup = stage2[i];
44573
46713
  if (!Array.isArray(tup) || tup.length < 5) continue;
44574
- const ethExpected = toBigInt12(tup[2]) ?? 0n;
44575
- const ethFinalized = toBigInt12(tup[3]) ?? 0n;
46714
+ const ethExpected = toBigInt13(tup[2]) ?? 0n;
46715
+ const ethFinalized = toBigInt13(tup[3]) ?? 0n;
44576
46716
  const isFinalized = id < frontier && ethFinalized > 0n;
44577
46717
  const queuePosition = isFinalized ? 0 : Number(id - frontier);
44578
46718
  out.push({
@@ -44651,13 +46791,13 @@ var readerStaderMaticX2 = {
44651
46791
  });
44652
46792
  const arr = stage1[0];
44653
46793
  if (!Array.isArray(arr)) return [];
44654
- const currentEpoch = stakeManager ? toBigInt12(stage1[1]) ?? 0n : 0n;
44655
- 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;
44656
46796
  const out = [];
44657
46797
  for (let i = 0; i < arr.length; i++) {
44658
46798
  const r = arr[i];
44659
- const amount = toBigInt12(r.amount) ?? 0n;
44660
- const requestEpoch = toBigInt12(r.requestEpoch);
46799
+ const amount = toBigInt13(r.amount) ?? 0n;
46800
+ const requestEpoch = toBigInt13(r.requestEpoch);
44661
46801
  if (requestEpoch === void 0) continue;
44662
46802
  const ready = stakeManager ? currentEpoch >= requestEpoch + delay : false;
44663
46803
  out.push({
@@ -44744,9 +46884,9 @@ var readerMantle = {
44744
46884
  if (typeof requester === "string" && requester.toLowerCase() !== lcUser) {
44745
46885
  continue;
44746
46886
  }
44747
- const ethRequested = Array.isArray(detail) ? toBigInt12(detail[3]) : toBigInt12(detail.ethRequested);
46887
+ const ethRequested = Array.isArray(detail) ? toBigInt13(detail[3]) : toBigInt13(detail.ethRequested);
44748
46888
  const isFinalized = Array.isArray(info) ? Boolean(info[0]) : Boolean(info.isFinalized);
44749
- const claimable = Array.isArray(info) ? toBigInt12(info[1]) : toBigInt12(info.claimableAmount);
46889
+ const claimable = Array.isArray(info) ? toBigInt13(info[1]) : toBigInt13(info.claimableAmount);
44750
46890
  if (ethRequested === void 0) continue;
44751
46891
  out.push({
44752
46892
  lst: entry.lst,
@@ -44825,8 +46965,8 @@ var readerPuffer = {
44825
46965
  calls,
44826
46966
  abi: calls.map(() => PufferWithdrawalManagerAbi)
44827
46967
  });
44828
- const finalizedBatch = toBigInt12(results[detailCalls.length]) ?? 0n;
44829
- 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;
44830
46970
  const out = [];
44831
46971
  const lcUser = user.toLowerCase();
44832
46972
  for (let i = 0; i < ids.length; i++) {
@@ -44836,7 +46976,7 @@ var readerPuffer = {
44836
46976
  if (typeof recipient === "string" && recipient.toLowerCase() !== lcUser) {
44837
46977
  continue;
44838
46978
  }
44839
- const pufETHAmount = Array.isArray(d) ? toBigInt12(d[0]) : toBigInt12(d.pufETHAmount);
46979
+ const pufETHAmount = Array.isArray(d) ? toBigInt13(d[0]) : toBigInt13(d.pufETHAmount);
44840
46980
  if (pufETHAmount === void 0) continue;
44841
46981
  const batchIdx = batchSize > 0n ? ids[i] / batchSize : 0n;
44842
46982
  const claimable = batchIdx <= finalizedBatch;
@@ -44934,7 +47074,7 @@ var readerKinetiq = {
44934
47074
  for (let i = 0; i < count; i++) {
44935
47075
  const r = stage2[i];
44936
47076
  if (!r) continue;
44937
- const hypeAmount = Array.isArray(r) ? toBigInt12(r[0]) : toBigInt12(r.hypeAmount);
47077
+ const hypeAmount = Array.isArray(r) ? toBigInt13(r[0]) : toBigInt13(r.hypeAmount);
44938
47078
  const timestamp = Array.isArray(r) ? toNumber(r[4]) : toNumber(r.timestamp);
44939
47079
  if (hypeAmount === void 0 || hypeAmount === 0n || timestamp === void 0) {
44940
47080
  continue;
@@ -45062,7 +47202,7 @@ var readerStakeWise = {
45062
47202
  const claimedByIdx = /* @__PURE__ */ new Map();
45063
47203
  for (let i = 0; i < onChainChecks.length; i++) {
45064
47204
  const cell = checkResults[i];
45065
- const claimed = Array.isArray(cell) ? toBigInt12(cell[2]) : toBigInt12(cell?.claimedAssets);
47205
+ const claimed = Array.isArray(cell) ? toBigInt13(cell[2]) : toBigInt13(cell?.claimedAssets);
45066
47206
  if (claimed !== void 0 && claimed > 0n) {
45067
47207
  claimedByIdx.set(onChainChecks[i].idx, claimed);
45068
47208
  }
@@ -45070,7 +47210,7 @@ var readerStakeWise = {
45070
47210
  const out = [];
45071
47211
  for (let i = 0; i < requests.length; i++) {
45072
47212
  const r = requests[i];
45073
- const amount = toBigInt12(r.totalAssets) ?? 0n;
47213
+ const amount = toBigInt13(r.totalAssets) ?? 0n;
45074
47214
  const onChainClaimed = claimedByIdx.get(i);
45075
47215
  const claimable = onChainClaimed !== void 0 || r.isClaimable;
45076
47216
  out.push({
@@ -45127,7 +47267,7 @@ var readerStCelo2 = {
45127
47267
  const timestamps = cell[1] ?? [];
45128
47268
  const out = [];
45129
47269
  for (let i = 0; i < values.length; i++) {
45130
- const amount = toBigInt12(values[i]);
47270
+ const amount = toBigInt13(values[i]);
45131
47271
  const readyAt = toNumber(timestamps[i]);
45132
47272
  if (amount === void 0 || readyAt === void 0) continue;
45133
47273
  out.push({
@@ -45172,11 +47312,11 @@ var readerStellaUnbond = {
45172
47312
  let waiting;
45173
47313
  let unbonded;
45174
47314
  if (Array.isArray(cell)) {
45175
- waiting = toBigInt12(cell[0]);
45176
- unbonded = toBigInt12(cell[1]);
47315
+ waiting = toBigInt13(cell[0]);
47316
+ unbonded = toBigInt13(cell[1]);
45177
47317
  } else if (cell && typeof cell === "object") {
45178
- waiting = toBigInt12(cell.waiting);
45179
- unbonded = toBigInt12(cell.unbonded);
47318
+ waiting = toBigInt13(cell.waiting);
47319
+ unbonded = toBigInt13(cell.unbonded);
45180
47320
  }
45181
47321
  const out = [];
45182
47322
  if (unbonded && unbonded > 0n) {
@@ -45266,7 +47406,7 @@ var readerSwell = {
45266
47406
  abi: [SwellRswExitAbi, SwellRswExitAbi]
45267
47407
  });
45268
47408
  const count = toNumber(stage1[0]) ?? 0;
45269
- const lastProcessed = toBigInt12(stage1[1]) ?? 0n;
47409
+ const lastProcessed = toBigInt13(stage1[1]) ?? 0n;
45270
47410
  if (count === 0) return [];
45271
47411
  const enumCalls = Array.from({ length: count }, (_3, i) => ({
45272
47412
  address: entry.withdrawalContract,
@@ -45278,7 +47418,7 @@ var readerSwell = {
45278
47418
  calls: enumCalls,
45279
47419
  abi: enumCalls.map(() => SwellRswExitAbi)
45280
47420
  });
45281
- const ids = stage2.map(toBigInt12).filter((v) => v !== void 0);
47421
+ const ids = stage2.map(toBigInt13).filter((v) => v !== void 0);
45282
47422
  if (ids.length === 0) return [];
45283
47423
  const detailCalls = ids.map((id) => ({
45284
47424
  address: entry.withdrawalContract,
@@ -45295,7 +47435,7 @@ var readerSwell = {
45295
47435
  const id = ids[i];
45296
47436
  const r = stage3[i];
45297
47437
  if (!r) continue;
45298
- const amount = toBigInt12(r.amount);
47438
+ const amount = toBigInt13(r.amount);
45299
47439
  if (amount === void 0) continue;
45300
47440
  const claimable = id <= lastProcessed;
45301
47441
  out.push({
@@ -45369,14 +47509,14 @@ var readerValantis = {
45369
47509
  for (let i = 0; i < burns.length; i++) {
45370
47510
  const b = burns[i];
45371
47511
  if (!b) continue;
45372
- const amount = Array.isArray(b) ? toBigInt12(b[0]) : toBigInt12(b.amount);
47512
+ const amount = Array.isArray(b) ? toBigInt13(b[0]) : toBigInt13(b.amount);
45373
47513
  const completed = Array.isArray(b) ? Boolean(b[2]) : Boolean(b.completed);
45374
47514
  if (amount === void 0 || completed) continue;
45375
47515
  out.push({
45376
47516
  lst: entry.lst,
45377
47517
  brand: entry.brand,
45378
47518
  symbol: entry.symbol,
45379
- requestId: String(toBigInt12(ids[i]) ?? i),
47519
+ requestId: String(toBigInt13(ids[i]) ?? i),
45380
47520
  amountUnderlying: amount.toString(),
45381
47521
  status: redeemable[i] ? "claimable" : "pending"
45382
47522
  });
@@ -45449,7 +47589,7 @@ var readerTruFin = {
45449
47589
  if (typeof recipient === "string" && recipient.toLowerCase() !== lcUser) {
45450
47590
  continue;
45451
47591
  }
45452
- const amount = Array.isArray(w) ? toBigInt12(w[1]) : toBigInt12(w.amount);
47592
+ const amount = Array.isArray(w) ? toBigInt13(w[1]) : toBigInt13(w.amount);
45453
47593
  if (amount === void 0 || amount === 0n) continue;
45454
47594
  out.push({
45455
47595
  lst: entry.lst,
@@ -45545,7 +47685,7 @@ var readerYieldNest = {
45545
47685
  calls: enumCalls,
45546
47686
  abi: enumCalls.map(() => YieldNestWithdrawalQueueAbi)
45547
47687
  });
45548
- const ids = stage2.map(toBigInt12).filter((v) => v !== void 0);
47688
+ const ids = stage2.map(toBigInt13).filter((v) => v !== void 0);
45549
47689
  if (ids.length === 0) return [];
45550
47690
  const detailCalls = ids.map((id) => ({
45551
47691
  address: entry.withdrawalContract,
@@ -45564,7 +47704,7 @@ var readerYieldNest = {
45564
47704
  const id = ids[i];
45565
47705
  const r = stage3[i];
45566
47706
  if (!r) continue;
45567
- const amount = toBigInt12(r.amount);
47707
+ const amount = toBigInt13(r.amount);
45568
47708
  const created = toNumber(r.creationTimestamp);
45569
47709
  const processed = Boolean(r.processed);
45570
47710
  if (amount === void 0 || created === void 0) continue;
@@ -46157,7 +48297,7 @@ var getLstWithdrawalRegistry = (chainId, extraEntries) => {
46157
48297
  const extra = extraEntries.filter((e) => !seen.has(e.lst.toLowerCase()));
46158
48298
  return extra.length === 0 ? base : [...base, ...extra];
46159
48299
  };
46160
- var warn4 = (...args) => {
48300
+ var warn5 = (...args) => {
46161
48301
  };
46162
48302
  var getLstWithdrawalRequests = async (user, chainId, multicallRetry, options) => {
46163
48303
  const entries = getLstWithdrawalRegistry(chainId, options?.extraEntries);
@@ -46172,7 +48312,7 @@ var getLstWithdrawalRequests = async (user, chainId, multicallRetry, options) =>
46172
48312
  try {
46173
48313
  return await reader.fetch(lcUser, multicallRetry, chainId, entry, ids);
46174
48314
  } catch (e) {
46175
- warn4(
48315
+ warn5(
46176
48316
  `[lst-withdrawals] ${entry.brand} ${entry.symbol} (${entry.lst}) failed:`,
46177
48317
  e?.message ?? e
46178
48318
  );
@@ -46217,7 +48357,7 @@ var Erc4626ReadAbi2 = [
46217
48357
 
46218
48358
  // src/vaults/savings/readers/shared.ts
46219
48359
  var ONE_E188 = 10n ** 18n;
46220
- var toBigInt13 = (v) => {
48360
+ var toBigInt14 = (v) => {
46221
48361
  if (v === void 0 || v === null) return void 0;
46222
48362
  if (typeof v === "bigint") return v;
46223
48363
  if (typeof v === "number") return BigInt(v);
@@ -46248,9 +48388,9 @@ var readerErc46262 = (entry) => {
46248
48388
  ],
46249
48389
  abis: [Erc4626ReadAbi2, TotalSupplyAbi2, Erc4626ReadAbi2],
46250
48390
  parse: ([assets, supply, rate]) => {
46251
- const totalAssets = toBigInt13(assets);
46252
- const totalSupply = toBigInt13(supply);
46253
- const convertToAssetsRaw = toBigInt13(rate);
48391
+ const totalAssets = toBigInt14(assets);
48392
+ const totalSupply = toBigInt14(supply);
48393
+ const convertToAssetsRaw = toBigInt14(rate);
46254
48394
  if (totalAssets === void 0 || totalSupply === void 0 || convertToAssetsRaw === void 0) {
46255
48395
  return void 0;
46256
48396
  }
@@ -46701,7 +48841,7 @@ var resolveAaveEarnCuratorName = (chainId, owner) => {
46701
48841
 
46702
48842
  // src/vaults/aave-earn/fetchPublic.ts
46703
48843
  var BRAND2 = "Aave";
46704
- var toBigInt14 = (v) => {
48844
+ var toBigInt15 = (v) => {
46705
48845
  if (v === void 0 || v === null) return void 0;
46706
48846
  if (typeof v === "bigint") return v;
46707
48847
  if (typeof v === "number") return BigInt(v);
@@ -46761,15 +48901,15 @@ var fetchAaveEarnVaults = async (chainId, multicallRetry, prices = {}, tokenList
46761
48901
  const token = v.usedReserve.underlyingToken;
46762
48902
  const underlyingLc = token.address.toLowerCase();
46763
48903
  const assetDecimals = token.decimals;
46764
- const shareDecOnChain = toBigInt14(slice[1]);
48904
+ const shareDecOnChain = toBigInt15(slice[1]);
46765
48905
  const decimals = shareDecOnChain !== void 0 ? Number(shareDecOnChain) : assetDecimals;
46766
- const totalSupply = toBigInt14(slice[2]);
48906
+ const totalSupply = toBigInt15(slice[2]);
46767
48907
  if (totalSupply === void 0) continue;
46768
48908
  const shareUnit = 10n ** BigInt(decimals);
46769
48909
  const underlyingUnit = 10n ** BigInt(assetDecimals);
46770
- const convertToAssets = toBigInt14(slice[3]) ?? 0n;
48910
+ const convertToAssets = toBigInt15(slice[3]) ?? 0n;
46771
48911
  const convertToShares = convertToAssets > 0n ? shareUnit * underlyingUnit / convertToAssets : 0n;
46772
- const totalAssets = toBigInt14(slice[0]) ?? totalSupply * convertToAssets / shareUnit;
48912
+ const totalAssets = toBigInt15(slice[0]) ?? totalSupply * convertToAssets / shareUnit;
46773
48913
  const totalAssetsFormatted = Number(totalAssets) / 10 ** assetDecimals;
46774
48914
  const asset = tokenList[underlyingLc];
46775
48915
  const priceUsd = prices[underlyingLc] ?? (v.balance?.usdPerToken != null ? num2(v.balance.usdPerToken) : void 0);
@@ -48013,23 +50153,23 @@ var priceGmMarkets = async (chainId, multicallRetry, markets, prices) => {
48013
50153
  const indexMax = price(prices, m.indexToken)?.max;
48014
50154
  if (Array.isArray(dsRes) && longMax != null && shortMax != null) {
48015
50155
  const base = i * SLOTS;
48016
- 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;
48017
50157
  const cap = computeDepositCapacityUsd(
48018
- [info?.longTokenAmount, longMax, big(0), big(2)],
48019
- [info?.shortTokenAmount, shortMax, big(1), big(3)]
50158
+ [info?.longTokenAmount, longMax, big3(0), big3(2)],
50159
+ [info?.shortTokenAmount, shortMax, big3(1), big3(3)]
48020
50160
  );
48021
50161
  if (cap != null) value.depositCapacityUsd = cap;
48022
50162
  if (indexMax != null) {
48023
50163
  const divisor = m.longToken.toLowerCase() === m.shortToken.toLowerCase() ? 2n : 1n;
48024
- const reservedUsdLong = (big(4) + big(5)) / divisor * indexMax;
48025
- const reservedUsdShort = (big(6) + big(7)) / divisor;
50164
+ const reservedUsdLong = (big3(4) + big3(5)) / divisor * indexMax;
50165
+ const reservedUsdShort = (big3(6) + big3(7)) / divisor;
48026
50166
  const liq = computeLiquidityUsd(
48027
50167
  info?.longTokenUsd,
48028
50168
  info?.shortTokenUsd,
48029
50169
  reservedUsdLong,
48030
50170
  reservedUsdShort,
48031
- big(8),
48032
- big(9)
50171
+ big3(8),
50172
+ big3(9)
48033
50173
  );
48034
50174
  if (liq != null)
48035
50175
  value.liquidityUsd = Math.max(0, Math.min(liq, value.tvlUsd));
@@ -48228,21 +50368,21 @@ var fetchGmxExecutionFees = async (chainId, multicallRetry, gasPriceWei) => {
48228
50368
  } catch {
48229
50369
  return void 0;
48230
50370
  }
48231
- const big = (i) => typeof res[i] === "bigint" ? res[i] : 0n;
48232
- const base = big(0);
48233
- 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);
48234
50374
  if (base === 0n && mult === 0n) return void 0;
48235
50375
  const PRECISION = 10n ** 30n;
48236
50376
  const adjusted = (opGas) => base + opGas * mult / PRECISION;
48237
50377
  const fee = (opGas) => (adjusted(opGas) * gasPriceWei).toString();
48238
- const glvExtra = big(6) * GLV_NOMINAL_MARKET_COUNT;
50378
+ const glvExtra = big3(6) * GLV_NOMINAL_MARKET_COUNT;
48239
50379
  return {
48240
50380
  chainId,
48241
50381
  gasPriceWei: gasPriceWei.toString(),
48242
- deposit: fee(big(2)),
48243
- withdrawal: fee(big(3)),
48244
- glvDeposit: fee(big(4) + glvExtra),
48245
- 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)
48246
50386
  };
48247
50387
  };
48248
50388
 
@@ -48629,7 +50769,7 @@ var readVaultSharePrices = async (chainId, addresses, multicallRetry) => {
48629
50769
  };
48630
50770
 
48631
50771
  // src/vaults/yield/annualize.ts
48632
- var YEAR_SECONDS2 = 365 * 24 * 60 * 60;
50772
+ var YEAR_SECONDS3 = 365 * 24 * 60 * 60;
48633
50773
  var SCALE = 10n ** 18n;
48634
50774
  var appendSnapshot = (points, snap, options) => {
48635
50775
  const maxPoints = options?.maxPoints ?? 90;
@@ -48658,7 +50798,7 @@ var computeVaultApr = (points, options) => {
48658
50798
  if (pThen === 0n) return void 0;
48659
50799
  const ratioScaled = BigInt(now.p) * SCALE / pThen;
48660
50800
  const ratio = Number(ratioScaled) / 1e18;
48661
- const apr = (ratio - 1) * (YEAR_SECONDS2 / windowSeconds);
50801
+ const apr = (ratio - 1) * (YEAR_SECONDS3 / windowSeconds);
48662
50802
  return {
48663
50803
  apr,
48664
50804
  sharePriceNow: now.p,
@@ -48713,7 +50853,7 @@ function buildVaultLookup(data) {
48713
50853
  addEntries(data.yearn, "yearn");
48714
50854
  return map;
48715
50855
  }
48716
- var warn5 = (...args) => {
50856
+ var warn6 = (...args) => {
48717
50857
  };
48718
50858
  var HYPERCORE_PROVIDER_CHAIN = "999";
48719
50859
  var getVaultPublicDataAll = async (chainId, providers, multicallRetry, prices = {}, tokenList = {}, options) => {
@@ -48726,7 +50866,7 @@ var getVaultPublicDataAll = async (chainId, providers, multicallRetry, prices =
48726
50866
  fetchFluidFTokens(chainId, multicallRetry, prices, tokenList).then((res) => {
48727
50867
  out.fluid = res;
48728
50868
  }).catch((e) => {
48729
- warn5(
50869
+ warn6(
48730
50870
  `[vaults] fluid fetch failed for chain ${chainId}:`,
48731
50871
  e?.message ?? e
48732
50872
  );
@@ -48738,7 +50878,7 @@ var getVaultPublicDataAll = async (chainId, providers, multicallRetry, prices =
48738
50878
  fetchGearboxV3Pools(chainId, multicallRetry, prices, tokenList).then((res) => {
48739
50879
  out.gearbox = res;
48740
50880
  }).catch((e) => {
48741
- warn5(
50881
+ warn6(
48742
50882
  `[vaults] gearbox fetch failed for chain ${chainId}:`,
48743
50883
  e?.message ?? e
48744
50884
  );
@@ -48750,7 +50890,7 @@ var getVaultPublicDataAll = async (chainId, providers, multicallRetry, prices =
48750
50890
  fetchMorphoVaults(chainId, multicallRetry, prices, tokenList).then((res) => {
48751
50891
  out.morpho = res;
48752
50892
  }).catch((e) => {
48753
- warn5(
50893
+ warn6(
48754
50894
  `[vaults] morpho fetch failed for chain ${chainId}:`,
48755
50895
  e?.message ?? e
48756
50896
  );
@@ -48762,7 +50902,7 @@ var getVaultPublicDataAll = async (chainId, providers, multicallRetry, prices =
48762
50902
  fetchListaVaultsFromChain(chainId, multicallRetry, prices, tokenList).then((res) => {
48763
50903
  out.lista = res;
48764
50904
  }).catch((e) => {
48765
- warn5(
50905
+ warn6(
48766
50906
  `[vaults] lista fetch failed for chain ${chainId}:`,
48767
50907
  e?.message ?? e
48768
50908
  );
@@ -48777,7 +50917,7 @@ var getVaultPublicDataAll = async (chainId, providers, multicallRetry, prices =
48777
50917
  }).then((res) => {
48778
50918
  out.silo = res;
48779
50919
  }).catch((e) => {
48780
- warn5(
50920
+ warn6(
48781
50921
  `[vaults] silo fetch failed for chain ${chainId}:`,
48782
50922
  e?.message ?? e
48783
50923
  );
@@ -48789,7 +50929,7 @@ var getVaultPublicDataAll = async (chainId, providers, multicallRetry, prices =
48789
50929
  fetchEulerEarnVaults(chainId, prices, tokenList, multicallRetry).then((res) => {
48790
50930
  out["euler-earn"] = res;
48791
50931
  }).catch((e) => {
48792
- warn5(
50932
+ warn6(
48793
50933
  `[vaults] euler-earn fetch failed for chain ${chainId}:`,
48794
50934
  e?.message ?? e
48795
50935
  );
@@ -48801,7 +50941,7 @@ var getVaultPublicDataAll = async (chainId, providers, multicallRetry, prices =
48801
50941
  fetchLstShareTokens(chainId, multicallRetry, prices, tokenList).then((res) => {
48802
50942
  out.lst = res;
48803
50943
  }).catch((e) => {
48804
- warn5(
50944
+ warn6(
48805
50945
  `[vaults] lst fetch failed for chain ${chainId}:`,
48806
50946
  e?.message ?? e
48807
50947
  );
@@ -48813,7 +50953,7 @@ var getVaultPublicDataAll = async (chainId, providers, multicallRetry, prices =
48813
50953
  fetchSavingsVaults(chainId, multicallRetry, prices, tokenList).then((res) => {
48814
50954
  out.savings = res;
48815
50955
  }).catch((e) => {
48816
- warn5(
50956
+ warn6(
48817
50957
  `[vaults] savings fetch failed for chain ${chainId}:`,
48818
50958
  e?.message ?? e
48819
50959
  );
@@ -48825,7 +50965,7 @@ var getVaultPublicDataAll = async (chainId, providers, multicallRetry, prices =
48825
50965
  fetchLagoonVaults(chainId, prices, tokenList).then((res) => {
48826
50966
  out.lagoon = res;
48827
50967
  }).catch((e) => {
48828
- warn5(
50968
+ warn6(
48829
50969
  `[vaults] lagoon fetch failed for chain ${chainId}:`,
48830
50970
  e?.message ?? e
48831
50971
  );
@@ -48837,7 +50977,7 @@ var getVaultPublicDataAll = async (chainId, providers, multicallRetry, prices =
48837
50977
  fetchAaveEarnVaults(chainId, multicallRetry, prices, tokenList).then((res) => {
48838
50978
  out["aave-earn"] = res;
48839
50979
  }).catch((e) => {
48840
- warn5(
50980
+ warn6(
48841
50981
  `[vaults] aave-earn fetch failed for chain ${chainId}:`,
48842
50982
  e?.message ?? e
48843
50983
  );
@@ -48849,7 +50989,7 @@ var getVaultPublicDataAll = async (chainId, providers, multicallRetry, prices =
48849
50989
  fetchUpshiftVaults(chainId, prices, tokenList).then((res) => {
48850
50990
  out.upshift = res;
48851
50991
  }).catch((e) => {
48852
- warn5(
50992
+ warn6(
48853
50993
  `[vaults] upshift fetch failed for chain ${chainId}:`,
48854
50994
  e?.message ?? e
48855
50995
  );
@@ -48861,7 +51001,7 @@ var getVaultPublicDataAll = async (chainId, providers, multicallRetry, prices =
48861
51001
  fetchYearnVaults(chainId, multicallRetry, prices, tokenList).then((res) => {
48862
51002
  out.yearn = res;
48863
51003
  }).catch((e) => {
48864
- warn5(
51004
+ warn6(
48865
51005
  `[vaults] yearn fetch failed for chain ${chainId}:`,
48866
51006
  e?.message ?? e
48867
51007
  );
@@ -48873,7 +51013,7 @@ var getVaultPublicDataAll = async (chainId, providers, multicallRetry, prices =
48873
51013
  fetchHypercoreVaults().then((res) => {
48874
51014
  out.hypercore = res;
48875
51015
  }).catch((e) => {
48876
- warn5(
51016
+ warn6(
48877
51017
  `[vaults] hypercore fetch failed for chain ${chainId}:`,
48878
51018
  e?.message ?? e
48879
51019
  );
@@ -48885,7 +51025,7 @@ var getVaultPublicDataAll = async (chainId, providers, multicallRetry, prices =
48885
51025
  fetchGmxVaults(chainId, multicallRetry).then((res) => {
48886
51026
  out.gmx = res;
48887
51027
  }).catch((e) => {
48888
- warn5(
51028
+ warn6(
48889
51029
  `[vaults] gmx fetch failed for chain ${chainId}:`,
48890
51030
  e?.message ?? e
48891
51031
  );
@@ -48901,7 +51041,7 @@ var getVaultPublicDataAll = async (chainId, providers, multicallRetry, prices =
48901
51041
  );
48902
51042
  if (fees) out.gmxExecutionFees = fees;
48903
51043
  })().catch((e) => {
48904
- warn5(
51044
+ warn6(
48905
51045
  `[vaults] gmx execution-fee fetch failed for chain ${chainId}:`,
48906
51046
  e?.message ?? e
48907
51047
  );
@@ -49448,6 +51588,6 @@ async function fetchTokenBalances(chainId, account, tokens, options = {}) {
49448
51588
  return parseTokenBalanceResult(rawResult, prepared.query);
49449
51589
  }
49450
51590
 
49451
- export { ApiBookSource, 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 };
49452
51592
  //# sourceMappingURL=index.js.map
49453
51593
  //# sourceMappingURL=index.js.map