@1delta/margin-fetcher 0.0.236 → 0.0.238

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
@@ -7607,6 +7607,9 @@ var getLendersForChain = (c) => {
7607
7607
  for (const spokeAddr of Object.keys(v4ChainSpokes)) {
7608
7608
  lenders.push(aaveV4SpokeLenderKey(spokeAddr));
7609
7609
  }
7610
+ if (fluidResolvers()?.[c]) {
7611
+ lenders.push(Lender.FLUID);
7612
+ }
7610
7613
  return lenders;
7611
7614
  };
7612
7615
  var filterLendersByProtocol = (allLenders, protocolList) => {
@@ -7615,8 +7618,9 @@ var filterLendersByProtocol = (allLenders, protocolList) => {
7615
7618
  }
7616
7619
  const hasMorpho = protocolList.includes(Lender.MORPHO_BLUE);
7617
7620
  const hasMoolah = protocolList.includes(Lender.LISTA_DAO);
7621
+ const hasFluid = protocolList.includes(Lender.FLUID);
7618
7622
  return allLenders.filter(
7619
- (lender) => protocolList.includes(lender) || hasMorpho && lender?.startsWith("MORPHO_BLUE") || hasMoolah && lender?.startsWith("LISTA_DAO")
7623
+ (lender) => protocolList.includes(lender) || hasMorpho && lender?.startsWith("MORPHO_BLUE") || hasMoolah && lender?.startsWith("LISTA_DAO") || hasFluid && lender?.startsWith("FLUID")
7620
7624
  );
7621
7625
  };
7622
7626
  var getAavesForChain = () => {
@@ -31477,6 +31481,88 @@ var siloV3Fetcher = {
31477
31481
  parse: parseSiloV3Results,
31478
31482
  getAbi: getSiloV3Abi
31479
31483
  };
31484
+ var FLUID_EEE_LOWER2 = "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee";
31485
+ var normalizeUnderlying2 = (addr) => addr === FLUID_EEE_LOWER2 ? zeroAddress : addr;
31486
+ function priceColInDebt(raw, colDec, debtDec) {
31487
+ return formatMorphoPrice(raw, debtDec, colDec + 9);
31488
+ }
31489
+ function getFluidCalls(chainId) {
31490
+ const resolvers = fluidResolvers()?.[chainId];
31491
+ if (!resolvers) return [];
31492
+ const call = {
31493
+ address: resolvers.vaultResolver,
31494
+ name: "getVaultsEntireData",
31495
+ params: []
31496
+ };
31497
+ return [
31498
+ {
31499
+ calls: [call],
31500
+ // Empty placeholder — populated per-vault inside `parse` from the
31501
+ // resolver response. Kept as an empty object to match the shape
31502
+ // other fetchers expose.
31503
+ meta: { vaults: [] },
31504
+ lender: Lender.FLUID
31505
+ }
31506
+ ];
31507
+ }
31508
+ function parseFluidResults(data, _meta, context) {
31509
+ const { chainId, usdPrices, tokenList } = context;
31510
+ const entries = [];
31511
+ const vaults = data[0];
31512
+ if (!Array.isArray(vaults) || vaults.length === 0) return entries;
31513
+ for (const vault of vaults) {
31514
+ try {
31515
+ if (vault.isSmartCol || vault.isSmartDebt) continue;
31516
+ const constants = vault.constantVariables;
31517
+ const configs = vault.configs;
31518
+ if (!constants || !configs) continue;
31519
+ const rawCol = (constants.supplyToken?.token0 ?? constants.supplyToken ?? "").toString().toLowerCase();
31520
+ const rawLoan = (constants.borrowToken?.token0 ?? constants.borrowToken ?? "").toString().toLowerCase();
31521
+ if (!rawCol || !rawLoan) continue;
31522
+ const collateral = normalizeUnderlying2(rawCol);
31523
+ const loan = normalizeUnderlying2(rawLoan);
31524
+ const colDec = tokenList?.[collateral]?.decimals ?? 18;
31525
+ const loanDec = tokenList?.[loan]?.decimals ?? 18;
31526
+ const rawPrice = configs.oraclePriceOperate?.toString() ?? "0";
31527
+ if (!rawPrice || rawPrice === "0") continue;
31528
+ const priceDebtPerCol = priceColInDebt(rawPrice, colDec, loanDec);
31529
+ if (!Number.isFinite(priceDebtPerCol) || priceDebtPerCol === 0) continue;
31530
+ const vaultId = Number(constants.vaultId ?? 0);
31531
+ const lenderKey = `${Lender.FLUID}_${vaultId}`;
31532
+ const loanOracleKey = tokenList?.[loan]?.assetGroup ?? `${chainId}-${loan}`;
31533
+ const loanUSD = usdPrices[loanOracleKey] ?? usdPrices[loan];
31534
+ if (!loanUSD) continue;
31535
+ entries.push({
31536
+ asset: loan,
31537
+ price: 1,
31538
+ priceUSD: loanUSD,
31539
+ marketUid: createMarketUid(chainId, lenderKey, loan),
31540
+ targetLender: lenderKey,
31541
+ description: "Fluid loan asset",
31542
+ staticBase: true,
31543
+ baseAsset: loan
31544
+ });
31545
+ entries.push({
31546
+ asset: collateral,
31547
+ price: priceDebtPerCol,
31548
+ priceUSD: priceDebtPerCol * loanUSD,
31549
+ marketUid: createMarketUid(chainId, lenderKey, collateral),
31550
+ targetLender: lenderKey,
31551
+ baseAsset: loan
31552
+ });
31553
+ } catch {
31554
+ }
31555
+ }
31556
+ return entries;
31557
+ }
31558
+ function getFluidAbi() {
31559
+ return FluidVaultResolverAbi;
31560
+ }
31561
+ var fluidFetcher = {
31562
+ getCalls: getFluidCalls,
31563
+ parse: parseFluidResults,
31564
+ getAbi: getFluidAbi
31565
+ };
31480
31566
 
31481
31567
  // src/prices/oracle-prices/fetchers/siloV2Graphql.ts
31482
31568
  async function fetchSiloV2GraphQLMarkets(chainId) {
@@ -31926,6 +32012,11 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
31926
32012
  () => siloV3Fetcher.getCalls(chainId),
31927
32013
  getCallsErrors
31928
32014
  ) : [];
32015
+ const fluidResults = isActive("fluid") ? safeGetCalls(
32016
+ "fluid",
32017
+ () => fluidFetcher.getCalls(chainId),
32018
+ getCallsErrors
32019
+ ) : [];
31929
32020
  const aaveGroup = buildGroup(
31930
32021
  "aave",
31931
32022
  aaveResults,
@@ -31980,6 +32071,12 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
31980
32071
  siloV3Fetcher.parse,
31981
32072
  getSiloV3Abi()
31982
32073
  );
32074
+ const fluidGroup = buildGroup(
32075
+ "fluid",
32076
+ fluidResults,
32077
+ fluidFetcher.parse,
32078
+ getFluidAbi()
32079
+ );
31983
32080
  const allGroups = [
31984
32081
  aaveGroup,
31985
32082
  compoundV2Group,
@@ -31989,7 +32086,8 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
31989
32086
  aaveV4Group,
31990
32087
  morphoGroup,
31991
32088
  siloV2Group,
31992
- siloV3Group
32089
+ siloV3Group,
32090
+ fluidGroup
31993
32091
  ];
31994
32092
  const totalCalls = allGroups.reduce((s, g) => s + g.calls.length, 0);
31995
32093
  if (totalCalls === 0 && !isActive("morpho")) {
@@ -32017,6 +32115,7 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
32017
32115
  listaData,
32018
32116
  eulerData,
32019
32117
  aaveV4Data,
32118
+ fluidData,
32020
32119
  morphoGqlEntries,
32021
32120
  siloV2GqlEntries,
32022
32121
  siloV3GqlEntries
@@ -32069,6 +32168,14 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
32069
32168
  allowFailure,
32070
32169
  rpcOverrides
32071
32170
  ),
32171
+ executeGroup(
32172
+ fluidGroup,
32173
+ chainId,
32174
+ chainBatchSize,
32175
+ retries,
32176
+ allowFailure,
32177
+ rpcOverrides
32178
+ ),
32072
32179
  morphoGqlPromise,
32073
32180
  siloV2GqlPromise,
32074
32181
  siloV3GqlPromise
@@ -32120,6 +32227,7 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
32120
32227
  { group: listaGroup, data: listaData },
32121
32228
  { group: eulerGroup, data: eulerData },
32122
32229
  { group: aaveV4Group, data: aaveV4Data },
32230
+ { group: fluidGroup, data: fluidData },
32123
32231
  ...siloV2GqlEntries != null ? [] : [{ group: siloV2Group, data: siloV2Data }],
32124
32232
  ...siloV3GqlEntries != null ? [] : [{ group: siloV3Group, data: siloV3Data }],
32125
32233
  ...useMorphoGql ? [] : [{ group: morphoGroup, data: morphoData }]
@@ -32206,6 +32314,7 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
32206
32314
  true,
32207
32315
  (t) => !!t.meta.baseAssetSource
32208
32316
  );
