@t2000/sdk 0.17.12 → 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.
@@ -1236,6 +1236,26 @@ function computeRates(reserve) {
1236
1236
  const depositAprPct = utilizationPct / 100 * (borrowAprPct / 100) * (1 - reserve.spreadFeeBps / 1e4) * 100;
1237
1237
  return { borrowAprPct, depositAprPct };
1238
1238
  }
1239
+ var MS_PER_YEAR = 365.25 * 24 * 3600 * 1e3;
1240
+ function computeDepositRewardApr(reserve, allReserves) {
1241
+ if (reserve.depositTotalShares <= 0 || reserve.price <= 0) return 0;
1242
+ const totalDepositValue = reserve.depositTotalShares / 10 ** reserve.mintDecimals * reserve.price;
1243
+ if (totalDepositValue <= 0) return 0;
1244
+ const priceMap = /* @__PURE__ */ new Map();
1245
+ for (const r of allReserves) {
1246
+ if (r.price > 0) priceMap.set(r.coinType, { price: r.price, decimals: r.mintDecimals });
1247
+ }
1248
+ let rewardApr = 0;
1249
+ for (const rw of reserve.depositPoolRewards) {
1250
+ const info = priceMap.get(rw.coinType);
1251
+ if (!info || info.price <= 0) continue;
1252
+ const durationMs = rw.endTimeMs - rw.startTimeMs;
1253
+ if (durationMs <= 0) continue;
1254
+ const annualTokens = rw.totalRewards / 10 ** info.decimals * (MS_PER_YEAR / durationMs);
1255
+ rewardApr += annualTokens * info.price / totalDepositValue * 100;
1256
+ }
1257
+ return rewardApr;
1258
+ }
1239
1259
  function cTokenRatio(reserve) {
1240
1260
  if (reserve.ctokenSupply === 0) return 1;
1241
1261
  const totalSupply = reserve.availableAmount + reserve.borrowedAmountWad / WAD - reserve.unclaimedSpreadFeesWad / WAD;
@@ -1255,6 +1275,18 @@ function parseReserve(raw, index) {
1255
1275
  const r = f(raw);
1256
1276
  const coinTypeField = f(r.coin_type);
1257
1277
  const config = f(f(r.config)?.element);
1278
+ const dMgr = f(r.deposits_pool_reward_manager);
1279
+ const rawRewards = Array.isArray(dMgr?.pool_rewards) ? dMgr.pool_rewards : [];
1280
+ const now = Date.now();
1281
+ const depositPoolRewards = rawRewards.filter((rw) => rw !== null).map((rw) => {
1282
+ const rwf = f(rw);
1283
+ return {
1284
+ coinType: str(f(rwf.coin_type)?.name),
1285
+ totalRewards: num(rwf.total_rewards),
1286
+ startTimeMs: num(rwf.start_time_ms),
1287
+ endTimeMs: num(rwf.end_time_ms)
1288
+ };
1289
+ }).filter((rw) => rw.endTimeMs > now && rw.totalRewards > 0);
1258
1290
  return {
1259
1291
  coinType: str(coinTypeField?.name),
1260
1292
  mintDecimals: num(r.mint_decimals),
@@ -1268,7 +1300,10 @@ function parseReserve(raw, index) {
1268
1300
  spreadFeeBps: num(config?.spread_fee_bps),
1269
1301
  interestRateUtils: Array.isArray(config?.interest_rate_utils) ? config.interest_rate_utils.map(num) : [],
1270
1302
  interestRateAprs: Array.isArray(config?.interest_rate_aprs) ? config.interest_rate_aprs.map(num) : [],
1271
- arrayIndex: index
1303
+ arrayIndex: index,
1304
+ price: num(f(r.price)?.value) / WAD,
1305
+ depositTotalShares: num(dMgr?.total_shares),
1306
+ depositPoolRewards
1272
1307
  };
1273
1308
  }
1274
1309
  function parseObligation(raw) {
@@ -1413,7 +1448,8 @@ var SuilendAdapter = class {
1413
1448
  const reserve = this.findReserve(reserves, asset);
1414
1449
  if (!reserve) throw new T2000Error("ASSET_NOT_SUPPORTED", `Suilend does not support ${asset}`);
1415
1450
  const { borrowAprPct, depositAprPct } = computeRates(reserve);
1416
- return { asset, saveApy: depositAprPct, borrowApy: borrowAprPct };
1451
+ const rewardApr = computeDepositRewardApr(reserve, reserves);
1452
+ return { asset, saveApy: depositAprPct + rewardApr, borrowApy: borrowAprPct };
1417
1453
  }
1418
1454
  async getPositions(address) {
1419
1455
  const supplies = [];
@@ -1430,7 +1466,8 @@ var SuilendAdapter = class {
1430
1466
  const ratio = cTokenRatio(reserve);
1431
1467
  const amount = dep.ctokenAmount * ratio / 10 ** reserve.mintDecimals;
1432
1468
  const { depositAprPct } = computeRates(reserve);
1433
- supplies.push({ asset: this.resolveSymbol(dep.coinType), amount, apy: depositAprPct });
1469
+ const rewardApr = computeDepositRewardApr(reserve, reserves);
1470
+ supplies.push({ asset: this.resolveSymbol(dep.coinType), amount, apy: depositAprPct + rewardApr });
1434
1471
  }
1435
1472
  for (const bor of obligation.borrows) {
1436
1473
  const reserve = reserves[bor.reserveIdx];