@1delta/margin-fetcher 0.0.238 → 0.0.240

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
@@ -18867,7 +18867,7 @@ var getSiloV2ReservesDataConverter = (lender, chainId, prices, additionalYields,
18867
18867
  { self: market.silo0, other: market.silo1 },
18868
18868
  { self: market.silo1, other: market.silo0 }
18869
18869
  ];
18870
- const toBigInt7 = (v) => {
18870
+ const toBigInt8 = (v) => {
18871
18871
  if (v === void 0 || v === null || v === "0x") return 0n;
18872
18872
  if (typeof v === "bigint") return v;
18873
18873
  try {
@@ -18879,8 +18879,8 @@ var getSiloV2ReservesDataConverter = (lender, chainId, prices, additionalYields,
18879
18879
  for (let s = 0; s < 2; s++) {
18880
18880
  const { self, other } = sides[s];
18881
18881
  const slot = s * SILO_V2_CALLS_PER_SIDE;
18882
- const totalAssetsRaw = toBigInt7(data[slot]);
18883
- const debtAssetsRaw = toBigInt7(data[slot + 1]);
18882
+ const totalAssetsRaw = toBigInt8(data[slot]);
18883
+ const debtAssetsRaw = toBigInt8(data[slot + 1]);
18884
18884
  const irmConfigRaw = data[slot + 2];
18885
18885
  const decimals = self.decimals;
18886
18886
  const totalDeposits = Number(formatUnits(totalAssetsRaw, decimals));
@@ -19035,7 +19035,7 @@ var getSiloV3ReservesDataConverter = (lender, chainId, prices, additionalYields,
19035
19035
  { self: market.silo0, other: market.silo1 },
19036
19036
  { self: market.silo1, other: market.silo0 }
19037
19037
  ];
19038
- const toBigInt7 = (v) => {
19038
+ const toBigInt8 = (v) => {
19039
19039
  if (v === void 0 || v === null || v === "0x") return 0n;
19040
19040
  if (typeof v === "bigint") return v;
19041
19041
  try {
@@ -19047,8 +19047,8 @@ var getSiloV3ReservesDataConverter = (lender, chainId, prices, additionalYields,
19047
19047
  for (let s = 0; s < 2; s++) {
19048
19048
  const { self, other } = sides[s];
19049
19049
  const slot = s * SILO_V3_CALLS_PER_SIDE;
19050
- const totalAssetsRaw = toBigInt7(data[slot]);
19051
- const debtAssetsRaw = toBigInt7(data[slot + 1]);
19050
+ const totalAssetsRaw = toBigInt8(data[slot]);
19051
+ const debtAssetsRaw = toBigInt8(data[slot + 1]);
19052
19052
  const irmConfigRaw = data[slot + 2];
19053
19053
  const decimals = self.decimals;
19054
19054
  const totalDeposits = Number(formatUnits(totalAssetsRaw, decimals));
@@ -19215,7 +19215,7 @@ function parseVault(vault, chainId, prices, additionalYields, tokenList) {
19215
19215
  const collateralAddress = normalizeUnderlying(rawCollateral);
19216
19216
  const loanAddress = normalizeUnderlying(rawLoan);
19217
19217
  const vaultId = Number(constants.vaultId ?? 0);
19218
- const lender = `FLUID_${vaultId}`;
19218
+ const lender = `FLUID_${chainId}_${vaultId}`;
19219
19219
  const collateralMeta = tokenList[collateralAddress];
19220
19220
  const loanMeta = tokenList[loanAddress];
19221
19221
  const colDecimals = Number(
@@ -20721,6 +20721,20 @@ var buildSiloV3UserCall = (chainId, lender, account) => {
20721
20721
  return calls;
20722
20722
  };
20723
20723
 
20724
+ // src/lending/user-data/fluid/userCallBuild.ts
20725
+ var FLUID_USER_CALL_COUNT = 1;
20726
+ var buildFluidUserCall = (chainId, _lender, account) => {
20727
+ const resolvers = fluidResolvers()?.[chainId];
20728
+ if (!resolvers) return [];
20729
+ return [
20730
+ {
20731
+ address: resolvers.vaultResolver,
20732
+ name: "positionsByUser",
20733
+ params: [account]
20734
+ }
20735
+ ];
20736
+ };
20737
+
20724
20738
  // src/lending/user-data/fetch-balances/prepare.ts
20725
20739
  async function buildUserCall(chainId, lender, account, params) {
20726
20740
  if (isAaveV4Type(lender)) return buildAaveV4UserCall(chainId, lender, account);
@@ -20739,6 +20753,8 @@ async function buildUserCall(chainId, lender, account, params) {
20739
20753
  return buildSiloV3UserCall(chainId, lender, account);
20740
20754
  if (isCompoundV2Type(lender))
20741
20755
  return buildCompoundV2UserCall(chainId, lender, account);
20756
+ if (isFluid(lender))
20757
+ return buildFluidUserCall(chainId, lender, account);
20742
20758
  return [];
20743
20759
  }
20744
20760
  function organizeUserQueries(queries) {
@@ -22466,6 +22482,141 @@ function toBigInt6(v) {
22466
22482
  return 0n;
22467
22483
  }
22468
22484
  }
22485
+ var FLUID_EEE_LOWER2 = "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee";
22486
+ var normalizeUnderlying2 = (addr) => addr === FLUID_EEE_LOWER2 ? zeroAddress : addr;
22487
+ function toBigInt7(v) {
22488
+ if (v === void 0 || v === null || v === "0x") return 0n;
22489
+ if (typeof v === "bigint") return v;
22490
+ try {
22491
+ return BigInt(v);
22492
+ } catch {
22493
+ return 0n;
22494
+ }
22495
+ }
22496
+ var getFluidUserDataConverter = (lender, chainId, account, meta) => {
22497
+ return [
22498
+ (data) => {
22499
+ if (!data || data.length !== FLUID_USER_CALL_COUNT) return void 0;
22500
+ const result = data[0];
22501
+ if (!result) return void 0;
22502
+ const positions = result[0];
22503
+ const vaults = result[1];
22504
+ if (!Array.isArray(positions) || !Array.isArray(vaults) || positions.length === 0)
22505
+ return void 0;
22506
+ const perVault = /* @__PURE__ */ new Map();
22507
+ for (let i = 0; i < positions.length; i++) {
22508
+ const pos = positions[i];
22509
+ const vault = vaults[i];
22510
+ if (!vault?.constantVariables) continue;
22511
+ if (vault.isSmartCol || vault.isSmartDebt) continue;
22512
+ if (pos.isLiquidated) continue;
22513
+ const vaultId = Number(vault.constantVariables.vaultId ?? 0);
22514
+ if (!perVault.has(vaultId)) perVault.set(vaultId, []);
22515
+ perVault.get(vaultId).push({ pos, vault });
22516
+ }
22517
+ if (perVault.size === 0) return void 0;
22518
+ const out = {};
22519
+ for (const [vaultId, nfts] of perVault) {
22520
+ const lenderKey = `${Lender.FLUID}_${chainId}_${vaultId}`;
22521
+ const metaMap = meta?.[lenderKey];
22522
+ if (!metaMap) continue;
22523
+ const constants = nfts[0].vault.constantVariables;
22524
+ const rawCol = (constants.supplyToken?.token0 ?? constants.supplyToken ?? "").toString().toLowerCase();
22525
+ const rawLoan = (constants.borrowToken?.token0 ?? constants.borrowToken ?? "").toString().toLowerCase();
22526
+ if (!rawCol || !rawLoan) continue;
22527
+ const collateral = normalizeUnderlying2(rawCol);
22528
+ const loan = normalizeUnderlying2(rawLoan);
22529
+ const colMarketUid = createMarketUid(chainId, lenderKey, collateral);
22530
+ const loanMarketUid = createMarketUid(chainId, lenderKey, loan);
22531
+ const colMeta = metaMap[colMarketUid];
22532
+ const loanMeta = metaMap[loanMarketUid];
22533
+ const colDec = colMeta?.asset?.decimals ?? 18;
22534
+ const loanDec = loanMeta?.asset?.decimals ?? 18;
22535
+ const colDisplayPrice = colMeta ? getDisplayPrice(colMeta) : 0;
22536
+ const colOraclePrice = colMeta ? getOraclePrice(colMeta) : 0;
22537
+ const loanDisplayPrice = loanMeta ? getDisplayPrice(loanMeta) : 0;
22538
+ const loanOraclePrice = loanMeta ? getOraclePrice(loanMeta) : 0;
22539
+ const colPriceHist = colMeta?.price?.priceUsd24h ?? colDisplayPrice;
22540
+ const loanPriceHist = loanMeta?.price?.priceUsd24h ?? loanDisplayPrice;
22541
+ const lendingPositions = {};
22542
+ const modes = {};
22543
+ const histData = {};
22544
+ for (const { pos } of nfts) {
22545
+ const nftId = pos.nftId.toString();
22546
+ const supplyRaw = toBigInt7(pos.supply);
22547
+ const borrowRaw = toBigInt7(pos.borrow) + toBigInt7(pos.dustBorrow);
22548
+ if (supplyRaw === 0n && borrowRaw === 0n) continue;
22549
+ const depositsStr = parseRawAmount(
22550
+ supplyRaw.toString(),
22551
+ colDec
22552
+ );
22553
+ const debtStr = parseRawAmount(borrowRaw.toString(), loanDec);
22554
+ const depositsNum = Number(depositsStr);
22555
+ const debtNum = Number(debtStr);
22556
+ const depositsUSD = depositsNum * colDisplayPrice;
22557
+ const debtUSD = debtNum * loanDisplayPrice;
22558
+ const depositsUSDOracle = depositsNum * colOraclePrice;
22559
+ const debtUSDOracle = debtNum * loanOraclePrice;
22560
+ histData[nftId] = {
22561
+ totalDeposits24h: depositsNum * colPriceHist,
22562
+ totalDebt24h: debtNum * loanPriceHist
22563
+ };
22564
+ modes[nftId] = 0;
22565
+ const posData = {};
22566
+ posData[colMarketUid] = {
22567
+ marketUid: colMarketUid,
22568
+ underlying: collateral,
22569
+ deposits: depositsStr,
22570
+ debt: "0",
22571
+ debtStable: "0",
22572
+ depositsUSD,
22573
+ debtUSD: 0,
22574
+ debtStableUSD: 0,
22575
+ depositsUSDOracle,
22576
+ debtUSDOracle: 0,
22577
+ debtStableUSDOracle: 0,
22578
+ stableBorrowRate: "0",
22579
+ collateralEnabled: supplyRaw > 0n,
22580
+ claimableRewards: 0
22581
+ };
22582
+ posData[loanMarketUid] = {
22583
+ marketUid: loanMarketUid,
22584
+ underlying: loan,
22585
+ deposits: "0",
22586
+ debt: debtStr,
22587
+ debtStable: "0",
22588
+ depositsUSD: 0,
22589
+ debtUSD,
22590
+ debtStableUSD: 0,
22591
+ depositsUSDOracle: 0,
22592
+ debtUSDOracle,
22593
+ debtStableUSDOracle: 0,
22594
+ stableBorrowRate: "0",
22595
+ collateralEnabled: false,
22596
+ claimableRewards: 0
22597
+ };
22598
+ lendingPositions[nftId] = posData;
22599
+ }
22600
+ if (Object.keys(lendingPositions).length === 0) continue;
22601
+ const userData = createMultiAccountTypeUserState(
22602
+ {
22603
+ chainId,
22604
+ account,
22605
+ lendingPositions,
22606
+ modes
22607
+ },
22608
+ metaMap,
22609
+ histData
22610
+ );
22611
+ if (userData && userData.data.length > 0) {
22612
+ out[lenderKey] = userData;
22613
+ }
22614
+ }
22615
+ return Object.keys(out).length > 0 ? out : void 0;
22616
+ },
22617
+ FLUID_USER_CALL_COUNT
22618
+ ];
22619
+ };
22469
22620
 
22470
22621
  // src/lending/user-data/fetch-balances/parse.ts
22471
22622
  function getUserDataConverter(lender, chainId, account, params, meta) {
@@ -22505,6 +22656,8 @@ function getUserDataConverter(lender, chainId, account, params, meta) {
22505
22656
  return getSiloV2UserDataConverter(lender, chainId, account, meta?.[lender]);
22506
22657
  if (isSiloV3Type(lender))
22507
22658
  return getSiloV3UserDataConverter(lender, chainId, account, meta?.[lender]);
22659
+ if (isFluid(lender))
22660
+ return getFluidUserDataConverter(lender, chainId, account, meta);
22508
22661
  return getCompoundV2UserDataConverter(
22509
22662
  lender,
22510
22663
  chainId,
@@ -27186,6 +27339,7 @@ var getAbi2 = (lender) => {
27186
27339
  return [...ComptrollerAbi, ...CompoundV2CollateralToken];
27187
27340
  if (isSiloV2Type(lender) || isSiloV3Type(lender))
27188
27341
  return [...SiloAbi];
27342
+ if (isFluid(lender)) return [...FluidVaultResolverAbi];
27189
27343
  return [];
27190
27344
  };
27191
27345
 
@@ -28856,6 +29010,7 @@ async function getListsMulti(chainIds) {
28856
29010
 
28857
29011
  // src/yields/intrinsic/fetchers/lido.ts
28858
29012
  var WSTETH_URL = "https://eth-api.lido.fi/v1/protocol/steth/apr/sma";
29013
+ var DEFILLAMA_LIDO_URL = "https://yields.llama.fi/chart/747c1d2a-c668-4682-b9f9-296708a3dd90";
28859
29014
  var tETH = "Treehouse ETH::TETH";
28860
29015
  var robustFetchJson = async (url, { timeoutMs = 5e3, attempts = 3 } = {}) => {
28861
29016
  let lastErr;
@@ -28879,11 +29034,20 @@ var robustFetchJson = async (url, { timeoutMs = 5e3, attempts = 3 } = {}) => {
28879
29034
  }
28880
29035
  throw lastErr;
28881
29036
  };
29037
+ async function fetchLidoApr() {
29038
+ try {
29039
+ const res = await robustFetchJson(WSTETH_URL);
29040
+ return Number(res.data.aprs.at(-1).apr) * 0.9;
29041
+ } catch {
29042
+ const res = await robustFetchJson(DEFILLAMA_LIDO_URL);
29043
+ const latest = res.data.at(-1);
29044
+ return Number(latest.apyBase) * 0.9;
29045
+ }
29046
+ }
28882
29047
  var wstethFetcher = {
28883
29048
  label: "WSTETH",
28884
29049
  fetch: async () => {
28885
- const res = await robustFetchJson(WSTETH_URL);
28886
- const apr = Number(res.data.aprs.at(-1).apr) * 0.9;
29050
+ const apr = await fetchLidoApr();
28887
29051
  return {
28888
29052
  WSTETH: apr,
28889
29053
  [tETH]: apr
@@ -31481,8 +31645,8 @@ var siloV3Fetcher = {
31481
31645
  parse: parseSiloV3Results,
31482
31646
  getAbi: getSiloV3Abi
31483
31647
  };
31484
- var FLUID_EEE_LOWER2 = "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee";
31485
- var normalizeUnderlying2 = (addr) => addr === FLUID_EEE_LOWER2 ? zeroAddress : addr;
31648
+ var FLUID_EEE_LOWER3 = "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee";
31649
+ var normalizeUnderlying3 = (addr) => addr === FLUID_EEE_LOWER3 ? zeroAddress : addr;
31486
31650
  function priceColInDebt(raw, colDec, debtDec) {
31487
31651
  return formatMorphoPrice(raw, debtDec, colDec + 9);
31488
31652
  }
@@ -31519,8 +31683,8 @@ function parseFluidResults(data, _meta, context) {
31519
31683
  const rawCol = (constants.supplyToken?.token0 ?? constants.supplyToken ?? "").toString().toLowerCase();
31520
31684
  const rawLoan = (constants.borrowToken?.token0 ?? constants.borrowToken ?? "").toString().toLowerCase();
31521
31685
  if (!rawCol || !rawLoan) continue;
31522
- const collateral = normalizeUnderlying2(rawCol);
31523
- const loan = normalizeUnderlying2(rawLoan);
31686
+ const collateral = normalizeUnderlying3(rawCol);
31687
+ const loan = normalizeUnderlying3(rawLoan);
31524
31688
  const colDec = tokenList?.[collateral]?.decimals ?? 18;
31525
31689
  const loanDec = tokenList?.[loan]?.decimals ?? 18;
31526
31690
  const rawPrice = configs.oraclePriceOperate?.toString() ?? "0";
@@ -31528,7 +31692,7 @@ function parseFluidResults(data, _meta, context) {
31528
31692
  const priceDebtPerCol = priceColInDebt(rawPrice, colDec, loanDec);
31529
31693
  if (!Number.isFinite(priceDebtPerCol) || priceDebtPerCol === 0) continue;
31530
31694
  const vaultId = Number(constants.vaultId ?? 0);
31531
- const lenderKey = `${Lender.FLUID}_${vaultId}`;
31695
+ const lenderKey = `${Lender.FLUID}_${chainId}_${vaultId}`;
31532
31696
  const loanOracleKey = tokenList?.[loan]?.assetGroup ?? `${chainId}-${loan}`;
31533
31697
  const loanUSD = usdPrices[loanOracleKey] ?? usdPrices[loan];
31534
31698
  if (!loanUSD) continue;
@@ -32879,8 +33043,8 @@ var buildFluidFTokensCall = (chainId) => {
32879
33043
  };
32880
33044
 
32881
33045
  // src/vaults/fluid/publicCallParse.ts
32882
- var FLUID_EEE_LOWER3 = "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee";
32883
- var normalizeUnderlying3 = (addr) => addr === FLUID_EEE_LOWER3 ? zeroAddress : addr;
33046
+ var FLUID_EEE_LOWER4 = "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee";
33047
+ var normalizeUnderlying4 = (addr) => addr === FLUID_EEE_LOWER4 ? zeroAddress : addr;
32884
33048
  var FLUID_RATE_SCALE2 = 100;
32885
33049
  var scaleFluidRate2 = (raw) => {
32886
33050
  if (raw === void 0 || raw === null) return 0;
@@ -32902,7 +33066,7 @@ function parseFTokens(fTokens, chainId, prices, tokenList) {
32902
33066
  for (const ft of fTokens) {
32903
33067
  const rawAsset = (ft.asset ?? "").toString().toLowerCase();
32904
33068
  if (!rawAsset) continue;
32905
- const underlying = normalizeUnderlying3(rawAsset);
33069
+ const underlying = normalizeUnderlying4(rawAsset);
32906
33070
  const assetMeta = tokenList[underlying];
32907
33071
  const decimals = Number(ft.decimals ?? assetMeta?.decimals ?? 18);
32908
33072
  const totalAssetsFormatted = Number(