@1delta/margin-fetcher 0.0.404 → 0.0.405

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.
package/dist/index.js CHANGED
@@ -1,12 +1,12 @@
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';
1
+ import { parseAbi, keccak256, encodeAbiParameters, formatEther, BaseError, pad, encodeFunctionData, formatUnits, isAddress, getAddress, decodeFunctionResult, decodeAbiParameters, concat, AbiEncodingLengthMismatchError, concatHex, toBytes, slice, InvalidAddressError, stringToHex, boolToHex, integerRegex, numberToHex, bytesRegex, BytesSizeMismatchError, arrayRegex, UnsupportedPackedAbiType } from './chunk-SRWUFRRR.js';
2
2
  import './chunk-BYTNVMX7.js';
3
3
  import './chunk-PR4QN5HX.js';
4
- import { Lender, LIQUITY_FAMILY_LENDERS, isAaveType, isCompoundV3, isMultiMarket, isSiloV2Type, isSiloV3Type, isDolomite, isMidnight, isTerm, isExactly, isLiquityFamily, isRiver, isTeller, isEulerType, isAaveV4Type, isInit, isMorphoType, isCompoundV2Type, isVenusType, isSumerType, AAVE_V3_LENDERS, AAVE_V2_LENDERS, isAaveV2Type, isAaveV32Type, isAaveV3Type, isFluid, isGearboxV3, isYLDR, isCompoundV3Type, isLista, isTectonicType, isKineticType, isBenqiType } from '@1delta/lender-registry';
4
+ import { Lender, LIQUITY_FAMILY_LENDERS, isAaveType, isCompoundV3, isMultiMarket, isSiloV2Type, isSiloV3Type, isDolomite, isMidnight, isTerm, isExactly, isLiquityFamily, isRiver, isTeller, isEulerType, isAaveV4Type, isInit, isMorphoType, isCompoundV2Type, isVenusType, isSumerType, AAVE_V3_LENDERS, AAVE_V2_LENDERS, isAaveV2Type, isAaveV32Type, isAaveV3Type, isFluid, isGearboxV3, isInverse, isTermMax, 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, termConfig, termMarketsByChain, exactlyConfig, liquityLendersByChain, riverLendersByChain, tellerConfigByChain, tellerPoolsByChain, aaveReserves, compoundV3Reserves, liquityConfigFor, liquityBranchesByChain, riverConfigFor, riverChainData, aaveOracles, morphoTypeMarkets, resolveMidnightApiBase, resolveTermApiBase, getSiloV2MarketEntry, getSiloV3MarketEntry, dolomiteEmode, aaveTokens, morphoTypeVaults, eulerConfigs, gearboxMarketCompressor, gearboxMarketConfigurators, gearboxV3LenderKey, midnightMarketsByChain, parseAaveV4SpokeLenderKey, gearboxAccountCompressor, compoundV2Tokens, exactlyMarketsByChain, aaveOraclesConfig, compoundV2Oracles, compoundV2TokenArray, compoundV2OraclesConfig, compoundV3OraclesData, compoundV3BaseData, compoundV2Reserves, aaveV4Oracles } from '@1delta/data-sdk';
6
+ import { fetchTokenLists, fetchTokenList, aavePools, compoundV3Pools, initConfig, morphoPools, compoundV2Pools, eulerVaults, siloMarkets, siloV2LenderKey, siloMarketsV3, siloV3LenderKey, aaveV4Spokes, aaveV4SpokeLenderKey, fluidResolvers, gearboxResolvers, dolomiteConfigs, midnightConfig, termConfig, termMarketsByChain, exactlyConfig, liquityLendersByChain, riverLendersByChain, inverseLendersByChain, tellerConfigByChain, tellerPoolsByChain, aaveReserves, compoundV3Reserves, liquityConfigFor, liquityBranchesByChain, riverConfigFor, riverChainData, termMaxApiBaseUrl, termMaxConfigByChain, termMaxLenderKey, inverseConfigFor, inverseChainData, aaveOracles, morphoTypeMarkets, resolveMidnightApiBase, resolveTermApiBase, getSiloV2MarketEntry, getSiloV3MarketEntry, dolomiteEmode, aaveTokens, morphoTypeVaults, eulerConfigs, gearboxMarketCompressor, gearboxMarketConfigurators, gearboxV3LenderKey, midnightMarketsByChain, parseAaveV4SpokeLenderKey, gearboxAccountCompressor, compoundV2Tokens, exactlyMarketsByChain, aaveOraclesConfig, compoundV2Oracles, compoundV2TokenArray, compoundV2OraclesConfig, compoundV3OraclesData, compoundV3BaseData, compoundV2Reserves, aaveV4Oracles } from '@1delta/data-sdk';
7
7
  import lodash from 'lodash';
8
8
  import { multicallRetryUniversal, getEvmClient, getEvmChain, getEvmClientUniversal } from '@1delta/providers';
9
- import { LiquityTroveManagerAbi, LiquityActivePoolAbi, LiquityStabilityPoolAbi, LiquityPriceFeedAbi, LiquitySortedTrovesAbi, RiverTroveManagerAbi, RiverStabilityPoolAbi, TellerMarketRegistryAbi, TellerV2Abi, MetaMorphoAbi, ExactlyPreviewerAbi, ExactlyAuditorAbi, LenderCommitmentGroupAbi, FluidLendingResolverAbi, FluidVaultResolverAbi, FluidLiquidityResolverAbi, MoolahVaultAbi, MorphoLensAbi, AaveV4SpokeAbi, AaveV4OracleAbi, AaveV4HubAbi, DolomiteMarginAbi, GearboxMarketCompressorV310Abi, MorphoBlueAbi, MidnightAbi, TermRepoTokenAbi, TermRepoServicerAbi, TermRepoCollateralManagerAbi, LiquityTroveNFTAbi, LiquityCollSurplusPoolAbi, TellerCollateralManagerAbi, GearboxCreditAccountCompressorV310Abi, TermPriceConsumerAbi } from '@1delta/abis';
9
+ import { LiquityTroveManagerAbi, LiquityActivePoolAbi, LiquityStabilityPoolAbi, LiquityPriceFeedAbi, LiquitySortedTrovesAbi, RiverTroveManagerAbi, RiverStabilityPoolAbi, TellerMarketRegistryAbi, TellerV2Abi, InverseMarketAbi, InverseOracleAbi, InverseDbrAbi, Erc20Abi, MetaMorphoAbi, ExactlyPreviewerAbi, ExactlyAuditorAbi, LenderCommitmentGroupAbi, FluidLendingResolverAbi, FluidVaultResolverAbi, FluidLiquidityResolverAbi, MoolahVaultAbi, MorphoLensAbi, AaveV4SpokeAbi, AaveV4OracleAbi, AaveV4HubAbi, DolomiteMarginAbi, GearboxMarketCompressorV310Abi, MorphoBlueAbi, MidnightAbi, TermRepoTokenAbi, TermRepoServicerAbi, TermRepoCollateralManagerAbi, LiquityTroveNFTAbi, LiquityCollSurplusPoolAbi, TellerCollateralManagerAbi, InverseEscrowAbi, GearboxCreditAccountCompressorV310Abi, TermPriceConsumerAbi, TermMaxOracleAggregatorV2Abi } 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';
@@ -7516,6 +7516,9 @@ var getLendersForChain = (c) => {
7516
7516
  for (const l of riverLendersByChain(c)) {
7517
7517
  lenders.push(l);
7518
7518
  }
7519
+ for (const l of inverseLendersByChain(c)) {
7520
+ lenders.push(l);
7521
+ }
7519
7522
  if (tellerConfigByChain(c)?.tellerV2 && tellerPoolsByChain(c).length > 0) {
7520
7523
  lenders.push(Lender.TELLER);
7521
7524
  }
@@ -8002,6 +8005,37 @@ function encode(type, value, isArray2 = false) {
8002
8005
  throw new UnsupportedPackedAbiType(type);
8003
8006
  }
8004
8007
 
8008
+ // ../../node_modules/.pnpm/viem@2.45.3_bufferutil@4.1.0_typescript@5.9.3_utf-8-validate@6.0.6_zod@4.3.6/node_modules/viem/_esm/utils/data/isBytes.js
8009
+ function isBytes(value) {
8010
+ if (!value)
8011
+ return false;
8012
+ if (typeof value !== "object")
8013
+ return false;
8014
+ if (!("BYTES_PER_ELEMENT" in value))
8015
+ return false;
8016
+ return value.BYTES_PER_ELEMENT === 1 && value.constructor.name === "Uint8Array";
8017
+ }
8018
+
8019
+ // ../../node_modules/.pnpm/viem@2.45.3_bufferutil@4.1.0_typescript@5.9.3_utf-8-validate@6.0.6_zod@4.3.6/node_modules/viem/_esm/utils/address/getContractAddress.js
8020
+ function getContractAddress(opts) {
8021
+ return getCreate2Address(opts);
8022
+ }
8023
+ function getCreate2Address(opts) {
8024
+ const from = toBytes(getAddress(opts.from));
8025
+ const salt = pad(isBytes(opts.salt) ? opts.salt : toBytes(opts.salt), {
8026
+ size: 32
8027
+ });
8028
+ const bytecodeHash = (() => {
8029
+ if ("bytecodeHash" in opts) {
8030
+ if (isBytes(opts.bytecodeHash))
8031
+ return opts.bytecodeHash;
8032
+ return toBytes(opts.bytecodeHash);
8033
+ }
8034
+ return keccak256(opts.bytecode, "bytes");
8035
+ })();
8036
+ return getAddress(slice(keccak256(concat([toBytes("0xff"), from, salt, bytecodeHash])), 12));
8037
+ }
8038
+
8005
8039
  // ../../node_modules/.pnpm/viem@2.45.3_bufferutil@4.1.0_typescript@5.9.3_utf-8-validate@6.0.6_zod@4.3.6/node_modules/viem/_esm/constants/bytes.js
8006
8040
  var zeroHash = "0x0000000000000000000000000000000000000000000000000000000000000000";
8007
8041
 
@@ -11112,8 +11146,8 @@ async function resolveListaBrokers(chainId, marketKeys, getClient = getEvmClient
11112
11146
  });
11113
11147
  results.forEach((r, i) => {
11114
11148
  const id = missing[i];
11115
- const addr = r.status === "success" && r.result ? r.result : zeroAddress;
11116
- cache[id] = addr.toLowerCase();
11149
+ const addr2 = r.status === "success" && r.result ? r.result : zeroAddress;
11150
+ cache[id] = addr2.toLowerCase();
11117
11151
  });
11118
11152
  } catch {
11119
11153
  }
@@ -11161,15 +11195,15 @@ async function fetchListaFixedTerms(chainId, marketKeys) {
11161
11195
  }
11162
11196
  return out;
11163
11197
  }