32317
+ parseTrackers(fluidGroup, fluidData.results, false);
32209
32318
  if (siloV2GqlEntries != null) {
32210
32319
  const diag2 = {
32211
32320
  lender: "SILO_V2 (GraphQL)",
@@ -32770,8 +32879,8 @@ var buildFluidFTokensCall = (chainId) => {
32770
32879
  };
32771
32880
 
32772
32881
  // src/vaults/fluid/publicCallParse.ts
32773
- var FLUID_EEE_LOWER2 = "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee";
32774
- var normalizeUnderlying2 = (addr) => addr === FLUID_EEE_LOWER2 ? zeroAddress : addr;
32882
+ var FLUID_EEE_LOWER3 = "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee";
32883
+ var normalizeUnderlying3 = (addr) => addr === FLUID_EEE_LOWER3 ? zeroAddress : addr;
32775
32884
  var FLUID_RATE_SCALE2 = 100;
32776
32885
  var scaleFluidRate2 = (raw) => {
32777
32886
  if (raw === void 0 || raw === null) return 0;
@@ -32793,7 +32902,7 @@ function parseFTokens(fTokens, chainId, prices, tokenList) {
32793
32902
  for (const ft of fTokens) {
32794
32903
  const rawAsset = (ft.asset ?? "").toString().toLowerCase();
32795
32904
  if (!rawAsset) continue;
32796
- const underlying = normalizeUnderlying2(rawAsset);
32905
+ const underlying = normalizeUnderlying3(rawAsset);
32797
32906
  const assetMeta = tokenList[underlying];
32798
32907
  const decimals = Number(ft.decimals ?? assetMeta?.decimals ?? 18);
32799
32908
  const totalAssetsFormatted = Number(