@moonwell-fi/moonwell-sdk 0.10.3 → 0.10.5

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.
Files changed (46) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/_cjs/actions/core/markets/common.js +6 -6
  3. package/_cjs/actions/core/markets/common.js.map +1 -1
  4. package/_cjs/actions/core/markets/getMarketSnapshots.js +8 -0
  5. package/_cjs/actions/core/markets/getMarketSnapshots.js.map +1 -1
  6. package/_cjs/actions/lunar-indexer-transformers.js +2 -0
  7. package/_cjs/actions/lunar-indexer-transformers.js.map +1 -1
  8. package/_cjs/actions/morpho/markets/common.js +3 -2
  9. package/_cjs/actions/morpho/markets/common.js.map +1 -1
  10. package/_cjs/actions/morpho/markets/getMarketSnapshots.js +6 -0
  11. package/_cjs/actions/morpho/markets/getMarketSnapshots.js.map +1 -1
  12. package/_cjs/actions/morpho/markets/lunarIndexerTransform.js +4 -0
  13. package/_cjs/actions/morpho/markets/lunarIndexerTransform.js.map +1 -1
  14. package/_cjs/errors/version.js +1 -1
  15. package/_esm/actions/core/markets/common.js +12 -10
  16. package/_esm/actions/core/markets/common.js.map +1 -1
  17. package/_esm/actions/core/markets/getMarketSnapshots.js +8 -0
  18. package/_esm/actions/core/markets/getMarketSnapshots.js.map +1 -1
  19. package/_esm/actions/lunar-indexer-transformers.js +2 -0
  20. package/_esm/actions/lunar-indexer-transformers.js.map +1 -1
  21. package/_esm/actions/morpho/markets/common.js +3 -2
  22. package/_esm/actions/morpho/markets/common.js.map +1 -1
  23. package/_esm/actions/morpho/markets/getMarketSnapshots.js +6 -0
  24. package/_esm/actions/morpho/markets/getMarketSnapshots.js.map +1 -1
  25. package/_esm/actions/morpho/markets/lunarIndexerTransform.js +4 -0
  26. package/_esm/actions/morpho/markets/lunarIndexerTransform.js.map +1 -1
  27. package/_esm/errors/version.js +1 -1
  28. package/_types/actions/core/markets/common.d.ts.map +1 -1
  29. package/_types/actions/core/markets/getMarketSnapshots.d.ts.map +1 -1
  30. package/_types/actions/lunar-indexer-transformers.d.ts.map +1 -1
  31. package/_types/actions/morpho/markets/getMarketSnapshots.d.ts +2 -0
  32. package/_types/actions/morpho/markets/getMarketSnapshots.d.ts.map +1 -1
  33. package/_types/actions/morpho/markets/lunarIndexerTransform.d.ts +2 -0
  34. package/_types/actions/morpho/markets/lunarIndexerTransform.d.ts.map +1 -1
  35. package/_types/errors/version.d.ts +1 -1
  36. package/_types/types/market.d.ts +2 -0
  37. package/_types/types/market.d.ts.map +1 -1
  38. package/actions/core/markets/common.ts +14 -11
  39. package/actions/core/markets/getMarketSnapshots.ts +9 -0
  40. package/actions/lunar-indexer-transformers.ts +2 -0
  41. package/actions/morpho/markets/common.ts +3 -2
  42. package/actions/morpho/markets/getMarketSnapshots.ts +23 -0
  43. package/actions/morpho/markets/lunarIndexerTransform.ts +11 -0
  44. package/errors/version.ts +1 -1
  45. package/package.json +1 -1
  46. package/types/market.ts +2 -0
