@1delta/margin-fetcher 0.0.240 → 0.0.244

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.
Files changed (56) hide show
  1. package/dist/{_esm-2UAQOYNJ.js → _esm-QP3LOJYU.js} +35 -35
  2. package/dist/_esm-QP3LOJYU.js.map +1 -0
  3. package/dist/ccip-SQXTDOS7.js +5 -0
  4. package/dist/{ccip-G7HDSZ4N.js.map → ccip-SQXTDOS7.js.map} +1 -1
  5. package/dist/{chunk-ZVIJSUIM.js → chunk-KQ6K6D2V.js} +75 -75
  6. package/dist/chunk-KQ6K6D2V.js.map +1 -0
  7. package/dist/index.js +572 -28
  8. package/dist/index.js.map +1 -1
  9. package/dist/lending/public-data/fetchLender.d.ts.map +1 -1
  10. package/dist/lending/public-data/gearbox/index.d.ts +3 -0
  11. package/dist/lending/public-data/gearbox/index.d.ts.map +1 -0
  12. package/dist/lending/public-data/gearbox/publicCallBuild.d.ts +17 -0
  13. package/dist/lending/public-data/gearbox/publicCallBuild.d.ts.map +1 -0
  14. package/dist/lending/public-data/gearbox/publicCallParse.d.ts +27 -0
  15. package/dist/lending/public-data/gearbox/publicCallParse.d.ts.map +1 -0
  16. package/dist/lending/public-data/silo-v2/convertPublic.d.ts.map +1 -1
  17. package/dist/lending/public-data/silo-v2/fetchPublic.d.ts +3 -0
  18. package/dist/lending/public-data/silo-v2/fetchPublic.d.ts.map +1 -1
  19. package/dist/lending/public-data/silo-v3/convertPublic.d.ts.map +1 -1
  20. package/dist/lending/user-data/abis.d.ts.map +1 -1
  21. package/dist/lending/user-data/fetch-balances/parse.d.ts.map +1 -1
  22. package/dist/lending/user-data/fetch-balances/prepare.d.ts.map +1 -1
  23. package/dist/lending/user-data/gearbox/index.d.ts +3 -0
  24. package/dist/lending/user-data/gearbox/index.d.ts.map +1 -0
  25. package/dist/lending/user-data/gearbox/userCallBuild.d.ts +19 -0
  26. package/dist/lending/user-data/gearbox/userCallBuild.d.ts.map +1 -0
  27. package/dist/lending/user-data/gearbox/userCallParse.d.ts +25 -0
  28. package/dist/lending/user-data/gearbox/userCallParse.d.ts.map +1 -0
  29. package/dist/prices/oracle-prices/fetchOraclePrices.d.ts.map +1 -1
  30. package/dist/prices/oracle-prices/fetchers/gearbox.d.ts +601 -0
  31. package/dist/prices/oracle-prices/fetchers/gearbox.d.ts.map +1 -0
  32. package/dist/prices/oracle-prices/fetchers/index.d.ts +1 -0
  33. package/dist/prices/oracle-prices/fetchers/index.d.ts.map +1 -1
  34. package/dist/prices/oracle-prices/fetchers/morpho.d.ts.map +1 -1
  35. package/dist/utils/index.d.ts +1 -1
  36. package/dist/utils/index.d.ts.map +1 -1
  37. package/dist/utils/marketName.d.ts.map +1 -1
  38. package/dist/vaults/gearbox/fetchPublic.d.ts +23 -0
  39. package/dist/vaults/gearbox/fetchPublic.d.ts.map +1 -0
  40. package/dist/vaults/gearbox/index.d.ts +5 -0
  41. package/dist/vaults/gearbox/index.d.ts.map +1 -0
  42. package/dist/vaults/gearbox/publicCallBuild.d.ts +14 -0
  43. package/dist/vaults/gearbox/publicCallBuild.d.ts.map +1 -0
  44. package/dist/vaults/gearbox/publicCallParse.d.ts +13 -0
  45. package/dist/vaults/gearbox/publicCallParse.d.ts.map +1 -0
  46. package/dist/vaults/gearbox/types.d.ts +61 -0
  47. package/dist/vaults/gearbox/types.d.ts.map +1 -0
  48. package/dist/vaults/index.d.ts +1 -0
  49. package/dist/vaults/index.d.ts.map +1 -1
  50. package/dist/yields/intrinsic/fetchers/stS.d.ts +3 -0
  51. package/dist/yields/intrinsic/fetchers/stS.d.ts.map +1 -0
  52. package/dist/yields/intrinsic/index.d.ts.map +1 -1
  53. package/package.json +6 -6
  54. package/dist/_esm-2UAQOYNJ.js.map +0 -1
  55. package/dist/ccip-G7HDSZ4N.js +0 -5
  56. package/dist/chunk-ZVIJSUIM.js.map +0 -1
package/dist/index.js CHANGED
@@ -1,11 +1,11 @@
1
- import { parseAbi, formatEther, BaseError, encodeFunctionData, formatUnits, decodeFunctionResult, decodeAbiParameters, AbiEncodingLengthMismatchError, concatHex, isAddress, InvalidAddressError, pad, stringToHex, boolToHex, integerRegex, numberToHex, bytesRegex, BytesSizeMismatchError, arrayRegex, UnsupportedPackedAbiType } from './chunk-ZVIJSUIM.js';
1
+ import { parseAbi, formatEther, BaseError, encodeFunctionData, formatUnits, decodeFunctionResult, decodeAbiParameters, AbiEncodingLengthMismatchError, concatHex, isAddress, InvalidAddressError, pad, stringToHex, boolToHex, integerRegex, numberToHex, bytesRegex, BytesSizeMismatchError, arrayRegex, UnsupportedPackedAbiType } from './chunk-KQ6K6D2V.js';
2
2
  import './chunk-BYTNVMX7.js';
3
3
  import './chunk-PR4QN5HX.js';
4
- import { Lender, isAaveType, isCompoundV3, isMultiMarket, isSiloV2Type, isSiloV3Type, isAaveV4Type, isInit, isMorphoType, isCompoundV2Type, isVenusType, isSumerType, AAVE_V3_LENDERS, AAVE_V2_LENDERS, isAaveV2Type, isAaveV32Type, isAaveV3Type, isEulerType, isFluid, isYLDR, isCompoundV3Type, isLista, isTectonicType, isBenqiType } from '@1delta/lender-registry';
4
+ import { Lender, isAaveType, isCompoundV3, isMultiMarket, isSiloV2Type, isSiloV3Type, isAaveV4Type, isInit, isMorphoType, isCompoundV2Type, isVenusType, isSumerType, AAVE_V3_LENDERS, AAVE_V2_LENDERS, isAaveV2Type, isAaveV32Type, isAaveV3Type, isEulerType, isFluid, isGearboxV3, isYLDR, isCompoundV3Type, isLista, isTectonicType, isBenqiType } from '@1delta/lender-registry';
5
5
  export { isAaveType, isAaveV2Type, isAaveV32Type, isAaveV3Type, isCompoundV3, isCompoundV3Type, isInit, isMorphoType, isMultiMarket, isYLDR } from '@1delta/lender-registry';
6
6
  import lodash from 'lodash';
7
7
  import { getEvmChain, getEvmClient, getEvmClientUniversal, multicallRetryUniversal } from '@1delta/providers';
