@1delta/margin-fetcher 0.0.308 → 0.0.309

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
@@ -19580,7 +19580,7 @@ var getSiloV2ReservesDataConverter = (lender, chainId, prices, additionalYields,
19580
19580
  { self: market.silo0, other: market.silo1 },
19581
19581
  { self: market.silo1, other: market.silo0 }
19582
19582
  ];
19583
- const toBigInt13 = (v) => {
19583
+ const toBigInt14 = (v) => {
19584
19584
  if (v === void 0 || v === null || v === "0x") return 0n;
19585
19585
  if (typeof v === "bigint") return v;
19586
19586
  try {
@@ -19592,8 +19592,8 @@ var getSiloV2ReservesDataConverter = (lender, chainId, prices, additionalYields,
19592
19592
  for (let s = 0; s < 2; s++) {
19593
19593
  const { self, other } = sides[s];
19594
19594
  const slot = s * SILO_V2_CALLS_PER_SIDE;
19595
- const totalAssetsRaw = toBigInt13(data[slot]);
19596
- const debtAssetsRaw = toBigInt13(data[slot + 1]);
19595
+ const totalAssetsRaw = toBigInt14(data[slot]);
19596
+ const debtAssetsRaw = toBigInt14(data[slot + 1]);
19597
19597
  const irmConfigRaw = data[slot + 2];
19598
19598
  const decimals = self.decimals;
19599
19599
  const totalDeposits = Number(formatUnits(totalAssetsRaw, decimals));
@@ -19748,7 +19748,7 @@ var getSiloV3ReservesDataConverter = (lender, chainId, prices, additionalYields,
19748
19748
  { self: market.silo0, other: market.silo1 },
19749
19749
  { self: market.silo1, other: market.silo0 }
19750
19750
  ];
19751
- const toBigInt13 = (v) => {
19751
+ const toBigInt14 = (v) => {
19752
19752
  if (v === void 0 || v === null || v === "0x") return 0n;
19753
19753
  if (typeof v === "bigint") return v;
19754
19754
  try {
@@ -19760,8 +19760,8 @@ var getSiloV3ReservesDataConverter = (lender, chainId, prices, additionalYields,
19760
19760
  for (let s = 0; s < 2; s++) {
19761
19761
  const { self, other } = sides[s];
19762
19762
  const slot = s * SILO_V3_CALLS_PER_SIDE;
19763
- const totalAssetsRaw = toBigInt13(data[slot]);
19764
- const debtAssetsRaw = toBigInt13(data[slot + 1]);
19763
+ const totalAssetsRaw = toBigInt14(data[slot]);
19764
+ const debtAssetsRaw = toBigInt14(data[slot + 1]);
19765
19765
  const irmConfigRaw = data[slot + 2];
19766
19766
  const decimals = self.decimals;
19767
19767
  const totalDeposits = Number(formatUnits(totalAssetsRaw, decimals));
@@ -21534,6 +21534,7 @@ function lenderApiOnly(lender, chainId) {
21534
21534
  if (chainId === Chain.TAC_MAINNET) return false;
21535
21535
  if (chainId === Chain.FLARE_MAINNET) return false;
21536
21536
  if (chainId === Chain.PLUME_MAINNET) return false;
21537
+ if (chainId === Chain.KAIA_MAINNET) return false;
21537
21538
  if (chainId === "4114") return false;
21538
21539
  return true;
21539
21540
  }
@@ -45561,6 +45562,267 @@ var fetchLagoonVaults = async (chainId, prices = {}, tokenList = {}) => {
45561
45562
  return out;
45562
45563
  };
45563
45564
 
45565
+ // src/vaults/aave-earn/abis/shared.ts
45566
+ var Erc20MetaAbi = [
45567
+ {
45568
+ name: "decimals",
45569
+ type: "function",
45570
+ stateMutability: "view",
45571
+ inputs: [],
45572
+ outputs: [{ type: "uint8" }]
45573
+ },
45574
+ {
45575
+ name: "totalSupply",
45576
+ type: "function",
45577
+ stateMutability: "view",
45578
+ inputs: [],
45579
+ outputs: [{ type: "uint256" }]
45580
+ }
45581
+ ];
45582
+ var Erc4626ConvertAbi = [
45583
+ {
45584
+ name: "convertToAssets",
45585
+ type: "function",
45586
+ stateMutability: "view",
45587
+ inputs: [{ type: "uint256", name: "shares" }],
45588
+ outputs: [{ type: "uint256", name: "assets" }]
45589
+ }
45590
+ ];
45591
+
45592
+ // src/vaults/aave-earn/api.ts
45593
+ var AAVE_EARN_API_URL = "https://api.v3.aave.com/graphql";
45594
+ var PAGE_SIZE3 = "FIFTY";
45595
+ var VAULT_FIELDS = `
45596
+ address
45597
+ shareName
45598
+ shareSymbol
45599
+ owner
45600
+ chainId
45601
+ vaultApr { value formatted }
45602
+ fee { value formatted }
45603
+ balance { amount { raw decimals value } usd usdPerToken }
45604
+ usedReserve {
45605
+ underlyingToken { address symbol name decimals imageUrl }
45606
+ }`;
45607
+ var OWNED_VAULTS_QUERY = `
45608
+ query AaveEarnOwnedVaults($request: VaultsRequest!) {
45609
+ vaults(request: $request) {
45610
+ items {${VAULT_FIELDS}
45611
+ }
45612
+ pageInfo { next }
45613
+ }
45614
+ }`;
45615
+ var SINGLE_VAULT_QUERY = `
45616
+ query AaveEarnVault($request: VaultRequest!) {
45617
+ vault(request: $request) {${VAULT_FIELDS}
45618
+ }
45619
+ }`;
45620
+ async function postGraphql(query3, variables) {
45621
+ const response = await fetch(AAVE_EARN_API_URL, {
45622
+ method: "POST",
45623
+ headers: { "Content-Type": "application/json" },
45624
+ body: JSON.stringify({ query: query3, variables })
45625
+ });
45626
+ if (!response.ok) {
45627
+ throw new Error(
45628
+ `Aave Earn vaults API failed: ${response.status} - ${response.statusText}`
45629
+ );
45630
+ }
45631
+ const json = await response.json();
45632
+ if (json?.errors?.length) {
45633
+ throw new Error(
45634
+ `Aave Earn vaults API error: ${json.errors[0]?.message ?? "unknown"}`
45635
+ );
45636
+ }
45637
+ return json?.data;
45638
+ }
45639
+ async function fetchAaveEarnApiVaults(chainId, targets) {
45640
+ const target = Number(chainId);
45641
+ const byAddress = /* @__PURE__ */ new Map();
45642
+ const keep = (it) => {
45643
+ const addr = it?.address?.toLowerCase();
45644
+ if (!addr || Number(it.chainId) !== target) return;
45645
+ if (!byAddress.has(addr)) byAddress.set(addr, it);
45646
+ };
45647
+ for (const owner of targets.owners) {
45648
+ let cursor = null;
45649
+ for (let page = 0; page < 20; page++) {
45650
+ const request = {
45651
+ criteria: { ownedBy: [owner] },
45652
+ pageSize: PAGE_SIZE3
45653
+ };
45654
+ if (cursor) request.cursor = cursor;
45655
+ const data = await postGraphql(OWNED_VAULTS_QUERY, { request });
45656
+ for (const it of data?.vaults?.items ?? []) keep(it);
45657
+ cursor = data?.vaults?.pageInfo?.next ?? null;
45658
+ if (!cursor) break;
45659
+ }
45660
+ }
45661
+ for (const address of targets.vaults) {
45662
+ const data = await postGraphql(SINGLE_VAULT_QUERY, {
45663
+ request: { by: { address }, chainId: target }
45664
+ });
45665
+ keep(data?.vault);
45666
+ }
45667
+ return [...byAddress.values()];
45668
+ }
45669
+
45670
+ // src/vaults/aave-earn/registry.ts
45671
+ var EMPTY = { curators: [], vaults: [] };
45672
+ var AAVE_EARN_REGISTRY = {
45673
+ // Ethereum. Owners run vaults across multiple chains (CREATE3 factory
45674
+ // `0xa35995bb2fFC5F2b33379C2e95d00C20FbF71E70`), so the same owner is
45675
+ // listed on every chain it deploys to; the fetcher filters `ownedBy`
45676
+ // results down to the queried chain.
45677
+ "1": {
45678
+ curators: [
45679
+ // avWETH / avUSDC and 6 more across chains 1/56/42161.
45680
+ { owner: "0xfe9BCB07604842cC2F8780B75586F4EF18811668" },
45681
+ // avUSDC (Aave USDC Vault Shares).
45682
+ { owner: "0x4a7cCbB601d08B0450663b27408e6351727175A4" },
45683
+ // Limassol Vault (EURC).
45684
+ { owner: "0x888aD9A82a80f0865D872c210191B623edFc5649" }
45685
+ ],
45686
+ vaults: []
45687
+ },
45688
+ // BSC
45689
+ "56": {
45690
+ curators: [{ owner: "0xfe9BCB07604842cC2F8780B75586F4EF18811668" }],
45691
+ vaults: []
45692
+ },
45693
+ // Arbitrum
45694
+ "42161": {
45695
+ curators: [{ owner: "0xfe9BCB07604842cC2F8780B75586F4EF18811668" }],
45696
+ vaults: []
45697
+ }
45698
+ };
45699
+ var getAaveEarnRegistry = (chainId) => AAVE_EARN_REGISTRY[String(chainId)] ?? EMPTY;
45700
+ var hasAaveEarnVaults = (chainId) => {
45701
+ const reg = getAaveEarnRegistry(chainId);
45702
+ return reg.curators.length > 0 || reg.vaults.length > 0;
45703
+ };
45704
+ var resolveAaveEarnCuratorName = (chainId, owner) => {
45705
+ if (!owner) return void 0;
45706
+ const target = owner.toLowerCase();
45707
+ return getAaveEarnRegistry(chainId).curators.find(
45708
+ (c) => c.owner.toLowerCase() === target
45709
+ )?.name;
45710
+ };
45711
+
45712
+ // src/vaults/aave-earn/fetchPublic.ts
45713
+ var BRAND2 = "Aave";
45714
+ var toBigInt13 = (v) => {
45715
+ if (v === void 0 || v === null) return void 0;
45716
+ if (typeof v === "bigint") return v;
45717
+ if (typeof v === "number") return BigInt(v);
45718
+ if (typeof v === "string") {
45719
+ if (v === "" || v === "0x" || v === "0X") return void 0;
45720
+ try {
45721
+ return BigInt(v);
45722
+ } catch {
45723
+ return void 0;
45724
+ }
45725
+ }
45726
+ return void 0;
45727
+ };
45728
+ var num2 = (v) => {
45729
+ const n = Number(v);
45730
+ return Number.isFinite(n) ? n : 0;
45731
+ };
45732
+ var fetchAaveEarnVaults = async (chainId, multicallRetry, prices = {}, tokenList = {}) => {
45733
+ if (!hasAaveEarnVaults(chainId)) return {};
45734
+ const reg = getAaveEarnRegistry(chainId);
45735
+ const items = await fetchAaveEarnApiVaults(chainId, {
45736
+ owners: reg.curators.map((c) => c.owner),
45737
+ vaults: reg.vaults
45738
+ });
45739
+ const usable = items.filter(
45740
+ (v) => !!v?.address && !!v?.usedReserve?.underlyingToken?.address && v.usedReserve.underlyingToken.decimals != null
45741
+ );
45742
+ if (usable.length === 0) return {};
45743
+ const calls = usable.flatMap((v) => {
45744
+ const underlyingDec = v.usedReserve.underlyingToken.decimals;
45745
+ const shareUnit = 10n ** BigInt(underlyingDec);
45746
+ return [
45747
+ { address: v.address, name: "decimals", params: [] },
45748
+ { address: v.address, name: "totalSupply", params: [] },
45749
+ { address: v.address, name: "convertToAssets", params: [shareUnit] }
45750
+ ];
45751
+ });
45752
+ const abis = usable.flatMap(() => [
45753
+ Erc20MetaAbi,
45754
+ Erc20MetaAbi,
45755
+ Erc4626ConvertAbi
45756
+ ]);
45757
+ const rawResults = calls.length > 0 ? await multicallRetry({
45758
+ chain: chainId,
45759
+ calls,
45760
+ abi: abis
45761
+ }) : [];
45762
+ const out = {};
45763
+ for (let i = 0; i < usable.length; i++) {
45764
+ const v = usable[i];
45765
+ const slice = rawResults.slice(i * 3, i * 3 + 3);
45766
+ const addressLc = v.address.toLowerCase();
45767
+ const token = v.usedReserve.underlyingToken;
45768
+ const underlyingLc = token.address.toLowerCase();
45769
+ const assetDecimals = token.decimals;
45770
+ const shareDecOnChain = toBigInt13(slice[0]);
45771
+ const decimals = shareDecOnChain !== void 0 ? Number(shareDecOnChain) : assetDecimals;
45772
+ const totalSupply = toBigInt13(slice[1]);
45773
+ if (totalSupply === void 0) continue;
45774
+ const shareUnit = 10n ** BigInt(decimals);
45775
+ const underlyingUnit = 10n ** BigInt(assetDecimals);
45776
+ const convertToAssets = toBigInt13(slice[2]) ?? 0n;
45777
+ const convertToShares = convertToAssets > 0n ? shareUnit * underlyingUnit / convertToAssets : 0n;
45778
+ const totalAssetsRaw = v.balance?.amount?.raw ?? "0";
45779
+ const totalAssets = toBigInt13(totalAssetsRaw) ?? 0n;
45780
+ const totalAssetsFormatted = Number(totalAssets) / 10 ** assetDecimals;
45781
+ const asset = tokenList[underlyingLc];
45782
+ const priceUsd = prices[underlyingLc] ?? (v.balance?.usdPerToken != null ? num2(v.balance.usdPerToken) : void 0);
45783
+ const totalAssetsUsd = v.balance?.usd != null ? num2(v.balance.usd) : priceUsd !== void 0 ? totalAssetsFormatted * priceUsd : 0;
45784
+ const supplyRate = num2(v.vaultApr?.formatted);
45785
+ const rewardsRate = 0;
45786
+ const depositRate = supplyRate + rewardsRate;
45787
+ const fee = num2(v.fee?.value);
45788
+ const symbol = (v.shareSymbol ?? "").trim();
45789
+ const name = (v.shareName ?? "").trim() || symbol;
45790
+ const curatorName = resolveAaveEarnCuratorName(chainId, v.owner);
45791
+ const displayName = composeVaultDisplayName(
45792
+ BRAND2,
45793
+ curatorName,
45794
+ asset ?? (token.symbol ? {
45795
+ symbol: token.symbol} : void 0),
45796
+ name
45797
+ );
45798
+ out[addressLc] = {
45799
+ address: addressLc,
45800
+ underlying: underlyingLc,
45801
+ symbol,
45802
+ name,
45803
+ displayName,
45804
+ ...curatorName ? { curatorName } : {},
45805
+ owner: (v.owner ?? "").toLowerCase(),
45806
+ decimals,
45807
+ assetDecimals,
45808
+ totalAssets: totalAssets.toString(),
45809
+ totalSupply: totalSupply.toString(),
45810
+ convertToAssets: convertToAssets.toString(),
45811
+ convertToShares: convertToShares.toString(),
45812
+ supplyRate,
45813
+ rewardsRate,
45814
+ depositRate,
45815
+ fee,
45816
+ isErc4626: true,
45817
+ asset,
45818
+ priceUsd,
45819
+ totalAssetsFormatted,
45820
+ totalAssetsUsd
45821
+ };
45822
+ }
45823
+ return out;
45824
+ };
45825
+
45564
45826
  // src/vaults/upshift/api.ts
45565
45827
  var UPSHIFT_VAULTS_URL2 = "https://app.upshift.finance/api/proxy/vaults";
45566
45828
  var UPSHIFT_CHAIN_IDS = /* @__PURE__ */ new Set([
@@ -45598,7 +45860,7 @@ async function fetchUpshiftApiVaults() {
45598
45860
  }
45599
45861
 
45600
45862
  // src/vaults/upshift/fetchPublic.ts
45601
- var num2 = (v) => typeof v === "number" && Number.isFinite(v) ? v : null;
45863
+ var num3 = (v) => typeof v === "number" && Number.isFinite(v) ? v : null;
45602
45864
  var isEvmAddress = (a) => /^0x[0-9a-fA-F]{40}$/.test(a);
45603
45865
  var derivePricePerShare = (totalAssetsRaw, totalSupplyRaw, shareDecimals) => {
45604
45866
  try {
@@ -45625,12 +45887,12 @@ function parseVault8(v, chainId, prices, tokenList) {
45625
45887
  const totalAssetsFormatted = Number(
45626
45888
  parseRawAmount(totalAssetsRaw, assetDecimals)
45627
45889
  );
45628
- const base = num2(v.apy?.apy) ?? 0;
45629
- const campaign = num2(v.apy?.campaignApy);
45890
+ const base = num3(v.apy?.apy) ?? 0;
45891
+ const campaign = num3(v.apy?.campaignApy);
45630
45892
  const supplyRate = apyToAprPercent(base);
45631
45893
  const rewardsRate = campaign != null ? apyToAprPercent(campaign) : 0;
45632
45894
  const oracleKey = toOracleKey(assetMeta?.assetGroup) ?? toGenericPriceKey(assetAddr, chainId);
45633
- const apiTvlUsd = num2(v.latest_reported_tvl) ?? 0;
45895
+ const apiTvlUsd = num3(v.latest_reported_tvl) ?? 0;
45634
45896
  const impliedPriceUsd = totalAssetsFormatted > 0 ? apiTvlUsd / totalAssetsFormatted : 0;
45635
45897
  const priceUsd = prices[oracleKey] ?? prices[assetAddr] ?? impliedPriceUsd;
45636
45898
  const totalAssetsUsd = apiTvlUsd || totalAssetsFormatted * priceUsd;
@@ -45655,10 +45917,10 @@ function parseVault8(v, chainId, prices, tokenList) {
45655
45917
  rewardsRate,
45656
45918
  depositRate: supplyRate + rewardsRate,
45657
45919
  apy: {
45658
- base: num2(v.apy?.apy),
45920
+ base: num3(v.apy?.apy),
45659
45921
  campaign,
45660
- points: num2(v.apy?.pointsApy),
45661
- underlying: num2(v.apy?.underlyingApy)
45922
+ points: num3(v.apy?.pointsApy),
45923
+ underlying: num3(v.apy?.underlyingApy)
45662
45924
  },
45663
45925
  isDepositPaused: v.isDepositPaused ?? false,
45664
45926
  isWithdrawalPaused: v.isWithdrawalPaused ?? false,
@@ -45702,11 +45964,11 @@ var YEARN_CHAIN_IDS = /* @__PURE__ */ new Set([
45702
45964
  ]);
45703
45965
  var hasYearnVaults = (chainId) => YEARN_CHAIN_IDS.has(String(chainId));
45704
45966
  var isYearnV3 = (v) => typeof v?.version === "string" && v.version.startsWith("3.");
45705
- var PAGE_SIZE3 = 500;
45967
+ var PAGE_SIZE4 = 500;
45706
45968
  async function fetchYearnApiVaults(chainId) {
45707
45969
  const out = [];
45708
45970
  for (let page = 1; page <= 20; page++) {
45709
- const url = `${YEARN_YDAEMON_BASE}/${chainId}/vaults/all?limit=${PAGE_SIZE3}&page=${page}`;
45971
+ const url = `${YEARN_YDAEMON_BASE}/${chainId}/vaults/all?limit=${PAGE_SIZE4}&page=${page}`;
45710
45972
  const response = await fetch(url);
45711
45973
  if (!response.ok) {
45712
45974
  throw new Error(
@@ -45718,13 +45980,13 @@ async function fetchYearnApiVaults(chainId) {
45718
45980
  for (const v of items) {
45719
45981
  if (isYearnV3(v) && v.endorsed) out.push(v);
45720
45982
  }
45721
- if (items.length < PAGE_SIZE3) break;
45983
+ if (items.length < PAGE_SIZE4) break;
45722
45984
  }
45723
45985
  return out;
45724
45986
  }
45725
45987
 
45726
45988
  // src/vaults/yearn/fetchPublic.ts
45727
- var BRAND2 = "Yearn";
45989
+ var BRAND3 = "Yearn";
45728
45990
  var ZERO_ADDR = "0x0000000000000000000000000000000000000000";
45729
45991
  var YearnLiquidityAbi = [
45730
45992
  {
@@ -45767,9 +46029,9 @@ var asBig = (v) => {
45767
46029
  return null;
45768
46030
  }
45769
46031
  };
45770
- var num3 = (v) => typeof v === "number" && Number.isFinite(v) ? v : null;
46032
+ var num4 = (v) => typeof v === "number" && Number.isFinite(v) ? v : null;
45771
46033
  var toPct = (v) => {
45772
- const n = num3(v);
46034
+ const n = num4(v);
45773
46035
  return n == null ? 0 : n * 100;
45774
46036
  };
45775
46037
  var deriveTotalSupply = (totalAssetsRaw, pricePerShareRaw, decimals) => {
@@ -45801,27 +46063,27 @@ function parseVault9(v, chainId, prices, tokenList) {
45801
46063
  const totalAssetsFormatted = Number(
45802
46064
  parseRawAmount(totalAssetsRaw, assetDecimals)
45803
46065
  );
45804
- const realized = num3(v.apr?.netAPR);
45805
- const forward = num3(v.apr?.forwardAPR?.netAPR);
46066
+ const realized = num4(v.apr?.netAPR);
46067
+ const forward = num4(v.apr?.forwardAPR?.netAPR);
45806
46068
  const isForwardApr = realized == null && forward != null;
45807
46069
  const supplyRate = toPct(realized ?? forward);
45808
46070
  const rewardsRate = toPct(v.apr?.extra?.stakingRewardsAPR);
45809
46071
  const fee = toPct(v.apr?.fees?.performance);
45810
46072
  const oracleKey = toOracleKey(assetMeta?.assetGroup) ?? toGenericPriceKey(assetAddr, chainId);
45811
- const apiPrice = num3(v.tvl?.price) ?? 0;
46073
+ const apiPrice = num4(v.tvl?.price) ?? 0;
45812
46074
  const priceUsd = prices[oracleKey] ?? prices[assetAddr] ?? apiPrice;
45813
- const apiTvlUsd = num3(v.tvl?.tvl) ?? 0;
46075
+ const apiTvlUsd = num4(v.tvl?.tvl) ?? 0;
45814
46076
  const totalAssetsUsd = apiTvlUsd || totalAssetsFormatted * priceUsd;
45815
46077
  const name = (v.name ?? "").trim();
45816
46078
  const symbol = (v.symbol ?? "").trim();
45817
- const displayName = composeVaultDisplayName(BRAND2, BRAND2, assetMeta, name);
46079
+ const displayName = composeVaultDisplayName(BRAND3, BRAND3, assetMeta, name);
45818
46080
  return {
45819
46081
  address,
45820
46082
  underlying: assetAddr,
45821
46083
  symbol,
45822
46084
  name: name || symbol,
45823
46085
  displayName,
45824
- curatorName: BRAND2,
46086
+ curatorName: BRAND3,
45825
46087
  decimals,
45826
46088
  assetDecimals,
45827
46089
  totalAssets: totalAssetsRaw,
@@ -46089,7 +46351,10 @@ var SYNC_REDEMPTION_PROVIDERS = /* @__PURE__ */ new Set([
46089
46351
  "fluid",
46090
46352
  "gearbox",
46091
46353
  "silo",
46092
- "yearn"
46354
+ "yearn",
46355
+ // Aave Earn vaults are standard synchronous ERC-4626 wrappers over an
46356
+ // Aave v3 supply position — withdraw up to available reserve liquidity.
46357
+ "aave-earn"
46093
46358
  ]);
46094
46359
  var ASYNC_REDEMPTION_PROVIDERS = /* @__PURE__ */ new Set(["lagoon", "upshift"]);
46095
46360
  var classifyRedemption = (provider, v) => {
@@ -46242,6 +46507,7 @@ var stampVaultClassification = (data, chainId, tokenList = {}) => {
46242
46507
  stampBag(data.lst, "lst");
46243
46508
  stampBag(data.savings, "savings");
46244
46509
  stampBag(data.lagoon, "lagoon");
46510
+ stampBag(data["aave-earn"], "aave-earn");
46245
46511
  stampBag(data.upshift, "upshift");
46246
46512
  stampBag(data.yearn, "yearn");
46247
46513
  stampBag(data.hypercore, "hypercore", false);
@@ -47063,7 +47329,7 @@ var fetchGmxExecutionFees = async (chainId, multicallRetry, gasPriceWei) => {
47063
47329
  // src/vaults/gmx/fetchPublic.ts
47064
47330
  var GMX_TOKEN_DECIMALS = 18;
47065
47331
  var DEFAULT_PERIOD = "90d";
47066
- var num4 = (n) => typeof n === "number" && Number.isFinite(n) ? n : 0;
47332
+ var num5 = (n) => typeof n === "number" && Number.isFinite(n) ? n : 0;
47067
47333
  var minDefined = (a, b) => a == null ? b : b == null ? a : Math.min(a, b);
47068
47334
  var glvMarketRoomUsd = (cap, priceUsd) => {
47069
47335
  const currentUsd = Number(cap.balanceAmount) / 1e18 * priceUsd;
@@ -47097,9 +47363,9 @@ var fetchGmxVaults = async (chainId, multicallRetry, options) => {
47097
47363
  indexToken: indexToken ? indexToken.toLowerCase() : void 0,
47098
47364
  longSymbol,
47099
47365
  shortSymbol,
47100
- apy: num4(entry?.apy),
47101
- baseApy: num4(entry?.baseApy),
47102
- bonusApr: num4(entry?.bonusApr),
47366
+ apy: num5(entry?.apy),
47367
+ baseApy: num5(entry?.baseApy),
47368
+ bonusApr: num5(entry?.bonusApr),
47103
47369
  yieldProfile: "volatile",
47104
47370
  denomination: denominationFor(longSymbol, shortSymbol)
47105
47371
  };
@@ -47523,6 +47789,7 @@ function buildVaultLookup(data) {
47523
47789
  addEntries(data.lst, "lst");
47524
47790
  addEntries(data.savings, "savings");
47525
47791
  addEntries(data.lagoon, "lagoon");
47792
+ addEntries(data["aave-earn"], "aave-earn");
47526
47793
  addEntries(data.upshift, "upshift");
47527
47794
  addEntries(data.yearn, "yearn");
47528
47795
  return map;
@@ -47646,6 +47913,18 @@ var getVaultPublicDataAll = async (chainId, providers, multicallRetry, prices =
47646
47913
  })
47647
47914
  );
47648
47915
  }
47916
+ if (requested.has("aave-earn")) {
47917
+ tasks.push(
47918
+ fetchAaveEarnVaults(chainId, multicallRetry, prices, tokenList).then((res) => {
47919
+ out["aave-earn"] = res;
47920
+ }).catch((e) => {
47921
+ warn4(
47922
+ `[vaults] aave-earn fetch failed for chain ${chainId}:`,
47923
+ e?.message ?? e
47924
+ );
47925
+ })
47926
+ );
47927
+ }
47649
47928
  if (requested.has("upshift")) {
47650
47929
  tasks.push(
47651
47930
  fetchUpshiftVaults(chainId, prices, tokenList).then((res) => {