@1delta/margin-fetcher 5.0.18 → 5.0.20

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
@@ -8010,9 +8010,9 @@ var getInitReservesDataConverter = (lender, chainId, prices, additionalYields, t
8010
8010
  });
8011
8011
  });
8012
8012
  Object.entries(eModes).forEach(([modeId, modeData]) => {
8013
- Object.entries(result).forEach(([key2, _3]) => {
8014
- if (!result[key2].config[modeId]) {
8015
- result[key2].config[modeId] = {
8013
+ Object.entries(result).forEach(([key3, _3]) => {
8014
+ if (!result[key3].config[modeId]) {
8015
+ result[key3].config[modeId] = {
8016
8016
  label: modeData.label,
8017
8017
  category: modeData.category,
8018
8018
  debtDisabled: true,
@@ -10084,8 +10084,8 @@ var brokerAbi = parseAbi([
10084
10084
  var BROKER_CACHE = {};
10085
10085
  var FIXED_TERMS_CACHE = {};
10086
10086
  var BROKER_USER_CACHE = {};
10087
- function toBytes32MarketId(key2) {
10088
- const raw = key2.startsWith("LISTA_DAO_") ? "0x" + key2.slice("LISTA_DAO_".length) : key2;
10087
+ function toBytes32MarketId(key3) {
10088
+ const raw = key3.startsWith("LISTA_DAO_") ? "0x" + key3.slice("LISTA_DAO_".length) : key3;
10089
10089
  return raw.toLowerCase();
10090
10090
  }
10091
10091
  function ceilDiv(a, b) {
@@ -10120,8 +10120,8 @@ async function resolveListaBrokers(chainId, marketKeys, getClient = getEvmClient
10120
10120
  if (!moolah || marketKeys.length === 0) return out;
10121
10121
  const cache = BROKER_CACHE[chainId] ??= {};
10122
10122
  const missing = [];
10123
- for (const key2 of marketKeys) {
10124
- const id = toBytes32MarketId(key2);
10123
+ for (const key3 of marketKeys) {
10124
+ const id = toBytes32MarketId(key3);
10125
10125
  if (cache[id] === void 0) missing.push(id);
10126
10126
  }
10127
10127
  if (missing.length > 0) {
@@ -10144,8 +10144,8 @@ async function resolveListaBrokers(chainId, marketKeys, getClient = getEvmClient
10144
10144
  } catch {
10145
10145
  }
10146
10146
  }
10147
- for (const key2 of marketKeys) {
10148
- const id = toBytes32MarketId(key2);
10147
+ for (const key3 of marketKeys) {
10148
+ const id = toBytes32MarketId(key3);
10149
10149
  const broker = cache[id];
10150
10150
  if (broker && broker !== zeroAddress) out[id] = broker;
10151
10151
  }
@@ -10467,15 +10467,15 @@ function createBaseTypeUserState(payload, lenderData, totalDeposits24h = 0, tota
10467
10467
  oracleDebt += debtStableUSDOracle;
10468
10468
  oracleDebt += debtUSDOracle;
10469
10469
  (rewards ?? []).forEach((rewardData) => {
10470
- const key2 = rewardData.asset;
10470
+ const key3 = rewardData.asset;
10471
10471
  rewardDepositAccrual += rewardData.depositRate * depositsUSD;
10472
10472
  rewardBorrowAccrual += rewardData.variableBorrowRate * debtUSD + (rewardData.stableBorrowRate ?? 0) * debtStableUSD;
10473
10473
  const rewDepo = rewardData.depositRate * depositsUSD;
10474
10474
  const rewDebt = rewardData.variableBorrowRate * debtUSD + (rewardData.stableBorrowRate ?? 0) * (debtStableUSD ?? 0);
10475
- if (!rewardsPerAsset[key2])
10476
- rewardsPerAsset[key2] = { depositApr: 0, borrowApr: 0 };
10477
- if (rewDepo > 0) rewardsPerAsset[key2].depositApr += rewDepo;
10478
- if (rewDebt > 0) rewardsPerAsset[key2].borrowApr += rewDebt;
10475
+ if (!rewardsPerAsset[key3])
10476
+ rewardsPerAsset[key3] = { depositApr: 0, borrowApr: 0 };
10477
+ if (rewDepo > 0) rewardsPerAsset[key3].depositApr += rewDepo;
10478
+ if (rewDebt > 0) rewardsPerAsset[key3].borrowApr += rewDebt;
10479
10479
  });
10480
10480
  stakingDepositAccrual += (intrinsicYield ?? 0) * depositsUSD;
10481
10481
  stakingBorrowAccrual += (intrinsicYield ?? 0) * (debtStableUSD + debtUSD);
@@ -11201,15 +11201,15 @@ function createSumerUserState(payload, lenderData, totalDeposits24h = 0, totalDe
11201
11201
  oracleDebt += debtStableUSDOracle;
11202
11202
  oracleDebt += debtUSDOracle;
11203
11203
  (rewards ?? []).forEach((rewardData) => {
11204
- const key2 = rewardData.asset;
11204
+ const key3 = rewardData.asset;
11205
11205
  rewardDepositAccrual += rewardData.depositRate * depositsUSD;
11206
11206
  rewardBorrowAccrual += rewardData.variableBorrowRate * debtUSD + (rewardData.stableBorrowRate ?? 0) * debtStableUSD;
11207
11207
  const rewDepo = rewardData.depositRate * depositsUSD;
11208
11208
  const rewDebt = rewardData.variableBorrowRate * debtUSD + (rewardData.stableBorrowRate ?? 0) * (debtStableUSD ?? 0);
11209
- if (!rewardsPerAsset[key2])
11210
- rewardsPerAsset[key2] = { depositApr: 0, borrowApr: 0 };
11211
- if (rewDepo > 0) rewardsPerAsset[key2].depositApr += rewDepo;
11212
- if (rewDebt > 0) rewardsPerAsset[key2].borrowApr += rewDebt;
11209
+ if (!rewardsPerAsset[key3])
11210
+ rewardsPerAsset[key3] = { depositApr: 0, borrowApr: 0 };
11211
+ if (rewDepo > 0) rewardsPerAsset[key3].depositApr += rewDepo;
11212
+ if (rewDebt > 0) rewardsPerAsset[key3].borrowApr += rewDebt;
11213
11213
  });
11214
11214
  stakingDepositAccrual += (intrinsicYield ?? 0) * depositsUSD;
11215
11215
  stakingBorrowAccrual += (intrinsicYield ?? 0) * (debtStableUSD + debtUSD);
@@ -15203,11 +15203,11 @@ function toAddress(value) {
15203
15203
  return value.toString();
15204
15204
  throw new Error(`Cannot convert value to address string: ${String(value)}`);
15205
15205
  }
15206
- function field(src, key2, index) {
15206
+ function field(src, key3, index) {
15207
15207
  if (src == null) throw new Error("Source is null/undefined");
15208
- if (key2 in src) return src[key2];
15208
+ if (key3 in src) return src[key3];
15209
15209
  if (Array.isArray(src)) return src[index];
15210
- return src[key2];
15210
+ return src[key3];
15211
15211
  }
15212
15212
  function parseMarketIncentives(input) {
15213
15213
  return {
@@ -15278,11 +15278,11 @@ function toBigInt2(value) {
15278
15278
  }
15279
15279
  throw new Error(`Cannot convert value to bigint: ${String(value)}`);
15280
15280
  }
15281
- function field2(src, key2, index) {
15281
+ function field2(src, key3, index) {
15282
15282
  if (src == null) throw new Error("Source is null/undefined");
15283
- if (key2 in src) return src[key2];
15283
+ if (key3 in src) return src[key3];
15284
15284
  if (Array.isArray(src)) return src[index];
15285
- return src[key2];
15285
+ return src[key3];
15286
15286
  }
15287
15287
  function computeApy(rateRaw, timestampsPerYear) {
15288
15288
  const rate = Number(formatEther(rateRaw));
@@ -15343,11 +15343,11 @@ function toBool3(value) {
15343
15343
  if (typeof value === "number") return value !== 0;
15344
15344
  return Boolean(value);
15345
15345
  }
15346
- function field3(src, key2, index) {
15346
+ function field3(src, key3, index) {
15347
15347
  if (src == null) throw new Error("Source is null/undefined");
15348
- if (key2 in src) return src[key2];
15348
+ if (key3 in src) return src[key3];
15349
15349
  if (Array.isArray(src)) return src[index];
15350
- return src[key2];
15350
+ return src[key3];
15351
15351
  }
15352
15352
  function parseTectonicMarketData(input) {
15353
15353
  return {
@@ -15415,11 +15415,11 @@ function toBool4(value) {
15415
15415
  if (typeof value === "number") return value !== 0;
15416
15416
  return Boolean(value);
15417
15417
  }
15418
- function field4(src, key2, index) {
15418
+ function field4(src, key3, index) {
15419
15419
  if (src == null) throw new Error("Source is null/undefined");
15420
- if (key2 in src) return src[key2];
15420
+ if (key3 in src) return src[key3];
15421
15421
  if (Array.isArray(src)) return src[index];
15422
- return src[key2];
15422
+ return src[key3];
15423
15423
  }
15424
15424
  function parseKineticMarketMetadata(input) {
15425
15425
  return {
@@ -15858,11 +15858,11 @@ function toBool5(value) {
15858
15858
  if (typeof value === "number") return value !== 0;
15859
15859
  return Boolean(value);
15860
15860
  }
15861
- function field5(src, key2, index) {
15861
+ function field5(src, key3, index) {
15862
15862
  if (src == null) throw new Error("Source is null/undefined");
15863
- if (key2 in src) return src[key2];
15863
+ if (key3 in src) return src[key3];
15864
15864
  if (Array.isArray(src)) return src[index];
15865
- return src[key2];
15865
+ return src[key3];
15866
15866
  }
15867
15867
  function parseToken(raw) {
15868
15868
  return {
@@ -16090,11 +16090,11 @@ function capRate(rate) {
16090
16090
  if (!Number.isFinite(rate)) return MAX_RATE;
16091
16091
  return Math.min(rate, MAX_RATE);
16092
16092
  }
16093
- function pick(meta, key2, index) {
16093
+ function pick(meta, key3, index) {
16094
16094
  if (meta == null) return void 0;
16095
- if (key2 in meta) return meta[key2];
16095
+ if (key3 in meta) return meta[key3];
16096
16096
  if (Array.isArray(meta)) return meta[index];
16097
- return meta[key2];
16097
+ return meta[key3];
16098
16098
  }
16099
16099
  var DEFAULT_PAUSED_ACTIONS = {
16100
16100
  [0 /* MINT */]: false,
@@ -17438,8 +17438,8 @@ function getActiveCollaterals(ltvInfo) {
17438
17438
  return active;
17439
17439
  }
17440
17440
  function findVaultInfo(normalizedAddr, vaultData) {
17441
- for (const [key2, value] of vaultData) {
17442
- if (key2.toLowerCase() === normalizedAddr) return value;
17441
+ for (const [key3, value] of vaultData) {
17442
+ if (key3.toLowerCase() === normalizedAddr) return value;
17443
17443
  }
17444
17444
  return void 0;
17445
17445
  }
@@ -17751,8 +17751,8 @@ function buildTokenEntry(info, config, collateralActive, borrowVaults, opts) {
17751
17751
  };
17752
17752
  }
17753
17753
  function findInfo(addr2, vaultData) {
17754
- for (const [key2, value] of vaultData) {
17755
- if (key2.toLowerCase() === addr2) return value;
17754
+ for (const [key3, value] of vaultData) {
17755
+ if (key3.toLowerCase() === addr2) return value;
17756
17756
  }
17757
17757
  return void 0;
17758
17758
  }
@@ -17954,11 +17954,11 @@ var buildAaveV4LenderReserveCall = (chainId, lender) => {
17954
17954
  { address: spokeAddr, name: "getReserveDebt", params: [rid] },
17955
17955
  { address: spokeAddr, name: "getReserveTotalDebt", params: [rid] }
17956
17956
  );
17957
- for (let key2 = 0; key2 < dynConfigCount; key2++) {
17957
+ for (let key3 = 0; key3 < dynConfigCount; key3++) {
17958
17958
  calls.push({
17959
17959
  address: spokeAddr,
17960
17960
  name: "getDynamicReserveConfig",
17961
- params: [rid, key2]
17961
+ params: [rid, key3]
17962
17962
  });
17963
17963
  }
17964
17964
  }
@@ -18283,11 +18283,11 @@ var getAaveV4ReservesDataConverter = (lender, chainId, prices, additionalYields,
18283
18283
  const rawTotalDebt = data[offset + 4];
18284
18284
  offset += BASE_CALLS_PER_RESERVE;
18285
18285
  const dynamicConfigs = {};
18286
- for (let key2 = 0; key2 < dynConfigCount; key2++) {
18286
+ for (let key3 = 0; key3 < dynConfigCount; key3++) {
18287
18287
  const rawDynConfig = data[offset];
18288
18288
  offset += 1;
18289
18289
  if (rawDynConfig && rawDynConfig !== "0x") {
18290
- dynamicConfigs[key2] = {
18290
+ dynamicConfigs[key3] = {
18291
18291
  collateralFactor: Number(rawDynConfig?.collateralFactor ?? 0),
18292
18292
  maxLiquidationBonus: Number(
18293
18293
  rawDynConfig?.maxLiquidationBonus ?? 0
@@ -20144,7 +20144,7 @@ var MIDNIGHT_BOOK_LEVELS = 20;
20144
20144
  var LKG_TTL_SEC = 30 * 60;
20145
20145
  var lastGood = /* @__PURE__ */ new Map();
20146
20146
  async function fetchTopAndBookWithFallback(source, chainId, marketId, nowSec9) {
20147
- const key2 = `${chainId}:${marketId}`;
20147
+ const key3 = `${chainId}:${marketId}`;
20148
20148
  let fresh = null;
20149
20149
  if (source.getTopAndBook) {
20150
20150
  fresh = await source.getTopAndBook(marketId, MIDNIGHT_BOOK_LEVELS).catch(() => null);
@@ -20153,10 +20153,10 @@ async function fetchTopAndBookWithFallback(source, chainId, marketId, nowSec9) {
20153
20153
  if (top) fresh = { top, book: { bids: [], asks: [] } };
20154
20154
  }
20155
20155
  if (fresh) {
20156
- lastGood.set(key2, { top: fresh.top, book: fresh.book, at: nowSec9 });
20156
+ lastGood.set(key3, { top: fresh.top, book: fresh.book, at: nowSec9 });
20157
20157
  return { top: fresh.top, book: fresh.book };
20158
20158
  }
20159
- const cached = lastGood.get(key2);
20159
+ const cached = lastGood.get(key3);
20160
20160
  if (cached && nowSec9 - cached.at <= LKG_TTL_SEC) {
20161
20161
  return { top: cached.top, book: cached.book };
20162
20162
  }
@@ -20757,7 +20757,7 @@ var TERM_BOOK_LEVELS = 20;
20757
20757
  var LKG_TTL_SEC2 = 30 * 60;
20758
20758
  var lastGood2 = /* @__PURE__ */ new Map();
20759
20759
  async function fetchTopAndBookWithFallback2(source, chainId, config, nowSec9) {
20760
- const key2 = `${chainId}:${config.termRepoId}`;
20760
+ const key3 = `${chainId}:${config.termRepoId}`;
20761
20761
  let fresh = null;
20762
20762
  if (source.getTopAndBook) {
20763
20763
  fresh = await source.getTopAndBook(config, TERM_BOOK_LEVELS).catch(() => null);
@@ -20766,7 +20766,7 @@ async function fetchTopAndBookWithFallback2(source, chainId, config, nowSec9) {
20766
20766
  if (top) fresh = { top, book: { bids: [], asks: [] }, auction: null };
20767
20767
  }
20768
20768
  if (fresh) {
20769
- lastGood2.set(key2, {
20769
+ lastGood2.set(key3, {
20770
20770
  top: fresh.top,
20771
20771
  book: fresh.book,
20772
20772
  auction: fresh.auction ?? null,
@@ -20774,7 +20774,7 @@ async function fetchTopAndBookWithFallback2(source, chainId, config, nowSec9) {
20774
20774
  });
20775
20775
  return { top: fresh.top, book: fresh.book, auction: fresh.auction ?? null };
20776
20776
  }
20777
- const cached = lastGood2.get(key2);
20777
+ const cached = lastGood2.get(key3);
20778
20778
  if (cached && nowSec9 - cached.at <= LKG_TTL_SEC2) {
20779
20779
  const stillOpen = cached.auction && cached.auction.endTime > nowSec9 ? cached.auction : null;
20780
20780
  return { top: cached.top, book: cached.book, auction: stillOpen };
@@ -21365,10 +21365,10 @@ async function fetchLiquityMarkets(lender, chainId) {
21365
21365
  function liquityLenderKey(lender, chainId, collIndex) {
21366
21366
  return `${lender}_${chainId}_${collIndex}`;
21367
21367
  }
21368
- function liquityKeyParts(key2) {
21369
- const base = LIQUITY_FAMILY_LENDERS.find((b) => key2.startsWith(b + "_"));
21368
+ function liquityKeyParts(key3) {
21369
+ const base = LIQUITY_FAMILY_LENDERS.find((b) => key3.startsWith(b + "_"));
21370
21370
  if (!base) return void 0;
21371
- const suffix = key2.slice(base.length + 1);
21371
+ const suffix = key3.slice(base.length + 1);
21372
21372
  const m = suffix.match(/^(\d+)_(\d+)$/);
21373
21373
  if (!m) return void 0;
21374
21374
  return { lender: base, chainId: m[1], collIndex: Number(m[2]) };
@@ -21676,9 +21676,9 @@ async function fetchRiverMarkets(lender, chainId) {
21676
21676
  function riverLenderKey(lender, chainId, index) {
21677
21677
  return `${lender}_${chainId}_${index}`;
21678
21678
  }
21679
- function riverKeyParts(key2) {
21680
- if (!key2.startsWith("RIVER_")) return void 0;
21681
- const suffix = key2.slice("RIVER_".length);
21679
+ function riverKeyParts(key3) {
21680
+ if (!key3.startsWith("RIVER_")) return void 0;
21681
+ const suffix = key3.slice("RIVER_".length);
21682
21682
  const m = suffix.match(/^(\d+)_(\d+)$/);
21683
21683
  if (!m) return void 0;
21684
21684
  return { lender: "RIVER", chainId: m[1], index: Number(m[2]) };
@@ -22229,8 +22229,8 @@ function getCachedTermMaxMarkets(chainId) {
22229
22229
  const prefix = `${chainId}:`;
22230
22230
  const now = Date.now();
22231
22231
  const out = [];
22232
- for (const [key2, hit] of marketCache) {
22233
- if (!key2.startsWith(prefix)) continue;
22232
+ for (const [key3, hit] of marketCache) {
22233
+ if (!key3.startsWith(prefix)) continue;
22234
22234
  if (now - hit.at > MARKET_CACHE_TTL_MS) continue;
22235
22235
  out.push(hit.config);
22236
22236
  }
@@ -22296,8 +22296,8 @@ function fmtDuration2(sec) {
22296
22296
  function priceFor(address, chainId, tokens, prices) {
22297
22297
  const lower3 = address.toLowerCase();
22298
22298
  const token = tokens[lower3];
22299
- const key2 = toOracleKey(token?.assetGroup) || toGenericPriceKey(lower3, chainId);
22300
- return prices[key2] ?? 0;
22299
+ const key3 = toOracleKey(token?.assetGroup) || toGenericPriceKey(lower3, chainId);
22300
+ return prices[key3] ?? 0;
22301
22301
  }
22302
22302
  function convertTellerMarketsToResponse(raw, chainId, prices = {}, _additionalYields = {
22303
22303
  intrinsicYields: {},
@@ -22640,8 +22640,8 @@ function currencyFor7(address, decimals, tokens) {
22640
22640
  }
22641
22641
  function priceFor2(address, chainId, prices, tokens) {
22642
22642
  const asset = tokens[address];
22643
- const key2 = toOracleKey(asset?.assetGroup) || toGenericPriceKey(address, chainId);
22644
- return prices[key2] ?? 0;
22643
+ const key3 = toOracleKey(asset?.assetGroup) || toGenericPriceKey(address, chainId);
22644
+ return prices[key3] ?? 0;
22645
22645
  }
22646
22646
  function convertTermMaxMarketsToResponse(raw, chainId, prices = {}, _additionalYields = {
22647
22647
  intrinsicYields: {},
@@ -23004,8 +23004,8 @@ async function fetchInverseMarkets(lender, chainId) {
23004
23004
  return { ...empty, dbrPriceDola: await dbrPricePromise };
23005
23005
  }
23006
23006
  }
23007
- function num(api, key2) {
23008
- const v = api?.[key2];
23007
+ function num(api, key3) {
23008
+ const v = api?.[key3];
23009
23009
  return typeof v === "number" && Number.isFinite(v) ? v : null;
23010
23010
  }
23011
23011
  var DEFAULT_BANDS = 10;
@@ -23258,6 +23258,19 @@ async function fetchLlamaLendMarkets(lender, chainId) {
23258
23258
  return empty;
23259
23259
  }
23260
23260
  }
23261
+
23262
+ // src/prices/oracle-prices/fetchers/resupplyRoster.ts
23263
+ var rosterCache = /* @__PURE__ */ new Map();
23264
+ var key = (chainId, lender) => `${chainId}:${lender}`;
23265
+ function setResupplyPairRoster(chainId, lender, pairs) {
23266
+ if (pairs.length === 0) return;
23267
+ rosterCache.set(key(chainId, lender), pairs);
23268
+ }
23269
+ function getResupplyPairRoster(chainId, lender) {
23270
+ return rosterCache.get(key(chainId, lender)) ?? [];
23271
+ }
23272
+
23273
+ // src/lending/public-data/resupply/fetchPublic.ts
23261
23274
  var VAULT_PRICE_ABI = [
23262
23275
  {
23263
23276
  name: "convertToAssets",
@@ -23523,6 +23536,14 @@ async function fetchResupplyMarkets(lender, chainId) {
23523
23536
  };
23524
23537
  });
23525
23538
  await attachCollateralRewards(chainId, convexPoolUtil, pairs);
23539
+ setResupplyPairRoster(
23540
+ chainId,
23541
+ lender,
23542
+ pairs.map((p) => ({
23543
+ pair: p.identity.pair.toLowerCase(),
23544
+ underlying: p.identity.underlying.toLowerCase()
23545
+ }))
23546
+ );
23526
23547
  return { lender, config, pairs, rsup };
23527
23548
  }
23528
23549
  async function readRewardContext(chainId, registry, utilities) {
@@ -23616,8 +23637,8 @@ async function attachCollateralRewards(chainId, convexPoolUtil, pairs) {
23616
23637
  if (typeof t !== "string" || typeof rate !== "bigint" || rate === 0n) {
23617
23638
  return;
23618
23639
  }
23619
- const key2 = t.toLowerCase();
23620
- byToken.set(key2, (byToken.get(key2) ?? 0n) + rate);
23640
+ const key3 = t.toLowerCase();
23641
+ byToken.set(key3, (byToken.get(key3) ?? 0n) + rate);
23621
23642
  });
23622
23643
  p.collateralRewards = [...byToken.entries()].map(
23623
23644
  ([token, ratePerSecPerShare]) => ({ token, ratePerSecPerShare })
@@ -23626,14 +23647,14 @@ async function attachCollateralRewards(chainId, convexPoolUtil, pairs) {
23626
23647
  }
23627
23648
 
23628
23649
  // src/prices/oracle-prices/fetchers/curvanceRoster.ts
23629
- var rosterCache = /* @__PURE__ */ new Map();
23630
- var key = (chainId, lender) => `${chainId}:${lender}`;
23650
+ var rosterCache2 = /* @__PURE__ */ new Map();
23651
+ var key2 = (chainId, lender) => `${chainId}:${lender}`;
23631
23652
  function setCurvanceAssetRoster(chainId, lender, markets) {
23632
23653
  if (markets.length === 0) return;
23633
- rosterCache.set(key(chainId, lender), markets);
23654
+ rosterCache2.set(key2(chainId, lender), markets);
23634
23655
  }
23635
23656
  function getCurvanceAssetRoster(chainId, lender) {
23636
- return rosterCache.get(key(chainId, lender)) ?? [];
23657
+ return rosterCache2.get(key2(chainId, lender)) ?? [];
23637
23658
  }
23638
23659
 
23639
23660
  // src/lending/public-data/curvance/fetchPublic.ts
@@ -24012,9 +24033,9 @@ function allowlist(config) {
24012
24033
  function inverseLenderKey(lender, market) {
24013
24034
  return `${lender}_${market.replace(/^0x/i, "").toUpperCase()}`;
24014
24035
  }
24015
- function inverseKeyParts(key2) {
24016
- if (!key2.startsWith("INVERSE_")) return void 0;
24017
- const suffix = key2.slice("INVERSE_".length);
24036
+ function inverseKeyParts(key3) {
24037
+ if (!key3.startsWith("INVERSE_")) return void 0;
24038
+ const suffix = key3.slice("INVERSE_".length);
24018
24039
  if (!/^[0-9A-F]{40}$/.test(suffix)) return void 0;
24019
24040
  return { lender: "INVERSE", market: "0x" + suffix.toLowerCase() };
24020
24041
  }
@@ -24202,9 +24223,9 @@ function convertInverseMarketsToResponse(raw, chainId, prices = {}, _additionalY
24202
24223
  function llamaLendLenderKey(lender, controller) {
24203
24224
  return `${lender}_${controller.replace(/^0x/i, "").toUpperCase()}`;
24204
24225
  }
24205
- function llamaLendKeyParts(key2) {
24206
- if (!key2.startsWith("LLAMALEND_")) return void 0;
24207
- const suffix = key2.slice("LLAMALEND_".length);
24226
+ function llamaLendKeyParts(key3) {
24227
+ if (!key3.startsWith("LLAMALEND_")) return void 0;
24228
+ const suffix = key3.slice("LLAMALEND_".length);
24208
24229
  if (!/^[0-9A-F]{40}$/.test(suffix)) return void 0;
24209
24230
  return { lender: "LLAMALEND", controller: "0x" + suffix.toLowerCase() };
24210
24231
  }
@@ -24529,9 +24550,9 @@ function resolveWrappedMarket(chainId, identity) {
24529
24550
  function resupplyLenderKey(lender, chainId, pair) {
24530
24551
  return `${lender}_${chainId}_${pair.replace(/^0x/i, "").toUpperCase()}`;
24531
24552
  }
24532
- function resupplyKeyParts(key2) {
24533
- if (!key2.startsWith("RESUPPLY_")) return void 0;
24534
- const suffix = key2.slice("RESUPPLY_".length);
24553
+ function resupplyKeyParts(key3) {
24554
+ if (!key3.startsWith("RESUPPLY_")) return void 0;
24555
+ const suffix = key3.slice("RESUPPLY_".length);
24535
24556
  const m = suffix.match(/^(\d+)_([0-9A-Fa-f]{40})$/);
24536
24557
  if (!m) return void 0;
24537
24558
  return {
@@ -24555,8 +24576,8 @@ function buildRewardEntries(p, rsup, chainId, prices, tokens, collateralUsd, deb
24555
24576
  const priceOf2 = (address) => {
24556
24577
  const lower3 = address.toLowerCase();
24557
24578
  const token = tokens[lower3];
24558
- const key2 = toOracleKey(token?.assetGroup) || toGenericPriceKey(lower3, chainId);
24559
- return prices[key2] ?? 0;
24579
+ const key3 = toOracleKey(token?.assetGroup) || toGenericPriceKey(lower3, chainId);
24580
+ return prices[key3] ?? 0;
24560
24581
  };
24561
24582
  const collateral = [];
24562
24583
  if (collateralUsd > 0) {
@@ -25055,8 +25076,8 @@ function resolvePositionManagers(cfg, marketManager) {
25055
25076
  const direct = map[marketManager];
25056
25077
  if (direct) return { ...direct };
25057
25078
  const target = marketManager.toLowerCase();
25058
- for (const key2 of Object.keys(map)) {
25059
- if (key2.toLowerCase() === target) return { ...map[key2] };
25079
+ for (const key3 of Object.keys(map)) {
25080
+ if (key3.toLowerCase() === target) return { ...map[key3] };
25060
25081
  }
25061
25082
  return void 0;
25062
25083
  }
@@ -25142,8 +25163,8 @@ var DSS_KEY_PREFIXES = ["USDD", "SKY"];
25142
25163
  var DSS_KEY_RE = new RegExp(
25143
25164
  `^(${DSS_KEY_PREFIXES.join("|")})_(\\d+)_([A-Z0-9][A-Z0-9_-]*)$`
25144
25165
  );
25145
- function dssKeyParts(key2) {
25146
- const m = key2.match(DSS_KEY_RE);
25166
+ function dssKeyParts(key3) {
25167
+ const m = key3.match(DSS_KEY_RE);
25147
25168
  if (!m) return void 0;
25148
25169
  return { lender: m[1], chainId: m[2], ilk: keySegmentToIlk(m[3]) };
25149
25170
  }
@@ -25429,9 +25450,9 @@ async function fetchFrankencoinMarkets(lender, chainId) {
25429
25450
  function frankencoinLenderKey(lender, chainId, position) {
25430
25451
  return `${lender}_${chainId}_${position.replace(/^0x/i, "").toUpperCase()}`;
25431
25452
  }
25432
- function frankencoinKeyParts(key2) {
25433
- if (!key2.startsWith("FRANKENCOIN_")) return void 0;
25434
- const suffix = key2.slice("FRANKENCOIN_".length);
25453
+ function frankencoinKeyParts(key3) {
25454
+ if (!key3.startsWith("FRANKENCOIN_")) return void 0;
25455
+ const suffix = key3.slice("FRANKENCOIN_".length);
25435
25456
  const m = suffix.match(/^(\d+)_([0-9A-Fa-f]{40})$/);
25436
25457
  if (!m) return void 0;
25437
25458
  return {
@@ -27222,20 +27243,20 @@ var getCompoundV2UserDataConverter = (lender, chainId, account, metaMap) => {
27222
27243
  const asstsIn = assetsInRaw.map((a) => a.toLowerCase());
27223
27244
  for (let i = 0; i < tokens.length; i++) {
27224
27245
  const { cToken } = tokens[i];
27225
- const key2 = createMarketUid(chainId, lender, cToken);
27246
+ const key3 = createMarketUid(chainId, lender, cToken);
27226
27247
  const { dataForAsset, addedDebt, addedDeposits } = createCompoundV2Entry(
27227
27248
  i,
27228
27249
  data,
27229
- key2,
27250
+ key3,
27230
27251
  asstsIn,
27231
27252
  cToken,
27232
- metaMap[key2],
27253
+ metaMap[key3],
27233
27254
  0
27234
27255
  );
27235
27256
  if (!dataForAsset) continue;
27236
27257
  totalDebt24h += addedDebt;
27237
27258
  totalDeposits24h += addedDeposits;
27238
- lendingPositions[key2] = dataForAsset;
27259
+ lendingPositions[key3] = dataForAsset;
27239
27260
  }
27240
27261
  const payload = {
27241
27262
  chainId,
@@ -27257,7 +27278,7 @@ var getCompoundV2UserDataConverter = (lender, chainId, account, metaMap) => {
27257
27278
  }
27258
27279
  }
27259
27280
  };
27260
- function createCompoundV2Entry(i, data, key2, assetsIn, vToken, meta, claimableRewards) {
27281
+ function createCompoundV2Entry(i, data, key3, assetsIn, vToken, meta, claimableRewards) {
27261
27282
  if (isFailedCall(data[3 * i]) || isFailedCall(data[3 * i + 1])) {
27262
27283
  return {
27263
27284
  dataForAsset: void 0,
@@ -27284,7 +27305,7 @@ function createCompoundV2Entry(i, data, key2, assetsIn, vToken, meta, claimableR
27284
27305
  const oPrice = getOraclePrice(meta);
27285
27306
  const priceHist = meta?.price?.priceUsd24h ?? price2;
27286
27307
  const dataForAsset = {
27287
- marketUid: key2,
27308
+ marketUid: key3,
27288
27309
  underlying: assetMeta.address,
27289
27310
  deposits: currentATokenBalance,
27290
27311
  debtStable: "0",
@@ -27385,14 +27406,14 @@ function indexesFromApiPositions(positions, owner) {
27385
27406
  return [...set];
27386
27407
  }
27387
27408
  function fetchEulerActiveIndexesViaApi(chainId, owner) {
27388
- const key2 = `${chainId}:${owner.toLowerCase()}`;
27389
- const cached = accountCache.get(key2);
27409
+ const key3 = `${chainId}:${owner.toLowerCase()}`;
27410
+ const cached = accountCache.get(key3);
27390
27411
  if (cached) return cached.promise;
27391
27412
  const promise = fetchEulerPositionsFromApi(chainId, owner).then(
27392
27413
  (positions) => positions === void 0 ? void 0 : indexesFromApiPositions(positions, owner)
27393
27414
  ).catch(() => void 0);
27394
- const timer = setTimeout(() => accountCache.delete(key2), ACCOUNT_CACHE_TTL_MS);
27395
- accountCache.set(key2, { promise, timer });
27415
+ const timer = setTimeout(() => accountCache.delete(key3), ACCOUNT_CACHE_TTL_MS);
27416
+ accountCache.set(key3, { promise, timer });
27396
27417
  return promise;
27397
27418
  }
27398
27419
  async function fetchEulerSubAccountIndexes(chainId, owner) {
@@ -27407,14 +27428,14 @@ function getResolvedEulerSubAccountIndexes(chainId, account) {
27407
27428
  return resolvedIndexesStore.get(`${chainId}:${account.toLowerCase()}`)?.indexes;
27408
27429
  }
27409
27430
  function storeResolvedIndexes(chainId, account, indexes) {
27410
- const key2 = `${chainId}:${account.toLowerCase()}`;
27411
- const existing = resolvedIndexesStore.get(key2);
27431
+ const key3 = `${chainId}:${account.toLowerCase()}`;
27432
+ const existing = resolvedIndexesStore.get(key3);
27412
27433
  if (existing) clearTimeout(existing.timer);
27413
27434
  const timer = setTimeout(
27414
- () => resolvedIndexesStore.delete(key2),
27435
+ () => resolvedIndexesStore.delete(key3),
27415
27436
  RESOLVED_STORE_TTL_MS
27416
27437
  );
27417
- resolvedIndexesStore.set(key2, { indexes, timer });
27438
+ resolvedIndexesStore.set(key3, { indexes, timer });
27418
27439
  }
27419
27440
  function getSubAccountAddress(owner, index) {
27420
27441
  const prefix = owner.slice(0, 40);
@@ -27637,12 +27658,12 @@ var SUBGRAPH_CACHE_TTL_MS = 3e4;
27637
27658
  var SUBGRAPH_TIMEOUT_MS2 = 1e4;
27638
27659
  var subgraphCache = /* @__PURE__ */ new Map();
27639
27660
  function fetchDolomiteAccountNumbers(chainId, owner) {
27640
- const key2 = `${chainId}:${owner.toLowerCase()}`;
27641
- const cached = subgraphCache.get(key2);
27661
+ const key3 = `${chainId}:${owner.toLowerCase()}`;
27662
+ const cached = subgraphCache.get(key3);
27642
27663
  if (cached) return cached.promise;
27643
27664
  const promise = fetchAccountNumbersFromSubgraph(chainId, owner).then((ns) => dedupeWithDefault(ns)).catch(() => ["0"]);
27644
- const timer = setTimeout(() => subgraphCache.delete(key2), SUBGRAPH_CACHE_TTL_MS);
27645
- subgraphCache.set(key2, { promise, timer });
27665
+ const timer = setTimeout(() => subgraphCache.delete(key3), SUBGRAPH_CACHE_TTL_MS);
27666
+ subgraphCache.set(key3, { promise, timer });
27646
27667
  return promise;
27647
27668
  }
27648
27669
  function dedupeWithDefault(numbers) {
@@ -27685,14 +27706,14 @@ function getResolvedDolomiteAccountNumbers(chainId, account) {
27685
27706
  return resolvedStore.get(`${chainId}:${account.toLowerCase()}`)?.numbers;
27686
27707
  }
27687
27708
  function storeResolvedNumbers(chainId, account, numbers) {
27688
- const key2 = `${chainId}:${account.toLowerCase()}`;
27689
- const existing = resolvedStore.get(key2);
27709
+ const key3 = `${chainId}:${account.toLowerCase()}`;
27710
+ const existing = resolvedStore.get(key3);
27690
27711
  if (existing) clearTimeout(existing.timer);
27691
27712
  const timer = setTimeout(
27692
- () => resolvedStore.delete(key2),
27713
+ () => resolvedStore.delete(key3),
27693
27714
  RESOLVED_STORE_TTL_MS2
27694
27715
  );
27695
- resolvedStore.set(key2, { numbers, timer });
27716
+ resolvedStore.set(key3, { numbers, timer });
27696
27717
  }
27697
27718
  var buildDolomiteUserCall = async (chainId, _lender, account, accountNumbers) => {
27698
27719
  const margin = dolomiteConfigs()?.[chainId]?.dolomiteMargin;
@@ -27992,13 +28013,13 @@ var ONE3 = 10n ** 18n;
27992
28013
  var ROSTER_TTL_MS = 5 * 6e4;
27993
28014
  var DISCOVERY_TTL_MS = 6e4;
27994
28015
  var SNAPSHOT_CHUNK = 12;
27995
- var rosterCache2 = /* @__PURE__ */ new Map();
28016
+ var rosterCache3 = /* @__PURE__ */ new Map();
27996
28017
  var discoveryCache2 = /* @__PURE__ */ new Map();
27997
28018
  var rosterKey = (chainId, lender) => `${chainId}:${lender}`;
27998
28019
  var discoveryKey = (chainId, lender, account) => `${chainId}:${lender}:${account.toLowerCase()}`;
27999
28020
  var getCachedResupplyDiscovery = (chainId, lender, account) => discoveryCache2.get(discoveryKey(chainId, lender, account));
28000
28021
  var fetchRoster = async (chainId, lender, registry, allowlist2) => {
28001
- const cached = rosterCache2.get(rosterKey(chainId, lender));
28022
+ const cached = rosterCache3.get(rosterKey(chainId, lender));
28002
28023
  if (cached && Date.now() - cached.at < ROSTER_TTL_MS) return cached;
28003
28024
  let addresses = [];
28004
28025
  const [raw] = await multicallRetryUniversal({
@@ -28018,7 +28039,7 @@ var fetchRoster = async (chainId, lender, registry, allowlist2) => {
28018
28039
  }
28019
28040
  if (addresses.length === 0) {
28020
28041
  const empty = { pairs: [], at: Date.now() };
28021
- rosterCache2.set(rosterKey(chainId, lender), empty);
28042
+ rosterCache3.set(rosterKey(chainId, lender), empty);
28022
28043
  return empty;
28023
28044
  }
28024
28045
  const cols = await multicallRetryUniversal({
@@ -28035,7 +28056,7 @@ var fetchRoster = async (chainId, lender, registry, allowlist2) => {
28035
28056
  (p) => typeof p.collateral === "string" && p.collateral.startsWith("0x")
28036
28057
  );
28037
28058
  const roster = { pairs, at: Date.now() };
28038
- rosterCache2.set(rosterKey(chainId, lender), roster);
28059
+ rosterCache3.set(rosterKey(chainId, lender), roster);
28039
28060
  return roster;
28040
28061
  };
28041
28062
  var discoverPositions = async (chainId, pairs, account) => {
@@ -28070,8 +28091,8 @@ var discoverPositions = async (chainId, pairs, account) => {
28070
28091
  };
28071
28092
  var buildResupplyUserCall = async (chainId, lender, account) => {
28072
28093
  const cfg = resupplyConfigFor(lender, chainId);
28073
- const key2 = discoveryKey(chainId, lender, account);
28074
- const stash = (positions2) => discoveryCache2.set(key2, { positions: positions2, at: Date.now() });
28094
+ const key3 = discoveryKey(chainId, lender, account);
28095
+ const stash = (positions2) => discoveryCache2.set(key3, { positions: positions2, at: Date.now() });
28075
28096
  if (!cfg?.registry) {
28076
28097
  stash([]);
28077
28098
  return [];
@@ -28086,7 +28107,7 @@ var buildResupplyUserCall = async (chainId, lender, account) => {
28086
28107
  stash([]);
28087
28108
  return [];
28088
28109
  }
28089
- const cachedDiscovery = discoveryCache2.get(key2);
28110
+ const cachedDiscovery = discoveryCache2.get(key3);
28090
28111
  const positions = cachedDiscovery && Date.now() - cachedDiscovery.at < DISCOVERY_TTL_MS ? cachedDiscovery.positions : await discoverPositions(chainId, roster.pairs, account);
28091
28112
  stash(positions);
28092
28113
  if (positions.length === 0) return [];
@@ -28098,20 +28119,20 @@ var buildResupplyUserCall = async (chainId, lender, account) => {
28098
28119
  ]);
28099
28120
  };
28100
28121
  function __resetResupplyUserCaches() {
28101
- rosterCache2.clear();
28122
+ rosterCache3.clear();
28102
28123
  discoveryCache2.clear();
28103
28124
  }
28104
28125
  var ROSTER_TTL_MS2 = 5 * 6e4;
28105
28126
  var DISCOVERY_TTL_MS2 = 6e4;
28106
28127
  var CURVANCE_MARKET_READS = 2;
28107
28128
  var CURVANCE_READS_PER_TOKEN = 4;
28108
- var rosterCache3 = /* @__PURE__ */ new Map();
28129
+ var rosterCache4 = /* @__PURE__ */ new Map();
28109
28130
  var discoveryCache3 = /* @__PURE__ */ new Map();
28110
28131
  var rosterKey2 = (chainId, lender) => `${chainId}:${lender}`;
28111
28132
  var discoveryKey2 = (chainId, lender, account) => `${chainId}:${lender}:${account.toLowerCase()}`;
28112
28133
  var getCachedCurvanceDiscovery = (chainId, lender, account) => discoveryCache3.get(discoveryKey2(chainId, lender, account));
28113
28134
  var fetchRoster2 = async (chainId, lender, centralRegistry, allowlist2) => {
28114
- const cached = rosterCache3.get(rosterKey2(chainId, lender));
28135
+ const cached = rosterCache4.get(rosterKey2(chainId, lender));
28115
28136
  if (cached && Date.now() - cached.at < ROSTER_TTL_MS2) return cached;
28116
28137
  let managers = [];
28117
28138
  const [raw] = await multicallRetryUniversal({
@@ -28131,7 +28152,7 @@ var fetchRoster2 = async (chainId, lender, centralRegistry, allowlist2) => {
28131
28152
  }
28132
28153
  if (managers.length === 0) {
28133
28154
  const empty = { markets: [], at: Date.now() };
28134
- rosterCache3.set(rosterKey2(chainId, lender), empty);
28155
+ rosterCache4.set(rosterKey2(chainId, lender), empty);
28135
28156
  return empty;
28136
28157
  }
28137
28158
  const listed = await multicallRetryUniversal({
@@ -28183,7 +28204,7 @@ var fetchRoster2 = async (chainId, lender, centralRegistry, allowlist2) => {
28183
28204
  })).filter((t) => t.asset !== "")
28184
28205
  })).filter((m) => m.cTokens.length > 0);
28185
28206
  const roster = { markets, at: Date.now() };
28186
- rosterCache3.set(rosterKey2(chainId, lender), roster);
28207
+ rosterCache4.set(rosterKey2(chainId, lender), roster);
28187
28208
  return roster;
28188
28209
  };
28189
28210
  var discoverPositions2 = async (chainId, markets, account) => {
@@ -28223,8 +28244,8 @@ var discoverPositions2 = async (chainId, markets, account) => {
28223
28244
  };
28224
28245
  var buildCurvanceUserCall = async (chainId, lender, account) => {
28225
28246
  const cfg = curvanceConfigFor(lender, chainId);
28226
- const key2 = discoveryKey2(chainId, lender, account);
28227
- const stash = (positions2) => discoveryCache3.set(key2, { positions: positions2, at: Date.now() });
28247
+ const key3 = discoveryKey2(chainId, lender, account);
28248
+ const stash = (positions2) => discoveryCache3.set(key3, { positions: positions2, at: Date.now() });
28228
28249
  if (!cfg?.centralRegistry) {
28229
28250
  stash([]);
28230
28251
  return [];
@@ -28244,7 +28265,7 @@ var buildCurvanceUserCall = async (chainId, lender, account) => {
28244
28265
  stash([]);
28245
28266
  return [];
28246
28267
  }
28247
- const cached = discoveryCache3.get(key2);
28268
+ const cached = discoveryCache3.get(key3);
28248
28269
  const positions = cached && Date.now() - cached.at < DISCOVERY_TTL_MS2 ? cached.positions : await discoverPositions2(chainId, roster.markets, account);
28249
28270
  stash(positions);
28250
28271
  if (positions.length === 0) return [];
@@ -28802,13 +28823,13 @@ var getAaveV2UserDataConverter = (lender, chainId, account, metaMap) => {
28802
28823
  let totalDeposits24h = 0;
28803
28824
  for (let i = 0; i < assetsToQuery.length; i++) {
28804
28825
  const asset = assetsToQuery[i];
28805
- const key2 = createMarketUid(chainId, lender, asset);
28806
- const metaEntity = metaMap?.[key2];
28807
- const { dataForAsset, addedDebt, addedDeposits } = createAaveV2Entry(i, data, key2, metaEntity, 0);
28826
+ const key3 = createMarketUid(chainId, lender, asset);
28827
+ const metaEntity = metaMap?.[key3];
28828
+ const { dataForAsset, addedDebt, addedDeposits } = createAaveV2Entry(i, data, key3, metaEntity, 0);
28808
28829
  if (!dataForAsset) continue;
28809
28830
  totalDebt24h += addedDebt;
28810
28831
  totalDeposits24h += addedDeposits;
28811
- lendingPositions[key2] = dataForAsset;
28832
+ lendingPositions[key3] = dataForAsset;
28812
28833
  }
28813
28834
  const payload = {
28814
28835
  chainId,
@@ -28829,7 +28850,7 @@ var getAaveV2UserDataConverter = (lender, chainId, account, metaMap) => {
28829
28850
  }
28830
28851
  }
28831
28852
  };
28832
- function createAaveV2Entry(i, data, key2, meta, claimableRewards) {
28853
+ function createAaveV2Entry(i, data, key3, meta, claimableRewards) {
28833
28854
  const reserveData = data[i];
28834
28855
  if (isFailedCall(reserveData)) {
28835
28856
  return { dataForAsset: void 0, addedDeposits: 0, addedDebt: 0 };
@@ -28853,7 +28874,7 @@ function createAaveV2Entry(i, data, key2, meta, claimableRewards) {
28853
28874
  const oPrice = getOraclePrice(meta);
28854
28875
  const priceHist = meta?.price?.priceUsd24h ?? price2;
28855
28876
  const dataForAsset = {
28856
- marketUid: key2,
28877
+ marketUid: key3,
28857
28878
  underlying: assetMeta.address,
28858
28879
  deposits: currentATokenBalance,
28859
28880
  debtStable: currentStableDebt,
@@ -28898,18 +28919,18 @@ var getAaveV3UserDataConverter = (lender, chainId, account, metaMap) => {
28898
28919
  let totalDeposits24h = 0;
28899
28920
  for (let i = 0; i < assetsToQuery.length; i++) {
28900
28921
  const asset = assetsToQuery[i];
28901
- const key2 = createMarketUid(chainId, lender, asset);
28902
- const metaEntity = metaMap?.[key2];
28922
+ const key3 = createMarketUid(chainId, lender, asset);
28923
+ const metaEntity = metaMap?.[key3];
28903
28924
  const { dataForAsset, addedDebt, addedDeposits } = createAaveV3Entry(
28904
28925
  i,
28905
28926
  data,
28906
- key2,
28927
+ key3,
28907
28928
  metaEntity
28908
28929
  );
28909
28930
  if (!dataForAsset) continue;
28910
28931
  totalDebt24h += addedDebt;
28911
28932
  totalDeposits24h += addedDeposits;
28912
- lendingPositions[key2] = dataForAsset;
28933
+ lendingPositions[key3] = dataForAsset;
28913
28934
  }
28914
28935
  const payload = {
28915
28936
  chainId,
@@ -28929,7 +28950,7 @@ var getAaveV3UserDataConverter = (lender, chainId, account, metaMap) => {
28929
28950
  expectedNumberOfCalls
28930
28951
  ];
28931
28952
  };
28932
- function createAaveV3Entry(i, data, key2, meta) {
28953
+ function createAaveV3Entry(i, data, key3, meta) {
28933
28954
  const reserveData = data[i];
28934
28955
  if (isFailedCall(reserveData)) {
28935
28956
  return { dataForAsset: void 0, addedDeposits: 0, addedDebt: 0 };
@@ -28953,7 +28974,7 @@ function createAaveV3Entry(i, data, key2, meta) {
28953
28974
  const oPrice = getOraclePrice(meta);
28954
28975
  const priceHist = meta?.price?.priceUsd24h ?? price2;
28955
28976
  const dataForAsset = {
28956
- marketUid: key2,
28977
+ marketUid: key3,
28957
28978
  underlying: assetMeta.address,
28958
28979
  deposits: currentATokenBalance,
28959
28980
  debtStable: currentStableDebt,
@@ -28997,8 +29018,8 @@ function parseSingleBrokerData(data, validOwner, brokerAddress, lender, chainId,
28997
29018
  (c) => {
28998
29019
  const pool = c.pool.toLowerCase();
28999
29020
  allPools[pool] = c.underlying.toLowerCase();
29000
- const key2 = createMarketUid(chainId, lender, pool);
29001
- const metaEntity = metaMap?.[key2];
29021
+ const key3 = createMarketUid(chainId, lender, pool);
29022
+ const metaEntity = metaMap?.[key3];
29002
29023
  const decimals = metaEntity.asset?.decimals ?? 18;
29003
29024
  const depositsRaw = c.amount.toString();
29004
29025
  return {
@@ -29014,8 +29035,8 @@ function parseSingleBrokerData(data, validOwner, brokerAddress, lender, chainId,
29014
29035
  ...data[2 /* debts */][index].map((c) => {
29015
29036
  const pool = c.pool.toLowerCase();
29016
29037
  allPools[pool] = c.underlying.toLowerCase();
29017
- const key2 = createMarketUid(chainId, lender, pool);
29018
- const metaEntity = metaMap?.[key2];
29038
+ const key3 = createMarketUid(chainId, lender, pool);
29039
+ const metaEntity = metaMap?.[key3];
29019
29040
  const decimals = metaEntity.asset?.decimals ?? 18;
29020
29041
  return {
29021
29042
  [pool]: {
@@ -29029,8 +29050,8 @@ function parseSingleBrokerData(data, validOwner, brokerAddress, lender, chainId,
29029
29050
  {},
29030
29051
  ...Object.entries(allPools).map(
29031
29052
  ([pool, underlying]) => {
29032
- const key2 = createMarketUid(chainId, lender, pool);
29033
- const metaEntity = metaMap?.[key2];
29053
+ const key3 = createMarketUid(chainId, lender, pool);
29054
+ const metaEntity = metaMap?.[key3];
29034
29055
  const price2 = getDisplayPrice(metaEntity);
29035
29056
  const oPrice = getOraclePrice(metaEntity);
29036
29057
  const priceHist = metaEntity?.price?.priceUsd24h ?? price2;
@@ -29044,8 +29065,8 @@ function parseSingleBrokerData(data, validOwner, brokerAddress, lender, chainId,
29044
29065
  histData[id].totalDebt24h += Number(debt) * priceHist;
29045
29066
  histData[id].totalDeposits24h += Number(deposits) * priceHist;
29046
29067
  return {
29047
- [key2]: {
29048
- marketUid: key2,
29068
+ [key3]: {
29069
+ marketUid: key3,
29049
29070
  underlying,
29050
29071
  deposits,
29051
29072
  debt,
@@ -29132,8 +29153,8 @@ var getCompoundV3UserDataConverter = (lender, chainId, account, metaMap) => {
29132
29153
  let result = {};
29133
29154
  for (let i = 0; i < assetsNoBase.length; i++) {
29134
29155
  const asset = assetsNoBase[i];
29135
- const key3 = createMarketUid(chainId, lender, asset);
29136
- const metaEntity2 = metaMap?.[key3];
29156
+ const key4 = createMarketUid(chainId, lender, asset);
29157
+ const metaEntity2 = metaMap?.[key4];
29137
29158
  const assetMeta = metaEntity2.asset;
29138
29159
  const decimals = assetMeta?.decimals ?? 18;
29139
29160
  if (isFailedCall(data[i])) continue;
@@ -29144,8 +29165,8 @@ var getCompoundV3UserDataConverter = (lender, chainId, account, metaMap) => {
29144
29165
  const oPrice2 = getOraclePrice(metaEntity2);
29145
29166
  const priceHist2 = metaEntity2?.price?.priceUsd24h ?? price3;
29146
29167
  totalDeposits24h += Number(deposits2) * priceHist2;
29147
- result[key3] = {
29148
- marketUid: key3,
29168
+ result[key4] = {
29169
+ marketUid: key4,
29149
29170
  underlying: asset,
29150
29171
  deposits: deposits2,
29151
29172
  depositsUSD: Number(deposits2) * price3,
@@ -29162,8 +29183,8 @@ var getCompoundV3UserDataConverter = (lender, chainId, account, metaMap) => {
29162
29183
  const baseFailed = isFailedCall(data[assetsNoBase.length]) || isFailedCall(data[assetsNoBase.length + 1]);
29163
29184
  const depositsRaw = data[assetsNoBase.length]?.toString();
29164
29185
  const debtRaw = data[assetsNoBase.length + 1]?.toString();
29165
- const key2 = createMarketUid(chainId, lender, baseAsset);
29166
- const metaEntity = metaMap?.[key2];
29186
+ const key3 = createMarketUid(chainId, lender, baseAsset);
29187
+ const metaEntity = metaMap?.[key3];
29167
29188
  const baseMeta = metaEntity.asset;
29168
29189
  const baseDecimals = baseMeta.decimals ?? 18;
29169
29190
  const deposits = baseFailed ? "0" : parseRawAmount(depositsRaw, baseDecimals);
@@ -29174,8 +29195,8 @@ var getCompoundV3UserDataConverter = (lender, chainId, account, metaMap) => {
29174
29195
  totalDebt24h += Number(debt) * priceHist;
29175
29196
  totalDeposits24h += Number(deposits) * priceHist;
29176
29197
  const resultBase = baseFailed || depositsRaw === "0" && debtRaw === "0" ? {} : {
29177
- [key2]: {
29178
- marketUid: key2,
29198
+ [key3]: {
29199
+ marketUid: key3,
29179
29200
  underlying: baseAsset,
29180
29201
  deposits,
29181
29202
  debt,
@@ -29234,18 +29255,18 @@ var getYldrUserDataConverter = (lender, chainId, account, metaMap) => {
29234
29255
  let totalDeposits24h = 0;
29235
29256
  for (let i = 0; i < assetsToQuery.length; i++) {
29236
29257
  const asset = assetsToQuery[i];
29237
- const key2 = createMarketUid(chainId, lender, asset);
29238
- const metaEntity = metaMap?.[key2];
29258
+ const key3 = createMarketUid(chainId, lender, asset);
29259
+ const metaEntity = metaMap?.[key3];
29239
29260
  const { dataForAsset, addedDebt, addedDeposits } = createAaveV3Entry2(
29240
29261
  i,
29241
29262
  data,
29242
- key2,
29263
+ key3,
29243
29264
  metaEntity
29244
29265
  );
29245
29266
  if (!dataForAsset) continue;
29246
29267
  totalDebt24h += addedDebt;
29247
29268
  totalDeposits24h += addedDeposits;
29248
- lendingPositions[key2] = dataForAsset;
29269
+ lendingPositions[key3] = dataForAsset;
29249
29270
  }
29250
29271
  const payload = {
29251
29272
  chainId,
@@ -29265,7 +29286,7 @@ var getYldrUserDataConverter = (lender, chainId, account, metaMap) => {
29265
29286
  expectedNumberOfCalls
29266
29287
  ];
29267
29288
  };
29268
- function createAaveV3Entry2(i, data, key2, meta) {
29289
+ function createAaveV3Entry2(i, data, key3, meta) {
29269
29290
  const reserveData = data[i];
29270
29291
  if (isFailedCall(reserveData)) {
29271
29292
  return { dataForAsset: void 0, addedDeposits: 0, addedDebt: 0 };
@@ -29287,7 +29308,7 @@ function createAaveV3Entry2(i, data, key2, meta) {
29287
29308
  const oPrice = getOraclePrice(meta);
29288
29309
  const priceHist = meta?.price?.priceUsd24h ?? price2;
29289
29310
  const dataForAsset = {
29290
- marketUid: key2,
29311
+ marketUid: key3,
29291
29312
  underlying: assetMeta.address,
29292
29313
  deposits: currentATokenBalance,
29293
29314
  debtStable: "0",
@@ -29664,8 +29685,8 @@ function createMorphoEntryFromMarketWithLens(balanceInfo, metaMap, chainId, lend
29664
29685
  const termPositions = {};
29665
29686
  let aggregateDebtToken = borrowDec;
29666
29687
  if (brokerData) {
29667
- const mkTermPosition = (key2, debtToken, term) => {
29668
- termPositions[key2] = {
29688
+ const mkTermPosition = (key3, debtToken, term) => {
29689
+ termPositions[key3] = {
29669
29690
  marketUid: loanMarketUid,
29670
29691
  underlying: loanAddress,
29671
29692
  loanId: term.loanId,
@@ -30094,15 +30115,15 @@ function createAaveV4UserState(payload, lenderData, totalDeposits24h = 0, totalD
30094
30115
  debt += debtUSD + (debtStableUSD ?? 0);
30095
30116
  oracleDebt += debtUSDOracle + (pos.debtStableUSDOracle ?? debtStableUSD ?? 0);
30096
30117
  (rewards ?? []).forEach((rewardData) => {
30097
- const key2 = rewardData.asset;
30118
+ const key3 = rewardData.asset;
30098
30119
  rewardDepositAccrual += rewardData.depositRate * depositsUSD;
30099
30120
  rewardBorrowAccrual += rewardData.variableBorrowRate * debtUSD;
30100
30121
  const rewDepo = rewardData.depositRate * depositsUSD;
30101
30122
  const rewDebt = rewardData.variableBorrowRate * debtUSD;
30102
- if (!rewardsPerAsset[key2])
30103
- rewardsPerAsset[key2] = { depositApr: 0, borrowApr: 0 };
30104
- if (rewDepo > 0) rewardsPerAsset[key2].depositApr += rewDepo;
30105
- if (rewDebt > 0) rewardsPerAsset[key2].borrowApr += rewDebt;
30123
+ if (!rewardsPerAsset[key3])
30124
+ rewardsPerAsset[key3] = { depositApr: 0, borrowApr: 0 };
30125
+ if (rewDepo > 0) rewardsPerAsset[key3].depositApr += rewDepo;
30126
+ if (rewDebt > 0) rewardsPerAsset[key3].borrowApr += rewDebt;
30106
30127
  });
30107
30128
  stakingDepositAccrual += (intrinsicYield ?? 0) * depositsUSD;
30108
30129
  stakingBorrowAccrual += (intrinsicYield ?? 0) * debtUSD;
@@ -30260,8 +30281,8 @@ var getAaveV4UserDataConverter = (lender, chainId, account, meta) => {
30260
30281
  const r = reserves[i];
30261
30282
  const underlying = (r.underlying ?? "").toLowerCase();
30262
30283
  if (!underlying) continue;
30263
- const key2 = createMarketUid(chainId, lender, String(r.reserveId));
30264
- const metaEntity = flatMeta[key2];
30284
+ const key3 = createMarketUid(chainId, lender, String(r.reserveId));
30285
+ const metaEntity = flatMeta[key3];
30265
30286
  if (!metaEntity) continue;
30266
30287
  const base = i * USER_CALLS_PER_RESERVE;
30267
30288
  const userPositionResult = data[base + 3];
@@ -30271,7 +30292,7 @@ var getAaveV4UserDataConverter = (lender, chainId, account, meta) => {
30271
30292
  const { dataForAsset, addedDebt, addedDeposits } = createAaveV4Entry(
30272
30293
  base,
30273
30294
  data,
30274
- key2,
30295
+ key3,
30275
30296
  metaEntity,
30276
30297
  spokeAddrLc
30277
30298
  );
@@ -30279,7 +30300,7 @@ var getAaveV4UserDataConverter = (lender, chainId, account, meta) => {
30279
30300
  dataForAsset.userConfigKey = String(userDynConfigKey);
30280
30301
  totalDebt24h += addedDebt;
30281
30302
  totalDeposits24h += addedDeposits;
30282
- lendingPositions[key2] = dataForAsset;
30303
+ lendingPositions[key3] = dataForAsset;
30283
30304
  }
30284
30305
  const payload = {
30285
30306
  chainId,
@@ -30304,7 +30325,7 @@ function getConfigOraclePrice(meta, spokeAddr) {
30304
30325
  }
30305
30326
  return getOraclePrice(meta);
30306
30327
  }
30307
- function createAaveV4Entry(base, data, key2, meta, spokeAddr) {
30328
+ function createAaveV4Entry(base, data, key3, meta, spokeAddr) {
30308
30329
  const rawSupply = data[base];
30309
30330
  const debtResult = data[base + 1];
30310
30331
  const statusResult = data[base + 2];
@@ -30328,7 +30349,7 @@ function createAaveV4Entry(base, data, key2, meta, spokeAddr) {
30328
30349
  const oPrice = getConfigOraclePrice(meta, spokeAddr);
30329
30350
  const priceHist = meta?.price?.priceUsd24h ?? price2;
30330
30351
  const dataForAsset = {
30331
- marketUid: key2,
30352
+ marketUid: key3,
30332
30353
  underlying: assetMeta.address,
30333
30354
  deposits: currentDeposits,
30334
30355
  debtStable: "0",
@@ -30927,8 +30948,8 @@ var getDolomiteUserDataConverter = (lender, chainId, account, metaMap) => {
30927
30948
  const wei = weis[k];
30928
30949
  if (!wei) return;
30929
30950
  const underlying = normalizeUnderlying3(token);
30930
- const key2 = createMarketUid(chainId, lender, String(marketIds[k]));
30931
- const meta = metaMap?.[key2];
30951
+ const key3 = createMarketUid(chainId, lender, String(marketIds[k]));
30952
+ const meta = metaMap?.[key3];
30932
30953
  if (!meta) return;
30933
30954
  const decimals = meta.asset?.decimals ?? 18;
30934
30955
  const amount = parseRawAmount(wei.value, decimals);
@@ -30941,8 +30962,8 @@ var getDolomiteUserDataConverter = (lender, chainId, account, metaMap) => {
30941
30962
  const priceHist = meta?.price?.priceUsd24h ?? price2;
30942
30963
  histData[id].totalDeposits24h += Number(deposits) * priceHist;
30943
30964
  histData[id].totalDebt24h += Number(debt) * priceHist;
30944
- lendingPositions[id][key2] = {
30945
- marketUid: key2,
30965
+ lendingPositions[id][key3] = {
30966
+ marketUid: key3,
30946
30967
  underlying,
30947
30968
  deposits,
30948
30969
  debt,
@@ -32334,9 +32355,9 @@ var getDssUserDataConverter = (lender, chainId, account, meta) => {
32334
32355
  if (ink === 0n && debt === 0n) return;
32335
32356
  const market = markets.find((m) => m.ilk === cdp.ilk);
32336
32357
  if (!market) return;
32337
- const key2 = dssLenderKey(lender, chainId, cdp.ilk);
32338
- if (!perMarket.has(key2)) perMarket.set(key2, { market, positions: [] });
32339
- perMarket.get(key2).positions.push({ cdp, ink, debt });
32358
+ const key3 = dssLenderKey(lender, chainId, cdp.ilk);
32359
+ if (!perMarket.has(key3)) perMarket.set(key3, { market, positions: [] });
32360
+ perMarket.get(key3).positions.push({ cdp, ink, debt });
32340
32361
  });
32341
32362
  const out = {};
32342
32363
  for (const [lenderKey, { market, positions }] of perMarket) {
@@ -32455,9 +32476,9 @@ var getFrankencoinUserDataConverter = (lender, chainId, account, meta) => {
32455
32476
  if (minted === 0n && coll === 0n) return;
32456
32477
  const market = marketByOriginal.get(p.original);
32457
32478
  if (!market) return;
32458
- const key2 = frankencoinLenderKey(lender, chainId, market.position);
32459
- if (!perMarket.has(key2)) perMarket.set(key2, { market, rows: [] });
32460
- perMarket.get(key2).rows.push({
32479
+ const key3 = frankencoinLenderKey(lender, chainId, market.position);
32480
+ if (!perMarket.has(key3)) perMarket.set(key3, { market, rows: [] });
32481
+ perMarket.get(key3).rows.push({
32461
32482
  info: {
32462
32483
  position: p.position,
32463
32484
  original: p.original,
@@ -33096,12 +33117,12 @@ var convertLenderUserDataResult = (chainId, queriesRaw, rawResults, lenderState,
33096
33117
  }
33097
33118
  if (!convertedData) continue;
33098
33119
  const incomplete = retryableFailedCalls > 0;
33099
- const publish = (key2, entry) => {
33120
+ const publish = (key3, entry) => {
33100
33121
  if (!entry) return;
33101
33122
  const { kept, violations, dropped } = validateUserData(entry, incomplete);
33102
33123
  if (dropped.length > 0) {
33103
33124
  options?.onIncomplete?.({
33104
- lender: key2,
33125
+ lender: key3,
33105
33126
  failedCalls,
33106
33127
  retryableFailedCalls,
33107
33128
  totalCalls: data.length,
@@ -33112,9 +33133,9 @@ var convertLenderUserDataResult = (chainId, queriesRaw, rawResults, lenderState,
33112
33133
  }
33113
33134
  if (kept.length === 0) return;
33114
33135
  entry.data = kept;
33115
- entry.lender = key2;
33136
+ entry.lender = key3;
33116
33137
  if (incomplete) entry.incomplete = true;
33117
- lenderData[key2] = entry;
33138
+ lenderData[key3] = entry;
33118
33139
  };
33119
33140
  try {
33120
33141
  if (isMultiMarket(query3.lender)) {
@@ -37668,9 +37689,9 @@ var getAbi2 = (lender) => {
37668
37689
  };
37669
37690
 
37670
37691
  // src/lending-pools/computeLendingPools.ts
37671
- function resolvePrice(map, key2, fallbackKey) {
37692
+ function resolvePrice(map, key3, fallbackKey) {
37672
37693
  if (!map) return void 0;
37673
- if (key2 != null && map[key2] != null) return map[key2];
37694
+ if (key3 != null && map[key3] != null) return map[key3];
37674
37695
  if (fallbackKey != null && map[fallbackKey] != null) return map[fallbackKey];
37675
37696
  return void 0;
37676
37697
  }
@@ -37692,9 +37713,9 @@ var generateLendingPools = (lenderData, prices, histPrices) => {
37692
37713
  }
37693
37714
  const byMarket = /* @__PURE__ */ new Map();
37694
37715
  for (const pool of flat) {
37695
- const key2 = `${pool.chainId}:${pool.lender}`;
37696
- if (!byMarket.has(key2)) byMarket.set(key2, []);
37697
- byMarket.get(key2).push({
37716
+ const key3 = `${pool.chainId}:${pool.lender}`;
37717
+ if (!byMarket.has(key3)) byMarket.set(key3, []);
37718
+ byMarket.get(key3).push({
37698
37719
  ...pool,
37699
37720
  apr: pool.depositRate + (pool.intrinsicYield ?? 0),
37700
37721
  utilitzation: (Number(pool.totalDebt) + Number(pool.totalDebtStable ?? 0)) / Number(pool.totalDeposits),
@@ -37729,12 +37750,12 @@ var generateLendingPools = (lenderData, prices, histPrices) => {
37729
37750
  }
37730
37751
  for (const group of byMarket.values()) {
37731
37752
  for (const pool of group) {
37732
- const [assetGroup, key2] = getPriceKey(pool.asset) ?? [
37753
+ const [assetGroup, key3] = getPriceKey(pool.asset) ?? [
37733
37754
  void 0,
37734
37755
  void 0
37735
37756
  ];
37736
- pool.price = resolvePrice(prices, key2, assetGroup);
37737
- pool.histPrice = resolvePrice(histPrices, key2, assetGroup);
37757
+ pool.price = resolvePrice(prices, key3, assetGroup);
37758
+ pool.histPrice = resolvePrice(histPrices, key3, assetGroup);
37738
37759
  }
37739
37760
  }
37740
37761
  return Array.from(byMarket.values()).flat();
@@ -38147,8 +38168,8 @@ function needsLenderApproval(params) {
38147
38168
  const { lender, lenderDebitData, tokenAddress, amount, chainId, cToken, isProtected } = params;
38148
38169
  if (!lenderDebitData) return true;
38149
38170
  if (isAaveV4Type(lender)) {
38150
- const key3 = (params.aaveV4Spoke ?? tokenAddress).toLowerCase();
38151
- const entry2 = lenderDebitData[key3];
38171
+ const key4 = (params.aaveV4Spoke ?? tokenAddress).toLowerCase();
38172
+ const entry2 = lenderDebitData[key4];
38152
38173
  if (!entry2 || entry2.amount === void 0) return true;
38153
38174
  return entry2.amount === 0n;
38154
38175
  }
@@ -38157,8 +38178,8 @@ function needsLenderApproval(params) {
38157
38178
  if (!entry2 || entry2.amount === void 0) return true;
38158
38179
  return entry2.amount === 0n;
38159
38180
  }
38160
- const key2 = resolveDebitDataKey(chainId, lender, tokenAddress, cToken, isProtected);
38161
- const entry = lenderDebitData[key2];
38181
+ const key3 = resolveDebitDataKey(chainId, lender, tokenAddress, cToken, isProtected);
38182
+ const entry = lenderDebitData[key3];
38162
38183
  if (!entry || entry.amount === void 0) return true;
38163
38184
  if (isCompoundV2Type(lender) || isVenusType(lender)) {
38164
38185
  const requiredShares = toCompoundV2Shares(entry, amount);
@@ -38278,21 +38299,21 @@ function cacheKey6(chainId, account) {
38278
38299
  return `${chainId}:${account.toLowerCase()}`;
38279
38300
  }
38280
38301
  async function dedupedFetch(chainId, account, loader) {
38281
- const key2 = cacheKey6(chainId, account);
38302
+ const key3 = cacheKey6(chainId, account);
38282
38303
  const now = Date.now();
38283
- const cached = resolved.get(key2);
38304
+ const cached = resolved.get(key3);
38284
38305
  if (cached && cached.expiresAt > now) {
38285
38306
  return cached.value;
38286
38307
  }
38287
- const existing = inflight.get(key2);
38308
+ const existing = inflight.get(key3);
38288
38309
  if (existing) return existing;
38289
38310
  const promise = loader().then((value) => {
38290
- resolved.set(key2, { value, expiresAt: Date.now() + CACHE_TTL_MS5 });
38311
+ resolved.set(key3, { value, expiresAt: Date.now() + CACHE_TTL_MS5 });
38291
38312
  return value;
38292
38313
  }).finally(() => {
38293
- inflight.delete(key2);
38314
+ inflight.delete(key3);
38294
38315
  });
38295
- inflight.set(key2, promise);
38316
+ inflight.set(key3, promise);
38296
38317
  return promise;
38297
38318
  }
38298
38319
  function hasMorphoUserSubgraph(chainId) {
@@ -39121,14 +39142,14 @@ function getRewardYieldOpen(amountInUSD, amountOutUSD, irModeIn, cashFlowDeposit
39121
39142
  const mapOut = rewardsToMap(yieldOut?.rewards);
39122
39143
  if (!yieldIn?.rewards?.length && !yieldOut?.rewards?.length) return {};
39123
39144
  const data = {};
39124
- for (const key2 of keysFromMaps(mapIn, mapOut)) {
39125
- const _flowIn = amountInUSD * ((irModeIn === 1 ? mapIn[key2]?.stableBorrowRate : mapIn[key2]?.variableBorrowRate) ?? 0);
39126
- const _flowOut = amountOutUSD * (mapOut[key2]?.depositRate ?? 0);
39145
+ for (const key3 of keysFromMaps(mapIn, mapOut)) {
39146
+ const _flowIn = amountInUSD * ((irModeIn === 1 ? mapIn[key3]?.stableBorrowRate : mapIn[key3]?.variableBorrowRate) ?? 0);
39147
+ const _flowOut = amountOutUSD * (mapOut[key3]?.depositRate ?? 0);
39127
39148
  const totalCashFlowDebt = cashFlowDebt + _flowIn;
39128
39149
  const totalCashFlowDeposits = cashFlowDeposits + _flowOut;
39129
39150
  const newCollat = deposits + amountOutUSD;
39130
39151
  const newDebt = debt + amountInUSD;
39131
- data[key2] = {
39152
+ data[key3] = {
39132
39153
  borrowApr: totalCashFlowDebt / newDebt,
39133
39154
  depositApr: totalCashFlowDeposits / newCollat,
39134
39155
  apr: (cashFlowDeposits + cashFlowDebt + _flowIn + _flowOut) / (newCollat - newDebt)
@@ -39141,14 +39162,14 @@ function getRewardYieldClose(amountInUSD, amountOutUSD, irModeOut, cashFlowDepos
39141
39162
  const mapOut = rewardsToMap(yieldOut?.rewards);
39142
39163
  if (!yieldIn?.rewards?.length && !yieldOut?.rewards?.length) return {};
39143
39164
  const data = {};
39144
- for (const key2 of keysFromMaps(mapIn, mapOut)) {
39145
- const _flowIn = amountInUSD * (mapIn[key2]?.depositRate ?? 0);
39146
- const _flowOut = amountOutUSD * ((irModeOut === 1 ? mapOut[key2]?.stableBorrowRate : mapOut[key2]?.variableBorrowRate) ?? 0);
39165
+ for (const key3 of keysFromMaps(mapIn, mapOut)) {
39166
+ const _flowIn = amountInUSD * (mapIn[key3]?.depositRate ?? 0);
39167
+ const _flowOut = amountOutUSD * ((irModeOut === 1 ? mapOut[key3]?.stableBorrowRate : mapOut[key3]?.variableBorrowRate) ?? 0);
39147
39168
  const totalCashFlowDebt = cashFlowDebt - _flowOut;
39148
39169
  const totalCashFlowDeposits = cashFlowDeposits - _flowIn;
39149
39170
  const newCollat = deposits - amountInUSD;
39150
39171
  const newDebt = debt - amountOutUSD;
39151
- data[key2] = {
39172
+ data[key3] = {
39152
39173
  borrowApr: Math.abs(newDebt) < 0.01 ? 0 : totalCashFlowDebt / newDebt,
39153
39174
  depositApr: totalCashFlowDeposits / newCollat,
39154
39175
  apr: (cashFlowDeposits + cashFlowDebt - _flowIn - _flowOut) / (newCollat - newDebt)
@@ -39161,12 +39182,12 @@ function getRewardYieldDebtSwap(amountInUSD, amountOutUSD, irModeIn, irModeOut,
39161
39182
  const mapOut = rewardsToMap(yieldOut?.rewards);
39162
39183
  if (!yieldIn?.rewards?.length && !yieldOut?.rewards?.length) return {};
39163
39184
  const data = {};
39164
- for (const key2 of keysFromMaps(mapIn, mapOut)) {
39165
- const _flowIn = amountInUSD * ((irModeIn === 1 ? mapIn[key2]?.stableBorrowRate : mapIn[key2]?.variableBorrowRate) ?? 0);
39166
- const _flowOut = amountOutUSD * ((irModeOut === 1 ? mapOut[key2]?.stableBorrowRate : mapOut[key2]?.variableBorrowRate) ?? 0);
39185
+ for (const key3 of keysFromMaps(mapIn, mapOut)) {
39186
+ const _flowIn = amountInUSD * ((irModeIn === 1 ? mapIn[key3]?.stableBorrowRate : mapIn[key3]?.variableBorrowRate) ?? 0);
39187
+ const _flowOut = amountOutUSD * ((irModeOut === 1 ? mapOut[key3]?.stableBorrowRate : mapOut[key3]?.variableBorrowRate) ?? 0);
39167
39188
  const totalCashFlowDebt = cashFlowDebt + _flowIn - _flowOut;
39168
39189
  const newDebt = debt - amountOutUSD + amountInUSD;
39169
- data[key2] = {
39190
+ data[key3] = {
39170
39191
  borrowApr: Math.abs(newDebt) < 0.01 ? 0 : totalCashFlowDebt / newDebt,
39171
39192
  depositApr: cashFlowDeposits / deposits,
39172
39193
  apr: (cashFlowDeposits + totalCashFlowDebt) / (deposits - newDebt)
@@ -39179,12 +39200,12 @@ function getRewardYieldCollateralSwap(amountInUSD, amountOutUSD, cashFlowDeposit
39179
39200
  const mapOut = rewardsToMap(yieldOut?.rewards);
39180
39201
  if (!yieldIn?.rewards?.length && !yieldOut?.rewards?.length) return {};
39181
39202
  const data = {};
39182
- for (const key2 of keysFromMaps(mapIn, mapOut)) {
39183
- const _flowIn = amountInUSD * (mapIn[key2]?.depositRate ?? 0);
39184
- const _flowOut = amountOutUSD * (mapOut[key2]?.depositRate ?? 0);
39203
+ for (const key3 of keysFromMaps(mapIn, mapOut)) {
39204
+ const _flowIn = amountInUSD * (mapIn[key3]?.depositRate ?? 0);
39205
+ const _flowOut = amountOutUSD * (mapOut[key3]?.depositRate ?? 0);
39185
39206
  const totalCashFlowDeposits = cashFlowDeposits + _flowOut - _flowIn;
39186
39207
  const newCollat = deposits + amountOutUSD - amountInUSD;
39187
- data[key2] = {
39208
+ data[key3] = {
39188
39209
  borrowApr: Math.abs(debt) < 0.01 ? 0 : cashFlowDebt / debt,
39189
39210
  depositApr: totalCashFlowDeposits / newCollat,
39190
39211
  apr: (totalCashFlowDeposits + cashFlowDebt) / (newCollat - debt)
@@ -39981,9 +40002,9 @@ var yieldNestFetcher = {
39981
40002
  }).then((r) => r.json());
39982
40003
  const tokens = res?.data?.getLRTsData?.tokens ?? [];
39983
40004
  const result = {};
39984
- for (const { symbol, chainId, key: key2 } of YN_TOKENS) {
40005
+ for (const { symbol, chainId, key: key3 } of YN_TOKENS) {
39985
40006
  const apr = findApr(tokens, symbol, chainId);
39986
- if (apr > 0) result[key2] = apr;
40007
+ if (apr > 0) result[key3] = apr;
39987
40008
  }
39988
40009
  return result;
39989
40010
  }
@@ -40403,10 +40424,10 @@ var ankrFetcher = {
40403
40424
  const services = res?.services ?? [];
40404
40425
  const result = {};
40405
40426
  for (const service of services) {
40406
- const key2 = ANKR_SERVICE_KEYS[service?.serviceName];
40407
- if (!key2) continue;
40427
+ const key3 = ANKR_SERVICE_KEYS[service?.serviceName];
40428
+ if (!key3) continue;
40408
40429
  const apr = Number(service?.apy);
40409
- if (apr > 0) result[key2] = apr;
40430
+ if (apr > 0) result[key3] = apr;
40410
40431
  }
40411
40432
  return result;
40412
40433
  }
@@ -40500,7 +40521,7 @@ var lombardLbtcFetcher = {
40500
40521
  }
40501
40522
  };
40502
40523
  var LOMBARD_VAULT_APY_URL = "https://mainnet.prod.lombard.finance/api/v1/analytics/vault/apy/history";
40503
- var createLombardVaultFetcher = (wrapper, key2) => ({
40524
+ var createLombardVaultFetcher = (wrapper, key3) => ({
40504
40525
  label: `LOMBARD_VAULT:${wrapper}`,
40505
40526
  fetch: async () => {
40506
40527
  const url = `${LOMBARD_VAULT_APY_URL}?vault_wrapper=${wrapper}&interval=APY_INTERVAL_1M`;
@@ -40509,7 +40530,7 @@ var createLombardVaultFetcher = (wrapper, key2) => ({
40509
40530
  }).then((r) => r.json());
40510
40531
  const latest = Array.isArray(res?.snapshots) ? res.snapshots[0] : void 0;
40511
40532
  const frac = Number(latest?.total_apy);
40512
- return { [key2]: Number.isFinite(frac) ? frac * 100 : 0 };
40533
+ return { [key3]: Number.isFinite(frac) ? frac * 100 : 0 };
40513
40534
  }
40514
40535
  });
40515
40536
  var lombardLbtcvFetcher = createLombardVaultFetcher(
@@ -42818,7 +42839,7 @@ var rwaFundsFetcher = {
42818
42839
  Object.entries(RWA_FUNDS).map(async ([label, fund]) => {
42819
42840
  try {
42820
42841
  const apr = apyToAprPercent(await fetchDefiLlamaApy(fund.pool));
42821
- for (const key2 of fund.keys) out[key2] = apr;
42842
+ for (const key3 of fund.keys) out[key3] = apr;
42822
42843
  } catch {
42823
42844
  }
42824
42845
  })
@@ -43242,9 +43263,9 @@ var fetchApiAprs = async () => {
43242
43263
  }).then((r) => r.json());
43243
43264
  if (res?.code !== 0 || !res?.data) return {};
43244
43265
  const out = {};
43245
- for (const key2 of ["ethApy", "bscApy"]) {
43246
- const apy = Number(res.data[key2]);
43247
- if (Number.isFinite(apy) && apy > 0) out[key2] = apyToApr(apy) * 100;
43266
+ for (const key3 of ["ethApy", "bscApy"]) {
43267
+ const apy = Number(res.data[key3]);
43268
+ if (Number.isFinite(apy) && apy > 0) out[key3] = apyToApr(apy) * 100;
43248
43269
  }
43249
43270
  return out;
43250
43271
  };
@@ -43346,6 +43367,94 @@ var frankencoinSavingsFetcher = {
43346
43367
  }
43347
43368
  };
43348
43369
 
43370
+ // src/yields/intrinsic/fetchers/yieldBasis.ts
43371
+ var YB_API = "https://api.yieldbasis.com/v1/analytics";
43372
+ var TRADING_APY_URL = `${YB_API}/markets/trading-apy?chainId=1`;
43373
+ var SNAPSHOT_URL = (idx) => `${YB_API}/markets/snapshots/1/${idx}?window=all&timeframeSeconds=86400`;
43374
+ var TIMEOUT_MS3 = 8e3;
43375
+ var DAY = 86400;
43376
+ var YEAR_DAYS = 365;
43377
+ var YB_WBTC_KEY = "Yield Basis liquidity for WBTC::yb-WBTC";
43378
+ var YB_CBBTC_KEY = "Yield Basis liquidity for cbBTC::yb-cbBTC";
43379
+ var YB_TBTC_KEY = "Yield Basis liquidity for tBTC::yb-tBTC";
43380
+ var YB_WETH_KEY = "Yield Basis liquidity for WETH::yb-WETH";
43381
+ var YB_MARKETS = [
43382
+ { idx: 7, key: YB_WBTC_KEY },
43383
+ { idx: 8, key: YB_CBBTC_KEY },
43384
+ { idx: 9, key: YB_TBTC_KEY },
43385
+ { idx: 10, key: YB_WETH_KEY }
43386
+ ];
43387
+ var getJson = async (url) => {
43388
+ const res = await fetch(url, {
43389
+ headers: { accept: "application/json" },
43390
+ signal: AbortSignal.timeout(TIMEOUT_MS3)
43391
+ });
43392
+ if (!res.ok) throw new Error(`HTTP ${res.status}`);
43393
+ return res.json();
43394
+ };
43395
+ var toPercent = (raw) => {
43396
+ const n = Number(raw);
43397
+ return Number.isFinite(n) ? n / 1e16 : void 0;
43398
+ };
43399
+ var fetchFromApyRoute = async () => {
43400
+ const rows = (await getJson(TRADING_APY_URL))?.data ?? [];
43401
+ if (rows.length === 0) throw new Error("yield-basis trading-apy empty");
43402
+ const latest = /* @__PURE__ */ new Map();
43403
+ for (const r of rows) {
43404
+ const idx = Number(r?.marketId);
43405
+ if (!Number.isFinite(idx)) continue;
43406
+ const prev = latest.get(idx);
43407
+ if (!prev || Number(r.bucketStart) > Number(prev.bucketStart)) {
43408
+ latest.set(idx, r);
43409
+ }
43410
+ }
43411
+ const out = {};
43412
+ for (const { idx } of YB_MARKETS) {
43413
+ const row = latest.get(idx);
43414
+ if (!row) continue;
43415
+ const v = toPercent(row.tradingApy) ?? toPercent(row.tradingApyAllTime);
43416
+ if (v !== void 0) out[idx] = v;
43417
+ }
43418
+ if (Object.keys(out).length === 0) {
43419
+ throw new Error("yield-basis trading-apy has no current markets");
43420
+ }
43421
+ return out;
43422
+ };
43423
+ var fetchFromSnapshots = async (idx) => {
43424
+ const rows = (await getJson(SNAPSHOT_URL(idx)))?.data ?? [];
43425
+ const series = rows.filter((r) => r?.ppsRaw && Number(r.ppsRaw) > 0).map((r) => ({ t: Number(r.bucketStart), pps: Number(r.ppsRaw) })).filter((r) => Number.isFinite(r.t) && Number.isFinite(r.pps)).sort((a, b) => a.t - b.t);
43426
+ if (series.length < 2) throw new Error(`yield-basis snapshots empty ${idx}`);
43427
+ const last = series[series.length - 1];
43428
+ const target = last.t - 30 * DAY;
43429
+ const start = series.find((r) => r.t >= target) ?? series[0];
43430
+ const days = (last.t - start.t) / DAY;
43431
+ if (days <= 0) throw new Error(`yield-basis snapshot span zero ${idx}`);
43432
+ return (last.pps / start.pps - 1) * (YEAR_DAYS / days) * 100;
43433
+ };
43434
+ var yieldBasisFetcher = {
43435
+ label: "YIELD_BASIS",
43436
+ fetch: async () => {
43437
+ const primary = await fetchFromApyRoute().catch(
43438
+ () => ({})
43439
+ );
43440
+ const missing = YB_MARKETS.filter((m) => primary[m.idx] === void 0);
43441
+ const derived = await Promise.all(
43442
+ missing.map(
43443
+ (m) => fetchFromSnapshots(m.idx).catch(() => void 0)
43444
+ )
43445
+ );
43446
+ missing.forEach((m, i) => {
43447
+ const v = derived[i];
43448
+ if (v !== void 0) primary[m.idx] = v;
43449
+ });
43450
+ const out = {};
43451
+ for (const { idx, key: key3 } of YB_MARKETS) {
43452
+ out[key3] = primary[idx] ?? 0;
43453
+ }
43454
+ return out;
43455
+ }
43456
+ };
43457
+
43349
43458
  // src/yields/intrinsic/fetchers/nativeCreditPool.ts
43350
43459
  var nativeCreditPoolYieldKey = (chainId, underlying) => `${chainId}:${underlying.toLowerCase()}`;
43351
43460
  var POOL_IDS = {
@@ -44768,8 +44877,65 @@ var sparkV2Base = (symbol, decimals) => ({
44768
44877
  yieldFetcher: sparkSavingsFetcher
44769
44878
  });
44770
44879
  var SPARK_V2_WITHDRAW_INTENTS = "0x592b7db9906e6f8924c4d74c2a0ab86ce44fdddf";
44880
+ var ybMarket = (symbol, underlying, underlyingDecimals, address, capacityContract, yieldKey) => ({
44881
+ reader: "yieldbasis-lt",
44882
+ address,
44883
+ underlying,
44884
+ capacityContract,
44885
+ symbol,
44886
+ brand: "Yield Basis",
44887
+ description: `${symbol.replace("yb-", "")} in a 2\xD7-leveraged Curve Cryptoswap LP funded by borrowed crvUSD, with impermanent loss cancelled \u2014 the share tracks the asset 1:1 (full downside included) and earns the pool's trading fees. Not a yield-accrual vault: the share price falls in asset terms whenever rebalancing cost outruns fees, so the rate is regularly negative. Exit is instant and permissionless at a live unwind price a few basis points off the oracle value (the protocol's Temporary Redemption Discount). Deposits are permissionless but protocol-capped \u2014 read the deposit capacity, which is often zero.`,
44888
+ // LT shares are always 18-decimal, independent of the underlying.
44889
+ decimals: 18,
44890
+ underlyingDecimals,
44891
+ isRebasing: false,
44892
+ isMintable: true,
44893
+ withdrawalMode: "instant",
44894
+ yieldFetcher: yieldBasisFetcher,
44895
+ yieldKey
44896
+ });
44897
+ var YIELD_BASIS_ENTRIES = [
44898
+ // idx 7 — the only market with meaningful headroom at integration
44899
+ // (~110 WBTC / $7.1M of $32.1M capacity free).
44900
+ ybMarket(
44901
+ "yb-WBTC",
44902
+ "0x2260fac5e5542a773aa44fbcfedf7c193bc2c599",
44903
+ 8,
44904
+ "0x651d4b8168488fa163d85304662e8278d4c55baa",
44905
+ "0x7b9817eb5c49a99875138a5d52bf64a8b2cffffe",
44906
+ YB_WBTC_KEY
44907
+ ),
44908
+ // idx 8 — largest market ($42.2M) and 99.5 % full.
44909
+ ybMarket(
44910
+ "yb-cbBTC",
44911
+ "0xcbb7c0000ab88b473b1f5afd9ef808440eed33bf",
44912
+ 8,
44913
+ "0x722fc3640ba007c3e9867ccdb0dca59f2e2f29f9",
44914
+ "0x49f51d7e279252f3c9a09678fdc65b4dbd5cb196",
44915
+ YB_CBBTC_KEY
44916
+ ),
44917
+ // idx 9
44918
+ ybMarket(
44919
+ "yb-tBTC",
44920
+ "0x18084fba666a33d37592fa2633fd49a74dd93a88",
44921
+ 18,
44922
+ "0x771f7290428d830ecd41e980745c327e507823ec",
44923
+ "0x0e357af536592f275c6aa07b8ac2ca6eb3d0cf5a",
44924
+ YB_TBTC_KEY
44925
+ ),
44926
+ // idx 10 — over cap at integration; `depositCapacity` reads 0.
44927
+ ybMarket(
44928
+ "yb-WETH",
44929
+ "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",
44930
+ 18,
44931
+ "0x2b9c9f3bdceb5d8e36a4704f08a78fca53343cea",
44932
+ "0x5f8d24f33cc5a1d5d1bf012261e6a2214c92233c",
44933
+ YB_WETH_KEY
44934
+ )
44935
+ ];
44771
44936
  var SINGLE_CHAIN_ENTRIES = {
44772
44937
  "1": [
44938
+ ...YIELD_BASIS_ENTRIES,
44773
44939
  {
44774
44940
  address: "0x9d39a5de30e57443bff2a8307a4256c8797a3497",
44775
44941
  underlying: "0x4c9edd5852cd905f086c759e8383e09bff1e68b3",
@@ -45851,7 +46017,7 @@ var getGmxApiHost = (chainId) => GMX_API_HOSTS[chainId];
45851
46017
 
45852
46018
  // src/vaults/gmx/api.ts
45853
46019
  var GMX_DEFAULT_APY_PERIOD = "1d";
45854
- var getJson = async (url) => {
46020
+ var getJson2 = async (url) => {
45855
46021
  const res = await fetch(url, {
45856
46022
  method: "GET",
45857
46023
  headers: { Accept: "application/json" }
@@ -45863,12 +46029,12 @@ var fetchGmxRawData = async (chainId, period, apiUrlOverride) => {
45863
46029
  const host = apiUrlOverride ?? getGmxApiHost(chainId);
45864
46030
  if (!host) throw new Error(`GMX not supported on chain ${chainId}`);
45865
46031
  const [apy, marketsRes, glvsRes, tokensRes] = await Promise.all([
45866
- getJson(`${host}/apy?period=${encodeURIComponent(period)}`),
45867
- getJson(`${host}/markets`).catch(() => ({
46032
+ getJson2(`${host}/apy?period=${encodeURIComponent(period)}`),
46033
+ getJson2(`${host}/markets`).catch(() => ({
45868
46034
  markets: []
45869
46035
  })),
45870
- getJson(`${host}/glvs`).catch(() => ({ glvs: [] })),
45871
- getJson(`${host}/tokens`).catch(() => ({
46036
+ getJson2(`${host}/glvs`).catch(() => ({ glvs: [] })),
46037
+ getJson2(`${host}/tokens`).catch(() => ({
45872
46038
  tokens: []
45873
46039
  }))
45874
46040
  ]);
@@ -45942,9 +46108,9 @@ async function fetchPendlePricesForAllChain(lists = {}, assetType = ["YT", "PT"]
45942
46108
  try {
45943
46109
  const data = await fetchPendlePricesRaw(assetType);
45944
46110
  let prices = {};
45945
- Object.entries(data).forEach(([key2, val]) => {
45946
- const [chainId, address] = key2.split("-");
45947
- const assetKey = lists[chainId]?.list?.[address.toLowerCase()]?.assetGroup ?? key2;
46111
+ Object.entries(data).forEach(([key3, val]) => {
46112
+ const [chainId, address] = key3.split("-");
46113
+ const assetKey = lists[chainId]?.list?.[address.toLowerCase()]?.assetGroup ?? key3;
45948
46114
  prices[assetKey] = val;
45949
46115
  });
45950
46116
  return prices;
@@ -46164,7 +46330,7 @@ var midasFetcher = {
46164
46330
  const apy = apys[apyKey];
46165
46331
  if (typeof apy === "number" && apy > 0 && apy <= MAX_DECIMAL_APY) {
46166
46332
  const apr = apyToAprPercent(apy * 100);
46167
- for (const key2 of keys) result[key2] = apr;
46333
+ for (const key3 of keys) result[key3] = apr;
46168
46334
  }
46169
46335
  }
46170
46336
  return result;
@@ -46589,9 +46755,9 @@ function emptyReward() {
46589
46755
  }
46590
46756
  function ensureReserveTokenReward(result, chainId, reserveToken) {
46591
46757
  if (!result[chainId]) result[chainId] = {};
46592
- const key2 = reserveToken.toLowerCase();
46593
- if (!result[chainId][key2]) result[chainId][key2] = emptyReward();
46594
- return result[chainId][key2];
46758
+ const key3 = reserveToken.toLowerCase();
46759
+ if (!result[chainId][key3]) result[chainId][key3] = emptyReward();
46760
+ return result[chainId][key3];
46595
46761
  }
46596
46762
  function ensureReward(result, chainId, lender, asset) {
46597
46763
  if (!result[chainId]) result[chainId] = {};
@@ -47316,6 +47482,34 @@ function extraRewardApr(params) {
47316
47482
  if (!(stakedUsd > 0)) return 0;
47317
47483
  return rewardPerYearUsd / stakedUsd * 100;
47318
47484
  }
47485
+ var MAX_PLAUSIBLE_TIMESTAMP = 64000000000n;
47486
+ function decodeRewardData(data) {
47487
+ if (!data) return null;
47488
+ const at = (i) => {
47489
+ try {
47490
+ const v = Array.isArray(data) ? data[i] : void 0;
47491
+ if (typeof v === "bigint") return v;
47492
+ if (typeof v === "string" && v !== "0x") return BigInt(v);
47493
+ if (typeof v === "number") return BigInt(Math.trunc(v));
47494
+ } catch {
47495
+ }
47496
+ return 0n;
47497
+ };
47498
+ if (!Array.isArray(data)) {
47499
+ const pf = data.period_finish;
47500
+ const rt = data.rate;
47501
+ if (pf === void 0 || rt === void 0) return null;
47502
+ return { periodFinish: BigInt(pf), rate: BigInt(rt) };
47503
+ }
47504
+ let periodFinish = at(1);
47505
+ let rate = at(2);
47506
+ if (periodFinish > MAX_PLAUSIBLE_TIMESTAMP) {
47507
+ periodFinish = at(2);
47508
+ rate = at(3);
47509
+ }
47510
+ if (periodFinish > MAX_PLAUSIBLE_TIMESTAMP) return null;
47511
+ return { periodFinish, rate };
47512
+ }
47319
47513
  var LLAMA_CHAIN_SLUG = {
47320
47514
  [Chain.ETHEREUM_MAINNET]: "ethereum",
47321
47515
  [Chain.OP_MAINNET]: "optimism",
@@ -47503,11 +47697,9 @@ async function fetchForChain(chainId, nowSeconds) {
47503
47697
  const decRaw = r3[dCursor + 1];
47504
47698
  const symRaw = r3[dCursor + 2];
47505
47699
  dCursor += 3;
47506
- if (!data) continue;
47507
- const periodFinish = big16(
47508
- Array.isArray(data) ? data[1] : data?.period_finish
47509
- );
47510
- const rate = big16(Array.isArray(data) ? data[2] : data?.rate);
47700
+ const decoded = decodeRewardData(data);
47701
+ if (!decoded) continue;
47702
+ const { periodFinish, rate } = decoded;
47511
47703
  const decimals = typeof decRaw === "number" ? decRaw : Number(big16(decRaw) || 18n);
47512
47704
  const rewardPrice = priceOf(prices, chainId, token);
47513
47705
  const apr = extraRewardApr({
@@ -47539,7 +47731,8 @@ async function fetchForChain(chainId, nowSeconds) {
47539
47731
  refs: { gauge: s.market.gauge, rewardToken: token }
47540
47732
  },
47541
47733
  claim: "accrual",
47542
- // The whole point of carrying this: the rate survives expiry.
47734
+ // The whole point of carrying this: the rate survives expiry. Bounded
47735
+ // above by the decoder, so it can never overflow the consumer's column.
47543
47736
  endsAt: Number(periodFinish) || void 0
47544
47737
  });
47545
47738
  }
@@ -48383,7 +48576,7 @@ function getLiquityCalls(chainId) {
48383
48576
  }
48384
48577
  function parseLiquityResults(data, meta, context) {
48385
48578
  const { chainId } = context;
48386
- const key2 = liquityLenderKey(meta.lender, chainId, meta.collIndex);
48579
+ const key3 = liquityLenderKey(meta.lender, chainId, meta.collIndex);
48387
48580
  const entries = [];
48388
48581
  const raw = data?.[0];
48389
48582
  const price2 = typeof raw === "bigint" ? raw : raw != null && raw !== "0x" ? BigInt(raw) : 0n;
@@ -48397,8 +48590,8 @@ function parseLiquityResults(data, meta, context) {
48397
48590
  asset: meta.collToken,
48398
48591
  price: collUSD,
48399
48592
  priceUSD: collUSD,
48400
- marketUid: createMarketUid(chainId, key2, meta.collToken),
48401
- targetLender: key2,
48593
+ marketUid: createMarketUid(chainId, key3, meta.collToken),
48594
+ targetLender: key3,
48402
48595
  description: "Liquity branch PriceFeed (USD)"
48403
48596
  });
48404
48597
  }
@@ -48407,8 +48600,8 @@ function parseLiquityResults(data, meta, context) {
48407
48600
  asset: meta.debtToken,
48408
48601
  price: 1,
48409
48602
  priceUSD: 1,
48410
- marketUid: createMarketUid(chainId, key2, meta.debtToken),
48411
- targetLender: key2,
48603
+ marketUid: createMarketUid(chainId, key3, meta.debtToken),
48604
+ targetLender: key3,
48412
48605
  description: "Liquity stablecoin (par)",
48413
48606
  staticBase: true,
48414
48607
  baseAsset: meta.debtToken
@@ -48452,7 +48645,7 @@ function getRiverCalls(chainId) {
48452
48645
  }
48453
48646
  function parseRiverResults(data, meta, context) {
48454
48647
  const { chainId } = context;
48455
- const key2 = riverLenderKey(meta.lender, chainId, meta.index);
48648
+ const key3 = riverLenderKey(meta.lender, chainId, meta.index);
48456
48649
  const entries = [];
48457
48650
  const raw = data?.[0];
48458
48651
  const price2 = typeof raw === "bigint" ? raw : raw != null && raw !== "0x" ? BigInt(raw) : 0n;
@@ -48462,8 +48655,8 @@ function parseRiverResults(data, meta, context) {
48462
48655
  asset: meta.collToken,
48463
48656
  price: collUSD,
48464
48657
  priceUSD: collUSD,
48465
- marketUid: createMarketUid(chainId, key2, meta.collToken),
48466
- targetLender: key2,
48658
+ marketUid: createMarketUid(chainId, key3, meta.collToken),
48659
+ targetLender: key3,
48467
48660
  description: "River TroveManager oracle (USD)"
48468
48661
  });
48469
48662
  }
@@ -48472,8 +48665,8 @@ function parseRiverResults(data, meta, context) {
48472
48665
  asset: meta.debtToken,
48473
48666
  price: 1,
48474
48667
  priceUSD: 1,
48475
- marketUid: createMarketUid(chainId, key2, meta.debtToken),
48476
- targetLender: key2,
48668
+ marketUid: createMarketUid(chainId, key3, meta.debtToken),
48669
+ targetLender: key3,
48477
48670
  description: "River satUSD (par)",
48478
48671
  staticBase: true,
48479
48672
  baseAsset: meta.debtToken
@@ -48540,7 +48733,7 @@ var field12 = (res, name, idx) => {
48540
48733
  };
48541
48734
  function parseDssResults(data, meta, context) {
48542
48735
  const { chainId } = context;
48543
- const key2 = dssLenderKey(meta.lender, chainId, meta.ilk);
48736
+ const key3 = dssLenderKey(meta.lender, chainId, meta.ilk);
48544
48737
  const entries = [];
48545
48738
  const spot = field12(data?.[0], "spot", 2);
48546
48739
  const mat = big13(meta.mat);
@@ -48551,8 +48744,8 @@ function parseDssResults(data, meta, context) {
48551
48744
  asset: meta.collToken,
48552
48745
  price: collUSD,
48553
48746
  priceUSD: collUSD,
48554
- marketUid: createMarketUid(chainId, key2, meta.collToken),
48555
- targetLender: key2,
48747
+ marketUid: createMarketUid(chainId, key3, meta.collToken),
48748
+ targetLender: key3,
48556
48749
  description: "Maker OSM via Vat.spot \xD7 Spot.mat (USD, ~1h delayed)"
48557
48750
  });
48558
48751
  }
@@ -48562,8 +48755,8 @@ function parseDssResults(data, meta, context) {
48562
48755
  asset: meta.debtToken,
48563
48756
  price: 1,
48564
48757
  priceUSD: 1,
48565
- marketUid: createMarketUid(chainId, key2, meta.debtToken),
48566
- targetLender: key2,
48758
+ marketUid: createMarketUid(chainId, key3, meta.debtToken),
48759
+ targetLender: key3,
48567
48760
  description: "dss debt token (par)",
48568
48761
  staticBase: true,
48569
48762
  baseAsset: meta.debtToken
@@ -48617,7 +48810,7 @@ function getCurvanceCalls(chainId) {
48617
48810
  }
48618
48811
  function parseCurvanceResults(data, meta, context) {
48619
48812
  const { chainId } = context;
48620
- const key2 = curvanceLenderKey(meta.lender, chainId, meta.marketManager);
48813
+ const key3 = curvanceLenderKey(meta.lender, chainId, meta.marketManager);
48621
48814
  const entries = [];
48622
48815
  meta.assets.forEach((asset, i) => {
48623
48816
  const lowerRes = data?.[i * READS_PER_ASSET];
@@ -48633,8 +48826,8 @@ function parseCurvanceResults(data, meta, context) {
48633
48826
  asset,
48634
48827
  price: priceUSD,
48635
48828
  priceUSD,
48636
- marketUid: createMarketUid(chainId, key2, asset),
48637
- targetLender: key2,
48829
+ marketUid: createMarketUid(chainId, key3, asset),
48830
+ targetLender: key3,
48638
48831
  description: spreadBps ? `Curvance OracleManager (USD, pessimistic-low; dual feed +${spreadBps}bps)` : "Curvance OracleManager (USD)"
48639
48832
  });
48640
48833
  });
@@ -48656,6 +48849,62 @@ var curvanceFetcher = {
48656
48849
  parse: parseCurvanceResults,
48657
48850
  getAbi: getCurvanceAbi
48658
48851
  };
48852
+ function getResupplyCalls(chainId) {
48853
+ const results = [];
48854
+ for (const lender of resupplyLendersByChain(chainId)) {
48855
+ const cfg = resupplyConfigFor(lender, chainId);
48856
+ if (!cfg?.reusdOracle || !cfg?.reusd) continue;
48857
+ const roster = getResupplyPairRoster(chainId, lender);
48858
+ if (roster.length === 0) continue;
48859
+ const reusd = cfg.reusd.toLowerCase();
48860
+ for (const entry of roster) {
48861
+ const calls = [
48862
+ { address: cfg.reusdOracle, name: "price", params: [] }
48863
+ ];
48864
+ results.push({
48865
+ calls,
48866
+ meta: { lender, chainId, pair: entry.pair.toLowerCase(), reusd },
48867
+ lender: resupplyLenderKey(lender, chainId, entry.pair)
48868
+ });
48869
+ }
48870
+ }
48871
+ return results;
48872
+ }
48873
+ function parseResupplyResults(data, meta, context) {
48874
+ const { chainId } = context;
48875
+ const key3 = resupplyLenderKey(meta.lender, chainId, meta.pair);
48876
+ const raw = data?.[0];
48877
+ const price2 = typeof raw === "bigint" ? raw : raw != null && raw !== "0x" ? BigInt(raw) : 0n;
48878
+ if (price2 === 0n) return [];
48879
+ const usd = Number(price2) / 1e18;
48880
+ if (!(usd > 0.5 && usd < 2)) return [];
48881
+ return [
48882
+ {
48883
+ asset: meta.reusd,
48884
+ price: usd,
48885
+ priceUSD: usd,
48886
+ marketUid: createMarketUid(chainId, key3, meta.reusd),
48887
+ targetLender: key3,
48888
+ description: "Resupply reUSD oracle (PriceWatcher feed, USD)"
48889
+ }
48890
+ ];
48891
+ }
48892
+ function getResupplyAbi() {
48893
+ return [
48894
+ {
48895
+ name: "price",
48896
+ type: "function",
48897
+ stateMutability: "view",
48898
+ inputs: [],
48899
+ outputs: [{ type: "uint256" }]
48900
+ }
48901
+ ];
48902
+ }
48903
+ var resupplyFetcher = {
48904
+ getCalls: getResupplyCalls,
48905
+ parse: parseResupplyResults,
48906
+ getAbi: getResupplyAbi
48907
+ };
48659
48908
  function getInverseCalls(chainId) {
48660
48909
  const results = [];
48661
48910
  for (const lender of inverseLendersByChain(chainId)) {
@@ -48689,7 +48938,7 @@ function getInverseCalls(chainId) {
48689
48938
  }
48690
48939
  function parseInverseResults(data, meta, context) {
48691
48940
  const { chainId } = context;
48692
- const key2 = inverseLenderKey(meta.lender, meta.market);
48941
+ const key3 = inverseLenderKey(meta.lender, meta.market);
48693
48942
  const entries = [];
48694
48943
  const raw = data?.[0];
48695
48944
  const price2 = typeof raw === "bigint" ? raw : raw != null && raw !== "0x" ? BigInt(raw) : 0n;
@@ -48699,8 +48948,8 @@ function parseInverseResults(data, meta, context) {
48699
48948
  asset: meta.collToken,
48700
48949
  price: collUSD,
48701
48950
  priceUSD: collUSD,
48702
- marketUid: createMarketUid(chainId, key2, meta.collToken),
48703
- targetLender: key2,
48951
+ marketUid: createMarketUid(chainId, key3, meta.collToken),
48952
+ targetLender: key3,
48704
48953
  description: "Inverse FiRM pessimistic oracle (USD, ~2-day low)"
48705
48954
  });
48706
48955
  }
@@ -48709,8 +48958,8 @@ function parseInverseResults(data, meta, context) {
48709
48958
  asset: meta.dola,
48710
48959
  price: 1,
48711
48960
  priceUSD: 1,
48712
- marketUid: createMarketUid(chainId, key2, meta.dola),
48713
- targetLender: key2,
48961
+ marketUid: createMarketUid(chainId, key3, meta.dola),
48962
+ targetLender: key3,
48714
48963
  description: "Inverse DOLA (par)",
48715
48964
  staticBase: true,
48716
48965
  baseAsset: meta.dola
@@ -48761,8 +49010,8 @@ function parseTellerResults(data, meta, context) {
48761
49010
  const collateral = meta.collateral;
48762
49011
  const lenderKey = tellerLenderKey(meta.pool);
48763
49012
  const usdOf = (addr2) => {
48764
- const key2 = tokenList?.[addr2]?.assetGroup ?? `${chainId}-${addr2}`;
48765
- return usdPrices[key2] ?? usdPrices[addr2];
49013
+ const key3 = tokenList?.[addr2]?.assetGroup ?? `${chainId}-${addr2}`;
49014
+ return usdPrices[key3] ?? usdPrices[addr2];
48766
49015
  };
48767
49016
  const principalUSD = usdOf(principal);
48768
49017
  const collateralUSD = usdOf(collateral);
@@ -49460,11 +49709,11 @@ function getAaveV4OracleGroups(chainId) {
49460
49709
  for (const entry of oracleEntries) {
49461
49710
  if (!entry?.oracle || entry.oracle === "0x") continue;
49462
49711
  if (!entry.spoke) continue;
49463
- const key2 = entry.oracle.toLowerCase();
49464
- let group = byOracle.get(key2);
49712
+ const key3 = entry.oracle.toLowerCase();
49713
+ let group = byOracle.get(key3);
49465
49714
  if (!group) {
49466
49715
  group = { decimals: entry.decimals ?? 8, entries: [] };
49467
- byOracle.set(key2, group);
49716
+ byOracle.set(key3, group);
49468
49717
  }
49469
49718
  group.entries.push({
49470
49719
  underlying: entry.underlying.toLowerCase(),
@@ -49970,8 +50219,8 @@ function parseGearboxV3Results(data, _meta, context) {
49970
50219
  const markets = data[0];
49971
50220
  if (!Array.isArray(markets) || markets.length === 0) return entries;
49972
50221
  const resolvePriceUSD = (token) => {
49973
- const key2 = tokenList?.[token]?.assetGroup ?? `${chainId}-${token}`;
49974
- return usdPrices[key2] ?? usdPrices[token];
50222
+ const key3 = tokenList?.[token]?.assetGroup ?? `${chainId}-${token}`;
50223
+ return usdPrices[key3] ?? usdPrices[token];
49975
50224
  };
49976
50225
  for (const m of markets) {
49977
50226
  try {
@@ -50657,6 +50906,12 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
50657
50906
  await fetchCurvanceMarkets(lender, chainId).catch(() => void 0);
50658
50907
  }
50659
50908
  }
50909
+ if (isActive("resupply")) {
50910
+ for (const lender of resupplyLendersByChain(chainId)) {
50911
+ if (getResupplyPairRoster(chainId, lender).length > 0) continue;
50912
+ await fetchResupplyMarkets(lender, chainId).catch(() => void 0);
50913
+ }
50914
+ }
50660
50915
  const aaveResults = isActive("aave") ? safeGetCalls(
50661
50916
  "aave",
50662
50917
  () => aaveFetcher.getCalls(chainId),
@@ -50739,6 +50994,11 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
50739
50994
  () => curvanceFetcher.getCalls(chainId),
50740
50995
  getCallsErrors
50741
50996
  ) : [];
50997
+ const resupplyResults = isActive("resupply") ? safeGetCalls(
50998
+ "resupply",
50999
+ () => resupplyFetcher.getCalls(chainId),
51000
+ getCallsErrors
51001
+ ) : [];
50742
51002
  const inverseResults = isActive("inverse") ? safeGetCalls(
50743
51003
  "inverse",
50744
51004
  () => inverseFetcher.getCalls(chainId),
@@ -50884,6 +51144,13 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
50884
51144
  curvanceFetcher.getAbi(),
50885
51145
  "direct"
50886
51146
  );
51147
+ const resupplyGroup = buildGroup(
51148
+ "resupply",
51149
+ resupplyResults,
51150
+ resupplyFetcher.parse,
51151
+ resupplyFetcher.getAbi(),
51152
+ "direct"
51153
+ );
50887
51154
  const inverseGroup = buildGroup(
50888
51155
  "inverse",
50889
51156
  inverseResults,
@@ -50958,6 +51225,7 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
50958
51225
  riverGroup,
50959
51226
  dssGroup,
50960
51227
  curvanceGroup,
51228
+ resupplyGroup,
50961
51229
  inverseGroup,
50962
51230
  tellerGroup,
50963
51231
  termMaxGroup,
@@ -51009,6 +51277,7 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
51009
51277
  riverData,
51010
51278
  dssData,
51011
51279
  curvanceData,
51280
+ resupplyData,
51012
51281
  inverseData,
51013
51282
  tellerData,
51014
51283
  termMaxData,
@@ -51152,6 +51421,14 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
51152
51421
  allowFailure,
51153
51422
  rpcOverrides
51154
51423
  ),
51424
+ executeGroup(
51425
+ resupplyGroup,
51426
+ chainId,
51427
+ chainBatchSize,
51428
+ retries,
51429
+ allowFailure,
51430
+ rpcOverrides
51431
+ ),
51155
51432
  executeGroup(
51156
51433
  inverseGroup,
51157
51434
  chainId,
@@ -51305,6 +51582,7 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
51305
51582
  parseTrackers(riverGroup, riverData.results);
51306
51583
  parseTrackers(dssGroup, dssData.results);
51307
51584
  parseTrackers(curvanceGroup, curvanceData.results);
51585
+ parseTrackers(resupplyGroup, resupplyData.results);
51308
51586
  parseTrackers(inverseGroup, inverseData.results);
51309
51587
  if (siloV2GqlEntries != null) {
51310
51588
  const diag2 = {
@@ -51365,8 +51643,8 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
51365
51643
  let gqlPushed = 0;
51366
51644
  for (const entry of morphoGqlEntries) {
51367
51645
  const lender = entry.targetLender ?? "MORPHO_BLUE";
51368
- const key2 = `${lender}|${entry.marketUid}|${entry.asset}`;
51369
- if (onChainKeys.has(key2)) continue;
51646
+ const key3 = `${lender}|${entry.marketUid}|${entry.asset}`;
51647
+ if (onChainKeys.has(key3)) continue;
51370
51648
  if (!chainResult[lender]) chainResult[lender] = [];
51371
51649
  entry.derivation = resolveDerivation(entry, "derived");
51372
51650
  chainResult[lender].push(entry);
@@ -51436,9 +51714,9 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
51436
51714
  if (!entry.updatedAt || entry.updatedAt <= 0) continue;
51437
51715
  const staleSeconds = nowSeconds - entry.updatedAt;
51438
51716
  if (staleSeconds <= stalenessThresholdSeconds) continue;
51439
- const key2 = `${lender}|${entry.asset}|${entry.feedSource ?? ""}`;
51440
- if (reported.has(key2)) continue;
51441
- reported.add(key2);
51717
+ const key3 = `${lender}|${entry.asset}|${entry.feedSource ?? ""}`;
51718
+ if (reported.has(key3)) continue;
51719
+ reported.add(key3);
51442
51720
  staleFeeds.push({
51443
51721
  asset: entry.asset,
51444
51722
  lender,
@@ -51585,8 +51863,8 @@ function ewma(prev, sample) {
51585
51863
  function updateFeedStats(prev, observations, nowSeconds = Math.floor(Date.now() / 1e3)) {
51586
51864
  const next = { ...prev };
51587
51865
  for (const obs of observations) {
51588
- const key2 = feedStatKey(obs.chainId, obs.feedKey);
51589
- const existing = next[key2];
51866
+ const key3 = feedStatKey(obs.chainId, obs.feedKey);
51867
+ const existing = next[key3];
51590
51868
  const stat = existing ? { ...existing } : {
51591
51869
  chainId: obs.chainId,
51592
51870
  feedKey: obs.feedKey,
@@ -51613,7 +51891,7 @@ function updateFeedStats(prev, observations, nowSeconds = Math.floor(Date.now()
51613
51891
  stat.deviationSamples += 1;
51614
51892
  }
51615
51893
  stat.lastObservedAt = nowSeconds;
51616
- next[key2] = stat;
51894
+ next[key3] = stat;
51617
51895
  }
51618
51896
  return next;
51619
51897
  }
@@ -51706,8 +51984,8 @@ function collectFeedObservations(structuredPrices, lists = {}, guard = DEFAULT_O
51706
51984
  }
51707
51985
  function pruneFeedStats(stats, maxAgeSeconds = 30 * 24 * 3600, nowSeconds = Math.floor(Date.now() / 1e3)) {
51708
51986
  const out = {};
51709
- for (const [key2, stat] of Object.entries(stats)) {
51710
- if (nowSeconds - stat.lastObservedAt <= maxAgeSeconds) out[key2] = stat;
51987
+ for (const [key3, stat] of Object.entries(stats)) {
51988
+ if (nowSeconds - stat.lastObservedAt <= maxAgeSeconds) out[key3] = stat;
51711
51989
  }
51712
51990
  return out;
51713
51991
  }
@@ -54338,7 +54616,7 @@ function rescaleExchangeRate(exchangeRate, shareDecimals) {
54338
54616
  const dec = Math.max(0, Math.round(Number(shareDecimals) || 0));
54339
54617
  return (r * 10n ** BigInt(dec) / 10n ** 18n).toString();
54340
54618
  }
54341
- async function getJson2(url) {
54619
+ async function getJson3(url) {
54342
54620
  const controller = new AbortController();
54343
54621
  const timer = setTimeout(() => controller.abort(), API_TIMEOUT_MS);
54344
54622
  try {
@@ -54427,7 +54705,7 @@ async function mapWithConcurrency(items, limit, fn) {
54427
54705
  return out;
54428
54706
  }
54429
54707
  async function fetchEulerEarnVaultsFromApi(chainId, prices = {}, tokenList = {}, multicallRetry) {
54430
- const list = await getJson2(
54708
+ const list = await getJson3(
54431
54709
  `${EULER_DATA_API_BASE2}/earn/vaults?chainId=${chainId}&limit=200`
54432
54710
  );
54433
54711
  if (!list) return void 0;
@@ -54436,7 +54714,7 @@ async function fetchEulerEarnVaultsFromApi(chainId, prices = {}, tokenList = {},
54436
54714
  const details = await mapWithConcurrency(
54437
54715
  rows,
54438
54716
  DETAIL_CONCURRENCY,
54439
- (row) => getJson2(
54717
+ (row) => getJson3(
54440
54718
  `${EULER_DATA_API_BASE2}/earn/vaults/${chainId}/${row.address}?include=strategies`
54441
54719
  ).then((d) => d?.data)
54442
54720
  );
@@ -60171,6 +60449,73 @@ var AvailableWithdrawLimitAbi = [
60171
60449
  }
60172
60450
  ];
60173
60451
 
60452
+ // src/vaults/savings/abis/yieldBasis.ts
60453
+ var YieldBasisLtReadAbi = [
60454
+ {
60455
+ /**
60456
+ * Fundamental, oracle-anchored value of one share — **1e18-scaled in
60457
+ * ASSET units regardless of the asset's own decimals**. cbBTC and
60458
+ * WBTC are 8-decimal while this still answers in 1e18, so treating it
60459
+ * as raw underlying is a 1e10 error. Sandwich-resistant; excludes
60460
+ * TRD. Returns exactly `1e18` when `totalSupply == 0`.
60461
+ */
60462
+ name: "pricePerShare",
60463
+ type: "function",
60464
+ stateMutability: "view",
60465
+ inputs: [],
60466
+ outputs: [{ type: "uint256" }]
60467
+ },
60468
+ {
60469
+ /**
60470
+ * Realistic redemption: what `withdraw(tokens, …)` would actually pay,
60471
+ * in **raw underlying units**, priced off a live Cryptoswap unwind
60472
+ * (`calc_withdraw_fixed_out`). Includes TRD, so it disagrees with
60473
+ * `pricePerShare` by the signed discount — usually a few basis points,
60474
+ * widening during volatility.
60475
+ *
60476
+ * `@view @nonreentrant` in Vyper: the lock is only read, never
60477
+ * written, so this is a normal `eth_call` and multicall-safe.
60478
+ */
60479
+ name: "preview_withdraw",
60480
+ type: "function",
60481
+ stateMutability: "view",
60482
+ inputs: [{ type: "uint256", name: "tokens" }],
60483
+ outputs: [{ type: "uint256", name: "assets" }]
60484
+ }
60485
+ ];
60486
+ var YieldBasisAmmReadAbi = [
60487
+ {
60488
+ /**
60489
+ * Ceiling on the market's crvUSD debt, set by the Factory's
60490
+ * allocation. The deposit assert is `max_debt() / 2 >= value`, so
60491
+ * `max_debt()/2` is the market's total equity capacity — there is no
60492
+ * `maxDeposit()` getter anywhere and a full market reverts
60493
+ * `"Debt too high"`.
60494
+ */
60495
+ name: "max_debt",
60496
+ type: "function",
60497
+ stateMutability: "view",
60498
+ inputs: [],
60499
+ outputs: [{ type: "uint256" }]
60500
+ },
60501
+ {
60502
+ /**
60503
+ * `OraclizedValue{p_o, value}` flattened — see the file header.
60504
+ * `value` is the market's current **equity** in crvUSD (collateral
60505
+ * value minus debt, i.e. half the LP collateral at the L=2 target),
60506
+ * which is the quantity `max_debt()/2` is compared against.
60507
+ */
60508
+ name: "value_oracle",
60509
+ type: "function",
60510
+ stateMutability: "view",
60511
+ inputs: [],
60512
+ outputs: [
60513
+ { type: "uint256", name: "p_o" },
60514
+ { type: "uint256", name: "value" }
60515
+ ]
60516
+ }
60517
+ ];
60518
+
60174
60519
  // src/vaults/savings/readers/erc4626Idle.ts
60175
60520
  var readerErc4626Idle = (entry) => {
60176
60521
  const shareUnit = 10n ** BigInt(entry.decimals);
@@ -60368,6 +60713,54 @@ var readerNativeWnlp = (entry) => {
60368
60713
  };
60369
60714
  };
60370
60715
 
60716
+ // src/vaults/savings/readers/yieldBasisLt.ts
60717
+ var ONE_SHARE = ONE_E1811;
60718
+ var readerYieldBasisLt = (entry) => {
60719
+ const underlyingUnit = 10n ** BigInt(entry.underlyingDecimals ?? entry.decimals);
60720
+ const amm = entry.capacityContract ?? entry.address;
60721
+ return {
60722
+ calls: [
60723
+ { address: entry.address, name: "totalSupply", params: [] },
60724
+ { address: entry.address, name: "pricePerShare", params: [] },
60725
+ { address: entry.address, name: "preview_withdraw", params: [ONE_SHARE] },
60726
+ { address: amm, name: "max_debt", params: [] },
60727
+ { address: amm, name: "value_oracle", params: [] }
60728
+ ],
60729
+ abis: [
60730
+ TotalSupplyAbi2,
60731
+ YieldBasisLtReadAbi,
60732
+ YieldBasisLtReadAbi,
60733
+ YieldBasisAmmReadAbi,
60734
+ YieldBasisAmmReadAbi
60735
+ ],
60736
+ parse: ([supply, pps, redeemPerShare, maxDebt, valueOracle]) => {
60737
+ const totalSupply = toBigInt15(supply);
60738
+ const fundamental = toBigInt15(pps);
60739
+ const redeemRaw = toBigInt15(redeemPerShare);
60740
+ if (totalSupply === void 0 || fundamental === void 0 || redeemRaw === void 0) {
60741
+ return void 0;
60742
+ }
60743
+ if (totalSupply === 0n || redeemRaw === 0n) return void 0;
60744
+ const totalAssets = totalSupply * redeemRaw / ONE_SHARE;
60745
+ const exchangeRate = redeemRaw * ONE_E1811 / underlyingUnit;
60746
+ const equity = Array.isArray(valueOracle) ? toBigInt15(valueOracle[1]) : toBigInt15(valueOracle?.value);
60747
+ const cap = toBigInt15(maxDebt);
60748
+ let depositCapacity;
60749
+ if (cap !== void 0 && equity !== void 0 && equity > 0n) {
60750
+ const headroom = cap / 2n - equity;
60751
+ depositCapacity = headroom > 0n ? totalAssets * headroom / equity : 0n;
60752
+ }
60753
+ return {
60754
+ totalAssets,
60755
+ totalSupply,
60756
+ exchangeRate,
60757
+ fundamentalExchangeRate: fundamental,
60758
+ depositCapacity
60759
+ };
60760
+ }
60761
+ };
60762
+ };
60763
+
60371
60764
  // src/vaults/savings/readers/index.ts
60372
60765
  var buildReader2 = (entry) => {
60373
60766
  switch (entry.reader) {
@@ -60377,6 +60770,8 @@ var buildReader2 = (entry) => {
60377
60770
  return readerNavOracle(entry);
60378
60771
  case "frankencoin-savings":
60379
60772
  return readerFrankencoinSavings(entry);
60773
+ case "yieldbasis-lt":
60774
+ return readerYieldBasisLt(entry);
60380
60775
  case "erc4626-idle":
60381
60776
  return readerErc4626Idle(entry);
60382
60777
  case "erc4626-withdraw-limit":
@@ -60442,6 +60837,12 @@ var fetchSavingsVaults = async (chainId, multicallRetry, prices = {}, tokenList
60442
60837
  ) : 1;
60443
60838
  const convertToAssets = state.exchangeRate * underlyingUnit / ONE_E1812;
60444
60839
  const convertToShares = state.exchangeRate > 0n ? ONE_E1812 * shareUnit / state.exchangeRate : 0n;
60840
+ const depositCapacity = state.depositCapacity?.toString();
60841
+ const depositCapacityFormatted = state.depositCapacity !== void 0 ? Number(state.depositCapacity) / 10 ** underlyingDec : void 0;
60842
+ const depositCapacityUsd = depositCapacityFormatted !== void 0 && priceUsd !== void 0 ? depositCapacityFormatted * priceUsd : void 0;
60843
+ const redemptionDiscountBps = state.fundamentalExchangeRate !== void 0 && state.fundamentalExchangeRate > 0n ? Number(
60844
+ state.exchangeRate * 100000000n / state.fundamentalExchangeRate - 100000000n
60845
+ ) / 1e4 : void 0;
60445
60846
  const displayName = composeVaultDisplayName(
60446
60847
  entry.brand,
60447
60848
  entry.brand,
@@ -60489,6 +60890,10 @@ var fetchSavingsVaults = async (chainId, multicallRetry, prices = {}, tokenList
60489
60890
  instantRedeemEnabled: state.instantRedeemEnabled,
60490
60891
  inventoryContract: entry.inventoryContract?.toLowerCase(),
60491
60892
  withdrawQueue: state.withdrawQueue ?? entry.withdrawQueue?.toLowerCase(),
60893
+ depositCapacity,
60894
+ depositCapacityFormatted,
60895
+ depositCapacityUsd,
60896
+ redemptionDiscountBps,
60492
60897
  asset,
60493
60898
  priceUsd,
60494
60899
  totalAssetsFormatted,
@@ -61425,6 +61830,22 @@ var classifyRedemption = (provider, v) => {
61425
61830
  };
61426
61831
  var VOLATILE_VAULT_OVERRIDES = /* @__PURE__ */ new Set([
61427
61832
  // '1-0x…', // <chain>-<address> of a known volatile strategy vault
61833
+ // Yield Basis yb-<ASSET> — 2×-leveraged Curve Cryptoswap LP positions
61834
+ // with impermanent loss cancelled, registered under the `savings`
61835
+ // provider. They live here because the share/asset ratio is NOT
61836
+ // monotonic: when rebalancing slippage outruns trading fees the share
61837
+ // price falls in asset terms, and three of these four printed a
61838
+ // negative trailing-30d rate at integration (2026-08-10), with the
61839
+ // protocol's earlier market generations negative on 23–45 % of all
61840
+ // days. Structurally the HLP case, inside a yield provider.
61841
+ "1-0x651d4b8168488fa163d85304662e8278d4c55baa",
61842
+ // yb-WBTC
61843
+ "1-0x722fc3640ba007c3e9867ccdb0dca59f2e2f29f9",
61844
+ // yb-cbBTC
61845
+ "1-0x771f7290428d830ecd41e980745c327e507823ec",
61846
+ // yb-tBTC
61847
+ "1-0x2b9c9f3bdceb5d8e36a4704f08a78fca53343cea"
61848
+ // yb-WETH
61428
61849
  ]);
61429
61850
  var STABLECOIN_SYMBOLS = /* @__PURE__ */ new Set([
61430
61851
  // USD majors
@@ -61517,8 +61938,8 @@ var isStablecoinSymbol = (symbol) => {
61517
61938
  return s.includes("USD");
61518
61939
  };
61519
61940
  var classifyVault = (input) => {
61520
- const key2 = `${input.chainId}-${input.address.toLowerCase()}`;
61521
- const yieldProfile = VOLATILE_VAULT_OVERRIDES.has(key2) || VOLATILE_PROVIDERS.has(input.provider) ? "volatile" : "yield-bearing";
61941
+ const key3 = `${input.chainId}-${input.address.toLowerCase()}`;
61942
+ const yieldProfile = VOLATILE_VAULT_OVERRIDES.has(key3) || VOLATILE_PROVIDERS.has(input.provider) ? "volatile" : "yield-bearing";
61522
61943
  const denomination = isStablecoinSymbol(input.underlyingSymbol) ? "stable" : "volatile";
61523
61944
  return { yieldProfile, denomination };
61524
61945
  };
@@ -62066,10 +62487,10 @@ var priceGmMarkets = async (chainId, multicallRetry, markets, prices) => {
62066
62487
  const market = m.marketToken;
62067
62488
  const long = m.longToken;
62068
62489
  const short = m.shortToken;
62069
- const get = (key2) => ({
62490
+ const get = (key3) => ({
62070
62491
  address: c.dataStore,
62071
62492
  name: "getUint",
62072
- params: [key2]
62493
+ params: [key3]
62073
62494
  });
62074
62495
  return [
62075
62496
  get(maxPoolAmountKey(market, long)),
@@ -62320,10 +62741,10 @@ var fetchGmxExecutionFees = async (chainId, multicallRetry, gasPriceWei) => {
62320
62741
  try {
62321
62742
  res = await multicallRetry({
62322
62743
  chain: chainId,
62323
- calls: keys.map((key2) => ({
62744
+ calls: keys.map((key3) => ({
62324
62745
  address: c.dataStore,
62325
62746
  name: "getUint",
62326
- params: [key2]
62747
+ params: [key3]
62327
62748
  })),
62328
62749
  abi: GmxDataStoreUintAbi,
62329
62750
  maxRetries: 3,
@@ -62395,28 +62816,28 @@ var fetchGmxVaults = async (chainId, multicallRetry, options) => {
62395
62816
  };
62396
62817
  for (const m of markets) {
62397
62818
  if (!m.isListed) continue;
62398
- const key2 = m.marketToken.toLowerCase();
62399
- out[key2] = build(
62819
+ const key3 = m.marketToken.toLowerCase();
62820
+ out[key3] = build(
62400
62821
  m.marketToken,
62401
62822
  m.name,
62402
62823
  "gm",
62403
62824
  m.longToken,
62404
62825
  m.shortToken,
62405
62826
  m.indexToken,
62406
- apy.markets?.[m.marketToken] ?? apy.markets?.[key2]
62827
+ apy.markets?.[m.marketToken] ?? apy.markets?.[key3]
62407
62828
  );
62408
62829
  }
62409
62830
  for (const g of glvs) {
62410
62831
  if (!g.isListed) continue;
62411
- const key2 = g.glvToken.toLowerCase();
62412
- out[key2] = build(
62832
+ const key3 = g.glvToken.toLowerCase();
62833
+ out[key3] = build(
62413
62834
  g.glvToken,
62414
62835
  g.name,
62415
62836
  "glv",
62416
62837
  g.longToken,
62417
62838
  g.shortToken,
62418
62839
  void 0,
62419
- apy.glvs?.[g.glvToken] ?? apy.glvs?.[key2]
62840
+ apy.glvs?.[g.glvToken] ?? apy.glvs?.[key3]
62420
62841
  );
62421
62842
  }
62422
62843
  if (multicallRetry) {
@@ -62591,15 +63012,15 @@ var getGmxUserPositions = async (chainId, account, multicallRetry, options) => {
62591
63012
  const depositKeys = Array.isArray(keyRes[0]) ? keyRes[0] : [];
62592
63013
  const withdrawalKeys = Array.isArray(keyRes[1]) ? keyRes[1] : [];
62593
63014
  const readerCalls = [
62594
- ...depositKeys.map((key2) => ({
63015
+ ...depositKeys.map((key3) => ({
62595
63016
  address: c.reader,
62596
63017
  name: "getDeposit",
62597
- params: [c.dataStore, key2]
63018
+ params: [c.dataStore, key3]
62598
63019
  })),
62599
- ...withdrawalKeys.map((key2) => ({
63020
+ ...withdrawalKeys.map((key3) => ({
62600
63021
  address: c.reader,
62601
63022
  name: "getWithdrawal",
62602
- params: [c.dataStore, key2]
63023
+ params: [c.dataStore, key3]
62603
63024
  }))
62604
63025
  ];
62605
63026
  const readerRes = readerCalls.length ? await safe(
@@ -62614,13 +63035,13 @@ var getGmxUserPositions = async (chainId, account, multicallRetry, options) => {
62614
63035
  ) : [];
62615
63036
  const pendingDeposits = [];
62616
63037
  const pendingWithdrawals = [];
62617
- depositKeys.forEach((key2, i) => {
63038
+ depositKeys.forEach((key3, i) => {
62618
63039
  const d = readerRes[i];
62619
63040
  const a = d?.addresses;
62620
63041
  if (!a?.market) return;
62621
63042
  const n = d.numbers;
62622
63043
  pendingDeposits.push({
62623
- key: key2,
63044
+ key: key3,
62624
63045
  kind: "gm",
62625
63046
  account: a.account.toLowerCase(),
62626
63047
  receiver: a.receiver.toLowerCase(),
@@ -62634,13 +63055,13 @@ var getGmxUserPositions = async (chainId, account, multicallRetry, options) => {
62634
63055
  updatedAtTime: str3(n.updatedAtTime)
62635
63056
  });
62636
63057
  });
62637
- withdrawalKeys.forEach((key2, i) => {
63058
+ withdrawalKeys.forEach((key3, i) => {
62638
63059
  const w = readerRes[depositKeys.length + i];
62639
63060
  const a = w?.addresses;
62640
63061
  if (!a?.market) return;
62641
63062
  const n = w.numbers;
62642
63063
  pendingWithdrawals.push({
62643
- key: key2,
63064
+ key: key3,
62644
63065
  kind: "gm",
62645
63066
  account: a.account.toLowerCase(),
62646
63067
  receiver: a.receiver.toLowerCase(),
@@ -64775,12 +65196,12 @@ function buildModes(input) {
64775
65196
  const keys = Object.keys(cfg);
64776
65197
  if (keys.length <= 1) return void 0;
64777
65198
  const out = [];
64778
- for (const key2 of keys) {
64779
- const c = cfg[key2];
65199
+ for (const key3 of keys) {
65200
+ const c = cfg[key3];
64780
65201
  if (!c) continue;
64781
- const isDefault = key2 === "0";
65202
+ const isDefault = key3 === "0";
64782
65203
  out.push({
64783
- modeId: key2,
65204
+ modeId: key3,
64784
65205
  label: c.label,
64785
65206
  isDefault,
64786
65207
  entry: isDefault ? void 0 : "user-selected",