@t2000/sdk 0.17.13 → 0.17.14

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.cjs CHANGED
@@ -1908,6 +1908,26 @@ function computeRates(reserve) {
1908
1908
  const depositAprPct = utilizationPct / 100 * (borrowAprPct / 100) * (1 - reserve.spreadFeeBps / 1e4) * 100;
1909
1909
  return { borrowAprPct, depositAprPct };
1910
1910
  }
1911
+ var MS_PER_YEAR = 365.25 * 24 * 3600 * 1e3;
1912
+ function computeDepositRewardApr(reserve, allReserves) {
1913
+ if (reserve.depositTotalShares <= 0 || reserve.price <= 0) return 0;
1914
+ const totalDepositValue = reserve.depositTotalShares / 10 ** reserve.mintDecimals * reserve.price;
1915
+ if (totalDepositValue <= 0) return 0;
1916
+ const priceMap = /* @__PURE__ */ new Map();
1917
+ for (const r of allReserves) {
1918
+ if (r.price > 0) priceMap.set(r.coinType, { price: r.price, decimals: r.mintDecimals });
1919
+ }
1920
+ let rewardApr = 0;
1921
+ for (const rw of reserve.depositPoolRewards) {
1922
+ const info = priceMap.get(rw.coinType);
1923
+ if (!info || info.price <= 0) continue;
1924
+ const durationMs = rw.endTimeMs - rw.startTimeMs;
1925
+ if (durationMs <= 0) continue;
1926
+ const annualTokens = rw.totalRewards / 10 ** info.decimals * (MS_PER_YEAR / durationMs);
1927
+ rewardApr += annualTokens * info.price / totalDepositValue * 100;
1928
+ }
1929
+ return rewardApr;
1930
+ }
1911
1931
  function cTokenRatio(reserve) {
1912
1932
  if (reserve.ctokenSupply === 0) return 1;
1913
1933
  const totalSupply = reserve.availableAmount + reserve.borrowedAmountWad / WAD - reserve.unclaimedSpreadFeesWad / WAD;
@@ -1927,6 +1947,18 @@ function parseReserve(raw, index) {
1927
1947
  const r = f(raw);
1928
1948
  const coinTypeField = f(r.coin_type);
1929
1949
  const config = f(f(r.config)?.element);
1950
+ const dMgr = f(r.deposits_pool_reward_manager);
1951
+ const rawRewards = Array.isArray(dMgr?.pool_rewards) ? dMgr.pool_rewards : [];
1952
+ const now = Date.now();
1953
+ const depositPoolRewards = rawRewards.filter((rw) => rw !== null).map((rw) => {
1954
+ const rwf = f(rw);
1955
+ return {
1956
+ coinType: str(f(rwf.coin_type)?.name),
1957
+ totalRewards: num(rwf.total_rewards),
1958
+ startTimeMs: num(rwf.start_time_ms),
1959
+ endTimeMs: num(rwf.end_time_ms)
1960
+ };
1961
+ }).filter((rw) => rw.endTimeMs > now && rw.totalRewards > 0);
1930
1962
  return {
1931
1963
  coinType: str(coinTypeField?.name),
1932
1964
  mintDecimals: num(r.mint_decimals),
@@ -1940,7 +1972,10 @@ function parseReserve(raw, index) {
1940
1972
  spreadFeeBps: num(config?.spread_fee_bps),
1941
1973
  interestRateUtils: Array.isArray(config?.interest_rate_utils) ? config.interest_rate_utils.map(num) : [],
1942
1974
  interestRateAprs: Array.isArray(config?.interest_rate_aprs) ? config.interest_rate_aprs.map(num) : [],
1943
- arrayIndex: index
1975
+ arrayIndex: index,
1976
+ price: num(f(r.price)?.value) / WAD,
1977
+ depositTotalShares: num(dMgr?.total_shares),
1978
+ depositPoolRewards
1944
1979
  };
1945
1980
  }
1946
1981
  function parseObligation(raw) {
@@ -2085,7 +2120,8 @@ var SuilendAdapter = class {
2085
2120
  const reserve = this.findReserve(reserves, asset);
2086
2121
  if (!reserve) throw new T2000Error("ASSET_NOT_SUPPORTED", `Suilend does not support ${asset}`);
2087
2122
  const { borrowAprPct, depositAprPct } = computeRates(reserve);
2088
- return { asset, saveApy: depositAprPct, borrowApy: borrowAprPct };
2123
+ const rewardApr = computeDepositRewardApr(reserve, reserves);
2124
+ return { asset, saveApy: depositAprPct + rewardApr, borrowApy: borrowAprPct };
2089
2125
  }
2090
2126
  async getPositions(address) {
2091
2127
  const supplies = [];
@@ -2102,7 +2138,8 @@ var SuilendAdapter = class {
2102
2138
  const ratio = cTokenRatio(reserve);
2103
2139
  const amount = dep.ctokenAmount * ratio / 10 ** reserve.mintDecimals;
2104
2140
  const { depositAprPct } = computeRates(reserve);
2105
- supplies.push({ asset: this.resolveSymbol(dep.coinType), amount, apy: depositAprPct });
2141
+ const rewardApr = computeDepositRewardApr(reserve, reserves);
2142
+ supplies.push({ asset: this.resolveSymbol(dep.coinType), amount, apy: depositAprPct + rewardApr });
2106
2143
  }
2107
2144
  for (const bor of obligation.borrows) {
2108
2145
  const reserve = reserves[bor.reserveIdx];