@1delta/margin-fetcher 0.0.200 → 0.0.202

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
@@ -27231,6 +27231,29 @@ var ondoFetcher = {
27231
27231
  }
27232
27232
  };
27233
27233
 
27234
+ // src/yields/intrinsic/fetchers/yuzu.ts
27235
+ var YUZU_APY_URL = "https://defi-api.yuzu.money/proxy/apy";
27236
+ var syzUSD = "Staked Yuzu USD::syzUSD";
27237
+ var syzusdFetcher = {
27238
+ label: "SYZUSD",
27239
+ fetch: async () => {
27240
+ const res = await fetch(YUZU_APY_URL).then((r) => r.json());
27241
+ return { [syzUSD]: apyToAprPercent(res?.data?.syzusd_apy ?? 0) };
27242
+ }
27243
+ };
27244
+
27245
+ // src/yields/intrinsic/fetchers/falcon.ts
27246
+ var FALCON_URL = "https://api.falcon.finance/api/v1/statistics";
27247
+ var sUSDf = "Staked Falcon USD::sUSDf";
27248
+ var susdfFetcher = {
27249
+ label: "SUSDF",
27250
+ fetch: async () => {
27251
+ const res = await fetch(FALCON_URL).then((r) => r.json());
27252
+ const apy = Number(res?.sUSDf_7d_apy ?? 0) * 100;
27253
+ return { [sUSDf]: apyToAprPercent(apy) };
27254
+ }
27255
+ };
27256
+
27234
27257
  // src/yields/intrinsic/index.ts
