@1delta/margin-fetcher 0.0.228 → 0.0.229

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
@@ -7594,6 +7594,10 @@ var getLendersForChain = (c) => {
7594
7594
  for (const market of siloChainPairs) {
7595
7595
  lenders.push(siloV2LenderKey(market.siloConfig));
7596
7596
  }
7597
+ const siloV3ChainPairs = siloMarketsV3()?.[c] ?? [];
7598
+ for (const market of siloV3ChainPairs) {
7599
+ lenders.push(siloV3LenderKey(market.siloConfig));
7600
+ }
7597
7601
  const v4ChainSpokes = aaveV4Spokes()?.[c] ?? {};
7598
7602
  for (const spokeAddr of Object.keys(v4ChainSpokes)) {
7599
7603
  lenders.push(aaveV4SpokeLenderKey(spokeAddr));
@@ -18883,6 +18887,7 @@ function buildSiloV3LenderReserveCall(_chainId, lender) {
18883
18887
  }
18884
18888
 
18885
18889
  // src/lending/public-data/silo-v3/publicCallParse.ts
18890
+ var ZERO_ADDRESS = "0x0000000000000000000000000000000000000000";
18886
18891
  var getSiloV3ReservesDataConverter = (lender, chainId, prices, additionalYields, tokenList = {}) => {
18887
18892
  const market = getSiloV3MarketEntry(chainId, lender);
18888
18893
  if (!market) return [() => void 0, 0];
@@ -18976,8 +18981,8 @@ var getSiloV3ReservesDataConverter = (lender, chainId, prices, additionalYields,
18976
18981
  silo: self.silo,
18977
18982
  counterpartySilo: other.silo,
18978
18983
  siloConfig: market.siloConfig,
18979
- oracle: self.solvencyOracle,
18980
- irm: self.interestRateModel,
18984
+ oracle: self.solvencyOracle || ZERO_ADDRESS,
18985
+ irm: self.interestRateModel || ZERO_ADDRESS,
18981
18986
  shareTokens: {
18982
18987
  collateral: self.collateralShareToken,
18983
18988
  protected: self.protectedShareToken,
@@ -19308,6 +19313,61 @@ query GetSilos {
19308
19313
  }
19309
19314
  }
19310
19315
  `;
19316
+ var liteQuery = (chainId, limit) => `
19317
+ query GetSilosLite {
19318
+ silos(where: {chainId_in: [${chainId}]}, limit: ${limit}) {
19319
+ items {
19320
+ configAddress
19321
+ protocol { protocolVersion }
19322
+ market1 {
19323
+ index
19324
+ inputTokenId
19325
+ supply
19326
+ borrowed
19327
+ supplyUsd
19328
+ borrowedUsd
19329
+ solvencyOracleAddress
19330
+ solvencyOracle { quote quoteTokenId }
19331
+ }
19332
+ market2 {
19333
+ index
19334
+ inputTokenId
19335
+ supply
19336
+ borrowed
19337
+ supplyUsd
19338
+ borrowedUsd
19339
+ solvencyOracleAddress
19340
+ solvencyOracle { quote quoteTokenId }
19341
+ }
19342
+ }
19343
+ }
19344
+ }
19345
+ `;
19346
+ async function fetchSiloMarketsLite(chainId, options) {
19347
+ if (!SILO_API_SUPPORTED_CHAIN_IDS.has(chainId)) return [];
19348
+ const limit = options?.limit ?? 500;
19349
+ const response = await fetch(BASE_URL2, {
19350
+ method: "POST",
19351
+ headers: { "Content-Type": "application/json" },
19352
+ body: JSON.stringify({ query: liteQuery(chainId, limit) })
19353
+ });
19354
+ if (!response.ok) {
19355
+ throw new Error(
19356
+ `[silo-api] Network error: ${response.status} - ${response.statusText}`
19357
+ );
19358
+ }
19359
+ const payload = await response.json();
19360
+ if (payload?.errors?.length) {
19361
+ throw new Error(
19362
+ `[silo-api] GraphQL error: ${payload.errors.map((e) => e?.message).join("; ")}`
19363
+ );
19364
+ }
19365
+ const items = payload?.data?.silos?.items ?? [];
19366
+ if (!options?.protocolVersion) return items;
19367
+ return items.filter(
19368
+ (s) => s.protocol?.protocolVersion === options.protocolVersion
19369
+ );
19370
+ }
19311
19371
  async function fetchSiloMarkets(chainId, options) {
19312
19372
  if (!SILO_API_SUPPORTED_CHAIN_IDS.has(chainId)) return [];
19313
19373
  const limit = options?.limit ?? 500;
@@ -19474,6 +19534,7 @@ function safeLtvOrFee(api, field5, fallback) {
19474
19534
  }
19475
19535
 
19476
19536
  // src/lending/public-data/silo-v3/convertPublic.ts
19537
+ var ZERO_ADDRESS2 = "0x0000000000000000000000000000000000000000";
19477
19538
  function convertSiloV3MarketsToPublicResponse(apiItems, chainId, prices, additionalYields = {
19478
19539
  intrinsicYields: {},
19479
19540
  lenderRewards: {},
@@ -19571,8 +19632,8 @@ function convertSiloV3MarketsToPublicResponse(apiItems, chainId, prices, additio
19571
19632
  silo: self.silo.toLowerCase(),
19572
19633
  counterpartySilo: other.silo.toLowerCase(),
19573
19634
  siloConfig: registryEntry.siloConfig.toLowerCase(),
19574
- oracle: (api.solvencyOracleAddress ?? self.solvencyOracle).toLowerCase(),
19575
- irm: (api.interestRateModelId ?? self.interestRateModel).toLowerCase(),
19635
+ oracle: (api.solvencyOracleAddress || self.solvencyOracle || ZERO_ADDRESS2).toLowerCase(),
19636
+ irm: (api.interestRateModelId || self.interestRateModel || ZERO_ADDRESS2).toLowerCase(),
19576
19637
  shareTokens: {
19577
19638
  collateral: self.collateralShareToken,
19578
19639
  protected: self.protectedShareToken,
@@ -19777,40 +19838,46 @@ var getLenderPublicDataAll = async (chainId, lenders, prices, additionalYields,
19777
19838
  const lendersApi = lenders.filter(
19778
19839
  (l) => lenderApiOnly(l, chainId) || lenderApiWithOnChainFallback(l, chainId)
19779
19840
  );
19780
- const lendersOnChain = lenders.filter((l) => !lenderApiOnly(l, chainId));
19781
- const onChain = getLenderPublicData(
19782
- chainId,
19783
- lendersOnChain,
19784
- prices,
19785
- additionalYields,
19786
- multicallRetry,
19787
- tokenList
19788
- );
19789
- const api = getLenderPublicDataViaApi(
19790
- chainId,
19791
- lendersApi,
19792
- prices,
19793
- additionalYields,
19794
- tokenList,
19795
- includeUnlistedMorphoMarkets
19796
- );
19797
- const [onChainResult, apiResult] = await Promise.allSettled([
19798
- onChain,
19799
- api
19800
- ]);
19801
- const onChainRes = onChainResult.status === "fulfilled" ? onChainResult.value : {};
19802
- const apiRes = apiResult.status === "fulfilled" ? apiResult.value : {};
19803
- if (onChainResult.status === "rejected") {
19804
- console.warn(
19805
- `[lending] on-chain fetch failed for chain ${chainId}:`,
19806
- onChainResult.reason?.message ?? onChainResult.reason
19807
- );
19841
+ let apiRes = {};
19842
+ if (lendersApi.length > 0) {
19843
+ try {
19844
+ apiRes = await getLenderPublicDataViaApi(
19845
+ chainId,
19846
+ lendersApi,
19847
+ prices,
19848
+ additionalYields,
19849
+ tokenList,
19850
+ includeUnlistedMorphoMarkets
19851
+ );
19852
+ } catch (e) {
19853
+ console.warn(
19854
+ `[lending] API fetch failed for chain ${chainId}:`,
19855
+ e?.message ?? e
19856
+ );
19857
+ }
19808
19858
  }
19809
- if (apiResult.status === "rejected") {
19810
- console.warn(
19811
- `[lending] API fetch failed for chain ${chainId}:`,
19812
- apiResult.reason?.message ?? apiResult.reason
19813
- );
19859
+ const lendersOnChain = lenders.filter((l) => {
19860
+ if (lenderApiOnly(l, chainId)) return false;
19861
+ if (lenderApiWithOnChainFallback(l, chainId) && apiRes[l]) return false;
19862
+ return true;
19863
+ });
19864
+ let onChainRes = {};
19865
+ if (lendersOnChain.length > 0) {
19866
+ try {
19867
+ onChainRes = await getLenderPublicData(
19868
+ chainId,
19869
+ lendersOnChain,
19870
+ prices,
19871
+ additionalYields,
19872
+ multicallRetry,
19873
+ tokenList
19874
+ );
19875
+ } catch (e) {
19876
+ console.warn(
19877
+ `[lending] on-chain fetch failed for chain ${chainId}:`,
19878
+ e?.message ?? e
19879
+ );
19880
+ }
19814
19881
  }
19815
19882
  return { ...onChainRes, ...apiRes };
19816
19883
  };
@@ -30462,7 +30529,7 @@ var SiloOracleAbi = [
30462
30529
  type: "function"
30463
30530
  }
30464
30531
  ];
30465
- var ZERO_ADDRESS = "0x0000000000000000000000000000000000000000";
30532
+ var ZERO_ADDRESS3 = "0x0000000000000000000000000000000000000000";
30466
30533
  function lookupUSD(context, asset) {
30467
30534
  const lc = asset.toLowerCase();
30468
30535
  const groupKey = context.tokenList?.[lc]?.assetGroup ?? `${context.chainId}-${lc}`;
@@ -30474,7 +30541,7 @@ function getSiloV2Calls(chainId) {
30474
30541
  const tokensWithRealOracle = /* @__PURE__ */ new Set();
30475
30542
  for (const market of allMarkets) {
30476
30543
  for (const half of [market.silo0, market.silo1]) {
30477
- if (half.solvencyOracle && half.solvencyOracle !== ZERO_ADDRESS) {
30544
+ if (half.solvencyOracle && half.solvencyOracle !== ZERO_ADDRESS3) {
30478
30545
  tokensWithRealOracle.add(half.token.toLowerCase());
30479
30546
  }
30480
30547
  }
@@ -30487,7 +30554,7 @@ function getSiloV2Calls(chainId) {
30487
30554
  const lenderKey = siloV2LenderKey(market.siloConfig);
30488
30555
  const halves = [market.silo0, market.silo1];
30489
30556
  const isStatic = halves.map(
30490
- (h) => !h.solvencyOracle || h.solvencyOracle === ZERO_ADDRESS
30557
+ (h) => !h.solvencyOracle || h.solvencyOracle === ZERO_ADDRESS3
30491
30558
  );
30492
30559
  if (isStatic[0] && isStatic[1]) {
30493
30560
  const t0 = halves[0].token.toLowerCase();
@@ -30507,7 +30574,7 @@ function getSiloV2Calls(chainId) {
30507
30574
  decimals: half.decimals,
30508
30575
  silo: half.silo.toLowerCase(),
30509
30576
  lenderKey,
30510
- oracle: ZERO_ADDRESS,
30577
+ oracle: ZERO_ADDRESS3,
30511
30578
  partnerToken: partnerLc,
30512
30579
  isStatic: true
30513
30580
  });
@@ -30635,7 +30702,7 @@ var SiloOracleAbi2 = [
30635
30702
  type: "function"
30636
30703
  }
30637
30704
  ];
30638
- var ZERO_ADDRESS2 = "0x0000000000000000000000000000000000000000";
30705
+ var ZERO_ADDRESS4 = "0x0000000000000000000000000000000000000000";
30639
30706
  function lookupUSD2(context, asset) {
30640
30707
  const lc = asset.toLowerCase();
30641
30708
  const groupKey = context.tokenList?.[lc]?.assetGroup ?? `${context.chainId}-${lc}`;
@@ -30647,7 +30714,7 @@ function getSiloV3Calls(chainId) {
30647
30714
  const tokensWithRealOracle = /* @__PURE__ */ new Set();
30648
30715
  for (const market of allMarkets) {
30649
30716
  for (const half of [market.silo0, market.silo1]) {
30650
- if (half.solvencyOracle && half.solvencyOracle !== ZERO_ADDRESS2) {
30717
+ if (half.solvencyOracle && half.solvencyOracle !== ZERO_ADDRESS4) {
30651
30718
  tokensWithRealOracle.add(half.token.toLowerCase());
30652
30719
  }
30653
30720
  }
@@ -30660,7 +30727,7 @@ function getSiloV3Calls(chainId) {
30660
30727
  const lenderKey = siloV3LenderKey(market.siloConfig);
30661
30728
  const halves = [market.silo0, market.silo1];
30662
30729
  const isStatic = halves.map(
30663
- (h) => !h.solvencyOracle || h.solvencyOracle === ZERO_ADDRESS2
30730
+ (h) => !h.solvencyOracle || h.solvencyOracle === ZERO_ADDRESS4
30664
30731
  );
30665
30732
  if (isStatic[0] && isStatic[1]) {
30666
30733
  const t0 = halves[0].token.toLowerCase();
@@ -30680,7 +30747,7 @@ function getSiloV3Calls(chainId) {
30680
30747
  decimals: half.decimals,
30681
30748
  silo: half.silo.toLowerCase(),
30682
30749
  lenderKey,
30683
- oracle: ZERO_ADDRESS2,
30750
+ oracle: ZERO_ADDRESS4,
30684
30751
  partnerToken: partnerLc,
30685
30752
  isStatic: true
30686
30753
  });
@@ -30792,7 +30859,7 @@ var siloV3Fetcher = {
30792
30859
  async function fetchSiloV2GraphQLMarkets(chainId) {
30793
30860
  if (!SILO_API_SUPPORTED_CHAIN_IDS.has(chainId)) return null;
30794
30861
  try {
30795
- const items = await fetchSiloMarkets(chainId, { protocolVersion: "v2" });
30862
+ const items = await fetchSiloMarketsLite(chainId, { protocolVersion: "v2" });
30796
30863
  return items;
30797
30864
  } catch (e) {
30798
30865
  console.warn(
@@ -30813,7 +30880,7 @@ function lookupUSD3(context, asset) {
30813
30880
  return context.usdPrices[groupKey] ?? context.usdPrices[lc] ?? 0;
30814
30881
  }
30815
30882
  function parseSiloV2GraphQLResults(items, context) {
30816
- const ZERO_ADDRESS3 = "0x0000000000000000000000000000000000000000";
30883
+ const ZERO_ADDRESS5 = "0x0000000000000000000000000000000000000000";
30817
30884
  const out = [];
30818
30885
  const seen = /* @__PURE__ */ new Set();
30819
30886
  for (const item of items) {
@@ -30836,8 +30903,8 @@ function parseSiloV2GraphQLResults(items, context) {
30836
30903
  const partnerTokenLc = other.token.toLowerCase();
30837
30904
  const dedupKey = `${lenderKey}:${tokenLc}`;
30838
30905
  if (seen.has(dedupKey)) continue;
30839
- const oracleAddr = (side.solvencyOracleAddress ?? side.solvencyOracle?.id ?? self.solvencyOracle ?? ZERO_ADDRESS3).toLowerCase();
30840
- const isStatic = !oracleAddr || oracleAddr === ZERO_ADDRESS3;
30906
+ const oracleAddr = (side.solvencyOracleAddress ?? side.solvencyOracle?.id ?? self.solvencyOracle ?? ZERO_ADDRESS5).toLowerCase();
30907
+ const isStatic = !oracleAddr || oracleAddr === ZERO_ADDRESS5;
30841
30908
  const siloAddrLc = self.silo.toLowerCase();
30842
30909
  try {
30843
30910
  let priceUSD = 0;
@@ -30891,7 +30958,7 @@ function parseSiloV2GraphQLResults(items, context) {
30891
30958
  async function fetchSiloV3GraphQLMarkets(chainId) {
30892
30959
  if (!SILO_API_SUPPORTED_CHAIN_IDS.has(chainId)) return null;
30893
30960
  try {
30894
- const items = await fetchSiloMarkets(chainId, { protocolVersion: "v3" });
30961
+ const items = await fetchSiloMarketsLite(chainId, { protocolVersion: "v3" });
30895
30962
  return items;
30896
30963
  } catch (e) {
30897
30964
  console.warn(
@@ -30912,7 +30979,7 @@ function lookupUSD4(context, asset) {
30912
30979
  return context.usdPrices[groupKey] ?? context.usdPrices[lc] ?? 0;
30913
30980
  }
30914
30981
  function parseSiloV3GraphQLResults(items, context) {
30915
- const ZERO_ADDRESS3 = "0x0000000000000000000000000000000000000000";
30982
+ const ZERO_ADDRESS5 = "0x0000000000000000000000000000000000000000";
30916
30983
  const out = [];
30917
30984
  const seen = /* @__PURE__ */ new Set();
30918
30985
  for (const item of items) {
@@ -30935,8 +31002,8 @@ function parseSiloV3GraphQLResults(items, context) {
30935
31002
  const partnerTokenLc = other.token.toLowerCase();
30936
31003
  const dedupKey = `${lenderKey}:${tokenLc}`;
30937
31004
  if (seen.has(dedupKey)) continue;
30938
- const oracleAddr = (side.solvencyOracleAddress ?? side.solvencyOracle?.id ?? self.solvencyOracle ?? ZERO_ADDRESS3).toLowerCase();
30939
- const isStatic = !oracleAddr || oracleAddr === ZERO_ADDRESS3;
31005
+ const oracleAddr = (side.solvencyOracleAddress ?? side.solvencyOracle?.id ?? self.solvencyOracle ?? ZERO_ADDRESS5).toLowerCase();
31006
+ const isStatic = !oracleAddr || oracleAddr === ZERO_ADDRESS5;
30940
31007
  const siloAddrLc = self.silo.toLowerCase();
30941
31008
  try {
30942
31009
  let priceUSD = 0;