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