@1delta/margin-fetcher 0.0.317 → 0.0.319

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
@@ -3,7 +3,7 @@ import './chunk-BYTNVMX7.js';
3
3
  import './chunk-PR4QN5HX.js';
4
4
  import { Lender, isAaveType, isCompoundV3, isMultiMarket, isSiloV2Type, isSiloV3Type, isDolomite, isEulerType, isAaveV4Type, isInit, isMorphoType, isCompoundV2Type, isVenusType, isSumerType, AAVE_V3_LENDERS, AAVE_V2_LENDERS, isAaveV2Type, isAaveV32Type, isAaveV3Type, isFluid, isGearboxV3, isMidnight, isYLDR, isCompoundV3Type, isLista, isTectonicType, isKineticType, isBenqiType } from '@1delta/lender-registry';
5
5
  export { isAaveType, isAaveV2Type, isAaveV32Type, isAaveV3Type, isCompoundV3, isCompoundV3Type, isInit, isMorphoType, isMultiMarket, isYLDR } from '@1delta/lender-registry';
6
- import { aavePools, compoundV3Pools, initConfig, morphoPools, compoundV2Pools, eulerVaults, siloMarkets, siloV2LenderKey, siloMarketsV3, siloV3LenderKey, aaveV4Spokes, aaveV4SpokeLenderKey, fluidResolvers, gearboxResolvers, dolomiteConfigs, midnightConfig, aaveReserves, compoundV3Reserves, morphoTypeMarkets, getSiloV2MarketEntry, getSiloV3MarketEntry, dolomiteEmode, aaveTokens, morphoTypeVaults, eulerConfigs, gearboxMarketCompressor, gearboxMarketConfigurators, gearboxV3LenderKey, midnightMarketsByChain, parseAaveV4SpokeLenderKey, gearboxAccountCompressor, compoundV2Tokens, aaveOracles, aaveOraclesConfig, compoundV2Oracles, compoundV2TokenArray, compoundV2OraclesConfig, compoundV3OraclesData, compoundV3BaseData, compoundV2Reserves, fetchTokenLists, fetchTokenList, aaveV4Oracles } from '@1delta/data-sdk';
6
+ import { aavePools, compoundV3Pools, initConfig, morphoPools, compoundV2Pools, eulerVaults, siloMarkets, siloV2LenderKey, siloMarketsV3, siloV3LenderKey, aaveV4Spokes, aaveV4SpokeLenderKey, fluidResolvers, gearboxResolvers, dolomiteConfigs, midnightConfig, aaveReserves, compoundV3Reserves, morphoTypeMarkets, getSiloV2MarketEntry, getSiloV3MarketEntry, dolomiteEmode, aaveTokens, morphoTypeVaults, eulerConfigs, gearboxMarketCompressor, gearboxMarketConfigurators, gearboxV3LenderKey, midnightMarketsByChain, parseAaveV4SpokeLenderKey, gearboxAccountCompressor, compoundV2Tokens, aaveOracles, aaveOraclesConfig, compoundV2Oracles, compoundV2TokenArray, compoundV2OraclesConfig, compoundV3OraclesData, compoundV3BaseData, compoundV2Reserves, fetchTokenLists, fetchTokenList, aaveV4Oracles, resolveMidnightApiBase } from '@1delta/data-sdk';
7
7
  import lodash from 'lodash';
8
8
  import { getEvmClient, getEvmChain, getEvmClientUniversal, multicallRetryUniversal } from '@1delta/providers';
9
9
  import { MetaMorphoAbi, FluidLendingResolverAbi, FluidVaultResolverAbi, MoolahVaultAbi, MorphoLensAbi, AaveV4SpokeAbi, AaveV4OracleAbi, AaveV4HubAbi, DolomiteMarginAbi, GearboxMarketCompressorV310Abi, MorphoBlueAbi, MidnightAbi, GearboxCreditAccountCompressorV310Abi } from '@1delta/abis';
@@ -20754,12 +20754,10 @@ var getLenderPublicData = async (chainId, lenders, prices, additionalYields, mul
20754
20754
  }
20755
20755
  return lenderData;
20756
20756
  };
20757
- var DEFAULT_MIDNIGHT_API = "https://api.morpho.org/v0/midnight";
20758
20757
  var warn = (...args) => {
20759
20758
  };
20760
20759
  function midnightApiBaseUrl(chainId) {
20761
- const base = midnightConfig()?.[chainId]?.apiBaseUrl;
20762
- return (base && base.length > 0 ? base : DEFAULT_MIDNIGHT_API).replace(/\/+$/, "");
20760
+ return resolveMidnightApiBase(chainId);
20763
20761
  }