@@ -236,9 +236,10 @@ export const getMarketsData = async (environment: Environment) => {
236
236
  : tokenPrice;
237
237
 
238
238
  if (price) {
239
- // USDC on-chain returns borrowIncentivesPerSec=1 (1 wei) as a
240
- // placeholder when there are no active borrow incentives. Treat as zero.
241
- if (token.symbol === "USDC" && borrowIncentivesPerSec === 1n) {
239
+ // On-chain contracts use borrowIncentivesPerSec=1 (1 wei) as a
240
+ // placeholder when there are no active borrow incentives, because
241
+ // setting it to 0 triggers a known smart contract bug. Treat as zero.
242
+ if (borrowIncentivesPerSec === 1n) {
242
243
  borrowIncentivesPerSec = 0n;
243
244
  }
244
245
 
@@ -634,13 +635,19 @@ async function fetchMarketsFromLunar(
634
635
  let supplyApr: number;
635
636
  let borrowApr: number;
636
637
 
638
+ // On-chain contracts use borrowIncentivesPerSec=1 (1 wei) as a
639
+ // placeholder when there are no active borrow incentives, because
640
+ // setting it to 0 triggers a known smart contract bug. Treat as zero.
641
+ const isBorrowPlaceholder =
642
+ BigInt(incentive.borrowIncentivesPerSec) === 1n;
643
+
637
644
  if (
638
645
  incentive.priceUsd !== null &&
639
646
  incentive.supplyApr !== null &&
640
647
  incentive.borrowApr !== null
641
648
  ) {
642
649
  supplyApr = Number(incentive.supplyApr);
643
- borrowApr = -Number(incentive.borrowApr);
650
+ borrowApr = isBorrowPlaceholder ? 0 : -Number(incentive.borrowApr);
644
651
  } else {
645
652
  const isGovernanceToken =
646
653
  token.symbol === environment.custom?.governance?.token;
@@ -656,15 +663,11 @@ async function fetchMarketsFromLunar(
656
663
  continue;
657
664
  }
658
665
 
659
- let borrowIncentivesPerSec = BigInt(incentive.borrowIncentivesPerSec);
666
+ const borrowIncentivesPerSec = isBorrowPlaceholder
667
+ ? 0n
668
+ : BigInt(incentive.borrowIncentivesPerSec);
660
669
  const supplyIncentivesPerSec = BigInt(incentive.supplyIncentivesPerSec);
661
670
 
662
- // USDC on-chain returns borrowIncentivesPerSec=1 (1 wei) as a
663
- // placeholder when there are no active borrow incentives. Treat as zero.
664
- if (token.symbol === "USDC" && borrowIncentivesPerSec === 1n) {
665
- borrowIncentivesPerSec = 0n;
666
- }
667
-
668
671
  const supplyRewardsPerDayUsd =
669
672
  perDay(new Amount(supplyIncentivesPerSec, token.decimals).value) *
670
673
  price;
@@ -326,6 +326,8 @@ async function fetchCoreMarketSnapshotsFromPonder(
326
326
  totalBorrowsUsd: borrowUsd,
327
327
  totalLiquidity: liquidity,
328
328
  totalLiquidityUsd: liquidityUsd,
329
+ totalReallocatableLiquidity: 0,
330
+ totalReallocatableLiquidityUsd: 0,
329
331
  baseSupplyApy: point.baseSupplyApy,
330
332
  baseBorrowApy: point.baseBorrowApy,
331
333
  collateralTokenPrice: price,
@@ -552,12 +554,17 @@ export async function fetchIsolatedMarketSnapshots(
552
554
  collateralTokenPrice > 0
553
555
  ? snapshot.totalLiquidityUsd / collateralTokenPrice
554
556
  : snapshot.totalLiquidity;
557
+ const totalReallocatableLiquidity =
558
+ collateralTokenPrice > 0
559
+ ? snapshot.totalReallocatableLiquidityUsd / collateralTokenPrice
560
+ : snapshot.totalReallocatableLiquidity;
555
561
 
556
562
  return {
557
563
  ...snapshot,
558
564
  collateralTokenPrice,
559
565
  totalSupply,
560
566
  totalLiquidity,
567
+ totalReallocatableLiquidity,
561
568
  };
562
569
  });
563
570
  }
@@ -790,6 +797,8 @@ async function fetchIsolatedMarketSnapshotsFromBlueApi(
790
797
  totalSupplyUsd: Number(supplyAssetsUsd.y),
791
798
  totalLiquidity,
792
799
  totalLiquidityUsd: Number(liquidityAssetsUsd.y),
800
+ totalReallocatableLiquidity: 0,
801
+ totalReallocatableLiquidityUsd: 0,
793
802
  baseSupplyApy: supplyApy.y,
794
803
  baseBorrowApy: borrowApy.y,
795
804
  loanTokenPrice,
@@ -40,6 +40,8 @@ export function transformMarketSnapshot(
40
40
  totalBorrowsUsd: Number(lunar.totalBorrowsUSD),
41
41
  totalLiquidity: Number(lunar.totalLiquidity),
42
42
  totalLiquidityUsd: Number(lunar.totalLiquidityUSD),
43
+ totalReallocatableLiquidity: 0,
44
+ totalReallocatableLiquidityUsd: 0,
43
45
  baseSupplyApy: Number(lunar.baseSupplyApy),
44
46
  baseBorrowApy: Number(lunar.baseBorrowApy),
45
47
  timestamp: Number(lunar.timestamp) * 1000, // Convert unix timestamp to milliseconds
@@ -718,12 +718,13 @@ async function getMorphoMarketRewards(
718
718
 
719
719
  if (result) {
720
720
  const markets = result.markets.items.map((item) => {
721
+ const loanAssetDecimals = item.loanAsset.decimals;
721
722
  const mapping: GetMorphoMarketsRewardsReturnType = {
722
723
  chainId: item.morphoBlue.chain.id,
723
724
  marketId: item.uniqueKey,
724
725
  reallocatableLiquidityAssets: new Amount(
725
726
  BigInt(item.reallocatableLiquidityAssets),
726
- item.loanAsset.decimals,
727
+ loanAssetDecimals,
727
728
  ),
728
729
  // Note: The Morpho GraphQL API may return null for collateralAssets and
729
730
  // collateralAssetsUsd for markets with no collateral deposited or during data sync.
@@ -738,7 +739,7 @@ async function getMorphoMarketRewards(
738
739
  collateralAssetsUsd: item.state.collateralAssetsUsd ?? null,
739
740
  publicAllocatorSharedLiquidity: item.publicAllocatorSharedLiquidity.map(
740
741
  (item) => ({
741
- assets: Number(item.assets),
742
+ assets: Number(item.assets) / 10 ** loanAssetDecimals,
742
743
  vault: {
743
744
  address: item.vault.address,
744
745
  name: item.vault.name,
@@ -16,9 +16,11 @@ export type MarketSnapshot = {
16
16
  totalSupplyAssets: Amount;
17
17
  totalBorrowAssets: Amount;
18
18
  totalLiquidity: Amount;
19
+ totalReallocatableLiquidity: Amount;
19
20
  totalSupplyAssetsUsd: number;
20
21
  totalBorrowAssetsUsd: number;
21
22
  totalLiquidityUsd: number;
23
+ totalReallocatableLiquidityUsd: number;
22
24
  loanTokenPrice: number;
23
25
  collateralTokenPrice: number;
24
26
  supplyApy: number;
@@ -105,9 +107,16 @@ export async function getMarketSnapshots<
105
107
  BigInt(Math.round(s.totalLiquidity * 10 ** loanToken.decimals)),
106
108
  loanToken.decimals,
107
109
  ),
110
+ totalReallocatableLiquidity: new Amount(
111
+ BigInt(
112
+ Math.round(s.totalReallocatableLiquidity * 10 ** loanToken.decimals),
113
+ ),
114
+ loanToken.decimals,
115
+ ),
108
116
  totalSupplyAssetsUsd: s.totalSupplyUsd,
109
117
  totalBorrowAssetsUsd: s.totalBorrowsUsd,
110
118
  totalLiquidityUsd: s.totalLiquidityUsd,
119
+ totalReallocatableLiquidityUsd: s.totalReallocatableLiquidityUsd,
111
120
  loanTokenPrice: s.loanTokenPrice,
112
121
  collateralTokenPrice: s.collateralTokenPrice,
113
122
  supplyApy: s.baseSupplyApy,
@@ -181,15 +190,29 @@ export async function getMarketSnapshots<
181
190
  loanToken.decimals,
182
191
  );
183
192
 
193
+ const totalReallocatableLiquidity = new Amount(
194
+ BigInt(
195
+ Math.floor(
196
+ Number.parseFloat(snapshot.totalReallocatableLiquidity ?? "0") *
197
+ 10 ** loanToken.decimals,
198
+ ),
199
+ ),
200
+ loanToken.decimals,
201
+ );
202
+
184
203
  return {
185
204
  timestamp: snapshot.timestamp,
186
205
  blockNumber: BigInt(snapshot.blockNumber),
187
206
  totalSupplyAssets,
188
207
  totalBorrowAssets,
189
208
  totalLiquidity,
209
+ totalReallocatableLiquidity,
190
210
  totalSupplyAssetsUsd: Number.parseFloat(snapshot.totalSupplyAssetsUsd),
191
211
  totalBorrowAssetsUsd: Number.parseFloat(snapshot.totalBorrowAssetsUsd),
192
212
  totalLiquidityUsd: Number.parseFloat(snapshot.totalLiquidityUsd),
213
+ totalReallocatableLiquidityUsd: Number.parseFloat(
214
+ snapshot.totalReallocatableLiquidityUsd ?? "0",
215
+ ),
193
216
  loanTokenPrice: Number.parseFloat(snapshot.loanTokenPrice),
194
217
  collateralTokenPrice: Number.parseFloat(snapshot.collateralTokenPrice),
195
218
  supplyApy: Number.parseFloat(snapshot.supplyApy),
@@ -82,6 +82,8 @@ export type LunarIndexerMarketSnapshot = {
82
82
  totalSupplyAssetsUsd: string;
83
83
  totalBorrowAssetsUsd: string;
84
84
  totalLiquidityUsd: string;
85
+ totalReallocatableLiquidity?: string;
86
+ totalReallocatableLiquidityUsd?: string;
85
87
  loanTokenPrice: string;
86
88
  collateralTokenPrice: string;
87
89
  supplyApy: string;
@@ -125,6 +127,13 @@ export function transformIsolatedMarketSnapshotFromIndexer(
125
127
  ? totalLiquidityUsd / collateralTokenPrice
126
128
  : Number.parseFloat(snapshot.totalLiquidity);
127
129
 
130
+ const totalReallocatableLiquidity = Number.parseFloat(
131
+ snapshot.totalReallocatableLiquidity ?? "0",
132
+ );
133
+ const totalReallocatableLiquidityUsd = Number.parseFloat(
134
+ snapshot.totalReallocatableLiquidityUsd ?? "0",
135
+ );
136
+
128
137
  return {
129
138
  chainId: snapshot.chainId,
130
139
  marketId: snapshot.marketId.toLowerCase(),
@@ -135,6 +144,8 @@ export function transformIsolatedMarketSnapshotFromIndexer(
135
144
  totalBorrowsUsd: Number.parseFloat(snapshot.totalBorrowAssetsUsd),
136
145
  totalLiquidity,
137
146
  totalLiquidityUsd,
147
+ totalReallocatableLiquidity,
148
+ totalReallocatableLiquidityUsd,
138
149
  baseSupplyApy: Number.parseFloat(snapshot.supplyApy),
139
150
  baseBorrowApy: Number.parseFloat(snapshot.borrowApy),
140
151
  loanTokenPrice,
package/errors/version.ts CHANGED
@@ -1 +1 @@
1
- export const version = '0.10.3'
1
+ export const version = '0.10.5'
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@moonwell-fi/moonwell-sdk",
3
3
  "description": "TypeScript Interface for Moonwell",
4
- "version": "0.10.3",
4
+ "version": "0.10.5",
5
5
  "main": "./_cjs/index.js",
6
6
  "module": "./_esm/index.js",
7
7
  "types": "./_types/index.d.ts",
package/types/market.ts CHANGED
@@ -51,6 +51,8 @@ export type MarketSnapshot = {
51
51
  totalBorrowsUsd: number;
52
52
  totalLiquidity: number;
53
53
  totalLiquidityUsd: number;
54
+ totalReallocatableLiquidity: number;
55
+ totalReallocatableLiquidityUsd: number;
54
56
  baseSupplyApy: number;
55
57
  baseBorrowApy: number;
56
58
  loanTokenPrice: number;