8
- import { FluidLendingResolverAbi, MorphoLensAbi, AaveV4SpokeAbi, AaveV4OracleAbi, AaveV4HubAbi, FluidVaultResolverAbi, MorphoBlueAbi } from '@1delta/abis';
8
+ import { FluidLendingResolverAbi, MorphoLensAbi, AaveV4SpokeAbi, AaveV4OracleAbi, AaveV4HubAbi, FluidVaultResolverAbi, GearboxDataCompressorV3Abi, MorphoBlueAbi } from '@1delta/abis';
9
9
  export { MorphoLensAbi } from '@1delta/abis';
10
10
  import { prepareDebitDataMulticall, prepareLenderDebitMulticall, parseDebitDataResult, parseLenderDebitResult, getPermit2ContractAddress, getCompoundV3CometAddress as getCompoundV3CometAddress$1, getMorphoAddress, getAaveCollateralTokenAddress, getSiloHalfForUnderlying, InitMarginAddresses } from '@1delta/calldata-sdk';
11
11
  import { BALANCER_V2_FORKS, BALANCER_V3_FORKS, UNISWAP_V4_FORKS, isFlashLoanSourceExcluded, FLASH_LOAN_IDS } from '@1delta/dex-registry';
@@ -6283,7 +6283,8 @@ globalThis[GLOBAL_LENDER_DATA_KEY] = {
6283
6283
  siloMarketsV3: {},
6284
6284
  siloPeripheralsV3: {},
6285
6285
  fluidResolvers: {},
6286
- fluidVaults: {}
6286
+ fluidVaults: {},
6287
+ gearboxResolvers: {}
6287
6288
  };
