@1delta/margin-fetcher 5.0.59 → 5.0.60

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,7 +1,7 @@
1
- import { parseAbi, keccak256, encodeAbiParameters, formatEther, BaseError, erc20Abi, stringToHex, isAddress, pad, encodeFunctionData, formatUnits, getAddress, decodeFunctionResult, decodeAbiParameters, concat, AbiEncodingLengthMismatchError, concatHex, toBytes, slice, hexToString, parseAbiParameters, InvalidAddressError, boolToHex, integerRegex, numberToHex, bytesRegex, BytesSizeMismatchError, arrayRegex, UnsupportedPackedAbiType } from './chunk-JUYF2XLF.js';
1
+ import { parseAbi, keccak256, encodeAbiParameters, formatEther, BaseError, erc20Abi, stringToHex, isAddress, pad, encodeFunctionData, formatUnits, getAddress, decodeFunctionResult, decodeAbiParameters, concat, parseAbiParameters, AbiEncodingLengthMismatchError, concatHex, toBytes, slice, hexToString, InvalidAddressError, boolToHex, integerRegex, numberToHex, bytesRegex, BytesSizeMismatchError, arrayRegex, UnsupportedPackedAbiType } from './chunk-JUYF2XLF.js';
2
2
  import './chunk-BYTNVMX7.js';
3
3
  import './chunk-PR4QN5HX.js';
4
- import { Lender, isExactly, isMidnight, isTerm, isTermMax, isTeller, isListaDao, isLiquityFamily, isRiver, isInverse, isCooler, isDssType, isCompoundV3Type, isFluid, isGearboxV3, isLlamaLend, isFrankencoin, isResupply, isCurvance, isTwyne, isFraxlend, LIQUITY_FAMILY_LENDERS, isAaveType, isCompoundV3, isMultiMarket, isSiloV2Type, isSiloV3Type, isDolomite, hasCrossMarginRisk, isEulerType, isAaveV4Type, isInit, isMorphoType, isCompoundV2Type, isVenusType, isSumerType, AAVE_V3_LENDERS, AAVE_V2_LENDERS, isMorphoBlue, isAaveV2Type, isAaveV32Type, isAaveV3Type, isUsdd, isSky, isYLDR, isLista, hasSubAccounts, isTectonicType, isKineticType, isBenqiType } from '@1delta/lender-registry';
4
+ import { Lender, isExactly, isMidnight, isTerm, isTermMax, isTeller, isListaDao, isLiquityFamily, isRiver, isInverse, isCooler, isDssType, isCompoundV3Type, isFluid, isGearboxV3, isLlamaLend, isFrankencoin, isResupply, isCurvance, isTwyne, isFraxlend, LIQUITY_FAMILY_LENDERS, isAaveType, isCompoundV3, isMultiMarket, isSiloV2Type, isSiloV3Type, isDolomite, isMorphoType, isUsdd, isSky, hasCrossMarginRisk, isEulerType, isAaveV4Type, isInit, isCompoundV2Type, isVenusType, isSumerType, AAVE_V3_LENDERS, AAVE_V2_LENDERS, isMorphoBlue, isAaveV2Type, isAaveV32Type, isAaveV3Type, isYLDR, isLista, hasSubAccounts, isTectonicType, isKineticType, isBenqiType } from '@1delta/lender-registry';
5
5
  export { hasCrossMarginRisk, isAaveType, isAaveV2Type, isAaveV32Type, isAaveV3Type, isCompoundV3, isCompoundV3Type, isInit, isMorphoType, isMultiMarket, isYLDR } from '@1delta/lender-registry';
6
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, coolerLendersByChain, llamaLendLendersByChain, usddLendersByChain, skyLendersByChain, frankencoinLendersByChain, resupplyLendersByChain, curvanceLendersByChain, fraxlendLendersByChain, twyneLendersByChain, tellerConfigByChain, tellerPoolsByChain, termMaxConfigByChain, aaveReserves, compoundV3Reserves, resolveTermApiBase, liquityConfigFor, liquityBranchesByChain, riverConfigFor, riverChainData, termMaxApiBaseUrl, termMaxLenderKey, inverseConfigFor, inverseChainData, coolerConfigFor, llamaLendConfigFor, llamaLendChainData, llamaLendApiBaseUrl, resupplyConfigFor, fraxlendConfigFor, dssConfigFor, dssChainData, dssDebtToken, dssDebtJoin, frankencoinConfigFor, frankencoinChainData, aaveOracles, morphoTypeMarkets, resolveMidnightApiBase, llamaLendMarketByVault, getSiloV2MarketEntry, getSiloV3MarketEntry, dolomiteEmode, curvanceConfigFor, aaveTokens, morphoTypeVaults, listaCollateralProvider, eulerConfigs, gearboxMarketCompressor, gearboxMarketConfigurators, gearboxV3LenderKey, midnightMarketsByChain, twyneConfigFor, twyneChainData, parseAaveV4SpokeLenderKey, fraxlendPairsFor, gearboxAccountCompressor, compoundV2Tokens, exactlyMarketsByChain, aaveOraclesConfig, compoundV2Oracles, compoundV2TokenArray, compoundV2OraclesConfig, compoundV3OraclesData, compoundV3BaseData, compoundV2Reserves, aaveV4Oracles, morphoTypeOracles } from '@1delta/data-sdk';
7
7
  import lodash from 'lodash';
@@ -19897,7 +19897,18 @@ var getDolomitePublicDataConverter = (lender, chainId, _prices, additionalYields
19897
19897
  config,
19898
19898
  closeFactor: 1,
19899
19899
  borrowingEnabled: !isClosing,
19900
- depositsEnabled: !isClosing
19900
+ // `isClosing` gates BORROWS ONLY — DolomiteMargin's own comment on the
19901
+ // field is "whether additional borrows are allowed", and
19902
+ // `_verifyFinalState` only asserts the market's total borrow par did
19903
+ // not grow. Supplying is untouched, which is the whole point of the
19904
+ // flag: Dolomite marks yield-bearing assets (weETH, sUSDe, wstETH, the
19905
+ // dGM/dPT wrappers) borrow-disabled precisely so they can be SUPPLIED
19906
+ // as collateral. Mapping it onto deposits made 60/77 Arbitrum, 39/48
19907
+ // Berachain and 14/23 Ethereum markets report "deposits disabled" —
19908
+ // and the term sheet then printed a red "Currently unavailable" over
19909
+ // the collateral leg of a loop that builds and executes fine. The
19910
+ // borrow half is already carried correctly by `config[*].debtDisabled`.
19911
+ depositsEnabled: true
19901
19912
  };
19902
19913
  });
19903
19914
  return { data: result, chainId };
@@ -21265,7 +21276,9 @@ function termOrderStoreBaseUrl(chainId) {
21265
21276
  return DEFAULT_TERM_ORDER_STORE;
21266
21277
  }
21267
21278
  var ZERO_ADDRESS6 = "0x0000000000000000000000000000000000000000";