11164
- function getCachedListaFixedTerms(chainId, marketKey) {
11165
- return FIXED_TERMS_CACHE[chainId]?.[toBytes32MarketId(marketKey)];
11198
+ function getCachedListaFixedTerms(chainId, marketKey2) {
11199
+ return FIXED_TERMS_CACHE[chainId]?.[toBytes32MarketId(marketKey2)];
11166
11200
  }
11167
11201
  async function fetchListaBrokerUserData(chainId, account, marketKeys, nowSecs = Math.floor(Date.now() / 1e3), getClient = getEvmClient) {
11168
11202
  const brokers = await resolveListaBrokers(chainId, marketKeys, getClient);
11169
11203
  const ids = Object.keys(brokers);
11170
11204
  const out = {};
11171
- const cacheKey4 = `${chainId}:${account.toLowerCase()}`;
11172
- BROKER_USER_CACHE[cacheKey4] = out;
11205
+ const cacheKey5 = `${chainId}:${account.toLowerCase()}`;
11206
+ BROKER_USER_CACHE[cacheKey5] = out;
11173
11207
  if (ids.length === 0) return out;
11174
11208
  try {
11175
11209
  const client = getClient(chainId);
@@ -11272,8 +11306,8 @@ async function fetchListaBrokerUserData(chainId, account, marketKeys, nowSecs =
11272
11306
  }
11273
11307
  return out;
11274
11308
  }
11275
- function getCachedListaBrokerUserData(chainId, account, marketKey) {
11276
- return BROKER_USER_CACHE[`${chainId}:${account.toLowerCase()}`]?.[toBytes32MarketId(marketKey)];
11309
+ function getCachedListaBrokerUserData(chainId, account, marketKey2) {
11310
+ return BROKER_USER_CACHE[`${chainId}:${account.toLowerCase()}`]?.[toBytes32MarketId(marketKey2)];
11277
11311
  }
11278
11312
  var { chunk } = lodash;
11279
11313
  var MORPHO_LENS = {
@@ -12530,12 +12564,12 @@ function rateToApy(rate) {
12530
12564
  );
12531
12565
  }
12532
12566
  function parseLtv(ltv) {
12533
- let str2 = 0;
12567
+ let str3 = 0;
12534
12568
  try {
12535
- str2 = Number(formatUnits(BigInt(ltv), 18));
12569
+ str3 = Number(formatUnits(BigInt(ltv), 18));
12536
12570
  } catch (e) {
12537
12571
  }
12538
- return str2;
12572
+ return str3;
12539
12573
  }
12540
12574
  function liquidationPenaltyFromLltv(lltv) {
12541
12575
  if (!lltv || lltv <= 0) return 0;
@@ -18424,13 +18458,13 @@ function findVaultInfo(normalizedAddr, vaultData) {
18424
18458
  function buildAdjacencyList(vaultData) {
18425
18459
  const adj = /* @__PURE__ */ new Map();
18426
18460
  const knownVaults = /* @__PURE__ */ new Set();
18427
- for (const addr of vaultData.keys()) {
18428
- const norm = addr.toLowerCase();
18461
+ for (const addr2 of vaultData.keys()) {
18462
+ const norm = addr2.toLowerCase();
18429
18463
  knownVaults.add(norm);
18430
18464
  adj.set(norm, /* @__PURE__ */ new Set());
18431
18465
  }
18432
- for (const [addr, info] of vaultData) {
18433
- const from = addr.toLowerCase();
18466
+ for (const [addr2, info] of vaultData) {
18467
+ const from = addr2.toLowerCase();
18434
18468
  const activeCollaterals = getActiveCollaterals(info.collateralLTVInfo);
18435
18469
  for (const to of activeCollaterals) {
18436
18470
  if (knownVaults.has(to) && from !== to) {
@@ -18473,8 +18507,8 @@ function findConnectedComponents(adj) {
18473
18507
  function deriveGovernor(vaultAddresses, vaultData) {
18474
18508
  const counts = /* @__PURE__ */ new Map();
18475
18509
  const zeroNorm = zeroAddress;
18476
- for (const addr of vaultAddresses) {
18477
- const info = findVaultInfo(addr, vaultData);
18510
+ for (const addr2 of vaultAddresses) {
18511
+ const info = findVaultInfo(addr2, vaultData);
18478
18512
  if (!info) continue;
18479
18513
  const gov = info.governorAdmin?.toLowerCase();
18480
18514
  if (!gov || gov === zeroNorm) continue;
@@ -18499,8 +18533,8 @@ function deriveClusters(vaultData, includeSingletons = false) {
18499
18533
  if (!includeSingletons && component.length < 2) continue;
18500
18534
  if (!includeSingletons) {
18501
18535
  let hasActiveEdge = false;
18502
- for (const addr of component) {
18503
- const neighbors = adj.get(addr);
18536
+ for (const addr2 of component) {
18537
+ const neighbors = adj.get(addr2);
18504
18538
  if (neighbors && neighbors.size > 0) {
18505
18539
  hasActiveEdge = true;
18506
18540
  break;
@@ -18509,9 +18543,9 @@ function deriveClusters(vaultData, includeSingletons = false) {
18509
18543
  if (!hasActiveEdge) continue;
18510
18544
  }
18511
18545
  const clusterVaultData = /* @__PURE__ */ new Map();
18512
- for (const addr of component) {
18513
- const info = findVaultInfo(addr, vaultData);
18514
- if (info) clusterVaultData.set(addr, info);
18546
+ for (const addr2 of component) {
18547
+ const info = findVaultInfo(addr2, vaultData);
18548
+ if (info) clusterVaultData.set(addr2, info);
18515
18549
  }
18516
18550
  clusters.push({
18517
18551
  governor: deriveGovernor(component, vaultData),
@@ -18536,21 +18570,21 @@ function toTokenAmount(raw, decimals) {
18536
18570
  }
18537
18571
  function identifyBorrowVaults(cluster) {
18538
18572
  const borrowVaults = /* @__PURE__ */ new Set();
18539
- for (const [addr, info] of cluster.vaultData) {
18573
+ for (const [addr2, info] of cluster.vaultData) {
18540
18574
  const hasIRM = info.interestRateModel && info.interestRateModel.toLowerCase() !== zeroAddress;
18541
18575
  const hasActiveCollateral = (info.collateralLTVInfo ?? []).some(
18542
18576
  (ltv) => ltv.borrowLTV > 0n
18543
18577
  );
18544
18578
  if (hasIRM && hasActiveCollateral) {
18545
- borrowVaults.add(addr.toLowerCase());
18579
+ borrowVaults.add(addr2.toLowerCase());
18546
18580
  }
18547
18581
  }
18548
18582
  return borrowVaults;
18549
18583
  }
18550
18584
  function buildReverseLTVIndex(cluster) {
18551
18585
  const index = /* @__PURE__ */ new Map();
18552
- for (const [addr, info] of cluster.vaultData) {
18553
- const borrowVault = addr.toLowerCase();
18586
+ for (const [addr2, info] of cluster.vaultData) {
18587
+ const borrowVault = addr2.toLowerCase();
18554
18588
  for (const ltv of info.collateralLTVInfo ?? []) {
18555
18589
  if (ltv.borrowLTV <= 0n) continue;
18556
18590
  const collateral = ltv.collateral.toLowerCase();
@@ -18601,8 +18635,8 @@ function buildTokenConfig(vaultAddr, reverseLTV, borrowVaults, vaultData) {
18601
18635
  }
18602
18636
  function buildEModes(borrowVaults, cluster) {
18603
18637
  const eModes = {};
18604
- for (const addr of borrowVaults) {
18605
- const info = findInfo(addr, cluster.vaultData);
18638
+ for (const addr2 of borrowVaults) {
18639
+ const info = findInfo(addr2, cluster.vaultData);
18606
18640
  if (!info) continue;
18607
18641
  const activeLTVs = info.collateralLTVInfo.filter((l) => l.borrowLTV > 0n);
18608
18642
  const avgBorrowLTV = activeLTVs.length > 0 ? activeLTVs.reduce((sum, l) => sum + ltvToNumber(l.borrowLTV), 0) / activeLTVs.length : 0;
@@ -18610,8 +18644,8 @@ function buildEModes(borrowVaults, cluster) {
18610
18644
  (sum, l) => sum + ltvToNumber(l.liquidationLTV),
18611
18645
  0
18612
18646
  ) / activeLTVs.length : 0;
18613
- eModes[addr] = {
18614
- category: addr,
18647
+ eModes[addr2] = {
18648
+ category: addr2,
18615
18649
  label: `${info.assetSymbol} Borrow (${info.vaultSymbol})`,
18616
18650
  borrowCollateralFactor: avgBorrowLTV,
18617
18651
  collateralFactor: avgLiqLTV,
@@ -18633,11 +18667,11 @@ function buildMetadata(info) {
18633
18667
  }
18634
18668
  function buildTokenEntry(info, config, collateralActive, borrowVaults, opts) {
18635
18669
  if (!info.asset) return void 0;
18636
- const addr = info.asset.toLowerCase();
18637
- const tokenMeta = opts.tokenList?.[addr];
18670
+ const addr2 = info.asset.toLowerCase();
18671
+ const tokenMeta = opts.tokenList?.[addr2];
18638
18672
  const asset = {
18639
18673
  chainId: opts.chainId,
18640
- address: addr,
18674
+ address: addr2,
18641
18675
  name: tokenMeta?.name ?? info.assetName,
18642
18676
  symbol: tokenMeta?.symbol ?? info.assetSymbol,
18643
18677
  decimals: tokenMeta?.decimals ?? Number(info.assetDecimals)
@@ -18698,9 +18732,9 @@ function buildTokenEntry(info, config, collateralActive, borrowVaults, opts) {
18698
18732
  params: { metadata: buildMetadata(info) }
18699
18733
  };
18700
18734
  }
18701
- function findInfo(addr, vaultData) {
18735
+ function findInfo(addr2, vaultData) {
18702
18736
  for (const [key, value] of vaultData) {
18703
- if (key.toLowerCase() === addr) return value;
18737
+ if (key.toLowerCase() === addr2) return value;
18704
18738
  }
18705
18739
  return void 0;
18706
18740
  }
@@ -18715,8 +18749,8 @@ function normalizeCluster(cluster, opts) {
18715
18749
  }
18716
18750
  const eModes = buildEModes(borrowVaults, cluster);
18717
18751
  const data = {};
18718
- for (const [addr, info] of cluster.vaultData) {
18719
- const norm = addr.toLowerCase();
18752
+ for (const [addr2, info] of cluster.vaultData) {
18753
+ const norm = addr2.toLowerCase();
18720
18754
  const config = buildTokenConfig(
18721
18755
  norm,
18722
18756
  reverseLTV,
@@ -18861,8 +18895,8 @@ var getEulerV2ReservesDataConverter = (lender, chainId, prices, additionalYields
18861
18895
  var BASE_CALLS_PER_RESERVE = 5;
18862
18896
  var CALLS_PER_SPOKE_TAIL = 1;
18863
18897
  var MAX_HUB_ASSETS = 25;
18864
- function isValidAddress(addr) {
18865
- return !!addr && addr !== "0x" && addr.length > 2;
18898
+ function isValidAddress(addr2) {
18899
+ return !!addr2 && addr2 !== "0x" && addr2.length > 2;
18866
18900
  }
18867
18901
  function getDynamicConfigCount(spokeEntry) {
18868
18902
  const max = spokeEntry?.dynamicConfigKeyMax ?? 0;
@@ -19206,8 +19240,8 @@ function normalizeAaveV4(spokeDataList, chainId, spokeLenderKeyArg, prices, addi
19206
19240
  }
19207
19241
 
19208
19242
  // src/lending/public-data/aave-v4-type/publicCallParse.ts
19209
- function isValidAddress2(addr) {
19210
- return !!addr && addr !== "0x" && addr.length > 2;
19243
+ function isValidAddress2(addr2) {
19244
+ return !!addr2 && addr2 !== "0x" && addr2.length > 2;
19211
19245
  }
19212
19246
  var getAaveV4ReservesDataConverter = (lender, chainId, prices, additionalYields, tokenList = {}) => {
19213
19247
  const expectedCalls = getAaveV4ExpectedCallCount(chainId, lender);
@@ -19656,7 +19690,7 @@ var getSiloV2ReservesDataConverter = (lender, chainId, prices, additionalYields,
19656
19690
  { self: market.silo0, other: market.silo1 },
19657
19691
  { self: market.silo1, other: market.silo0 }
19658
19692
  ];
19659
- const toBigInt16 = (v) => {
19693
+ const toBigInt17 = (v) => {
19660
19694
  if (v === void 0 || v === null || v === "0x") return 0n;
19661
19695
  if (typeof v === "bigint") return v;
19662
19696
  try {
@@ -19668,8 +19702,8 @@ var getSiloV2ReservesDataConverter = (lender, chainId, prices, additionalYields,
19668
19702
  for (let s = 0; s < 2; s++) {
19669
19703
  const { self, other } = sides[s];
19670
19704
  const slot = s * SILO_V2_CALLS_PER_SIDE;
19671
- const totalAssetsRaw = toBigInt16(data[slot]);
19672
- const debtAssetsRaw = toBigInt16(data[slot + 1]);
19705
+ const totalAssetsRaw = toBigInt17(data[slot]);
19706
+ const debtAssetsRaw = toBigInt17(data[slot + 1]);
19673
19707
  const irmConfigRaw = data[slot + 2];
19674
19708
  const decimals = self.decimals;
19675
19709
  const totalDeposits = Number(formatUnits(totalAssetsRaw, decimals));
@@ -19824,7 +19858,7 @@ var getSiloV3ReservesDataConverter = (lender, chainId, prices, additionalYields,
19824
19858
  { self: market.silo0, other: market.silo1 },
19825
19859
  { self: market.silo1, other: market.silo0 }
19826
19860
  ];
19827
- const toBigInt16 = (v) => {
19861
+ const toBigInt17 = (v) => {
19828
19862
  if (v === void 0 || v === null || v === "0x") return 0n;
19829
19863
  if (typeof v === "bigint") return v;
19830
19864
  try {
@@ -19836,8 +19870,8 @@ var getSiloV3ReservesDataConverter = (lender, chainId, prices, additionalYields,
19836
19870
  for (let s = 0; s < 2; s++) {
19837
19871
  const { self, other } = sides[s];
19838
19872
  const slot = s * SILO_V3_CALLS_PER_SIDE;
19839
- const totalAssetsRaw = toBigInt16(data[slot]);
19840
- const debtAssetsRaw = toBigInt16(data[slot + 1]);
19873
+ const totalAssetsRaw = toBigInt17(data[slot]);
19874
+ const debtAssetsRaw = toBigInt17(data[slot + 1]);
19841
19875
  const irmConfigRaw = data[slot + 2];
19842
19876
  const decimals = self.decimals;
19843
19877
  const totalDeposits = Number(formatUnits(totalAssetsRaw, decimals));
@@ -19962,7 +19996,7 @@ var buildFluidCall = (chainId, _lender) => {
19962
19996
 
19963
19997
  // src/lending/public-data/fluid/publicCallParse.ts
19964
19998
  var FLUID_EEE_LOWER = "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee";
19965
- var normalizeUnderlying = (addr) => addr === FLUID_EEE_LOWER ? zeroAddress : addr;
19999
+ var normalizeUnderlying = (addr2) => addr2 === FLUID_EEE_LOWER ? zeroAddress : addr2;
19966
20000
  var FLUID_RATE_SCALE = 100;
19967
20001
  var scaleFluidRate = (raw) => {
19968
20002
  if (raw === void 0 || raw === null) return 0;
@@ -20465,9 +20499,9 @@ var getGearboxV3PublicDataConverter = (_lender, chainId, prices, additionalYield
20465
20499
  const underlyingPrice = prices[underlyingPriceKey] ?? 0;
20466
20500
  const debtByCm = {};
20467
20501
  for (const dp of pool.creditManagerDebtParams ?? []) {
20468
- const addr = (dp?.creditManager ?? "").toString().toLowerCase();
20469
- if (!addr) continue;
20470
- debtByCm[addr] = {
20502
+ const addr2 = (dp?.creditManager ?? "").toString().toLowerCase();
20503
+ if (!addr2) continue;
20504
+ debtByCm[addr2] = {
20471
20505
  borrowed: BigInt(dp.borrowed ?? 0),
20472
20506
  limit: BigInt(dp.limit ?? 0),
20473
20507
  available: BigInt(dp.available ?? 0)
@@ -21091,7 +21125,7 @@ function createMidnightBookSource(chainId, fetchImpl = fetch) {
21091
21125
  var MIDNIGHT_BOOK_LEVELS = 20;
21092
21126
  var LKG_TTL_SEC = 30 * 60;
21093
21127
  var lastGood = /* @__PURE__ */ new Map();
21094
- async function fetchTopAndBookWithFallback(source, chainId, marketId, nowSec7) {
21128
+ async function fetchTopAndBookWithFallback(source, chainId, marketId, nowSec9) {
21095
21129
  const key = `${chainId}:${marketId}`;
21096
21130
  let fresh = null;
21097
21131
  if (source.getTopAndBook) {
@@ -21101,11 +21135,11 @@ async function fetchTopAndBookWithFallback(source, chainId, marketId, nowSec7) {
21101
21135
  if (top) fresh = { top, book: { bids: [], asks: [] } };
21102
21136
  }
21103
21137
  if (fresh) {
21104
- lastGood.set(key, { top: fresh.top, book: fresh.book, at: nowSec7 });
21138
+ lastGood.set(key, { top: fresh.top, book: fresh.book, at: nowSec9 });
21105
21139
  return { top: fresh.top, book: fresh.book };
21106
21140
  }
21107
21141
  const cached = lastGood.get(key);
21108
- if (cached && nowSec7 - cached.at <= LKG_TTL_SEC) {
21142
+ if (cached && nowSec9 - cached.at <= LKG_TTL_SEC) {
21109
21143
  return { top: cached.top, book: cached.book };
21110
21144
  }
21111
21145
  return { top: null, book: null };
@@ -21113,17 +21147,17 @@ async function fetchTopAndBookWithFallback(source, chainId, marketId, nowSec7) {
21113
21147
  async function fetchMidnightMarkets(chainId, source = createMidnightBookSource(chainId)) {
21114
21148
  const markets = midnightMarketsByChain(chainId);
21115
21149
  if (markets.length === 0) return [];
21116
- const nowSec7 = Math.floor(Date.now() / 1e3);
21150
+ const nowSec9 = Math.floor(Date.now() / 1e3);
21117
21151
  return Promise.all(
21118
21152
  markets.map(async (config) => {
21119
- if (Number(config.maturity) <= nowSec7) {
21153
+ if (Number(config.maturity) <= nowSec9) {
21120
21154
  return { config, top: null, book: null };
21121
21155
  }
21122
21156
  const { top, book } = await fetchTopAndBookWithFallback(
21123
21157
  source,
21124
21158
  chainId,
21125
21159
  config.marketId,
21126
- nowSec7
21160
+ nowSec9
21127
21161
  );
21128
21162
  return { config, top, book };
21129
21163
  })
@@ -21230,9 +21264,9 @@ function midnightLenderKey(marketId) {
21230
21264
  return "MORPHO_MIDNIGHT_" + marketId.slice(2).toUpperCase();
21231
21265
  }
21232
21266
  function currencyFor(address, decimals, tokens) {
21233
- const lower = address.toLowerCase();
21234
- return tokens[lower] ?? {
21235
- address: lower,
21267
+ const lower3 = address.toLowerCase();
21268
+ return tokens[lower3] ?? {
21269
+ address: lower3,
21236
21270
  symbol: "",
21237
21271
  name: "",
21238
21272
  decimals
@@ -21470,7 +21504,7 @@ var toBig3 = (v) => {
21470
21504
  return 0n;
21471
21505
  }
21472
21506
  };
21473
- function pickAuction(rows, nowSec7 = Math.floor(Date.now() / 1e3)) {
21507
+ function pickAuction(rows, nowSec9 = Math.floor(Date.now() / 1e3)) {
21474
21508
  if (!Array.isArray(rows) || rows.length === 0) return null;
21475
21509
  const live = rows.filter((a) => a && !a.delisted && !a.nonViableAuction).map((a) => ({
21476
21510
  id: String(a.id ?? ""),
@@ -21481,7 +21515,7 @@ function pickAuction(rows, nowSec7 = Math.floor(Date.now() / 1e3)) {
21481
21515
  minOfferAmount: String(a.auctionMinOfferAmount ?? "0"),
21482
21516
  maxBidPriceWad: String(a.auctionMaxBidPrice ?? "0"),
21483
21517
  maxOfferPriceWad: String(a.auctionMaxOfferPrice ?? "0")
21484
- })).filter((a) => a.endTime > nowSec7).sort((a, b) => a.endTime - b.endTime);
21518
+ })).filter((a) => a.endTime > nowSec9).sort((a, b) => a.endTime - b.endTime);
21485
21519
  return live[0] ?? null;
21486
21520
  }
21487
21521
  var TermSubgraphSource = class {
@@ -21704,7 +21738,7 @@ function createTermBookSource(chainId, fetchImpl = fetch) {
21704
21738
  var TERM_BOOK_LEVELS = 20;
21705
21739
  var LKG_TTL_SEC2 = 30 * 60;
21706
21740
  var lastGood2 = /* @__PURE__ */ new Map();
21707
- async function fetchTopAndBookWithFallback2(source, chainId, config, nowSec7) {
21741
+ async function fetchTopAndBookWithFallback2(source, chainId, config, nowSec9) {
21708
21742
  const key = `${chainId}:${config.termRepoId}`;
21709
21743
  let fresh = null;
21710
21744
  if (source.getTopAndBook) {
@@ -21718,13 +21752,13 @@ async function fetchTopAndBookWithFallback2(source, chainId, config, nowSec7) {
21718
21752
  top: fresh.top,
21719
21753
  book: fresh.book,
21720
21754
  auction: fresh.auction ?? null,
21721
- at: nowSec7
21755
+ at: nowSec9
21722
21756
  });
21723
21757
  return { top: fresh.top, book: fresh.book, auction: fresh.auction ?? null };
21724
21758
  }
21725
21759
  const cached = lastGood2.get(key);
21726
- if (cached && nowSec7 - cached.at <= LKG_TTL_SEC2) {
21727
- const stillOpen = cached.auction && cached.auction.endTime > nowSec7 ? cached.auction : null;
21760
+ if (cached && nowSec9 - cached.at <= LKG_TTL_SEC2) {
21761
+ const stillOpen = cached.auction && cached.auction.endTime > nowSec9 ? cached.auction : null;
21728
21762
  return { top: cached.top, book: cached.book, auction: stillOpen };
21729
21763
  }
21730
21764
  return { top: null, book: null, auction: null };
@@ -21732,17 +21766,17 @@ async function fetchTopAndBookWithFallback2(source, chainId, config, nowSec7) {
21732
21766
  async function fetchTermMarkets(chainId, source = createTermBookSource(chainId)) {
21733
21767
  const markets = termMarketsByChain(chainId);
21734
21768
  if (markets.length === 0) return [];
21735
- const nowSec7 = Math.floor(Date.now() / 1e3);
21769
+ const nowSec9 = Math.floor(Date.now() / 1e3);
21736
21770
  return Promise.all(
21737
21771
  markets.map(async (config) => {
21738
- if (Number(config.maturity) <= nowSec7) {
21772
+ if (Number(config.maturity) <= nowSec9) {
21739
21773
  return { config, top: null, book: null, auction: null };
21740
21774
  }
21741
21775
  const { top, book, auction } = await fetchTopAndBookWithFallback2(
21742
21776
  source,
21743
21777
  chainId,
21744
21778
  config,
21745
- nowSec7
21779
+ nowSec9
21746
21780
  );
21747
21781
  return { config, top, book, auction };
21748
21782
  })
@@ -21849,8 +21883,8 @@ function toFixedTermAuction(auction, now, matured = false) {
21849
21883
  };
21850
21884
  }
21851
21885
  function currencyFor2(address, decimals, tokens) {
21852
- const lower = address.toLowerCase();
21853
- return tokens[lower] ?? { address: lower, symbol: "", name: "", decimals };
21886
+ const lower3 = address.toLowerCase();
21887
+ return tokens[lower3] ?? { address: lower3, symbol: "", name: "", decimals };
21854
21888
  }
21855
21889
  function convertTermMarketsToResponse(raw, chainId, prices = {}, _additionalYields = {
21856
21890
  intrinsicYields: {},
@@ -22100,8 +22134,8 @@ function toHuman(raw, decimals) {
22100
22134
  return Number(raw) / 10 ** decimals;
22101
22135
  }
22102
22136
  function currencyFor3(address, decimals, symbol, tokens) {
22103
- const lower = address.toLowerCase();
22104
- return tokens[lower] ?? { address: lower, symbol, name: symbol, decimals };
22137
+ const lower3 = address.toLowerCase();
22138
+ return tokens[lower3] ?? { address: lower3, symbol, name: symbol, decimals };
22105
22139
  }
22106
22140
  function convertExactlyMarketsToResponse(raw, chainId, prices = {}, _additionalYields = {
22107
22141
  intrinsicYields: {},
@@ -22371,8 +22405,8 @@ function toHuman2(raw, decimals) {
22371
22405
  return Number(raw) / 10 ** decimals;
22372
22406
  }
22373
22407
  function currencyFor4(address, decimals, symbol, tokens) {
22374
- const lower = address.toLowerCase();
22375
- return tokens[lower] ?? { address: lower, symbol, name: symbol, decimals };
22408
+ const lower3 = address.toLowerCase();
22409
+ return tokens[lower3] ?? { address: lower3, symbol, name: symbol, decimals };
22376
22410
  }
22377
22411
  function convertLiquityMarketsToResponse(raw, chainId, prices = {}, _additionalYields = {
22378
22412
  intrinsicYields: {},
@@ -22648,8 +22682,8 @@ function toHuman3(raw, decimals) {
22648
22682
  return Number(raw) / 10 ** decimals;
22649
22683
  }
22650
22684
  function currencyFor5(address, decimals, symbol, tokens) {
22651
- const lower = address.toLowerCase();
22652
- return tokens[lower] ?? { address: lower, symbol, name: symbol, decimals };
22685
+ const lower3 = address.toLowerCase();
22686
+ return tokens[lower3] ?? { address: lower3, symbol, name: symbol, decimals };
22653
22687
  }
22654
22688
  function convertRiverMarketsToResponse(raw, chainId, prices = {}, _additionalYields = {
22655
22689
  intrinsicYields: {},
@@ -22878,7 +22912,7 @@ async function fetchTellerMarkets(chainId) {
22878
22912
  } catch {
22879
22913
  return { chainId, pools: [] };
22880
22914
  }
22881
- const big4 = (i) => {
22915
+ const big7 = (i) => {
22882
22916
  const r = results[i];
22883
22917
  if (typeof r === "bigint") return r;
22884
22918
  if (typeof r === "number") return BigInt(r);
@@ -22891,21 +22925,21 @@ async function fetchTellerMarkets(chainId) {
22891
22925
  }
22892
22926
  return null;
22893
22927
  };
22894
- const num6 = (i) => {
22895
- const b = big4(i);
22928
+ const num9 = (i) => {
22929
+ const b = big7(i);
22896
22930
  return b === null ? null : Number(b);
22897
22931
  };
22898
22932
  const pool0 = pools.map((config, i) => {
22899
22933
  const base = i * READS_PER_POOL;
22900
22934
  return {
22901
22935
  config,
22902
- available: big4(base),
22903
- committed: big4(base + 1),
22904
- minRateBps: num6(base + 2),
22905
- collateralPerPrincipal: big4(base + 3),
22906
- maxLoanDuration: num6(base + 4),
22907
- marketId: big4(base + 5),
22908
- totalAssets: big4(base + 6)
22936
+ available: big7(base),
22937
+ committed: big7(base + 1),
22938
+ minRateBps: num9(base + 2),
22939
+ collateralPerPrincipal: big7(base + 3),
22940
+ maxLoanDuration: num9(base + 4),
22941
+ marketId: big7(base + 5),
22942
+ totalAssets: big7(base + 6)
22909
22943
  };
22910
22944
  });
22911
22945
  const attByMarket = /* @__PURE__ */ new Map();
@@ -22976,6 +23010,240 @@ async function fetchTellerMarkets(chainId) {
22976
23010
  });
22977
23011
  return { chainId, pools: out };
22978
23012
  }
23013
+ var DEFAULT_TERMMAX_API = "https://api.termmax.ts.finance";
23014
+ var warn3 = (...args) => {
23015
+ };
23016
+ function termMaxApiBase(chainId) {
23017
+ return termMaxApiBaseUrl(chainId) || DEFAULT_TERMMAX_API;
23018
+ }
23019
+ var toBig4 = (v) => {
23020
+ try {
23021
+ if (v == null) return 0n;
23022
+ if (typeof v === "bigint") return v;
23023
+ if (typeof v === "number") return BigInt(Math.trunc(v));
23024
+ const s = String(v).trim();
23025
+ if (s === "") return 0n;
23026
+ return BigInt(s.includes(".") ? s.slice(0, s.indexOf(".")) : s);
23027
+ } catch {
23028
+ return 0n;
23029
+ }
23030
+ };
23031
+ var toNum2 = (v) => {
23032
+ const n = Number(v);
23033
+ return Number.isFinite(n) ? n : 0;
23034
+ };
23035
+ var lower = (v) => String(v ?? "").toLowerCase();
23036
+ function parseCuts(raw) {
23037
+ if (!Array.isArray(raw)) return [];
23038
+ return raw.map((c) => ({
23039
+ xtReserve: toBig4(c?.xtReserve),
23040
+ liqSquare: toBig4(c?.liqSquare),
23041
+ offset: toBig4(c?.offset)
23042
+ }));
23043
+ }
23044
+ function parseFeeConfig(raw) {
23045
+ if (!raw) return void 0;
23046
+ return {
23047
+ lendTakerFeeRatio: toBig4(raw.lendTakerFeeRatio),
23048
+ lendMakerFeeRatio: toBig4(raw.lendMakerFeeRatio),
23049
+ borrowTakerFeeRatio: toBig4(raw.borrowTakerFeeRatio),
23050
+ borrowMakerFeeRatio: toBig4(raw.borrowMakerFeeRatio),
23051
+ mintGtFeeRatio: toBig4(raw.mintGtFeeRatio),
23052
+ mintGtFeeRef: toBig4(raw.mintGtFeeRef)
23053
+ };
23054
+ }
23055
+ function toUnix(iso) {
23056
+ if (typeof iso === "number") return Math.trunc(iso);
23057
+ const t = Date.parse(String(iso ?? ""));
23058
+ return Number.isFinite(t) ? Math.floor(t / 1e3) : 0;
23059
+ }
23060
+ function parseMarket(raw, assetDecimals) {
23061
+ const c = raw?.contracts;
23062
+ if (!c?.marketAddr || !c?.underlyingAddr || !c?.collateralAddr) return null;
23063
+ const debtToken = lower(c.underlyingAddr);
23064
+ const collateral = lower(c.collateralAddr);
23065
+ return {
23066
+ market: lower(c.marketAddr),
23067
+ ft: lower(c.ftAddr),
23068
+ xt: lower(c.xtAddr),
23069
+ gt: lower(c.gtAddr),
23070
+ debtToken,
23071
+ debtDecimals: assetDecimals.get(debtToken) ?? 18,
23072
+ collateral,
23073
+ collateralDecimals: assetDecimals.get(collateral) ?? 18,
23074
+ symbol: raw.symbol,
23075
+ maturity: toUnix(raw.maturity),
23076
+ maxLtv: String(raw.maxLtv ?? "0"),
23077
+ liquidationLtv: String(raw.liquidationLtv ?? "0"),
23078
+ liquidatable: raw.liquidatable !== false,
23079
+ liquidationWindowSeconds: toNum2(raw.liquidationWindowSeconds) || void 0,
23080
+ version: raw.version,
23081
+ feeConfig: parseFeeConfig(raw.defaultFeeConfig),
23082
+ isMatured: raw.isMatured === true,
23083
+ isEnabled: raw.isEnabled !== false
23084
+ };
23085
+ }
23086
+ function parseOrder(raw) {
23087
+ const oc = raw?.orderConfig?.contracts ?? raw?.orderInfo;
23088
+ const orderAddress = lower(oc?.orderAddr ?? raw?.orderInfo?.orderAddress);
23089
+ const marketAddress = lower(oc?.marketAddr ?? raw?.orderInfo?.marketAddress);
23090
+ if (!orderAddress || !marketAddress) return null;
23091
+ const state = raw?.orderInfo?.contractState ?? raw?.contractState ?? {};
23092
+ const meta = raw?.metadata ?? {};
23093
+ const term = raw?.priceInfo?.term ?? {};
23094
+ return {
23095
+ orderAddress,
23096
+ marketAddress,
23097
+ makerAddress: raw?.orderConfig?.makerAddress ? lower(raw.orderConfig.makerAddress) : void 0,
23098
+ makerIsVault: state.makerIsVault === true,
23099
+ virtualXtReserve: toBig4(state.virtualXtReserve),
23100
+ ftReserve: toBig4(state.ftReserve),
23101
+ xtReserve: toBig4(state.xtReserve),
23102
+ maxXtReserve: toBig4(state.maxXtReserve),
23103
+ gtId: toBig4(state.gtId),
23104
+ // ── the crossing ──
23105
+ takerLendCuts: parseCuts(state.borrowCurve),
23106
+ takerBorrowCuts: parseCuts(state.lendCurve),
23107
+ takerLendApr: term?.bcft?.apr != null ? toNum2(term.bcft.apr) : void 0,
23108
+ takerBorrowApr: term?.lcft?.apr != null ? toNum2(term.lcft.apr) : void 0,
23109
+ feeConfig: parseFeeConfig(state.feeConfig),
23110
+ lendCapacityUsd: toNum2(meta.lendCapacityValue),
23111
+ borrowCapacityUsd: toNum2(meta.borrowCapacityValue),
23112
+ lendCapacityAmount: toNum2(meta.lendCapacityAmount),
23113
+ borrowCapacityAmount: toNum2(meta.borrowCapacityAmount)
23114
+ };
23115
+ }
23116
+ function reduceTop2(orders) {
23117
+ let bestLendApr;
23118
+ let bestBorrowApr;
23119
+ let lendDepthUsd = 0;
23120
+ let borrowDepthUsd = 0;
23121
+ let lendDepthAmount = 0;
23122
+ let borrowDepthAmount = 0;
23123
+ for (const o of orders) {
23124
+ lendDepthUsd += o.lendCapacityUsd;
23125
+ borrowDepthUsd += o.borrowCapacityUsd;
23126
+ lendDepthAmount += o.lendCapacityAmount;
23127
+ borrowDepthAmount += o.borrowCapacityAmount;
23128
+ if (o.takerLendApr != null && o.takerLendApr > 0 && o.lendCapacityUsd > 0) {
23129
+ if (bestLendApr === void 0 || o.takerLendApr > bestLendApr) {
23130
+ bestLendApr = o.takerLendApr;
23131
+ }
23132
+ }
23133
+ if (o.takerBorrowApr != null && o.takerBorrowApr > 0 && o.borrowCapacityUsd > 0) {
23134
+ if (bestBorrowApr === void 0 || o.takerBorrowApr < bestBorrowApr) {
23135
+ bestBorrowApr = o.takerBorrowApr;
23136
+ }
23137
+ }
23138
+ }
23139
+ return {
23140
+ bestLendApr,
23141
+ bestBorrowApr,
23142
+ lendDepthUsd,
23143
+ borrowDepthUsd,
23144
+ lendDepthAmount,
23145
+ borrowDepthAmount
23146
+ };
23147
+ }
23148
+ var TermMaxApiSource = class {
23149
+ baseUrl;
23150
+ fetchImpl;
23151
+ constructor(baseUrl, fetchImpl = fetch) {
23152
+ this.baseUrl = baseUrl.replace(/\/+$/, "");
23153
+ this.fetchImpl = (input, init) => fetchImpl.call(globalThis, input, init);
23154
+ }
23155
+ async getChainMarkets(chainId) {
23156
+ const url = `${this.baseUrl}/market/data?chainId=${chainId}`;
23157
+ let json;
23158
+ try {
23159
+ const res = await this.fetchImpl(url);
23160
+ if (!res.ok) {
23161
+ warn3(`market/data ${chainId} \u2192 HTTP ${res.status}`);
23162
+ return null;
23163
+ }
23164
+ json = await res.json();
23165
+ } catch (e) {
23166
+ warn3(`market/data ${chainId} fetch failed:`, e?.message ?? e);
23167
+ return null;
23168
+ }
23169
+ const data = json?.data ?? json;
23170
+ if (!data) return null;
23171
+ const assetDecimals = /* @__PURE__ */ new Map();
23172
+ for (const a of Array.isArray(data.assetConfigs) ? data.assetConfigs : []) {
23173
+ const addr2 = lower(a?.assetAddress);
23174
+ const dec = Number(a?.assetDecimals);
23175
+ if (addr2 && Number.isFinite(dec)) assetDecimals.set(addr2, dec);
23176
+ }
23177
+ const markets = [];
23178
+ for (const m of Array.isArray(data.markets) ? data.markets : []) {
23179
+ const parsed = parseMarket(m, assetDecimals);
23180
+ if (parsed && parsed.isEnabled && !parsed.isMatured) markets.push(parsed);
23181
+ }
23182
+ if (markets.length === 0) return [];
23183
+ const ordersByMarket = /* @__PURE__ */ new Map();
23184
+ for (const o of Array.isArray(data.orders) ? data.orders : []) {
23185
+ const parsed = parseOrder(o);
23186
+ if (!parsed) continue;
23187
+ const list = ordersByMarket.get(parsed.marketAddress);
23188
+ if (list) list.push(parsed);
23189
+ else ordersByMarket.set(parsed.marketAddress, [parsed]);
23190
+ }
23191
+ return markets.map((config) => {
23192
+ const orders = ordersByMarket.get(config.market) ?? [];
23193
+ return { config, top: reduceTop2(orders), orders };
23194
+ });
23195
+ }
23196
+ };
23197
+ function createTermMaxDataSource(chainId, fetchImpl = fetch) {
23198
+ return new TermMaxApiSource(termMaxApiBase(chainId), fetchImpl);
23199
+ }
23200
+
23201
+ // src/lending/public-data/termmax/fetchPublic.ts
23202
+ var LKG_TTL_SEC3 = 30 * 60;
23203
+ var lastGood3 = /* @__PURE__ */ new Map();
23204
+ var MARKET_CACHE_TTL_MS = 10 * 6e4;
23205
+ var marketCache = /* @__PURE__ */ new Map();
23206
+ var marketKey = (chainId, market) => `${chainId}:${market.toLowerCase()}`;
23207
+ function rememberMarkets(chainId, raw) {
23208
+ const at = Date.now();
23209
+ for (const { config } of raw) {
23210
+ marketCache.set(marketKey(chainId, config.market), { config, at });
23211
+ }
23212
+ }
23213
+ function getCachedTermMaxMarket(chainId, market) {
23214
+ const hit = marketCache.get(marketKey(chainId, market));
23215
+ if (!hit || Date.now() - hit.at > MARKET_CACHE_TTL_MS) return void 0;
23216
+ return hit.config;
23217
+ }
23218
+ function getCachedTermMaxMarkets(chainId) {
23219
+ const prefix = `${chainId}:`;
23220
+ const now = Date.now();
23221
+ const out = [];
23222
+ for (const [key, hit] of marketCache) {
23223
+ if (!key.startsWith(prefix)) continue;
23224
+ if (now - hit.at > MARKET_CACHE_TTL_MS) continue;
23225
+ out.push(hit.config);
23226
+ }
23227
+ return out;
23228
+ }
23229
+ async function fetchTermMaxMarkets(chainId, source = createTermMaxDataSource(chainId)) {
23230
+ if (!termMaxConfigByChain(chainId)) return [];
23231
+ const nowSec9 = Math.floor(Date.now() / 1e3);
23232
+ const fresh = await source.getChainMarkets(chainId).catch(() => null);
23233
+ if (fresh) {
23234
+ const live = fresh.filter((m) => m.config.maturity > nowSec9);
23235
+ lastGood3.set(chainId, { markets: live, at: nowSec9 });
23236
+ rememberMarkets(chainId, live);
23237
+ return live;
23238
+ }
23239
+ const cached = lastGood3.get(chainId);
23240
+ if (cached && nowSec9 - cached.at <= LKG_TTL_SEC3) {
23241
+ const live = cached.markets.filter((m) => m.config.maturity > nowSec9);
23242
+ rememberMarkets(chainId, live);
23243
+ return live;
23244
+ }
23245
+ return [];
23246
+ }
22979
23247
 
22980
23248
  // src/lending/public-data/teller/math.ts
22981
23249
  function tellerBpsToPercent(bps) {
@@ -23006,8 +23274,8 @@ function tellerPoolFromLenderKey(lender) {
23006
23274
  return body.length === 40 ? "0x" + body.toLowerCase() : void 0;
23007
23275
  }
23008
23276
  function currencyFor6(address, decimals, symbol, tokens) {
23009
- const lower = address.toLowerCase();
23010
- return tokens[lower] ?? { address: lower, symbol, name: symbol, decimals };
23277
+ const lower3 = address.toLowerCase();
23278
+ return tokens[lower3] ?? { address: lower3, symbol, name: symbol, decimals };
23011
23279
  }
23012
23280
  function fmtDuration2(sec) {
23013
23281
  if (sec == null || sec <= 0) return "a short window";
@@ -23016,9 +23284,9 @@ function fmtDuration2(sec) {
23016
23284
  return `${Math.round(sec / 86400)} day${sec < 172800 ? "" : "s"}`;
23017
23285
  }
23018
23286
  function priceFor(address, chainId, tokens, prices) {
23019
- const lower = address.toLowerCase();
23020
- const token = tokens[lower];
23021
- const key = toOracleKey(token?.assetGroup) || toGenericPriceKey(lower, chainId);
23287
+ const lower3 = address.toLowerCase();
23288
+ const token = tokens[lower3];
23289
+ const key = toOracleKey(token?.assetGroup) || toGenericPriceKey(lower3, chainId);
23022
23290
  return prices[key] ?? 0;
23023
23291
  }
23024
23292
  function convertTellerMarketsToResponse(raw, chainId, prices = {}, _additionalYields = {
@@ -23267,6 +23535,615 @@ function convertTellerMarketsToResponse(raw, chainId, prices = {}, _additionalYi
23267
23535
  return out;
23268
23536
  }
23269
23537
 
23538
+ // src/lending/public-data/termmax/math.ts
23539
+ var DECIMAL_BASE = 100000000n;
23540
+ var DAYS_IN_YEAR2 = 365n;
23541
+ var SECONDS_IN_DAY = 86400n;
23542
+ var MAX_FEE_RATIO = 20000000n;
23543
+ function daysToMaturity(maturity, nowSec9) {
23544
+ const remaining = BigInt(Math.trunc(maturity)) - BigInt(Math.trunc(nowSec9));
23545
+ if (remaining <= 0n) return 0n;
23546
+ return (remaining + SECONDS_IN_DAY - 1n) / SECONDS_IN_DAY;
23547
+ }
23548
+ function calcCutId(cuts, xtReserve) {
23549
+ let id = cuts.length;
23550
+ while (id > 0) {
23551
+ id--;
23552
+ if (xtReserve >= cuts[id].xtReserve) return id;
23553
+ }
23554
+ return cuts.length > 0 ? 0 : -1;
23555
+ }
23556
+ function intervalProps(netInterestFactor, days, cut, xtReserve) {
23557
+ if (days <= 0n) return null;
23558
+ const liqSquare = cut.liqSquare * days * netInterestFactor / (DAYS_IN_YEAR2 * DECIMAL_BASE);
23559
+ const vXtReserve = xtReserve + cut.offset;
23560
+ if (vXtReserve <= 0n) return null;
23561
+ return { liqSquare, vXtReserve, vFtReserve: liqSquare / vXtReserve };
23562
+ }
23563
+ function curveApr(cuts, virtualXtReserve, days) {
23564
+ if (cuts.length === 0 || days <= 0n) return 0n;
23565
+ const id = calcCutId(cuts, virtualXtReserve);
23566
+ if (id < 0) return 0n;
23567
+ const props = intervalProps(DECIMAL_BASE, days, cuts[id], virtualXtReserve);
23568
+ if (!props || props.vXtReserve === 0n) return 0n;
23569
+ return props.vFtReserve * DECIMAL_BASE * DAYS_IN_YEAR2 / (props.vXtReserve * days);
23570
+ }
23571
+ function ratioToNumber(v) {
23572
+ return Number(v) / Number(DECIMAL_BASE);
23573
+ }
23574
+ function ratioToPercent(v) {
23575
+ return Number(v) / Number(DECIMAL_BASE) * 100;
23576
+ }
23577
+ function curveAprNumber(cuts, virtualXtReserve, days) {
23578
+ return ratioToNumber(curveApr(cuts, virtualXtReserve, days));
23579
+ }
23580
+ function lendNif(fee) {
23581
+ const f = fee?.lendTakerFeeRatio ?? 0n;
23582
+ const nif = DECIMAL_BASE - (f > MAX_FEE_RATIO ? MAX_FEE_RATIO : f);
23583
+ return nif > 0n ? nif : DECIMAL_BASE;
23584
+ }
23585
+ function borrowNif(fee) {
23586
+ const f = fee?.borrowTakerFeeRatio ?? 0n;
23587
+ return DECIMAL_BASE + (f > MAX_FEE_RATIO ? MAX_FEE_RATIO : f);
23588
+ }
23589
+ function mintGtFeeRatio(fee, days) {
23590
+ if (!fee || days <= 0n) return 0n;
23591
+ const ratio = fee.mintGtFeeRatio ?? 0n;
23592
+ const ref = fee.mintGtFeeRef ?? 0n;
23593
+ const denom = DAYS_IN_YEAR2 * DECIMAL_BASE + ref * days;
23594
+ if (denom === 0n) return 0n;
23595
+ return days * ratio * ref / denom;
23596
+ }
23597
+ var TERMMAX_LIQUIDATION_PENALTY = 0.1;
23598
+ var TERMMAX_LIQUIDATOR_BONUS = 0.05;
23599
+ var TERMMAX_PARTIAL_LIQUIDATION_THRESHOLD_USD = 1e4;
23600
+ var TERMMAX_PARTIAL_CLOSE_FACTOR = 0.5;
23601
+ var TERMMAX_LIQUIDATION_WINDOW_SECS = 7200;
23602
+ function parseTermMaxLtv(v) {
23603
+ if (v === void 0 || v === null || v === "") return 0;
23604
+ try {
23605
+ return Number(BigInt(v)) / Number(DECIMAL_BASE);
23606
+ } catch {
23607
+ const n = Number(v);
23608
+ return Number.isFinite(n) ? n / Number(DECIMAL_BASE) : 0;
23609
+ }
23610
+ }
23611
+
23612
+ // src/lending/public-data/termmax/convertPublic.ts
23613
+ var nowSec4 = () => Math.floor(Date.now() / 1e3);
23614
+ function currencyFor7(address, decimals, tokens) {
23615
+ const lower3 = address.toLowerCase();
23616
+ return tokens[lower3] ?? {
23617
+ address: lower3,
23618
+ symbol: "",
23619
+ name: "",
23620
+ decimals
23621
+ };
23622
+ }
23623
+ function priceFor2(address, chainId, prices, tokens) {
23624
+ const asset = tokens[address];
23625
+ const key = toOracleKey(asset?.assetGroup) || toGenericPriceKey(address, chainId);
23626
+ return prices[key] ?? 0;
23627
+ }
23628
+ function convertTermMaxMarketsToResponse(raw, chainId, prices = {}, _additionalYields = {
23629
+ intrinsicYields: {},
23630
+ lenderRewards: {},
23631
+ loaded: true
23632
+ }, tokens = {}) {
23633
+ const out = {};
23634
+ const now = nowSec4();
23635
+ for (const { config, top, orders } of raw) {
23636
+ if (!config?.market || !config.debtToken || !config.collateral) continue;
23637
+ const m = termMaxLenderKey(config.market);
23638
+ const maturity = Number(config.maturity);
23639
+ const ttm = maturity - now;
23640
+ const matured = ttm <= 0;
23641
+ const days = daysToMaturity(maturity, now);
23642
+ const supplyAprPct = !matured ? (top?.bestLendApr ?? 0) * 100 : 0;
23643
+ const borrowAprPct = !matured ? (top?.bestBorrowApr ?? 0) * 100 : 0;
23644
+ const debtAddr = config.debtToken;
23645
+ const collAddr = config.collateral;
23646
+ priceFor2(debtAddr, chainId, prices, tokens);
23647
+ const collPrice = priceFor2(collAddr, chainId, prices, tokens);
23648
+ const supplyLiquidity = matured ? 0 : top?.lendDepthAmount ?? 0;
23649
+ const borrowLiquidity = matured ? 0 : top?.borrowDepthAmount ?? 0;
23650
+ const supplyLiquidityUSD = matured ? 0 : top?.lendDepthUsd ?? 0;
23651
+ const borrowLiquidityUSD = matured ? 0 : top?.borrowDepthUsd ?? 0;
23652
+ const maxLtv = parseTermMaxLtv(config.maxLtv);
23653
+ const liquidationLtv = parseTermMaxLtv(config.liquidationLtv);
23654
+ const closeFactor = borrowLiquidityUSD > TERMMAX_PARTIAL_LIQUIDATION_THRESHOLD_USD ? TERMMAX_PARTIAL_CLOSE_FACTOR : 1;
23655
+ const liquidationPenalty = config.liquidatable ? TERMMAX_LIQUIDATION_PENALTY : 0;
23656
+ const terms = borrowAprPct > 0 && !matured ? [
23657
+ {
23658
+ termId: maturity,
23659
+ durationSecs: Math.max(0, ttm),
23660
+ durationDays: ttm / 86400,
23661
+ apr: borrowAprPct
23662
+ }
23663
+ ] : void 0;
23664
+ const originationFeePercent = ratioToPercent(
23665
+ mintGtFeeRatio(config.feeConfig, days)
23666
+ );
23667
+ const entry = { data: {} };
23668
+ const loanUid = createMarketUid(chainId, m, debtAddr);
23669
+ entry.data[loanUid] = {
23670
+ marketUid: loanUid,
23671
+ name: "Loan " + (tokens[debtAddr]?.symbol ?? ""),
23672
+ poolId: debtAddr,
23673
+ underlying: debtAddr,
23674
+ asset: currencyFor7(debtAddr, config.debtDecimals, tokens),
23675
+ totalDeposits: supplyLiquidity,
23676
+ totalDebtStable: 0,
23677
+ totalDebt: 0,
23678
+ totalLiquidity: borrowLiquidity,
23679
+ borrowLiquidity,
23680
+ totalLiquidityUSD: borrowLiquidityUSD,
23681
+ borrowLiquidityUSD,
23682
+ totalDepositsUSD: supplyLiquidityUSD,
23683
+ totalDebtStableUSD: 0,
23684
+ totalDebtUSD: 0,
23685
+ // No utilization curve — price comes from per-maker curves, not a pool.
23686
+ utilization: 0,
23687
+ depositRate: supplyAprPct,
23688
+ variableBorrowRate: borrowAprPct,
23689
+ rateModel: "fixedTerm",
23690
+ // Fixed-rate: mirror onto stableBorrowRate so fixed-rate consumers pick it
23691
+ // up as a term product.
23692
+ stableBorrowRate: borrowAprPct,
23693
+ intrinsicYield: 0,
23694
+ rewards: void 0,
23695
+ decimals: config.debtDecimals,
23696
+ config: {
23697
+ 0: {
23698
+ category: 0,
23699
+ borrowCollateralFactor: 0,
23700
+ collateralFactor: 0,
23701
+ borrowFactor: 1,
23702
+ liquidationPenalty: 0,
23703
+ closeFactor,
23704
+ collateralDisabled: true,
23705
+ debtDisabled: false
23706
+ }
23707
+ },
23708
+ closeFactor,
23709
+ collateralActive: false,
23710
+ borrowingEnabled: !matured && borrowLiquidity > 0,
23711
+ depositsEnabled: !matured,
23712
+ hasStable: false,
23713
+ // Borrowing IS fixed-term (see `terms` + `fixedTerm`), but it is real
23714
+ // borrowing — do NOT set this, or borrowable-only filters hide the market.
23715
+ variableBorrowDisabled: false,
23716
+ isActive: true,
23717
+ isFrozen: false
23718
+ };
23719
+ const collUid = createMarketUid(chainId, m, collAddr);
23720
+ const collCapacityUSD = maxLtv > 0 ? borrowLiquidityUSD / maxLtv : borrowLiquidityUSD;
23721
+ const collCapacity = collPrice > 0 ? collCapacityUSD / collPrice : 0;
23722
+ entry.data[collUid] = {
23723
+ marketUid: collUid,
23724
+ name: "Collateral " + (tokens[collAddr]?.symbol ?? ""),
23725
+ poolId: collAddr,
23726
+ underlying: collAddr,
23727
+ asset: currencyFor7(collAddr, config.collateralDecimals, tokens),
23728
+ totalDeposits: collCapacity,
23729
+ totalDebtStable: 0,
23730
+ totalDebt: 0,
23731
+ totalLiquidity: collCapacity,
23732
+ borrowLiquidity: 0,
23733
+ totalLiquidityUSD: collCapacityUSD,
23734
+ borrowLiquidityUSD: 0,
23735
+ totalDepositsUSD: collCapacityUSD,
23736
+ totalDebtStableUSD: 0,
23737
+ totalDebtUSD: 0,
23738
+ utilization: 0,
23739
+ depositRate: 0,
23740
+ variableBorrowRate: 0,
23741
+ stableBorrowRate: 0,
23742
+ intrinsicYield: 0,
23743
+ rewards: void 0,
23744
+ decimals: config.collateralDecimals,
23745
+ config: {
23746
+ 0: {
23747
+ category: 0,
23748
+ borrowCollateralFactor: liquidationLtv,
23749
+ collateralFactor: maxLtv,
23750
+ borrowFactor: 1,
23751
+ liquidationPenalty,
23752
+ closeFactor,
23753
+ collateralDisabled: false,
23754
+ debtDisabled: true
23755
+ }
23756
+ },
23757
+ closeFactor,
23758
+ collateralActive: true,
23759
+ borrowingEnabled: false,
23760
+ depositsEnabled: !matured,
23761
+ hasStable: false,
23762
+ isActive: true,
23763
+ isFrozen: false
23764
+ };
23765
+ entry.params = {
23766
+ market: {
23767
+ lender: m,
23768
+ name: config.symbol,
23769
+ loanDecimals: config.debtDecimals,
23770
+ collateralDecimals: config.collateralDecimals,
23771
+ id: config.market,
23772
+ lltv: config.liquidationLtv,
23773
+ oracle: config.oracle ?? zeroAddress,
23774
+ irm: zeroAddress,
23775
+ collateralAddress: collAddr,
23776
+ loanAddress: debtAddr,
23777
+ terms,
23778
+ // TermMax-specific extras consumed by the calldata / worker-api
23779
+ // resolvers. FT is the lend position, GT the borrow sub-account.
23780
+ maturity: String(config.maturity),
23781
+ ft: config.ft,
23782
+ xt: config.xt,
23783
+ gt: config.gt,
23784
+ maxLtv: config.maxLtv,
23785
+ liquidationLtv: config.liquidationLtv,
23786
+ liquidatable: config.liquidatable,
23787
+ liquidationWindowSeconds: config.liquidationWindowSeconds,
23788
+ version: config.version,
23789
+ // Executable order set, best-first per side — what a builder quotes
23790
+ // against. Depth caps are hard: an order can refuse beyond them.
23791
+ orders: orders.map((o) => ({
23792
+ order: o.orderAddress,
23793
+ maker: o.makerAddress,
23794
+ makerIsVault: o.makerIsVault,
23795
+ lendApr: o.takerLendApr,
23796
+ borrowApr: o.takerBorrowApr,
23797
+ lendCapacityUsd: o.lendCapacityUsd,
23798
+ borrowCapacityUsd: o.borrowCapacityUsd,
23799
+ lendCapacityAmount: o.lendCapacityAmount,
23800
+ borrowCapacityAmount: o.borrowCapacityAmount
23801
+ })),
23802
+ fixedTerm: {
23803
+ model: "termmax",
23804
+ maturity,
23805
+ fees: {
23806
+ // % of principal, charged once when the GT is minted.
23807
+ originationFeePercent
23808
+ },
23809
+ // Exit early by buying discounted FT and handing it back at par — a
23810
+ // market price, not a penalty. Same as Midnight.
23811
+ earlyRepay: { kind: "none" },
23812
+ // The term is an aggregate of many per-maker order contracts; there is
23813
+ // no single provider at the market level.
23814
+ provider: { kind: "orderbook" }
23815
+ }
23816
+ }
23817
+ };
23818
+ entry.chainId = chainId;
23819
+ out[m] = entry;
23820
+ }
23821
+ return out;
23822
+ }
23823
+ var FIXED_MARKETS_URL = "https://www.inverse.finance/api/f2/fixed-markets";
23824
+ var DBR_URL = "https://www.inverse.finance/api/dbr";
23825
+ var INVERSE_PUBLIC_READ_ABI = [
23826
+ ...InverseMarketAbi,
23827
+ ...InverseOracleAbi,
23828
+ ...InverseDbrAbi,
23829
+ ...Erc20Abi
23830
+ ];
23831
+ var READS_PER_MARKET2 = 4;
23832
+ var fetchJson = async (url, timeoutMs = 6e3) => {
23833
+ const res = await fetch(url, {
23834
+ headers: { accept: "application/json" },
23835
+ signal: AbortSignal.timeout(timeoutMs)
23836
+ });
23837
+ if (!res.ok) throw new Error(`HTTP ${res.status}`);
23838
+ return res.json();
23839
+ };
23840
+ var fetchDbrPriceDola = async (snapshot) => {
23841
+ try {
23842
+ const d = await fetchJson(DBR_URL);
23843
+ const p = Number(d?.priceDola);
23844
+ if (Number.isFinite(p) && p > 0) return p;
23845
+ } catch {
23846
+ }
23847
+ const snap = Number(snapshot);
23848
+ return Number.isFinite(snap) && snap > 0 ? snap : null;
23849
+ };
23850
+ async function fetchInverseMarkets(lender, chainId) {
23851
+ const config = inverseConfigFor(lender, chainId);
23852
+ const chainData = inverseChainData(lender, chainId);
23853
+ const markets = chainData?.markets ?? [];
23854
+ const empty = {
23855
+ lender,
23856
+ config,
23857
+ chainData,
23858
+ dbrPriceDola: null,
23859
+ replenishmentPriceBps: null,
23860
+ markets: [],
23861
+ source: "none"
23862
+ };
23863
+ if (!config || markets.length === 0) return empty;
23864
+ const dbrPricePromise = fetchDbrPriceDola(config.dbrPriceDolaSnapshot);
23865
+ try {
23866
+ const api = await fetchJson(FIXED_MARKETS_URL);
23867
+ const byAddr = {};
23868
+ for (const m of api?.markets ?? []) {
23869
+ if (m?.address) byAddr[String(m.address).toLowerCase()] = m;
23870
+ }
23871
+ if (Object.keys(byAddr).length > 0) {
23872
+ const rows = markets.map((market) => {
23873
+ const m = byAddr[market.address.toLowerCase()];
23874
+ const num9 = (v) => typeof v === "number" && Number.isFinite(v) ? v : null;
23875
+ return {
23876
+ market,
23877
+ totalDebt: num9(m?.totalDebt),
23878
+ dolaLiquidity: num9(m?.dolaLiquidity),
23879
+ leftToBorrow: num9(m?.leftToBorrow),
23880
+ price: num9(m?.price),
23881
+ borrowPaused: typeof m?.borrowPaused === "boolean" ? m.borrowPaused : null,
23882
+ dailyBorrows: num9(m?.dailyBorrows)
23883
+ };
23884
+ });
23885
+ return {
23886
+ lender,
23887
+ config,
23888
+ chainData,
23889
+ dbrPriceDola: await dbrPricePromise,
23890
+ replenishmentPriceBps: num(api, "replenishmentPriceBps"),
23891
+ markets: rows,
23892
+ source: "api"
23893
+ };
23894
+ }
23895
+ } catch {
23896
+ }
23897
+ const calls = [
23898
+ { address: config.dbr, name: "replenishmentPriceBps", params: [] },
23899
+ ...markets.flatMap((m) => [
23900
+ { address: m.address, name: "totalDebt", params: [] },
23901
+ { address: m.address, name: "borrowPaused", params: [] },
23902
+ { address: config.dola, name: "balanceOf", params: [m.address] },
23903
+ {
23904
+ address: config.oracle,
23905
+ name: "viewPrice",
23906
+ params: [m.collToken, BigInt(m.collateralFactorBps)]
23907
+ }
23908
+ ])
23909
+ ];
23910
+ try {
23911
+ const results = await multicallRetryUniversal({
23912
+ chain: chainId,
23913
+ calls,
23914
+ abi: INVERSE_PUBLIC_READ_ABI,
23915
+ allowFailure: true
23916
+ });
23917
+ const bigAt = (i) => {
23918
+ const r = results[i];
23919
+ if (typeof r === "bigint") return r;
23920
+ if (typeof r === "number") return BigInt(r);
23921
+ return null;
23922
+ };
23923
+ const debtDecimals = config.debtDecimals ?? 18;
23924
+ const rows = markets.map((market, i) => {
23925
+ const base = 1 + i * READS_PER_MARKET2;
23926
+ const totalDebt = bigAt(base);
23927
+ const paused = results[base + 1];
23928
+ const liq = bigAt(base + 2);
23929
+ const price2 = bigAt(base + 3);
23930
+ return {
23931
+ market,
23932
+ totalDebt: totalDebt !== null ? Number(totalDebt) / 10 ** debtDecimals : null,
23933
+ dolaLiquidity: liq !== null ? Number(liq) / 10 ** debtDecimals : null,
23934
+ // dailyBorrows lives on the BorrowController (day-bucketed
23935
+ // mapping) — the fallback conservatively caps by liquidity only.
23936
+ leftToBorrow: null,
23937
+ // viewPrice scales so that price * balance / 1e18 is USD-ish:
23938
+ // 10^(36 − collDecimals) per unit — normalize to USD per token.
23939
+ price: price2 !== null ? Number(price2) / 10 ** (36 - market.collDecimals) : null,
23940
+ borrowPaused: typeof paused === "boolean" ? paused : null,
23941
+ dailyBorrows: null
23942
+ };
23943
+ });
23944
+ return {
23945
+ lender,
23946
+ config,
23947
+ chainData,
23948
+ dbrPriceDola: await dbrPricePromise,
23949
+ replenishmentPriceBps: bigAt(0) !== null ? Number(bigAt(0)) : null,
23950
+ markets: rows,
23951
+ source: "chain"
23952
+ };
23953
+ } catch {
23954
+ return { ...empty, dbrPriceDola: await dbrPricePromise };
23955
+ }
23956
+ }
23957
+ function num(api, key) {
23958
+ const v = api?.[key];
23959
+ return typeof v === "number" && Number.isFinite(v) ? v : null;
23960
+ }
23961
+
23962
+ // src/lending/public-data/inverse/convertPublic.ts
23963
+ function inverseLenderKey(lender, market) {
23964
+ return `${lender}_${market.replace(/^0x/i, "").toUpperCase()}`;
23965
+ }
23966
+ function inverseKeyParts(key) {
23967
+ if (!key.startsWith("INVERSE_")) return void 0;
23968
+ const suffix = key.slice("INVERSE_".length);
23969
+ if (!/^[0-9A-F]{40}$/.test(suffix)) return void 0;
23970
+ return { lender: "INVERSE", market: "0x" + suffix.toLowerCase() };
23971
+ }
23972
+ function currencyFor8(address, decimals, symbol, tokens) {
23973
+ const lower3 = address.toLowerCase();
23974
+ return tokens[lower3] ?? { address: lower3, symbol, name: symbol, decimals };
23975
+ }
23976
+ function convertInverseMarketsToResponse(raw, chainId, prices = {}, _additionalYields = {
23977
+ intrinsicYields: {},
23978
+ lenderRewards: {},
23979
+ loaded: true
23980
+ }, tokens = {}) {
23981
+ const out = {};
23982
+ const cfg = raw?.config;
23983
+ const chainData = raw?.chainData;
23984
+ if (!cfg || !chainData) return out;
23985
+ const dolaAddr = cfg.dola.toLowerCase();
23986
+ const debtDecimals = cfg.debtDecimals ?? 18;
23987
+ const dolaToken = tokens[dolaAddr];
23988
+ const dolaPriceKey = toOracleKey(dolaToken?.assetGroup) || toGenericPriceKey(dolaAddr, chainId);
23989
+ const dolaPrice = prices[dolaPriceKey] || 1;
23990
+ const borrowAprPct = raw.dbrPriceDola !== null ? raw.dbrPriceDola * 100 : 0;
23991
+ for (const m of raw.markets ?? []) {
23992
+ const market = m.market;
23993
+ const lenderKey = inverseLenderKey(raw.lender, market.address);
23994
+ const collAddr = market.collToken.toLowerCase();
23995
+ const collDecimals = market.collDecimals;
23996
+ const collToken = tokens[collAddr];
23997
+ const collSymbol = collToken?.symbol ?? market.name ?? "COLL";
23998
+ const marketName = `DOLA / ${market.name ?? collSymbol}`;
23999
+ const collPriceKey = toOracleKey(collToken?.assetGroup) || toGenericPriceKey(collAddr, chainId);
24000
+ const collPrice = m.price ?? prices[collPriceKey] ?? 0;
24001
+ const totalDebt = m.totalDebt ?? 0;
24002
+ const paused = m.borrowPaused ?? !!market.borrowPaused;
24003
+ const ltv = Number(market.collateralFactorBps) / 1e4;
24004
+ const liqPenalty = Number(market.liquidationIncentiveBps) / 1e4;
24005
+ const closeFactor = Number(market.liquidationFactorBps) / 1e4 || 1;
24006
+ const collateralTotal = 0;
24007
+ let borrowLiquidity = m.leftToBorrow ?? m.dolaLiquidity ?? 0;
24008
+ if (paused) borrowLiquidity = 0;
24009
+ const entry = { data: {} };
24010
+ const collUid = createMarketUid(chainId, lenderKey, collAddr);
24011
+ entry.data[collUid] = {
24012
+ marketUid: collUid,
24013
+ name: "Collateral " + collSymbol,
24014
+ poolId: market.address.toLowerCase(),
24015
+ underlying: collAddr,
24016
+ asset: currencyFor8(collAddr, collDecimals, collSymbol, tokens),
24017
+ totalDeposits: collateralTotal,
24018
+ totalDebtStable: 0,
24019
+ totalDebt: 0,
24020
+ totalLiquidity: collateralTotal,
24021
+ borrowLiquidity: 0,
24022
+ totalLiquidityUSD: collateralTotal * collPrice,
24023
+ borrowLiquidityUSD: 0,
24024
+ totalDepositsUSD: collateralTotal * collPrice,
24025
+ totalDebtStableUSD: 0,
24026
+ totalDebtUSD: 0,
24027
+ utilization: 0,
24028
+ depositRate: 0,
24029
+ variableBorrowRate: 0,
24030
+ stableBorrowRate: 0,
24031
+ intrinsicYield: _additionalYields?.intrinsicYields?.[collToken?.assetGroup] ?? 0,
24032
+ rewards: void 0,
24033
+ decimals: collDecimals,
24034
+ config: {
24035
+ 0: {
24036
+ category: 0,
24037
+ borrowCollateralFactor: ltv,
24038
+ collateralFactor: ltv,
24039
+ borrowFactor: 1,
24040
+ liquidationPenalty: liqPenalty,
24041
+ closeFactor,
24042
+ collateralDisabled: false,
24043
+ debtDisabled: true
24044
+ }
24045
+ },
24046
+ closeFactor,
24047
+ collateralActive: true,
24048
+ borrowingEnabled: false,
24049
+ depositsEnabled: true,
24050
+ hasStable: false,
24051
+ isActive: true,
24052
+ isFrozen: false
24053
+ };
24054
+ const loanUid = createMarketUid(chainId, lenderKey, dolaAddr);
24055
+ entry.data[loanUid] = {
24056
+ marketUid: loanUid,
24057
+ name: "DOLA",
24058
+ poolId: market.address.toLowerCase(),
24059
+ underlying: dolaAddr,
24060
+ asset: currencyFor8(dolaAddr, debtDecimals, "DOLA", tokens),
24061
+ totalDeposits: 0,
24062
+ totalDebtStable: 0,
24063
+ totalDebt,
24064
+ totalLiquidity: borrowLiquidity,
24065
+ borrowLiquidity,
24066
+ totalLiquidityUSD: borrowLiquidity * dolaPrice,
24067
+ borrowLiquidityUSD: borrowLiquidity * dolaPrice,
24068
+ totalDepositsUSD: 0,
24069
+ totalDebtStableUSD: 0,
24070
+ totalDebtUSD: totalDebt * dolaPrice,
24071
+ utilization: 0,
24072
+ depositRate: 0,
24073
+ // The DBR price IS the fixed borrow APR (percent). Debt principal
24074
+ // is static — interest burns the user's DBR balance instead.
24075
+ variableBorrowRate: borrowAprPct,
24076
+ stableBorrowRate: 0,
24077
+ rateModel: "dbr",
24078
+ intrinsicYield: 0,
24079
+ rewards: void 0,
24080
+ decimals: debtDecimals,
24081
+ config: {
24082
+ 0: {
24083
+ category: 0,
24084
+ borrowCollateralFactor: 0,
24085
+ collateralFactor: 0,
24086
+ borrowFactor: 1,
24087
+ liquidationPenalty: liqPenalty,
24088
+ closeFactor,
24089
+ collateralDisabled: true,
24090
+ debtDisabled: paused
24091
+ }
24092
+ },
24093
+ closeFactor,
24094
+ collateralActive: false,
24095
+ borrowingEnabled: !paused,
24096
+ depositsEnabled: false,
24097
+ hasStable: false,
24098
+ variableBorrowDisabled: paused,
24099
+ isActive: true,
24100
+ isFrozen: false
24101
+ };
24102
+ entry.params = {
24103
+ market: {
24104
+ lender: lenderKey,
24105
+ name: marketName,
24106
+ loanDecimals: debtDecimals,
24107
+ collateralDecimals: collDecimals,
24108
+ // The Market contract doubles as the market id.
24109
+ id: market.address.toLowerCase(),
24110
+ lltv: String(ltv),
24111
+ oracle: cfg.oracle,
24112
+ irm: zeroAddress,
24113
+ collateralAddress: collAddr,
24114
+ loanAddress: dolaAddr,
24115
+ // --- FiRM descriptor (metadata + live snapshot; consumed by
24116
+ // calldata builders + worker-api resolvers) ---
24117
+ inverse: {
24118
+ escrowImplementation: market.escrowImplementation,
24119
+ /** DOLA units, human numbers as strings. */
24120
+ minDebt: market.minDebt,
24121
+ dailyLimit: market.dailyLimit,
24122
+ dailyBorrows: m.dailyBorrows !== null ? String(m.dailyBorrows) : void 0,
24123
+ dolaLiquidity: m.dolaLiquidity !== null ? String(m.dolaLiquidity) : void 0,
24124
+ leftToBorrow: m.leftToBorrow !== null ? String(m.leftToBorrow) : void 0,
24125
+ liquidationFactorBps: market.liquidationFactorBps,
24126
+ /** Fixed borrow APR as a DECIMAL (DBR price in DOLA). */
24127
+ dbrPriceDola: raw.dbrPriceDola !== null ? String(raw.dbrPriceDola) : void 0,
24128
+ /** Force-replenish penalty (5475 = 54.75% APR on missed DBR). */
24129
+ replenishmentPriceBps: raw.replenishmentPriceBps !== null ? String(raw.replenishmentPriceBps) : void 0,
24130
+ borrowPaused: paused,
24131
+ addresses: {
24132
+ market: market.address,
24133
+ dola: cfg.dola,
24134
+ dbr: cfg.dbr,
24135
+ oracle: cfg.oracle,
24136
+ borrowController: cfg.borrowController
24137
+ }
24138
+ }
24139
+ }
24140
+ };
24141
+ entry.chainId = chainId;
24142
+ out[lenderKey] = entry;
24143
+ }
24144
+ return out;
24145
+ }
24146
+
23270
24147
  // src/lending/public-data/silo-v2/fetchPublic.ts
23271
24148
  var BASE_URL2 = "https://api-v3.silo.finance";
23272
24149
  var SILO_API_SUPPORTED_CHAIN_IDS = /* @__PURE__ */ new Set([
@@ -23863,7 +24740,7 @@ function convertDolomiteSubgraphMarkets(raw, chainId, prices, additionalYields,
23863
24740
  }
23864
24741
  return { data: result, chainId };
23865
24742
  }
23866
- var warn3 = (...args) => {
24743
+ var warn4 = (...args) => {
23867
24744
  };
23868
24745
  async function getLenderDataFromApi(lender, chainId, prices, additionalYields, includeUnlisted = false) {
23869
24746
  if (isMorphoType(lender))
@@ -23874,6 +24751,8 @@ async function getLenderDataFromApi(lender, chainId, prices, additionalYields, i
23874
24751
  if (isLiquityFamily(lender)) return await fetchLiquityMarkets(lender, chainId);
23875
24752
  if (isRiver(lender)) return await fetchRiverMarkets(lender, chainId);
23876
24753
  if (isTeller(lender)) return await fetchTellerMarkets(chainId);
24754
+ if (isInverse(lender)) return await fetchInverseMarkets(lender, chainId);
24755
+ if (isTermMax(lender)) return await fetchTermMaxMarkets(chainId);
23877
24756
  return {};
23878
24757
  }
23879
24758
  function convertLenderDataFromApi(lender, chainId, data, prices, additionalYields, list = {}) {
@@ -23927,6 +24806,22 @@ function convertLenderDataFromApi(lender, chainId, data, prices, additionalYield
23927
24806
  additionalYields,
23928
24807
  list
23929
24808
  );
24809
+ if (isInverse(lender))
24810
+ return convertInverseMarketsToResponse(
24811
+ data,
24812
+ chainId,
24813
+ prices,
24814
+ additionalYields,
24815
+ list
24816
+ );
24817
+ if (isTermMax(lender))
24818
+ return convertTermMaxMarketsToResponse(
24819
+ data,
24820
+ chainId,
24821
+ prices,
24822
+ additionalYields,
24823
+ list
24824
+ );
23930
24825
  return {};
23931
24826
  }
23932
24827
  var getLenderPublicDataViaApi = async (chainId, lenders, prices, additionalYields, tokenList = async () => {
@@ -23967,7 +24862,7 @@ var getLenderPublicDataViaApi = async (chainId, lenders, prices, additionalYield
23967
24862
  const listResult = settled[0];
23968
24863
  const list = listResult.status === "fulfilled" ? listResult.value : {};
23969
24864
  if (listResult.status === "rejected") {
23970
- warn3(
24865
+ warn4(
23971
24866
  `[lending] tokenList fetch failed on chain ${chainId}:`,
23972
24867
  listResult.reason
23973
24868
  );
@@ -23989,13 +24884,13 @@ var getLenderPublicDataViaApi = async (chainId, lenders, prices, additionalYield
23989
24884
  if (converted[lk]) lenderData[lk] = converted[lk];
23990
24885
  }
23991
24886
  } catch (e) {
23992
- warn3(
24887
+ warn4(
23993
24888
  `[lending] Silo v2 API convert failed on chain ${chainId}:`,
23994
24889
  e?.message ?? e
23995
24890
  );
23996
24891
  }
23997
24892
  } else {
23998
- warn3(
24893
+ warn4(
23999
24894
  `[lending] Silo v2 API fetch failed on chain ${chainId}:`,
24000
24895
  siloV2Result.reason?.message ?? siloV2Result.reason
24001
24896
  );
@@ -24017,13 +24912,13 @@ var getLenderPublicDataViaApi = async (chainId, lenders, prices, additionalYield
24017
24912
  if (converted[lk]) lenderData[lk] = converted[lk];
24018
24913
  }
24019
24914
  } catch (e) {
24020
- warn3(
24915
+ warn4(
24021
24916
  `[lending] Silo v3 API convert failed on chain ${chainId}:`,
24022
24917
  e?.message ?? e
24023
24918
  );
24024
24919
  }
24025
24920
  } else {
24026
- warn3(
24921
+ warn4(
24027
24922
  `[lending] Silo v3 API fetch failed on chain ${chainId}:`,
24028
24923
  siloV3Result.reason?.message ?? siloV3Result.reason
24029
24924
  );
@@ -24033,7 +24928,7 @@ var getLenderPublicDataViaApi = async (chainId, lenders, prices, additionalYield
24033
24928
  try {
24034
24929
  const result = settled[i + 3];
24035
24930
  if (result.status === "rejected") {
24036
- warn3(
24931
+ warn4(
24037
24932
  `[lending] API fetch failed for ${otherLenders[i]} on chain ${chainId}:`,
24038
24933
  result.reason?.message ?? result.reason
24039
24934
  );
@@ -24077,13 +24972,13 @@ var getLenderPublicDataViaApi = async (chainId, lenders, prices, additionalYield
24077
24972
  );
24078
24973
  for (const lk of dolomiteLenders) lenderData[lk] = converted;
24079
24974
  } catch (e) {
24080
- warn3(
24975
+ warn4(
24081
24976
  `[lending] Dolomite subgraph convert failed on chain ${chainId}:`,
24082
24977
  e?.message ?? e
24083
24978
  );
24084
24979
  }
24085
24980
  } else if (dolomiteResult.status === "rejected") {
24086
- warn3(
24981
+ warn4(
24087
24982
  `[lending] Dolomite subgraph fetch failed on chain ${chainId}:`,
24088
24983
  dolomiteResult.reason?.message ?? dolomiteResult.reason
24089
24984
  );
@@ -24091,7 +24986,7 @@ var getLenderPublicDataViaApi = async (chainId, lenders, prices, additionalYield
24091
24986
  }
24092
24987
  return lenderData;
24093
24988
  };
24094
- var warn4 = (...args) => {
24989
+ var warn5 = (...args) => {
24095
24990
  };
24096
24991
  function lenderApiOnly(lender, chainId) {
24097
24992
  if (lender === Lender.MORPHO_BLUE) {
@@ -24153,7 +25048,7 @@ var getLenderPublicDataAll = async (chainId, lenders, prices, additionalYields,
24153
25048
  includeUnlistedMorphoMarkets
24154
25049
  );
24155
25050
  } catch (e) {
24156
- warn4(
25051
+ warn5(
24157
25052
  `[lending] API fetch failed for chain ${chainId}:`,
24158
25053
  e?.message ?? e
24159
25054
  );
@@ -24176,7 +25071,7 @@ var getLenderPublicDataAll = async (chainId, lenders, prices, additionalYields,
24176
25071
  tokenList
24177
25072
  );
24178
25073
  } catch (e) {
24179
- warn4(
25074
+ warn5(
24180
25075
  `[lending] on-chain fetch failed for chain ${chainId}:`,
24181
25076
  e?.message ?? e
24182
25077
  );
@@ -24777,8 +25672,8 @@ function getSubAccountAddress(owner, index) {
24777
25672
  const suffix = newLastByte.toString(16).padStart(2, "0");
24778
25673
  return (prefix + suffix).toLowerCase();
24779
25674
  }
24780
- function getSubAccountIndex(addr, owner) {
24781
- const addrLastByte = parseInt(addr.slice(40), 16);
25675
+ function getSubAccountIndex(addr2, owner) {
25676
+ const addrLastByte = parseInt(addr2.slice(40), 16);
24782
25677
  if (!owner) return addrLastByte;
24783
25678
  const ownerLastByte = parseInt(owner.slice(40), 16);
24784
25679
  return (addrLastByte ^ ownerLastByte) & 255;
@@ -25277,6 +26172,46 @@ var buildRiverUserCall = (chainId, lender, account) => {
25277
26172
  });
25278
26173
  return calls;
25279
26174
  };
26175
+ var INVERSE_CALLS_PER_MARKET = 4;
26176
+ var INVERSE_TAIL_CALLS = 3;
26177
+ var proxyInitCode = (impl) => concat([
26178
+ "0x3d602d80600a3d3981f3363d3d373d3d3d363d73",
26179
+ impl,
26180
+ "0x5af43d82803e903d91602b57fd5bf3"
26181
+ ]);
26182
+ function predictInverseEscrow(market, escrowImplementation, user) {
26183
+ return getContractAddress({
26184
+ opcode: "CREATE2",
26185
+ from: market,
26186
+ salt: pad(user, { size: 32 }),
26187
+ bytecodeHash: keccak256(proxyInitCode(escrowImplementation))
26188
+ });
26189
+ }
26190
+ var buildInverseUserCall = (chainId, lender, account) => {
26191
+ const cfg = inverseConfigFor(lender, chainId);
26192
+ const markets = inverseChainData(lender, chainId)?.markets ?? [];
26193
+ if (!cfg || markets.length === 0) return [];
26194
+ const calls = markets.flatMap((m) => [
26195
+ {
26196
+ address: predictInverseEscrow(
26197
+ m.address,
26198
+ m.escrowImplementation,
26199
+ account
26200
+ ),
26201
+ name: "balance",
26202
+ params: []
26203
+ },
26204
+ { address: m.address, name: "debts", params: [account] },
26205
+ { address: m.address, name: "getCreditLimit", params: [account] },
26206
+ { address: m.address, name: "getWithdrawalLimit", params: [account] }
26207
+ ]);
26208
+ calls.push(
26209
+ { address: cfg.dbr, name: "balanceOf", params: [account] },
26210
+ { address: cfg.dbr, name: "deficitOf", params: [account] },
26211
+ { address: cfg.dbr, name: "signedBalanceOf", params: [account] }
26212
+ );
26213
+ return calls;
26214
+ };
25280
26215
  var TELLER_CALLS_PER_BID = 4;
25281
26216
  var CACHE_TTL_MS2 = 5 * 6e4;
25282
26217
  var discoveryCache2 = /* @__PURE__ */ new Map();
@@ -25286,7 +26221,7 @@ var getCachedTellerBids = (chainId, account) => {
25286
26221
  if (!hit || Date.now() - hit.at > CACHE_TTL_MS2) return void 0;
25287
26222
  return hit;
25288
26223
  };
25289
- var nowSec4 = () => Math.floor(Date.now() / 1e3);
26224
+ var nowSec5 = () => Math.floor(Date.now() / 1e3);
25290
26225
  var toBigints = (arr) => {
25291
26226
  if (!Array.isArray(arr)) return [];
25292
26227
  const out = [];
@@ -25352,7 +26287,7 @@ var buildTellerUserCall = async (chainId, _lender, account) => {
25352
26287
  });
25353
26288
  discoveryCache2.set(cacheKey2(chainId, account), { bids: kept, at: Date.now() });
25354
26289
  if (kept.length === 0) return [];
25355
- const ts = nowSec4();
26290
+ const ts = nowSec5();
25356
26291
  const calls = [];
25357
26292
  for (const b of kept) {
25358
26293
  calls.push({ address: proto.tellerV2, name: "bids", params: [b.bidId] });
@@ -25374,6 +26309,40 @@ var buildTellerUserCall = async (chainId, _lender, account) => {
25374
26309
  }
25375
26310
  return calls;
25376
26311
  };
26312
+ var TERMMAX_CALLS_PER_ACCOUNT = 1;
26313
+ var CACHE_TTL_MS3 = 5 * 6e4;
26314
+ var discoveryCache3 = /* @__PURE__ */ new Map();
26315
+ var cacheKey3 = (chainId, account) => `${chainId}:${account.toLowerCase()}`;
26316
+ var getCachedTermMaxDiscovery = (chainId, account) => {
26317
+ const hit = discoveryCache3.get(cacheKey3(chainId, account));
26318
+ if (!hit || Date.now() - hit.at > CACHE_TTL_MS3) return void 0;
26319
+ return hit;
26320
+ };
26321
+ var buildTermMaxUserCall = async (chainId, _lender, account) => {
26322
+ const proto = termMaxConfigByChain(chainId);
26323
+ if (!proto?.viewer) return [];
26324
+ let markets = getCachedTermMaxMarkets(chainId);
26325
+ if (markets.length === 0) {
26326
+ try {
26327
+ markets = (await fetchTermMaxMarkets(chainId)).map((m) => m.config);
26328
+ } catch {
26329
+ return [];
26330
+ }
26331
+ }
26332
+ if (markets.length === 0) {
26333
+ discoveryCache3.set(cacheKey3(chainId, account), { markets: [], at: Date.now() });
26334
+ return [];
26335
+ }
26336
+ markets = [...markets].sort((a, b) => a.market.localeCompare(b.market));
26337
+ discoveryCache3.set(cacheKey3(chainId, account), { markets, at: Date.now() });
26338
+ return [
26339
+ {
26340
+ address: proto.viewer,
26341
+ name: "getPositionDetails",
26342
+ params: [markets.map((m) => m.market), account]
26343
+ }
26344
+ ];
26345
+ };
25377
26346
 
25378
26347
  // src/lending/user-data/fetch-balances/prepare.ts
25379
26348
  async function buildUserCall(chainId, lender, account, params, getClient) {
@@ -25396,6 +26365,8 @@ async function buildUserCall(chainId, lender, account, params, getClient) {
25396
26365
  return buildLiquityUserCall(chainId, lender, account);
25397
26366
  if (isRiver(lender)) return buildRiverUserCall(chainId, lender, account);
25398
26367
  if (isTeller(lender)) return buildTellerUserCall(chainId, lender, account);
26368
+ if (isTermMax(lender)) return buildTermMaxUserCall(chainId, lender, account);
26369
+ if (isInverse(lender)) return buildInverseUserCall(chainId, lender, account);
25399
26370
  if (isCompoundV3Type(lender))
25400
26371
  return buildCompoundV3UserCall(chainId, lender, account);
25401
26372
  if (isEulerType(lender))
@@ -25423,10 +26394,11 @@ function organizeUserQueries(queries) {
25423
26394
  const liquity = queries.filter((q) => isLiquityFamily(q.lender));
25424
26395
  const river = queries.filter((q) => isRiver(q.lender));
25425
26396
  const teller = queries.filter((q) => isTeller(q.lender));
25426
- if (morphos.length === 0 && gearbox.length === 0 && midnight.length === 0 && term.length === 0 && exactly.length === 0 && liquity.length === 0 && river.length === 0 && teller.length === 0)
26397
+ const termMax = queries.filter((q) => isTermMax(q.lender));
26398
+ if (morphos.length === 0 && gearbox.length === 0 && midnight.length === 0 && term.length === 0 && exactly.length === 0 && liquity.length === 0 && river.length === 0 && teller.length === 0 && termMax.length === 0)
25427
26399
  return queries;
25428
26400
  const others = queries.filter(
25429
- (q) => !isMorphoType(q.lender) && !isGearboxV3(q.lender) && !isMidnight(q.lender) && !isTerm(q.lender) && !isExactly(q.lender) && !isLiquityFamily(q.lender) && !isRiver(q.lender) && !isTeller(q.lender)
26401
+ (q) => !isMorphoType(q.lender) && !isGearboxV3(q.lender) && !isMidnight(q.lender) && !isTerm(q.lender) && !isExactly(q.lender) && !isLiquityFamily(q.lender) && !isRiver(q.lender) && !isTeller(q.lender) && !isTermMax(q.lender)
25430
26402
  );
25431
26403
  const morphoBlue = morphos.filter((q) => q.lender.startsWith("MORPHO_BLUE"));
25432
26404
  const moolah = morphos.filter((q) => q.lender.startsWith("LISTA_DAO"));
@@ -25495,6 +26467,14 @@ function organizeUserQueries(queries) {
25495
26467
  assets: void 0
25496
26468
  });
25497
26469
  }
26470
+ if (termMax.length > 0) {
26471
+ result.push({
26472
+ lender: Lender.TERMMAX,
26473
+ account: termMax[0].account,
26474
+ params: termMax.map((p) => p.lender),
26475
+ assets: void 0
26476
+ });
26477
+ }
25498
26478
  if (liquity.length > 0) {
25499
26479
  for (const base of LIQUITY_FAMILY_LENDERS) {
25500
26480
  const members = liquity.filter((q) => q.lender.startsWith(base));
@@ -27294,7 +28274,7 @@ function toBigInt7(v) {
27294
28274
  }
27295
28275
  }
27296
28276
  var FLUID_EEE_LOWER2 = "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee";
27297
- var normalizeUnderlying2 = (addr) => addr === FLUID_EEE_LOWER2 ? zeroAddress : addr;
28277
+ var normalizeUnderlying2 = (addr2) => addr2 === FLUID_EEE_LOWER2 ? zeroAddress : addr2;
27298
28278
  function toBigInt8(v) {
27299
28279
  if (v === void 0 || v === null || v === "0x") return 0n;
27300
28280
  if (typeof v === "bigint") return v;
@@ -27695,8 +28675,8 @@ var WETH_BY_CHAIN = {
27695
28675
  // populated by the meta's native handling; kept as a hook. Default: identity.
27696
28676
  };
27697
28677
  function normalizeUnderlying3(token) {
27698
- const lower = token.toLowerCase();
27699
- return Object.values(WETH_BY_CHAIN).includes(lower) ? zeroAddress : lower;
28678
+ const lower3 = token.toLowerCase();
28679
+ return Object.values(WETH_BY_CHAIN).includes(lower3) ? zeroAddress : lower3;
27700
28680
  }
27701
28681
  function toBigInt10(v) {
27702
28682
  if (v === void 0 || v === null || v === "0x") return 0n;
@@ -27961,7 +28941,7 @@ var getTermUserDataConverter = (_lender, chainId, account, meta) => {
27961
28941
  totalCalls
27962
28942
  ];
27963
28943
  };
27964
- var nowSec5 = () => Math.floor(Date.now() / 1e3);
28944
+ var nowSec6 = () => Math.floor(Date.now() / 1e3);
27965
28945
  function sumPreview(positions) {
27966
28946
  return positions.reduce((acc, p) => acc + p.previewValue, 0n);
27967
28947
  }
@@ -27983,7 +28963,7 @@ var getExactlyUserDataConverter = (_lender, chainId, account, meta) => {
27983
28963
  const res = data[0];
27984
28964
  if (!res || res === "0x" || !Array.isArray(res)) return void 0;
27985
28965
  const markets = res;
27986
- const now = nowSec5();
28966
+ const now = nowSec6();
27987
28967
  const out = {};
27988
28968
  for (const m of markets) {
27989
28969
  const lenderKey = exactlyLenderKey(m.market);
@@ -28151,7 +29131,7 @@ var getLiquityUserDataConverter = (lender, chainId, account, meta) => {
28151
29131
  branches.forEach((branch, bi) => {
28152
29132
  const troves = discovery.perBranch[bi] ?? [];
28153
29133
  const callCount = liquityBranchCallCount(branch, troves.length);
28154
- const slice = data.slice(cursor, cursor + callCount);
29134
+ const slice2 = data.slice(cursor, cursor + callCount);
28155
29135
  cursor += callCount;
28156
29136
  const lenderKey = liquityLenderKey(lender, chainId, branch.collIndex);
28157
29137
  const metaMap = meta?.[lenderKey];
@@ -28172,8 +29152,8 @@ var getLiquityUserDataConverter = (lender, chainId, account, meta) => {
28172
29152
  const modes = {};
28173
29153
  const hist = {};
28174
29154
  troves.forEach((t, ti) => {
28175
- const troveData = slice[ti * 2];
28176
- const ownerRaw = slice[ti * 2 + 1];
29155
+ const troveData = slice2[ti * 2];
29156
+ const ownerRaw = slice2[ti * 2 + 1];
28177
29157
  const owner = typeof ownerRaw === "string" ? ownerRaw.toLowerCase() : void 0;
28178
29158
  if (owner !== accountLower) return;
28179
29159
  if (!troveData || troveData === "0x") return;
@@ -28251,11 +29231,11 @@ var getLiquityUserDataConverter = (lender, chainId, account, meta) => {
28251
29231
  };
28252
29232
  });
28253
29233
  const spBase = troves.length * 2;
28254
- const spDeposit = big(slice[spBase]);
28255
- const spYield = big(slice[spBase + 1]);
28256
- const spCollGain = big(slice[spBase + 2]);
28257
- const spStashed = big(slice[spBase + 3]);
28258
- const collSurplus = branch.collSurplusPool ? big(slice[spBase + 4]) : 0n;
29234
+ const spDeposit = big(slice2[spBase]);
29235
+ const spYield = big(slice2[spBase + 1]);
29236
+ const spCollGain = big(slice2[spBase + 2]);
29237
+ const spStashed = big(slice2[spBase + 3]);
29238
+ const collSurplus = branch.collSurplusPool ? big(slice2[spBase + 4]) : 0n;
28259
29239
  const spStable = spDeposit + spYield;
28260
29240
  const spColl = spCollGain + spStashed + collSurplus;
28261
29241
  if (spStable > 0n || spColl > 0n) {
@@ -28468,10 +29448,125 @@ var getRiverUserDataConverter = (lender, chainId, account, meta) => {
28468
29448
  expected
28469
29449
  ];
28470
29450
  };
29451
+ var big3 = (v) => {
29452
+ try {
29453
+ if (typeof v === "bigint") return v;
29454
+ if (typeof v === "number" || typeof v === "string") return BigInt(v);
29455
+ } catch {
29456
+ }
29457
+ return 0n;
29458
+ };
29459
+ var getInverseUserDataConverter = (lender, chainId, account, meta) => {
29460
+ const cfg = inverseConfigFor(lender, chainId);
29461
+ const markets = inverseChainData(lender, chainId)?.markets ?? [];
29462
+ const expected = cfg && markets.length > 0 ? markets.length * INVERSE_CALLS_PER_MARKET + INVERSE_TAIL_CALLS : 0;
29463
+ return [
29464
+ (data) => {
29465
+ if (!cfg || expected === 0) return void 0;
29466
+ if (!data || data.length < expected) return void 0;
29467
+ const dolaAddr = cfg.dola.toLowerCase();
29468
+ const debtDecimals = cfg.debtDecimals ?? 18;
29469
+ const tailBase = markets.length * INVERSE_CALLS_PER_MARKET;
29470
+ const dbrBalance = big3(data[tailBase]);
29471
+ const dbrDeficit = big3(data[tailBase + 1]);
29472
+ const dbrSignedRaw = data[tailBase + 2];
29473
+ const dbrSigned = isFailedCall(dbrSignedRaw) ? 0n : big3(dbrSignedRaw);
29474
+ const out = {};
29475
+ markets.forEach((market, i) => {
29476
+ const base = i * INVERSE_CALLS_PER_MARKET;
29477
+ const escrowBal = isFailedCall(data[base]) ? 0n : big3(data[base]);
29478
+ const debtRaw = data[base + 1];
29479
+ if (isFailedCall(debtRaw)) return;
29480
+ const debt = big3(debtRaw);
29481
+ if (escrowBal === 0n && debt === 0n) return;
29482
+ const creditLimit = isFailedCall(data[base + 2]) ? 0n : big3(data[base + 2]);
29483
+ const withdrawalLimit = isFailedCall(data[base + 3]) ? 0n : big3(data[base + 3]);
29484
+ const lenderKey = inverseLenderKey(lender, market.address);
29485
+ const metaMap = meta?.[lenderKey];
29486
+ if (!metaMap) return;
29487
+ const collAddr = market.collToken.toLowerCase();
29488
+ const collUid = createMarketUid(chainId, lenderKey, collAddr);
29489
+ const loanUid = createMarketUid(chainId, lenderKey, dolaAddr);
29490
+ const collMeta = metaMap[collUid];
29491
+ const loanMeta = metaMap[loanUid];
29492
+ const collDecimals = collMeta?.asset?.decimals ?? market.collDecimals;
29493
+ const collDisplay = collMeta ? getDisplayPrice(collMeta) : 0;
29494
+ const collOracle = collMeta ? getOraclePrice(collMeta) : 0;
29495
+ const collHist = collMeta?.price?.priceUsd24h ?? collDisplay;
29496
+ const loanDisplay = loanMeta ? getDisplayPrice(loanMeta) : 0;
29497
+ const loanOracle = loanMeta ? getOraclePrice(loanMeta) : 0;
29498
+ const loanHist = loanMeta?.price?.priceUsd24h ?? loanDisplay;
29499
+ const inverseInfo = {
29500
+ creditLimit: creditLimit.toString(),
29501
+ withdrawalLimit: withdrawalLimit.toString(),
29502
+ dbrBalance: dbrBalance.toString(),
29503
+ dbrDeficit: dbrDeficit.toString(),
29504
+ dbrSignedBalance: dbrSigned.toString()
29505
+ };
29506
+ const collStr = parseRawAmount(escrowBal.toString(), collDecimals);
29507
+ const collNum = Number(collStr);
29508
+ const debtStr = parseRawAmount(debt.toString(), debtDecimals);
29509
+ const debtNum = Number(debtStr);
29510
+ const lendingPositions = {
29511
+ "0": {
29512
+ [collUid]: {
29513
+ marketUid: collUid,
29514
+ underlying: collAddr,
29515
+ deposits: collStr,
29516
+ debt: "0",
29517
+ debtStable: "0",
29518
+ depositsUSD: collNum * collDisplay,
29519
+ debtUSD: 0,
29520
+ debtStableUSD: 0,
29521
+ depositsUSDOracle: collNum * collOracle,
29522
+ debtUSDOracle: 0,
29523
+ debtStableUSDOracle: 0,
29524
+ stableBorrowRate: "0",
29525
+ collateralEnabled: true,
29526
+ claimableRewards: 0
29527
+ },
29528
+ [loanUid]: {
29529
+ marketUid: loanUid,
29530
+ underlying: dolaAddr,
29531
+ deposits: "0",
29532
+ debt: debtStr,
29533
+ debtStable: "0",
29534
+ depositsUSD: 0,
29535
+ debtUSD: debtNum * loanDisplay,
29536
+ debtStableUSD: 0,
29537
+ depositsUSDOracle: 0,
29538
+ debtUSDOracle: debtNum * loanOracle,
29539
+ debtStableUSDOracle: 0,
29540
+ stableBorrowRate: "0",
29541
+ collateralEnabled: false,
29542
+ claimableRewards: 0,
29543
+ inverseInfo
29544
+ }
29545
+ }
29546
+ };
29547
+ const modes = { "0": 0 };
29548
+ const hist = {
29549
+ "0": {
29550
+ totalDeposits24h: collNum * collHist,
29551
+ totalDebt24h: debtNum * loanHist
29552
+ }
29553
+ };
29554
+ const userData = createMultiAccountTypeUserState(
29555
+ { chainId, account, lendingPositions, modes },
29556
+ metaMap,
29557
+ hist
29558
+ );
29559
+ if (userData && userData.data.length > 0) out[lenderKey] = userData;
29560
+ });
29561
+ return Object.keys(out).length > 0 ? out : void 0;
29562
+ },
29563
+ expected
29564
+ ];
29565
+ };
28471
29566
 
28472
29567
  // src/lending/user-data/teller/userCallParse.ts
28473
- var nowSec6 = () => Math.floor(Date.now() / 1e3);
28474
- var big3 = (v) => {
29568
+ var nowSec7 = () => Math.floor(Date.now() / 1e3);
29569
+ var big4 = (v) => {
28475
29570
  try {
28476
29571
  if (typeof v === "bigint") return v;
28477
29572
  if (typeof v === "number" || typeof v === "string") return BigInt(v);
@@ -28487,13 +29582,13 @@ var getTellerUserDataConverter = (_lender, chainId, account, meta) => {
28487
29582
  return [
28488
29583
  (data) => {
28489
29584
  if (expected === 0 || !data || data.length < expected) return void 0;
28490
- const now = nowSec6();
29585
+ const now = nowSec7();
28491
29586
  const perPool = {};
28492
29587
  kept.forEach((b, i) => {
28493
29588
  const base = i * TELLER_CALLS_PER_BID;
28494
29589
  const bidRes = data[base];
28495
29590
  const owed = data[base + 1];
28496
- const collAmount = big3(data[base + 2]);
29591
+ const collAmount = big4(data[base + 2]);
28497
29592
  const defaulted = !!data[base + 3];
28498
29593
  if (isFailedCall(bidRes) || isFailedCall(owed) || !bidRes) return;
28499
29594
  const pool = b.pool;
@@ -28514,17 +29609,17 @@ var getTellerUserDataConverter = (_lender, chainId, account, meta) => {
28514
29609
  const collDisplay = collMeta ? getDisplayPrice(collMeta) : 0;
28515
29610
  const collOracle = collMeta ? getOraclePrice(collMeta) : 0;
28516
29611
  const collHist = collMeta?.price?.priceUsd24h ?? collDisplay;
28517
- const owedPrincipal = big3(field8(owed, "principal", 0));
28518
- const owedInterest = big3(field8(owed, "interest", 1));
29612
+ const owedPrincipal = big4(field8(owed, "principal", 0));
29613
+ const owedInterest = big4(field8(owed, "interest", 1));
28519
29614
  const owedTotal = owedPrincipal + owedInterest;
28520
29615
  if (owedTotal === 0n && collAmount === 0n) return;
28521
29616
  const loanDetails = field8(bidRes, "loanDetails", 5);
28522
29617
  const terms = field8(bidRes, "terms", 6);
28523
29618
  const acceptedTs = Number(
28524
- big3(field8(loanDetails, "acceptedTimestamp", 4))
29619
+ big4(field8(loanDetails, "acceptedTimestamp", 4))
28525
29620
  );
28526
- const loanDuration = Number(big3(field8(loanDetails, "loanDuration", 6)));
28527
- const aprBps = Number(big3(field8(terms, "APR", 2)));
29621
+ const loanDuration = Number(big4(field8(loanDetails, "loanDuration", 6)));
29622
+ const aprBps = Number(big4(field8(terms, "APR", 2)));
28528
29623
  const maturity = acceptedTs > 0 ? acceptedTs + loanDuration : void 0;
28529
29624
  const isMatured = defaulted || maturity !== void 0 && maturity < now;
28530
29625
  const collStr = parseRawAmount(collAmount.toString(), collDecimals);
@@ -28612,6 +29707,179 @@ var getTellerUserDataConverter = (_lender, chainId, account, meta) => {
28612
29707
  expected
28613
29708
  ];
28614
29709
  };
29710
+ var nowSec8 = () => Math.floor(Date.now() / 1e3);
29711
+ function toBigInt12(v) {
29712
+ if (v === void 0 || v === null || v === "0x") return 0n;
29713
+ if (typeof v === "bigint") return v;
29714
+ try {
29715
+ return BigInt(v);
29716
+ } catch {
29717
+ return 0n;
29718
+ }
29719
+ }
29720
+ function field9(res, name, index) {
29721
+ if (res && typeof res === "object" && !Array.isArray(res) && name in res) {
29722
+ return res[name];
29723
+ }
29724
+ if (Array.isArray(res)) return res[index];
29725
+ return void 0;
29726
+ }
29727
+ function parsePosition(res) {
29728
+ const ftBalance = toBigInt12(field9(res, "ftBalance", 2));
29729
+ const xtBalance = toBigInt12(field9(res, "xtBalance", 3));
29730
+ const rawGts = field9(res, "gtInfo", 4);
29731
+ const gts = [];
29732
+ if (Array.isArray(rawGts)) {
29733
+ for (const g of rawGts) {
29734
+ const loanId = toBigInt12(field9(g, "loanId", 0));
29735
+ if (loanId === 0n) continue;
29736
+ gts.push({
29737
+ loanId: loanId.toString(),
29738
+ collateralAmt: toBigInt12(field9(g, "collateralAmt", 1)),
29739
+ debtAmt: toBigInt12(field9(g, "debtAmt", 2))
29740
+ });
29741
+ }
29742
+ }
29743
+ return { ftBalance, xtBalance, gts };
29744
+ }
29745
+ var getTermMaxUserDataConverter = (_lender, chainId, account, meta) => {
29746
+ const discovery = getCachedTermMaxDiscovery(chainId, account);
29747
+ const markets = discovery?.markets ?? [];
29748
+ const expected = markets.length > 0 ? TERMMAX_CALLS_PER_ACCOUNT : 0;
29749
+ return [
29750
+ (data) => {
29751
+ if (expected === 0) return void 0;
29752
+ if (!data || data.length < expected) return void 0;
29753
+ const positions = data[0];
29754
+ if (!Array.isArray(positions)) return void 0;
29755
+ const now = nowSec8();
29756
+ const out = {};
29757
+ markets.forEach((market, i) => {
29758
+ const parsed = parsePosition(positions[i]);
29759
+ if (!parsed) return;
29760
+ if (parsed.ftBalance === 0n && parsed.gts.length === 0) return;
29761
+ const lenderKey = termMaxLenderKey(market.market);
29762
+ const metaMap = meta?.[lenderKey];
29763
+ if (!metaMap) return;
29764
+ const loanAddr = market.debtToken.toLowerCase();
29765
+ const collAddr = market.collateral.toLowerCase();
29766
+ const loanUid = createMarketUid(chainId, lenderKey, loanAddr);
29767
+ const collUid = createMarketUid(chainId, lenderKey, collAddr);
29768
+ const loanMeta = metaMap[loanUid];
29769
+ const collMeta = metaMap[collUid];
29770
+ const loanDisplay = loanMeta ? getDisplayPrice(loanMeta) : 0;
29771
+ const loanOracle = loanMeta ? getOraclePrice(loanMeta) : 0;
29772
+ const loanHist = loanMeta?.price?.priceUsd24h ?? loanDisplay;
29773
+ const collDisplay = collMeta ? getDisplayPrice(collMeta) : 0;
29774
+ const collOracle = collMeta ? getOraclePrice(collMeta) : 0;
29775
+ const collHist = collMeta?.price?.priceUsd24h ?? collDisplay;
29776
+ const loanDec = loanMeta?.asset?.decimals ?? market.debtDecimals;
29777
+ const collDec = collMeta?.asset?.decimals ?? market.collateralDecimals;
29778
+ const maturity = Number(market.maturity);
29779
+ const isMatured = maturity > 0 && maturity <= now;
29780
+ const positionsByAccount = {};
29781
+ const modes = {};
29782
+ const hist = {};
29783
+ if (parsed.ftBalance > 0n) {
29784
+ const ftStr = parseRawAmount(parsed.ftBalance.toString(), loanDec);
29785
+ const ftNum = Number(ftStr);
29786
+ positionsByAccount["0"] = {
29787
+ [loanUid]: {
29788
+ marketUid: loanUid,
29789
+ underlying: loanAddr,
29790
+ deposits: ftStr,
29791
+ debt: "0",
29792
+ debtStable: "0",
29793
+ depositsUSD: ftNum * loanDisplay,
29794
+ debtUSD: 0,
29795
+ debtStableUSD: 0,
29796
+ depositsUSDOracle: ftNum * loanOracle,
29797
+ debtUSDOracle: 0,
29798
+ debtStableUSDOracle: 0,
29799
+ stableBorrowRate: "0",
29800
+ // A TermMax lend position never collateralizes a borrow.
29801
+ collateralEnabled: false,
29802
+ claimableRewards: 0
29803
+ }
29804
+ };
29805
+ modes["0"] = 0;
29806
+ hist["0"] = { totalDeposits24h: ftNum * loanHist, totalDebt24h: 0 };
29807
+ }
29808
+ for (const gt of parsed.gts) {
29809
+ const collStr = parseRawAmount(gt.collateralAmt.toString(), collDec);
29810
+ const collNum = Number(collStr);
29811
+ const debtStr = parseRawAmount(gt.debtAmt.toString(), loanDec);
29812
+ const debtNum = Number(debtStr);
29813
+ if (gt.collateralAmt === 0n && gt.debtAmt === 0n) continue;
29814
+ positionsByAccount[gt.loanId] = {
29815
+ [collUid]: {
29816
+ marketUid: collUid,
29817
+ underlying: collAddr,
29818
+ deposits: collStr,
29819
+ debt: "0",
29820
+ debtStable: "0",
29821
+ depositsUSD: collNum * collDisplay,
29822
+ debtUSD: 0,
29823
+ debtStableUSD: 0,
29824
+ depositsUSDOracle: collNum * collOracle,
29825
+ debtUSDOracle: 0,
29826
+ debtStableUSDOracle: 0,
29827
+ stableBorrowRate: "0",
29828
+ collateralEnabled: true,
29829
+ claimableRewards: 0
29830
+ },
29831
+ [loanUid]: {
29832
+ marketUid: loanUid,
29833
+ underlying: loanAddr,
29834
+ deposits: "0",
29835
+ debt: "0",
29836
+ // Fixed-term debt → stable slot (Exactly / Lista / Teller convention).
29837
+ debtStable: debtStr,
29838
+ depositsUSD: 0,
29839
+ debtUSD: 0,
29840
+ debtStableUSD: debtNum * loanDisplay,
29841
+ depositsUSDOracle: 0,
29842
+ debtUSDOracle: 0,
29843
+ debtStableUSDOracle: debtNum * loanOracle,
29844
+ stableBorrowRate: "0",
29845
+ collateralEnabled: false,
29846
+ claimableRewards: 0,
29847
+ // Fixed-term loan detail. `loanId` = the gtId, which is the target
29848
+ // of every write op (repay / removeCollateral / …). Debt is a
29849
+ // STATIC face value: nothing accrues, so no accruedInterest.
29850
+ term: {
29851
+ loanId: gt.loanId,
29852
+ isDynamic: false,
29853
+ debt: debtStr,
29854
+ maturity: maturity || void 0,
29855
+ isMatured
29856
+ }
29857
+ }
29858
+ };
29859
+ modes[gt.loanId] = 0;
29860
+ hist[gt.loanId] = {
29861
+ totalDeposits24h: collNum * collHist,
29862
+ totalDebt24h: debtNum * loanHist
29863
+ };
29864
+ }
29865
+ if (Object.keys(positionsByAccount).length === 0) return;
29866
+ const userData = createMultiAccountTypeUserState(
29867
+ {
29868
+ chainId,
29869
+ account,
29870
+ lendingPositions: positionsByAccount,
29871
+ modes
29872
+ },
29873
+ metaMap,
29874
+ hist
29875
+ );
29876
+ if (userData && userData.data.length > 0) out[lenderKey] = userData;
29877
+ });
29878
+ return Object.keys(out).length > 0 ? out : void 0;
29879
+ },
29880
+ expected
29881
+ ];
29882
+ };
28615
29883
 
28616
29884
  // src/lending/user-data/fetch-balances/parse.ts
28617
29885
  function getUserDataConverter(lender, chainId, account, params, meta) {
@@ -28645,6 +29913,10 @@ function getUserDataConverter(lender, chainId, account, params, meta) {
28645
29913
  return getRiverUserDataConverter(lender, chainId, account, meta);
28646
29914
  if (isTeller(lender))
28647
29915
  return getTellerUserDataConverter(lender, chainId, account, meta);
29916
+ if (isTermMax(lender))
29917
+ return getTermMaxUserDataConverter(lender, chainId, account, meta);
29918
+ if (isInverse(lender))
29919
+ return getInverseUserDataConverter(lender, chainId, account, meta);
28648
29920
  if (isCompoundV3Type(lender))
28649
29921
  return getCompoundV3UserDataConverter(
28650
29922
  lender,
@@ -33242,6 +34514,8 @@ var getAbi2 = (lender) => {
33242
34514
  return [...RiverTroveManagerAbi, ...RiverStabilityPoolAbi];
33243
34515
  if (isTeller(lender))
33244
34516
  return [...TellerV2Abi, ...TellerCollateralManagerAbi];
34517
+ if (isInverse(lender))
34518
+ return [...InverseMarketAbi, ...InverseEscrowAbi, ...InverseDbrAbi];
33245
34519
  if (isInit(lender)) return InitLensAbi;
33246
34520
  if (isEulerType(lender)) return accountLensAbi;
33247
34521
  if (isCompoundV2Type(lender))
@@ -33798,7 +35072,7 @@ var MORPHO_API_CHAIN_IDS = {
33798
35072
  [Chain.UNICHAIN]: 130
33799
35073
  };
33800
35074
  var FETCH_TIMEOUT_MS = 3e3;
33801
- var CACHE_TTL_MS3 = 2e3;
35075
+ var CACHE_TTL_MS4 = 2e3;
33802
35076
  var buildSubgraphQuery = (account) => `
33803
35077
  {
33804
35078
  account(id: "${account.toLowerCase()}") {
@@ -33853,11 +35127,11 @@ async function fetchJsonWithProxyFallback(url, body, proxyConfig) {
33853
35127
  }
33854
35128
  var inflight = /* @__PURE__ */ new Map();
33855
35129
  var resolved = /* @__PURE__ */ new Map();
33856
- function cacheKey3(chainId, account) {
35130
+ function cacheKey4(chainId, account) {
33857
35131
  return `${chainId}:${account.toLowerCase()}`;
33858
35132
  }
33859
35133
  async function dedupedFetch(chainId, account, loader) {
33860
- const key = cacheKey3(chainId, account);
35134
+ const key = cacheKey4(chainId, account);
33861
35135
  const now = Date.now();
33862
35136
  const cached = resolved.get(key);
33863
35137
  if (cached && cached.expiresAt > now) {
@@ -33866,7 +35140,7 @@ async function dedupedFetch(chainId, account, loader) {
33866
35140
  const existing = inflight.get(key);
33867
35141
  if (existing) return existing;
33868
35142
  const promise = loader().then((value) => {
33869
- resolved.set(key, { value, expiresAt: Date.now() + CACHE_TTL_MS3 });
35143
+ resolved.set(key, { value, expiresAt: Date.now() + CACHE_TTL_MS4 });
33870
35144
  return value;
33871
35145
  }).finally(() => {
33872
35146
  inflight.delete(key);
@@ -33998,8 +35272,8 @@ function calculateOverallNetApr(totalDepositsUSD, totalDebtUSD, avgDepositApr, a
33998
35272
  return (totalDepositsUSD * avgDepositApr - totalDebtUSD * avgBorrowApr) / Math.abs(totalNetWorth) * (totalNetWorth > 0 ? 1 : -1);
33999
35273
  }
34000
35274
  function calculateWeightedAprs(items) {
34001
- const wa = (field9, weightField) => calculateWeightedAverage(
34002
- items.filter((i) => i[weightField] !== 0).map((i) => ({ value: i[field9], weight: Math.abs(i[weightField]) }))
35275
+ const wa = (field10, weightField) => calculateWeightedAverage(
35276
+ items.filter((i) => i[weightField] !== 0).map((i) => ({ value: i[field10], weight: Math.abs(i[weightField]) }))
34003
35277
  );
34004
35278
  return {
34005
35279
  apr: wa("apr", "nav"),
@@ -35743,8 +37017,8 @@ var TIMEOUT_MS = 8e3;
35743
37017
  var slisBnbFetcher = {
35744
37018
  label: "SLISBNB",
35745
37019
  fetch: async () => {
35746
- const nowSec7 = Math.floor(Date.now() / 1e3);
35747
- const url = `${HISTORY_URL}?name=slisBNBRate&cycle=1&startTime=${nowSec7 - LOOKBACK_SECONDS}&endTime=${nowSec7}`;
37020
+ const nowSec9 = Math.floor(Date.now() / 1e3);
37021
+ const url = `${HISTORY_URL}?name=slisBNBRate&cycle=1&startTime=${nowSec9 - LOOKBACK_SECONDS}&endTime=${nowSec9}`;
35748
37022
  const controller = new AbortController();
35749
37023
  const timer = setTimeout(() => controller.abort(), TIMEOUT_MS);
35750
37024
  try {
@@ -38338,6 +39612,40 @@ var rwaFundsFetcher = {
38338
39612
  }
38339
39613
  };
38340
39614
 
39615
+ // src/yields/intrinsic/fetchers/inverse.ts
39616
+ var DOLA_STAKING_URL = "https://www.inverse.finance/api/dola-staking";
39617
+ var JDOLA_STAKING_URL = "https://www.inverse.finance/api/junior/jdola-staking";
39618
+ var SDOLA_KEY = "SDOLA";
39619
+ var SDOLA_GROUP_KEY = "sDOLA::SDOLA";
39620
+ var fetchJson2 = async (url) => {
39621
+ const res = await fetch(url, {
39622
+ headers: { accept: "application/json" },
39623
+ signal: AbortSignal.timeout(8e3)
39624
+ });
39625
+ if (!res.ok) throw new Error(`HTTP ${res.status}`);
39626
+ return res.json();
39627
+ };
39628
+ var fetchSdolaApyPercent = async () => {
39629
+ try {
39630
+ const d = await fetchJson2(DOLA_STAKING_URL);
39631
+ const apy = Number(d?.calculatedApy);
39632
+ if (Number.isFinite(apy) && apy > 0) return apy;
39633
+ throw new Error("calculatedApy missing");
39634
+ } catch {
39635
+ const d = await fetchJson2(JDOLA_STAKING_URL);
39636
+ const apy = Number(d?.sDolaApy);
39637
+ if (Number.isFinite(apy) && apy > 0) return apy;
39638
+ throw new Error("sDolaApy missing");
39639
+ }
39640
+ };
39641
+ var sdolaFetcher = {
39642
+ label: "SDOLA",
39643
+ fetch: async () => {
39644
+ const apr = apyToAprPercent(await fetchSdolaApyPercent());
39645
+ return { [SDOLA_KEY]: apr, [SDOLA_GROUP_KEY]: apr };
39646
+ }
39647
+ };
39648
+
38341
39649
  // src/yields/intrinsic/fetchers/reProtocol.ts
38342
39650
  var REUSD_KEY = "RE::reUSD";
38343
39651
  var REUSDE_KEY = "RE::reUSDe";
@@ -39848,6 +41156,27 @@ var SINGLE_CHAIN_ENTRIES = {
39848
41156
  yieldFetcher: fraxSavingsFetcher,
39849
41157
  yieldKey: "SFRAX"
39850
41158
  },
41159
+ {
41160
+ // Inverse sDOLA — 4626 auto-compounder over the DOLA Savings
41161
+ // Account; yield is FiRM's DBR revenue via a continuous on-chain
41162
+ // auction, no rehypothecation. Instant permissionless exit
41163
+ // (maxDeposit = uint.max verified 2026-08; ~6.9M DOLA TVL).
41164
+ // Ethereum-only; Inverse propagates the rate cross-chain via
41165
+ // CCIP, so bridged deployments may appear later. The jDOLA
41166
+ // junior tranche (48h exit window + fee, ~$28k) is deliberately
41167
+ // not registered.
41168
+ address: "0xb45ad160634c528cc3d2926d9807104fa3157305",
41169
+ underlying: "0x865377367054516e17014ccded1e7d814edc9ce4",
41170
+ // DOLA
41171
+ symbol: "sDOLA",
41172
+ brand: "Inverse",
41173
+ decimals: 18,
41174
+ isRebasing: false,
41175
+ isMintable: true,
41176
+ withdrawalMode: "instant",
41177
+ yieldFetcher: sdolaFetcher,
41178
+ yieldKey: SDOLA_GROUP_KEY
41179
+ },
39851
41180
  {
39852
41181
  address: "0x83f20f44975d03b1b09e64809b757c47f942beea",
39853
41182
  underlying: "0x6b175474e89094c44da98b954eedeac495271d0f",
@@ -40382,13 +41711,13 @@ var gmxFetcher = {
40382
41711
  fetch: async () => {
40383
41712
  const { apy } = await fetchGmxRawData(GMX_CHAIN, GMX_DEFAULT_APY_PERIOD);
40384
41713
  const rData = {};
40385
- for (const [addr, d] of Object.entries(apy.markets ?? {})) {
40386
- const a = addr.toLowerCase();
41714
+ for (const [addr2, d] of Object.entries(apy.markets ?? {})) {
41715
+ const a = addr2.toLowerCase();
40387
41716
  if (a === gmx_eth_usd_address) rData[gmx_eth_usd] = apyToApr(d.apy) * 100;
40388
41717
  if (a === gmx_btc_usd_address) rData[gmx_btc_usd] = apyToApr(d.apy) * 100;
40389
41718
  }
40390
- for (const [addr, d] of Object.entries(apy.glvs ?? {})) {
40391
- const a = addr.toLowerCase();
41719
+ for (const [addr2, d] of Object.entries(apy.glvs ?? {})) {
41720
+ const a = addr2.toLowerCase();
40392
41721
  if (a === glv_wbtc_usdc_address)
40393
41722
  rData[glv_wbtc_usdc] = apyToApr(d.apy) * 100;
40394
41723
  if (a === glv_weth_usdc_address)
@@ -40872,8 +42201,8 @@ var yearnKatanaFetcher = {
40872
42201
  YEARN_KATANA_URL
40873
42202
  ).then((r) => r.json());
40874
42203
  let map = {};
40875
- Object.entries(res).forEach(([addr, data]) => {
40876
- const key = addressToAssetYearn[addr.toLowerCase()];
42204
+ Object.entries(res).forEach(([addr2, data]) => {
42205
+ const key = addressToAssetYearn[addr2.toLowerCase()];
40877
42206
  if (key) {
40878
42207
  const apr = ((data.apr.netAPR ?? 0) + (data.apr.extra?.extrinsicYield ?? 0) + (data.apr.extra?.katanaNativeYield ?? 0)) * 100;
40879
42208
  map[key] = apr;
@@ -42075,9 +43404,9 @@ function parseTellerResults(data, meta, context) {
42075
43404
  const principal = meta.principal;
42076
43405
  const collateral = meta.collateral;
42077
43406
  const lenderKey = tellerLenderKey(meta.pool);
42078
- const usdOf = (addr) => {
42079
- const key = tokenList?.[addr]?.assetGroup ?? `${chainId}-${addr}`;
42080
- return usdPrices[key] ?? usdPrices[addr];
43407
+ const usdOf = (addr2) => {
43408
+ const key = tokenList?.[addr2]?.assetGroup ?? `${chainId}-${addr2}`;
43409
+ return usdPrices[key] ?? usdPrices[addr2];
42081
43410
  };
42082
43411
  const principalUSD = usdOf(principal);
42083
43412
  const collateralUSD = usdOf(collateral);
@@ -42143,6 +43472,86 @@ var tellerFetcher = {
42143
43472
  parse: parseTellerResults,
42144
43473
  getAbi: getTellerAbi
42145
43474
  };
43475
+ function getTermMaxCalls(chainId) {
43476
+ const proto = termMaxConfigByChain(chainId);
43477
+ if (!proto?.oracleAggregatorV2) return [];
43478
+ const markets = getCachedTermMaxMarkets(chainId);
43479
+ if (markets.length === 0) return [];
43480
+ const oracle = proto.oracleAggregatorV2;
43481
+ const results = [];
43482
+ for (const m of markets) {
43483
+ if (!m.market || !m.debtToken || !m.collateral) continue;
43484
+ const calls = [
43485
+ { address: oracle, name: "getPrice", params: [m.debtToken] },
43486
+ { address: oracle, name: "getPrice", params: [m.collateral] }
43487
+ ];
43488
+ results.push({
43489
+ calls,
43490
+ meta: {
43491
+ market: m.market.toLowerCase(),
43492
+ debtToken: m.debtToken.toLowerCase(),
43493
+ collateral: m.collateral.toLowerCase()
43494
+ },
43495
+ lender: termMaxLenderKey(m.market)
43496
+ });
43497
+ }
43498
+ return results;
43499
+ }
43500
+ function readUsdPrice(res) {
43501
+ if (res == null || res === "0x") return void 0;
43502
+ let raw;
43503
+ let dec;
43504
+ if (Array.isArray(res)) {
43505
+ raw = res[0];
43506
+ dec = res[1];
43507
+ } else if (typeof res === "object") {
43508
+ raw = res.price;
43509
+ dec = res.decimals;
43510
+ } else {
43511
+ return void 0;
43512
+ }
43513
+ let price2;
43514
+ try {
43515
+ price2 = BigInt(raw);
43516
+ } catch {
43517
+ return void 0;
43518
+ }
43519
+ if (price2 <= 0n) return void 0;
43520
+ const decimals = Number(dec);
43521
+ if (!Number.isFinite(decimals) || decimals < 0 || decimals > 36) return void 0;
43522
+ const usd = Number(price2) / 10 ** decimals;
43523
+ return Number.isFinite(usd) && usd > 0 ? usd : void 0;
43524
+ }
43525
+ function parseTermMaxResults(data, meta, context) {
43526
+ const { chainId } = context;
43527
+ const lenderKey = termMaxLenderKey(meta.market);
43528
+ const entries = [];
43529
+ const legs = [
43530
+ [meta.debtToken, data?.[0], "TermMax oracle (debt asset)"],
43531
+ [meta.collateral, data?.[1], "TermMax oracle (collateral)"]
43532
+ ];
43533
+ for (const [asset, res, description] of legs) {
43534
+ const usd = readUsdPrice(res);
43535
+ if (usd === void 0) continue;
43536
+ entries.push({
43537
+ asset,
43538
+ price: usd,
43539
+ priceUSD: usd,
43540
+ marketUid: createMarketUid(chainId, lenderKey, asset),
43541
+ targetLender: lenderKey,
43542
+ description
43543
+ });
43544
+ }
43545
+ return entries;
43546
+ }
43547
+ function getTermMaxAbi() {
43548
+ return TermMaxOracleAggregatorV2Abi;
43549
+ }
43550
+ var termMaxFetcher = {
43551
+ getCalls: getTermMaxCalls,
43552
+ parse: parseTermMaxResults,
43553
+ getAbi: getTermMaxAbi
43554
+ };
42146
43555
  var CompoundV2OracleAbi = [
42147
43556
  {
42148
43557
  inputs: [{ internalType: "address", name: "cToken", type: "address" }],
@@ -42482,8 +43891,8 @@ var priceLensAbi = [
42482
43891
  // src/prices/oracle-prices/fetchers/euler.ts
42483
43892
  var MAX_VIRTUAL_ADDRESS = 65535;
42484
43893
  var MAX_SANE_PRICE_USD = 1e7;
42485
- function isUsdUnitOfAccount(addr) {
42486
- const numeric = parseInt(addr, 16);
43894
+ function isUsdUnitOfAccount(addr2) {
43895
+ const numeric = parseInt(addr2, 16);
42487
43896
  return numeric <= MAX_VIRTUAL_ADDRESS;
42488
43897
  }
42489
43898
  var PRICE_LENS_ADDRESS = "0x6392892f3C57c658d2c748fc64c6fe57680E889F";
@@ -43041,7 +44450,7 @@ var siloV3Fetcher = {
43041
44450
  getAbi: getSiloV3Abi
43042
44451
  };
43043
44452
  var FLUID_EEE_LOWER3 = "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee";
43044
- var normalizeUnderlying4 = (addr) => addr === FLUID_EEE_LOWER3 ? zeroAddress : addr;
44453
+ var normalizeUnderlying4 = (addr2) => addr2 === FLUID_EEE_LOWER3 ? zeroAddress : addr2;
43045
44454
  function priceColInDebt(raw, colDec, debtDec) {
43046
44455
  return formatMorphoPrice(raw, debtDec, colDec + 9);
43047
44456
  }
@@ -43886,6 +45295,11 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
43886
45295
  () => tellerFetcher.getCalls(chainId),
43887
45296
  getCallsErrors
43888
45297
  ) : [];
45298
+ const termMaxResults = isActive("termmax") ? safeGetCalls(
45299
+ "termmax",
45300
+ () => termMaxFetcher.getCalls(chainId),
45301
+ getCallsErrors
45302
+ ) : [];
43889
45303
  const siloV2Results = isActive("silov2") ? safeGetCalls(
43890
45304
  "siloV2",
43891
45305
  () => siloV2Fetcher.getCalls(chainId),
@@ -44002,6 +45416,15 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
44002
45416
  getTellerAbi(),
44003
45417
  "derived"
44004
45418
  );
45419
+ const termMaxGroup = buildGroup(
45420
+ "termmax",
45421
+ termMaxResults,
45422
+ termMaxFetcher.parse,
45423
+ getTermMaxAbi(),
45424
+ // DIRECT: `OracleAggregatorV2.getPrice` returns a USD price outright —
45425
+ // nothing is derived from another asset's price.
45426
+ "direct"
45427
+ );
44005
45428
  const siloV2Group = buildGroup(
44006
45429
  "siloV2",
44007
45430
  siloV2Results,
@@ -44051,6 +45474,7 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
44051
45474
  liquityGroup,
44052
45475
  riverGroup,
44053
45476
  tellerGroup,
45477
+ termMaxGroup,
44054
45478
  siloV2Group,
44055
45479
  siloV3Group,
44056
45480
  fluidGroup,
@@ -44097,6 +45521,7 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
44097
45521
  liquityData,
44098
45522
  riverData,
44099
45523
  tellerData,
45524
+ termMaxData,
44100
45525
  morphoGqlEntries,
44101
45526
  siloV2GqlEntries,
44102
45527
  siloV3GqlEntries
@@ -44221,6 +45646,14 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
44221
45646
  allowFailure,
44222
45647
  rpcOverrides
44223
45648
  ),
45649
+ executeGroup(
45650
+ termMaxGroup,
45651
+ chainId,
45652
+ chainBatchSize,
45653
+ retries,
45654
+ allowFailure,
45655
+ rpcOverrides
45656
+ ),
44224
45657
  morphoGqlPromise,
44225
45658
  siloV2GqlPromise,
44226
45659
  siloV3GqlPromise
@@ -44273,6 +45706,7 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
44273
45706
  { group: dolomiteGroup, data: dolomiteData },
44274
45707
  { group: midnightGroup, data: midnightData },
44275
45708
  { group: tellerGroup, data: tellerData },
45709
+ { group: termMaxGroup, data: termMaxData },
44276
45710
  ...siloV2GqlEntries != null ? [] : [{ group: siloV2Group, data: siloV2Data }],
44277
45711
  ...siloV3GqlEntries != null ? [] : [{ group: siloV3Group, data: siloV3Data }],
44278
45712
  // In hybrid mode the on-chain multicall ran too — surface its errors.
@@ -44332,6 +45766,7 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
44332
45766
  parseTrackers(listaGroup, listaData.results);
44333
45767
  parseTrackers(eulerGroup, eulerData.results);
44334
45768
  parseTrackers(aaveV4Group, aaveV4Data.results);
45769
+ parseTrackers(termMaxGroup, termMaxData.results);
44335
45770
  parseTrackers(
44336
45771
  aaveGroup,
44337
45772
  aaveData.results,
@@ -44581,9 +46016,9 @@ function rejectOutliers(candidates, guard = DEFAULT_OUTLIER_GUARD) {
44581
46016
  const reference = consensusReference(candidates, guard);
44582
46017
  if (reference === void 0) return candidates;
44583
46018
  const upper = reference * guard.rejectFactor;
44584
- const lower = reference / guard.rejectFactor;
46019
+ const lower3 = reference / guard.rejectFactor;
44585
46020
  const kept = candidates.filter(
44586
- (c) => c.priceUSD <= upper && c.priceUSD >= lower
46021
+ (c) => c.priceUSD <= upper && c.priceUSD >= lower3
44587
46022
  );
44588
46023
  return kept.length > 0 ? kept : candidates;
44589
46024
  }
@@ -44942,10 +46377,10 @@ function createAssetArrayPerChain() {
44942
46377
  return assetsPerChain;
44943
46378
  }
44944
46379
  var RELEVANT_LENDING_ASSETS = () => createAssetArrayPerChain();
44945
- function createSimpleArrayPerChain(fork, field9 = void 0) {
46380
+ function createSimpleArrayPerChain(fork, field10 = void 0) {
44946
46381
  let pools = {};
44947
46382
  Object.entries(fork ?? {}).forEach(([b2, data]) => {
44948
- Object.entries(field9 ? data[field9] : data).forEach(
46383
+ Object.entries(field10 ? data[field10] : data).forEach(
44949
46384
  ([chainId, address]) => {
44950
46385
  if (!pools[chainId]) pools[chainId] = [];
44951
46386
  pools[chainId] = uniq2([...pools[chainId], { address, pool: b2 }]);
@@ -45301,7 +46736,7 @@ var composeVaultDisplayName = (brand, curatorName, asset, fallbackName) => {
45301
46736
 
45302
46737
  // src/vaults/fluid/publicCallParse.ts
45303
46738
  var FLUID_EEE_LOWER4 = "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee";
45304
- var normalizeUnderlying5 = (addr) => addr === FLUID_EEE_LOWER4 ? zeroAddress : addr;
46739
+ var normalizeUnderlying5 = (addr2) => addr2 === FLUID_EEE_LOWER4 ? zeroAddress : addr2;
45305
46740
  var FLUID_RATE_SCALE2 = 100;
45306
46741
  var scaleFluidRate2 = (raw) => {
45307
46742
  if (raw === void 0 || raw === null) return 0;
@@ -45542,10 +46977,10 @@ function deriveConvertToAssets(totalAssetsRaw, totalSupplyRaw, shareDecimals) {
45542
46977
 
45543
46978
  // src/vaults/gearbox/publicCallParse.ts
45544
46979
  var WETH_MAINNET = "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2";
45545
- var normalizeUnderlying6 = (addr, chainId) => {
45546
- const lower = addr.toLowerCase();
45547
- if (chainId === "1" && lower === WETH_MAINNET) return zeroAddress;
45548
- return lower;
46980
+ var normalizeUnderlying6 = (addr2, chainId) => {
46981
+ const lower3 = addr2.toLowerCase();
46982
+ if (chainId === "1" && lower3 === WETH_MAINNET) return zeroAddress;
46983
+ return lower3;
45549
46984
  };
45550
46985
  var RAY_TO_PERCENT2 = 1e25;
45551
46986
  var scaleRate = (raw) => {
@@ -46004,9 +47439,9 @@ var VAULT_V2_ADAPTER_ABI = parseAbi([
46004
47439
  ]);
46005
47440
  var PHASE1_ABI = [...MetaMorphoAbi, ...VAULT_V2_PHASE1_ABI];
46006
47441
  var FEE_SCALE = 1e18;
46007
- var isHex40 = (addr) => typeof addr === "string" && /^0x[0-9a-f]{40}$/i.test(addr);
47442
+ var isHex40 = (addr2) => typeof addr2 === "string" && /^0x[0-9a-f]{40}$/i.test(addr2);
46008
47443
  var isHex64 = (v) => typeof v === "string" && /^0x[0-9a-f]{64}$/i.test(v);
46009
- var lcOrUndefined = (addr) => isHex40(addr) ? addr.toLowerCase() : void 0;
47444
+ var lcOrUndefined = (addr2) => isHex40(addr2) ? addr2.toLowerCase() : void 0;
46010
47445
  var toNumberSafe = (raw, fallback = 0) => {
46011
47446
  if (raw === void 0 || raw === null) return fallback;
46012
47447
  const n = Number(raw);
@@ -46153,12 +47588,12 @@ var fetchMorphoVaultsFromChain = async (chainId, multicallRetry, prices = {}, to
46153
47588
  for (let i = 0; i < entries.length; i++) {
46154
47589
  const { entry } = entries[i];
46155
47590
  const base = i * PHASE1_PER_VAULT;
46156
- const slice = phase1.slice(base, base + CALLS_PER_VAULT);
47591
+ const slice2 = phase1.slice(base, base + CALLS_PER_VAULT);
46157
47592
  const v2 = isV2[i] ? v2ByVault.get(entry.vault.toLowerCase()) ?? null : null;
46158
47593
  const v2FeePercent = isV2[i] ? toNumberSafe(phase1[base + PERFORMANCE_FEE_INDEX]) / FEE_SCALE * 100 : void 0;
46159
47594
  const parsed = parseVault3(
46160
47595
  entry,
46161
- slice,
47596
+ slice2,
46162
47597
  chainId,
46163
47598
  prices,
46164
47599
  tokenList,
@@ -46544,11 +47979,11 @@ var PHASE1_CALLS2 = [
46544
47979
  var PHASE1_PER_VAULT2 = PHASE1_CALLS2.length;
46545
47980
  var WITHDRAW_QUEUE_LENGTH_INDEX2 = 8;
46546
47981
  var FEE_SCALE2 = 1e18;
46547
- var isHex402 = (addr) => typeof addr === "string" && /^0x[0-9a-f]{40}$/i.test(addr);
46548
- var lcOrUndefined2 = (addr) => {
46549
- if (!isHex402(addr)) return void 0;
46550
- const lower = addr.toLowerCase();
46551
- return lower === zeroAddress ? void 0 : lower;
47982
+ var isHex402 = (addr2) => typeof addr2 === "string" && /^0x[0-9a-f]{40}$/i.test(addr2);
47983
+ var lcOrUndefined2 = (addr2) => {
47984
+ if (!isHex402(addr2)) return void 0;
47985
+ const lower3 = addr2.toLowerCase();
47986
+ return lower3 === zeroAddress ? void 0 : lower3;
46552
47987
  };
46553
47988
  var isHex642 = (val) => typeof val === "string" && /^0x[0-9a-f]{64}$/i.test(val);
46554
47989
  var toNumberSafe2 = (raw, fallback = 0) => {
@@ -46659,10 +48094,10 @@ var fetchListaVaultsFromChain = async (chainId, multicallRetry, prices = {}, tok
46659
48094
  const out = {};
46660
48095
  for (let i = 0; i < entries.length; i++) {
46661
48096
  const entry = entries[i];
46662
- const slice = phase1.slice(i * PHASE1_PER_VAULT2, (i + 1) * PHASE1_PER_VAULT2);
48097
+ const slice2 = phase1.slice(i * PHASE1_PER_VAULT2, (i + 1) * PHASE1_PER_VAULT2);
46663
48098
  const parsed = parseVault4(
46664
48099
  entry,
46665
- slice,
48100
+ slice2,
46666
48101
  curatorAddrByVault[i],
46667
48102
  chainId,
46668
48103
  prices,
@@ -47154,9 +48589,9 @@ query EvkByAssets($assets: [Bytes!]!) {
47154
48589
  `;
47155
48590
  var ZERO = 0n;
47156
48591
  var RAY_TO_PERCENT3 = 1e25;
47157
- function readAddress2(field9) {
47158
- if (!field9) return void 0;
47159
- return field9.toLowerCase();
48592
+ function readAddress2(field10) {
48593
+ if (!field10) return void 0;
48594
+ return field10.toLowerCase();
47160
48595
  }
47161
48596
  function parseVaultFee(v) {
47162
48597
  if (v.performanceFee == null) return 0;
@@ -47515,6 +48950,300 @@ var fetchEulerEarnVaults = async (chainId, prices = {}, tokenList = {}, multical
47515
48950
  ).catch(() => void 0);
47516
48951
  return isNonEmpty(fromSubgraph) ? fromSubgraph : fromApi ?? {};
47517
48952
  };
48953
+ var warn6 = (...args) => {
48954
+ };
48955
+ var num2 = (v) => {
48956
+ const n = Number(v);
48957
+ return Number.isFinite(n) ? n : 0;
48958
+ };
48959
+ var big5 = (v) => {
48960
+ try {
48961
+ if (v === void 0 || v === null || v === "") return "0";
48962
+ const s = String(v);
48963
+ return BigInt(s.includes(".") ? s.slice(0, s.indexOf(".")) : s).toString();
48964
+ } catch {
48965
+ return "0";
48966
+ }
48967
+ };
48968
+ var lower2 = (v) => String(v ?? "").toLowerCase();
48969
+ async function fetchTermMaxVaultsFromApi(chainId, prices = {}, tokenList = {}, fetchImpl = fetch) {
48970
+ const url = `${termMaxApiBase(chainId)}/vault/list?chainId=${chainId}`;
48971
+ let rows;
48972
+ try {
48973
+ const res = await fetchImpl.call(globalThis, url);
48974
+ if (!res.ok) {
48975
+ warn6(`vault/list ${chainId} \u2192 HTTP ${res.status}`);
48976
+ return null;
48977
+ }
48978
+ const json = await res.json();
48979
+ rows = Array.isArray(json?.data) ? json.data : [];
48980
+ } catch (e) {
48981
+ warn6(`vault/list ${chainId} failed:`, e?.message ?? e);
48982
+ return null;
48983
+ }
48984
+ const out = {};
48985
+ for (const r of rows) {
48986
+ const address = lower2(r?.vaultAddress);
48987
+ const underlying = lower2(r?.asset?.contractAddress);
48988
+ if (!address || !underlying) continue;
48989
+ if (r.isEnabled === false) continue;
48990
+ const assetDecimals = num2(r?.asset?.decimals) || 18;
48991
+ const scale = 10 ** assetDecimals;
48992
+ const assetEntry = tokenList[underlying];
48993
+ const priceKey = toOracleKey(assetEntry?.assetGroup) || toGenericPriceKey(underlying, chainId);
48994
+ const priceUsd = prices[priceKey];
48995
+ const totalAssets = big5(r.totalAssets);
48996
+ const totalSupply = big5(r.totalSupplyAmt);
48997
+ const totalAssetsFormatted = Number(totalAssets) / scale;
48998
+ const supplyRate = num2(r.apr) * 100;
48999
+ const rewardsRate = num2(r?.incentiveData?.TMX_APR) * 100;
49000
+ const rawLiquidity = BigInt(big5(r.redeemableAmt ?? r.idleFunds ?? "0"));
49001
+ const totalAssetsBig = BigInt(totalAssets);
49002
+ const liquidity = (rawLiquidity > totalAssetsBig ? totalAssetsBig : rawLiquidity).toString();
49003
+ const liquidityFormatted = Number(liquidity) / scale;
49004
+ const totalSupplyValue = num2(r.totalSupplyValue);
49005
+ out[address] = {
49006
+ address,
49007
+ underlying,
49008
+ symbol: String(r.symbol ?? ""),
49009
+ name: String(r.name ?? ""),
49010
+ // Share decimals are not reported; TermMax vault shares track the
49011
+ // asset's decimals (verified on-chain: 6-dec USDC vault, 18-dec WETH).
49012
+ decimals: assetDecimals,
49013
+ assetDecimals,
49014
+ totalAssets,
49015
+ totalSupply,
49016
+ convertToAssets: BigInt(totalSupply) > 0n ? (BigInt(totalAssets) * 10n ** BigInt(assetDecimals) / BigInt(totalSupply)).toString() : "0",
49017
+ supplyRate,
49018
+ rewardsRate,
49019
+ depositRate: supplyRate + rewardsRate,
49020
+ // 1e8-scaled upstream (10000000 = 10%).
49021
+ fee: num2(r.performanceFeeRate) / 1e6,
49022
+ timelock: num2(r.timeLockSeconds) || void 0,
49023
+ curator: r?.curator?.curatorAddress ? lower2(r.curator.curatorAddress) : void 0,
49024
+ // The API is the ONLY source for this — do not derive it from `name`.
49025
+ curatorName: r?.curator?.name || void 0,
49026
+ guardian: r?.guardianAddress ? lower2(r.guardianAddress) : void 0,
49027
+ asset: assetEntry,
49028
+ priceUsd,
49029
+ totalAssetsFormatted,
49030
+ totalAssetsUsd: totalSupplyValue > 0 ? totalSupplyValue : priceUsd ? totalAssetsFormatted * priceUsd : 0,
49031
+ liquidity,
49032
+ liquidityFormatted,
49033
+ liquidityUsd: priceUsd ? liquidityFormatted * priceUsd : 0,
49034
+ version: r.version,
49035
+ isPaused: r.isPaused === true || void 0,
49036
+ supplyCap: r.capacity ? big5(r.capacity) : void 0,
49037
+ basePool: r.poolAddress ? lower2(r.poolAddress) : void 0
49038
+ };
49039
+ }
49040
+ return out;
49041
+ }
49042
+
49043
+ // src/vaults/termmax/abi.ts
49044
+ var TermMaxVaultAbi = [
49045
+ { type: "function", name: "name", stateMutability: "view", inputs: [], outputs: [{ type: "string" }] },
49046
+ { type: "function", name: "symbol", stateMutability: "view", inputs: [], outputs: [{ type: "string" }] },
49047
+ { type: "function", name: "decimals", stateMutability: "view", inputs: [], outputs: [{ type: "uint8" }] },
49048
+ { type: "function", name: "asset", stateMutability: "view", inputs: [], outputs: [{ type: "address" }] },
49049
+ { type: "function", name: "totalAssets", stateMutability: "view", inputs: [], outputs: [{ type: "uint256" }] },
49050
+ { type: "function", name: "totalSupply", stateMutability: "view", inputs: [], outputs: [{ type: "uint256" }] },
49051
+ {
49052
+ type: "function",
49053
+ name: "convertToAssets",
49054
+ stateMutability: "view",
49055
+ inputs: [{ name: "shares", type: "uint256" }],
49056
+ outputs: [{ type: "uint256" }]
49057
+ },
49058
+ {
49059
+ type: "function",
49060
+ name: "balanceOf",
49061
+ stateMutability: "view",
49062
+ inputs: [{ name: "account", type: "address" }],
49063
+ outputs: [{ type: "uint256" }]
49064
+ },
49065
+ // GROSS annual interest in underlying units. The performance fee is deducted
49066
+ // from it on accrual, so it must be netted before publishing a rate.
49067
+ { type: "function", name: "annualizedInterest", stateMutability: "view", inputs: [], outputs: [{ type: "uint256" }] },
49068
+ // Depositors' accruing claim — the correct APR denominator. REVERTS on 2.0.0.
49069
+ { type: "function", name: "accretingPrincipal", stateMutability: "view", inputs: [], outputs: [{ type: "uint256" }] },
49070
+ // 1e8-scaled (0.1e8 = 10%).
49071
+ { type: "function", name: "performanceFeeRate", stateMutability: "view", inputs: [], outputs: [{ type: "uint64" }] },
49072
+ // Pre-computed net APY. REVERTS on 2.0.0 — we derive instead.
49073
+ { type: "function", name: "apr", stateMutability: "view", inputs: [], outputs: [{ type: "uint256" }] },
49074
+ { type: "function", name: "curator", stateMutability: "view", inputs: [], outputs: [{ type: "address" }] },
49075
+ { type: "function", name: "guardian", stateMutability: "view", inputs: [], outputs: [{ type: "address" }] },
49076
+ { type: "function", name: "timelock", stateMutability: "view", inputs: [], outputs: [{ type: "uint256" }] },
49077
+ { type: "function", name: "getVersion", stateMutability: "pure", inputs: [], outputs: [{ type: "string" }] }
49078
+ ];
49079
+ var Erc20DecimalsBalanceAbi = [
49080
+ { type: "function", name: "decimals", stateMutability: "view", inputs: [], outputs: [{ type: "uint8" }] },
49081
+ {
49082
+ type: "function",
49083
+ name: "balanceOf",
49084
+ stateMutability: "view",
49085
+ inputs: [{ name: "account", type: "address" }],
49086
+ outputs: [{ type: "uint256" }]
49087
+ }
49088
+ ];
49089
+
49090
+ // src/vaults/termmax/fetchFromChain.ts
49091
+ var DECIMAL_BASE2 = 100000000n;
49092
+ var big6 = (v) => {
49093
+ if (v === void 0 || v === null || v === "0x") return 0n;
49094
+ try {
49095
+ return typeof v === "bigint" ? v : BigInt(v);
49096
+ } catch {
49097
+ return 0n;
49098
+ }
49099
+ };
49100
+ var num3 = (v) => {
49101
+ const n = Number(v);
49102
+ return Number.isFinite(n) ? n : void 0;
49103
+ };
49104
+ var str = (v) => typeof v === "string" && v.length > 0 ? v : void 0;
49105
+ var addr = (v) => typeof v === "string" && /^0x[0-9a-fA-F]{40}$/.test(v) && !/^0x0{40}$/.test(v) ? v.toLowerCase() : void 0;
49106
+ async function discoverVaultAddresses(chainId) {
49107
+ const markets = await fetchTermMaxMarkets(chainId).catch(() => []);
49108
+ const seen = /* @__PURE__ */ new Set();
49109
+ for (const m of markets) {
49110
+ for (const o of m.orders) {
49111
+ if (!o.makerIsVault) continue;
49112
+ const maker = addr(o.makerAddress);
49113
+ if (maker) seen.add(maker);
49114
+ }
49115
+ }
49116
+ return [...seen];
49117
+ }
49118
+ var VAULT_READS = [
49119
+ "name",
49120
+ "symbol",
49121
+ "decimals",
49122
+ "asset",
49123
+ "totalAssets",
49124
+ "totalSupply",
49125
+ "annualizedInterest",
49126
+ "accretingPrincipal",
49127
+ "performanceFeeRate",
49128
+ "apr",
49129
+ "curator",
49130
+ "guardian",
49131
+ "timelock",
49132
+ "getVersion"
49133
+ ];
49134
+ var READS_PER_VAULT = VAULT_READS.length;
49135
+ var fetchTermMaxVaultsFromChain = async (chainId, multicallRetry, prices = {}, tokenList = {}) => {
49136
+ if (!termMaxConfigByChain(chainId)) return {};
49137
+ const vaults = await discoverVaultAddresses(chainId);
49138
+ if (vaults.length === 0) return {};
49139
+ const calls = vaults.flatMap(
49140
+ (address) => VAULT_READS.map((name) => ({
49141
+ address,
49142
+ name,
49143
+ params: []
49144
+ }))
49145
+ );
49146
+ const res = await multicallRetry({
49147
+ chain: chainId,
49148
+ calls,
49149
+ abi: TermMaxVaultAbi,
49150
+ allowFailure: true
49151
+ });
49152
+ const rows = [];
49153
+ vaults.forEach((address, i) => {
49154
+ const at = (k) => res[i * READS_PER_VAULT + VAULT_READS.indexOf(k)];
49155
+ const asset = addr(at("asset"));
49156
+ const totalAssets = big6(at("totalAssets"));
49157
+ if (!asset || totalAssets === 0n) return;
49158
+ rows.push({
49159
+ address,
49160
+ name: str(at("name")),
49161
+ symbol: str(at("symbol")),
49162
+ decimals: num3(at("decimals")) ?? 18,
49163
+ asset,
49164
+ totalAssets,
49165
+ totalSupply: big6(at("totalSupply")),
49166
+ annualizedInterest: big6(at("annualizedInterest")),
49167
+ accretingPrincipal: big6(at("accretingPrincipal")),
49168
+ performanceFeeRate: big6(at("performanceFeeRate")),
49169
+ aprRaw: at("apr") != null ? big6(at("apr")) : void 0,
49170
+ curator: addr(at("curator")),
49171
+ guardian: addr(at("guardian")),
49172
+ timelock: num3(at("timelock")),
49173
+ version: str(at("getVersion"))
49174
+ });
49175
+ });
49176
+ if (rows.length === 0) return {};
49177
+ const round2 = rows.flatMap((r) => [
49178
+ { address: r.asset, name: "decimals", params: [] },
49179
+ { address: r.asset, name: "balanceOf", params: [r.address] }
49180
+ ]);
49181
+ const res2 = await multicallRetry({
49182
+ chain: chainId,
49183
+ calls: round2,
49184
+ abi: Erc20DecimalsBalanceAbi,
49185
+ allowFailure: true
49186
+ });
49187
+ const out = {};
49188
+ rows.forEach((r, i) => {
49189
+ const assetDecimals = num3(res2[i * 2]) ?? r.decimals;
49190
+ const idle = big6(res2[i * 2 + 1]);
49191
+ const assetEntry = tokenList[r.asset];
49192
+ const priceKey = toOracleKey(assetEntry?.assetGroup) || toGenericPriceKey(r.asset, chainId);
49193
+ const priceUsd = prices[priceKey];
49194
+ const denominator = r.accretingPrincipal > 0n ? r.accretingPrincipal : r.totalAssets;
49195
+ const feeRate = r.performanceFeeRate;
49196
+ let supplyRate = 0;
49197
+ if (denominator > 0n && r.annualizedInterest > 0n) {
49198
+ const netAnnual = r.annualizedInterest * (DECIMAL_BASE2 - feeRate) / DECIMAL_BASE2;
49199
+ supplyRate = Number(netAnnual) / Number(denominator) * 100;
49200
+ }
49201
+ if (r.aprRaw !== void 0 && r.aprRaw > 0n) {
49202
+ supplyRate = Number(r.aprRaw) / Number(DECIMAL_BASE2) * 100;
49203
+ }
49204
+ const scale = 10 ** assetDecimals;
49205
+ const totalAssetsFormatted = Number(r.totalAssets) / scale;
49206
+ const liquidityFormatted = Number(idle) / scale;
49207
+ const convertToAssets = r.totalSupply > 0n ? (r.totalAssets * 10n ** BigInt(r.decimals) / r.totalSupply).toString() : "0";
49208
+ const entry = {
49209
+ address: r.address,
49210
+ underlying: r.asset,
49211
+ symbol: r.symbol ?? "",
49212
+ name: r.name ?? "",
49213
+ decimals: r.decimals,
49214
+ assetDecimals,
49215
+ totalAssets: r.totalAssets.toString(),
49216
+ totalSupply: r.totalSupply.toString(),
49217
+ convertToAssets,
49218
+ supplyRate,
49219
+ rewardsRate: 0,
49220
+ depositRate: supplyRate,
49221
+ fee: Number(feeRate) / Number(DECIMAL_BASE2) * 100,
49222
+ timelock: r.timelock,
49223
+ curator: r.curator,
49224
+ curatorName: curatorNameFromVaultName(r.name),
49225
+ guardian: r.guardian,
49226
+ asset: assetEntry,
49227
+ priceUsd,
49228
+ totalAssetsFormatted,
49229
+ totalAssetsUsd: priceUsd ? totalAssetsFormatted * priceUsd : 0,
49230
+ liquidity: idle.toString(),
49231
+ liquidityFormatted,
49232
+ liquidityUsd: priceUsd ? liquidityFormatted * priceUsd : 0,
49233
+ version: r.version
49234
+ };
49235
+ out[r.address] = entry;
49236
+ });
49237
+ return out;
49238
+ };
49239
+
49240
+ // src/vaults/termmax/fetchPublic.ts
49241
+ var fetchTermMaxVaults = async (chainId, multicallRetry, prices = {}, tokenList = {}) => {
49242
+ if (!termMaxConfigByChain(chainId)) return {};
49243
+ const fromApi = await fetchTermMaxVaultsFromApi(chainId, prices, tokenList);
49244
+ if (fromApi !== null) return fromApi;
49245
+ return fetchTermMaxVaultsFromChain(chainId, multicallRetry, prices, tokenList);
49246
+ };
47518
49247
 
47519
49248
  // src/vaults/lst/abis/beets.ts
47520
49249
  var BeetsStSAbi = [
@@ -47590,7 +49319,7 @@ var Multicall3BalanceAbi = [
47590
49319
  outputs: [{ type: "uint256" }]
47591
49320
  }
47592
49321
  ];
47593
- var toBigInt12 = (v) => {
49322
+ var toBigInt13 = (v) => {
47594
49323
  if (v === void 0 || v === null) return void 0;
47595
49324
  if (typeof v === "bigint") return v;
47596
49325
  if (typeof v === "number") return BigInt(v);
@@ -47614,12 +49343,12 @@ var readerBeetsStS = (entry) => ({
47614
49343
  ],
47615
49344
  abis: [TotalSupplyAbi, BeetsStSAbi, BeetsStSAbi],
47616
49345
  parse: ([supply, rate, pool]) => {
47617
- const totalSupply = toBigInt12(supply);
47618
- const exchangeRate = toBigInt12(rate);
49346
+ const totalSupply = toBigInt13(supply);
49347
+ const exchangeRate = toBigInt13(rate);
47619
49348
  if (totalSupply === void 0 || exchangeRate === void 0) {
47620
49349
  return void 0;
47621
49350
  }
47622
- const liquidity = toBigInt12(pool);
49351
+ const liquidity = toBigInt13(pool);
47623
49352
  return {
47624
49353
  totalAssets: totalSupply * exchangeRate / ONE_E187,
47625
49354
  totalSupply,
@@ -47660,12 +49389,12 @@ var readerBenqiSavax = (entry) => ({
47660
49389
  ],
47661
49390
  abis: [TotalSupplyAbi, BenqiSavaxAbi, BenqiSavaxAbi],
47662
49391
  parse: ([supply, rate, totalPooled]) => {
47663
- const totalSupply = toBigInt12(supply);
47664
- const exchangeRate = toBigInt12(rate);
49392
+ const totalSupply = toBigInt13(supply);
49393
+ const exchangeRate = toBigInt13(rate);
47665
49394
  if (totalSupply === void 0 || exchangeRate === void 0) {
47666
49395
  return void 0;
47667
49396
  }
47668
- const totalAssets = toBigInt12(totalPooled) ?? totalSupply * exchangeRate / ONE_E187;
49397
+ const totalAssets = toBigInt13(totalPooled) ?? totalSupply * exchangeRate / ONE_E187;
47669
49398
  return {
47670
49399
  totalAssets,
47671
49400
  totalSupply,
@@ -47679,7 +49408,7 @@ var readerBgtWrapper1to1 = (entry) => ({
47679
49408
  calls: [{ address: entry.address, name: "totalSupply", params: [] }],
47680
49409
  abis: [TotalSupplyAbi],
47681
49410
  parse: ([supply]) => {
47682
- const totalSupply = toBigInt12(supply);
49411
+ const totalSupply = toBigInt13(supply);
47683
49412
  if (totalSupply === void 0) return void 0;
47684
49413
  return {
47685
49414
  totalAssets: totalSupply,
@@ -47708,8 +49437,8 @@ var readerDineroBeraEth = (entry) => ({
47708
49437
  ],
47709
49438
  abis: [TotalSupplyAbi, DineroBeraEthAbi],
47710
49439
  parse: ([supply, rate]) => {
47711
- const totalSupply = toBigInt12(supply);
47712
- const exchangeRate = toBigInt12(rate);
49440
+ const totalSupply = toBigInt13(supply);
49441
+ const exchangeRate = toBigInt13(rate);
47713
49442
  if (totalSupply === void 0 || exchangeRate === void 0) {
47714
49443
  return void 0;
47715
49444
  }
@@ -47730,9 +49459,9 @@ var readerErc4626 = (entry) => ({
47730
49459
  ],
47731
49460
  abis: [Erc4626ReadAbi, TotalSupplyAbi, Erc4626ReadAbi],
47732
49461
  parse: ([assets, supply, rate]) => {
47733
- const totalAssets = toBigInt12(assets);
47734
- const totalSupply = toBigInt12(supply);
47735
- const exchangeRate = toBigInt12(rate);
49462
+ const totalAssets = toBigInt13(assets);
49463
+ const totalSupply = toBigInt13(supply);
49464
+ const exchangeRate = toBigInt13(rate);
47736
49465
  if (totalAssets === void 0 || totalSupply === void 0 || exchangeRate === void 0) {
47737
49466
  return void 0;
47738
49467
  }
@@ -47747,9 +49476,9 @@ var readerErc4626PreviewRedeem = (entry) => ({
47747
49476
  ],
47748
49477
  abis: [Erc4626PreviewRedeemAbi, TotalSupplyAbi, Erc4626PreviewRedeemAbi],
47749
49478
  parse: ([assets, supply, rate]) => {
47750
- const totalAssets = toBigInt12(assets);
47751
- const totalSupply = toBigInt12(supply);
47752
- const exchangeRate = toBigInt12(rate);
49479
+ const totalAssets = toBigInt13(assets);
49480
+ const totalSupply = toBigInt13(supply);
49481
+ const exchangeRate = toBigInt13(rate);
47753
49482
  if (totalAssets === void 0 || totalSupply === void 0 || exchangeRate === void 0) {
47754
49483
  return void 0;
47755
49484
  }
@@ -47808,16 +49537,16 @@ var readerEtherFiWeEth = (entry) => {
47808
49537
  return {
47809
49538
  calls,
47810
49539
  abis,
47811
- parse: (slice) => {
47812
- const totalSupply = toBigInt12(slice[0]);
47813
- const exchangeRate = toBigInt12(slice[1]);
49540
+ parse: (slice2) => {
49541
+ const totalSupply = toBigInt13(slice2[0]);
49542
+ const exchangeRate = toBigInt13(slice2[1]);
47814
49543
  if (totalSupply === void 0 || exchangeRate === void 0) {
47815
49544
  return void 0;
47816
49545
  }
47817
49546
  let liquidity;
47818
49547
  if (lp) {
47819
- const lpBalance = toBigInt12(slice[2]);
47820
- const locked = toBigInt12(slice[3]);
49548
+ const lpBalance = toBigInt13(slice2[2]);
49549
+ const locked = toBigInt13(slice2[3]);
47821
49550
  if (lpBalance !== void 0 && locked !== void 0) {
47822
49551
  liquidity = lpBalance > locked ? lpBalance - locked : 0n;
47823
49552
  }
@@ -47851,7 +49580,7 @@ var readerHyperbeatBeHype = (entry) => {
47851
49580
  calls: [{ address: entry.address, name: "totalSupply", params: [] }],
47852
49581
  abis: [TotalSupplyAbi],
47853
49582
  parse: ([supply]) => {
47854
- const totalSupply = toBigInt12(supply);
49583
+ const totalSupply = toBigInt13(supply);
47855
49584
  if (totalSupply === void 0) return void 0;
47856
49585
  return {
47857
49586
  totalAssets: totalSupply,
@@ -47868,8 +49597,8 @@ var readerHyperbeatBeHype = (entry) => {
47868
49597
  ],
47869
49598
  abis: [TotalSupplyAbi, HyperbeatStakingCoreAbi],
47870
49599
  parse: ([supply, rate]) => {
47871
- const totalSupply = toBigInt12(supply);
47872
- const exchangeRate = toBigInt12(rate);
49600
+ const totalSupply = toBigInt13(supply);
49601
+ const exchangeRate = toBigInt13(rate);
47873
49602
  if (totalSupply === void 0 || exchangeRate === void 0) {
47874
49603
  return void 0;
47875
49604
  }
@@ -47901,7 +49630,7 @@ var readerKelpRsEth = (entry) => {
47901
49630
  calls: [{ address: entry.address, name: "totalSupply", params: [] }],
47902
49631
  abis: [TotalSupplyAbi],
47903
49632
  parse: ([supply]) => {
47904
- const totalSupply = toBigInt12(supply);
49633
+ const totalSupply = toBigInt13(supply);
47905
49634
  if (totalSupply === void 0) return void 0;
47906
49635
  return {
47907
49636
  totalAssets: totalSupply,
@@ -47918,8 +49647,8 @@ var readerKelpRsEth = (entry) => {
47918
49647
  ],
47919
49648
  abis: [TotalSupplyAbi, KelpLrtOracleAbi],
47920
49649
  parse: ([supply, rate]) => {
47921
- const totalSupply = toBigInt12(supply);
47922
- const exchangeRate = toBigInt12(rate);
49650
+ const totalSupply = toBigInt13(supply);
49651
+ const exchangeRate = toBigInt13(rate);
47923
49652
  if (totalSupply === void 0 || exchangeRate === void 0) {
47924
49653
  return void 0;
47925
49654
  }
@@ -47951,7 +49680,7 @@ var readerKinetiqKHype = (entry) => {
47951
49680
  calls: [{ address: entry.address, name: "totalSupply", params: [] }],
47952
49681
  abis: [TotalSupplyAbi],
47953
49682
  parse: ([supply]) => {
47954
- const totalSupply = toBigInt12(supply);
49683
+ const totalSupply = toBigInt13(supply);
47955
49684
  if (totalSupply === void 0) return void 0;
47956
49685
  return {
47957
49686
  totalAssets: totalSupply,
@@ -47968,8 +49697,8 @@ var readerKinetiqKHype = (entry) => {
47968
49697
  ],
47969
49698
  abis: [TotalSupplyAbi, KinetiqStakingAccountantAbi],
47970
49699
  parse: ([supply, rate]) => {
47971
- const totalSupply = toBigInt12(supply);
47972
- const exchangeRate = toBigInt12(rate);
49700
+ const totalSupply = toBigInt13(supply);
49701
+ const exchangeRate = toBigInt13(rate);
47973
49702
  if (totalSupply === void 0 || exchangeRate === void 0) {
47974
49703
  return void 0;
47975
49704
  }
@@ -48009,12 +49738,12 @@ var readerLairStKaia = (entry) => ({
48009
49738
  ],
48010
49739
  abis: [TotalSupplyAbi, LairStKaiaAbi, LairStKaiaAbi],
48011
49740
  parse: ([supply, rate, totalStaking]) => {
48012
- const totalSupply = toBigInt12(supply);
48013
- const exchangeRate = toBigInt12(rate);
49741
+ const totalSupply = toBigInt13(supply);
49742
+ const exchangeRate = toBigInt13(rate);
48014
49743
  if (totalSupply === void 0 || exchangeRate === void 0) {
48015
49744
  return void 0;
48016
49745
  }
48017
- const totalAssets = toBigInt12(totalStaking) ?? totalSupply * exchangeRate / ONE_E187;
49746
+ const totalAssets = toBigInt13(totalStaking) ?? totalSupply * exchangeRate / ONE_E187;
48018
49747
  return {
48019
49748
  totalAssets,
48020
49749
  totalSupply,
@@ -48042,8 +49771,8 @@ var readerLidoWstEth = (entry) => ({
48042
49771
  ],
48043
49772
  abis: [TotalSupplyAbi, LidoWstEthAbi],
48044
49773
  parse: ([supply, rate]) => {
48045
- const totalSupply = toBigInt12(supply);
48046
- const exchangeRate = toBigInt12(rate);
49774
+ const totalSupply = toBigInt13(supply);
49775
+ const exchangeRate = toBigInt13(rate);
48047
49776
  if (totalSupply === void 0 || exchangeRate === void 0) {
48048
49777
  return void 0;
48049
49778
  }
@@ -48081,7 +49810,7 @@ var readerListaSlisBnb = (entry) => {
48081
49810
  calls: [{ address: entry.address, name: "totalSupply", params: [] }],
48082
49811
  abis: [TotalSupplyAbi],
48083
49812
  parse: ([supply]) => {
48084
- const totalSupply = toBigInt12(supply);
49813
+ const totalSupply = toBigInt13(supply);
48085
49814
  if (totalSupply === void 0) return void 0;
48086
49815
  return {
48087
49816
  totalAssets: totalSupply,
@@ -48099,12 +49828,12 @@ var readerListaSlisBnb = (entry) => {
48099
49828
  ],
48100
49829
  abis: [TotalSupplyAbi, ListaStakeManagerReadAbi, ListaStakeManagerReadAbi],
48101
49830
  parse: ([supply, rate, pooled]) => {
48102
- const totalSupply = toBigInt12(supply);
48103
- const exchangeRate = toBigInt12(rate);
49831
+ const totalSupply = toBigInt13(supply);
49832
+ const exchangeRate = toBigInt13(rate);
48104
49833
  if (totalSupply === void 0 || exchangeRate === void 0) {
48105
49834
  return void 0;
48106
49835
  }
48107
- const pooledBnb = toBigInt12(pooled);
49836
+ const pooledBnb = toBigInt13(pooled);
48108
49837
  const totalAssets = pooledBnb ?? totalSupply * exchangeRate / ONE_E187;
48109
49838
  return { totalAssets, totalSupply, exchangeRate };
48110
49839
  }
@@ -48130,7 +49859,7 @@ var readerMantleMEth = (entry) => {
48130
49859
  calls: [{ address: entry.address, name: "totalSupply", params: [] }],
48131
49860
  abis: [TotalSupplyAbi],
48132
49861
  parse: ([supply]) => {
48133
- const totalSupply = toBigInt12(supply);
49862
+ const totalSupply = toBigInt13(supply);
48134
49863
  if (totalSupply === void 0) return void 0;
48135
49864
  return {
48136
49865
  totalAssets: totalSupply,
@@ -48147,8 +49876,8 @@ var readerMantleMEth = (entry) => {
48147
49876
  ],
48148
49877
  abis: [TotalSupplyAbi, MantleStakingAbi],
48149
49878
  parse: ([supply, rate]) => {
48150
- const totalSupply = toBigInt12(supply);
48151
- const exchangeRate = toBigInt12(rate);
49879
+ const totalSupply = toBigInt13(supply);
49880
+ const exchangeRate = toBigInt13(rate);
48152
49881
  if (totalSupply === void 0 || exchangeRate === void 0) {
48153
49882
  return void 0;
48154
49883
  }
@@ -48169,7 +49898,7 @@ var readerOffChain = (entry) => {
48169
49898
  calls: [{ address: entry.address, name: "totalSupply", params: [] }],
48170
49899
  abis: [TotalSupplyAbi],
48171
49900
  parse: ([supply]) => {
48172
- const totalSupply = toBigInt12(supply);
49901
+ const totalSupply = toBigInt13(supply);
48173
49902
  if (totalSupply === void 0) return void 0;
48174
49903
  return {
48175
49904
  totalAssets: rescaleDecimals(totalSupply, shareDec, underlyingDec),
@@ -48203,7 +49932,7 @@ var readerRenzoEzEth = (entry) => {
48203
49932
  calls: [{ address: entry.address, name: "totalSupply", params: [] }],
48204
49933
  abis: [TotalSupplyAbi],
48205
49934
  parse: ([supply]) => {
48206
- const totalSupply = toBigInt12(supply);
49935
+ const totalSupply = toBigInt13(supply);
48207
49936
  if (totalSupply === void 0) return void 0;
48208
49937
  return {
48209
49938
  totalAssets: totalSupply,
@@ -48220,9 +49949,9 @@ var readerRenzoEzEth = (entry) => {
48220
49949
  ],
48221
49950
  abis: [TotalSupplyAbi, RenzoRestakeManagerAbi],
48222
49951
  parse: ([supply, tvls]) => {
48223
- const totalSupply = toBigInt12(supply);
49952
+ const totalSupply = toBigInt13(supply);
48224
49953
  if (totalSupply === void 0 || totalSupply === 0n) return void 0;
48225
- const totalTvl = Array.isArray(tvls) && tvls.length >= 3 ? toBigInt12(tvls[2]) : void 0;
49954
+ const totalTvl = Array.isArray(tvls) && tvls.length >= 3 ? toBigInt13(tvls[2]) : void 0;
48226
49955
  if (totalTvl === void 0) return void 0;
48227
49956
  return {
48228
49957
  totalAssets: totalTvl,
@@ -48275,13 +50004,13 @@ var readerRocketReth = (entry) => {
48275
50004
  return {
48276
50005
  calls,
48277
50006
  abis,
48278
- parse: (slice) => {
48279
- const totalSupply = toBigInt12(slice[0]);
48280
- const exchangeRate = toBigInt12(slice[1]);
50007
+ parse: (slice2) => {
50008
+ const totalSupply = toBigInt13(slice2[0]);
50009
+ const exchangeRate = toBigInt13(slice2[1]);
48281
50010
  if (totalSupply === void 0 || exchangeRate === void 0) {
48282
50011
  return void 0;
48283
50012
  }
48284
- const liquidity = depositPool ? toBigInt12(slice[2]) : void 0;
50013
+ const liquidity = depositPool ? toBigInt13(slice2[2]) : void 0;
48285
50014
  return {
48286
50015
  totalAssets: totalSupply * exchangeRate / ONE_E187,
48287
50016
  totalSupply,
@@ -48320,7 +50049,7 @@ var readerStaderEthx = (entry) => {
48320
50049
  calls: [{ address: entry.address, name: "totalSupply", params: [] }],
48321
50050
  abis: [TotalSupplyAbi],
48322
50051
  parse: ([supply]) => {
48323
- const totalSupply = toBigInt12(supply);
50052
+ const totalSupply = toBigInt13(supply);
48324
50053
  if (totalSupply === void 0) return void 0;
48325
50054
  return {
48326
50055
  totalAssets: totalSupply,
@@ -48337,8 +50066,8 @@ var readerStaderEthx = (entry) => {
48337
50066
  ],
48338
50067
  abis: [TotalSupplyAbi, StaderEthxAbi],
48339
50068
  parse: ([supply, rate]) => {
48340
- const totalSupply = toBigInt12(supply);
48341
- const exchangeRate = toBigInt12(rate);
50069
+ const totalSupply = toBigInt13(supply);
50070
+ const exchangeRate = toBigInt13(rate);
48342
50071
  if (totalSupply === void 0 || exchangeRate === void 0) {
48343
50072
  return void 0;
48344
50073
  }
@@ -48366,10 +50095,10 @@ var readerStaderMaticX = (entry) => {
48366
50095
  ],
48367
50096
  abis: [TotalSupplyAbi, StaderMaticXAbi],
48368
50097
  parse: ([supply, tup]) => {
48369
- const totalSupply = toBigInt12(supply);
50098
+ const totalSupply = toBigInt13(supply);
48370
50099
  if (!Array.isArray(tup) || tup.length < 3) return void 0;
48371
- const amountInMatic = toBigInt12(tup[0]);
48372
- const totalPooledMatic = toBigInt12(tup[2]);
50100
+ const amountInMatic = toBigInt13(tup[0]);
50101
+ const totalPooledMatic = toBigInt13(tup[2]);
48373
50102
  if (totalSupply === void 0 || amountInMatic === void 0) {
48374
50103
  return void 0;
48375
50104
  }
@@ -48402,7 +50131,7 @@ var readerStakeWiseOsEth = (entry) => {
48402
50131
  calls: [{ address: entry.address, name: "totalSupply", params: [] }],
48403
50132
  abis: [TotalSupplyAbi],
48404
50133
  parse: ([supply]) => {
48405
- const totalSupply = toBigInt12(supply);
50134
+ const totalSupply = toBigInt13(supply);
48406
50135
  if (totalSupply === void 0) return void 0;
48407
50136
  return {
48408
50137
  totalAssets: totalSupply,
@@ -48419,8 +50148,8 @@ var readerStakeWiseOsEth = (entry) => {
48419
50148
  ],
48420
50149
  abis: [TotalSupplyAbi, StakeWiseOsTokenAbi],
48421
50150
  parse: ([supply, rate]) => {
48422
- const totalSupply = toBigInt12(supply);
48423
- const exchangeRate = toBigInt12(rate);
50151
+ const totalSupply = toBigInt13(supply);
50152
+ const exchangeRate = toBigInt13(rate);
48424
50153
  if (totalSupply === void 0 || exchangeRate === void 0) {
48425
50154
  return void 0;
48426
50155
  }
@@ -48452,7 +50181,7 @@ var readerStCelo = (entry) => {
48452
50181
  calls: [{ address: entry.address, name: "totalSupply", params: [] }],
48453
50182
  abis: [TotalSupplyAbi],
48454
50183
  parse: ([supply]) => {
48455
- const totalSupply = toBigInt12(supply);
50184
+ const totalSupply = toBigInt13(supply);
48456
50185
  if (totalSupply === void 0) return void 0;
48457
50186
  return {
48458
50187
  totalAssets: totalSupply,
@@ -48469,8 +50198,8 @@ var readerStCelo = (entry) => {
48469
50198
  ],
48470
50199
  abis: [TotalSupplyAbi, StCeloManagerAbi],
48471
50200
  parse: ([supply, rate]) => {
48472
- const totalSupply = toBigInt12(supply);
48473
- const exchangeRate = toBigInt12(rate);
50201
+ const totalSupply = toBigInt13(supply);
50202
+ const exchangeRate = toBigInt13(rate);
48474
50203
  if (totalSupply === void 0 || exchangeRate === void 0) {
48475
50204
  return void 0;
48476
50205
  }
@@ -48502,8 +50231,8 @@ var readerSwellGetRate = (entry) => ({
48502
50231
  ],
48503
50232
  abis: [TotalSupplyAbi, SwellGetRateAbi],
48504
50233
  parse: ([supply, rate]) => {
48505
- const totalSupply = toBigInt12(supply);
48506
- const exchangeRate = toBigInt12(rate);
50234
+ const totalSupply = toBigInt13(supply);
50235
+ const exchangeRate = toBigInt13(rate);
48507
50236
  if (totalSupply === void 0 || exchangeRate === void 0) {
48508
50237
  return void 0;
48509
50238
  }
@@ -48534,7 +50263,7 @@ var readerValantisWstHype = (entry) => {
48534
50263
  calls: [{ address: entry.address, name: "totalSupply", params: [] }],
48535
50264
  abis: [TotalSupplyAbi],
48536
50265
  parse: ([supply]) => {
48537
- const totalSupply = toBigInt12(supply);
50266
+ const totalSupply = toBigInt13(supply);
48538
50267
  if (totalSupply === void 0) return void 0;
48539
50268
  return {
48540
50269
  totalAssets: totalSupply,
@@ -48551,8 +50280,8 @@ var readerValantisWstHype = (entry) => {
48551
50280
  ],
48552
50281
  abis: [TotalSupplyAbi, ValantisStHypeAbi],
48553
50282
  parse: ([supply, rate]) => {
48554
- const totalSupply = toBigInt12(supply);
48555
- const exchangeRate = toBigInt12(rate);
50283
+ const totalSupply = toBigInt13(supply);
50284
+ const exchangeRate = toBigInt13(rate);
48556
50285
  if (totalSupply === void 0 || exchangeRate === void 0) {
48557
50286
  return void 0;
48558
50287
  }
@@ -48586,7 +50315,7 @@ var readerVedaAccountant = (entry) => {
48586
50315
  calls: [{ address: entry.address, name: "totalSupply", params: [] }],
48587
50316
  abis: [TotalSupplyAbi],
48588
50317
  parse: ([supply]) => {
48589
- const totalSupply = toBigInt12(supply);
50318
+ const totalSupply = toBigInt13(supply);
48590
50319
  if (totalSupply === void 0) return void 0;
48591
50320
  return {
48592
50321
  totalAssets: rescaleDecimals(totalSupply, shareDec, underlyingDec),
@@ -48604,8 +50333,8 @@ var readerVedaAccountant = (entry) => {
48604
50333
  ],
48605
50334
  abis: [TotalSupplyAbi, VedaAccountantGetRateAbi],
48606
50335
  parse: ([supply, rate]) => {
48607
- const totalSupply = toBigInt12(supply);
48608
- const rawRate = toBigInt12(rate);
50336
+ const totalSupply = toBigInt13(supply);
50337
+ const rawRate = toBigInt13(rate);
48609
50338
  if (totalSupply === void 0 || rawRate === void 0) return void 0;
48610
50339
  const exchangeRate = rawRate * scale;
48611
50340
  return {
@@ -48640,8 +50369,8 @@ var readerAnkrRatio = (entry) => ({
48640
50369
  ],
48641
50370
  abis: [TotalSupplyAbi, AnkrRatioAbi],
48642
50371
  parse: ([supply, ratio]) => {
48643
- const totalSupply = toBigInt12(supply);
48644
- const r = toBigInt12(ratio);
50372
+ const totalSupply = toBigInt13(supply);
50373
+ const r = toBigInt13(ratio);
48645
50374
  if (totalSupply === void 0 || r === void 0 || r === 0n) {
48646
50375
  return void 0;
48647
50376
  }
@@ -48684,8 +50413,8 @@ var readerCoreEarnRate = (entry) => {
48684
50413
  ],
48685
50414
  abis: [CoreEarnRateAbi, TotalSupplyAbi],
48686
50415
  parse: ([rate, supply]) => {
48687
- const r = toBigInt12(rate);
48688
- const totalSupply = toBigInt12(supply);
50416
+ const r = toBigInt13(rate);
50417
+ const totalSupply = toBigInt13(supply);
48689
50418
  if (r === void 0 || r === 0n || totalSupply === void 0) {
48690
50419
  return void 0;
48691
50420
  }
@@ -48706,8 +50435,8 @@ var readerCoreStakedRatio = (entry) => {
48706
50435
  ],
48707
50436
  abis: [CoreTotalStakedAbi, TotalSupplyAbi],
48708
50437
  parse: ([staked, supply]) => {
48709
- const totalStaked = toBigInt12(staked);
48710
- const totalSupply = toBigInt12(supply);
50438
+ const totalStaked = toBigInt13(staked);
50439
+ const totalSupply = toBigInt13(supply);
48711
50440
  if (totalStaked === void 0 || totalSupply === void 0 || totalSupply === 0n) {
48712
50441
  return void 0;
48713
50442
  }
@@ -48751,12 +50480,12 @@ var readerStellaStDot = (entry) => ({
48751
50480
  ],
48752
50481
  abis: [TotalSupplyAbi, StellaStDotAbi, StellaStDotAbi],
48753
50482
  parse: ([supply, rate, pooled]) => {
48754
- const totalSupply = toBigInt12(supply);
48755
- const exchangeRate = toBigInt12(rate);
50483
+ const totalSupply = toBigInt13(supply);
50484
+ const exchangeRate = toBigInt13(rate);
48756
50485
  if (totalSupply === void 0 || exchangeRate === void 0) {
48757
50486
  return void 0;
48758
50487
  }
48759
- const totalAssets = toBigInt12(pooled) ?? totalSupply * exchangeRate / ONE_E187;
50488
+ const totalAssets = toBigInt13(pooled) ?? totalSupply * exchangeRate / ONE_E187;
48760
50489
  return {
48761
50490
  totalAssets,
48762
50491
  totalSupply,
@@ -48791,8 +50520,8 @@ var readerKintsuSMon = (entry) => ({
48791
50520
  ],
48792
50521
  abis: [KintsuSMonAbi, KintsuSMonAbi],
48793
50522
  parse: ([pooled, shares]) => {
48794
- const totalAssets = toBigInt12(pooled);
48795
- const totalSupply = toBigInt12(shares);
50523
+ const totalAssets = toBigInt13(pooled);
50524
+ const totalSupply = toBigInt13(shares);
48796
50525
  if (totalAssets === void 0 || totalSupply === void 0) return void 0;
48797
50526
  const exchangeRate = totalSupply > 0n ? totalAssets * ONE_E187 / totalSupply : ONE_E187;
48798
50527
  return { totalAssets, totalSupply, exchangeRate };
@@ -49313,7 +51042,7 @@ var fetchLstShareTokens = async (chainId, multicallRetry, prices = {}, tokenList
49313
51042
  const validatorsByAddress = new Map(validatorEntries);
49314
51043
  const idleByAddress = /* @__PURE__ */ new Map();
49315
51044
  idleEntries.forEach((e, i) => {
49316
- const bal = toBigInt12(idleResults[i]);
51045
+ const bal = toBigInt13(idleResults[i]);
49317
51046
  if (bal !== void 0) idleByAddress.set(e.address.toLowerCase(), bal);
49318
51047
  });
49319
51048
  const rawResults = new Array(allCalls.length);
@@ -49328,9 +51057,9 @@ var fetchLstShareTokens = async (chainId, multicallRetry, prices = {}, tokenList
49328
51057
  for (let i = 0; i < entries.length; i++) {
49329
51058
  const entry = entries[i];
49330
51059
  const reader = readers[i];
49331
- const slice = rawResults.slice(cursor, cursor + reader.calls.length);
51060
+ const slice2 = rawResults.slice(cursor, cursor + reader.calls.length);
49332
51061
  cursor += reader.calls.length;
49333
- const state = reader.parse(slice);
51062
+ const state = reader.parse(slice2);
49334
51063
  if (!state) continue;
49335
51064
  const addressLc = entry.address.toLowerCase();
49336
51065
  const underlyingLc = entry.underlying.toLowerCase();
@@ -49443,7 +51172,7 @@ var BeetsStSWithdrawalAbi = [
49443
51172
  ];
49444
51173
 
49445
51174
  // src/vaults/lst/withdrawals/readers/shared.ts
49446
- var toBigInt13 = (v) => {
51175
+ var toBigInt14 = (v) => {
49447
51176
  if (v === void 0 || v === null) return void 0;
49448
51177
  if (typeof v === "bigint") return v;
49449
51178
  if (typeof v === "number") return BigInt(v);
@@ -49458,7 +51187,7 @@ var toBigInt13 = (v) => {
49458
51187
  return void 0;
49459
51188
  };
49460
51189
  var toNumber = (v) => {
49461
- const b = toBigInt13(v);
51190
+ const b = toBigInt14(v);
49462
51191
  if (b === void 0) return void 0;
49463
51192
  if (b > BigInt(Number.MAX_SAFE_INTEGER)) return void 0;
49464
51193
  return Number(b);
@@ -49495,7 +51224,7 @@ var readerBeets = {
49495
51224
  const out = [];
49496
51225
  for (let i = 0; i < reqs.length; i++) {
49497
51226
  const r = reqs[i];
49498
- const amount = toBigInt13(r.assetAmount);
51227
+ const amount = toBigInt14(r.assetAmount);
49499
51228
  const ts = toNumber(r.requestTimestamp);
49500
51229
  const isWithdrawn = Boolean(r.isWithdrawn);
49501
51230
  if (amount === void 0 || ts === void 0) continue;
@@ -49587,13 +51316,13 @@ var readerBeHype = {
49587
51316
  const q = stage2[i * 2];
49588
51317
  const canClaim = Boolean(stage2[i * 2 + 1]);
49589
51318
  if (!q) continue;
49590
- const hypeAmount = Array.isArray(q) ? toBigInt13(q[2]) : toBigInt13(q.hypeAmount);
51319
+ const hypeAmount = Array.isArray(q) ? toBigInt14(q[2]) : toBigInt14(q.hypeAmount);
49591
51320
  if (hypeAmount === void 0) continue;
49592
51321
  out.push({
49593
51322
  lst: entry.lst,
49594
51323
  brand: entry.brand,
49595
51324
  symbol: entry.symbol,
49596
- requestId: String(toBigInt13(ids[i]) ?? i),
51325
+ requestId: String(toBigInt14(ids[i]) ?? i),
49597
51326
  amountUnderlying: hypeAmount.toString(),
49598
51327
  status: canClaim ? "claimable" : "pending"
49599
51328
  });
@@ -49696,7 +51425,7 @@ var readerBenqi = {
49696
51425
  for (let i = 0; i < reqs.length; i++) {
49697
51426
  const r = reqs[i];
49698
51427
  const startedAt = toNumber(r.startedAt);
49699
- const shareAmount = toBigInt13(r.shareAmount);
51428
+ const shareAmount = toBigInt14(r.shareAmount);
49700
51429
  if (startedAt === void 0 || shareAmount === void 0) continue;
49701
51430
  const readyAt = startedAt + cooldown;
49702
51431
  const expiresAt = readyAt + claimWindow;
@@ -49759,8 +51488,8 @@ var readerBeraPaw = {
49759
51488
  }
49760
51489
  const pos = res[0];
49761
51490
  if (!pos) return [];
49762
- const queued = Array.isArray(pos) ? toBigInt13(pos[0]) : toBigInt13(pos.queued);
49763
- const available = Array.isArray(pos) ? toBigInt13(pos[1]) : toBigInt13(pos.available);
51491
+ const queued = Array.isArray(pos) ? toBigInt14(pos[0]) : toBigInt14(pos.queued);
51492
+ const available = Array.isArray(pos) ? toBigInt14(pos[1]) : toBigInt14(pos.available);
49764
51493
  const out = [];
49765
51494
  if (available !== void 0 && available > 0n) {
49766
51495
  out.push({
@@ -49842,7 +51571,7 @@ var readerIbera = {
49842
51571
  return [];
49843
51572
  }
49844
51573
  const length = toNumber(stage1[0]) ?? 0;
49845
- const frontier = toBigInt13(stage1[1]) ?? 0n;
51574
+ const frontier = toBigInt14(stage1[1]) ?? 0n;
49846
51575
  if (length === 0) return [];
49847
51576
  const start = length > MAX_SCAN ? length - MAX_SCAN : 0;
49848
51577
  const ids = Array.from({ length: length - start }, (_3, k) => start + k);
@@ -49866,7 +51595,7 @@ var readerIbera = {
49866
51595
  const r = stage2[k];
49867
51596
  if (!r) continue;
49868
51597
  const receiver = Array.isArray(r) ? r[2] : r.receiver;
49869
- const amount = Array.isArray(r) ? toBigInt13(r[3]) : toBigInt13(r.amount);
51598
+ const amount = Array.isArray(r) ? toBigInt14(r[3]) : toBigInt14(r.amount);
49870
51599
  if (typeof receiver !== "string" || receiver.toLowerCase() !== target || amount === void 0 || amount === 0n) {
49871
51600
  continue;
49872
51601
  }
@@ -49939,7 +51668,7 @@ var readerPrimeStaking = {
49939
51668
  return [];
49940
51669
  }
49941
51670
  const length = toNumber(stage1[0]) ?? 0;
49942
- const frontier = toBigInt13(stage1[1]) ?? 0n;
51671
+ const frontier = toBigInt14(stage1[1]) ?? 0n;
49943
51672
  if (length === 0) return [];
49944
51673
  const start = length > MAX_SCAN2 ? length - MAX_SCAN2 : 0;
49945
51674
  const ids = Array.from({ length: length - start }, (_3, k) => start + k);
@@ -49963,7 +51692,7 @@ var readerPrimeStaking = {
49963
51692
  const r = stage2[k];
49964
51693
  if (!r) continue;
49965
51694
  const receiver = Array.isArray(r) ? r[1] : r.receiver;
49966
- const assets = Array.isArray(r) ? toBigInt13(r[3]) : toBigInt13(r.assets);
51695
+ const assets = Array.isArray(r) ? toBigInt14(r[3]) : toBigInt14(r.assets);
49967
51696
  const processed = Array.isArray(r) ? r[4] : r.processed;
49968
51697
  if (typeof receiver !== "string" || receiver.toLowerCase() !== target || assets === void 0 || assets === 0n) {
49969
51698
  continue;
@@ -50033,8 +51762,8 @@ var readerErc7540 = {
50033
51762
  ],
50034
51763
  abi: [Erc7540Abi, Erc7540Abi]
50035
51764
  });
50036
- const pending = toBigInt13(stage1[0]) ?? 0n;
50037
- const claimable = toBigInt13(stage1[1]) ?? 0n;
51765
+ const pending = toBigInt14(stage1[0]) ?? 0n;
51766
+ const claimable = toBigInt14(stage1[1]) ?? 0n;
50038
51767
  const out = [];
50039
51768
  if (claimable > 0n) {
50040
51769
  const stage2 = await multicallRetry({
@@ -50048,7 +51777,7 @@ var readerErc7540 = {
50048
51777
  ],
50049
51778
  abi: [Erc7540Abi]
50050
51779
  });
50051
- const amount = toBigInt13(stage2[0]) ?? claimable;
51780
+ const amount = toBigInt14(stage2[0]) ?? claimable;
50052
51781
  out.push({
50053
51782
  lst: entry.lst,
50054
51783
  brand: entry.brand,
@@ -50102,11 +51831,11 @@ var readerEthenaCooldown = {
50102
51831
  let cooldownEnd;
50103
51832
  let amount;
50104
51833
  if (Array.isArray(cell)) {
50105
- cooldownEnd = toBigInt13(cell[0]);
50106
- amount = toBigInt13(cell[1]);
51834
+ cooldownEnd = toBigInt14(cell[0]);
51835
+ amount = toBigInt14(cell[1]);
50107
51836
  } else if (cell && typeof cell === "object") {
50108
- cooldownEnd = toBigInt13(cell.cooldownEnd);
50109
- amount = toBigInt13(cell.underlyingAmount);
51837
+ cooldownEnd = toBigInt14(cell.cooldownEnd);
51838
+ amount = toBigInt14(cell.underlyingAmount);
50110
51839
  }
50111
51840
  if (!amount || amount === 0n) return [];
50112
51841
  const readyAt = Number(cooldownEnd ?? 0n);
@@ -50201,7 +51930,7 @@ var readerEtherFi = {
50201
51930
  calls: enumCalls,
50202
51931
  abi: enumCalls.map(() => EtherFiWithdrawRequestAbi)
50203
51932
  });
50204
- const ids = stage2.map(toBigInt13).filter((v) => v !== void 0);
51933
+ const ids = stage2.map(toBigInt14).filter((v) => v !== void 0);
50205
51934
  if (ids.length === 0) return [];
50206
51935
  const detailCalls = ids.flatMap((id) => [
50207
51936
  { address: entry.withdrawalContract, name: "getRequest", params: [id] },
@@ -50221,7 +51950,7 @@ var readerEtherFi = {
50221
51950
  const isValid = Boolean(stage3[i * 3 + 2]);
50222
51951
  if (!req) continue;
50223
51952
  if (!isValid) continue;
50224
- const amount = toBigInt13(req.amountOfEEth);
51953
+ const amount = toBigInt14(req.amountOfEEth);
50225
51954
  if (amount === void 0) continue;
50226
51955
  out.push({
50227
51956
  lst: entry.lst,
@@ -50316,7 +52045,7 @@ var readerKelp = {
50316
52045
  }
50317
52046
  ],
50318
52047
  abi: [KelpWithdrawalManagerAbi]
50319
- }).then((res) => toBigInt13(res[0]) ?? 0n)
52048
+ }).then((res) => toBigInt14(res[0]) ?? 0n)
50320
52049
  ]);
50321
52050
  lengths = storageReads;
50322
52051
  currentBlock = block;
@@ -50346,9 +52075,9 @@ var readerKelp = {
50346
52075
  for (let i = 0; i < detailCalls.length; i++) {
50347
52076
  const r = stage2[i];
50348
52077
  if (!r) continue;
50349
- const expected = Array.isArray(r) ? toBigInt13(r[1]) : toBigInt13(r.expectedAssetAmount);
50350
- const startBlock = Array.isArray(r) ? toBigInt13(r[2]) : toBigInt13(r.withdrawalStartBlock);
50351
- const nonce = Array.isArray(r) ? toBigInt13(r[3]) : toBigInt13(r.userNonce);
52078
+ const expected = Array.isArray(r) ? toBigInt14(r[1]) : toBigInt14(r.expectedAssetAmount);
52079
+ const startBlock = Array.isArray(r) ? toBigInt14(r[2]) : toBigInt14(r.withdrawalStartBlock);
52080
+ const nonce = Array.isArray(r) ? toBigInt14(r[3]) : toBigInt14(r.userNonce);
50352
52081
  if (expected === void 0 || startBlock === void 0) continue;
50353
52082
  const claimable = currentBlock >= startBlock + delayBlocks;
50354
52083
  out.push({
@@ -50425,7 +52154,7 @@ var readerLido = {
50425
52154
  abi: [LidoWithdrawalQueueAbi, LidoWithdrawalQueueAbi]
50426
52155
  });
50427
52156
  const ids = stage1[0];
50428
- const frontier = toBigInt13(stage1[1]) ?? 0n;
52157
+ const frontier = toBigInt14(stage1[1]) ?? 0n;
50429
52158
  if (!Array.isArray(ids) || ids.length === 0) return [];
50430
52159
  const stage2 = await multicallRetry({
50431
52160
  chain: chainId,
@@ -50442,10 +52171,10 @@ var readerLido = {
50442
52171
  if (!Array.isArray(statuses)) return [];
50443
52172
  const out = [];
50444
52173
  for (let i = 0; i < ids.length; i++) {
50445
- const id = toBigInt13(ids[i]);
52174
+ const id = toBigInt14(ids[i]);
50446
52175
  const s = statuses[i];
50447
52176
  if (id === void 0 || !s) continue;
50448
- const amountOfStETH = toBigInt13(s.amountOfStETH);
52177
+ const amountOfStETH = toBigInt14(s.amountOfStETH);
50449
52178
  const isFinalized = Boolean(s.isFinalized);
50450
52179
  const isClaimed = Boolean(s.isClaimed);
50451
52180
  if (amountOfStETH === void 0) continue;
@@ -50554,11 +52283,11 @@ var readerLista = {
50554
52283
  const status = stage2[i];
50555
52284
  if (!status) continue;
50556
52285
  const isClaimable = Array.isArray(status) ? Boolean(status[0]) : Boolean(status._isClaimable);
50557
- const bnbAmount = Array.isArray(status) ? toBigInt13(status[1]) : toBigInt13(status._amount);
50558
- const snbnbAmount = Array.isArray(req) ? toBigInt13(req[1]) : toBigInt13(req?.amountInSnBnb);
52286
+ const bnbAmount = Array.isArray(status) ? toBigInt14(status[1]) : toBigInt14(status._amount);
52287
+ const snbnbAmount = Array.isArray(req) ? toBigInt14(req[1]) : toBigInt14(req?.amountInSnBnb);
50559
52288
  const amount = bnbAmount ?? snbnbAmount;
50560
52289
  if (amount === void 0) continue;
50561
- const uuid = Array.isArray(req) ? toBigInt13(req[0]) : toBigInt13(req?.uuid);
52290
+ const uuid = Array.isArray(req) ? toBigInt14(req[0]) : toBigInt14(req?.uuid);
50562
52291
  out.push({
50563
52292
  lst: entry.lst,
50564
52293
  brand: entry.brand,
@@ -50643,7 +52372,7 @@ var readerRenzo = {
50643
52372
  for (let i = 0; i < count; i++) {
50644
52373
  const tup = stage2[i];
50645
52374
  if (!Array.isArray(tup) || tup.length < 5) continue;
50646
- const amountToRedeem = toBigInt13(tup[2]);
52375
+ const amountToRedeem = toBigInt14(tup[2]);
50647
52376
  const createdAt = toNumber(tup[4]);
50648
52377
  if (amountToRedeem === void 0 || createdAt === void 0) continue;
50649
52378
  const readyAt = createdAt + cooldown;
@@ -50716,9 +52445,9 @@ var readerStaderEthx2 = {
50716
52445
  ]
50717
52446
  });
50718
52447
  const ids = stage1[0];
50719
- const frontier = toBigInt13(stage1[1]) ?? 0n;
52448
+ const frontier = toBigInt14(stage1[1]) ?? 0n;
50720
52449
  if (!Array.isArray(ids) || ids.length === 0) return [];
50721
- const idBigInts = ids.map(toBigInt13).filter((v) => v !== void 0);
52450
+ const idBigInts = ids.map(toBigInt14).filter((v) => v !== void 0);
50722
52451
  const detailCalls = idBigInts.map((id) => ({
50723
52452
  address: entry.withdrawalContract,
50724
52453
  name: "userWithdrawRequests",
@@ -50734,8 +52463,8 @@ var readerStaderEthx2 = {
50734
52463
  const id = idBigInts[i];
50735
52464
  const tup = stage2[i];
50736
52465
  if (!Array.isArray(tup) || tup.length < 5) continue;
50737
- const ethExpected = toBigInt13(tup[2]) ?? 0n;
50738
- const ethFinalized = toBigInt13(tup[3]) ?? 0n;
52466
+ const ethExpected = toBigInt14(tup[2]) ?? 0n;
52467
+ const ethFinalized = toBigInt14(tup[3]) ?? 0n;
50739
52468
  const isFinalized = id < frontier && ethFinalized > 0n;
50740
52469
  const queuePosition = isFinalized ? 0 : Number(id - frontier);
50741
52470
  out.push({
@@ -50814,13 +52543,13 @@ var readerStaderMaticX2 = {
50814
52543
  });
50815
52544
  const arr = stage1[0];
50816
52545
  if (!Array.isArray(arr)) return [];
50817
- const currentEpoch = stakeManager ? toBigInt13(stage1[1]) ?? 0n : 0n;
50818
- const delay = stakeManager ? toBigInt13(stage1[2]) ?? 0n : 0n;
52546
+ const currentEpoch = stakeManager ? toBigInt14(stage1[1]) ?? 0n : 0n;
52547
+ const delay = stakeManager ? toBigInt14(stage1[2]) ?? 0n : 0n;
50819
52548
  const out = [];
50820
52549
  for (let i = 0; i < arr.length; i++) {
50821
52550
  const r = arr[i];
50822
- const amount = toBigInt13(r.amount) ?? 0n;
50823
- const requestEpoch = toBigInt13(r.requestEpoch);
52551
+ const amount = toBigInt14(r.amount) ?? 0n;
52552
+ const requestEpoch = toBigInt14(r.requestEpoch);
50824
52553
  if (requestEpoch === void 0) continue;
50825
52554
  const ready = stakeManager ? currentEpoch >= requestEpoch + delay : false;
50826
52555
  out.push({
@@ -50907,9 +52636,9 @@ var readerMantle = {
50907
52636
  if (typeof requester === "string" && requester.toLowerCase() !== lcUser) {
50908
52637
  continue;
50909
52638
  }
50910
- const ethRequested = Array.isArray(detail) ? toBigInt13(detail[3]) : toBigInt13(detail.ethRequested);
52639
+ const ethRequested = Array.isArray(detail) ? toBigInt14(detail[3]) : toBigInt14(detail.ethRequested);
50911
52640
  const isFinalized = Array.isArray(info) ? Boolean(info[0]) : Boolean(info.isFinalized);
50912
- const claimable = Array.isArray(info) ? toBigInt13(info[1]) : toBigInt13(info.claimableAmount);
52641
+ const claimable = Array.isArray(info) ? toBigInt14(info[1]) : toBigInt14(info.claimableAmount);
50913
52642
  if (ethRequested === void 0) continue;
50914
52643
  out.push({
50915
52644
  lst: entry.lst,
@@ -50988,8 +52717,8 @@ var readerPuffer = {
50988
52717
  calls,
50989
52718
  abi: calls.map(() => PufferWithdrawalManagerAbi)
50990
52719
  });
50991
- const finalizedBatch = toBigInt13(results[detailCalls.length]) ?? 0n;
50992
- const batchSize = toBigInt13(results[detailCalls.length + 1]) ?? 0n;
52720
+ const finalizedBatch = toBigInt14(results[detailCalls.length]) ?? 0n;
52721
+ const batchSize = toBigInt14(results[detailCalls.length + 1]) ?? 0n;
50993
52722
  const out = [];
50994
52723
  const lcUser = user.toLowerCase();
50995
52724
  for (let i = 0; i < ids.length; i++) {
@@ -50999,7 +52728,7 @@ var readerPuffer = {
50999
52728
  if (typeof recipient === "string" && recipient.toLowerCase() !== lcUser) {
51000
52729
  continue;
51001
52730
  }
51002
- const pufETHAmount = Array.isArray(d) ? toBigInt13(d[0]) : toBigInt13(d.pufETHAmount);
52731
+ const pufETHAmount = Array.isArray(d) ? toBigInt14(d[0]) : toBigInt14(d.pufETHAmount);
51003
52732
  if (pufETHAmount === void 0) continue;
51004
52733
  const batchIdx = batchSize > 0n ? ids[i] / batchSize : 0n;
51005
52734
  const claimable = batchIdx <= finalizedBatch;
@@ -51097,7 +52826,7 @@ var readerKinetiq = {
51097
52826
  for (let i = 0; i < count; i++) {
51098
52827
  const r = stage2[i];
51099
52828
  if (!r) continue;
51100
- const hypeAmount = Array.isArray(r) ? toBigInt13(r[0]) : toBigInt13(r.hypeAmount);
52829
+ const hypeAmount = Array.isArray(r) ? toBigInt14(r[0]) : toBigInt14(r.hypeAmount);
51101
52830
  const timestamp = Array.isArray(r) ? toNumber(r[4]) : toNumber(r.timestamp);
51102
52831
  if (hypeAmount === void 0 || hypeAmount === 0n || timestamp === void 0) {
51103
52832
  continue;
@@ -51225,7 +52954,7 @@ var readerStakeWise = {
51225
52954
  const claimedByIdx = /* @__PURE__ */ new Map();
51226
52955
  for (let i = 0; i < onChainChecks.length; i++) {
51227
52956
  const cell = checkResults[i];
51228
- const claimed = Array.isArray(cell) ? toBigInt13(cell[2]) : toBigInt13(cell?.claimedAssets);
52957
+ const claimed = Array.isArray(cell) ? toBigInt14(cell[2]) : toBigInt14(cell?.claimedAssets);
51229
52958
  if (claimed !== void 0 && claimed > 0n) {
51230
52959
  claimedByIdx.set(onChainChecks[i].idx, claimed);
51231
52960
  }
@@ -51233,7 +52962,7 @@ var readerStakeWise = {
51233
52962
  const out = [];
51234
52963
  for (let i = 0; i < requests.length; i++) {
51235
52964
  const r = requests[i];
51236
- const amount = toBigInt13(r.totalAssets) ?? 0n;
52965
+ const amount = toBigInt14(r.totalAssets) ?? 0n;
51237
52966
  const onChainClaimed = claimedByIdx.get(i);
51238
52967
  const claimable = onChainClaimed !== void 0 || r.isClaimable;
51239
52968
  out.push({
@@ -51290,7 +53019,7 @@ var readerStCelo2 = {
51290
53019
  const timestamps = cell[1] ?? [];
51291
53020
  const out = [];
51292
53021
  for (let i = 0; i < values.length; i++) {
51293
- const amount = toBigInt13(values[i]);
53022
+ const amount = toBigInt14(values[i]);
51294
53023
  const readyAt = toNumber(timestamps[i]);
51295
53024
  if (amount === void 0 || readyAt === void 0) continue;
51296
53025
  out.push({
@@ -51335,11 +53064,11 @@ var readerStellaUnbond = {
51335
53064
  let waiting;
51336
53065
  let unbonded;
51337
53066
  if (Array.isArray(cell)) {
51338
- waiting = toBigInt13(cell[0]);
51339
- unbonded = toBigInt13(cell[1]);
53067
+ waiting = toBigInt14(cell[0]);
53068
+ unbonded = toBigInt14(cell[1]);
51340
53069
  } else if (cell && typeof cell === "object") {
51341
- waiting = toBigInt13(cell.waiting);
51342
- unbonded = toBigInt13(cell.unbonded);
53070
+ waiting = toBigInt14(cell.waiting);
53071
+ unbonded = toBigInt14(cell.unbonded);
51343
53072
  }
51344
53073
  const out = [];
51345
53074
  if (unbonded && unbonded > 0n) {
@@ -51429,7 +53158,7 @@ var readerSwell = {
51429
53158
  abi: [SwellRswExitAbi, SwellRswExitAbi]
51430
53159
  });
51431
53160
  const count = toNumber(stage1[0]) ?? 0;
51432
- const lastProcessed = toBigInt13(stage1[1]) ?? 0n;
53161
+ const lastProcessed = toBigInt14(stage1[1]) ?? 0n;
51433
53162
  if (count === 0) return [];
51434
53163
  const enumCalls = Array.from({ length: count }, (_3, i) => ({
51435
53164
  address: entry.withdrawalContract,
@@ -51441,7 +53170,7 @@ var readerSwell = {
51441
53170
  calls: enumCalls,
51442
53171
  abi: enumCalls.map(() => SwellRswExitAbi)
51443
53172
  });
51444
- const ids = stage2.map(toBigInt13).filter((v) => v !== void 0);
53173
+ const ids = stage2.map(toBigInt14).filter((v) => v !== void 0);
51445
53174
  if (ids.length === 0) return [];
51446
53175
  const detailCalls = ids.map((id) => ({
51447
53176
  address: entry.withdrawalContract,
@@ -51458,7 +53187,7 @@ var readerSwell = {
51458
53187
  const id = ids[i];
51459
53188
  const r = stage3[i];
51460
53189
  if (!r) continue;
51461
- const amount = toBigInt13(r.amount);
53190
+ const amount = toBigInt14(r.amount);
51462
53191
  if (amount === void 0) continue;
51463
53192
  const claimable = id <= lastProcessed;
51464
53193
  out.push({
@@ -51532,14 +53261,14 @@ var readerValantis = {
51532
53261
  for (let i = 0; i < burns.length; i++) {
51533
53262
  const b = burns[i];
51534
53263
  if (!b) continue;
51535
- const amount = Array.isArray(b) ? toBigInt13(b[0]) : toBigInt13(b.amount);
53264
+ const amount = Array.isArray(b) ? toBigInt14(b[0]) : toBigInt14(b.amount);
51536
53265
  const completed = Array.isArray(b) ? Boolean(b[2]) : Boolean(b.completed);
51537
53266
  if (amount === void 0 || completed) continue;
51538
53267
  out.push({
51539
53268
  lst: entry.lst,
51540
53269
  brand: entry.brand,
51541
53270
  symbol: entry.symbol,
51542
- requestId: String(toBigInt13(ids[i]) ?? i),
53271
+ requestId: String(toBigInt14(ids[i]) ?? i),
51543
53272
  amountUnderlying: amount.toString(),
51544
53273
  status: redeemable[i] ? "claimable" : "pending"
51545
53274
  });
@@ -51612,7 +53341,7 @@ var readerTruFin = {
51612
53341
  if (typeof recipient === "string" && recipient.toLowerCase() !== lcUser) {
51613
53342
  continue;
51614
53343
  }
51615
- const amount = Array.isArray(w) ? toBigInt13(w[1]) : toBigInt13(w.amount);
53344
+ const amount = Array.isArray(w) ? toBigInt14(w[1]) : toBigInt14(w.amount);
51616
53345
  if (amount === void 0 || amount === 0n) continue;
51617
53346
  out.push({
51618
53347
  lst: entry.lst,
@@ -51708,7 +53437,7 @@ var readerYieldNest = {
51708
53437
  calls: enumCalls,
51709
53438
  abi: enumCalls.map(() => YieldNestWithdrawalQueueAbi)
51710
53439
  });
51711
- const ids = stage2.map(toBigInt13).filter((v) => v !== void 0);
53440
+ const ids = stage2.map(toBigInt14).filter((v) => v !== void 0);
51712
53441
  if (ids.length === 0) return [];
51713
53442
  const detailCalls = ids.map((id) => ({
51714
53443
  address: entry.withdrawalContract,
@@ -51727,7 +53456,7 @@ var readerYieldNest = {
51727
53456
  const id = ids[i];
51728
53457
  const r = stage3[i];
51729
53458
  if (!r) continue;
51730
- const amount = toBigInt13(r.amount);
53459
+ const amount = toBigInt14(r.amount);
51731
53460
  const created = toNumber(r.creationTimestamp);
51732
53461
  const processed = Boolean(r.processed);
51733
53462
  if (amount === void 0 || created === void 0) continue;
@@ -52320,7 +54049,7 @@ var getLstWithdrawalRegistry = (chainId, extraEntries) => {
52320
54049
  const extra = extraEntries.filter((e) => !seen.has(e.lst.toLowerCase()));
52321
54050
  return extra.length === 0 ? base : [...base, ...extra];
52322
54051
  };
52323
- var warn5 = (...args) => {
54052
+ var warn7 = (...args) => {
52324
54053
  };
52325
54054
  var getLstWithdrawalRequests = async (user, chainId, multicallRetry, options) => {
52326
54055
  const entries = getLstWithdrawalRegistry(chainId, options?.extraEntries);
@@ -52335,7 +54064,7 @@ var getLstWithdrawalRequests = async (user, chainId, multicallRetry, options) =>
52335
54064
  try {
52336
54065
  return await reader.fetch(lcUser, multicallRetry, chainId, entry, ids);
52337
54066
  } catch (e) {
52338
- warn5(
54067
+ warn7(
52339
54068
  `[lst-withdrawals] ${entry.brand} ${entry.symbol} (${entry.lst}) failed:`,
52340
54069
  e?.message ?? e
52341
54070
  );
@@ -52404,7 +54133,7 @@ var NavOracleReadAbi = [
52404
54133
 
52405
54134
  // src/vaults/savings/readers/shared.ts
52406
54135
  var ONE_E189 = 10n ** 18n;
52407
- var toBigInt14 = (v) => {
54136
+ var toBigInt15 = (v) => {
52408
54137
  if (v === void 0 || v === null) return void 0;
52409
54138
  if (typeof v === "bigint") return v;
52410
54139
  if (typeof v === "number") return BigInt(v);
@@ -52435,9 +54164,9 @@ var readerErc46262 = (entry) => {
52435
54164
  ],
52436
54165
  abis: [Erc4626ReadAbi2, TotalSupplyAbi2, Erc4626ReadAbi2],
52437
54166
  parse: ([assets, supply, rate]) => {
52438
- const totalAssets = toBigInt14(assets);
52439
- const totalSupply = toBigInt14(supply);
52440
- const convertToAssetsRaw = toBigInt14(rate);
54167
+ const totalAssets = toBigInt15(assets);
54168
+ const totalSupply = toBigInt15(supply);
54169
+ const convertToAssetsRaw = toBigInt15(rate);
52441
54170
  if (totalAssets === void 0 || totalSupply === void 0 || convertToAssetsRaw === void 0) {
52442
54171
  return void 0;
52443
54172
  }
@@ -52531,13 +54260,13 @@ var readerErc4626Idle = (entry) => {
52531
54260
  ],
52532
54261
  abis: [Erc4626ReadAbi2, TotalSupplyAbi2, Erc4626ReadAbi2, BalanceOfAbi],
52533
54262
  parse: ([assets, supply, rate, inventoryBalance]) => {
52534
- const totalAssets = toBigInt14(assets);
52535
- const totalSupply = toBigInt14(supply);
52536
- const convertToAssetsRaw = toBigInt14(rate);
54263
+ const totalAssets = toBigInt15(assets);
54264
+ const totalSupply = toBigInt15(supply);
54265
+ const convertToAssetsRaw = toBigInt15(rate);
52537
54266
  if (totalAssets === void 0 || totalSupply === void 0 || convertToAssetsRaw === void 0) {
52538
54267
  return void 0;
52539
54268
  }
52540
- const capacity = toBigInt14(inventoryBalance);
54269
+ const capacity = toBigInt15(inventoryBalance);
52541
54270
  return {
52542
54271
  totalAssets,
52543
54272
  totalSupply,
@@ -52568,10 +54297,10 @@ var readerNavOracle = (entry) => {
52568
54297
  ],
52569
54298
  abis: [TotalSupplyAbi2, NavOracleReadAbi],
52570
54299
  parse: ([supply, round]) => {
52571
- const totalSupply = toBigInt14(supply);
54300
+ const totalSupply = toBigInt15(supply);
52572
54301
  if (totalSupply === void 0) return void 0;
52573
54302
  const raw = Array.isArray(round) ? round[1] : round?.answer;
52574
- const exchangeRate = toBigInt14(raw);
54303
+ const exchangeRate = toBigInt15(raw);
52575
54304
  if (exchangeRate === void 0 || exchangeRate <= 0n) return void 0;
52576
54305
  return {
52577
54306
  totalAssets: totalSupply * exchangeRate * underlyingUnit / (ONE_E189 * shareUnit),
@@ -52613,14 +54342,14 @@ var readerNativeWnlp = (entry) => {
52613
54342
  NativeWithdrawQueueReadAbi
52614
54343
  ],
52615
54344
  parse: ([supply, rate, feeBips, instantEnabled, inventory, window]) => {
52616
- const totalSupply = toBigInt14(supply);
52617
- const exchangeRate = toBigInt14(rate);
54345
+ const totalSupply = toBigInt15(supply);
54346
+ const exchangeRate = toBigInt15(rate);
52618
54347
  if (totalSupply === void 0 || exchangeRate === void 0) {
52619
54348
  return void 0;
52620
54349
  }
52621
- const capacity = toBigInt14(inventory);
52622
- const windowSeconds = toBigInt14(window);
52623
- const bips = toBigInt14(feeBips);
54350
+ const capacity = toBigInt15(inventory);
54351
+ const windowSeconds = toBigInt15(window);
54352
+ const bips = toBigInt15(feeBips);
52624
54353
  return {
52625
54354
  totalAssets: totalSupply * exchangeRate / ONE_E189,
52626
54355
  totalSupply,
@@ -52678,9 +54407,9 @@ var fetchSavingsVaults = async (chainId, multicallRetry, prices = {}, tokenList
52678
54407
  for (let i = 0; i < entries.length; i++) {
52679
54408
  const entry = entries[i];
52680
54409
  const reader = readers[i];
52681
- const slice = rawResults.slice(cursor, cursor + reader.calls.length);
54410
+ const slice2 = rawResults.slice(cursor, cursor + reader.calls.length);
52682
54411
  cursor += reader.calls.length;
52683
- const state = reader.parse(slice);
54412
+ const state = reader.parse(slice2);
52684
54413
  if (!state) continue;
52685
54414
  const addressLc = entry.address.toLowerCase();
52686
54415
  const underlyingLc = entry.underlying.toLowerCase();
@@ -52884,7 +54613,7 @@ var pickApr = (apr) => {
52884
54613
  if (apr.inception != null) return { rate: apr.inception, window: "inception" };
52885
54614
  return { rate: 0, window: "none" };
52886
54615
  };
52887
- var num = (v) => typeof v === "number" && Number.isFinite(v) ? v : null;
54616
+ var num4 = (v) => typeof v === "number" && Number.isFinite(v) ? v : null;
52888
54617
  function parseVault7(v, chainId, prices, tokenList) {
52889
54618
  const address = (v?.address ?? "").toLowerCase();
52890
54619
  const assetAddr = (v?.asset?.address ?? "").toLowerCase();
@@ -52900,14 +54629,14 @@ function parseVault7(v, chainId, prices, tokenList) {
52900
54629
  parseRawAmount(totalAssetsRaw, assetDecimals)
52901
54630
  );
52902
54631
  const apr = {
52903
- weekly: num(state.weeklyApr?.twrrNetApr),
52904
- monthly: num(state.monthlyApr?.twrrNetApr),
52905
- yearly: num(state.yearlyApr?.twrrNetApr),
52906
- inception: num(state.inceptionApr?.twrrNetApr)
54632
+ weekly: num4(state.weeklyApr?.twrrNetApr),
54633
+ monthly: num4(state.monthlyApr?.twrrNetApr),
54634
+ yearly: num4(state.yearlyApr?.twrrNetApr),
54635
+ inception: num4(state.inceptionApr?.twrrNetApr)
52907
54636
  };
52908
54637
  const { rate: supplyRate, window: aprWindow } = pickApr(apr);
52909
54638
  const oracleKey = toOracleKey(assetMeta?.assetGroup) ?? toGenericPriceKey(assetAddr, chainId);
52910
- const apiTotalAssetsUsd = num(state.totalAssetsUsd) ?? 0;
54639
+ const apiTotalAssetsUsd = num4(state.totalAssetsUsd) ?? 0;
52911
54640
  const impliedPriceUsd = totalAssetsFormatted > 0 ? apiTotalAssetsUsd / totalAssetsFormatted : 0;
52912
54641
  const priceUsd = prices[oracleKey] ?? prices[assetAddr] ?? impliedPriceUsd;
52913
54642
  const totalAssetsUsd = apiTotalAssetsUsd || totalAssetsFormatted * priceUsd;
@@ -52927,7 +54656,7 @@ function parseVault7(v, chainId, prices, tokenList) {
52927
54656
  totalAssets: totalAssetsRaw,
52928
54657
  totalSupply: totalSupplyRaw,
52929
54658
  pricePerShare: state.pricePerShare?.toString() ?? "0",
52930
- pricePerShareUsd: num(state.pricePerShareUsd) ?? void 0,
54659
+ pricePerShareUsd: num4(state.pricePerShareUsd) ?? void 0,
52931
54660
  supplyRate,
52932
54661
  rewardsRate: 0,
52933
54662
  depositRate: supplyRate,
@@ -53039,9 +54768,9 @@ async function fetchAaveEarnApiVaults(chainId, targets) {
53039
54768
  const target = Number(chainId);
53040
54769
  const byAddress = /* @__PURE__ */ new Map();
53041
54770
  const keep = (it) => {
53042
- const addr = it?.address?.toLowerCase();
53043
- if (!addr || Number(it.chainId) !== target) return;
53044
- if (!byAddress.has(addr)) byAddress.set(addr, it);
54771
+ const addr2 = it?.address?.toLowerCase();
54772
+ if (!addr2 || Number(it.chainId) !== target) return;
54773
+ if (!byAddress.has(addr2)) byAddress.set(addr2, it);
53045
54774
  };
53046
54775
  for (const owner of targets.owners) {
53047
54776
  let cursor = null;
@@ -53110,7 +54839,7 @@ var resolveAaveEarnCuratorName = (chainId, owner) => {
53110
54839
 
53111
54840
  // src/vaults/aave-earn/fetchPublic.ts
53112
54841
  var BRAND2 = "Aave";
53113
- var toBigInt15 = (v) => {
54842
+ var toBigInt16 = (v) => {
53114
54843
  if (v === void 0 || v === null) return void 0;
53115
54844
  if (typeof v === "bigint") return v;
53116
54845
  if (typeof v === "number") return BigInt(v);
@@ -53124,7 +54853,7 @@ var toBigInt15 = (v) => {
53124
54853
  }
53125
54854
  return void 0;
53126
54855
  };
53127
- var num2 = (v) => {
54856
+ var num5 = (v) => {
53128
54857
  const n = Number(v);
53129
54858
  return Number.isFinite(n) ? n : 0;
53130
54859
  };
@@ -53165,28 +54894,28 @@ var fetchAaveEarnVaults = async (chainId, multicallRetry, prices = {}, tokenList
53165
54894
  for (let i = 0; i < usable.length; i++) {
53166
54895
  const v = usable[i];
53167
54896
  const base = i * CALLS_PER_VAULT2;
53168
- const slice = rawResults.slice(base, base + CALLS_PER_VAULT2);
54897
+ const slice2 = rawResults.slice(base, base + CALLS_PER_VAULT2);
53169
54898
  const addressLc = v.address.toLowerCase();
53170
54899
  const token = v.usedReserve.underlyingToken;
53171
54900
  const underlyingLc = token.address.toLowerCase();
53172
54901
  const assetDecimals = token.decimals;
53173
- const shareDecOnChain = toBigInt15(slice[1]);
54902
+ const shareDecOnChain = toBigInt16(slice2[1]);
53174
54903
  const decimals = shareDecOnChain !== void 0 ? Number(shareDecOnChain) : assetDecimals;
53175
- const totalSupply = toBigInt15(slice[2]);
54904
+ const totalSupply = toBigInt16(slice2[2]);
53176
54905
  if (totalSupply === void 0) continue;
53177
54906
  const shareUnit = 10n ** BigInt(decimals);
53178
54907
  const underlyingUnit = 10n ** BigInt(assetDecimals);
53179
- const convertToAssets = toBigInt15(slice[3]) ?? 0n;
54908
+ const convertToAssets = toBigInt16(slice2[3]) ?? 0n;
53180
54909
  const convertToShares = convertToAssets > 0n ? shareUnit * underlyingUnit / convertToAssets : 0n;
53181
- const totalAssets = toBigInt15(slice[0]) ?? totalSupply * convertToAssets / shareUnit;
54910
+ const totalAssets = toBigInt16(slice2[0]) ?? totalSupply * convertToAssets / shareUnit;
53182
54911
  const totalAssetsFormatted = Number(totalAssets) / 10 ** assetDecimals;
53183
54912
  const asset = tokenList[underlyingLc];
53184
- const priceUsd = prices[underlyingLc] ?? (v.balance?.usdPerToken != null ? num2(v.balance.usdPerToken) : void 0);
54913
+ const priceUsd = prices[underlyingLc] ?? (v.balance?.usdPerToken != null ? num5(v.balance.usdPerToken) : void 0);
53185
54914
  const totalAssetsUsd = priceUsd !== void 0 ? totalAssetsFormatted * priceUsd : 0;
53186
- const supplyRate = num2(v.vaultApr?.formatted);
54915
+ const supplyRate = num5(v.vaultApr?.formatted);
53187
54916
  const rewardsRate = 0;
53188
54917
  const depositRate = supplyRate + rewardsRate;
53189
- const fee = num2(v.fee?.value);
54918
+ const fee = num5(v.fee?.value);
53190
54919
  const symbol = (v.shareSymbol ?? "").trim();
53191
54920
  const shareName = (v.shareName ?? "").trim();
53192
54921
  const name = shareName || symbol;
@@ -53223,7 +54952,7 @@ var fetchAaveEarnVaults = async (chainId, multicallRetry, prices = {}, tokenList
53223
54952
  };
53224
54953
 
53225
54954
  // src/vaults/upshift/fetchPublic.ts
53226
- var num3 = (v) => typeof v === "number" && Number.isFinite(v) ? v : null;
54955
+ var num6 = (v) => typeof v === "number" && Number.isFinite(v) ? v : null;
53227
54956
  var isEvmAddress = (a) => /^0x[0-9a-fA-F]{40}$/.test(a);
53228
54957
  var derivePricePerShare = (totalAssetsRaw, totalSupplyRaw, shareDecimals) => {
53229
54958
  try {
@@ -53250,12 +54979,12 @@ function parseVault8(v, chainId, prices, tokenList) {
53250
54979
  const totalAssetsFormatted = Number(
53251
54980
  parseRawAmount(totalAssetsRaw, assetDecimals)
53252
54981
  );
53253
- const base = num3(v.apy?.apy) ?? 0;
53254
- const campaign = num3(v.apy?.campaignApy);
54982
+ const base = num6(v.apy?.apy) ?? 0;
54983
+ const campaign = num6(v.apy?.campaignApy);
53255
54984
  const supplyRate = apyToAprPercent(base);
53256
54985
  const rewardsRate = campaign != null ? apyToAprPercent(campaign) : 0;
53257
54986
  const oracleKey = toOracleKey(assetMeta?.assetGroup) ?? toGenericPriceKey(assetAddr, chainId);
53258
- const apiTvlUsd = num3(v.latest_reported_tvl) ?? 0;
54987
+ const apiTvlUsd = num6(v.latest_reported_tvl) ?? 0;
53259
54988
  const impliedPriceUsd = totalAssetsFormatted > 0 ? apiTvlUsd / totalAssetsFormatted : 0;
53260
54989
  const priceUsd = prices[oracleKey] ?? prices[assetAddr] ?? impliedPriceUsd;
53261
54990
  const totalAssetsUsd = apiTvlUsd || totalAssetsFormatted * priceUsd;
@@ -53280,10 +55009,10 @@ function parseVault8(v, chainId, prices, tokenList) {
53280
55009
  rewardsRate,
53281
55010
  depositRate: supplyRate + rewardsRate,
53282
55011
  apy: {
53283
- base: num3(v.apy?.apy),
55012
+ base: num6(v.apy?.apy),
53284
55013
  campaign,
53285
- points: num3(v.apy?.pointsApy),
53286
- underlying: num3(v.apy?.underlyingApy)
55014
+ points: num6(v.apy?.pointsApy),
55015
+ underlying: num6(v.apy?.underlyingApy)
53287
55016
  },
53288
55017
  isDepositPaused: v.isDepositPaused ?? false,
53289
55018
  isWithdrawalPaused: v.isWithdrawalPaused ?? false,
@@ -53392,9 +55121,9 @@ var asBig = (v) => {
53392
55121
  return null;
53393
55122
  }
53394
55123
  };
53395
- var num4 = (v) => typeof v === "number" && Number.isFinite(v) ? v : null;
55124
+ var num7 = (v) => typeof v === "number" && Number.isFinite(v) ? v : null;
53396
55125
  var toPct = (v) => {
53397
- const n = num4(v);
55126
+ const n = num7(v);
53398
55127
  return n == null ? 0 : n * 100;
53399
55128
  };
53400
55129
  var deriveTotalSupply = (totalAssetsRaw, pricePerShareRaw, decimals) => {
@@ -53426,16 +55155,16 @@ function parseVault9(v, chainId, prices, tokenList) {
53426
55155
  const totalAssetsFormatted = Number(
53427
55156
  parseRawAmount(totalAssetsRaw, assetDecimals)
53428
55157
  );
53429
- const realized = num4(v.apr?.netAPR);
53430
- const forward = num4(v.apr?.forwardAPR?.netAPR);
55158
+ const realized = num7(v.apr?.netAPR);
55159
+ const forward = num7(v.apr?.forwardAPR?.netAPR);
53431
55160
  const isForwardApr = realized == null && forward != null;
53432
55161
  const supplyRate = toPct(realized ?? forward);
53433
55162
  const rewardsRate = toPct(v.apr?.extra?.stakingRewardsAPR);
53434
55163
  const fee = toPct(v.apr?.fees?.performance);
53435
55164
  const oracleKey = toOracleKey(assetMeta?.assetGroup) ?? toGenericPriceKey(assetAddr, chainId);
53436
- const apiPrice = num4(v.tvl?.price) ?? 0;
55165
+ const apiPrice = num7(v.tvl?.price) ?? 0;
53437
55166
  const priceUsd = prices[oracleKey] ?? prices[assetAddr] ?? apiPrice;
53438
- const apiTvlUsd = num4(v.tvl?.tvl) ?? 0;
55167
+ const apiTvlUsd = num7(v.tvl?.tvl) ?? 0;
53439
55168
  const totalAssetsUsd = apiTvlUsd || totalAssetsFormatted * priceUsd;
53440
55169
  const name = (v.name ?? "").trim();
53441
55170
  const symbol = (v.symbol ?? "").trim();
@@ -53871,6 +55600,7 @@ var stampVaultClassification = (data, chainId, tokenList = {}) => {
53871
55600
  stampBag(data.lista, "lista");
53872
55601
  stampBag(data.silo, "silo");
53873
55602
  stampBag(data["euler-earn"], "euler-earn");
55603
+ stampBag(data.termmax, "termmax");
53874
55604
  stampBag(data.lst, "lst");
53875
55605
  stampBag(data.savings, "savings");
53876
55606
  stampBag(data.lagoon, "lagoon");
@@ -54422,23 +56152,23 @@ var priceGmMarkets = async (chainId, multicallRetry, markets, prices) => {
54422
56152
  const indexMax = price(prices, m.indexToken)?.max;
54423
56153
  if (Array.isArray(dsRes) && longMax != null && shortMax != null) {
54424
56154
  const base = i * SLOTS;
54425
- const big4 = (j) => typeof dsRes[base + j] === "bigint" ? dsRes[base + j] : 0n;
56155
+ const big7 = (j) => typeof dsRes[base + j] === "bigint" ? dsRes[base + j] : 0n;
54426
56156
  const cap = computeDepositCapacityUsd(
54427
- [info?.longTokenAmount, longMax, big4(0), big4(2)],
54428
- [info?.shortTokenAmount, shortMax, big4(1), big4(3)]
56157
+ [info?.longTokenAmount, longMax, big7(0), big7(2)],
56158
+ [info?.shortTokenAmount, shortMax, big7(1), big7(3)]
54429
56159
  );
54430
56160
  if (cap != null) value.depositCapacityUsd = cap;
54431
56161
  if (indexMax != null) {
54432
56162
  const divisor = m.longToken.toLowerCase() === m.shortToken.toLowerCase() ? 2n : 1n;
54433
- const reservedUsdLong = (big4(4) + big4(5)) / divisor * indexMax;
54434
- const reservedUsdShort = (big4(6) + big4(7)) / divisor;
56163
+ const reservedUsdLong = (big7(4) + big7(5)) / divisor * indexMax;
56164
+ const reservedUsdShort = (big7(6) + big7(7)) / divisor;
54435
56165
  const liq = computeLiquidityUsd(
54436
56166
  info?.longTokenUsd,
54437
56167
  info?.shortTokenUsd,
54438
56168
  reservedUsdLong,
54439
56169
  reservedUsdShort,
54440
- big4(8),
54441
- big4(9)
56170
+ big7(8),
56171
+ big7(9)
54442
56172
  );
54443
56173
  if (liq != null)
54444
56174
  value.liquidityUsd = Math.max(0, Math.min(liq, value.tvlUsd));
@@ -54637,27 +56367,27 @@ var fetchGmxExecutionFees = async (chainId, multicallRetry, gasPriceWei) => {
54637
56367
  } catch {
54638
56368
  return void 0;
54639
56369
  }
54640
- const big4 = (i) => typeof res[i] === "bigint" ? res[i] : 0n;
54641
- const base = big4(0);
54642
- const mult = big4(1);
56370
+ const big7 = (i) => typeof res[i] === "bigint" ? res[i] : 0n;
56371
+ const base = big7(0);
56372
+ const mult = big7(1);
54643
56373
  if (base === 0n && mult === 0n) return void 0;
54644
56374
  const PRECISION = 10n ** 30n;
54645
56375
  const adjusted = (opGas) => base + opGas * mult / PRECISION;
54646
56376
  const fee = (opGas) => (adjusted(opGas) * gasPriceWei).toString();
54647
- const glvExtra = big4(6) * GLV_NOMINAL_MARKET_COUNT;
56377
+ const glvExtra = big7(6) * GLV_NOMINAL_MARKET_COUNT;
54648
56378
  return {
54649
56379
  chainId,
54650
56380
  gasPriceWei: gasPriceWei.toString(),
54651
- deposit: fee(big4(2)),
54652
- withdrawal: fee(big4(3)),
54653
- glvDeposit: fee(big4(4) + glvExtra),
54654
- glvWithdrawal: fee(big4(5) + glvExtra)
56381
+ deposit: fee(big7(2)),
56382
+ withdrawal: fee(big7(3)),
56383
+ glvDeposit: fee(big7(4) + glvExtra),
56384
+ glvWithdrawal: fee(big7(5) + glvExtra)
54655
56385
  };
54656
56386
  };
54657
56387
 
54658
56388
  // src/vaults/gmx/fetchPublic.ts
54659
56389
  var GMX_TOKEN_DECIMALS = 18;
54660
- var num5 = (n) => typeof n === "number" && Number.isFinite(n) ? n : 0;
56390
+ var num8 = (n) => typeof n === "number" && Number.isFinite(n) ? n : 0;
54661
56391
  var minDefined = (a, b) => a == null ? b : b == null ? a : Math.min(a, b);
54662
56392
  var glvMarketRoomUsd = (cap, priceUsd) => {
54663
56393
  const currentUsd = Number(cap.balanceAmount) / 1e18 * priceUsd;
@@ -54691,9 +56421,9 @@ var fetchGmxVaults = async (chainId, multicallRetry, options) => {
54691
56421
  indexToken: indexToken ? indexToken.toLowerCase() : void 0,
54692
56422
  longSymbol,
54693
56423
  shortSymbol,
54694
- apy: num5(entry?.apy),
54695
- baseApy: num5(entry?.baseApy),
54696
- bonusApr: num5(entry?.bonusApr),
56424
+ apy: num8(entry?.apy),
56425
+ baseApy: num8(entry?.baseApy),
56426
+ bonusApr: num8(entry?.bonusApr),
54697
56427
  yieldProfile: "volatile",
54698
56428
  denomination: denominationFor(longSymbol, shortSymbol)
54699
56429
  };
@@ -54752,8 +56482,8 @@ var fetchGmxVaults = async (chainId, multicallRetry, options) => {
54752
56482
  marketIndexToken
54753
56483
  )
54754
56484
  ]);
54755
- for (const [addr, v] of gmValues) {
54756
- const e = out[addr];
56485
+ for (const [addr2, v] of gmValues) {
56486
+ const e = out[addr2];
54757
56487
  if (e) {
54758
56488
  e.priceUsd = v.priceUsd;
54759
56489
  e.tvlUsd = v.tvlUsd;
@@ -54761,12 +56491,12 @@ var fetchGmxVaults = async (chainId, multicallRetry, options) => {
54761
56491
  e.depositCapacityUsd = v.depositCapacityUsd;
54762
56492
  }
54763
56493
  }
54764
- for (const [addr, v] of glv.values) {
54765
- const e = out[addr];
56494
+ for (const [addr2, v] of glv.values) {
56495
+ const e = out[addr2];
54766
56496
  if (!e) continue;
54767
56497
  e.priceUsd = v.priceUsd;
54768
56498
  e.tvlUsd = v.tvlUsd;
54769
- const markets2 = glv.glvMarkets.get(addr) ?? [];
56499
+ const markets2 = glv.glvMarkets.get(addr2) ?? [];
54770
56500
  let liqSum = 0;
54771
56501
  let tvlSum = 0;
54772
56502
  for (const m of markets2) {
@@ -54778,7 +56508,7 @@ var fetchGmxVaults = async (chainId, multicallRetry, options) => {
54778
56508
  }
54779
56509
  if (tvlSum > 0 && v.tvlUsd != null)
54780
56510
  e.liquidityUsd = v.tvlUsd * (liqSum / tvlSum);
54781
- const caps = glv.glvCaps.get(addr) ?? [];
56511
+ const caps = glv.glvCaps.get(addr2) ?? [];
54782
56512
  let capacity = 0;
54783
56513
  let known = false;
54784
56514
  for (const cap of caps) {
@@ -54804,7 +56534,7 @@ var fetchGmxVaults = async (chainId, multicallRetry, options) => {
54804
56534
  // src/vaults/gmx/fetchUser.ts
54805
56535
  var DEFAULT_CAP = 50;
54806
56536
  var isBig = (v) => typeof v === "bigint";
54807
- var str = (v) => isBig(v) ? v.toString() : "0";
56537
+ var str2 = (v) => isBig(v) ? v.toString() : "0";
54808
56538
  var getGmxUserPositions = async (chainId, account, multicallRetry, options) => {
54809
56539
  const empty = {
54810
56540
  chainId,
@@ -54932,11 +56662,11 @@ var getGmxUserPositions = async (chainId, account, multicallRetry, options) => {
54932
56662
  market: a.market.toLowerCase(),
54933
56663
  initialLongToken: a.initialLongToken.toLowerCase(),
54934
56664
  initialShortToken: a.initialShortToken.toLowerCase(),
54935
- initialLongTokenAmount: str(n.initialLongTokenAmount),
54936
- initialShortTokenAmount: str(n.initialShortTokenAmount),
54937
- minOut: str(n.minMarketTokens),
54938
- executionFee: str(n.executionFee),
54939
- updatedAtTime: str(n.updatedAtTime)
56665
+ initialLongTokenAmount: str2(n.initialLongTokenAmount),
56666
+ initialShortTokenAmount: str2(n.initialShortTokenAmount),
56667
+ minOut: str2(n.minMarketTokens),
56668
+ executionFee: str2(n.executionFee),
56669
+ updatedAtTime: str2(n.updatedAtTime)
54940
56670
  });
54941
56671
  });
54942
56672
  withdrawalKeys.forEach((key, i) => {
@@ -54950,11 +56680,11 @@ var getGmxUserPositions = async (chainId, account, multicallRetry, options) => {
54950
56680
  account: a.account.toLowerCase(),
54951
56681
  receiver: a.receiver.toLowerCase(),
54952
56682
  market: a.market.toLowerCase(),
54953
- tokenAmount: str(n.marketTokenAmount),
54954
- minLongTokenAmount: str(n.minLongTokenAmount),
54955
- minShortTokenAmount: str(n.minShortTokenAmount),
54956
- executionFee: str(n.executionFee),
54957
- updatedAtTime: str(n.updatedAtTime)
56683
+ tokenAmount: str2(n.marketTokenAmount),
56684
+ minLongTokenAmount: str2(n.minLongTokenAmount),
56685
+ minShortTokenAmount: str2(n.minShortTokenAmount),
56686
+ executionFee: str2(n.executionFee),
56687
+ updatedAtTime: str2(n.updatedAtTime)
54958
56688
  });
54959
56689
  });
54960
56690
  const glvDeposits = Array.isArray(glvRes[0]) ? glvRes[0] : [];
@@ -54971,11 +56701,11 @@ var getGmxUserPositions = async (chainId, account, multicallRetry, options) => {
54971
56701
  glv: a.glv.toLowerCase(),
54972
56702
  initialLongToken: a.initialLongToken.toLowerCase(),
54973
56703
  initialShortToken: a.initialShortToken.toLowerCase(),
54974
- initialLongTokenAmount: str(n.initialLongTokenAmount),
54975
- initialShortTokenAmount: str(n.initialShortTokenAmount),
54976
- minOut: str(n.minGlvTokens),
54977
- executionFee: str(n.executionFee),
54978
- updatedAtTime: str(n.updatedAtTime)
56704
+ initialLongTokenAmount: str2(n.initialLongTokenAmount),
56705
+ initialShortTokenAmount: str2(n.initialShortTokenAmount),
56706
+ minOut: str2(n.minGlvTokens),
56707
+ executionFee: str2(n.executionFee),
56708
+ updatedAtTime: str2(n.updatedAtTime)
54979
56709
  });
54980
56710
  }
54981
56711
  for (const w of glvWithdrawals) {
@@ -54988,11 +56718,11 @@ var getGmxUserPositions = async (chainId, account, multicallRetry, options) => {
54988
56718
  receiver: a.receiver.toLowerCase(),
54989
56719
  market: a.market.toLowerCase(),
54990
56720
  glv: a.glv.toLowerCase(),
54991
- tokenAmount: str(n.glvTokenAmount),
54992
- minLongTokenAmount: str(n.minLongTokenAmount),
54993
- minShortTokenAmount: str(n.minShortTokenAmount),
54994
- executionFee: str(n.executionFee),
54995
- updatedAtTime: str(n.updatedAtTime)
56721
+ tokenAmount: str2(n.glvTokenAmount),
56722
+ minLongTokenAmount: str2(n.minLongTokenAmount),
56723
+ minShortTokenAmount: str2(n.minShortTokenAmount),
56724
+ executionFee: str2(n.executionFee),
56725
+ updatedAtTime: str2(n.updatedAtTime)
54996
56726
  });
54997
56727
  }
54998
56728
  return {
@@ -55083,11 +56813,11 @@ function buildVaultLookup(data) {
55083
56813
  const addEntries = (bag, provider) => {
55084
56814
  if (!bag) return;
55085
56815
  for (const v of Object.values(bag)) {
55086
- const addr = v.address.toLowerCase();
55087
- if (map.has(addr)) continue;
55088
- map.set(addr, {
56816
+ const addr2 = v.address.toLowerCase();
56817
+ if (map.has(addr2)) continue;
56818
+ map.set(addr2, {
55089
56819
  provider,
55090
- address: addr,
56820
+ address: addr2,
55091
56821
  underlying: v.underlying.toLowerCase(),
55092
56822
  symbol: v.symbol,
55093
56823
  name: v.name,
@@ -55114,6 +56844,7 @@ function buildVaultLookup(data) {
55114
56844
  addEntries(data.lista, "lista");
55115
56845
  addEntries(data.silo, "silo");
55116
56846
  addEntries(data["euler-earn"], "euler-earn");
56847
+ addEntries(data.termmax, "termmax");
55117
56848
  addEntries(data.lst, "lst");
55118
56849
  addEntries(data.savings, "savings");
55119
56850
  addEntries(data.lagoon, "lagoon");
@@ -55122,7 +56853,7 @@ function buildVaultLookup(data) {
55122
56853
  addEntries(data.yearn, "yearn");
55123
56854
  return map;
55124
56855
  }
55125
- var warn6 = (...args) => {
56856
+ var warn8 = (...args) => {
55126
56857
  };
55127
56858
  var HYPERCORE_PROVIDER_CHAIN = "999";
55128
56859
  var getVaultPublicDataAll = async (chainId, providers, multicallRetry, prices = {}, tokenList = {}, options) => {
@@ -55135,7 +56866,7 @@ var getVaultPublicDataAll = async (chainId, providers, multicallRetry, prices =
55135
56866
  fetchFluidFTokens(chainId, multicallRetry, prices, tokenList).then((res) => {
55136
56867
  out.fluid = res;
55137
56868
  }).catch((e) => {
55138
- warn6(
56869
+ warn8(
55139
56870
  `[vaults] fluid fetch failed for chain ${chainId}:`,
55140
56871
  e?.message ?? e
55141
56872
  );
@@ -55147,7 +56878,7 @@ var getVaultPublicDataAll = async (chainId, providers, multicallRetry, prices =
55147
56878
  fetchGearboxV3Pools(chainId, multicallRetry, prices, tokenList).then((res) => {
55148
56879
  out.gearbox = res;
55149
56880
  }).catch((e) => {
55150
- warn6(
56881
+ warn8(
55151
56882
  `[vaults] gearbox fetch failed for chain ${chainId}:`,
55152
56883
  e?.message ?? e
55153
56884
  );
@@ -55159,7 +56890,7 @@ var getVaultPublicDataAll = async (chainId, providers, multicallRetry, prices =
55159
56890
  fetchMorphoVaults(chainId, multicallRetry, prices, tokenList).then((res) => {
55160
56891
  out.morpho = res;
55161
56892
  }).catch((e) => {
55162
- warn6(
56893
+ warn8(
55163
56894
  `[vaults] morpho fetch failed for chain ${chainId}:`,
55164
56895
  e?.message ?? e
55165
56896
  );
@@ -55171,7 +56902,7 @@ var getVaultPublicDataAll = async (chainId, providers, multicallRetry, prices =
55171
56902
  fetchListaVaultsFromChain(chainId, multicallRetry, prices, tokenList).then((res) => {
55172
56903
  out.lista = res;
55173
56904
  }).catch((e) => {
55174
- warn6(
56905
+ warn8(
55175
56906
  `[vaults] lista fetch failed for chain ${chainId}:`,
55176
56907
  e?.message ?? e
55177
56908
  );
@@ -55186,7 +56917,7 @@ var getVaultPublicDataAll = async (chainId, providers, multicallRetry, prices =
55186
56917
  }).then((res) => {
55187
56918
  out.silo = res;
55188
56919
  }).catch((e) => {
55189
- warn6(
56920
+ warn8(
55190
56921
  `[vaults] silo fetch failed for chain ${chainId}:`,
55191
56922
  e?.message ?? e
55192
56923
  );
@@ -55198,19 +56929,31 @@ var getVaultPublicDataAll = async (chainId, providers, multicallRetry, prices =
55198
56929
  fetchEulerEarnVaults(chainId, prices, tokenList, multicallRetry).then((res) => {
55199
56930
  out["euler-earn"] = res;
55200
56931
  }).catch((e) => {
55201
- warn6(
56932
+ warn8(
55202
56933
  `[vaults] euler-earn fetch failed for chain ${chainId}:`,
55203
56934
  e?.message ?? e
55204
56935
  );
55205
56936
  })
55206
56937
  );
55207
56938
  }
56939
+ if (requested.has("termmax")) {
56940
+ tasks.push(
56941
+ fetchTermMaxVaults(chainId, multicallRetry, prices, tokenList).then((res) => {
56942
+ out.termmax = res;
56943
+ }).catch((e) => {
56944
+ warn8(
56945
+ `[vaults] termmax fetch failed for chain ${chainId}:`,
56946
+ e?.message ?? e
56947
+ );
56948
+ })
56949
+ );
56950
+ }
55208
56951
  if (requested.has("lst")) {
55209
56952
  tasks.push(
55210
56953
  fetchLstShareTokens(chainId, multicallRetry, prices, tokenList).then((res) => {
55211
56954
  out.lst = res;
55212
56955
  }).catch((e) => {
55213
- warn6(
56956
+ warn8(
55214
56957
  `[vaults] lst fetch failed for chain ${chainId}:`,
55215
56958
  e?.message ?? e
55216
56959
  );
@@ -55222,7 +56965,7 @@ var getVaultPublicDataAll = async (chainId, providers, multicallRetry, prices =
55222
56965
  fetchSavingsVaults(chainId, multicallRetry, prices, tokenList).then((res) => {
55223
56966
  out.savings = res;
55224
56967
  }).catch((e) => {
55225
- warn6(
56968
+ warn8(
55226
56969
  `[vaults] savings fetch failed for chain ${chainId}:`,
55227
56970
  e?.message ?? e
55228
56971
  );
@@ -55234,7 +56977,7 @@ var getVaultPublicDataAll = async (chainId, providers, multicallRetry, prices =
55234
56977
  fetchLagoonVaults(chainId, prices, tokenList).then((res) => {
55235
56978
  out.lagoon = res;
55236
56979
  }).catch((e) => {
55237
- warn6(
56980
+ warn8(
55238
56981
  `[vaults] lagoon fetch failed for chain ${chainId}:`,
55239
56982
  e?.message ?? e
55240
56983
  );
@@ -55246,7 +56989,7 @@ var getVaultPublicDataAll = async (chainId, providers, multicallRetry, prices =
55246
56989
  fetchAaveEarnVaults(chainId, multicallRetry, prices, tokenList).then((res) => {
55247
56990
  out["aave-earn"] = res;
55248
56991
  }).catch((e) => {
55249
- warn6(
56992
+ warn8(
55250
56993
  `[vaults] aave-earn fetch failed for chain ${chainId}:`,
55251
56994
  e?.message ?? e
55252
56995
  );
@@ -55258,7 +57001,7 @@ var getVaultPublicDataAll = async (chainId, providers, multicallRetry, prices =
55258
57001
  fetchUpshiftVaults(chainId, prices, tokenList).then((res) => {
55259
57002
  out.upshift = res;
55260
57003
  }).catch((e) => {
55261
- warn6(
57004
+ warn8(
55262
57005
  `[vaults] upshift fetch failed for chain ${chainId}:`,
55263
57006
  e?.message ?? e
55264
57007
  );
@@ -55270,7 +57013,7 @@ var getVaultPublicDataAll = async (chainId, providers, multicallRetry, prices =
55270
57013
  fetchYearnVaults(chainId, multicallRetry, prices, tokenList).then((res) => {
55271
57014
  out.yearn = res;
55272
57015
  }).catch((e) => {
55273
- warn6(
57016
+ warn8(
55274
57017
  `[vaults] yearn fetch failed for chain ${chainId}:`,
55275
57018
  e?.message ?? e
55276
57019
  );
@@ -55282,7 +57025,7 @@ var getVaultPublicDataAll = async (chainId, providers, multicallRetry, prices =
55282
57025
  fetchHypercoreVaults().then((res) => {
55283
57026
  out.hypercore = res;
55284
57027
  }).catch((e) => {
55285
- warn6(
57028
+ warn8(
55286
57029
  `[vaults] hypercore fetch failed for chain ${chainId}:`,
55287
57030
  e?.message ?? e
55288
57031
  );
@@ -55294,7 +57037,7 @@ var getVaultPublicDataAll = async (chainId, providers, multicallRetry, prices =
55294
57037
  fetchGmxVaults(chainId, multicallRetry).then((res) => {
55295
57038
  out.gmx = res;
55296
57039
  }).catch((e) => {
55297
- warn6(
57040
+ warn8(
55298
57041
  `[vaults] gmx fetch failed for chain ${chainId}:`,
55299
57042
  e?.message ?? e
55300
57043
  );
@@ -55310,7 +57053,7 @@ var getVaultPublicDataAll = async (chainId, providers, multicallRetry, prices =
55310
57053
  );
55311
57054
  if (fees) out.gmxExecutionFees = fees;
55312
57055
  })().catch((e) => {
55313
- warn6(
57056
+ warn8(
55314
57057
  `[vaults] gmx execution-fee fetch failed for chain ${chainId}:`,
55315
57058
  e?.message ?? e
55316
57059
  );
@@ -55618,32 +57361,32 @@ async function fetchTokenMetadata(chain, addrs) {
55618
57361
  const results = await client.multicall({
55619
57362
  allowFailure: false,
55620
57363
  batchSize: 300,
55621
- contracts: addrs.map((addr) => [
57364
+ contracts: addrs.map((addr2) => [
55622
57365
  {
55623
57366
  abi: ERC20MetadataAbi,
55624
57367
  functionName: "name",
55625
- address: addr,
57368
+ address: addr2,
55626
57369
  args: []
55627
57370
  },
55628
57371
  {
55629
57372
  abi: ERC20MetadataAbi,
55630
57373
  functionName: "symbol",
55631
- address: addr,
57374
+ address: addr2,
55632
57375
  args: []
55633
57376
  },
55634
57377
  {
55635
57378
  abi: ERC20MetadataAbi,
55636
57379
  functionName: "decimals",
55637
- address: addr,
57380
+ address: addr2,
55638
57381
  args: []
55639
57382
  }
55640
57383
  ]).flat()
55641
57384
  });
55642
- addrs.forEach((addr, i) => {
57385
+ addrs.forEach((addr2, i) => {
55643
57386
  const name = results[i * 3];
55644
57387
  const symbol = results[i * 3 + 1];
55645
57388
  const decimals = results[i * 3 + 2];
55646
- const address = addr.toLowerCase();
57389
+ const address = addr2.toLowerCase();
55647
57390
  tokens[address] = {
55648
57391
  chainId: String(chain),
55649
57392
  decimals,
@@ -55857,6 +57600,6 @@ async function fetchTokenBalances(chainId, account, tokens, options = {}) {
55857
57600
  return parseTokenBalanceResult(rawResult, prepared.query);
55858
57601
  }
55859
57602
 
55860
- export { ApiBookSource, DEFAULT_MIDNIGHT_API, DEFAULT_OUTLIER_GUARD, DEFAULT_STALE_REJECT_SECONDS, 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, TELLER_CALLS_PER_BID, 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, buildTellerUserCall, buildVaultLookup, calculateLeverage, calculateNetApr, calculateOverallNetApr, calculateWeightedAverage, classifyFreshness, classifyReliability, classifyVault, collectFeedObservations, 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, consensusReference, convertExactlyMarketsToResponse, convertLenderUserDataResult, convertLiquityMarketsToResponse, convertRiverMarketsToResponse, convertTellerMarketsToResponse, convertTermMarketsToResponse, createMarketUid, createMidnightBookSource, createMulticallRpcCall, createRawRpcCalls, createTermBookSource, decodeListaMarkets, decodeMarkets, decodePackedListaUserDataset, decodePackedMorphoUserDataset, detectInterfaceKinds, encodeBalanceFetcherCalldata, exactlyLenderKey, exactlyMarketFromLenderKey, exactlyPairLtv, exactlyPenaltyRateToAprPercent, exactlyWadRateToPercent, feedKeyOf, feedStatKey, 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, fetchTellerMarkets, fetchTermMarkets, fetchTokenBalances, fetchTokenMetadata, fetchUpshiftApiVaults, fetchUpshiftVaults, fetchYearnApiVaults, fetchYearnVaults, filterActiveLenders, filterLendersByProtocol, fuseLenderData, generateLendingPools, getAavesForChain, getAssetConfig, getBalanceForMarketUid, getBorrowCapacity, getCachedLiquityTroves, getCachedTellerBids, 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, lenderApiOnly, lenderFamily, 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, probeAaveFeedTimestamps, pruneFeedStats, readVaultSharePrices, rejectOutliers as rejectPriceOutliers, resolveDerivation, resolveStCeloDepositGroup, riverKeyParts, riverLenderKey, selectAssetGroupPrices, stampVaultClassification, tellerBpsToPercent, tellerImpliedLtv, tellerLenderKey, tellerPoolFromLenderKey, termLenderKey, tickToAprNumber, tickToPrice, unflattenLenderData, updateFeedStats };
57603
+ export { ApiBookSource, DEFAULT_MIDNIGHT_API, DEFAULT_OUTLIER_GUARD, DEFAULT_STALE_REJECT_SECONDS, DEFAULT_TERMMAX_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, TELLER_CALLS_PER_BID, TERMMAX_CALLS_PER_ACCOUNT, DECIMAL_BASE as TERMMAX_DECIMAL_BASE, TERMMAX_LIQUIDATION_PENALTY, TERMMAX_LIQUIDATION_WINDOW_SECS, TERMMAX_LIQUIDATOR_BONUS, TERMMAX_PARTIAL_CLOSE_FACTOR, TERMMAX_PARTIAL_LIQUIDATION_THRESHOLD_USD, TermMaxApiSource, 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, buildTellerUserCall, buildTermMaxUserCall, buildVaultLookup, calculateLeverage, calculateNetApr, calculateOverallNetApr, calculateWeightedAverage, classifyFreshness, classifyReliability, classifyVault, collectFeedObservations, 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, consensusReference, convertExactlyMarketsToResponse, convertInverseMarketsToResponse, convertLenderUserDataResult, convertLiquityMarketsToResponse, convertRiverMarketsToResponse, convertTellerMarketsToResponse, convertTermMarketsToResponse, convertTermMaxMarketsToResponse, createMarketUid, createMidnightBookSource, createMulticallRpcCall, createRawRpcCalls, createTermBookSource, createTermMaxDataSource, decodeListaMarkets, decodeMarkets, decodePackedListaUserDataset, decodePackedMorphoUserDataset, detectInterfaceKinds, encodeBalanceFetcherCalldata, exactlyLenderKey, exactlyMarketFromLenderKey, exactlyPairLtv, exactlyPenaltyRateToAprPercent, exactlyWadRateToPercent, feedKeyOf, feedStatKey, fetchDolomiteAccountNumbers, fetchEulerEarnVaults, fetchEulerEarnVaultsFromSubgraph, fetchEulerSubAccountIndexes, fetchExactlyMarkets, fetchFlashLiquidityForChain, fetchFluidFTokens, fetchGeneralYields, fetchGeneralYieldsByMarketUid, fetchGmxExecutionFees, fetchGmxTickerPrices, fetchGmxVaults, fetchHypercoreVaults, fetchInverseMarkets, fetchLagoonApiVaults, fetchLagoonVaults, fetchLiquityMarkets, fetchListaVaultsFromChain, fetchMorphoUserBalances, fetchMorphoUserPositionMarkets, fetchMorphoVaults, fetchMorphoVaultsFromApi, fetchMorphoVaultsFromChain, fetchOraclePrices, fetchPendlePrices, fetchRiverMarkets, fetchSiloVaults, fetchTellerMarkets, fetchTermMarkets, fetchTermMaxMarkets, fetchTokenBalances, fetchTokenMetadata, fetchUpshiftApiVaults, fetchUpshiftVaults, fetchYearnApiVaults, fetchYearnVaults, filterActiveLenders, filterLendersByProtocol, fuseLenderData, generateLendingPools, getAavesForChain, getAssetConfig, getBalanceForMarketUid, getBorrowCapacity, getCachedLiquityTroves, getCachedTellerBids, getCachedTermMaxDiscovery, getCachedTermMaxMarket, getCachedTermMaxMarkets, 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, inverseKeyParts, inverseLenderKey, isStablecoinSymbol, isYearnV3, keysFromMaps, lenderApiOnly, lenderFamily, liquityCandidateTroveIds, liquityKeyParts, liquityLenderKey, multicall3Abi, nanTo, needsLenderApproval, needsTokenApproval, noOpResult, normalizeToBytes, parseBalanceFetcherResult, parseMergedResult, parseMulticallRpcResponses, parseRawRpcBatchResponses, parseRawRpcResponses, parseTermMaxLtv, parseTokenBalanceResult, positivePart2 as positivePart, predictInverseEscrow, prepareLenderUserDataRpcCalls, prepareMergedMulticallParams, prepareMergedRpcCalls, prepareMulticallInputs, prepareTokenBalanceRpcCalls, priceGlvVaults, priceGmMarkets, probeAaveFeedTimestamps, pruneFeedStats, readVaultSharePrices, rejectOutliers as rejectPriceOutliers, resolveDerivation, resolveStCeloDepositGroup, riverKeyParts, riverLenderKey, selectAssetGroupPrices, stampVaultClassification, tellerBpsToPercent, tellerImpliedLtv, tellerLenderKey, tellerPoolFromLenderKey, termLenderKey, termMaxApiBase, borrowNif as termMaxBorrowNif, curveApr as termMaxCurveApr, curveAprNumber as termMaxCurveAprNumber, daysToMaturity as termMaxDaysToMaturity, lendNif as termMaxLendNif, mintGtFeeRatio as termMaxMintGtFeeRatio, ratioToNumber as termMaxRatioToNumber, ratioToPercent as termMaxRatioToPercent, tickToAprNumber, tickToPrice, unflattenLenderData, updateFeedStats };
55861
57604
  //# sourceMappingURL=index.js.map
55862
57605
  //# sourceMappingURL=index.js.map