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