@1delta/margin-fetcher 5.0.110 → 5.0.112

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
@@ -5,7 +5,7 @@ import { Lender, isExactly, isMidnight, isTerm, isTermMax, isTeller, isListaDao,
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, flyingTulipLendersByChain, liquityLendersByChain, riverLendersByChain, inverseLendersByChain, coolerLendersByChain, llamaLendLendersByChain, usddLendersByChain, skyLendersByChain, frankencoinLendersByChain, resupplyLendersByChain, curvanceLendersByChain, fraxlendLendersByChain, twyneLendersByChain, tellerConfigByChain, tellerPoolsByChain, termMaxConfigByChain, aaveReserves, compoundV3Reserves, dolomiteIsolationMarket, morphoTypeMarkets, resolveTermApiBase, flyingTulipConfigFor, flyingTulipAssetsFor, liquityConfigFor, liquityBranchesByChain, riverConfigFor, riverChainData, termMaxApiBaseUrl, termMaxLenderKey, inverseConfigFor, inverseChainData, coolerConfigFor, llamaLendConfigFor, llamaLendChainData, llamaLendApiBaseUrl, resupplyConfigFor, fraxlendConfigFor, dssConfigFor, dssChainData, dssDebtToken, dssDebtJoin, frankencoinConfigFor, frankencoinChainData, aaveTokens, compoundV3BaseData, compoundV2TokenArray, morphoTypeVaults, eulerConfigs, fluidVaultEntries, gearboxMarketConfigurators, dolomiteIsolation, liquityMarkets, riverMarkets, tellerConfig, tellerPools, termMarkets, termMaxConfig, midnightMarkets, midnightCollateralRef, llamaLendMarkets, fraxlendPairsFor, inverseMarkets, curvanceConfig, frankencoinMarkets, twyneMarkets, twyneConfigFor, exactlyMarkets, aaveOracles, resolveMidnightApiBase, llamaLendMarketByVault, getSiloV2MarketEntry, getSiloV3MarketEntry, dolomiteEmode, curvanceConfigFor, listaCollateralProvider, gearboxMarketCompressor, gearboxV3LenderKey, midnightMarketsByChain, twyneChainData, parseAaveV4SpokeLenderKey, gearboxAccountCompressor, compoundV2Tokens, exactlyMarketsByChain, aaveOraclesConfig, compoundV2Oracles, compoundV2OraclesConfig, compoundV3OraclesData, compoundV2Reserves, aaveV4Oracles, morphoTypeOracles } from '@1delta/data-sdk';
7
7
  import lodash from 'lodash';
8
- import { Chain, isEvmChainId, isSvmChainId } from '@1delta/chain-registry';
8
+ import { Chain, isEvmChainId, isRetiredChain, isSvmChainId } from '@1delta/chain-registry';
9
9
  import { multicallRetryUniversal, getEvmClient, getEvmChain, createMulticallRetryUniversal, LIST_OVERRIDES, getEvmClientUniversal } from '@1delta/providers';
10
10
  import { LiquityTroveManagerAbi, LiquityActivePoolAbi, LiquityStabilityPoolAbi, LiquityPriceFeedAbi, LiquitySortedTrovesAbi, RiverTroveManagerAbi, RiverStabilityPoolAbi, TellerMarketRegistryAbi, TellerV2Abi, InverseMarketAbi, InverseOracleAbi, InverseDbrAbi, CurveTricryptoOracleAbi, Erc20Abi, CoolerMonoAbi, CoolerLtvOracleAbi, LlamaLendControllerAbi, LlamaLendControllerV1Abi, LlamaLendControllerV2Abi, LlamaLendVaultAbi, LlamaLendAmmAbi, TwyneCollateralVaultAbi, MetaMorphoAbi, FluidDexResolverAbi, ExactlyPreviewerAbi, ExactlyAuditorAbi, FlyingTulipLendingLensAbi, LenderCommitmentGroupAbi, ResupplyRegistryAbi, ResupplyPairAbi, ResupplyUtilitiesAbi, ResupplyRewardHandlerAbi, ResupplyPairEmissionsAbi, ConvexPoolUtilAbi, FraxlendPairAbi, FraxlendLeverAbi, FrankencoinPositionAbi, FluidLendingResolverAbi, FluidVaultResolverAbi, FluidLiquidityResolverAbi, MoolahVaultAbi, UsddVatAbi, UsddJugAbi, UsddSpotAbi, MorphoLensAbi, AaveV4SpokeAbi, AaveV4OracleAbi, AaveV4HubAbi, DolomiteMarginAbi, GearboxMarketCompressorV310Abi, MorphoBlueAbi, MidnightAbi, TermRepoTokenAbi, TermRepoServicerAbi, TermRepoCollateralManagerAbi, LiquityTroveNFTAbi, LiquityCollSurplusPoolAbi, TellerCollateralManagerAbi, TermMaxViewerAbi, InverseEscrowAbi, CurvanceMarketManagerAbi, CurvanceCTokenAbi, GearboxCreditAccountCompressorV310Abi, TwyneVaultManagerAbi, TwyneCollateralVaultFactoryAbi, AaveV2V3Abi, TwyneATokenWrapperAbi, UsddCdpManagerAbi, UsddProxyRegistryAbi, CurvanceProtocolReaderAbi, CurvanceCentralRegistryAbi, TermPriceConsumerAbi, CurvanceOracleManagerAbi, TermMaxOracleAggregatorV2Abi } from '@1delta/abis';
11
11
  export { MorphoLensAbi } from '@1delta/abis';
@@ -6390,6 +6390,7 @@ var ENABLED_EULER_V2_CHAINS = [
6390
6390
  Chain.HYPEREVM
6391
6391
  ];