27235
27258
  async function fetchIntrinsicYields() {
27236
27259
  const wstethPromise = safeFetch(wstethFetcher.label, wstethFetcher.fetch);
@@ -27278,7 +27301,9 @@ async function fetchIntrinsicYields() {
27278
27301
  pendleFetcher,
27279
27302
  usdaiFetcher,
27280
27303
  mapleFetcher,
27281
- ondoFetcher
27304
+ ondoFetcher,
27305
+ syzusdFetcher,
27306
+ susdfFetcher
27282
27307
  ];
27283
27308
  const results = await Promise.all([
27284
27309
  wstethPromise,
@@ -30361,6 +30386,18 @@ var aaveFetcher = {
30361
30386
  parse: parseAaveResults2,
30362
30387
  getAbi: getAaveAbi
30363
30388
  };
30389
+
30390
+ // src/lending/public-data/morpho/fetchMorphoGoldsky.ts
30391
+ ({
30392
+ [Chain.SEI_NETWORK]: "https://api.goldsky.com/api/public/project_cmiergfbv4vma01vb642yaeam/subgraphs/morphoblue-sei/1.0.1/gn",
30393
+ [Chain.CELO_MAINNET]: "https://api.goldsky.com/api/public/project_cmiergfbv4vma01vb642yaeam/subgraphs/morphoblue-celo/1.0.4/gn",
30394
+ [Chain.LISK]: "https://api.goldsky.com/api/public/project_cmiergfbv4vma01vb642yaeam/subgraphs/morphobluelisk/1.0.1/gn",
30395
+ [Chain.SONEIUM]: "https://api.goldsky.com/api/public/project_cmiergfbv4vma01vb642yaeam/subgraphs/morphobluesoneium/1.0.2/gn",
30396
+ [Chain.TAC_MAINNET]: "https://api.goldsky.com/api/public/project_cmiergfbv4vma01vb642yaeam/subgraphs/morphoblue-tac/1.0.0/gn",
30397
+ [Chain.HEMI_NETWORK]: "https://feather.securesecrets.org/hemi-mopho-blue/"
30398
+ });
30399
+
30400
+ // src/prices/oracle-prices/fetchers/morpho.ts
30364
30401
  function morphoApiAvailable(chainId) {
30365
30402
  if (chainId === Chain.SONEIUM) return false;
30366
30403
  if (chainId === Chain.HEMI_NETWORK) return false;
@@ -30526,81 +30563,84 @@ async function fetchMorphoGraphQLPrices(chainId) {
30526
30563
  }
30527
30564
  allMarkets.push(...items);
30528
30565
  }
30529
- if (allMarkets.length === 0) {
30530
- console.warn(`[morpho-gql] chain ${chainId}: API returned 0 markets`);
30531
- return null;
30532
- }
30533
- const entries = [];
30534
- for (const market of allMarkets) {
30535
- if (!market.collateralAsset?.address || !market.loanAsset?.address)
30536
- continue;
30537
- const oracle = market.oracleAddress;
30538
- const loanAsset = market.loanAsset.address.toLowerCase();
30539
- const collateralAsset = market.collateralAsset.address.toLowerCase();
30540
- const marketId = market.uniqueKey?.replace(/^0x/i, "").toUpperCase() ?? generateMarketId(oracle, loanAsset, collateralAsset);
30541
- const lenderKey = generateMorphoLenderKey(marketId);
30542
- const loanPriceUSD = market.loanAsset.priceUsd;
30543
- const collateralPriceUSD = market.collateralAsset.priceUsd;
30544
- const statePrice = market.state?.price;
30545
- const oracleRatio = statePrice != null ? formatMorphoPrice(
30546
- statePrice,
30547
- market.loanAsset.decimals,
30548
- market.collateralAsset.decimals
30549
- ) : 0;
30550
- if (loanPriceUSD != null && loanPriceUSD > 0) {
30551
- const collateralUSD = oracleRatio > 0 ? oracleRatio * loanPriceUSD : collateralPriceUSD ?? 0;
30552
- if (collateralUSD > 0) {
30553
- entries.push({
30554
- asset: collateralAsset,
30555
- price: oracleRatio,
30556
- // Raw: collateral price in loan asset terms
30557
- priceUSD: collateralUSD,
30558
- marketUid: createMarketUid(chainId, lenderKey, collateralAsset),
30559
- targetLender: lenderKey
30560
- });
30561
- }
30562
- } else if (collateralPriceUSD != null && collateralPriceUSD > 0) {
30566
+ return processMarketsToEntries(chainId, allMarkets, "morpho-gql");
30567
+ } catch (err) {
30568
+ console.warn(`[morpho-gql] chain ${chainId}: API error, falling back to on-chain`, err);
30569
+ return null;
30570
+ }
30571
+ }
30572
+ function processMarketsToEntries(chainId, allMarkets, source) {
30573
+ if (allMarkets.length === 0) {
30574
+ console.warn(`[${source}] chain ${chainId}: returned 0 markets`);
30575
+ return null;
30576
+ }
30577
+ const entries = [];
30578
+ for (const market of allMarkets) {
30579
+ if (!market.collateralAsset?.address || !market.loanAsset?.address)
30580
+ continue;
30581
+ const oracle = market.oracleAddress;
30582
+ const loanAsset = market.loanAsset.address.toLowerCase();
30583
+ const collateralAsset = market.collateralAsset.address.toLowerCase();
30584
+ const marketId = market.uniqueKey?.replace(/^0x/i, "").toUpperCase() ?? generateMarketId(oracle, loanAsset, collateralAsset);
30585
+ const lenderKey = generateMorphoLenderKey(marketId);
30586
+ const loanPriceUSD = market.loanAsset.priceUsd;
30587
+ const collateralPriceUSD = market.collateralAsset.priceUsd;
30588
+ const statePrice = market.state?.price;
30589
+ const oracleRatio = statePrice != null ? formatMorphoPrice(
30590
+ statePrice,
30591
+ market.loanAsset.decimals,
30592
+ market.collateralAsset.decimals
30593
+ ) : 0;
30594
+ if (loanPriceUSD != null && loanPriceUSD > 0) {
30595
+ const collateralUSD = oracleRatio > 0 ? oracleRatio * loanPriceUSD : collateralPriceUSD ?? 0;
30596
+ if (collateralUSD > 0) {
30563
30597
  entries.push({
30564
30598
  asset: collateralAsset,
30565
30599
  price: oracleRatio,
30566
- // Raw oracle ratio
30567
- priceUSD: collateralPriceUSD,
30600
+ // Raw: collateral price in loan asset terms
30601
+ priceUSD: collateralUSD,
30568
30602
  marketUid: createMarketUid(chainId, lenderKey, collateralAsset),
30569
30603
  targetLender: lenderKey
30570
30604
  });
30571
30605
  }
30572
- if (collateralPriceUSD != null && collateralPriceUSD > 0) {
30573
- const loanUSD = oracleRatio > 0 ? collateralPriceUSD / oracleRatio : loanPriceUSD ?? 0;
30574
- if (loanUSD > 0) {
30575
- entries.push({
30576
- asset: loanAsset,
30577
- price: oracleRatio > 0 ? 1 / oracleRatio : 0,
30578
- // Raw: loan price in collateral terms
30579
- priceUSD: loanUSD,
30580
- marketUid: createMarketUid(chainId, lenderKey, loanAsset),
30581
- targetLender: lenderKey
30582
- });
30583
- }
30584
- } else if (loanPriceUSD != null && loanPriceUSD > 0) {
30606
+ } else if (collateralPriceUSD != null && collateralPriceUSD > 0) {
30607
+ entries.push({
30608
+ asset: collateralAsset,
30609
+ price: oracleRatio,
30610
+ // Raw oracle ratio
30611
+ priceUSD: collateralPriceUSD,
30612
+ marketUid: createMarketUid(chainId, lenderKey, collateralAsset),
30613
+ targetLender: lenderKey
30614
+ });
30615
+ }
30616
+ if (collateralPriceUSD != null && collateralPriceUSD > 0) {
30617
+ const loanUSD = oracleRatio > 0 ? collateralPriceUSD / oracleRatio : loanPriceUSD ?? 0;
30618
+ if (loanUSD > 0) {
30585
30619
  entries.push({
30586
30620
  asset: loanAsset,
30587
30621
  price: oracleRatio > 0 ? 1 / oracleRatio : 0,
30588
- // Raw oracle ratio
30589
- priceUSD: loanPriceUSD,
30622
+ // Raw: loan price in collateral terms
30623
+ priceUSD: loanUSD,
30590
30624
  marketUid: createMarketUid(chainId, lenderKey, loanAsset),
30591
30625
  targetLender: lenderKey
30592
30626
  });
30593
30627
  }
30628
+ } else if (loanPriceUSD != null && loanPriceUSD > 0) {
30629
+ entries.push({
30630
+ asset: loanAsset,
30631
+ price: oracleRatio > 0 ? 1 / oracleRatio : 0,
30632
+ // Raw oracle ratio
30633
+ priceUSD: loanPriceUSD,
30634
+ marketUid: createMarketUid(chainId, lenderKey, loanAsset),
30635
+ targetLender: lenderKey
30636
+ });
30594
30637
  }
30595
- if (entries.length === 0) {
30596
- console.warn(`[morpho-gql] chain ${chainId}: ${allMarkets.length} markets fetched but 0 price entries produced`);
30597
- return null;
30598
- }
30599
- return entries;
30600
- } catch (err) {
30601
- console.warn(`[morpho-gql] chain ${chainId}: API error, falling back to on-chain`, err);
30638
+ }
30639
+ if (entries.length === 0) {
30640
+ console.warn(`[${source}] chain ${chainId}: ${allMarkets.length} markets fetched but 0 price entries produced`);
30602
30641
  return null;
30603
30642
  }
30643
+ return entries;
30604
30644
  }
30605
30645
  var morphoFetcher = {
30606
30646
  getCalls: getMorphoCalls2,
@@ -32213,13 +32253,15 @@ async function fetchTokenMetadata(chain, addrs) {
32213
32253
  });
32214
32254
  return tokens;
32215
32255
  }
32216
- var BALANCE_FETCHER = "0x60134ad7491101c7fcb343ed8c7599e449430766";
32256
+ var BALANCE_FETCHER = "0xba1a8c699aCb7938e76B062673e00c9b56382310";
32217
32257
  var BALANCE_FETCHER_SELECTOR = "0x30fb0985";
32218
32258
  function encodeBalanceFetcherCalldata(accounts, tokens) {
32219
32259
  if (accounts.length < 1 || tokens.length < 1) {
32220
32260
  return "0x";
32221
32261
  }
32222
- const normalizedAccounts = accounts.map((a) => a.toLowerCase());
32262
+ const normalizedAccounts = accounts.map(
32263
+ (a) => a.toLowerCase()
32264
+ );
32223
32265
  const normalizedTokens = tokens.map((t) => t.toLowerCase());
32224
32266
  const header = encodePacked(
32225
32267
  ["uint16", "uint16"],
@@ -32293,7 +32335,10 @@ function prepareTokenBalanceRpcCalls(chainId, account, tokens, blockTag = "lates
32293
32335
  const normalizedAccount = account.toLowerCase();
32294
32336
  const normalizedTokens = tokens.map((t) => t.toLowerCase());
32295
32337
  const tokensWithNative = [zeroAddress, ...normalizedTokens];
32296
- const encodedCalldata = encodeBalanceFetcherCalldata([normalizedAccount], tokensWithNative);
32338
+ const encodedCalldata = encodeBalanceFetcherCalldata(
32339
+ [normalizedAccount],
32340
+ tokensWithNative
32341
+ );
32297
32342
  const dataLength = (encodedCalldata.length - 2) / 2;
32298
32343
  const paddedLength = Math.ceil(dataLength / 32) * 32;
32299
32344
  const offsetHex = "0000000000000000000000000000000000000000000000000000000000000020";
@@ -32380,7 +32425,12 @@ async function rpcFetchWithRetry(rpcUrls, body, maxRetries2) {
32380
32425
  }
32381
32426
  async function fetchTokenBalances(chainId, account, tokens, options = {}) {
32382
32427
  const { blockTag = "latest", rpcUrl, rpcUrls, maxRetries: maxRetries2 = 3 } = options;
32383
- const prepared = prepareTokenBalanceRpcCalls(chainId, account, tokens, blockTag);
32428
+ const prepared = prepareTokenBalanceRpcCalls(
32429
+ chainId,
32430
+ account,
32431
+ tokens,
32432
+ blockTag
32433
+ );
32384
32434
  let urls;
32385
32435
  if (rpcUrls?.length) {
32386
32436
  urls = rpcUrls;