@1delta/margin-fetcher 0.0.307 → 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
@@ -6917,6 +6917,7 @@ var Chain = /* @__PURE__ */ ((Chain2) => {
6917
6917
  Chain2["AREON_NETWORK_MAINNET"] = "463";
6918
6918
  Chain2["MST_CHAIN"] = "4646";
6919
6919
  Chain2["APPCHAIN"] = "466";
6920
+ Chain2["ROBINHOOD_CHAIN"] = "4663";
6920
6921
  Chain2["IOTEX_NETWORK_MAINNET"] = "4689";
6921
6922
  Chain2["ACRIA_INTELLICHAIN"] = "47";
6922
6923
  Chain2["ULTRA_PRO_MAINNET"] = "473861";
@@ -19579,7 +19580,7 @@ var getSiloV2ReservesDataConverter = (lender, chainId, prices, additionalYields,
19579
19580
  { self: market.silo0, other: market.silo1 },
19580
19581
  { self: market.silo1, other: market.silo0 }
19581
19582
  ];
19582
- const toBigInt13 = (v) => {
19583
+ const toBigInt14 = (v) => {
19583
19584
  if (v === void 0 || v === null || v === "0x") return 0n;
19584
19585
  if (typeof v === "bigint") return v;
19585
19586
  try {
@@ -19591,8 +19592,8 @@ var getSiloV2ReservesDataConverter = (lender, chainId, prices, additionalYields,
19591
19592
  for (let s = 0; s < 2; s++) {
19592
19593
  const { self, other } = sides[s];
19593
19594
  const slot = s * SILO_V2_CALLS_PER_SIDE;
19594
- const totalAssetsRaw = toBigInt13(data[slot]);
19595
- const debtAssetsRaw = toBigInt13(data[slot + 1]);
19595
+ const totalAssetsRaw = toBigInt14(data[slot]);
19596
+ const debtAssetsRaw = toBigInt14(data[slot + 1]);
19596
19597
  const irmConfigRaw = data[slot + 2];
19597
19598
  const decimals = self.decimals;
19598
19599
  const totalDeposits = Number(formatUnits(totalAssetsRaw, decimals));
@@ -19747,7 +19748,7 @@ var getSiloV3ReservesDataConverter = (lender, chainId, prices, additionalYields,
19747
19748
  { self: market.silo0, other: market.silo1 },
19748
19749
  { self: market.silo1, other: market.silo0 }
19749
19750
  ];
19750
- const toBigInt13 = (v) => {
19751
+ const toBigInt14 = (v) => {
19751
19752
  if (v === void 0 || v === null || v === "0x") return 0n;
19752
19753
  if (typeof v === "bigint") return v;
19753
19754
  try {
@@ -19759,8 +19760,8 @@ var getSiloV3ReservesDataConverter = (lender, chainId, prices, additionalYields,
19759
19760
  for (let s = 0; s < 2; s++) {
19760
19761
  const { self, other } = sides[s];
19761
19762
  const slot = s * SILO_V3_CALLS_PER_SIDE;
19762
- const totalAssetsRaw = toBigInt13(data[slot]);
19763
- const debtAssetsRaw = toBigInt13(data[slot + 1]);
19763
+ const totalAssetsRaw = toBigInt14(data[slot]);
19764
+ const debtAssetsRaw = toBigInt14(data[slot + 1]);
19764
19765
  const irmConfigRaw = data[slot + 2];
19765
19766
  const decimals = self.decimals;
19766
19767
  const totalDeposits = Number(formatUnits(totalAssetsRaw, decimals));
@@ -21533,6 +21534,7 @@ function lenderApiOnly(lender, chainId) {
21533
21534
  if (chainId === Chain.TAC_MAINNET) return false;
21534
21535
  if (chainId === Chain.FLARE_MAINNET) return false;
21535
21536
  if (chainId === Chain.PLUME_MAINNET) return false;
21537
+ if (chainId === Chain.KAIA_MAINNET) return false;
21536
21538
  if (chainId === "4114") return false;
21537
21539
  return true;
21538
21540
  }
@@ -45560,6 +45562,267 @@ var fetchLagoonVaults = async (chainId, prices = {}, tokenList = {}) => {
45560
45562
  return out;
45561
45563
  };
45562
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
+
45563
45826
  // src/vaults/upshift/api.ts
45564
45827
  var UPSHIFT_VAULTS_URL2 = "https://app.upshift.finance/api/proxy/vaults";
45565
45828
  var UPSHIFT_CHAIN_IDS = /* @__PURE__ */ new Set([
@@ -45597,7 +45860,7 @@ async function fetchUpshiftApiVaults() {
45597
45860
  }
45598
45861
 
45599
45862
  // src/vaults/upshift/fetchPublic.ts
45600
- var num2 = (v) => typeof v === "number" && Number.isFinite(v) ? v : null;
45863
+ var num3 = (v) => typeof v === "number" && Number.isFinite(v) ? v : null;
45601
45864
  var isEvmAddress = (a) => /^0x[0-9a-fA-F]{40}$/.test(a);
45602
45865
  var derivePricePerShare = (totalAssetsRaw, totalSupplyRaw, shareDecimals) => {
45603
45866
  try {
@@ -45624,12 +45887,12 @@ function parseVault8(v, chainId, prices, tokenList) {
45624
45887
  const totalAssetsFormatted = Number(
45625
45888
  parseRawAmount(totalAssetsRaw, assetDecimals)
45626
45889
  );
45627
- const base = num2(v.apy?.apy) ?? 0;
45628
- const campaign = num2(v.apy?.campaignApy);
45890
+ const base = num3(v.apy?.apy) ?? 0;
45891
+ const campaign = num3(v.apy?.campaignApy);
45629
45892
  const supplyRate = apyToAprPercent(base);
45630
45893
  const rewardsRate = campaign != null ? apyToAprPercent(campaign) : 0;
45631
45894
  const oracleKey = toOracleKey(assetMeta?.assetGroup) ?? toGenericPriceKey(assetAddr, chainId);
45632
- const apiTvlUsd = num2(v.latest_reported_tvl) ?? 0;
45895
+ const apiTvlUsd = num3(v.latest_reported_tvl) ?? 0;
45633
45896
  const impliedPriceUsd = totalAssetsFormatted > 0 ? apiTvlUsd / totalAssetsFormatted : 0;
45634
45897
  const priceUsd = prices[oracleKey] ?? prices[assetAddr] ?? impliedPriceUsd;
45635
45898
  const totalAssetsUsd = apiTvlUsd || totalAssetsFormatted * priceUsd;
@@ -45654,10 +45917,10 @@ function parseVault8(v, chainId, prices, tokenList) {
45654
45917
  rewardsRate,
45655
45918
  depositRate: supplyRate + rewardsRate,
45656
45919
  apy: {
45657
- base: num2(v.apy?.apy),
45920
+ base: num3(v.apy?.apy),
45658
45921
  campaign,
45659
- points: num2(v.apy?.pointsApy),
45660
- underlying: num2(v.apy?.underlyingApy)
45922
+ points: num3(v.apy?.pointsApy),
45923
+ underlying: num3(v.apy?.underlyingApy)
45661
45924
  },
45662
45925
  isDepositPaused: v.isDepositPaused ?? false,
45663
45926
  isWithdrawalPaused: v.isWithdrawalPaused ?? false,
@@ -45701,11 +45964,11 @@ var YEARN_CHAIN_IDS = /* @__PURE__ */ new Set([
45701
45964
  ]);
45702
45965
  var hasYearnVaults = (chainId) => YEARN_CHAIN_IDS.has(String(chainId));
45703
45966
  var isYearnV3 = (v) => typeof v?.version === "string" && v.version.startsWith("3.");
45704
- var PAGE_SIZE3 = 500;
45967
+ var PAGE_SIZE4 = 500;
45705
45968
  async function fetchYearnApiVaults(chainId) {
45706
45969
  const out = [];
45707
45970
  for (let page = 1; page <= 20; page++) {
45708
- 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}`;
45709
45972
  const response = await fetch(url);
45710
45973
  if (!response.ok) {
45711
45974
  throw new Error(
@@ -45717,13 +45980,13 @@ async function fetchYearnApiVaults(chainId) {
45717
45980
  for (const v of items) {
45718
45981
  if (isYearnV3(v) && v.endorsed) out.push(v);
45719
45982
  }
45720
- if (items.length < PAGE_SIZE3) break;
45983
+ if (items.length < PAGE_SIZE4) break;
45721
45984
  }
45722
45985
  return out;
45723
45986
  }
45724
45987
 
45725
45988
  // src/vaults/yearn/fetchPublic.ts
45726
- var BRAND2 = "Yearn";
45989
+ var BRAND3 = "Yearn";
45727
45990
  var ZERO_ADDR = "0x0000000000000000000000000000000000000000";
45728
45991
  var YearnLiquidityAbi = [
45729
45992
  {
@@ -45766,9 +46029,9 @@ var asBig = (v) => {
45766
46029
  return null;
45767
46030
  }
45768
46031
  };
45769
- var num3 = (v) => typeof v === "number" && Number.isFinite(v) ? v : null;
46032
+ var num4 = (v) => typeof v === "number" && Number.isFinite(v) ? v : null;
45770
46033
  var toPct = (v) => {
45771
- const n = num3(v);
46034
+ const n = num4(v);
45772
46035
  return n == null ? 0 : n * 100;
45773
46036
  };
45774
46037
  var deriveTotalSupply = (totalAssetsRaw, pricePerShareRaw, decimals) => {
@@ -45800,27 +46063,27 @@ function parseVault9(v, chainId, prices, tokenList) {
45800
46063
  const totalAssetsFormatted = Number(
45801
46064
  parseRawAmount(totalAssetsRaw, assetDecimals)
45802
46065
  );
45803
- const realized = num3(v.apr?.netAPR);
45804
- const forward = num3(v.apr?.forwardAPR?.netAPR);
46066
+ const realized = num4(v.apr?.netAPR);
46067
+ const forward = num4(v.apr?.forwardAPR?.netAPR);
45805
46068
  const isForwardApr = realized == null && forward != null;
45806
46069
  const supplyRate = toPct(realized ?? forward);
45807
46070
  const rewardsRate = toPct(v.apr?.extra?.stakingRewardsAPR);
45808
46071
  const fee = toPct(v.apr?.fees?.performance);
45809
46072
  const oracleKey = toOracleKey(assetMeta?.assetGroup) ?? toGenericPriceKey(assetAddr, chainId);
45810
- const apiPrice = num3(v.tvl?.price) ?? 0;
46073
+ const apiPrice = num4(v.tvl?.price) ?? 0;
45811
46074
  const priceUsd = prices[oracleKey] ?? prices[assetAddr] ?? apiPrice;
45812
- const apiTvlUsd = num3(v.tvl?.tvl) ?? 0;
46075
+ const apiTvlUsd = num4(v.tvl?.tvl) ?? 0;
45813
46076
  const totalAssetsUsd = apiTvlUsd || totalAssetsFormatted * priceUsd;
45814
46077
  const name = (v.name ?? "").trim();
45815
46078
  const symbol = (v.symbol ?? "").trim();
45816
- const displayName = composeVaultDisplayName(BRAND2, BRAND2, assetMeta, name);
46079
+ const displayName = composeVaultDisplayName(BRAND3, BRAND3, assetMeta, name);
45817
46080
  return {
45818
46081
  address,
45819
46082
  underlying: assetAddr,
45820
46083
  symbol,
45821
46084
  name: name || symbol,
45822
46085
  displayName,
45823
- curatorName: BRAND2,
46086
+ curatorName: BRAND3,
45824
46087
  decimals,
45825
46088
  assetDecimals,
45826
46089
  totalAssets: totalAssetsRaw,
@@ -46088,7 +46351,10 @@ var SYNC_REDEMPTION_PROVIDERS = /* @__PURE__ */ new Set([
46088
46351
  "fluid",
46089
46352
  "gearbox",
46090
46353
  "silo",
46091
- "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"
46092
46358
  ]);
46093
46359
  var ASYNC_REDEMPTION_PROVIDERS = /* @__PURE__ */ new Set(["lagoon", "upshift"]);
46094
46360
  var classifyRedemption = (provider, v) => {
@@ -46241,6 +46507,7 @@ var stampVaultClassification = (data, chainId, tokenList = {}) => {
46241
46507
  stampBag(data.lst, "lst");
46242
46508
  stampBag(data.savings, "savings");
46243
46509
  stampBag(data.lagoon, "lagoon");
46510
+ stampBag(data["aave-earn"], "aave-earn");
46244
46511
  stampBag(data.upshift, "upshift");
46245
46512
  stampBag(data.yearn, "yearn");
46246
46513
  stampBag(data.hypercore, "hypercore", false);
@@ -47062,7 +47329,7 @@ var fetchGmxExecutionFees = async (chainId, multicallRetry, gasPriceWei) => {
47062
47329
  // src/vaults/gmx/fetchPublic.ts
47063
47330
  var GMX_TOKEN_DECIMALS = 18;
47064
47331
  var DEFAULT_PERIOD = "90d";
47065
- var num4 = (n) => typeof n === "number" && Number.isFinite(n) ? n : 0;
47332
+ var num5 = (n) => typeof n === "number" && Number.isFinite(n) ? n : 0;
47066
47333
  var minDefined = (a, b) => a == null ? b : b == null ? a : Math.min(a, b);
47067
47334
  var glvMarketRoomUsd = (cap, priceUsd) => {
47068
47335
  const currentUsd = Number(cap.balanceAmount) / 1e18 * priceUsd;
@@ -47096,9 +47363,9 @@ var fetchGmxVaults = async (chainId, multicallRetry, options) => {
47096
47363
  indexToken: indexToken ? indexToken.toLowerCase() : void 0,
47097
47364
  longSymbol,
47098
47365
  shortSymbol,
47099
- apy: num4(entry?.apy),
47100
- baseApy: num4(entry?.baseApy),
47101
- bonusApr: num4(entry?.bonusApr),
47366
+ apy: num5(entry?.apy),
47367
+ baseApy: num5(entry?.baseApy),
47368
+ bonusApr: num5(entry?.bonusApr),
47102
47369
  yieldProfile: "volatile",
47103
47370
  denomination: denominationFor(longSymbol, shortSymbol)
47104
47371
  };
@@ -47522,6 +47789,7 @@ function buildVaultLookup(data) {
47522
47789
  addEntries(data.lst, "lst");
47523
47790
  addEntries(data.savings, "savings");
47524
47791
  addEntries(data.lagoon, "lagoon");
47792
+ addEntries(data["aave-earn"], "aave-earn");
47525
47793
  addEntries(data.upshift, "upshift");
47526
47794
  addEntries(data.yearn, "yearn");
47527
47795
  return map;
@@ -47645,6 +47913,18 @@ var getVaultPublicDataAll = async (chainId, providers, multicallRetry, prices =
47645
47913
  })
47646
47914
  );
47647
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
+ }
47648
47928
  if (requested.has("upshift")) {
47649
47929
  tasks.push(
47650
47930
  fetchUpshiftVaults(chainId, prices, tokenList).then((res) => {