6392
6392
  var getLendersForChain = (c) => {
6393
+ if (isRetiredChain(c)) return [];
6393
6394
  let lenders = [];
6394
6395
  Object.entries(aavePools() ?? {}).forEach(([l, data]) => {
6395
6396
  const chains = Object.keys(data);
@@ -10965,7 +10966,6 @@ var MORPHO_LENS = {
10965
10966
  [Chain.ROBINHOOD_CHAIN]: "0x8E24CfC19c6C00c524353CB8816f5f1c2F33c201",
10966
10967
  [Chain.STABLE_MAINNET]: "0x8E24CfC19c6C00c524353CB8816f5f1c2F33c201",
10967
10968
  [Chain.LISK]: "0x8E24CfC19c6C00c524353CB8816f5f1c2F33c201",
10968
- [Chain.ABSTRACT]: "0x8e24cfc19c6c00c524353cb8816f5f1c2f33c201",
10969
10969
  [Chain.INK]: "0x0bd7473CbBf81d9dD936c61117eD230d95006CA2",
10970
10970
  [Chain.KAIA_MAINNET]: "0x925716D57c842B50806884EDb295bA3E3A8EBdFE",
10971
10971
  // blue-api does not index these four, so the lens is the ONLY way to read
@@ -44710,6 +44710,65 @@ var rethFetcher = {
44710
44710
  }
44711
44711
  };
44712
44712
 
44713
+ // src/yields/intrinsic/fetchers/defillama.ts
44714
+ var POOLS_ENRICHED = "https://yields.llama.fi/poolsEnriched?pool=";
44715
+ var fetchDefiLlamaApy = async (poolId) => {
44716
+ const res = await fetch(POOLS_ENRICHED + poolId, {
44717
+ headers: { accept: "application/json" },
44718
+ signal: AbortSignal.timeout(8e3)
44719
+ });
44720
+ if (!res.ok) throw new Error(`DefiLlama HTTP ${res.status}`);
44721
+ const json = await res.json();
44722
+ const apy = json?.data?.[0]?.apy;
44723
+ if (typeof apy !== "number" || !Number.isFinite(apy)) {
44724
+ throw new Error(`DefiLlama: no apy for pool ${poolId}`);
44725
+ }
44726
+ return apy;
44727
+ };
44728
+
44729
+ // src/yields/intrinsic/fetchers/sanctum.ts
44730
+ var KAMINO_STAKING_YIELDS = "https://api.kamino.finance/staking-yields/tokens";
44731
+ var INF_MINT = "5oVNBeEEQvYi1cX3ir8Dx5n1P7pdxydbGF2X4TxVusJm";
44732
+ var INF_LLAMA_POOL = "3075a746-bdd1-4aac-bcd5-b035abee2622";
44733
+ var INF_KEY = "Infinity::INF::solana";
44734
+ var INF_EPOCHS = 10;
44735
+ var MAX_PLAUSIBLE_APY = 0.3;
44736
+ function meanEpochApy(rows, n = INF_EPOCHS) {
44737
+ if (!Array.isArray(rows)) return void 0;
44738
+ const ok3 = rows.map((r) => ({ epoch: Number(r?.epoch), apy: Number(r?.apy) })).filter(
44739
+ (r) => Number.isFinite(r.epoch) && Number.isFinite(r.apy) && r.apy > 0 && r.apy < MAX_PLAUSIBLE_APY
44740
+ ).sort((a, b) => b.epoch - a.epoch).slice(0, n);
44741
+ if (ok3.length === 0) return void 0;
44742
+ return ok3.reduce((s, r) => s + r.apy, 0) / ok3.length;
44743
+ }
44744
+ async function kaminoInfApy() {
44745
+ const end = /* @__PURE__ */ new Date();
44746
+ const start = new Date(end.getTime() - 30 * 864e5);
44747
+ const d = (x) => x.toISOString().slice(0, 10);
44748
+ const res = await fetch(
44749
+ `${KAMINO_STAKING_YIELDS}/${INF_MINT}/history?start=${d(start)}&end=${d(end)}`,
44750
+ {
44751
+ headers: { accept: "application/json" },
44752
+ signal: AbortSignal.timeout(8e3)
44753
+ }
44754
+ );
44755
+ if (!res.ok) throw new Error(`Kamino staking-yields HTTP ${res.status}`);
44756
+ return meanEpochApy(await res.json());
44757
+ }
44758
+ var infFetcher = {
44759
+ label: "SANCTUM_INF",
44760
+ fetch: async () => {
44761
+ const apy = await kaminoInfApy().catch((e) => {
44762
+ console.warn(`[sanctum] Kamino INF history unavailable: ${e.message}`);
44763
+ return void 0;
44764
+ });
44765
+ if (apy !== void 0) return { [INF_KEY]: apyToAprPercent(apy * 100) };
44766
+ const llama = await fetchDefiLlamaApy(INF_LLAMA_POOL);
44767
+ if (!(llama > 0) || llama >= MAX_PLAUSIBLE_APY * 100) return {};
44768
+ return { [INF_KEY]: apyToAprPercent(llama) };
44769
+ }
44770
+ };
44771
+
44713
44772
  // src/yields/intrinsic/fetchers/renzo.ts
44714
44773
  var EZETH_URL = "https://app.renzoprotocol.com/api/stats?chainId=1";
44715
44774
  var ezethFetcher = {
@@ -44719,6 +44778,41 @@ var ezethFetcher = {
44719
44778
  return { EZETH: Number(res.data.apr.data.rate) };
44720
44779
  }
44721
44780
  };
44781
+ var EZSOL_URL = "https://app.renzoprotocol.com/api/stats/ezsol";
44782
+ var KAMINO_STAKING_YIELDS2 = "https://api.kamino.finance/staking-yields/tokens";
44783
+ var EZSOL_MINT = "ezSoL6fY1PVdJcJsUpe5CM3xkfmy3zoVCABybm5WtiC";
44784
+ var JITOSOL_MINT = "J1toso1uCk3RLmjorhTtrVwY9HJ7X8V9yYac6Y7kGCPn";
44785
+ var EZSOL_KEY = "Renzo Restaked SOL::ezSOL::solana";
44786
+ var MAX_PLAUSIBLE_APR = 30;
44787
+ var ok2 = (x) => Number.isFinite(x) && x > 0 && x < MAX_PLAUSIBLE_APR;
44788
+ async function kaminoEpochApy(mint) {
44789
+ const end = /* @__PURE__ */ new Date();
44790
+ const start = new Date(end.getTime() - 30 * 864e5);
44791
+ const d = (x) => x.toISOString().slice(0, 10);
44792
+ const res = await fetch(
44793
+ `${KAMINO_STAKING_YIELDS2}/${mint}/history?start=${d(start)}&end=${d(end)}`,
44794
+ { signal: AbortSignal.timeout(8e3) }
44795
+ );
44796
+ if (!res.ok) throw new Error(`Kamino staking-yields HTTP ${res.status}`);
44797
+ return meanEpochApy(await res.json());
44798
+ }
44799
+ var ezsolFetcher = {
44800
+ label: "EZSOL",
44801
+ fetch: async () => {
44802
+ const issuer = await fetch(EZSOL_URL, { signal: AbortSignal.timeout(8e3) }).then((r) => r.json()).then((r) => Number(r?.data?.apr?.data)).catch((e) => {
44803
+ console.warn(`[renzo] ezSOL APR unavailable: ${e.message}`);
44804
+ return NaN;
44805
+ });
44806
+ if (ok2(issuer)) return { [EZSOL_KEY]: issuer };
44807
+ const [jito, vrt] = await Promise.all([
44808
+ kaminoEpochApy(JITOSOL_MINT).catch(() => void 0),
44809
+ kaminoEpochApy(EZSOL_MINT).catch(() => void 0)
44810
+ ]);
44811
+ if (jito === void 0 || vrt === void 0) return {};
44812
+ const apr = apyToAprPercent(jito * 100) + apyToAprPercent(vrt * 100);
44813
+ return ok2(apr) ? { [EZSOL_KEY]: apr } : {};
44814
+ }
44815
+ };
44722
44816
 
44723
44817
  // src/yields/intrinsic/fetchers/kelp.ts
44724
44818
  var RSETH_URL = "https://universe.kelpdao.xyz/rseth/totalApy";
@@ -44886,22 +44980,6 @@ var createTruFinFetcher = (staker, yieldKey) => ({
44886
44980
  var trumaticFetcher = createTruFinFetcher("MATIC", "TRUMATIC");
44887
44981
  var trupolFetcher = createTruFinFetcher("POL", "TRUPOL");
44888
44982
 
44889
- // src/yields/intrinsic/fetchers/defillama.ts
44890
- var POOLS_ENRICHED = "https://yields.llama.fi/poolsEnriched?pool=";
44891
- var fetchDefiLlamaApy = async (poolId) => {
44892
- const res = await fetch(POOLS_ENRICHED + poolId, {
44893
- headers: { accept: "application/json" },
44894
- signal: AbortSignal.timeout(8e3)
44895
- });
44896
- if (!res.ok) throw new Error(`DefiLlama HTTP ${res.status}`);
44897
- const json = await res.json();
44898
- const apy = json?.data?.[0]?.apy;
44899
- if (typeof apy !== "number" || !Number.isFinite(apy)) {
44900
- throw new Error(`DefiLlama: no apy for pool ${poolId}`);
44901
- }
44902
- return apy;
44903
- };
44904
-
44905
44983
  // src/yields/intrinsic/fetchers/kinetiq.ts
44906
44984
  var KHYPE_POOL_ID = "9f25a954-db87-4bb2-a8b2-4be0b843a44c";
44907
44985
  var KHYPE_KEY = "Kinetiq Staked HYPE::kHYPE";
@@ -45252,31 +45330,23 @@ var stKaiaFetcher = {
45252
45330
  }
45253
45331
  }
45254
45332
  };
45255
- var HISTORY_URL = "https://api.lista.org/api/datachart/history";
45333
+ var YIELD_APY_URL = "https://api.lista.org/v1/stakes/yield-apy";
45256
45334
  var SLISBNB = "Lista Staked BNB::slisBNB";
45257
- var DAY_SECONDS2 = 86400;
45258
- var LOOKBACK_SECONDS = 14 * DAY_SECONDS2;
45259
45335
  var TIMEOUT_MS = 8e3;
45260
45336
  var slisBnbFetcher = {
45261
45337
  label: "SLISBNB",
45262
45338
  fetch: async () => {
45263
- const nowSec9 = Math.floor(Date.now() / 1e3);
45264
- const url = `${HISTORY_URL}?name=slisBNBRate&cycle=1&startTime=${nowSec9 - LOOKBACK_SECONDS}&endTime=${nowSec9}`;
45265
45339
  const controller = new AbortController();
45266
45340
  const timer = setTimeout(() => controller.abort(), TIMEOUT_MS);
45267
45341
  try {
45268
- const res = await fetch(url, {
45342
+ const res = await fetch(YIELD_APY_URL, {
45269
45343
  method: "GET",
45270
45344
  headers: { Accept: "application/json" },
45271
45345
  signal: controller.signal
45272
45346
  }).then((r) => r.json());
45273
- const points = res.data ?? [];
45274
- if (points.length === 0) return { [SLISBNB]: 0 };
45275
- const latest = points.reduce(
45276
- (a, b) => b.chartTime > a.chartTime ? b : a
45277
- );
45278
- const apr = Number(latest.amount);
45279
- return { [SLISBNB]: Number.isFinite(apr) && apr > 0 ? apr : 0 };
45347
+ const apy = Number(res.data?.staking?.month3Apy);
45348
+ if (!Number.isFinite(apy) || apy <= 0) return {};
45349
+ return { [SLISBNB]: apyToAprPercent(apy * 100) };
45280
45350
  } finally {
45281
45351
  clearTimeout(timer);
45282
45352
  }
@@ -46038,7 +46108,7 @@ var fraxSavingsFetcher = {
46038
46108
  };
46039
46109
 
46040
46110
  // src/yields/intrinsic/fetchers/binance.ts
46041
- var HISTORY_URL2 = "https://www.binance.com/bapi/earn/v1/public/pos/cftoken/project/exchange-rate/history";
46111
+ var HISTORY_URL = "https://www.binance.com/bapi/earn/v1/public/pos/cftoken/project/exchange-rate/history";
46042
46112
  var WBETH = "Wrapped Binance Beacon ETH::wBETH";
46043
46113
  var LLAMA_POOL = "80b8bf92-b953-4c20-98ea-c9653ef2bb98";
46044
46114
  var DAY_MS = 864e5;
@@ -46048,7 +46118,7 @@ var wbethFetcher = {
46048
46118
  label: "WBETH",
46049
46119
  fetch: async () => {
46050
46120
  const now = Date.now();
46051
- const url = `${HISTORY_URL2}?startTime=${now - LOOKBACK_MS}&endTime=${now}`;
46121
+ const url = `${HISTORY_URL}?startTime=${now - LOOKBACK_MS}&endTime=${now}`;
46052
46122
  try {
46053
46123
  const res = await fetch(url, {
46054
46124
  method: "GET",
@@ -47994,7 +48064,7 @@ var HASTRA_TOKEN_KEYS = {
47994
48064
  prime: HASTRA_PRIME_KEY,
47995
48065
  auto: HASTRA_AUTO_KEY
47996
48066
  };
47997
- var MAX_PLAUSIBLE_APR = 50;
48067
+ var MAX_PLAUSIBLE_APR2 = 50;
47998
48068
  function parseHastraPor(res) {
47999
48069
  const tokens = res?.demo_prime_card?.tokens;
48000
48070
  const out = {};
@@ -48003,7 +48073,7 @@ function parseHastraPor(res) {
48003
48073
  const key3 = HASTRA_TOKEN_KEYS[String(t?.token ?? "").toLowerCase()];
48004
48074
  if (!key3) continue;
48005
48075
  const apr = Number(t?.effective_rate);
48006
- if (Number.isFinite(apr) && apr > 0 && apr < MAX_PLAUSIBLE_APR)
48076
+ if (Number.isFinite(apr) && apr > 0 && apr < MAX_PLAUSIBLE_APR2)
48007
48077
  out[key3] = apr;
48008
48078
  }
48009
48079
  return out;
@@ -49160,6 +49230,22 @@ var ethZeroFetcher = {
49160
49230
  return { [ethZero]: Number(res?.rewards[0]?.apr ?? 0) * 100 };
49161
49231
  }
49162
49232
  };
49233
+ var USUAL_TOKEN = "0xc4441c2be5d8fa8126822b9929ca0b81ea0de38e";
49234
+ var fetchBusd0UsualPerDay = async () => {
49235
+ try {
49236
+ const res = await fetch(USDZEROPLUS_URL, {
49237
+ method: "GET",
49238
+ headers: { Accept: "application/json" }
49239
+ }).then((r) => r.json());
49240
+ const leg = res?.rewards?.find(
49241
+ (r) => r.rewardToken?.toLowerCase() === USUAL_TOKEN
49242
+ );
49243
+ const rate = Number(leg?.rate);
49244
+ return Number.isFinite(rate) && rate >= 0 ? rate : void 0;
49245
+ } catch {
49246
+ return void 0;
49247
+ }
49248
+ };
49163
49249
  var CHAIN_ID14 = Chain.ETHEREUM_MAINNET;
49164
49250
  var HUMA_PST_FEED = "0x4be50be32db1510240d542f77c5b36ca0d0965e6";
49165
49251
  var HUMA_PST_KEY = "HUMA::PST";
@@ -52517,7 +52603,8 @@ var SINGLE_CHAIN_ENTRIES = {
52517
52603
  // so `solvency` stays unasserted and the reader clamps the rate to it.
52518
52604
  //
52519
52605
  // The rate is par and NEVER drifts: the yield is a USUAL reward stream
52520
- // (Usual's `rewards/rates/USD0++` API, 5.69 % at integration). The
52606
+ // (Usual's `rewards/rates/USD0++` API, ~5.6 % at integration), published
52607
+ // as `rewardsRate` with `supplyRate` 0 (`yieldLeg: 'rewards'`). The
52521
52608
  // interesting numbers are the early exits — `unlockUsd0ppFloorPrice` at
52522
52609
  // `getFloorPrice()` (0.92 → `withdrawFeeBps` 800), `unlockUSD0ppWithUsual`
52523
52610
  // at par for `calculateRequiredUsual` (2.147 USUAL per bUSD0 ≈ 2.6 % at
@@ -52547,6 +52634,32 @@ var SINGLE_CHAIN_ENTRIES = {
52547
52634
  // USUAL
52548
52635
  parUnlockTokenSymbol: "USUAL"
52549
52636
  },
52637
+ // The yield is USUAL, paid outside the share price and claimed from
52638
+ // Usual's DistributionModule against an off-chain cumulative merkle.
52639
+ // `rewardsRate` is priced on the PAR basis from the per-day emission;
52640
+ // the API's market-basis `apr` (the `yieldFetcher`) is the fallback.
52641
+ yieldLeg: "rewards",
52642
+ rewardStream: {
52643
+ token: {
52644
+ address: "0xc4441c2be5d8fa8126822b9929ca0b81ea0de38e",
52645
+ chainId: "1",
52646
+ symbol: "USUAL",
52647
+ decimals: 18
52648
+ },
52649
+ source: {
52650
+ id: "usual:busd0",
52651
+ label: "Usual \xB7 bUSD0",
52652
+ link: "https://app.usual.money/rewards",
52653
+ platform: "usual",
52654
+ refs: {
52655
+ distribution: "usual-merkle",
52656
+ claimContract: "0x75cc0c0ddd2ccafe6ec415be686267588011e36a",
52657
+ proofApi: "https://app.usual.money/api/rewards/<account>"
52658
+ }
52659
+ },
52660
+ claim: "manual",
52661
+ emissionPerSharePerDay: fetchBusd0UsualPerDay
52662
+ },
52550
52663
  yieldFetcher: usdZeroPlusFetcher,
52551
52664
  yieldKey: BUSD0_KEY
52552
52665
  },
@@ -55587,9 +55700,9 @@ function averageDataLastN(arr, n = 7) {
55587
55700
  if (last.length === 0) return 0;
55588
55701
  return last.reduce((sum3, x) => sum3 + x.data, 0) / last.length;
55589
55702
  }
55590
- var safeFetch = async (label, fn) => {
55703
+ var safeFetch = async (label, fn2) => {
55591
55704
  try {
55592
- return await fn();
55705
+ return await fn2();
55593
55706
  } catch (e) {
55594
55707
  console.error(`Error fetching ${label}:`, e);
55595
55708
  return void 0;
@@ -55707,49 +55820,6 @@ var onycFetcher = {
55707
55820
  }
55708
55821
  };
55709
55822
 
55710
- // src/yields/intrinsic/fetchers/sanctum.ts
55711
- var KAMINO_STAKING_YIELDS = "https://api.kamino.finance/staking-yields/tokens";
55712
- var INF_MINT = "5oVNBeEEQvYi1cX3ir8Dx5n1P7pdxydbGF2X4TxVusJm";
55713
- var INF_LLAMA_POOL = "3075a746-bdd1-4aac-bcd5-b035abee2622";
55714
- var INF_KEY = "Infinity::INF::solana";
55715
- var INF_EPOCHS = 10;
55716
- var MAX_PLAUSIBLE_APY = 0.3;
55717
- function meanEpochApy(rows, n = INF_EPOCHS) {
55718
- if (!Array.isArray(rows)) return void 0;
55719
- const ok2 = rows.map((r) => ({ epoch: Number(r?.epoch), apy: Number(r?.apy) })).filter(
55720
- (r) => Number.isFinite(r.epoch) && Number.isFinite(r.apy) && r.apy > 0 && r.apy < MAX_PLAUSIBLE_APY
55721
- ).sort((a, b) => b.epoch - a.epoch).slice(0, n);
55722
- if (ok2.length === 0) return void 0;
55723
- return ok2.reduce((s, r) => s + r.apy, 0) / ok2.length;
55724
- }
55725
- async function kaminoInfApy() {
55726
- const end = /* @__PURE__ */ new Date();
55727
- const start = new Date(end.getTime() - 30 * 864e5);
55728
- const d = (x) => x.toISOString().slice(0, 10);
55729
- const res = await fetch(
55730
- `${KAMINO_STAKING_YIELDS}/${INF_MINT}/history?start=${d(start)}&end=${d(end)}`,
55731
- {
55732
- headers: { accept: "application/json" },
55733
- signal: AbortSignal.timeout(8e3)
55734
- }
55735
- );
55736
- if (!res.ok) throw new Error(`Kamino staking-yields HTTP ${res.status}`);
55737
- return meanEpochApy(await res.json());
55738
- }
55739
- var infFetcher = {
55740
- label: "SANCTUM_INF",
55741
- fetch: async () => {
55742
- const apy = await kaminoInfApy().catch((e) => {
55743
- console.warn(`[sanctum] Kamino INF history unavailable: ${e.message}`);
55744
- return void 0;
55745
- });
55746
- if (apy !== void 0) return { [INF_KEY]: apyToAprPercent(apy * 100) };
55747
- const llama = await fetchDefiLlamaApy(INF_LLAMA_POOL);
55748
- if (!(llama > 0) || llama >= MAX_PLAUSIBLE_APY * 100) return {};
55749
- return { [INF_KEY]: apyToAprPercent(llama) };
55750
- }
55751
- };
55752
-
55753
55823
  // src/yields/intrinsic/fetchers/exponentTranching.ts
55754
55824
  var EXPONENT_APP_API = "https://app.exponent.finance/api/tranching-markets";
55755
55825
  var EXPONENT_SENIOR_GROUPS = {
@@ -56567,6 +56637,9 @@ var LENDING_ONLY_FETCHERS = [
56567
56637
  // pool, collateral on Kamino / Jupiter Lend / Project 0 / Save. Its earn
56568
56638
  // row lives in margin-fetcher-sol, so it is lending-only here.
56569
56639
  infFetcher,
56640
+ // ezSOL (Renzo, Solana): a Jito Restaking VRT over JitoSOL, Kamino
56641
+ // collateral. Its earn row lives in margin-fetcher-sol (`jito-vault`).
56642
+ ezsolFetcher,
56570
56643
  // Exponent senior tranches (srEHYUSD / srAUTO / srONyc / srnOPAL, Solana):
56571
56644
  // Loopscale loop collateral, no earn row.
56572
56645
  exponentSeniorFetcher,
@@ -60934,9 +61007,9 @@ function countFailures(data, offset, count) {
60934
61007
  }
60935
61008
  return failures;
60936
61009
  }
60937
- function safeGetCalls(fetcherName, fn, errors) {
61010
+ function safeGetCalls(fetcherName, fn2, errors) {
60938
61011
  try {
60939
- return fn();
61012
+ return fn2();
60940
61013
  } catch (e) {
60941
61014
  errors[fetcherName] = e instanceof Error ? e.message : String(e);
60942
61015
  return [];
@@ -63624,8 +63697,6 @@ var MORPHO_STUB_VAULTS = {
63624
63697
  // Pharos
63625
63698
  "1868": ["0x94665e0df3c8c25119d80b2e3c703ccd127bf37e"],
63626
63699
  // Soneium
63627
- "2741": ["0x225c6e63970bb04d0780b3abb047dba659ad3cec"],
63628
- // Abstract
63629
63700
  "2818": ["0x7cf2c1a184c2f17e0413a13b21b1fdafd51df08c"],
63630
63701
  // Morph
63631
63702
  "4114": ["0xc063aca30b0d56ff0a9e446a94f8cdb421ab89fb"],
@@ -65301,14 +65372,14 @@ function mapApiDetail(d, chainId, prices, tokenList, shareDecimalsByVault, entit
65301
65372
  liquidityUsd
65302
65373
  };
65303
65374
  }
65304
- async function mapWithConcurrency(items, limit, fn) {
65375
+ async function mapWithConcurrency(items, limit, fn2) {
65305
65376
  const out = new Array(items.length);
65306
65377
  let cursor = 0;
65307
65378
  const worker = async () => {
65308
65379
  while (true) {
65309
65380
  const i = cursor++;
65310
65381
  if (i >= items.length) break;
65311
- out[i] = await fn(items[i]);
65382
+ out[i] = await fn2(items[i]);
65312
65383
  }
65313
65384
  };
65314
65385
  await Promise.all(
@@ -73383,19 +73454,64 @@ var bitfiExitRoutes = (exit, waitSeconds) => {
73383
73454
  }
73384
73455
  return routes2;
73385
73456
  };
73457
+ var resolveRewardEmissions = async (entries) => {
73458
+ const byFn = /* @__PURE__ */ new Map();
73459
+ const out = /* @__PURE__ */ new Map();
73460
+ await Promise.all(
73461
+ entries.map(async (e) => {
73462
+ const fn2 = e.rewardStream?.emissionPerSharePerDay;
73463
+ if (!fn2) return;
73464
+ if (!byFn.has(fn2))
73465
+ byFn.set(
73466
+ fn2,
73467
+ fn2().catch(() => void 0)
73468
+ );
73469
+ out.set(e.address.toLowerCase(), await byFn.get(fn2));
73470
+ })
73471
+ );
73472
+ return out;
73473
+ };
73474
+ var rewardsLeg = (entry, i) => {
73475
+ const cfg = entry.rewardStream;
73476
+ const tokenPrice = cfg ? i.prices[cfg.token.address.toLowerCase()] : void 0;
73477
+ const redeemUsd = i.underlyingPriceUsd !== void 0 ? Number(i.exchangeRate) / 1e18 * i.underlyingPriceUsd : void 0;
73478
+ const parApr = i.perSharePerDay !== void 0 && tokenPrice !== void 0 && redeemUsd !== void 0 && redeemUsd > 0 ? i.perSharePerDay * 365 * tokenPrice / redeemUsd * 100 : void 0;
73479
+ const apr = parApr ?? i.fetcherApr ?? 0;
73480
+ if (!cfg) return { apr };
73481
+ return {
73482
+ apr,
73483
+ streams: [
73484
+ {
73485
+ side: "deposit",
73486
+ apr,
73487
+ kind: "token",
73488
+ token: { ...cfg.token, priceUsd: tokenPrice },
73489
+ source: {
73490
+ ...cfg.source,
73491
+ refs: {
73492
+ ...cfg.source.refs ?? {},
73493
+ aprBasis: parApr !== void 0 ? "redemption-value" : i.fetcherApr !== void 0 ? "source" : "unknown"
73494
+ }
73495
+ },
73496
+ claim: cfg.claim
73497
+ }
73498
+ ]
73499
+ };
73500
+ };
73386
73501
  var fetchSavingsVaults = async (chainId, multicallRetry, prices = {}, tokenList = {}) => {
73387
73502
  const entries = getSavingsRegistry(chainId);
73388
73503
  if (entries.length === 0) return {};
73389
73504
  const readers = entries.map(buildReader2);
73390
73505
  const allCalls = readers.flatMap((r) => r.calls);
73391
73506
  const allAbis = readers.flatMap((r) => r.abis);
73392
- const [rawResults, aprByAddress] = await Promise.all([
73507
+ const [rawResults, aprByAddress, emissionByAddress] = await Promise.all([
73393
73508
  allCalls.length > 0 ? multicallRetry({
73394
73509
  chain: chainId,
73395
73510
  calls: allCalls,
73396
73511
  abi: allAbis
73397
73512
  }) : Promise.resolve([]),
73398
- resolveYieldApr2(entries)
73513
+ resolveYieldApr2(entries),
73514
+ resolveRewardEmissions(entries)
73399
73515
  ]);
73400
73516
  const out = {};
73401
73517
  let cursor = 0;
@@ -73410,8 +73526,16 @@ var fetchSavingsVaults = async (chainId, multicallRetry, prices = {}, tokenList
73410
73526
  const underlyingLc = entry.underlying.toLowerCase();
73411
73527
  const asset = tokenList[underlyingLc];
73412
73528
  const priceUsd = prices[underlyingLc];
73413
- const supplyRate = state.supplyRate ?? aprByAddress[addressLc] ?? 0;
73414
- const rewardsRate = 0;
73529
+ const fetcherApr = aprByAddress[addressLc];
73530
+ const rewards = entry.yieldLeg === "rewards" ? rewardsLeg(entry, {
73531
+ perSharePerDay: emissionByAddress.get(addressLc),
73532
+ fetcherApr,
73533
+ exchangeRate: state.exchangeRate,
73534
+ underlyingPriceUsd: priceUsd,
73535
+ prices
73536
+ }) : void 0;
73537
+ const supplyRate = state.supplyRate ?? (rewards ? 0 : fetcherApr ?? 0);
73538
+ const rewardsRate = rewards?.apr ?? 0;
73415
73539
  const depositRate = supplyRate + rewardsRate;
73416
73540
  const shareDec = entry.decimals;
73417
73541
  const underlyingDec = entry.underlyingDecimals ?? entry.decimals;
@@ -73480,6 +73604,9 @@ var fetchSavingsVaults = async (chainId, multicallRetry, prices = {}, tokenList
73480
73604
  supplyRate,
73481
73605
  rewardsRate,
73482
73606
  depositRate,
73607
+ // What `rewardsRate` is paid in and how it is claimed — only on
73608
+ // `yieldLeg: 'rewards'` entries.
73609
+ rewardStreams: rewards?.streams,
73483
73610
  // NOT part of `depositRate` — it is the incentive the vault's position
73484
73611
  // earns and the depositor does not. See the field's docstring.
73485
73612
  strandedRewardsRate: state.strandedRewardsRate,
@@ -73592,6 +73719,143 @@ var fetchSavingsVaults = async (chainId, multicallRetry, prices = {}, tokenList
73592
73719
  return out;
73593
73720
  };
73594
73721
 
73722
+ // src/vaults/savings/usualRewards.ts
73723
+ var USUAL_DISTRIBUTION_MODULE = "0x75cc0c0ddd2ccafe6ec415be686267588011e36a";
73724
+ var USUAL_REWARDS_API = "https://app.usual.money/api/rewards";
73725
+ var ZERO7 = "0x0000000000000000000000000000000000000000";
73726
+ var fn = (name, inputs, outputs) => ({ name, type: "function", stateMutability: "view", inputs, outputs });
73727
+ var acct = [{ name: "account", type: "address" }];
73728
+ var UsualDistributionModuleReadAbi = [
73729
+ fn(
73730
+ "getOffChainDistributionData",
73731
+ [],
73732
+ [
73733
+ { name: "timestamp", type: "uint256" },
73734
+ { name: "merkleRoot", type: "bytes32" }
73735
+ ]
73736
+ ),
73737
+ fn("getOffChainTokensClaimed", acct, [{ name: "", type: "uint256" }]),
73738
+ fn("getClaimOnlySelf", acct, [{ name: "", type: "bool" }]),
73739
+ fn("getRedirectedAccount", acct, [{ name: "", type: "address" }]),
73740
+ fn("paused", [], [{ name: "", type: "bool" }]),
73741
+ fn("getOffChainDistributionMintCap", [], [{ name: "", type: "uint256" }])
73742
+ ];
73743
+ var isHex32 = (v) => typeof v === "string" && /^0x[0-9a-fA-F]{64}$/.test(v);
73744
+ var selectUsualRewardEntry = (entries, onchainRoot) => {
73745
+ if (!Array.isArray(entries))
73746
+ return {
73747
+ status: "unknown",
73748
+ reason: "Usual rewards API reply is not a list"
73749
+ };
73750
+ if (entries.length === 0)
73751
+ return { status: "ok", cumulative: 0n, proof: [], pending: 0n };
73752
+ const parsed = [];
73753
+ for (const e of entries) {
73754
+ try {
73755
+ if (!isHex32(e?.merkleRoot) || !Array.isArray(e.merkleProof)) continue;
73756
+ if (!e.merkleProof.every(isHex32)) continue;
73757
+ parsed.push({
73758
+ root: e.merkleRoot.toLowerCase(),
73759
+ value: BigInt(e.value),
73760
+ proof: e.merkleProof,
73761
+ block: Number(e.blockNumber)
73762
+ });
73763
+ } catch {
73764
+ }
73765
+ }
73766
+ const root = onchainRoot.toLowerCase();
73767
+ const match = parsed.find((p) => p.root === root);
73768
+ if (!match)
73769
+ return {
73770
+ status: "unknown",
73771
+ reason: `Usual rewards API has no entry for the approved on-chain root ${onchainRoot} (it lists ${parsed.length} other root(s)) \u2014 the API and the chain are out of step`
73772
+ };
73773
+ const newest = parsed.reduce((a, b) => b.block > a.block ? b : a, match);
73774
+ const pending = newest.value > match.value ? newest.value - match.value : 0n;
73775
+ return {
73776
+ status: "ok",
73777
+ cumulative: match.value,
73778
+ proof: match.proof,
73779
+ pending
73780
+ };
73781
+ };
73782
+ var fetchUsualRewardsClaimData = async (account, multicallRetry, opts = {}) => {
73783
+ const dm = (opts.distributionModule ?? USUAL_DISTRIBUTION_MODULE).toLowerCase();
73784
+ const who = account.toLowerCase();
73785
+ let res;
73786
+ try {
73787
+ res = await multicallRetry({
73788
+ chain: "1",
73789
+ calls: [
73790
+ { address: dm, name: "getOffChainDistributionData", params: [] },
73791
+ { address: dm, name: "getOffChainTokensClaimed", params: [who] },
73792
+ { address: dm, name: "getClaimOnlySelf", params: [who] },
73793
+ { address: dm, name: "getRedirectedAccount", params: [who] },
73794
+ { address: dm, name: "paused", params: [] },
73795
+ { address: dm, name: "getOffChainDistributionMintCap", params: [] }
73796
+ ],
73797
+ abi: UsualDistributionModuleReadAbi,
73798
+ allowFailure: true
73799
+ });
73800
+ } catch (e) {
73801
+ return {
73802
+ status: "unknown",
73803
+ account: who,
73804
+ reason: `DistributionModule read failed: ${e?.message ?? e}`
73805
+ };
73806
+ }
73807
+ const [data, claimedRaw, onlySelf, redirect, paused, cap] = res;
73808
+ const tuple = Array.isArray(data) ? data : void 0;
73809
+ const root = tuple?.[1];
73810
+ const rootTs = tuple?.[0];
73811
+ if (!isHex32(root) || typeof rootTs !== "bigint" || typeof claimedRaw !== "bigint" || typeof onlySelf !== "boolean" || typeof paused !== "boolean")
73812
+ return {
73813
+ status: "unknown",
73814
+ account: who,
73815
+ reason: "DistributionModule read returned an unexpected shape"
73816
+ };
73817
+ let entries;
73818
+ try {
73819
+ const r = await (opts.fetchImpl ?? fetch)(
73820
+ `${opts.apiBase ?? USUAL_REWARDS_API}/${who}`,
73821
+ { headers: { Accept: "application/json" } }
73822
+ );
73823
+ if (!r.ok)
73824
+ return {
73825
+ status: "unknown",
73826
+ account: who,
73827
+ reason: `Usual rewards API answered HTTP ${r.status}`
73828
+ };
73829
+ entries = await r.json();
73830
+ } catch (e) {
73831
+ return {
73832
+ status: "unknown",
73833
+ account: who,
73834
+ reason: `Usual rewards API unreachable: ${e?.message ?? e}`
73835
+ };
73836
+ }
73837
+ const sel = selectUsualRewardEntry(entries, root);
73838
+ if (sel.status !== "ok") return { ...sel, account: who };
73839
+ const claimable = sel.cumulative > claimedRaw ? sel.cumulative - claimedRaw : 0n;
73840
+ const redirectTo = typeof redirect === "string" && redirect.toLowerCase() !== ZERO7 ? redirect.toLowerCase() : who;
73841
+ return {
73842
+ status: "ok",
73843
+ account: who,
73844
+ distributionModule: dm,
73845
+ merkleRoot: root.toLowerCase(),
73846
+ rootTimestamp: Number(rootTs),
73847
+ cumulative: sel.cumulative,
73848
+ claimed: claimedRaw,
73849
+ claimable,
73850
+ pending: sel.pending,
73851
+ proof: sel.proof,
73852
+ recipient: redirectTo,
73853
+ claimOnlySelf: onlySelf,
73854
+ paused,
73855
+ exceedsMintCap: typeof cap === "bigint" ? claimable > cap : false
73856
+ };
73857
+ };
73858
+
73595
73859
  // src/vaults/lagoon/api.ts
73596
73860
  var LAGOON_API_URL = "https://api.lagoon.finance/query";
73597
73861
  var LAGOON_CHAIN_IDS = /* @__PURE__ */ new Set([
@@ -75444,17 +75708,17 @@ var priceGlvVaults = async (chainId, multicallRetry, glvTokens, prices, marketIn
75444
75708
  const sp = price(prices, short);
75445
75709
  if (!lp || !sp) return;
75446
75710
  const indexPrices = [];
75447
- let ok2 = true;
75711
+ let ok3 = true;
75448
75712
  for (const m of markets) {
75449
75713
  const idx = marketIndexToken.get(m.toLowerCase());
75450
75714
  const ip = idx ? price(prices, idx) : void 0;
75451
75715
  if (!ip) {
75452
- ok2 = false;
75716
+ ok3 = false;
75453
75717
  break;
75454
75718
  }
75455
75719
  indexPrices.push(ip);
75456
75720
  }
75457
- if (!ok2) return;
75721
+ if (!ok3) return;
75458
75722
  calls.push({
75459
75723
  address: c.glvReader,
75460
75724
  name: "getGlvTokenPrice",
@@ -75742,7 +76006,7 @@ var getGmxUserPositions = async (chainId, account, multicallRetry, options) => {
75742
76006
  };
75743
76007
  const c = getGmxReadContracts(chainId);
75744
76008
  if (!c) return empty;
75745
- const acct = account.toLowerCase();
76009
+ const acct2 = account.toLowerCase();
75746
76010
  const cap = BigInt(options?.cap ?? DEFAULT_CAP);
75747
76011
  const tokens = options?.tokens ?? [];
75748
76012
  const safe = async (p, fallback) => {
@@ -75759,7 +76023,7 @@ var getGmxUserPositions = async (chainId, account, multicallRetry, options) => {
75759
76023
  calls: tokens.map((t) => ({
75760
76024
  address: t.address,
75761
76025
  name: "balanceOf",
75762
- params: [acct]
76026
+ params: [acct2]
75763
76027
  })),
75764
76028
  abi: GmxErc20BalanceAbi,
75765
76029
  maxRetries: 3,
@@ -75774,12 +76038,12 @@ var getGmxUserPositions = async (chainId, account, multicallRetry, options) => {
75774
76038
  {
75775
76039
  address: c.glvReader,
75776
76040
  name: "getAccountGlvDeposits",
75777
- params: [c.dataStore, acct, 0n, cap]
76041
+ params: [c.dataStore, acct2, 0n, cap]
75778
76042
  },
75779
76043
  {
75780
76044
  address: c.glvReader,
75781
76045
  name: "getAccountGlvWithdrawals",
75782
- params: [c.dataStore, acct, 0n, cap]
76046
+ params: [c.dataStore, acct2, 0n, cap]
75783
76047
  }
75784
76048
  ],
75785
76049
  abi: GmxGlvReaderAbi,
@@ -75795,12 +76059,12 @@ var getGmxUserPositions = async (chainId, account, multicallRetry, options) => {
75795
76059
  {
75796
76060
  address: c.dataStore,
75797
76061
  name: "getBytes32ValuesAt",
75798
- params: [accountDepositListKey(acct), 0n, cap]
76062
+ params: [accountDepositListKey(acct2), 0n, cap]
75799
76063
  },
75800
76064
  {
75801
76065
  address: c.dataStore,
75802
76066
  name: "getBytes32ValuesAt",
75803
- params: [accountWithdrawalListKey(acct), 0n, cap]
76067
+ params: [accountWithdrawalListKey(acct2), 0n, cap]
75804
76068
  }
75805
76069
  ],
75806
76070
  abi: GmxDataStoreAbi,
@@ -75945,8 +76209,12 @@ var PENDLE_CHAIN_IDS = /* @__PURE__ */ new Set([
75945
76209
  // Monad
75946
76210
  "146",
75947
76211
  // Sonic
76212
+ "196",
76213
+ // X Layer
75948
76214
  "999",
75949
76215
  // HyperEVM
76216
+ "4663",
76217
+ // Robinhood Chain
75950
76218
  "5000",
75951
76219
  // Mantle
75952
76220
  "8453",
@@ -84606,6 +84874,14 @@ var SVM_EARN_VAULT_BUILDERS = {
84606
84874
  verbs: ["deposit", "withdraw"],
84607
84875
  nativeDeposit: true,
84608
84876
  nativeWithdraw: true
84877
+ },
84878
+ // ezSOL (a Jito Restaking vault, served as `lst`): JitoSOL in (or SOL /
84879
+ // wSOL, minted to JitoSOL first), a ticket out after a 1–2 epoch
84880
+ // cooldown, the claim burns it into JitoSOL — no cancel exists
84881
+ "lst:Renzo": {
84882
+ verbs: ["deposit", "request-withdraw", "claim"],
84883
+ payAsset: true,
84884
+ nativeDeposit: true
84609
84885
  }
84610
84886
  };
84611
84887
  var UNBUILT_REASONS = {
@@ -84623,7 +84899,7 @@ function svmEarnBuildability(venue, brand) {
84623
84899
  return { ok: false, reason: "No Solana builder for this lender yet" };
84624
84900
  }
84625
84901
  const provider = venue.slice("vault.".length);
84626
- const key3 = provider === "savings" ? `savings:${brand ?? ""}` : provider;
84902
+ const key3 = provider === "savings" || provider === "lst" ? `${provider}:${brand ?? ""}` : provider;
84627
84903
  const builder = SVM_EARN_VAULT_BUILDERS[key3];
84628
84904
  if (builder) return { ok: true, builder };
84629
84905
  return {
@@ -85152,6 +85428,6 @@ function earnPositionTotals(items) {
85152
85428
  };
85153
85429
  }
85154
85430
 
85155
- export { ApiBookSource, DEFAULT_MIDNIGHT_API, DEFAULT_OUTLIER_GUARD, DEFAULT_PROFILE_ID, DEFAULT_STALE_REJECT_SECONDS, DEFAULT_TERMMAX_API, DEFAULT_TERM_ORDER_STORE, DOLOMITE_ISO_ID_PREFIX, EARN_DESCRIPTIONS, EARN_LABELS, EARN_RATE_SOURCE_BY_PROVIDER, EMPTY_BALANCE, EXACTLY_LENDER_KEY, FLYING_TULIP_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, NON_EVM_VAULT_PROVIDERS, PASSTHROUGH_RATE_EPSILON, PENDLE_ASSETS_URL, PENDLE_CHAIN_IDS, PENDLE_MARKETS_URL, PREFIX_LENDERS, SDK_FRACTION_RATE_PROVIDERS, SPECTRA_NETWORKS, SPECTRA_RATE_MAX_PERCENT, SPECTRA_RATE_MIN_PERCENT, STABLECOIN_SYMBOLS, STCELO_MANAGER_ADDRESS, SVM_EARN_VAULT_BUILDERS, 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, applyEarnSanity, applyPositionDelta, attachImplications, attachPricesToFlashLiquidity, blockNumberFromTag, borrowDescription, borrowFindings, borrowHeadline, buildExposures2 as buildExposures, buildFluidFTokensCall, buildLendingPositionUid, buildLiquityUserCall, buildLoopResult, buildMorphoTypeCall, buildMorphoTypeUserCallWithLens, buildPortfolioTotals, buildQueriesFromMeta, 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, convertFlyingTulipMarketsToResponse, convertFrankencoinMarketsToResponse, convertFraxlendPairsToResponse, convertInverseMarketsToResponse, convertLenderUserDataResult, convertLiquityMarketsToResponse, convertLlamaLendMarketsToResponse, convertResupplyMarketsToResponse, convertRiverMarketsToResponse, convertTellerMarketsToResponse, convertTermMarketsToResponse, convertTermMaxMarketsToResponse, convertUsddMarketsToResponse, createMarketUid, createMidnightBookSource, createMultiAccountTypeUserState, createMulticallRpcCall, createRawRpcCalls, createTermBookSource, createTermMaxDataSource, decodeListaMarkets, decodeMarkets, decodePackedListaUserDataset, decodePackedMorphoUserDataset, deriveBorrowTags, deriveSupplyTags, detectInterfaceKinds, dexResolverFor, disambiguateEarnNames, dolomiteVaultAddress, dssIlkBytes32, dssKeyParts, dssLenderKey, duration, earnDescription, earnLabel, earnMarketFromPool, earnMarketFromVault, earnMarketLabel, earnPositionFromLenderEntry, earnPositionFromVaultBalance, earnPositionTotals, earnRateAtMaturity, earnRowSubtitle, earnUidFromMarketUid, earnVaultTerms, earnVenueKind, emitterCoverage, encodeBalanceFetcherCalldata, enrichTermSheet, enrichmentIndexFromRows, enumerateEmitters, exactlyPairLtv, exactlyPenaltyRateToAprPercent, exactlyWadRateToPercent, feePhrase, feedKeyOf, feedStatKey, fetchCoolerMarkets, fetchDolomiteAccountNumbers, fetchDolomiteSubAccounts, fetchDssMarkets, fetchEulerEarnVaults, fetchEulerEarnVaultsFromSubgraph, fetchEulerSubAccountIndexes, fetchExactlyMarkets, fetchFlashLiquidityForChain, fetchFluidDexState, fetchFluidFTokens, fetchFlyingTulipMarkets, 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, filterLenderMeta, 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, getResolvedDolomiteSubAccounts, getStCeloValidatorGroups, getSubAccountAddress, getSubAccountIndex, getTermProfile, getVaultPublicDataAll, getVaultWithdrawalRequests, hasCritical, hasEulerEarnVaultSubgraph, hasLagoonVaults, hasMorphoPositionIndex, hasMorphoUserApi, hasMorphoUserSubgraph, hasPendleMarkets, hasSpectraMarkets, hasUpshiftVaults, hasYearnVaults, ilkToKeySegment, implausibleRatePercent, injectLenderInfoIntoEntries, inverseKeyParts, inverseLenderKey, isBoundNeed, isFailedCall, isIlliquid, isLenderVenueKey, isLendingPosition, isLiveMarket as isLivePendleMarket, isLiveSpectraMarket, isMaturedTerm, isSecondaryMarketOnly, isStablecoinSymbol, isUnearnableEarnRate, isUnrealizableEarnRate, isVaultPosition, isVaultVenue, isYearnV3, keySegmentToIlk, keysFromMaps, lenderApiOnly, lenderFamily, liquityCandidateTroveIds, liquityKeyParts, liquityLenderKey, llamaLendKeyParts, llamaLendLenderKey, marketKeysOf, meetsLiquidityFloor, mergeDeep, multicall3Abi2 as multicall3Abi, nanTo, needsLenderApproval, needsTokenApproval, noOpResult, normalizeToBytes, organizeUserQueries, parseBalanceFetcherResult, parseDolomiteSubAccountId, parseEarnUid, parseLenderKey, 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, readUserPositions, readVaultSharePrices, rejectOutliers as rejectPriceOutliers, repairImpossibleTvl, resolveAdapter, resolveDerivation, resolveDolomiteRowIdentity, resolveEarnIdentity, resolveModeConfig, resolveStCeloDepositGroup, resolveVaultProfileId, resupplyKeyParts, resupplyLenderKey, resupplyMarketLabel, riverKeyParts, riverLenderKey, sanePercent as saneSpectraPercent, savingsAddresses, savingsBalanceKind, secondaryMarketVault, selectAssetGroupPrices, setMysticApiKey, shortDate, spectraAddress, spectraNetwork, spectraPoolsUrl, splitChainScopedAddress as splitPendleChainScopedAddress, stampCapabilities, stampEarnSubtitles, stampVaultClassification, stampVaultTermSheets, stripLeadingBrand, subAccountsOf, supplyDescription, supplyFindings, supplyHeadline, svmEarnBuildability, 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, toDolomiteSubAccountId, toTermFillNow, toTermSheetInput, toVaultTermInput, trancheFromCounterparty, tryParseEarnUid, unflattenLenderData, updateFeedStats, usdValue, usddIlkBytes32, usddKeyParts, usddLenderKey, validateTermSheet, validateTermSheets, validateUserData, vaultSharesToAssets, vaultTermInputFromEarnMarket, vaultTermInputFromSourceRow, vaultTraits, vaultVenue, venueBrand, venueBrandKey, withMaturityLabel, withTrancheLabel };
85431
+ export { ApiBookSource, DEFAULT_MIDNIGHT_API, DEFAULT_OUTLIER_GUARD, DEFAULT_PROFILE_ID, DEFAULT_STALE_REJECT_SECONDS, DEFAULT_TERMMAX_API, DEFAULT_TERM_ORDER_STORE, DOLOMITE_ISO_ID_PREFIX, EARN_DESCRIPTIONS, EARN_LABELS, EARN_RATE_SOURCE_BY_PROVIDER, EMPTY_BALANCE, EXACTLY_LENDER_KEY, FLYING_TULIP_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, NON_EVM_VAULT_PROVIDERS, PASSTHROUGH_RATE_EPSILON, PENDLE_ASSETS_URL, PENDLE_CHAIN_IDS, PENDLE_MARKETS_URL, PREFIX_LENDERS, SDK_FRACTION_RATE_PROVIDERS, SPECTRA_NETWORKS, SPECTRA_RATE_MAX_PERCENT, SPECTRA_RATE_MIN_PERCENT, STABLECOIN_SYMBOLS, STCELO_MANAGER_ADDRESS, SVM_EARN_VAULT_BUILDERS, 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, applyEarnSanity, applyPositionDelta, attachImplications, attachPricesToFlashLiquidity, blockNumberFromTag, borrowDescription, borrowFindings, borrowHeadline, buildExposures2 as buildExposures, buildFluidFTokensCall, buildLendingPositionUid, buildLiquityUserCall, buildLoopResult, buildMorphoTypeCall, buildMorphoTypeUserCallWithLens, buildPortfolioTotals, buildQueriesFromMeta, 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, convertFlyingTulipMarketsToResponse, convertFrankencoinMarketsToResponse, convertFraxlendPairsToResponse, convertInverseMarketsToResponse, convertLenderUserDataResult, convertLiquityMarketsToResponse, convertLlamaLendMarketsToResponse, convertResupplyMarketsToResponse, convertRiverMarketsToResponse, convertTellerMarketsToResponse, convertTermMarketsToResponse, convertTermMaxMarketsToResponse, convertUsddMarketsToResponse, createMarketUid, createMidnightBookSource, createMultiAccountTypeUserState, createMulticallRpcCall, createRawRpcCalls, createTermBookSource, createTermMaxDataSource, decodeListaMarkets, decodeMarkets, decodePackedListaUserDataset, decodePackedMorphoUserDataset, deriveBorrowTags, deriveSupplyTags, detectInterfaceKinds, dexResolverFor, disambiguateEarnNames, dolomiteVaultAddress, dssIlkBytes32, dssKeyParts, dssLenderKey, duration, earnDescription, earnLabel, earnMarketFromPool, earnMarketFromVault, earnMarketLabel, earnPositionFromLenderEntry, earnPositionFromVaultBalance, earnPositionTotals, earnRateAtMaturity, earnRowSubtitle, earnUidFromMarketUid, earnVaultTerms, earnVenueKind, emitterCoverage, encodeBalanceFetcherCalldata, enrichTermSheet, enrichmentIndexFromRows, enumerateEmitters, exactlyPairLtv, exactlyPenaltyRateToAprPercent, exactlyWadRateToPercent, feePhrase, feedKeyOf, feedStatKey, fetchCoolerMarkets, fetchDolomiteAccountNumbers, fetchDolomiteSubAccounts, fetchDssMarkets, fetchEulerEarnVaults, fetchEulerEarnVaultsFromSubgraph, fetchEulerSubAccountIndexes, fetchExactlyMarkets, fetchFlashLiquidityForChain, fetchFluidDexState, fetchFluidFTokens, fetchFlyingTulipMarkets, 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, fetchUsualRewardsClaimData, fetchYearnApiVaults, fetchYearnVaults, fillableRemaining, filterActiveLenders, filterLenderMeta, 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, getResolvedDolomiteSubAccounts, getStCeloValidatorGroups, getSubAccountAddress, getSubAccountIndex, getTermProfile, getVaultPublicDataAll, getVaultWithdrawalRequests, hasCritical, hasEulerEarnVaultSubgraph, hasLagoonVaults, hasMorphoPositionIndex, hasMorphoUserApi, hasMorphoUserSubgraph, hasPendleMarkets, hasSpectraMarkets, hasUpshiftVaults, hasYearnVaults, ilkToKeySegment, implausibleRatePercent, injectLenderInfoIntoEntries, inverseKeyParts, inverseLenderKey, isBoundNeed, isFailedCall, isIlliquid, isLenderVenueKey, isLendingPosition, isLiveMarket as isLivePendleMarket, isLiveSpectraMarket, isMaturedTerm, isSecondaryMarketOnly, isStablecoinSymbol, isUnearnableEarnRate, isUnrealizableEarnRate, isVaultPosition, isVaultVenue, isYearnV3, keySegmentToIlk, keysFromMaps, lenderApiOnly, lenderFamily, liquityCandidateTroveIds, liquityKeyParts, liquityLenderKey, llamaLendKeyParts, llamaLendLenderKey, marketKeysOf, meetsLiquidityFloor, mergeDeep, multicall3Abi2 as multicall3Abi, nanTo, needsLenderApproval, needsTokenApproval, noOpResult, normalizeToBytes, organizeUserQueries, parseBalanceFetcherResult, parseDolomiteSubAccountId, parseEarnUid, parseLenderKey, 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, readUserPositions, readVaultSharePrices, rejectOutliers as rejectPriceOutliers, repairImpossibleTvl, resolveAdapter, resolveDerivation, resolveDolomiteRowIdentity, resolveEarnIdentity, resolveModeConfig, resolveStCeloDepositGroup, resolveVaultProfileId, resupplyKeyParts, resupplyLenderKey, resupplyMarketLabel, riverKeyParts, riverLenderKey, sanePercent as saneSpectraPercent, savingsAddresses, savingsBalanceKind, secondaryMarketVault, selectAssetGroupPrices, selectUsualRewardEntry, setMysticApiKey, shortDate, spectraAddress, spectraNetwork, spectraPoolsUrl, splitChainScopedAddress as splitPendleChainScopedAddress, stampCapabilities, stampEarnSubtitles, stampVaultClassification, stampVaultTermSheets, stripLeadingBrand, subAccountsOf, supplyDescription, supplyFindings, supplyHeadline, svmEarnBuildability, 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, toDolomiteSubAccountId, toTermFillNow, toTermSheetInput, toVaultTermInput, trancheFromCounterparty, tryParseEarnUid, unflattenLenderData, updateFeedStats, usdValue, usddIlkBytes32, usddKeyParts, usddLenderKey, validateTermSheet, validateTermSheets, validateUserData, vaultSharesToAssets, vaultTermInputFromEarnMarket, vaultTermInputFromSourceRow, vaultTraits, vaultVenue, venueBrand, venueBrandKey, withMaturityLabel, withTrancheLabel };
85156
85432
  //# sourceMappingURL=index.js.map
85157
85433
  //# sourceMappingURL=index.js.map