6288
6289
  function getGlobalData2() {
6289
6290
  return globalThis[GLOBAL_LENDER_DATA_KEY];
@@ -6312,6 +6313,7 @@ var aaveV4Oracles = () => getGlobalData2()?.aaveV4Oracles;
6312
6313
  var siloMarkets = () => getGlobalData2()?.siloMarkets;
6313
6314
  var siloMarketsV3 = () => getGlobalData2()?.siloMarketsV3;
6314
6315
  var fluidResolvers = () => getGlobalData2()?.fluidResolvers;
6316
+ var gearboxResolvers = () => getGlobalData2()?.gearboxResolvers;
6315
6317
  function aaveV4SpokeLenderKey(spoke) {
6316
6318
  if (!spoke || !spoke.startsWith("0x") || spoke.length !== 42) {
6317
6319
  throw new Error(`aaveV4SpokeLenderKey: invalid spoke address ${spoke}`);
@@ -6363,6 +6365,14 @@ function getSiloV3MarketEntry(chainId, lenderKey) {
6363
6365
  (m) => m.siloConfig.toLowerCase() === parsed.siloConfigAddrLower
6364
6366
  );
6365
6367
  }
6368
+ function gearboxV3LenderKey(creditManager) {
6369
+ if (!creditManager || !creditManager.startsWith("0x") || creditManager.length !== 42) {
6370
+ throw new Error(
6371
+ `gearboxV3LenderKey: invalid creditManager address ${creditManager}`
6372
+ );
6373
+ }
6374
+ return `GEARBOX_V3_${creditManager.slice(2).toUpperCase()}`;
6375
+ }
6366
6376
  var getListUrl = (chainId) => `https://raw.githubusercontent.com/1delta-DAO/token-lists/main/${chainId}.json`;
6367
6377
  async function fetchTokenList(chainId) {
6368
6378
  const data = await fetch(getListUrl(chainId));
@@ -6407,6 +6417,7 @@ var LENDER_SHORT_NAMES = {
6407
6417
  [Lender.EULER_V2]: "Euler V2",
6408
6418
  [Lender.FLUID]: "Fluid",
6409
6419
  [Lender.FLUX_FINANCE]: "Flux",
6420
+ [Lender.GEARBOX_V3]: "Gearbox V3",
6410
6421
  [Lender.GRANARY]: "Granary",
6411
6422
  [Lender.HANA]: "Hana",
6412
6423
  [Lender.INIT]: "Init",
@@ -6416,7 +6427,7 @@ var LENDER_SHORT_NAMES = {
6416
6427
  [Lender.MERIDIAN]: "Meridian"
6417
6428
  };
6418
6429
  function formatUnderscoreString(input) {
6419
- const _in = input.replace("MORPHO_BLUE", "MB").replace(/^FLUID_/, "Fluid ");
6430
+ const _in = input.replace("MORPHO_BLUE", "MB").replace(/^FLUID_/, "Fluid ").replace(/^GEARBOX_V3_/, "Gearbox V3 ");
6420
6431
  return _in.split("_").map((word, index) => {
6421
6432
  if (index === 0) {
6422
6433
  return word.charAt(0).toUpperCase() + word.slice(1).toLowerCase();
@@ -6426,6 +6437,7 @@ function formatUnderscoreString(input) {
6426
6437
  }
6427
6438
  function lenderShortName(lender) {
6428
6439
  if (lender?.startsWith("FLUID")) return "Fluid";
6440
+ if (lender?.startsWith("GEARBOX_V3")) return "Gearbox V3";
6429
6441
  return LENDER_SHORT_NAMES[lender] ?? formatUnderscoreString(lender);
6430
6442
  }
6431
6443
 
@@ -7610,6 +7622,9 @@ var getLendersForChain = (c) => {
7610
7622
  if (fluidResolvers()?.[c]) {
7611
7623
  lenders.push(Lender.FLUID);
7612
7624
  }
7625
+ if (gearboxResolvers()?.[c]) {
7626
+ lenders.push(Lender.GEARBOX_V3);
7627
+ }
7613
7628
  return lenders;
7614
7629
  };
7615
7630
  var filterLendersByProtocol = (allLenders, protocolList) => {
@@ -7619,8 +7634,9 @@ var filterLendersByProtocol = (allLenders, protocolList) => {
7619
7634
  const hasMorpho = protocolList.includes(Lender.MORPHO_BLUE);
7620
7635
  const hasMoolah = protocolList.includes(Lender.LISTA_DAO);
7621
7636
  const hasFluid = protocolList.includes(Lender.FLUID);
7637
+ const hasGearboxV3 = protocolList.includes(Lender.GEARBOX_V3);
7622
7638
  return allLenders.filter(
7623
- (lender) => protocolList.includes(lender) || hasMorpho && lender?.startsWith("MORPHO_BLUE") || hasMoolah && lender?.startsWith("LISTA_DAO") || hasFluid && lender?.startsWith("FLUID")
7639
+ (lender) => protocolList.includes(lender) || hasMorpho && lender?.startsWith("MORPHO_BLUE") || hasMoolah && lender?.startsWith("LISTA_DAO") || hasFluid && lender?.startsWith("FLUID") || hasGearboxV3 && lender?.startsWith("GEARBOX_V3")
7624
7640
  );
7625
7641
  };
7626
7642
  var getAavesForChain = () => {
@@ -7997,7 +8013,7 @@ var buildCompoundV3StyleLenderReserveCall = (chainId, lender) => {
7997
8013
  return calls;
7998
8014
  };
7999
8015
 
8000
- // ../../node_modules/.pnpm/viem@2.45.3_bufferutil@4.1.0_typescript@5.9.3_utf-8-validate@5.0.10_zod@4.3.6/node_modules/viem/_esm/utils/abi/encodePacked.js
8016
+ // ../../node_modules/.pnpm/viem@2.45.3_bufferutil@4.1.0_typescript@5.9.3_utf-8-validate@6.0.6_zod@4.3.6/node_modules/viem/_esm/utils/abi/encodePacked.js
8001
8017
  function encodePacked(types, values) {
8002
8018
  if (types.length !== values.length)
8003
8019
  throw new AbiEncodingLengthMismatchError({
@@ -8060,7 +8076,7 @@ function encode(type, value, isArray2 = false) {
8060
8076
  throw new UnsupportedPackedAbiType(type);
8061
8077
  }
8062
8078
 
8063
- // ../../node_modules/.pnpm/viem@2.45.3_bufferutil@4.1.0_typescript@5.9.3_utf-8-validate@5.0.10_zod@4.3.6/node_modules/viem/_esm/errors/unit.js
8079
+ // ../../node_modules/.pnpm/viem@2.45.3_bufferutil@4.1.0_typescript@5.9.3_utf-8-validate@6.0.6_zod@4.3.6/node_modules/viem/_esm/errors/unit.js
8064
8080
  var InvalidDecimalNumberError = class extends BaseError {
8065
8081
  constructor({ value }) {
8066
8082
  super(`Number \`${value}\` is not a valid decimal number.`, {
@@ -8069,7 +8085,7 @@ var InvalidDecimalNumberError = class extends BaseError {
8069
8085
  }
8070
8086
  };
8071
8087
 
8072
- // ../../node_modules/.pnpm/viem@2.45.3_bufferutil@4.1.0_typescript@5.9.3_utf-8-validate@5.0.10_zod@4.3.6/node_modules/viem/_esm/utils/unit/parseUnits.js
8088
+ // ../../node_modules/.pnpm/viem@2.45.3_bufferutil@4.1.0_typescript@5.9.3_utf-8-validate@6.0.6_zod@4.3.6/node_modules/viem/_esm/utils/unit/parseUnits.js
8073
8089
  function parseUnits(value, decimals) {
8074
8090
  if (!/^(-?)([0-9]*)\.?([0-9]*)$/.test(value))
8075
8091
  throw new InvalidDecimalNumberError({ value });
@@ -8104,7 +8120,7 @@ function parseUnits(value, decimals) {
8104
8120
  return BigInt(`${negative ? "-" : ""}${integer}${fraction}`);
8105
8121
  }
8106
8122
 
8107
- // ../../node_modules/.pnpm/viem@2.45.3_bufferutil@4.1.0_typescript@5.9.3_utf-8-validate@5.0.10_zod@4.3.6/node_modules/viem/_esm/constants/address.js
8123
+ // ../../node_modules/.pnpm/viem@2.45.3_bufferutil@4.1.0_typescript@5.9.3_utf-8-validate@6.0.6_zod@4.3.6/node_modules/viem/_esm/constants/address.js
8108
8124
  var zeroAddress = "0x0000000000000000000000000000000000000000";
8109
8125
 
8110
8126
  // src/utils/parsing.ts
@@ -18867,7 +18883,7 @@ var getSiloV2ReservesDataConverter = (lender, chainId, prices, additionalYields,
18867
18883
  { self: market.silo0, other: market.silo1 },
18868
18884
  { self: market.silo1, other: market.silo0 }
18869
18885
  ];
18870
- const toBigInt8 = (v) => {
18886
+ const toBigInt9 = (v) => {
18871
18887
  if (v === void 0 || v === null || v === "0x") return 0n;
18872
18888
  if (typeof v === "bigint") return v;
18873
18889
  try {
@@ -18879,8 +18895,8 @@ var getSiloV2ReservesDataConverter = (lender, chainId, prices, additionalYields,
18879
18895
  for (let s = 0; s < 2; s++) {
18880
18896
  const { self, other } = sides[s];
18881
18897
  const slot = s * SILO_V2_CALLS_PER_SIDE;
18882
- const totalAssetsRaw = toBigInt8(data[slot]);
18883
- const debtAssetsRaw = toBigInt8(data[slot + 1]);
18898
+ const totalAssetsRaw = toBigInt9(data[slot]);
18899
+ const debtAssetsRaw = toBigInt9(data[slot + 1]);
18884
18900
  const irmConfigRaw = data[slot + 2];
18885
18901
  const decimals = self.decimals;
18886
18902
  const totalDeposits = Number(formatUnits(totalAssetsRaw, decimals));
@@ -19035,7 +19051,7 @@ var getSiloV3ReservesDataConverter = (lender, chainId, prices, additionalYields,
19035
19051
  { self: market.silo0, other: market.silo1 },
19036
19052
  { self: market.silo1, other: market.silo0 }
19037
19053
  ];
19038
- const toBigInt8 = (v) => {
19054
+ const toBigInt9 = (v) => {
19039
19055
  if (v === void 0 || v === null || v === "0x") return 0n;
19040
19056
  if (typeof v === "bigint") return v;
19041
19057
  try {
@@ -19047,8 +19063,8 @@ var getSiloV3ReservesDataConverter = (lender, chainId, prices, additionalYields,
19047
19063
  for (let s = 0; s < 2; s++) {
19048
19064
  const { self, other } = sides[s];
19049
19065
  const slot = s * SILO_V3_CALLS_PER_SIDE;
19050
- const totalAssetsRaw = toBigInt8(data[slot]);
19051
- const debtAssetsRaw = toBigInt8(data[slot + 1]);
19066
+ const totalAssetsRaw = toBigInt9(data[slot]);
19067
+ const debtAssetsRaw = toBigInt9(data[slot + 1]);
19052
19068
  const irmConfigRaw = data[slot + 2];
19053
19069
  const decimals = self.decimals;
19054
19070
  const totalDeposits = Number(formatUnits(totalAssetsRaw, decimals));
@@ -19354,6 +19370,203 @@ function parseVault(vault, chainId, prices, additionalYields, tokenList) {
19354
19370
  }
19355
19371
  };
19356
19372
  }
19373
+
19374
+ // src/lending/public-data/gearbox/publicCallBuild.ts
19375
+ var buildGearboxCall = (chainId, _lender) => {
19376
+ const resolvers = gearboxResolvers()?.[chainId];
19377
+ if (!resolvers?.dataCompressor) return [];
19378
+ return [
19379
+ {
19380
+ address: resolvers.dataCompressor,
19381
+ name: "getPoolsV3List",
19382
+ params: []
19383
+ },
19384
+ {
19385
+ address: resolvers.dataCompressor,
19386
+ name: "getCreditManagersV3List",
19387
+ params: []
19388
+ }
19389
+ ];
19390
+ };
19391
+
19392
+ // src/lending/public-data/gearbox/publicCallParse.ts
19393
+ var RAY_TO_PERCENT = 1e25;
19394
+ var scaleGearboxRate = (raw) => {
19395
+ if (raw === void 0 || raw === null) return 0;
19396
+ return Number(raw) / RAY_TO_PERCENT;
19397
+ };
19398
+ var getGearboxV3PublicDataConverter = (_lender, chainId, prices, additionalYields, tokenList = {}) => {
19399
+ const expectedNumberOfCalls = 2;
19400
+ return [
19401
+ (data) => {
19402
+ if (data.length !== expectedNumberOfCalls) return void 0;
19403
+ const [poolsData, cmsData] = data;
19404
+ const out = {};
19405
+ const poolByAddr = {};
19406
+ for (const pool of poolsData ?? []) {
19407
+ const addr = (pool.addr ?? "").toString().toLowerCase();
19408
+ if (!addr) continue;
19409
+ poolByAddr[addr] = pool;
19410
+ }
19411
+ for (const cm of cmsData ?? []) {
19412
+ const cmAddr = (cm.addr ?? "").toString().toLowerCase();
19413
+ if (!cmAddr) continue;
19414
+ const poolAddr = (cm.pool ?? "").toString().toLowerCase();
19415
+ const pool = poolByAddr[poolAddr];
19416
+ if (!pool) continue;
19417
+ if (pool.isPaused) continue;
19418
+ const rawPoolUnderlying = (cm.underlying ?? pool.underlying ?? "").toString().toLowerCase();
19419
+ if (!rawPoolUnderlying) continue;
19420
+ const underlying = rawPoolUnderlying;
19421
+ const underlyingMeta = tokenList[underlying];
19422
+ const underlyingDecimals = Number(underlyingMeta?.decimals ?? 18);
19423
+ const supplyRate = scaleGearboxRate(pool.supplyRate);
19424
+ const borrowRate = scaleGearboxRate(
19425
+ cm.baseBorrowRate ?? pool.baseInterestRate
19426
+ );
19427
+ const underlyingPriceKey = toOracleKey(underlyingMeta?.assetGroup) ?? toGenericPriceKey(underlying, chainId);
19428
+ const underlyingPrice = prices[underlyingPriceKey] ?? 0;
19429
+ let lender;
19430
+ try {
19431
+ lender = gearboxV3LenderKey(cmAddr);
19432
+ } catch {
19433
+ continue;
19434
+ }
19435
+ const availableToBorrow = Number(
19436
+ parseRawAmount(
19437
+ cm.availableToBorrow?.toString(),
19438
+ underlyingDecimals
19439
+ )
19440
+ );
19441
+ const totalDebtCm = Number(
19442
+ parseRawAmount(cm.totalDebt?.toString(), underlyingDecimals)
19443
+ );
19444
+ const data2 = {};
19445
+ const loanMarketUid = createMarketUid(chainId, lender, underlying);
19446
+ data2[loanMarketUid] = {
19447
+ marketUid: loanMarketUid,
19448
+ name: "Loan " + (underlyingMeta?.symbol ?? pool.symbol ?? ""),
19449
+ poolId: underlying,
19450
+ underlying,
19451
+ asset: underlyingMeta,
19452
+ totalDeposits: 0,
19453
+ totalDebtStable: 0,
19454
+ totalDebt: totalDebtCm,
19455
+ totalLiquidity: availableToBorrow,
19456
+ borrowLiquidity: availableToBorrow,
19457
+ totalDepositsUSD: 0,
19458
+ totalDebtStableUSD: 0,
19459
+ totalDebtUSD: totalDebtCm * underlyingPrice,
19460
+ totalLiquidityUSD: availableToBorrow * underlyingPrice,
19461
+ borrowLiquidityUSD: availableToBorrow * underlyingPrice,
19462
+ utilization: 0,
19463
+ depositRate: supplyRate,
19464
+ variableBorrowRate: borrowRate,
19465
+ stableBorrowRate: 0,
19466
+ intrinsicYield: additionalYields?.intrinsicYields?.[underlyingPriceKey] ?? 0,
19467
+ rewards: [],
19468
+ decimals: underlyingDecimals,
19469
+ config: {
19470
+ "0": {
19471
+ category: 0,
19472
+ borrowCollateralFactor: 0,
19473
+ collateralFactor: 0,
19474
+ borrowFactor: 1,
19475
+ collateralDisabled: true,
19476
+ debtDisabled: false
19477
+ }
19478
+ },
19479
+ liquidationBonus: 0,
19480
+ collateralActive: false,
19481
+ borrowingEnabled: true,
19482
+ depositsEnabled: false,
19483
+ hasStable: false,
19484
+ isActive: true,
19485
+ isFrozen: false
19486
+ };
19487
+ const collateralTokens = Array.isArray(cm.collateralTokens) ? cm.collateralTokens : [];
19488
+ const liquidationThresholds = Array.isArray(
19489
+ cm.liquidationThresholds
19490
+ ) ? cm.liquidationThresholds : [];
19491
+ for (let i = 0; i < collateralTokens.length; i++) {
19492
+ const rawToken = (collateralTokens[i] ?? "").toString().toLowerCase();
19493
+ if (!rawToken) continue;
19494
+ const token = rawToken;
19495
+ const ltRaw = Number(liquidationThresholds[i] ?? 0);
19496
+ const lt = ltRaw / BPS;
19497
+ if (lt <= 0) continue;
19498
+ const ctMeta = tokenList[token];
19499
+ const ctDecimals = Number(ctMeta?.decimals ?? 18);
19500
+ const ctPriceKey = toOracleKey(ctMeta?.assetGroup) ?? toGenericPriceKey(token, chainId);
19501
+ const colMarketUid = createMarketUid(chainId, lender, token);
19502
+ if (colMarketUid === loanMarketUid) continue;
19503
+ data2[colMarketUid] = {
19504
+ marketUid: colMarketUid,
19505
+ name: "Collateral " + (ctMeta?.symbol ?? ""),
19506
+ poolId: token,
19507
+ underlying: token,
19508
+ asset: ctMeta,
19509
+ totalDeposits: 0,
19510
+ totalDebtStable: 0,
19511
+ totalDebt: 0,
19512
+ totalLiquidity: 0,
19513
+ borrowLiquidity: 0,
19514
+ totalDepositsUSD: 0,
19515
+ totalDebtStableUSD: 0,
19516
+ totalDebtUSD: 0,
19517
+ totalLiquidityUSD: 0,
19518
+ borrowLiquidityUSD: 0,
19519
+ utilization: 0,
19520
+ depositRate: 0,
19521
+ variableBorrowRate: 0,
19522
+ stableBorrowRate: 0,
19523
+ intrinsicYield: additionalYields?.intrinsicYields?.[ctPriceKey] ?? 0,
19524
+ rewards: [],
19525
+ decimals: ctDecimals,
19526
+ config: {
19527
+ "0": {
19528
+ category: 0,
19529
+ borrowCollateralFactor: lt,
19530
+ collateralFactor: lt,
19531
+ borrowFactor: 1,
19532
+ collateralDisabled: false,
19533
+ debtDisabled: true
19534
+ }
19535
+ },
19536
+ liquidationBonus: 0,
19537
+ collateralActive: true,
19538
+ borrowingEnabled: false,
19539
+ depositsEnabled: false,
19540
+ hasStable: false,
19541
+ isActive: true,
19542
+ isFrozen: false
19543
+ };
19544
+ }
19545
+ out[lender] = {
19546
+ data: data2,
19547
+ params: {
19548
+ creditManager: {
19549
+ lender,
19550
+ creditManager: cmAddr,
19551
+ creditFacade: (cm.creditFacade ?? "").toString().toLowerCase(),
19552
+ pool: poolAddr,
19553
+ underlying,
19554
+ underlyingDecimals,
19555
+ minDebt: cm.minDebt?.toString() ?? "0",
19556
+ maxDebt: cm.maxDebt?.toString() ?? "0",
19557
+ degenNFT: (cm.degenNFT ?? zeroAddress).toString().toLowerCase(),
19558
+ forbiddenTokenMask: cm.forbiddenTokenMask?.toString() ?? "0",
19559
+ isDegenMode: !!cm.isDegenMode
19560
+ }
19561
+ },
19562
+ chainId
19563
+ };
19564
+ }
19565
+ return out;
19566
+ },
19567
+ expectedNumberOfCalls
19568
+ ];
19569
+ };
19357
19570
  function getMorphoTypeMarketConverter(lender, chainId, prices, additionalYields, tokenList = {}, marketsOverride) {
19358
19571
  if (lender.startsWith("LISTA_DAO"))
19359
19572
  return getListaMarketDataConverter(
@@ -19391,6 +19604,7 @@ function buildLenderCall(chainId, lender) {
19391
19604
  if (isSiloV2Type(lender)) return buildSiloV2LenderReserveCall(chainId, lender);
19392
19605
  if (isSiloV3Type(lender)) return buildSiloV3LenderReserveCall(chainId, lender);
19393
19606
  if (isFluid(lender)) return buildFluidCall(chainId);
19607
+ if (isGearboxV3(lender)) return buildGearboxCall(chainId);
19394
19608
  return [];
19395
19609
  }
19396
19610
  function getLenderDataConverter(lender, chainId, prices, additionalYields, tokenList = {}) {
@@ -19483,6 +19697,14 @@ function getLenderDataConverter(lender, chainId, prices, additionalYields, token
19483
19697
  additionalYields,
19484
19698
  tokenList
19485
19699
  );
19700
+ if (isGearboxV3(lender))
19701
+ return getGearboxV3PublicDataConverter(
19702
+ lender,
19703
+ chainId,
19704
+ prices,
19705
+ additionalYields,
19706
+ tokenList
19707
+ );
19486
19708
  return [() => null, 0];
19487
19709
  }
19488
19710
  var getAbi = (lender) => {
@@ -19509,6 +19731,8 @@ var getAbi = (lender) => {
19509
19731
  return [...SiloAbi, ...SiloLensAbi, ...InterestRateModelV2Abi];
19510
19732
  if (isFluid(lender))
19511
19733
  return [...FluidVaultResolverAbi];
19734
+ if (isGearboxV3(lender))
19735
+ return [...GearboxDataCompressorV3Abi];
19512
19736
  if (isSumerType(lender)) return [...SumerLensAbi, ...SumerComptrollerAbi];
19513
19737
  if (lender === Lender.TAKARA) return [...TakaraMarketStateAbi];
19514
19738
  if (isCompoundV2Type(lender)) return VenusLensAbi;
@@ -19613,6 +19837,9 @@ query GetSilos {
19613
19837
  borrowedUsd
19614
19838
  liquidityUsd
19615
19839
  utilization
19840
+ collateralAssetsSupply
19841
+ collateralAssetsSupplyUsd
19842
+ liquidity
19616
19843
  solvencyOracleAddress
19617
19844
  maxLtvOracleAddress
19618
19845
  interestRateModelId
@@ -19651,6 +19878,9 @@ query GetSilos {
19651
19878
  borrowedUsd
19652
19879
  liquidityUsd
19653
19880
  utilization
19881
+ collateralAssetsSupply
19882
+ collateralAssetsSupplyUsd
19883
+ liquidity
19654
19884
  solvencyOracleAddress
19655
19885
  maxLtvOracleAddress
19656
19886
  interestRateModelId
@@ -19781,18 +20011,18 @@ function convertSiloMarketsToPublicResponse(apiItems, chainId, prices, additiona
19781
20011
  for (const { api, self, other } of sides) {
19782
20012
  const decimals = api.inputToken?.decimals ?? self.decimals;
19783
20013
  const tokenAddrLc = (api.inputTokenId ?? self.token).toLowerCase();
19784
- const totalDeposits = safeNumber(api.supply);
20014
+ const totalDeposits = api.collateralAssetsSupply != null ? safeNumber(api.collateralAssetsSupply) : safeNumber(api.supply);
19785
20015
  const totalDebt = safeNumber(api.borrowed);
19786
- const totalLiquidity = totalDeposits - totalDebt;
19787
- const utilization = totalDeposits > 0 ? totalDebt / totalDeposits : safeNumber(api.utilization);
20016
+ const totalLiquidity = api.liquidity != null ? safeNumber(api.liquidity) : Math.max(totalDeposits - totalDebt, 0);
20017
+ const utilization = api.utilization != null ? safeNumber(api.utilization) : totalDeposits > 0 ? totalDebt / totalDeposits : 0;
19788
20018
  const variableBorrowRatePct = safeNumber(api.borrowRate);
19789
20019
  const depositRatePct = safeNumber(api.depositRate);
19790
20020
  const assetMeta = tokenList[tokenAddrLc];
19791
20021
  const oracleKey = toOracleKey(assetMeta?.assetGroup ?? null) || toGenericPriceKey(tokenAddrLc, chainId);
19792
20022
  const fallbackPrice = prices[oracleKey] ?? 0;
19793
- const totalDepositsUSD = api.supplyUsd != null && api.supplyUsd > 0 ? api.supplyUsd : totalDeposits * fallbackPrice;
20023
+ const totalDepositsUSD = api.collateralAssetsSupplyUsd != null && api.collateralAssetsSupplyUsd > 0 ? api.collateralAssetsSupplyUsd : api.supplyUsd != null && api.supplyUsd > 0 ? api.supplyUsd : totalDeposits * fallbackPrice;
19794
20024
  const totalDebtUSD = api.borrowedUsd != null && api.borrowedUsd > 0 ? api.borrowedUsd : totalDebt * fallbackPrice;
19795
- const totalLiquidityUSD = Math.max(totalDepositsUSD - totalDebtUSD, 0);
20025
+ const totalLiquidityUSD = api.liquidityUsd != null && api.liquidityUsd > 0 ? api.liquidityUsd : Math.max(totalDepositsUSD - totalDebtUSD, 0);
19796
20026
  const otherApi = sides[0].api === api ? apiSide1 : apiSide0;
19797
20027
  const selfLt = bigintToLtv(api.lt ?? self.lt);
19798
20028
  const selfMaxLtv = bigintToLtv(api.maxLtv ?? self.maxLtv);
@@ -19917,18 +20147,18 @@ function convertSiloV3MarketsToPublicResponse(apiItems, chainId, prices, additio
19917
20147
  for (const { api, self, other } of sides) {
19918
20148
  const decimals = api.inputToken?.decimals ?? self.decimals;
19919
20149
  const tokenAddrLc = (api.inputTokenId ?? self.token).toLowerCase();
19920
- const totalDeposits = safeNumber2(api.supply);
20150
+ const totalDeposits = api.collateralAssetsSupply != null ? safeNumber2(api.collateralAssetsSupply) : safeNumber2(api.supply);
19921
20151
  const totalDebt = safeNumber2(api.borrowed);
19922
- const totalLiquidity = totalDeposits - totalDebt;
19923
- const utilization = totalDeposits > 0 ? totalDebt / totalDeposits : safeNumber2(api.utilization);
20152
+ const totalLiquidity = api.liquidity != null ? safeNumber2(api.liquidity) : Math.max(totalDeposits - totalDebt, 0);
20153
+ const utilization = api.utilization != null ? safeNumber2(api.utilization) : totalDeposits > 0 ? totalDebt / totalDeposits : 0;
19924
20154
  const variableBorrowRatePct = safeNumber2(api.borrowRate);
19925
20155
  const depositRatePct = safeNumber2(api.depositRate);
19926
20156
  const assetMeta = tokenList[tokenAddrLc];
19927
20157
  const oracleKey = toOracleKey(assetMeta?.assetGroup ?? null) || toGenericPriceKey(tokenAddrLc, chainId);
19928
20158
  const fallbackPrice = prices[oracleKey] ?? 0;
19929
- const totalDepositsUSD = api.supplyUsd != null && api.supplyUsd > 0 ? api.supplyUsd : totalDeposits * fallbackPrice;
20159
+ const totalDepositsUSD = api.collateralAssetsSupplyUsd != null && api.collateralAssetsSupplyUsd > 0 ? api.collateralAssetsSupplyUsd : api.supplyUsd != null && api.supplyUsd > 0 ? api.supplyUsd : totalDeposits * fallbackPrice;
19930
20160
  const totalDebtUSD = api.borrowedUsd != null && api.borrowedUsd > 0 ? api.borrowedUsd : totalDebt * fallbackPrice;
19931
- const totalLiquidityUSD = Math.max(totalDepositsUSD - totalDebtUSD, 0);
20161
+ const totalLiquidityUSD = api.liquidityUsd != null && api.liquidityUsd > 0 ? api.liquidityUsd : Math.max(totalDepositsUSD - totalDebtUSD, 0);
19932
20162
  const otherApi = sides[0].api === api ? apiSide1 : apiSide0;
19933
20163
  const selfLt = bigintToLtv2(api.lt ?? self.lt);
19934
20164
  const selfMaxLtv = bigintToLtv2(api.maxLtv ?? self.maxLtv);
@@ -20735,6 +20965,22 @@ var buildFluidUserCall = (chainId, _lender, account) => {
20735
20965
  ];
20736
20966
  };
20737
20967
 
20968
+ // src/lending/user-data/gearbox/userCallBuild.ts
20969
+ var GEARBOX_V3_USER_CALL_COUNT = 1;
20970
+ var buildGearboxV3UserCall = (chainId, _lender, account) => {
20971
+ const resolvers = gearboxResolvers()?.[chainId];
20972
+ if (!resolvers?.dataCompressor) return [];
20973
+ return [
20974
+ {
20975
+ address: resolvers.dataCompressor,
20976
+ name: "getCreditAccountsByBorrower",
20977
+ // Second arg is `PriceOnDemand[] priceUpdates` — empty means
20978
+ // "use the current on-chain feed quotes for healthFactor".
20979
+ params: [account, []]
20980
+ }
20981
+ ];
20982
+ };
20983
+
20738
20984
  // src/lending/user-data/fetch-balances/prepare.ts
20739
20985
  async function buildUserCall(chainId, lender, account, params) {
20740
20986
  if (isAaveV4Type(lender)) return buildAaveV4UserCall(chainId, lender, account);
@@ -20755,6 +21001,8 @@ async function buildUserCall(chainId, lender, account, params) {
20755
21001
  return buildCompoundV2UserCall(chainId, lender, account);
20756
21002
  if (isFluid(lender))
20757
21003
  return buildFluidUserCall(chainId, lender, account);
21004
+ if (isGearboxV3(lender))
21005
+ return buildGearboxV3UserCall(chainId, lender, account);
20758
21006
  return [];
20759
21007
  }
20760
21008
  function organizeUserQueries(queries) {
@@ -22618,6 +22866,169 @@ var getFluidUserDataConverter = (lender, chainId, account, meta) => {
22618
22866
  ];
22619
22867
  };
22620
22868
 
22869
+ // src/lending/user-data/gearbox/userCallParse.ts
22870
+ function toBigInt8(v) {
22871
+ if (v === void 0 || v === null || v === "0x") return 0n;
22872
+ if (typeof v === "bigint") return v;
22873
+ try {
22874
+ return BigInt(v);
22875
+ } catch {
22876
+ return 0n;
22877
+ }
22878
+ }
22879
+ var getGearboxV3UserDataConverter = (_lender, chainId, account, meta) => {
22880
+ return [
22881
+ (data) => {
22882
+ if (!data || data.length !== GEARBOX_V3_USER_CALL_COUNT) return void 0;
22883
+ const creditAccounts = data[0];
22884
+ if (!Array.isArray(creditAccounts) || creditAccounts.length === 0)
22885
+ return void 0;
22886
+ const perCM = /* @__PURE__ */ new Map();
22887
+ for (const ca of creditAccounts) {
22888
+ if (!ca?.isSuccessful) continue;
22889
+ const cm = (ca.creditManager ?? "").toString().toLowerCase();
22890
+ if (!cm) continue;
22891
+ if (!perCM.has(cm)) perCM.set(cm, []);
22892
+ perCM.get(cm).push(ca);
22893
+ }
22894
+ if (perCM.size === 0) return void 0;
22895
+ const out = {};
22896
+ for (const [cmAddr, accounts] of perCM) {
22897
+ let lenderKey;
22898
+ try {
22899
+ lenderKey = gearboxV3LenderKey(cmAddr);
22900
+ } catch {
22901
+ continue;
22902
+ }
22903
+ const metaMap = meta?.[lenderKey];
22904
+ if (!metaMap) continue;
22905
+ const firstCa = accounts[0];
22906
+ const rawUnderlying = (firstCa.underlying ?? "").toString().toLowerCase();
22907
+ const underlying = rawUnderlying;
22908
+ const loanMarketUid = createMarketUid(chainId, lenderKey, underlying);
22909
+ const loanMeta = metaMap[loanMarketUid];
22910
+ const loanDec = loanMeta?.asset?.decimals ?? 18;
22911
+ const loanDisplayPrice = loanMeta ? getDisplayPrice(loanMeta) : 0;
22912
+ const loanOraclePrice = loanMeta ? getOraclePrice(loanMeta) : 0;
22913
+ const loanPriceHist = loanMeta?.price?.priceUsd24h ?? loanDisplayPrice;
22914
+ const lendingPositions = {};
22915
+ const modes = {};
22916
+ const histData = {};
22917
+ for (const ca of accounts) {
22918
+ const caAddress = (ca.addr ?? "").toString().toLowerCase();
22919
+ if (!caAddress) continue;
22920
+ const debtRaw = toBigInt8(ca.debt);
22921
+ const balances = Array.isArray(ca.balances) ? ca.balances : [];
22922
+ const hasAnyBalance = balances.some(
22923
+ (b) => toBigInt8(b?.balance) > 0n
22924
+ );
22925
+ if (debtRaw === 0n && !hasAnyBalance) continue;
22926
+ modes[caAddress] = 0;
22927
+ const posData = {};
22928
+ let totalDepositsUSD = 0;
22929
+ for (const bal of balances) {
22930
+ const rawToken = (bal?.token ?? "").toString().toLowerCase();
22931
+ if (!rawToken) continue;
22932
+ const token = rawToken;
22933
+ const balRaw = toBigInt8(bal.balance);
22934
+ if (balRaw === 0n) continue;
22935
+ const colMarketUid = createMarketUid(chainId, lenderKey, token);
22936
+ const colMeta = metaMap[colMarketUid];
22937
+ const colDec = colMeta?.asset?.decimals ?? 18;
22938
+ const colDisplayPrice = colMeta ? getDisplayPrice(colMeta) : 0;
22939
+ const colOraclePrice = colMeta ? getOraclePrice(colMeta) : 0;
22940
+ const depositsStr = parseRawAmount(balRaw.toString(), colDec);
22941
+ const depositsNum = Number(depositsStr);
22942
+ const depositsUSD = depositsNum * colDisplayPrice;
22943
+ const depositsUSDOracle = depositsNum * colOraclePrice;
22944
+ totalDepositsUSD += depositsUSD;
22945
+ if (posData[colMarketUid]) {
22946
+ const existing = posData[colMarketUid];
22947
+ const prevDepositsNum = Number(existing.deposits ?? 0);
22948
+ const combinedDeposits = (prevDepositsNum + depositsNum).toString();
22949
+ posData[colMarketUid] = {
22950
+ ...existing,
22951
+ deposits: combinedDeposits,
22952
+ depositsUSD: existing.depositsUSD + depositsUSD,
22953
+ depositsUSDOracle: existing.depositsUSDOracle + depositsUSDOracle,
22954
+ collateralEnabled: existing.collateralEnabled || !!bal?.isQuoted
22955
+ };
22956
+ } else {
22957
+ posData[colMarketUid] = {
22958
+ marketUid: colMarketUid,
22959
+ underlying: token,
22960
+ deposits: depositsStr,
22961
+ debt: "0",
22962
+ debtStable: "0",
22963
+ depositsUSD,
22964
+ debtUSD: 0,
22965
+ debtStableUSD: 0,
22966
+ depositsUSDOracle,
22967
+ debtUSDOracle: 0,
22968
+ debtStableUSDOracle: 0,
22969
+ stableBorrowRate: "0",
22970
+ collateralEnabled: !!bal?.isQuoted,
22971
+ claimableRewards: 0
22972
+ };
22973
+ }
22974
+ }
22975
+ const debtStr = parseRawAmount(debtRaw.toString(), loanDec);
22976
+ const debtNum = Number(debtStr);
22977
+ const debtUSD = debtNum * loanDisplayPrice;
22978
+ const debtUSDOracle = debtNum * loanOraclePrice;
22979
+ if (posData[loanMarketUid]) {
22980
+ const existing = posData[loanMarketUid];
22981
+ posData[loanMarketUid] = {
22982
+ ...existing,
22983
+ debt: debtStr,
22984
+ debtUSD,
22985
+ debtUSDOracle
22986
+ };
22987
+ } else {
22988
+ posData[loanMarketUid] = {
22989
+ marketUid: loanMarketUid,
22990
+ underlying,
22991
+ deposits: "0",
22992
+ debt: debtStr,
22993
+ debtStable: "0",
22994
+ depositsUSD: 0,
22995
+ debtUSD,
22996
+ debtStableUSD: 0,
22997
+ depositsUSDOracle: 0,
22998
+ debtUSDOracle,
22999
+ debtStableUSDOracle: 0,
23000
+ stableBorrowRate: "0",
23001
+ collateralEnabled: false,
23002
+ claimableRewards: 0
23003
+ };
23004
+ }
23005
+ histData[caAddress] = {
23006
+ totalDeposits24h: totalDepositsUSD,
23007
+ totalDebt24h: debtNum * loanPriceHist
23008
+ };
23009
+ lendingPositions[caAddress] = posData;
23010
+ }
23011
+ if (Object.keys(lendingPositions).length === 0) continue;
23012
+ const userData = createMultiAccountTypeUserState(
23013
+ {
23014
+ chainId,
23015
+ account,
23016
+ lendingPositions,
23017
+ modes
23018
+ },
23019
+ metaMap,
23020
+ histData
23021
+ );
23022
+ if (userData && userData.data.length > 0) {
23023
+ out[lenderKey] = userData;
23024
+ }
23025
+ }
23026
+ return Object.keys(out).length > 0 ? out : void 0;
23027
+ },
23028
+ GEARBOX_V3_USER_CALL_COUNT
23029
+ ];
23030
+ };
23031
+
22621
23032
  // src/lending/user-data/fetch-balances/parse.ts
22622
23033
  function getUserDataConverter(lender, chainId, account, params, meta) {
22623
23034
  if (isAaveV4Type(lender))
@@ -22658,6 +23069,8 @@ function getUserDataConverter(lender, chainId, account, params, meta) {
22658
23069
  return getSiloV3UserDataConverter(lender, chainId, account, meta?.[lender]);
22659
23070
  if (isFluid(lender))
22660
23071
  return getFluidUserDataConverter(lender, chainId, account, meta);
23072
+ if (isGearboxV3(lender))
23073
+ return getGearboxV3UserDataConverter(lender, chainId, account, meta);
22661
23074
  return getCompoundV2UserDataConverter(
22662
23075
  lender,
22663
23076
  chainId,
@@ -27340,6 +27753,8 @@ var getAbi2 = (lender) => {
27340
27753
  if (isSiloV2Type(lender) || isSiloV3Type(lender))
27341
27754
  return [...SiloAbi];
27342
27755
  if (isFluid(lender)) return [...FluidVaultResolverAbi];
27756
+ if (isGearboxV3(lender))
27757
+ return [...GearboxDataCompressorV3Abi];
27343
27758
  return [];
27344
27759
  };
27345
27760
 
@@ -30028,6 +30443,28 @@ var savbtcFetcher = {
30028
30443
  fetch: async () => ({ [sAVBTC]: await fetchAvantApr("savbtc") })
30029
30444
  };
30030
30445
 
30446
+ // src/yields/intrinsic/fetchers/stS.ts
30447
+ var BEETS_URL = "https://backend-v3.beets-ftm-node.com/";
30448
+ var stS = "Beets Staked Sonic::STS";
30449
+ var stsFetcher = {
30450
+ label: "STS",
30451
+ fetch: async () => {
30452
+ const res = await fetch(BEETS_URL, {
30453
+ method: "POST",
30454
+ headers: {
30455
+ Accept: "application/json",
30456
+ "Content-Type": "application/json"
30457
+ },
30458
+ body: JSON.stringify({
30459
+ operationName: "GetStakedSonicData",
30460
+ query: "query GetStakedSonicData { stsGetGqlStakedSonicData { stakingApr } }"
30461
+ })
30462
+ }).then((r) => r.json());
30463
+ const apr = Number(res.data?.stsGetGqlStakedSonicData?.stakingApr) * 100;
30464
+ return { [stS]: apr };
30465
+ }
30466
+ };
30467
+
30031
30468
  // src/yields/intrinsic/index.ts
30032
30469
  async function fetchIntrinsicYields() {
30033
30470
  const wstethPromise = safeFetch(wstethFetcher.label, wstethFetcher.fetch);
@@ -30083,7 +30520,8 @@ async function fetchIntrinsicYields() {
30083
30520
  infinifiFetcher,
30084
30521
  savusdFetcher,
30085
30522
  savethFetcher,
30086
- savbtcFetcher
30523
+ savbtcFetcher,
30524
+ stsFetcher
30087
30525
  ];
30088
30526
  const results = await Promise.all([
30089
30527
  wstethPromise,
@@ -30514,6 +30952,7 @@ function morphoApiAvailable(chainId) {
30514
30952
  if (chainId === Chain.HEMI_NETWORK) return false;
30515
30953
  if (chainId === Chain.BERACHAIN) return false;
30516
30954
  if (chainId === Chain.SEI_NETWORK) return false;
30955
+ if (chainId === Chain.CELO_MAINNET) return false;
30517
30956
  return true;
30518
30957
  }
30519
30958
  function generateMarketId(oracle, loanAsset, collateralAsset) {
@@ -31727,6 +32166,88 @@ var fluidFetcher = {
31727
32166
  parse: parseFluidResults,
31728
32167
  getAbi: getFluidAbi
31729
32168
  };
32169
+ function getGearboxV3Calls(chainId) {
32170
+ const resolvers = gearboxResolvers()?.[chainId];
32171
+ if (!resolvers?.dataCompressor) return [];
32172
+ const call = {
32173
+ address: resolvers.dataCompressor,
32174
+ name: "getPoolsV3List",
32175
+ params: []
32176
+ };
32177
+ return [
32178
+ {
32179
+ calls: [call],
32180
+ meta: { _: [] },
32181
+ lender: Lender.GEARBOX_V3
32182
+ }
32183
+ ];
32184
+ }
32185
+ function parseGearboxV3Results(data, _meta, context) {
32186
+ const { chainId, usdPrices, tokenList } = context;
32187
+ const entries = [];
32188
+ const now = Math.floor(Date.now() / 1e3);
32189
+ const pools = data[0];
32190
+ if (!Array.isArray(pools) || pools.length === 0) return entries;
32191
+ const resolvePriceUSD = (token) => {
32192
+ const key = tokenList?.[token]?.assetGroup ?? `${chainId}-${token}`;
32193
+ return usdPrices[key] ?? usdPrices[token];
32194
+ };
32195
+ for (const pool of pools) {
32196
+ try {
32197
+ const underlying = (pool.underlying ?? "").toString().toLowerCase();
32198
+ if (!underlying) continue;
32199
+ const underlyingUSD = resolvePriceUSD(underlying);
32200
+ if (!underlyingUSD) continue;
32201
+ for (const cm of pool.creditManagers ?? []) {
32202
+ const cmAddr = (cm.addr ?? "").toString().toLowerCase();
32203
+ if (!cmAddr) continue;
32204
+ const expirationDate = Number(cm.expirationDate ?? 0);
32205
+ if (expirationDate > 0 && expirationDate < now) continue;
32206
+ let lenderKey;
32207
+ try {
32208
+ lenderKey = gearboxV3LenderKey(cmAddr);
32209
+ } catch {
32210
+ continue;
32211
+ }
32212
+ entries.push({
32213
+ asset: underlying,
32214
+ price: 1,
32215
+ priceUSD: underlyingUSD,
32216
+ marketUid: createMarketUid(chainId, lenderKey, underlying),
32217
+ targetLender: lenderKey,
32218
+ description: `Gearbox V3 loan (${pool.symbol ?? ""})`,
32219
+ staticBase: true,
32220
+ baseAsset: underlying
32221
+ });
32222
+ for (const ct of cm.collateralTokens ?? []) {
32223
+ const token = (ct.token ?? "").toString().toLowerCase();
32224
+ if (!token) continue;
32225
+ if (token === underlying) continue;
32226
+ const tokenUSD = resolvePriceUSD(token);
32227
+ if (!tokenUSD) continue;
32228
+ entries.push({
32229
+ asset: token,
32230
+ price: tokenUSD / underlyingUSD,
32231
+ priceUSD: tokenUSD,
32232
+ marketUid: createMarketUid(chainId, lenderKey, token),
32233
+ targetLender: lenderKey,
32234
+ baseAsset: underlying
32235
+ });
32236
+ }
32237
+ }
32238
+ } catch {
32239
+ }
32240
+ }
32241
+ return entries;
32242
+ }
32243
+ function getGearboxV3Abi() {
32244
+ return GearboxDataCompressorV3Abi;
32245
+ }
32246
+ var gearboxV3Fetcher = {
32247
+ getCalls: getGearboxV3Calls,
32248
+ parse: parseGearboxV3Results,
32249
+ getAbi: getGearboxV3Abi
32250
+ };
31730
32251
 
31731
32252
  // src/prices/oracle-prices/fetchers/siloV2Graphql.ts
31732
32253
  async function fetchSiloV2GraphQLMarkets(chainId) {
@@ -32181,6 +32702,11 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
32181
32702
  () => fluidFetcher.getCalls(chainId),
32182
32703
  getCallsErrors
32183
32704
  ) : [];
32705
+ const gearboxV3Results = isActive("gearboxV3") ? safeGetCalls(
32706
+ "gearboxV3",
32707
+ () => gearboxV3Fetcher.getCalls(chainId),
32708
+ getCallsErrors
32709
+ ) : [];
32184
32710
  const aaveGroup = buildGroup(
32185
32711
  "aave",
32186
32712
  aaveResults,
@@ -32241,6 +32767,12 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
32241
32767
  fluidFetcher.parse,
32242
32768
  getFluidAbi()
32243
32769
  );
32770
+ const gearboxV3Group = buildGroup(
32771
+ "gearboxV3",
32772
+ gearboxV3Results,
32773
+ gearboxV3Fetcher.parse,
32774
+ getGearboxV3Abi()
32775
+ );
32244
32776
  const allGroups = [
32245
32777
  aaveGroup,
32246
32778
  compoundV2Group,
@@ -32251,7 +32783,8 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
32251
32783
  morphoGroup,
32252
32784
  siloV2Group,
32253
32785
  siloV3Group,
32254
- fluidGroup
32786
+ fluidGroup,
32787
+ gearboxV3Group
32255
32788
  ];
32256
32789
  const totalCalls = allGroups.reduce((s, g) => s + g.calls.length, 0);
32257
32790
  if (totalCalls === 0 && !isActive("morpho")) {
@@ -32280,6 +32813,7 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
32280
32813
  eulerData,
32281
32814
  aaveV4Data,
32282
32815
  fluidData,
32816
+ gearboxV3Data,
32283
32817
  morphoGqlEntries,
32284
32818
  siloV2GqlEntries,
32285
32819
  siloV3GqlEntries
@@ -32340,6 +32874,14 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
32340
32874
  allowFailure,
32341
32875
  rpcOverrides
32342
32876
  ),
32877
+ executeGroup(
32878
+ gearboxV3Group,
32879
+ chainId,
32880
+ chainBatchSize,
32881
+ retries,
32882
+ allowFailure,
32883
+ rpcOverrides
32884
+ ),
32343
32885
  morphoGqlPromise,
32344
32886
  siloV2GqlPromise,
32345
32887
  siloV3GqlPromise
@@ -32392,6 +32934,7 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
32392
32934
  { group: eulerGroup, data: eulerData },
32393
32935
  { group: aaveV4Group, data: aaveV4Data },
32394
32936
  { group: fluidGroup, data: fluidData },
32937
+ { group: gearboxV3Group, data: gearboxV3Data },
32395
32938
  ...siloV2GqlEntries != null ? [] : [{ group: siloV2Group, data: siloV2Data }],
32396
32939
  ...siloV3GqlEntries != null ? [] : [{ group: siloV3Group, data: siloV3Data }],
32397
32940
  ...useMorphoGql ? [] : [{ group: morphoGroup, data: morphoData }]
@@ -32479,6 +33022,7 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
32479
33022
  (t) => !!t.meta.baseAssetSource
32480
33023
  );
32481
33024
  parseTrackers(fluidGroup, fluidData.results, false);
33025
+ parseTrackers(gearboxV3Group, gearboxV3Data.results, false);
32482
33026
  if (siloV2GqlEntries != null) {
32483
33027
  const diag2 = {
32484
33028
  lender: "SILO_V2 (GraphQL)",