20764
20762
  var toBig2 = (v) => {
20765
20763
  try {
@@ -20927,7 +20925,9 @@ function convertMidnightMarketsToResponse(raw, chainId, prices = {}, _additional
20927
20925
  }
20928
20926
  ] : void 0;
20929
20927
  const loanAddr = config.loanToken.toLowerCase();
20930
- const loanPrice = prices[loanAddr] ?? 0;
20928
+ const loanAsset = tokens[loanAddr];
20929
+ const loanKey = toOracleKey(loanAsset?.assetGroup) ?? toGenericPriceKey(loanAsset?.address ?? config.loanToken, chainId);
20930
+ const loanPrice = prices[loanKey] ?? 0;
20931
20931
  const supplyLiquidity = formatNr(top?.supplyDepthAssets ?? 0n, config.loanDecimals);
20932
20932
  const borrowLiquidity = formatNr(top?.borrowDepthAssets ?? 0n, config.loanDecimals);
20933
20933
  const entry = { data: {} };
@@ -24814,7 +24814,6 @@ function normalizeUnderlying3(token) {
24814
24814
  const lower = token.toLowerCase();
24815
24815
  return Object.values(WETH_BY_CHAIN).includes(lower) ? zeroAddress : lower;
24816
24816
  }
24817
- var MIDNIGHT_UNIT_DECIMALS = 18;
24818
24817
  function toBigInt10(v) {
24819
24818
  if (v === void 0 || v === null || v === "0x") return 0n;
24820
24819
  if (typeof v === "bigint") return v;
@@ -24857,7 +24856,7 @@ var getMidnightUserDataConverter = (_lender, chainId, account, meta) => {
24857
24856
  const loanOraclePrice = loanMeta ? getOraclePrice(loanMeta) : 0;
24858
24857
  const loanPriceHist = loanMeta?.price?.priceUsd24h ?? loanDisplayPrice;
24859
24858
  const debtUnits = readDebtUnits(positionResult);
24860
- const debtStr = parseRawAmount(debtUnits.toString(), MIDNIGHT_UNIT_DECIMALS);
24859
+ const debtStr = parseRawAmount(debtUnits.toString(), market.loanDecimals);
24861
24860
  const debtNum = Number(debtStr);
24862
24861
  const posData = {};
24863
24862
  let anyBalance = debtUnits > 0n;
@@ -34228,6 +34227,86 @@ var morphoFetcher = {
34228
34227
  parse: parseMorphoResults,
34229
34228
  getAbi: getMorphoAbi
34230
34229
  };
34230
+ function getMidnightCalls(chainId) {
34231
+ const markets = midnightMarketsByChain(chainId);
34232
+ if (markets.length === 0) return [];
34233
+ const results = [];
34234
+ for (const market of markets) {
34235
+ if (!market.marketId || !market.loanToken) continue;
34236
+ const legs = [];
34237
+ const calls = [];
34238
+ for (const c of market.collateralParams ?? []) {
34239
+ if (!c.oracle || !c.token) continue;
34240
+ legs.push({
34241
+ collateralAsset: c.token.toLowerCase(),
34242
+ collateralDecimals: c.decimals,
34243
+ oracle: c.oracle
34244
+ });
34245
+ calls.push({ address: c.oracle, name: "price", params: [] });
34246
+ }
34247
+ if (legs.length === 0) continue;
34248
+ results.push({
34249
+ calls,
34250
+ meta: {
34251
+ marketId: market.marketId,
34252
+ loanAsset: market.loanToken.toLowerCase(),
34253
+ loanDecimals: market.loanDecimals,
34254
+ legs
34255
+ },
34256
+ lender: midnightLenderKey(market.marketId)
34257
+ });
34258
+ }
34259
+ return results;
34260
+ }
34261
+ function parseMidnightResults(data, meta, context) {
34262
+ const { chainId, usdPrices, tokenList } = context;
34263
+ const entries = [];
34264
+ const loanAsset = meta.loanAsset;
34265
+ const loanDecimals = meta.loanDecimals ?? tokenList?.[loanAsset]?.decimals ?? 18;
34266
+ const loanOracleKey = tokenList?.[loanAsset]?.assetGroup ?? `${chainId}-${loanAsset}`;
34267
+ const loanAssetUSD = usdPrices[loanOracleKey] ?? usdPrices[loanAsset];
34268
+ if (!loanAssetUSD) return entries;
34269
+ const lenderKey = midnightLenderKey(meta.marketId);
34270
+ entries.push({
34271
+ asset: loanAsset,
34272
+ price: 1,
34273
+ priceUSD: loanAssetUSD,
34274
+ marketUid: createMarketUid(chainId, lenderKey, loanAsset),
34275
+ targetLender: lenderKey,
34276
+ description: "Midnight loan asset",
34277
+ staticBase: true,
34278
+ baseAsset: loanAsset
34279
+ });
34280
+ meta.legs.forEach((leg, i) => {
34281
+ const rawPrice = data[i];
34282
+ if (!rawPrice || rawPrice === "0x") return;
34283
+ const collateralDecimals = leg.collateralDecimals ?? tokenList?.[leg.collateralAsset]?.decimals ?? 18;
34284
+ const priceDebtToCollateral = formatMorphoPrice(
34285
+ rawPrice.toString(),
34286
+ loanDecimals,
34287
+ collateralDecimals
34288
+ );
34289
+ if (isNaN(priceDebtToCollateral) || priceDebtToCollateral === 0) return;
34290
+ entries.push({
34291
+ asset: leg.collateralAsset,
34292
+ price: priceDebtToCollateral,
34293
+ // raw: collateral price in loan asset terms
34294
+ priceUSD: priceDebtToCollateral * loanAssetUSD,
34295
+ marketUid: createMarketUid(chainId, lenderKey, leg.collateralAsset),
34296
+ targetLender: lenderKey,
34297
+ baseAsset: loanAsset
34298
+ });
34299
+ });
34300
+ return entries;
34301
+ }
34302
+ function getMidnightAbi() {
34303
+ return ProxyOracleAbi;
34304
+ }
34305
+ var midnightFetcher = {
34306
+ getCalls: getMidnightCalls,
34307
+ parse: parseMidnightResults,
34308
+ getAbi: getMidnightAbi
34309
+ };
34231
34310
  var CompoundV2OracleAbi = [
34232
34311
  {
34233
34312
  inputs: [{ internalType: "address", name: "cToken", type: "address" }],
@@ -35822,6 +35901,11 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
35822
35901
  }),
35823
35902
  getCallsErrors
35824
35903
  ) : [];
35904
+ const midnightResults = isActive("midnight") ? safeGetCalls(
35905
+ "midnight",
35906
+ () => midnightFetcher.getCalls(chainId),
35907
+ getCallsErrors
35908
+ ) : [];
35825
35909
  const siloV2Results = isActive("silov2") ? safeGetCalls(
35826
35910
  "siloV2",
35827
35911
  () => siloV2Fetcher.getCalls(chainId),
@@ -35889,6 +35973,12 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
35889
35973
  morphoFetcher.parse,
35890
35974
  ProxyOracleAbi
35891
35975
  );
35976
+ const midnightGroup = buildGroup(
35977
+ "midnight",
35978
+ midnightResults,
35979
+ midnightFetcher.parse,
35980
+ ProxyOracleAbi
35981
+ );
35892
35982
  const siloV2Group = buildGroup(
35893
35983
  "siloV2",
35894
35984
  siloV2Results,
@@ -35927,6 +36017,7 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
35927
36017
  eulerGroup,
35928
36018
  aaveV4Group,
35929
36019
  morphoGroup,
36020
+ midnightGroup,
35930
36021
  siloV2Group,
35931
36022
  siloV3Group,
35932
36023
  fluidGroup,
@@ -35962,6 +36053,7 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
35962
36053
  fluidData,
35963
36054
  gearboxV3Data,
35964
36055
  dolomiteData,
36056
+ midnightData,
35965
36057
  morphoGqlEntries,
35966
36058
  siloV2GqlEntries,
35967
36059
  siloV3GqlEntries
@@ -36038,6 +36130,14 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
36038
36130
  allowFailure,
36039
36131
  rpcOverrides
36040
36132
  ),
36133
+ executeGroup(
36134
+ midnightGroup,
36135
+ chainId,
36136
+ chainBatchSize,
36137
+ retries,
36138
+ allowFailure,
36139
+ rpcOverrides
36140
+ ),
36041
36141
  morphoGqlPromise,
36042
36142
  siloV2GqlPromise,
36043
36143
  siloV3GqlPromise
@@ -36088,6 +36188,7 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
36088
36188
  { group: fluidGroup, data: fluidData },
36089
36189
  { group: gearboxV3Group, data: gearboxV3Data },
36090
36190
  { group: dolomiteGroup, data: dolomiteData },
36191
+ { group: midnightGroup, data: midnightData },
36091
36192
  ...siloV2GqlEntries != null ? [] : [{ group: siloV2Group, data: siloV2Data }],
36092
36193
  ...siloV3GqlEntries != null ? [] : [{ group: siloV3Group, data: siloV3Data }],
36093
36194
  // In hybrid mode the on-chain multicall ran too — surface its errors.
@@ -36281,6 +36382,7 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
36281
36382
  }
36282
36383
  parseTrackers(morphoGroup, morphoData.results, false);
36283
36384
  }
36385
+ parseTrackers(midnightGroup, midnightData.results, false);
36284
36386
  const totalFailedCalls = trackerDiags.reduce(
36285
36387
  (sum, d) => sum + d.failedCalls,
36286
36388
  0