21268
- var DEFAULT_TIMEOUT_MS = 5e3;
21279
+ var DEFAULT_TIMEOUT_MS = 8e3;
21280
+ var STORE_LKG_TTL_MS = 30 * 6e4;
21281
+ var storeLastGood = /* @__PURE__ */ new Map();
21269
21282
  function fillableRemaining(order, nowSec9) {
21270
21283
  if (order.taker && order.taker.toLowerCase() !== ZERO_ADDRESS6) return 0n;
21271
21284
  if (order.hasSufficientApproval === false) return 0n;
@@ -21292,10 +21305,27 @@ async function fetchTermStoreOrders(chainId, fetchImpl = fetch, filter = "fillab
21292
21305
  const base = termOrderStoreBaseUrl(chainId);
21293
21306
  const url = `${base}/orders?chainId=${chainId}`;
21294
21307
  try {
21295
- const res = await fetchImpl.call(globalThis, url, {
21296
- signal: AbortSignal.timeout(DEFAULT_TIMEOUT_MS)
21297
- });
21298
- if (!res.ok) return null;
21308
+ let res;
21309
+ for (let attempt = 0; attempt < 2; attempt++) {
21310
+ try {
21311
+ res = await fetchImpl.call(globalThis, url, {
21312
+ headers: {
21313
+ accept: "application/json",
21314
+ "user-agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0 Safari/537.36"
21315
+ },
21316
+ signal: AbortSignal.timeout(DEFAULT_TIMEOUT_MS)
21317
+ });
21318
+ if (res.ok) break;
21319
+ } catch (e) {
21320
+ if (attempt === 1) throw e;
21321
+ }
21322
+ }
21323
+ if (!res?.ok) {
21324
+ console.warn(
21325
+ `[term-order-store] chain ${chainId}: HTTP ${res?.status ?? "ERR"} from ${base} \u2014 serving last-known-good if fresh`
21326
+ );
21327
+ return filter === "fillable" ? staleStoreOrDegrade(chainId) : null;
21328
+ }
21299
21329
  const json = await res.json();
21300
21330
  const orders = Array.isArray(json?.orders) ? json.orders : Array.isArray(json) ? json : [];
21301
21331
  const nowSec9 = Math.floor(Date.now() / 1e3);
@@ -21310,11 +21340,22 @@ async function fetchTermStoreOrders(chainId, fetchImpl = fetch, filter = "fillab
21310
21340
  if (list) list.push(order);
21311
21341
  else byServicer.set(key3, [order]);
21312
21342
  }
21343
+ if (filter === "fillable") {
21344
+ storeLastGood.set(chainId, { byServicer, at: Date.now() });
21345
+ }
21313
21346
  return byServicer;
21314
- } catch {
21315
- return null;
21347
+ } catch (e) {
21348
+ console.warn(
21349
+ `[term-order-store] chain ${chainId}: fetch failed (${e?.message ?? e}) \u2014 serving last-known-good if fresh`
21350
+ );
21351
+ return filter === "fillable" ? staleStoreOrDegrade(chainId) : null;
21316
21352
  }
21317
21353
  }
21354
+ function staleStoreOrDegrade(chainId) {
21355
+ const hit = storeLastGood.get(chainId);
21356
+ if (hit && Date.now() - hit.at <= STORE_LKG_TTL_MS) return hit.byServicer;
21357
+ return null;
21358
+ }
21318
21359
  function toLevels(orders, loanDecimals, nowSec9) {
21319
21360
  const scale3 = 10 ** loanDecimals;
21320
21361
  return orders.map((o) => {
@@ -21618,6 +21659,7 @@ function convertTermMarketsToResponse(raw, chainId, prices = {}, _additionalYiel
21618
21659
  config.collateralParams.forEach((c) => {
21619
21660
  const collAddr = c.token.toLowerCase();
21620
21661
  const ltv = termMaintenanceRatioToLtv(c.maintenanceRatio);
21662
+ const initialLtv = c.initialRatio ? termMaintenanceRatioToLtv(c.initialRatio) : ltv;
21621
21663
  const liquidationPenalty = termLiquidatedDamagesToPenalty(c.liquidatedDamages) || liquidationPenaltyFromLltv(ltv);
21622
21664
  const collUid = createMarketUid(chainId, m, collAddr);
21623
21665
  entry.data[collUid] = {
@@ -21646,7 +21688,7 @@ function convertTermMarketsToResponse(raw, chainId, prices = {}, _additionalYiel
21646
21688
  config: {
21647
21689
  0: {
21648
21690
  category: 0,
21649
- borrowCollateralFactor: ltv,
21691
+ borrowCollateralFactor: initialLtv,
21650
21692
  collateralFactor: ltv,
21651
21693
  borrowFactor: 1,
21652
21694
  liquidationPenalty,
@@ -28327,7 +28369,9 @@ function convertDolomiteSubgraphMarkets(raw, chainId, prices, additionalYields,
28327
28369
  config,
28328
28370
  closeFactor: 1,
28329
28371
  borrowingEnabled: !isClosing,
28330
- depositsEnabled: !isClosing
28372
+ // Deposits are NOT gated by this flag — see the note in `publicCallParse`.
28373
+ // The subgraph names it `isBorrowingDisabled`, which says so outright.
28374
+ depositsEnabled: true
28331
28375
  };
28332
28376
  }
28333
28377
  return { data: result, chainId };
@@ -29319,7 +29363,7 @@ function prepareMulticallInputs(abi, calls) {
29319
29363
  abi: abiIsArray ? abi[i] : abi
29320
29364
  }));
29321
29365
  }
29322
- var POSITION_LENS_V3 = "0xb05B8adB2675A43513A0198B962F5abAF3bc9edf";
29366
+ var POSITION_LENS_V6 = "0x110ff05D2822DBBe1a5404d2a485267e2Ed962C6";
29323
29367
  var LENS_FAMILY = {
29324
29368
  COMPOUND_V2: 1,
29325
29369
  SILO: 2,
@@ -29345,6 +29389,17 @@ var LENS_FAMILY = {
29345
29389
  * `getUserDataCompact` — verified against the live deployment — so the existing
29346
29390
  * decoder keeps working unchanged. Not in any deployed PositionLens yet: until
29347
29391
  * one declares it, Morpho keeps using `MORPHO_LENS`.
29392
+ *
29393
+ * KNOWN GAP, both contracts: `borrowAssets` is `toAssetsUp` over `market()`
29394
+ * totals, which are as-of the market's `lastUpdate` — the pending accrual
29395
+ * since then is missing, and on a dormant market that gap is unbounded (a
29396
+ * 141-day-stale Base market understated by 0.62 %, which broke a bundler3
29397
+ * close sized off it). Fine for display, NEVER for funding — anything sizing
29398
+ * a repay/flash must accrue via `IRM.borrowRateView` first (TS reference:
29399
+ * worker-api `readMorphoUserState`). The next lens cut should accrue in the
29400
+ * contract or emit the market totals + `lastUpdate` so the client can. See
29401
+ * USER_DATA_READ_PATH.md §3 "Morpho — the lens reports debt WITHOUT pending
29402
+ * accrual".
29348
29403
  */
29349
29404
  MORPHO: 7,
29350
29405
  /** Aave V4, per spoke. Not in any deployed contract. */
@@ -29371,40 +29426,36 @@ var LENS_FAMILY = {
29371
29426
  */
29372
29427
  RESUPPLY: 15
29373
29428
  };
29374
- var V3_WITHHELD = /* @__PURE__ */ new Set([
29375
- LENS_FAMILY.AAVE,
29376
- LENS_FAMILY.AAVE_V4
29377
- ]);
29378
- var V3_FAMILIES = new Set(
29379
- Object.values(LENS_FAMILY).filter(
29380
- (f) => !V3_WITHHELD.has(f)
29381
- )
29429
+ var ALL_FAMILIES = new Set(
29430
+ Object.values(LENS_FAMILY)
29382
29431
  );
29383
- var v3 = () => ({
29384
- address: POSITION_LENS_V3,
29385
- families: V3_FAMILIES
29432
+ var v6 = () => ({
29433
+ address: POSITION_LENS_V6,
29434
+ families: ALL_FAMILIES
29386
29435
  });
29387
29436
  var POSITION_LENS = {
29388
- [Chain.ETHEREUM_MAINNET]: v3(),
29389
- [Chain.ARBITRUM_ONE]: v3(),
29390
- [Chain.AVALANCHE_C_CHAIN]: v3(),
29391
- [Chain.BNB_SMART_CHAIN_MAINNET]: v3(),
29392
- [Chain.BASE]: v3(),
29393
- [Chain.SONIC_MAINNET]: v3(),
29394
- [Chain.SEI_NETWORK]: v3(),
29395
- [Chain.KATANA]: v3(),
29396
- [Chain.HYPEREVM]: v3(),
29397
- [Chain.MANTLE]: v3(),
29398
- [Chain.XDC_NETWORK]: v3(),
29399
- [Chain.OP_MAINNET]: v3(),
29400
- [Chain.POLYGON_MAINNET]: v3(),
29401
- [Chain.LINEA]: v3(),
29402
- [Chain.SONEIUM]: v3(),
29403
- [Chain.PLASMA_MAINNET]: v3(),
29404
- [Chain.HEMI_NETWORK]: v3(),
29405
- [Chain.SCROLL]: v3(),
29406
- [Chain.FLARE_MAINNET]: v3(),
29407
- [Chain.KAIA_MAINNET]: v3()
29437
+ [Chain.ETHEREUM_MAINNET]: v6(),
29438
+ [Chain.ARBITRUM_ONE]: v6(),
29439
+ [Chain.AVALANCHE_C_CHAIN]: v6(),
29440
+ [Chain.BNB_SMART_CHAIN_MAINNET]: v6(),
29441
+ [Chain.BASE]: v6(),
29442
+ [Chain.SONIC_MAINNET]: v6(),
29443
+ [Chain.SEI_NETWORK]: v6(),
29444
+ [Chain.KATANA]: v6(),
29445
+ [Chain.HYPEREVM]: v6(),
29446
+ [Chain.MANTLE]: v6(),
29447
+ [Chain.XDC_NETWORK]: v6(),
29448
+ [Chain.OP_MAINNET]: v6(),
29449
+ [Chain.POLYGON_MAINNET]: v6(),
29450
+ [Chain.LINEA]: v6(),
29451
+ [Chain.SONEIUM]: v6(),
29452
+ [Chain.PLASMA_MAINNET]: v6(),
29453
+ [Chain.HEMI_NETWORK]: v6(),
29454
+ [Chain.SCROLL]: v6(),
29455
+ [Chain.FLARE_MAINNET]: v6(),
29456
+ [Chain.KAIA_MAINNET]: v6(),
29457
+ [Chain.CORE_BLOCKCHAIN_MAINNET]: v6(),
29458
+ [Chain.MONAD_MAINNET]: v6()
29408
29459
  };
29409
29460
  var getPositionLensFor = (chainId, family) => {
29410
29461
  const dep = POSITION_LENS[chainId];
@@ -29443,14 +29494,17 @@ function toBytes2(hex) {
29443
29494
  const h = hex.startsWith("0x") ? hex.slice(2) : hex;
29444
29495
  if (h.length === 0) return new Uint8Array(0);
29445
29496
  const out = new Uint8Array(h.length / 2);
29446
- for (let i = 0; i < out.length; i++) out[i] = parseInt(h.slice(i * 2, i * 2 + 2), 16);
29497
+ for (let i = 0; i < out.length; i++)
29498
+ out[i] = parseInt(h.slice(i * 2, i * 2 + 2), 16);
29447
29499
  return out;
29448
29500
  }
29449
29501
  function decodeLensRows(blob, wordCount, headerBytes = 0, flagBytes = 1) {
29450
29502
  const buf = toBytes2(blob);
29451
29503
  const minimum = headerBytes + 2;
29452
29504
  if (buf.length < minimum) {
29453
- throw new Error(`position-lens: blob too short (${buf.length} < ${minimum})`);
29505
+ throw new Error(
29506
+ `position-lens: blob too short (${buf.length} < ${minimum})`
29507
+ );
29454
29508
  }
29455
29509
  const header = buf.slice(0, headerBytes);
29456
29510
  const count = Number(readBE(buf, headerBytes, 2));
@@ -29476,6 +29530,49 @@ function decodeLensRows(blob, wordCount, headerBytes = 0, flagBytes = 1) {
29476
29530
  }
29477
29531
  return { header, rows };
29478
29532
  }
29533
+ function decodeVariableLensRows(blob, fixedWords, headerBytes = 0) {
29534
+ const buf = toBytes2(blob);
29535
+ const minimum = headerBytes + 2;
29536
+ if (buf.length < minimum) {
29537
+ throw new Error(
29538
+ `position-lens: blob too short (${buf.length} < ${minimum})`
29539
+ );
29540
+ }
29541
+ const header = buf.slice(0, headerBytes);
29542
+ const count = Number(readBE(buf, headerBytes, 2));
29543
+ const rows = [];
29544
+ let off = minimum;
29545
+ for (let i = 0; i < count; i++) {
29546
+ if (off + 3 > buf.length) {
29547
+ throw new Error(`position-lens: row ${i} header runs past the blob`);
29548
+ }
29549
+ const index = Number(readBE(buf, off, 2));
29550
+ const tailCount = buf[off + 2];
29551
+ off += 3;
29552
+ const words = fixedWords + tailCount;
29553
+ if (off + words * WORD > buf.length) {
29554
+ throw new Error(
29555
+ `position-lens: row ${i} claims ${tailCount} tail words, only ${(buf.length - off) / WORD} remain`
29556
+ );
29557
+ }
29558
+ const all = [];
29559
+ for (let k = 0; k < words; k++) {
29560
+ all.push(readBE(buf, off, WORD));
29561
+ off += WORD;
29562
+ }
29563
+ rows.push({
29564
+ index,
29565
+ fixed: all.slice(0, fixedWords),
29566
+ tail: all.slice(fixedWords)
29567
+ });
29568
+ }
29569
+ if (off !== buf.length) {
29570
+ throw new Error(
29571
+ `position-lens: ${buf.length - off} trailing bytes after ${count} rows`
29572
+ );
29573
+ }
29574
+ return { header, rows };
29575
+ }
29479
29576
 
29480
29577
  // src/lending/user-data/aave-v3-type/lens.ts
29481
29578
  var ZERO2 = "0x0000000000000000000000000000000000000000";
@@ -29816,7 +29913,7 @@ var getCompoundV2UserDataConverter = (lender, chainId, account, metaMap) => {
29816
29913
  COMPOUND_V2_LENS_WORDS,
29817
29914
  COMPOUND_V2_LENS_HEADER_BYTES
29818
29915
  );
29819
- if (header[0] !== 1) return void 0;
29916
+ if ((header[0] & 1) === 0) return void 0;
29820
29917
  states = new Map(
29821
29918
  rows.map((r) => [
29822
29919
  r.index,
@@ -29950,14 +30047,16 @@ var EULER_API_CHAINS = /* @__PURE__ */ new Set([
29950
30047
  // BSC
29951
30048
  "130",
29952
30049
  // Unichain
30050
+ "143",
30051
+ // Monad — served; was missing while carrying 134 vaults
29953
30052
  "146",
29954
- // Sonic
30053
+ // Sonic — 404 as of 2026-08-22 (was served); kept, see above
29955
30054
  "239",
29956
- // TAC
30055
+ // TAC — 404 as of 2026-08-22
29957
30056
  "999",
29958
30057
  // HyperEVM
29959
30058
  "1923",
29960
- // Swell
30059
+ // Swell — 404 as of 2026-08-22
29961
30060
  "8453",
29962
30061
  // Base
29963
30062
  "9745",
@@ -29966,10 +30065,12 @@ var EULER_API_CHAINS = /* @__PURE__ */ new Set([
29966
30065
  // Arbitrum
29967
30066
  "43114",
29968
30067
  // Avalanche
30068
+ "59144",
30069
+ // Linea — served; was missing while carrying 88 vaults
29969
30070
  "60808",
29970
- // BOB
30071
+ // BOB — 404 as of 2026-08-22
29971
30072
  "80094"
29972
- // Berachain
30073
+ // Berachain — 404 as of 2026-08-22
29973
30074
  ]);
29974
30075
  var eulerApiSupportsChain = (chainId) => EULER_API_CHAINS.has(chainId);
29975
30076
  async function fetchEulerPositionsFromApi(chainId, owner, forceFresh = true) {
@@ -30125,9 +30226,9 @@ var buildAaveV4UserCall = (chainId, lender, account) => {
30125
30226
  return calls;
30126
30227
  };
30127
30228
  var resolveSiloRoster = (chainId, lender, params) => {
30128
- const v32 = isSiloV3Type(lender);
30129
- const entryFor = v32 ? getSiloV3MarketEntry : getSiloV2MarketEntry;
30130
- const keyFor = v32 ? siloV3LenderKey : siloV2LenderKey;
30229
+ const v3 = isSiloV3Type(lender);
30230
+ const entryFor = v3 ? getSiloV3MarketEntry : getSiloV2MarketEntry;
30231
+ const keyFor = v3 ? siloV3LenderKey : siloV2LenderKey;
30131
30232
  if (Array.isArray(params) && params.length > 0) {
30132
30233
  const out = [];
30133
30234
  for (const key3 of params) {
@@ -30138,7 +30239,7 @@ var resolveSiloRoster = (chainId, lender, params) => {
30138
30239
  }
30139
30240
  const single = entryFor(chainId, lender);
30140
30241
  if (single) return [{ key: lender, market: single }];
30141
- const all = (v32 ? siloMarketsV3() : siloMarkets())?.[chainId] ?? [];
30242
+ const all = (v3 ? siloMarketsV3() : siloMarkets())?.[chainId] ?? [];
30142
30243
  return all.map((market) => ({ key: keyFor(market.siloConfig), market }));
30143
30244
  };
30144
30245
 
@@ -30403,10 +30504,83 @@ var buildMidnightUserCall = (chainId, _lender, account) => {
30403
30504
  }
30404
30505
  return calls;
30405
30506
  };
30507
+ var usesTermLens = (chainId) => getPositionLensFor(chainId, LENS_FAMILY.TERM) !== void 0;
30508
+ var buildTermLensCall = (chainId, markets, account) => {
30509
+ const lens = getPositionLensFor(chainId, LENS_FAMILY.TERM);
30510
+ if (!lens) return [];
30511
+ if (markets.some(
30512
+ (m) => !m.repoToken || !m.servicer || !m.collateralManager || !m.collateralParams
30513
+ )) {
30514
+ return [];
30515
+ }
30516
+ const payload = encodeAbiParameters(
30517
+ [
30518
+ {
30519
+ type: "tuple[]",
30520
+ components: [
30521
+ { name: "repoToken", type: "address" },
30522
+ { name: "servicer", type: "address" },
30523
+ { name: "collateralManager", type: "address" },
30524
+ { name: "collateralTokens", type: "address[]" }
30525
+ ]
30526
+ }
30527
+ ],
30528
+ [
30529
+ markets.map((m) => ({
30530
+ repoToken: m.repoToken,
30531
+ servicer: m.servicer,
30532
+ collateralManager: m.collateralManager,
30533
+ collateralTokens: m.collateralParams.map((c) => c.token)
30534
+ }))
30535
+ ]
30536
+ );
30537
+ return [
30538
+ {
30539
+ address: lens,
30540
+ name: "getUserData",
30541
+ params: [[{ family: LENS_FAMILY.TERM, payload }], account],
30542
+ abi: PositionLensAbi
30543
+ }
30544
+ ];
30545
+ };
30546
+ var rebuildTermData = (blobs, markets) => {
30547
+ if (isFailedCall(blobs) || !Array.isArray(blobs) || blobs.length !== 1) {
30548
+ return void 0;
30549
+ }
30550
+ let rows;
30551
+ try {
30552
+ rows = decodeVariableLensRows(blobs[0], 3, 0).rows;
30553
+ } catch {
30554
+ return void 0;
30555
+ }
30556
+ const out = [];
30557
+ const offsets = [];
30558
+ for (const m of markets) {
30559
+ offsets.push(out.length);
30560
+ out.push(0n, 0n, 0n);
30561
+ for (let c = 0; c < m.collateralParams.length; c++) out.push(0n);
30562
+ }
30563
+ for (const r of rows) {
30564
+ if (r.index >= markets.length) return void 0;
30565
+ const base = offsets[r.index];
30566
+ out[base] = r.fixed[0];
30567
+ out[base + 1] = r.fixed[1];
30568
+ out[base + 2] = r.fixed[2];
30569
+ if (r.tail.length !== markets[r.index].collateralParams.length) return void 0;
30570
+ for (let c = 0; c < r.tail.length; c++) out[base + 3 + c] = r.tail[c];
30571
+ }
30572
+ return out;
30573
+ };
30574
+
30575
+ // src/lending/user-data/term/userCallBuild.ts
30406
30576
  var termMarketCallCount = (collateralCount) => 3 + collateralCount;
30407
30577
  var buildTermUserCall = (chainId, _lender, account) => {
30408
30578
  const markets = termMarketsByChain(chainId);
30409
30579
  if (markets.length === 0) return [];
30580
+ if (usesTermLens(chainId)) {
30581
+ const lensCall = buildTermLensCall(chainId, markets, account);
30582
+ if (lensCall.length) return lensCall;
30583
+ }
30410
30584
  const calls = [];
30411
30585
  for (const market of markets) {
30412
30586
  calls.push({ address: market.repoToken, name: "balanceOf", params: [account] });
@@ -30625,11 +30799,66 @@ function buildDataPhaseCalls(branches, perBranch, account) {
30625
30799
  });
30626
30800
  return calls;
30627
30801
  }
30802
+
30803
+ // src/lending/user-data/river/lens.ts
30804
+ var usesRiverLens = (chainId) => getPositionLensFor(chainId, LENS_FAMILY.RIVER) !== void 0;
30805
+ var isAddress2 = (v) => typeof v === "string" && /^0x[0-9a-fA-F]{40}$/.test(v);
30806
+ var buildRiverLensCall = (chainId, cfg, markets, account) => {
30807
+ const lens = getPositionLensFor(chainId, LENS_FAMILY.RIVER);
30808
+ if (!lens) return [];
30809
+ if (!isAddress2(cfg.xapp) || markets.some((m) => !isAddress2(m.troveManager))) {
30810
+ return [];
30811
+ }
30812
+ const payload = encodeAbiParameters(
30813
+ parseAbiParameters("address[], address"),
30814
+ [markets.map((m) => m.troveManager), cfg.xapp]
30815
+ );
30816
+ return [
30817
+ {
30818
+ address: lens,
30819
+ name: "getUserData",
30820
+ params: [[{ family: LENS_FAMILY.RIVER, payload }], account],
30821
+ abi: PositionLensAbi
30822
+ }
30823
+ ];
30824
+ };
30825
+ var rebuildRiverData = (blobs, marketCount) => {
30826
+ if (isFailedCall(blobs) || !Array.isArray(blobs) || blobs.length !== 1) {
30827
+ return void 0;
30828
+ }
30829
+ let decoded;
30830
+ try {
30831
+ decoded = decodeLensRows(blobs[0], 6, 32, 0);
30832
+ } catch {
30833
+ return void 0;
30834
+ }
30835
+ let spDeposit = 0n;
30836
+ for (const b of decoded.header) spDeposit = spDeposit << 8n | BigInt(b);
30837
+ const out = [];
30838
+ for (let i = 0; i < marketCount; i++) {
30839
+ out.push([0n, 0n, 0n, 0n], 0n, 0n);
30840
+ }
30841
+ for (const r of decoded.rows) {
30842
+ if (r.index >= marketCount) return void 0;
30843
+ const base = r.index * 3;
30844
+ out[base] = [r.words[0], r.words[1], r.words[2], r.words[3]];
30845
+ out[base + 1] = r.words[4];
30846
+ out[base + 2] = r.words[5];
30847
+ }
30848
+ out.push(spDeposit);
30849
+ return out;
30850
+ };
30851
+
30852
+ // src/lending/user-data/river/userCallBuild.ts
30628
30853
  var RIVER_CALLS_PER_MARKET = 3;
30629
30854
  var buildRiverUserCall = (chainId, lender, account) => {
30630
30855
  const cfg = riverConfigFor(lender, chainId);
30631
30856
  const markets = riverChainData(lender, chainId)?.markets ?? [];
30632
30857
  if (!cfg || markets.length === 0) return [];
30858
+ if (usesRiverLens(chainId)) {
30859
+ const lensCall = buildRiverLensCall(chainId, cfg, markets, account);
30860
+ if (lensCall.length) return lensCall;
30861
+ }
30633
30862
  const calls = markets.flatMap((m) => [
30634
30863
  {
30635
30864
  address: m.troveManager,
@@ -30935,10 +31164,67 @@ function __resetResupplyUserCaches() {
30935
31164
  rosterCache3.clear();
30936
31165
  discoveryCache2.clear();
30937
31166
  }
31167
+
31168
+ // src/lending/user-data/fraxlend/lens.ts
31169
+ var usesFraxlendLens = (chainId) => getPositionLensFor(chainId, LENS_FAMILY.FRAXLEND) !== void 0;
31170
+ var isAddress3 = (v) => typeof v === "string" && /^0x[0-9a-fA-F]{40}$/.test(v);
31171
+ var buildFraxlendLensCall = (chainId, pairs, account) => {
31172
+ const lens = getPositionLensFor(chainId, LENS_FAMILY.FRAXLEND);
31173
+ if (!lens) return [];
31174
+ if (pairs.some((p) => !isAddress3(p.address))) return [];
31175
+ const payload = encodeAbiParameters(parseAbiParameters("address[]"), [
31176
+ pairs.map((p) => p.address)
31177
+ ]);
31178
+ return [
31179
+ {
31180
+ address: lens,
31181
+ name: "getUserData",
31182
+ params: [[{ family: LENS_FAMILY.FRAXLEND, payload }], account],
31183
+ abi: PositionLensAbi
31184
+ }
31185
+ ];
31186
+ };
31187
+ var rebuildFraxlendData = (blobs, pairCount) => {
31188
+ if (isFailedCall(blobs) || !Array.isArray(blobs) || blobs.length !== 1) {
31189
+ return void 0;
31190
+ }
31191
+ let decoded;
31192
+ try {
31193
+ decoded = decodeLensRows(blobs[0], 9, 0, 0);
31194
+ } catch {
31195
+ return void 0;
31196
+ }
31197
+ const out = [];
31198
+ for (let i = 0; i < pairCount; i++) {
31199
+ out.push(0n, 0n, 0n, [0n, 0n, 0n, 0n, [0n, 0n], [0n, 0n]]);
31200
+ }
31201
+ for (const r of decoded.rows) {
31202
+ if (r.index >= pairCount) return void 0;
31203
+ const base = r.index * 4;
31204
+ out[base] = r.words[0];
31205
+ out[base + 1] = r.words[1];
31206
+ out[base + 2] = r.words[2];
31207
+ out[base + 3] = [
31208
+ 0n,
31209
+ 0n,
31210
+ 0n,
31211
+ 0n,
31212
+ [r.words[5], r.words[6]],
31213
+ [r.words[7], r.words[8]]
31214
+ ];
31215
+ }
31216
+ return out;
31217
+ };
31218
+
31219
+ // src/lending/user-data/fraxlend/userCallBuild.ts
30938
31220
  var FRAXLEND_CALLS_PER_PAIR = 4;
30939
31221
  var buildFraxlendUserCall = (chainId, lender, account) => {
30940
31222
  const pairs = fraxlendPairsFor(lender, chainId);
30941
31223
  if (pairs.length === 0) return [];
31224
+ if (usesFraxlendLens(chainId)) {
31225
+ const lensCall = buildFraxlendLensCall(chainId, pairs, account);
31226
+ if (lensCall.length) return lensCall;
31227
+ }
30942
31228
  return pairs.flatMap((p) => [
30943
31229
  { address: p.address, name: "userCollateralBalance", params: [account] },
30944
31230
  { address: p.address, name: "userBorrowShares", params: [account] },
@@ -31121,7 +31407,7 @@ function getCachedTwyneDiscovery(chainId, lender, account) {
31121
31407
  return discoveryCache4.get(discoveryKey3(chainId, lender, account));
31122
31408
  }
31123
31409
  var lower2 = (a) => String(a).toLowerCase();
31124
- var isAddress2 = (v) => typeof v === "string" && /^0x[0-9a-fA-F]{40}$/.test(v);
31410
+ var isAddress4 = (v) => typeof v === "string" && /^0x[0-9a-fA-F]{40}$/.test(v);
31125
31411
  async function discover(chainId, lender, account) {
31126
31412
  const key3 = discoveryKey3(chainId, lender, account);
31127
31413
  const cached = discoveryCache4.get(key3);
@@ -31141,7 +31427,7 @@ async function discover(chainId, lender, account) {
31141
31427
  abi: TwyneCollateralVaultFactoryAbi,
31142
31428
  allowFailure: true
31143
31429
  });
31144
- const created = Array.isArray(listRaw) ? listRaw.filter(isAddress2).map(lower2) : [];
31430
+ const created = Array.isArray(listRaw) ? listRaw.filter(isAddress4).map(lower2) : [];
31145
31431
  if (created.length === 0) {
31146
31432
  discoveryCache4.set(key3, empty);
31147
31433
  return empty;
@@ -31172,8 +31458,8 @@ async function discover(chainId, lender, account) {
31172
31458
  const iv = refs[i * 3];
31173
31459
  const target = refs[i * 3 + 1];
31174
31460
  const owner = refs[i * 3 + 2];
31175
- if (!isAddress2(iv) || !isAddress2(target)) return;
31176
- if (isAddress2(owner) && lower2(owner) !== lower2(account)) return;
31461
+ if (!isAddress4(iv) || !isAddress4(target)) return;
31462
+ if (isAddress4(owner) && lower2(owner) !== lower2(account)) return;
31177
31463
  const marketKey2 = `${lower2(iv)}|${lower2(target)}`;
31178
31464
  if (!known.has(marketKey2)) return;
31179
31465
  vaults.push({
@@ -31413,6 +31699,53 @@ var buildFrankencoinUserCall = async (chainId, lender, account) => {
31413
31699
  }
31414
31700
  return calls;
31415
31701
  };
31702
+ var ROW_BYTES2 = 117;
31703
+ var usesTellerLens = (chainId) => getPositionLensFor(chainId, LENS_FAMILY.TELLER) !== void 0;
31704
+ async function discoverTellerBidsViaLens(chainId, tellerV2, account) {
31705
+ const lens = getPositionLensFor(chainId, LENS_FAMILY.TELLER);
31706
+ if (!lens || !tellerV2) return void 0;
31707
+ const payload = encodeAbiParameters(parseAbiParameters("address, uint256"), [
31708
+ tellerV2,
31709
+ 0n
31710
+ ]);
31711
+ let blob;
31712
+ try {
31713
+ const res = await multicallRetryUniversal({
31714
+ chain: chainId,
31715
+ calls: [
31716
+ {
31717
+ address: lens,
31718
+ name: "getUserData",
31719
+ params: [[{ family: LENS_FAMILY.TELLER, payload }], account]
31720
+ }
31721
+ ],
31722
+ abi: PositionLensAbi,
31723
+ allowFailure: true
31724
+ });
31725
+ const blobs = res?.[0];
31726
+ if (!Array.isArray(blobs) || blobs.length !== 1) return void 0;
31727
+ blob = blobs[0];
31728
+ } catch {
31729
+ return void 0;
31730
+ }
31731
+ if (typeof blob !== "string" || !blob.startsWith("0x") || blob.length < 6) {
31732
+ return void 0;
31733
+ }
31734
+ const buf = Buffer.from(blob.slice(2), "hex");
31735
+ const count = buf.readUInt16BE(0);
31736
+ if (buf.length !== 2 + count * ROW_BYTES2) return void 0;
31737
+ const out = [];
31738
+ for (let i = 0; i < count; i++) {
31739
+ const o = 2 + i * ROW_BYTES2;
31740
+ out.push({
31741
+ bidId: BigInt("0x" + buf.subarray(o, o + 32).toString("hex")).toString(),
31742
+ lender: getAddress("0x" + buf.subarray(o + 32, o + 52).toString("hex"))
31743
+ });
31744
+ }
31745
+ return out;
31746
+ }
31747
+
31748
+ // src/lending/user-data/teller/userCallBuild.ts
31416
31749
  var TELLER_CALLS_PER_BID = 4;
31417
31750
  var CACHE_TTL_MS3 = 5 * 6e4;
31418
31751
  var discoveryCache7 = /* @__PURE__ */ new Map();
@@ -31440,6 +31773,27 @@ var buildTellerUserCall = async (chainId, _lender, account) => {
31440
31773
  if (!proto?.tellerV2 || !proto?.collateralManager || pools.length === 0) {
31441
31774
  return [];
31442
31775
  }
31776
+ const poolByAddrEarly = /* @__PURE__ */ new Map();
31777
+ for (const p of pools) poolByAddrEarly.set(p.pool.toLowerCase(), p);
31778
+ if (usesTellerLens(chainId)) {
31779
+ const viaLens = await discoverTellerBidsViaLens(
31780
+ chainId,
31781
+ proto.tellerV2,
31782
+ account
31783
+ );
31784
+ if (viaLens) {
31785
+ const keptLens = [];
31786
+ for (const b of viaLens) {
31787
+ const pool = poolByAddrEarly.get(b.lender.toLowerCase());
31788
+ if (pool) keptLens.push({ bidId: b.bidId, pool });
31789
+ }
31790
+ discoveryCache7.set(cacheKey4(chainId, account), {
31791
+ bids: keptLens,
31792
+ at: Date.now()
31793
+ });
31794
+ return buildTellerDataPhase(proto, keptLens);
31795
+ }
31796
+ }
31443
31797
  let ids = [];
31444
31798
  try {
31445
31799
  const res = await multicallRetryUniversal({
@@ -31487,6 +31841,9 @@ var buildTellerUserCall = async (chainId, _lender, account) => {
31487
31841
  if (pool) kept.push({ bidId: id, pool });
31488
31842
  });
31489
31843
  discoveryCache7.set(cacheKey4(chainId, account), { bids: kept, at: Date.now() });
31844
+ return buildTellerDataPhase(proto, kept);
31845
+ };
31846
+ function buildTellerDataPhase(proto, kept, _account) {
31490
31847
  if (kept.length === 0) return [];
31491
31848
  const ts = nowSec5();
31492
31849
  const calls = [];
@@ -31509,7 +31866,7 @@ var buildTellerUserCall = async (chainId, _lender, account) => {
31509
31866
  });
31510
31867
  }
31511
31868
  return calls;
31512
- };
31869
+ }
31513
31870
  var TERMMAX_MARKETS_PER_CALL = 180;
31514
31871
  var CACHE_TTL_MS4 = 5 * 6e4;
31515
31872
  var discoveryCache8 = /* @__PURE__ */ new Map();
@@ -34141,8 +34498,12 @@ var getTermUserDataConverter = (_lender, chainId, account, meta) => {
34141
34498
  (sum3, m) => sum3 + termMarketCallCount(m.collateralParams.length),
34142
34499
  0
34143
34500
  );
34501
+ const viaLens = usesTermLens(chainId);
34144
34502
  return [
34145
- (data) => {
34503
+ (raw) => {
34504
+ if (!raw) return void 0;
34505
+ if (viaLens && raw.length !== 1) return void 0;
34506
+ const data = viaLens ? rebuildTermData(raw[0], markets) : raw;
34146
34507
  if (!data || data.length < totalCalls) return void 0;
34147
34508
  const out = {};
34148
34509
  let cursor = 0;
@@ -34241,7 +34602,10 @@ var getTermUserDataConverter = (_lender, chainId, account, meta) => {
34241
34602
  }
34242
34603
  return Object.keys(out).length > 0 ? out : void 0;
34243
34604
  },
34244
- totalCalls
34605
+ // The CALL count the framework hands us: one blob on the lens path, the whole
34606
+ // per-repo walk otherwise. `totalCalls` stays the SLOT count the cursor
34607
+ // arithmetic above is written against.
34608
+ viaLens ? 1 : totalCalls
34245
34609
  ];
34246
34610
  };
34247
34611
  var nowSec6 = () => Math.floor(Date.now() / 1e3);
@@ -34655,9 +35019,13 @@ var getRiverUserDataConverter = (lender, chainId, account, meta) => {
34655
35019
  const cfg = riverConfigFor(lender, chainId);
34656
35020
  const markets = riverChainData(lender, chainId)?.markets ?? [];
34657
35021
  const expected = cfg && markets.length > 0 ? markets.length * RIVER_CALLS_PER_MARKET + 1 : 0;
35022
+ const viaLens = expected > 0 && usesRiverLens(chainId);
34658
35023
  return [
34659
- (data) => {
35024
+ (raw) => {
34660
35025
  if (!cfg || expected === 0) return void 0;
35026
+ if (!raw) return void 0;
35027
+ if (viaLens && raw.length !== 1) return void 0;
35028
+ const data = viaLens ? rebuildRiverData(raw[0], markets.length) : raw;
34661
35029
  if (!data || data.length < expected) return void 0;
34662
35030
  const debtAddr = cfg.debtToken.toLowerCase();
34663
35031
  const debtDecimals = cfg.debtDecimals ?? 18;
@@ -34773,7 +35141,10 @@ var getRiverUserDataConverter = (lender, chainId, account, meta) => {
34773
35141
  });
34774
35142
  return Object.keys(out).length > 0 ? out : void 0;
34775
35143
  },
34776
- expected
35144
+ // The CALL count the framework hands us: one blob on the lens path, the
35145
+ // whole per-manager walk otherwise. `expected` stays the SLOT count the
35146
+ // cursor arithmetic above is written against.
35147
+ viaLens ? 1 : expected
34777
35148
  ];
34778
35149
  };
34779
35150
  var big9 = (v) => {
@@ -35367,9 +35738,13 @@ function fraxlendToAmount(shares, totalAmount, totalShares, roundUp) {
35367
35738
  var getFraxlendUserDataConverter = (lender, chainId, account, meta) => {
35368
35739
  const pairs = fraxlendPairsFor(lender, chainId);
35369
35740
  const expected = pairs.length * FRAXLEND_CALLS_PER_PAIR;
35741
+ const viaLens = expected > 0 && usesFraxlendLens(chainId);
35370
35742
  return [
35371
- (data) => {
35743
+ (raw) => {
35372
35744
  if (expected === 0) return void 0;
35745
+ if (!raw) return void 0;
35746
+ if (viaLens && raw.length !== 1) return void 0;
35747
+ const data = viaLens ? rebuildFraxlendData(raw[0], pairs.length) : raw;
35373
35748
  if (!data || data.length < expected) return void 0;
35374
35749
  const out = {};
35375
35750
  pairs.forEach((pair, i) => {
@@ -35498,7 +35873,9 @@ var getFraxlendUserDataConverter = (lender, chainId, account, meta) => {
35498
35873
  });
35499
35874
  return Object.keys(out).length > 0 ? out : void 0;
35500
35875
  },
35501
- expected
35876
+ // One blob on the lens path, the whole per-pair walk otherwise. `expected`
35877
+ // stays the SLOT count the cursor arithmetic above is written against.
35878
+ viaLens ? 1 : expected
35502
35879
  ];
35503
35880
  };
35504
35881
  var WAD14 = 10n ** 18n;
@@ -75897,6 +76274,6 @@ function earnPositionTotals(items) {
75897
76274
  };
75898
76275
  }
75899
76276
 
75900
- export { ApiBookSource, DEFAULT_MIDNIGHT_API, DEFAULT_OUTLIER_GUARD, DEFAULT_PROFILE_ID, DEFAULT_STALE_REJECT_SECONDS, DEFAULT_TERMMAX_API, DEFAULT_TERM_ORDER_STORE, EARN_DESCRIPTIONS, EARN_LABELS, EMPTY_BALANCE, EXACTLY_LENDER_KEY, FRACTION_RATE_PROVIDERS, 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, MULTICALL_FAILURE, MaxParamThresholds, PASSTHROUGH_RATE_EPSILON, PENDLE_ASSETS_URL, PENDLE_CHAIN_IDS, PENDLE_MARKETS_URL, SDK_FRACTION_RATE_PROVIDERS, SPECTRA_NETWORKS, SPECTRA_RATE_MAX_PERCENT, SPECTRA_RATE_MIN_PERCENT, STABLECOIN_SYMBOLS, STCELO_MANAGER_ADDRESS, TELLER_CALLS_PER_BID, DECIMAL_BASE as TERMMAX_DECIMAL_BASE, TERMMAX_LIQUIDATION_PENALTY, TERMMAX_LIQUIDATION_WINDOW_SECS, TERMMAX_LIQUIDATOR_BONUS, TERMMAX_MARKETS_PER_CALL, TERMMAX_PARTIAL_CLOSE_FACTOR, TERMMAX_PARTIAL_LIQUIDATION_THRESHOLD_USD, TERM_ADAPTERS, TERM_PROFILES, TERM_SHEET_SCHEMA_VERSION, TermMaxApiSource, TermSubgraphSource, UPSHIFT_CHAIN_IDS, UPSHIFT_VAULTS_URL, VAULT_PROVIDERS, VAULT_PROVIDER_PROFILE, VAULT_PROVIDER_TRAITS, VAULT_SHARE_PRICE_PROBE, VAULT_VENUE_PREFIX, VOLATILE_VAULT_OVERRIDES, YEARN_CHAIN_IDS, YEARN_YDAEMON_BASE, __resetResupplyUserCaches, accountDepositListKey, accountWithdrawalListKey, appendSnapshot, applyPositionDelta, attachImplications, attachPricesToFlashLiquidity, borrowDescription, borrowFindings, borrowHeadline, buildExposures2 as buildExposures, buildFluidFTokensCall, buildLendingPositionUid, buildLiquityUserCall, buildLoopResult, buildMorphoTypeCall, buildMorphoTypeUserCallWithLens, buildPortfolioTotals, buildSumerAccumulators, buildSummaries, buildTellerUserCall, buildTermMaxUserCall, buildTermSheet, buildTermSheetsForGroup, buildVaultEarnUid, buildVaultLookup, buildVaultTermSheet, calculateLeverage, calculateNetApr, calculateOverallNetApr, calculateWeightedAverage, classifyFreshness, classifyReliability, classifyVault, clearPendleMarketsCache, clearSpectraMarketsCache, collateralSymbolsByVenue, 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, convertCoolerMarketsToResponse, convertDssMarketsToResponse, convertExactlyMarketsToResponse, convertFrankencoinMarketsToResponse, convertFraxlendPairsToResponse, convertInverseMarketsToResponse, convertLenderUserDataResult, convertLiquityMarketsToResponse, convertLlamaLendMarketsToResponse, convertResupplyMarketsToResponse, convertRiverMarketsToResponse, convertTellerMarketsToResponse, convertTermMarketsToResponse, convertTermMaxMarketsToResponse, convertUsddMarketsToResponse, createMarketUid, createMidnightBookSource, createMulticallRpcCall, createRawRpcCalls, createTermBookSource, createTermMaxDataSource, decodeListaMarkets, decodeMarkets, decodePackedListaUserDataset, decodePackedMorphoUserDataset, deriveBorrowTags, deriveSupplyTags, detectInterfaceKinds, dexResolverFor, disambiguateEarnNames, dssIlkBytes32, dssKeyParts, dssLenderKey, duration, earnDescription, earnLabel, earnMarketFromPool, earnMarketFromVault, earnMarketLabel, earnPositionFromLenderEntry, earnPositionFromVaultBalance, earnPositionTotals, earnRowSubtitle, earnUidFromMarketUid, earnVaultTerms, earnVenueKind, encodeBalanceFetcherCalldata, enrichTermSheet, enrichmentIndexFromRows, exactlyPairLtv, exactlyPenaltyRateToAprPercent, exactlyWadRateToPercent, feePhrase, feedKeyOf, feedStatKey, fetchCoolerMarkets, fetchDolomiteAccountNumbers, fetchDssMarkets, fetchEulerEarnVaults, fetchEulerEarnVaultsFromSubgraph, fetchEulerSubAccountIndexes, fetchExactlyMarkets, fetchFlashLiquidityForChain, fetchFluidDexState, fetchFluidFTokens, fetchFrankencoinMarkets, fetchFraxlendPairs, fetchGeneralYields, fetchGeneralYieldsByMarketUid, fetchGmxExecutionFees, fetchGmxTickerPrices, fetchGmxVaults, fetchHypercoreVaults, fetchInverseMarkets, fetchLagoonApiVaults, fetchLagoonVaults, fetchLiquityMarkets, fetchListaVaultsFromChain, fetchLlamaLendMarkets, fetchMorphoUserBalances, fetchMorphoUserPositionMarkets, fetchMorphoVaults, fetchMorphoVaultsFromApi, fetchMorphoVaultsFromChain, fetchOraclePrices, fetchPendleApiAssets, fetchPendleApiMarkets, fetchPendlePrices, fetchPendlePtMarkets, fetchResupplyMarkets, fetchRiverMarkets, fetchSiloVaults, fetchSpectraApiMarkets, fetchSpectraPtMarkets, fetchTellerMarkets, fetchTermMarkets, fetchTermMaxMarkets, fetchTermStoreOrders, fetchTokenBalances, fetchTokenMetadata, fetchUpshiftApiVaults, fetchUpshiftVaults, fetchUsddMarkets, fetchYearnApiVaults, fetchYearnVaults, fillableRemaining, filterActiveLenders, filterLendersByProtocol, finalizeInfo, findingsFor, formatRaw, frankencoinKeyParts, frankencoinLenderKey, fraxlendAssetPerCollateral, fraxlendKeyParts, fraxlendLenderKey, fuseLenderData, generateLendingPools, getAavesForChain, getAssetConfig, getBalanceForMarketUid, getBorrowCapacity, getCachedFluidDexState, 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, getReadFailurePolicy, getResolvedDolomiteAccountNumbers, getStCeloValidatorGroups, getSubAccountAddress, getSubAccountIndex, getTermProfile, getVaultPublicDataAll, getVaultWithdrawalRequests, hasCritical, hasEulerEarnVaultSubgraph, hasLagoonVaults, hasMorphoPositionIndex, hasMorphoUserApi, hasMorphoUserSubgraph, hasPendleMarkets, hasSpectraMarkets, hasUpshiftVaults, hasYearnVaults, ilkToKeySegment, implausibleRatePercent, inverseKeyParts, inverseLenderKey, isBoundNeed, isFailedCall, isIlliquid, isLendingPosition, isLiveMarket as isLivePendleMarket, isLiveSpectraMarket, isSecondaryMarketOnly, isStablecoinSymbol, isVaultPosition, isVaultVenue, isYearnV3, keySegmentToIlk, keysFromMaps, lenderApiOnly, lenderFamily, liquityCandidateTroveIds, liquityKeyParts, liquityLenderKey, llamaLendKeyParts, llamaLendLenderKey, meetsLiquidityFloor, mergeDeep, multicall3Abi2 as multicall3Abi, nanTo, needsLenderApproval, needsTokenApproval, noOpResult, normalizeToBytes, parseBalanceFetcherResult, parseEarnUid, parseMergedResult, parseMulticallRpcResponses, parseExpirySeconds as parsePendleExpirySeconds, parseRawRpcBatchResponses, parseRawRpcResponses, parseCurveFee as parseSpectraCurveFee, parsePtRate as parseSpectraPtRate, parseTermMaxLtv, parseTokenBalanceResult, pct, assetKey as pendleAssetKey, pickPool as pickSpectraPool, positivePart2 as positivePart, predictInverseEscrow, prepareLenderUserDataRpcCalls, prepareMergedMulticallParams, prepareMergedRpcCalls, prepareMulticallInputs, prepareTokenBalanceRpcCalls, priceGlvVaults, priceGmMarkets, probeAaveFeedTimestamps, pruneFeedStats, rankFindings, ratePercent, readVaultSharePrices, rejectOutliers as rejectPriceOutliers, resolveAdapter, resolveDerivation, resolveEarnIdentity, resolveModeConfig, resolveStCeloDepositGroup, resolveVaultProfileId, resupplyKeyParts, resupplyLenderKey, resupplyMarketLabel, riverKeyParts, riverLenderKey, sanePercent as saneSpectraPercent, savingsAddresses, savingsBalanceKind, secondaryMarketVault, selectAssetGroupPrices, shortDate, spectraAddress, spectraNetwork, spectraPoolsUrl, splitChainScopedAddress as splitPendleChainScopedAddress, stampCapabilities, stampEarnSubtitles, stampVaultClassification, stampVaultTermSheets, stripLeadingBrand, supplyDescription, supplyFindings, supplyHeadline, swapRoutedProvidersArePriceConsistent, tellerBpsToPercent, tellerImpliedLtv, tellerLenderKey, tellerPoolFromLenderKey, termApiBaseUrl, 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, termOfferRateToAprPct, termOrderStoreBaseUrl, tickToAprNumber, tickToPrice, toDigest, toTermFillNow, toTermSheetInput, toVaultTermInput, trancheFromCounterparty, tryParseEarnUid, unflattenLenderData, updateFeedStats, usdValue, usddIlkBytes32, usddKeyParts, usddLenderKey, validateTermSheet, validateTermSheets, validateUserData, vaultSharesToAssets, vaultTermInputFromEarnMarket, vaultTermInputFromSourceRow, vaultTraits, vaultVenue, venueBrand, venueBrandKey, withMaturityLabel, withTrancheLabel };
76277
+ export { ApiBookSource, DEFAULT_MIDNIGHT_API, DEFAULT_OUTLIER_GUARD, DEFAULT_PROFILE_ID, DEFAULT_STALE_REJECT_SECONDS, DEFAULT_TERMMAX_API, DEFAULT_TERM_ORDER_STORE, EARN_DESCRIPTIONS, EARN_LABELS, EMPTY_BALANCE, EXACTLY_LENDER_KEY, FRACTION_RATE_PROVIDERS, 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, MULTICALL_FAILURE, MaxParamThresholds, PASSTHROUGH_RATE_EPSILON, PENDLE_ASSETS_URL, PENDLE_CHAIN_IDS, PENDLE_MARKETS_URL, SDK_FRACTION_RATE_PROVIDERS, SPECTRA_NETWORKS, SPECTRA_RATE_MAX_PERCENT, SPECTRA_RATE_MIN_PERCENT, STABLECOIN_SYMBOLS, STCELO_MANAGER_ADDRESS, TELLER_CALLS_PER_BID, DECIMAL_BASE as TERMMAX_DECIMAL_BASE, TERMMAX_LIQUIDATION_PENALTY, TERMMAX_LIQUIDATION_WINDOW_SECS, TERMMAX_LIQUIDATOR_BONUS, TERMMAX_MARKETS_PER_CALL, TERMMAX_PARTIAL_CLOSE_FACTOR, TERMMAX_PARTIAL_LIQUIDATION_THRESHOLD_USD, TERM_ADAPTERS, TERM_PROFILES, TERM_SHEET_SCHEMA_VERSION, TermMaxApiSource, TermSubgraphSource, UPSHIFT_CHAIN_IDS, UPSHIFT_VAULTS_URL, VAULT_PROVIDERS, VAULT_PROVIDER_PROFILE, VAULT_PROVIDER_TRAITS, VAULT_SHARE_PRICE_PROBE, VAULT_VENUE_PREFIX, VOLATILE_VAULT_OVERRIDES, YEARN_CHAIN_IDS, YEARN_YDAEMON_BASE, __resetResupplyUserCaches, accountDepositListKey, accountWithdrawalListKey, appendSnapshot, applyPositionDelta, attachImplications, attachPricesToFlashLiquidity, borrowDescription, borrowFindings, borrowHeadline, buildExposures2 as buildExposures, buildFluidFTokensCall, buildLendingPositionUid, buildLiquityUserCall, buildLoopResult, buildMorphoTypeCall, buildMorphoTypeUserCallWithLens, buildPortfolioTotals, buildSumerAccumulators, buildSummaries, buildTellerUserCall, buildTermMaxUserCall, buildTermSheet, buildTermSheetsForGroup, buildVaultEarnUid, buildVaultLookup, buildVaultTermSheet, calculateLeverage, calculateNetApr, calculateOverallNetApr, calculateWeightedAverage, classifyFreshness, classifyReliability, classifyVault, clearPendleMarketsCache, clearSpectraMarketsCache, collateralSymbolsByVenue, 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, convertCoolerMarketsToResponse, convertDssMarketsToResponse, convertExactlyMarketsToResponse, convertFrankencoinMarketsToResponse, convertFraxlendPairsToResponse, convertInverseMarketsToResponse, convertLenderUserDataResult, convertLiquityMarketsToResponse, convertLlamaLendMarketsToResponse, convertResupplyMarketsToResponse, convertRiverMarketsToResponse, convertTellerMarketsToResponse, convertTermMarketsToResponse, convertTermMaxMarketsToResponse, convertUsddMarketsToResponse, createMarketUid, createMidnightBookSource, createMulticallRpcCall, createRawRpcCalls, createTermBookSource, createTermMaxDataSource, decodeListaMarkets, decodeMarkets, decodePackedListaUserDataset, decodePackedMorphoUserDataset, deriveBorrowTags, deriveSupplyTags, detectInterfaceKinds, dexResolverFor, disambiguateEarnNames, dssIlkBytes32, dssKeyParts, dssLenderKey, duration, earnDescription, earnLabel, earnMarketFromPool, earnMarketFromVault, earnMarketLabel, earnPositionFromLenderEntry, earnPositionFromVaultBalance, earnPositionTotals, earnRowSubtitle, earnUidFromMarketUid, earnVaultTerms, earnVenueKind, encodeBalanceFetcherCalldata, enrichTermSheet, enrichmentIndexFromRows, exactlyPairLtv, exactlyPenaltyRateToAprPercent, exactlyWadRateToPercent, feePhrase, feedKeyOf, feedStatKey, fetchCoolerMarkets, fetchDolomiteAccountNumbers, fetchDssMarkets, fetchEulerEarnVaults, fetchEulerEarnVaultsFromSubgraph, fetchEulerSubAccountIndexes, fetchExactlyMarkets, fetchFlashLiquidityForChain, fetchFluidDexState, fetchFluidFTokens, fetchFrankencoinMarkets, fetchFraxlendPairs, fetchGeneralYields, fetchGeneralYieldsByMarketUid, fetchGmxExecutionFees, fetchGmxTickerPrices, fetchGmxVaults, fetchHypercoreVaults, fetchInverseMarkets, fetchLagoonApiVaults, fetchLagoonVaults, fetchLiquityMarkets, fetchListaVaultsFromChain, fetchLlamaLendMarkets, fetchMorphoUserBalances, fetchMorphoUserPositionMarkets, fetchMorphoVaults, fetchMorphoVaultsFromApi, fetchMorphoVaultsFromChain, fetchOraclePrices, fetchPendleApiAssets, fetchPendleApiMarkets, fetchPendlePrices, fetchPendlePtMarkets, fetchResupplyMarkets, fetchRiverMarkets, fetchSiloVaults, fetchSpectraApiMarkets, fetchSpectraPtMarkets, fetchTellerMarkets, fetchTermMarkets, fetchTermMaxMarkets, fetchTermStoreOrders, fetchTokenBalances, fetchTokenMetadata, fetchUpshiftApiVaults, fetchUpshiftVaults, fetchUsddMarkets, fetchYearnApiVaults, fetchYearnVaults, fillableRemaining, filterActiveLenders, filterLendersByProtocol, finalizeInfo, findingsFor, formatRaw, frankencoinKeyParts, frankencoinLenderKey, fraxlendAssetPerCollateral, fraxlendKeyParts, fraxlendLenderKey, fuseLenderData, generateLendingPools, getAavesForChain, getAssetConfig, getBalanceForMarketUid, getBorrowCapacity, getCachedFluidDexState, 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, getReadFailurePolicy, getResolvedDolomiteAccountNumbers, getStCeloValidatorGroups, getSubAccountAddress, getSubAccountIndex, getTermProfile, getVaultPublicDataAll, getVaultWithdrawalRequests, hasCritical, hasEulerEarnVaultSubgraph, hasLagoonVaults, hasMorphoPositionIndex, hasMorphoUserApi, hasMorphoUserSubgraph, hasPendleMarkets, hasSpectraMarkets, hasUpshiftVaults, hasYearnVaults, ilkToKeySegment, implausibleRatePercent, inverseKeyParts, inverseLenderKey, isBoundNeed, isFailedCall, isIlliquid, isLendingPosition, isLiveMarket as isLivePendleMarket, isLiveSpectraMarket, isSecondaryMarketOnly, isStablecoinSymbol, isVaultPosition, isVaultVenue, isYearnV3, keySegmentToIlk, keysFromMaps, lenderApiOnly, lenderFamily, liquityCandidateTroveIds, liquityKeyParts, liquityLenderKey, llamaLendKeyParts, llamaLendLenderKey, meetsLiquidityFloor, mergeDeep, multicall3Abi2 as multicall3Abi, nanTo, needsLenderApproval, needsTokenApproval, noOpResult, normalizeToBytes, organizeUserQueries, parseBalanceFetcherResult, parseEarnUid, parseMergedResult, parseMulticallRpcResponses, parseExpirySeconds as parsePendleExpirySeconds, parseRawRpcBatchResponses, parseRawRpcResponses, parseCurveFee as parseSpectraCurveFee, parsePtRate as parseSpectraPtRate, parseTermMaxLtv, parseTokenBalanceResult, pct, assetKey as pendleAssetKey, pickPool as pickSpectraPool, positivePart2 as positivePart, predictInverseEscrow, prepareLenderUserDataRpcCalls, prepareMergedMulticallParams, prepareMergedRpcCalls, prepareMulticallInputs, prepareTokenBalanceRpcCalls, priceGlvVaults, priceGmMarkets, probeAaveFeedTimestamps, pruneFeedStats, rankFindings, ratePercent, readVaultSharePrices, rejectOutliers as rejectPriceOutliers, resolveAdapter, resolveDerivation, resolveEarnIdentity, resolveModeConfig, resolveStCeloDepositGroup, resolveVaultProfileId, resupplyKeyParts, resupplyLenderKey, resupplyMarketLabel, riverKeyParts, riverLenderKey, sanePercent as saneSpectraPercent, savingsAddresses, savingsBalanceKind, secondaryMarketVault, selectAssetGroupPrices, shortDate, spectraAddress, spectraNetwork, spectraPoolsUrl, splitChainScopedAddress as splitPendleChainScopedAddress, stampCapabilities, stampEarnSubtitles, stampVaultClassification, stampVaultTermSheets, stripLeadingBrand, supplyDescription, supplyFindings, supplyHeadline, swapRoutedProvidersArePriceConsistent, tellerBpsToPercent, tellerImpliedLtv, tellerLenderKey, tellerPoolFromLenderKey, termApiBaseUrl, 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, termOfferRateToAprPct, termOrderStoreBaseUrl, tickToAprNumber, tickToPrice, toDigest, toTermFillNow, toTermSheetInput, toVaultTermInput, trancheFromCounterparty, tryParseEarnUid, unflattenLenderData, updateFeedStats, usdValue, usddIlkBytes32, usddKeyParts, usddLenderKey, validateTermSheet, validateTermSheets, validateUserData, vaultSharesToAssets, vaultTermInputFromEarnMarket, vaultTermInputFromSourceRow, vaultTraits, vaultVenue, venueBrand, venueBrandKey, withMaturityLabel, withTrancheLabel };
75901
76278
  //# sourceMappingURL=index.js.map
75902
76279
  //# sourceMappingURL=index.js.map