@defisaver/positions-sdk 2.1.126 → 2.1.127

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.
@@ -361,6 +361,7 @@ const getRewardsForMarket = (marketId_1, ...args_1) => __awaiter(void 0, [market
361
361
  query: REWARDS_QUERY,
362
362
  variables: { marketId, chainId: network },
363
363
  }),
364
+ signal: AbortSignal.timeout(utils_1.LONGER_TIMEOUT),
364
365
  });
365
366
  const data = yield response.json();
366
367
  const marketData = (_a = data === null || data === void 0 ? void 0 : data.data) === null || _a === void 0 ? void 0 : _a.marketById;
@@ -1,14 +1,16 @@
1
1
  import { Client } from 'viem';
2
2
  import { Blockish, EthAddress, EthereumProvider, NetworkNumber, PositionBalances } from '../types/common';
3
- import { MorphoBlueMarketData, MorphoBlueMarketInfo, MorphoBluePositionData } from '../types';
3
+ import { MorphoBlueEarnData, MorphoBlueMarketData, MorphoBlueMarketInfo, MorphoBlueMarketRewards, MorphoBluePositionData } from '../types';
4
+ export declare const addMorphoBlueRewardsToMarketInfo: (marketInfo: MorphoBlueMarketInfo, rewards: MorphoBlueMarketRewards) => MorphoBlueMarketInfo;
4
5
  export declare function _getMorphoBlueMarketData(provider: Client, network: NetworkNumber, selectedMarket: MorphoBlueMarketData): Promise<MorphoBlueMarketInfo>;
6
+ export declare function _getMorphoBluePortfolioMarketData(provider: Client, network: NetworkNumber, selectedMarket: MorphoBlueMarketData): Promise<MorphoBlueMarketInfo>;
5
7
  export declare function getMorphoBlueMarketData(provider: EthereumProvider, network: NetworkNumber, selectedMarket: MorphoBlueMarketData): Promise<MorphoBlueMarketInfo>;
8
+ export declare function getMorphoBluePortfolioMarketData(provider: EthereumProvider, network: NetworkNumber, selectedMarket: MorphoBlueMarketData): Promise<MorphoBlueMarketInfo>;
9
+ export declare const getMorphoBluePositionDataWithMarketInfo: (data: MorphoBluePositionData, marketInfo: MorphoBlueMarketInfo) => MorphoBluePositionData;
10
+ export declare const getMorphoEarnDataWithMarketInfo: (data: MorphoBlueEarnData, marketInfo: MorphoBlueMarketInfo) => MorphoBlueEarnData;
11
+ export declare function getMorphoBlueMarketRewards(network: NetworkNumber, selectedMarket: MorphoBlueMarketData): Promise<MorphoBlueMarketRewards>;
6
12
  export declare const _getMorphoBlueAccountBalances: (provider: Client, network: NetworkNumber, block: Blockish, addressMapping: boolean, address: EthAddress, selectedMarket: MorphoBlueMarketData) => Promise<PositionBalances>;
7
13
  export declare const getMorphoBlueAccountBalances: (provider: EthereumProvider, network: NetworkNumber, block: Blockish, addressMapping: boolean, address: EthAddress, selectedMarket: MorphoBlueMarketData) => Promise<PositionBalances>;
8
14
  export declare function _getMorphoBlueAccountData(provider: Client, network: NetworkNumber, account: EthAddress, selectedMarket: MorphoBlueMarketData, marketInfo: MorphoBlueMarketInfo): Promise<MorphoBluePositionData>;
9
15
  export declare function getMorphoBlueAccountData(provider: EthereumProvider, network: NetworkNumber, account: EthAddress, selectedMarket: MorphoBlueMarketData, marketInfo: MorphoBlueMarketInfo): Promise<MorphoBluePositionData>;
10
- export declare function getMorphoEarn(provider: Client, network: NetworkNumber, account: EthAddress, selectedMarket: MorphoBlueMarketData, marketInfo: MorphoBlueMarketInfo): Promise<{
11
- apy: string;
12
- amount: string;
13
- amountUsd: string;
14
- }>;
16
+ export declare function getMorphoEarn(provider: Client, network: NetworkNumber, account: EthAddress, selectedMarket: MorphoBlueMarketData, marketInfo: MorphoBlueMarketInfo): Promise<MorphoBlueEarnData>;
@@ -12,9 +12,12 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
12
12
  return (mod && mod.__esModule) ? mod : { "default": mod };
13
13
  };
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
- exports.getMorphoBlueAccountBalances = exports._getMorphoBlueAccountBalances = void 0;
15
+ exports.getMorphoBlueAccountBalances = exports._getMorphoBlueAccountBalances = exports.getMorphoEarnDataWithMarketInfo = exports.getMorphoBluePositionDataWithMarketInfo = exports.addMorphoBlueRewardsToMarketInfo = void 0;
16
16
  exports._getMorphoBlueMarketData = _getMorphoBlueMarketData;
17
+ exports._getMorphoBluePortfolioMarketData = _getMorphoBluePortfolioMarketData;
17
18
  exports.getMorphoBlueMarketData = getMorphoBlueMarketData;
19
+ exports.getMorphoBluePortfolioMarketData = getMorphoBluePortfolioMarketData;
20
+ exports.getMorphoBlueMarketRewards = getMorphoBlueMarketRewards;
18
21
  exports._getMorphoBlueAccountData = _getMorphoBlueAccountData;
19
22
  exports.getMorphoBlueAccountData = getMorphoBlueAccountData;
20
23
  exports.getMorphoEarn = getMorphoEarn;
@@ -29,7 +32,21 @@ const morphoBlueHelpers_1 = require("../helpers/morphoBlueHelpers");
29
32
  const priceService_1 = require("../services/priceService");
30
33
  const viem_1 = require("../services/viem");
31
34
  const HARDCODED_USD_STABLE_PRICE = '100000000'; // $1 with 8 decimals
32
- function _getMorphoBlueMarketData(provider, network, selectedMarket) {
35
+ const getMorphoRewardIncentives = (apy) => [{
36
+ token: 'MORPHO',
37
+ apy,
38
+ incentiveKind: common_1.IncentiveKind.Reward,
39
+ description: 'Eligible for protocol-level MORPHO incentives.',
40
+ }];
41
+ const addMorphoBlueRewardsToMarketInfo = (marketInfo, rewards) => (Object.assign(Object.assign({}, marketInfo), { assetsData: Object.assign(Object.assign({}, marketInfo.assetsData), { [marketInfo.loanToken]: Object.assign(Object.assign({}, marketInfo.assetsData[marketInfo.loanToken]), { supplyIncentives: [
42
+ ...marketInfo.assetsData[marketInfo.loanToken].supplyIncentives.filter(({ token }) => token !== 'MORPHO'),
43
+ ...getMorphoRewardIncentives(rewards.supplyApy),
44
+ ], borrowIncentives: [
45
+ ...marketInfo.assetsData[marketInfo.loanToken].borrowIncentives.filter(({ token }) => token !== 'MORPHO'),
46
+ ...getMorphoRewardIncentives(rewards.borrowApy),
47
+ ] }) }) }));
48
+ exports.addMorphoBlueRewardsToMarketInfo = addMorphoBlueRewardsToMarketInfo;
49
+ function getMorphoBlueMarketDataInternal(provider, network, selectedMarket) {
33
50
  return __awaiter(this, void 0, void 0, function* () {
34
51
  const { loanToken, collateralToken, oracle, irm, lltv, oracleType, } = selectedMarket;
35
52
  const lltvInWei = new decimal_js_1.default(lltv).mul(constants_1.WAD).toString();
@@ -61,16 +78,6 @@ function _getMorphoBlueMarketData(provider, network, selectedMarket) {
61
78
  marketInfo = _marketInfo;
62
79
  loanTokenPrice = loanTokenPriceRound[1].toString();
63
80
  }
64
- let morphoSupplyApy = '0';
65
- let morphoBorrowApy = '0';
66
- try {
67
- const { supplyApy: _morphoSupplyApy, borrowApy: _morphoBorrowApy } = yield (0, morphoBlueHelpers_1.getRewardsForMarket)(selectedMarket.marketId, network);
68
- morphoSupplyApy = _morphoSupplyApy;
69
- morphoBorrowApy = _morphoBorrowApy;
70
- }
71
- catch (e) {
72
- console.error(e);
73
- }
74
81
  const supplyRate = (0, morphoBlueHelpers_1.getSupplyRate)(marketInfo.totalSupplyAssets.toString(), marketInfo.totalBorrowAssets.toString(), marketInfo.borrowRate.toString(), marketInfo.fee.toString());
75
82
  const compoundedBorrowRate = (0, morphoBlueHelpers_1.getBorrowRate)(marketInfo.borrowRate.toString(), marketInfo.totalBorrowShares.toString());
76
83
  const utillization = new decimal_js_1.default(marketInfo.totalBorrowAssets.toString()).div(marketInfo.totalSupplyAssets.toString()).mul(100).toString();
@@ -89,18 +96,8 @@ function _getMorphoBlueMarketData(provider, network, selectedMarket) {
89
96
  totalBorrow: new decimal_js_1.default(marketInfo.totalBorrowAssets.toString()).div(scale).toString(),
90
97
  canBeSupplied: true,
91
98
  canBeBorrowed: true,
92
- supplyIncentives: [{
93
- token: 'MORPHO',
94
- apy: morphoSupplyApy,
95
- incentiveKind: common_1.IncentiveKind.Reward,
96
- description: 'Eligible for protocol-level MORPHO incentives.',
97
- }],
98
- borrowIncentives: [{
99
- token: 'MORPHO',
100
- apy: morphoBorrowApy,
101
- incentiveKind: common_1.IncentiveKind.Reward,
102
- description: 'Eligible for protocol-level MORPHO incentives.',
103
- }],
99
+ supplyIncentives: [],
100
+ borrowIncentives: [],
104
101
  };
105
102
  assetsData[(0, utils_1.wethToEth)(collateralTokenInfo.symbol)] = {
106
103
  symbol: (0, utils_1.wethToEth)(collateralTokenInfo.symbol),
@@ -135,11 +132,56 @@ function _getMorphoBlueMarketData(provider, network, selectedMarket) {
135
132
  };
136
133
  });
137
134
  }
135
+ function _getMorphoBlueMarketData(provider, network, selectedMarket) {
136
+ return __awaiter(this, void 0, void 0, function* () {
137
+ const marketInfo = yield getMorphoBlueMarketDataInternal(provider, network, selectedMarket);
138
+ try {
139
+ const rewards = yield (0, morphoBlueHelpers_1.getRewardsForMarket)(selectedMarket.marketId, network);
140
+ return (0, exports.addMorphoBlueRewardsToMarketInfo)(marketInfo, rewards);
141
+ }
142
+ catch (error) {
143
+ console.error(error);
144
+ return (0, exports.addMorphoBlueRewardsToMarketInfo)(marketInfo, { supplyApy: '0', borrowApy: '0' });
145
+ }
146
+ });
147
+ }
148
+ function _getMorphoBluePortfolioMarketData(provider, network, selectedMarket) {
149
+ return getMorphoBlueMarketDataInternal(provider, network, selectedMarket);
150
+ }
138
151
  function getMorphoBlueMarketData(provider, network, selectedMarket) {
139
152
  return __awaiter(this, void 0, void 0, function* () {
140
153
  return _getMorphoBlueMarketData((0, viem_1.getViemProvider)(provider, network), network, selectedMarket);
141
154
  });
142
155
  }
156
+ function getMorphoBluePortfolioMarketData(provider, network, selectedMarket) {
157
+ return _getMorphoBluePortfolioMarketData((0, viem_1.getViemProvider)(provider, network), network, selectedMarket);
158
+ }
159
+ const getMorphoBluePositionDataWithMarketInfo = (data, marketInfo) => (Object.assign(Object.assign({}, data), (0, morphoBlueHelpers_1.getMorphoBlueAggregatedPositionData)({
160
+ usedAssets: data.usedAssets,
161
+ assetsData: marketInfo.assetsData,
162
+ marketInfo,
163
+ })));
164
+ exports.getMorphoBluePositionDataWithMarketInfo = getMorphoBluePositionDataWithMarketInfo;
165
+ const getMorphoEarnDataWithMarketInfo = (data, marketInfo) => {
166
+ const loanTokenInfo = marketInfo.assetsData[marketInfo.loanToken];
167
+ const usedAssets = {
168
+ [marketInfo.loanToken]: {
169
+ symbol: loanTokenInfo.symbol,
170
+ supplied: data.amount,
171
+ borrowed: '0',
172
+ isSupplied: new decimal_js_1.default(data.amount).gt(0),
173
+ isBorrowed: false,
174
+ collateral: false,
175
+ suppliedUsd: data.amountUsd,
176
+ borrowedUsd: '0',
177
+ },
178
+ };
179
+ return Object.assign(Object.assign({}, data), { apy: (0, staking_1.calculateNetApy)({ usedAssets, assetsData: marketInfo.assetsData }).netApy });
180
+ };
181
+ exports.getMorphoEarnDataWithMarketInfo = getMorphoEarnDataWithMarketInfo;
182
+ function getMorphoBlueMarketRewards(network, selectedMarket) {
183
+ return (0, morphoBlueHelpers_1.getRewardsForMarket)(selectedMarket.marketId, network);
184
+ }
143
185
  const _getMorphoBlueAccountBalances = (provider, network, block, addressMapping, address, selectedMarket) => __awaiter(void 0, void 0, void 0, function* () {
144
186
  let balances = {
145
187
  collateral: {},
@@ -229,23 +271,10 @@ function getMorphoEarn(provider, network, account, selectedMarket, marketInfo) {
229
271
  const loanTokenInfo = marketInfo.assetsData[marketInfo.loanToken];
230
272
  const loanTokenSupplied = (0, tokens_1.assetAmountInEth)(loanInfo.suppliedInAssets.toString(), marketInfo.loanToken);
231
273
  const loanTokenSuppliedUsd = new decimal_js_1.default(loanTokenSupplied).mul(loanTokenInfo.price).toString();
232
- const usedAssets = {
233
- [marketInfo.loanToken]: {
234
- symbol: loanTokenInfo.symbol,
235
- supplied: loanTokenSupplied,
236
- borrowed: '0',
237
- isSupplied: new decimal_js_1.default(loanInfo.suppliedInAssets.toString()).gt(0),
238
- isBorrowed: false,
239
- collateral: false,
240
- suppliedUsd: loanTokenSuppliedUsd,
241
- borrowedUsd: '0',
242
- },
243
- };
244
- const { netApy } = (0, staking_1.calculateNetApy)({ usedAssets, assetsData: marketInfo.assetsData });
245
- return {
246
- apy: netApy,
274
+ return (0, exports.getMorphoEarnDataWithMarketInfo)({
275
+ apy: '0',
247
276
  amount: loanTokenSupplied,
248
277
  amountUsd: loanTokenSuppliedUsd,
249
- };
278
+ }, marketInfo);
250
279
  });
251
280
  }
@@ -151,7 +151,7 @@ function getPortfolioData(provider_1, network_1, defaultProvider_1, addresses_1)
151
151
  yield Promise.allSettled([
152
152
  // === MARKET DATA (needs to be fetched first) ===
153
153
  ...morphoMarkets.map((market) => __awaiter(this, void 0, void 0, function* () {
154
- const marketData = yield (0, morphoBlue_1._getMorphoBlueMarketData)(client, network, market);
154
+ const marketData = yield (0, morphoBlue_1._getMorphoBluePortfolioMarketData)(client, network, market);
155
155
  morphoMarketsData[market.value] = marketData;
156
156
  })),
157
157
  ...compoundV3Markets.map((market) => __awaiter(this, void 0, void 0, function* () {
@@ -212,6 +212,15 @@ export interface MorphoBluePositionData {
212
212
  borrowShares: string;
213
213
  exposure: string;
214
214
  }
215
+ export interface MorphoBlueEarnData {
216
+ apy: string;
217
+ amount: string;
218
+ amountUsd: string;
219
+ }
220
+ export interface MorphoBlueMarketRewards {
221
+ supplyApy: string;
222
+ borrowApy: string;
223
+ }
215
224
  export interface MorphoBlueVault {
216
225
  address: string;
217
226
  }
@@ -348,6 +348,7 @@ export const getRewardsForMarket = (marketId_1, ...args_1) => __awaiter(void 0,
348
348
  query: REWARDS_QUERY,
349
349
  variables: { marketId, chainId: network },
350
350
  }),
351
+ signal: AbortSignal.timeout(LONGER_TIMEOUT),
351
352
  });
352
353
  const data = yield response.json();
353
354
  const marketData = (_a = data === null || data === void 0 ? void 0 : data.data) === null || _a === void 0 ? void 0 : _a.marketById;
@@ -1,14 +1,16 @@
1
1
  import { Client } from 'viem';
2
2
  import { Blockish, EthAddress, EthereumProvider, NetworkNumber, PositionBalances } from '../types/common';
3
- import { MorphoBlueMarketData, MorphoBlueMarketInfo, MorphoBluePositionData } from '../types';
3
+ import { MorphoBlueEarnData, MorphoBlueMarketData, MorphoBlueMarketInfo, MorphoBlueMarketRewards, MorphoBluePositionData } from '../types';
4
+ export declare const addMorphoBlueRewardsToMarketInfo: (marketInfo: MorphoBlueMarketInfo, rewards: MorphoBlueMarketRewards) => MorphoBlueMarketInfo;
4
5
  export declare function _getMorphoBlueMarketData(provider: Client, network: NetworkNumber, selectedMarket: MorphoBlueMarketData): Promise<MorphoBlueMarketInfo>;
6
+ export declare function _getMorphoBluePortfolioMarketData(provider: Client, network: NetworkNumber, selectedMarket: MorphoBlueMarketData): Promise<MorphoBlueMarketInfo>;
5
7
  export declare function getMorphoBlueMarketData(provider: EthereumProvider, network: NetworkNumber, selectedMarket: MorphoBlueMarketData): Promise<MorphoBlueMarketInfo>;
8
+ export declare function getMorphoBluePortfolioMarketData(provider: EthereumProvider, network: NetworkNumber, selectedMarket: MorphoBlueMarketData): Promise<MorphoBlueMarketInfo>;
9
+ export declare const getMorphoBluePositionDataWithMarketInfo: (data: MorphoBluePositionData, marketInfo: MorphoBlueMarketInfo) => MorphoBluePositionData;
10
+ export declare const getMorphoEarnDataWithMarketInfo: (data: MorphoBlueEarnData, marketInfo: MorphoBlueMarketInfo) => MorphoBlueEarnData;
11
+ export declare function getMorphoBlueMarketRewards(network: NetworkNumber, selectedMarket: MorphoBlueMarketData): Promise<MorphoBlueMarketRewards>;
6
12
  export declare const _getMorphoBlueAccountBalances: (provider: Client, network: NetworkNumber, block: Blockish, addressMapping: boolean, address: EthAddress, selectedMarket: MorphoBlueMarketData) => Promise<PositionBalances>;
7
13
  export declare const getMorphoBlueAccountBalances: (provider: EthereumProvider, network: NetworkNumber, block: Blockish, addressMapping: boolean, address: EthAddress, selectedMarket: MorphoBlueMarketData) => Promise<PositionBalances>;
8
14
  export declare function _getMorphoBlueAccountData(provider: Client, network: NetworkNumber, account: EthAddress, selectedMarket: MorphoBlueMarketData, marketInfo: MorphoBlueMarketInfo): Promise<MorphoBluePositionData>;
9
15
  export declare function getMorphoBlueAccountData(provider: EthereumProvider, network: NetworkNumber, account: EthAddress, selectedMarket: MorphoBlueMarketData, marketInfo: MorphoBlueMarketInfo): Promise<MorphoBluePositionData>;
10
- export declare function getMorphoEarn(provider: Client, network: NetworkNumber, account: EthAddress, selectedMarket: MorphoBlueMarketData, marketInfo: MorphoBlueMarketInfo): Promise<{
11
- apy: string;
12
- amount: string;
13
- amountUsd: string;
14
- }>;
16
+ export declare function getMorphoEarn(provider: Client, network: NetworkNumber, account: EthAddress, selectedMarket: MorphoBlueMarketData, marketInfo: MorphoBlueMarketInfo): Promise<MorphoBlueEarnData>;
@@ -18,7 +18,20 @@ import { getBorrowRate, getMorphoBlueAggregatedPositionData, getRewardsForMarket
18
18
  import { getChainlinkAssetAddress } from '../services/priceService';
19
19
  import { getViemProvider, setViemBlockNumber } from '../services/viem';
20
20
  const HARDCODED_USD_STABLE_PRICE = '100000000'; // $1 with 8 decimals
21
- export function _getMorphoBlueMarketData(provider, network, selectedMarket) {
21
+ const getMorphoRewardIncentives = (apy) => [{
22
+ token: 'MORPHO',
23
+ apy,
24
+ incentiveKind: IncentiveKind.Reward,
25
+ description: 'Eligible for protocol-level MORPHO incentives.',
26
+ }];
27
+ export const addMorphoBlueRewardsToMarketInfo = (marketInfo, rewards) => (Object.assign(Object.assign({}, marketInfo), { assetsData: Object.assign(Object.assign({}, marketInfo.assetsData), { [marketInfo.loanToken]: Object.assign(Object.assign({}, marketInfo.assetsData[marketInfo.loanToken]), { supplyIncentives: [
28
+ ...marketInfo.assetsData[marketInfo.loanToken].supplyIncentives.filter(({ token }) => token !== 'MORPHO'),
29
+ ...getMorphoRewardIncentives(rewards.supplyApy),
30
+ ], borrowIncentives: [
31
+ ...marketInfo.assetsData[marketInfo.loanToken].borrowIncentives.filter(({ token }) => token !== 'MORPHO'),
32
+ ...getMorphoRewardIncentives(rewards.borrowApy),
33
+ ] }) }) }));
34
+ function getMorphoBlueMarketDataInternal(provider, network, selectedMarket) {
22
35
  return __awaiter(this, void 0, void 0, function* () {
23
36
  const { loanToken, collateralToken, oracle, irm, lltv, oracleType, } = selectedMarket;
24
37
  const lltvInWei = new Dec(lltv).mul(WAD).toString();
@@ -50,16 +63,6 @@ export function _getMorphoBlueMarketData(provider, network, selectedMarket) {
50
63
  marketInfo = _marketInfo;
51
64
  loanTokenPrice = loanTokenPriceRound[1].toString();
52
65
  }
53
- let morphoSupplyApy = '0';
54
- let morphoBorrowApy = '0';
55
- try {
56
- const { supplyApy: _morphoSupplyApy, borrowApy: _morphoBorrowApy } = yield getRewardsForMarket(selectedMarket.marketId, network);
57
- morphoSupplyApy = _morphoSupplyApy;
58
- morphoBorrowApy = _morphoBorrowApy;
59
- }
60
- catch (e) {
61
- console.error(e);
62
- }
63
66
  const supplyRate = getSupplyRate(marketInfo.totalSupplyAssets.toString(), marketInfo.totalBorrowAssets.toString(), marketInfo.borrowRate.toString(), marketInfo.fee.toString());
64
67
  const compoundedBorrowRate = getBorrowRate(marketInfo.borrowRate.toString(), marketInfo.totalBorrowShares.toString());
65
68
  const utillization = new Dec(marketInfo.totalBorrowAssets.toString()).div(marketInfo.totalSupplyAssets.toString()).mul(100).toString();
@@ -78,18 +81,8 @@ export function _getMorphoBlueMarketData(provider, network, selectedMarket) {
78
81
  totalBorrow: new Dec(marketInfo.totalBorrowAssets.toString()).div(scale).toString(),
79
82
  canBeSupplied: true,
80
83
  canBeBorrowed: true,
81
- supplyIncentives: [{
82
- token: 'MORPHO',
83
- apy: morphoSupplyApy,
84
- incentiveKind: IncentiveKind.Reward,
85
- description: 'Eligible for protocol-level MORPHO incentives.',
86
- }],
87
- borrowIncentives: [{
88
- token: 'MORPHO',
89
- apy: morphoBorrowApy,
90
- incentiveKind: IncentiveKind.Reward,
91
- description: 'Eligible for protocol-level MORPHO incentives.',
92
- }],
84
+ supplyIncentives: [],
85
+ borrowIncentives: [],
93
86
  };
94
87
  assetsData[wethToEth(collateralTokenInfo.symbol)] = {
95
88
  symbol: wethToEth(collateralTokenInfo.symbol),
@@ -124,11 +117,54 @@ export function _getMorphoBlueMarketData(provider, network, selectedMarket) {
124
117
  };
125
118
  });
126
119
  }
120
+ export function _getMorphoBlueMarketData(provider, network, selectedMarket) {
121
+ return __awaiter(this, void 0, void 0, function* () {
122
+ const marketInfo = yield getMorphoBlueMarketDataInternal(provider, network, selectedMarket);
123
+ try {
124
+ const rewards = yield getRewardsForMarket(selectedMarket.marketId, network);
125
+ return addMorphoBlueRewardsToMarketInfo(marketInfo, rewards);
126
+ }
127
+ catch (error) {
128
+ console.error(error);
129
+ return addMorphoBlueRewardsToMarketInfo(marketInfo, { supplyApy: '0', borrowApy: '0' });
130
+ }
131
+ });
132
+ }
133
+ export function _getMorphoBluePortfolioMarketData(provider, network, selectedMarket) {
134
+ return getMorphoBlueMarketDataInternal(provider, network, selectedMarket);
135
+ }
127
136
  export function getMorphoBlueMarketData(provider, network, selectedMarket) {
128
137
  return __awaiter(this, void 0, void 0, function* () {
129
138
  return _getMorphoBlueMarketData(getViemProvider(provider, network), network, selectedMarket);
130
139
  });
131
140
  }
141
+ export function getMorphoBluePortfolioMarketData(provider, network, selectedMarket) {
142
+ return _getMorphoBluePortfolioMarketData(getViemProvider(provider, network), network, selectedMarket);
143
+ }
144
+ export const getMorphoBluePositionDataWithMarketInfo = (data, marketInfo) => (Object.assign(Object.assign({}, data), getMorphoBlueAggregatedPositionData({
145
+ usedAssets: data.usedAssets,
146
+ assetsData: marketInfo.assetsData,
147
+ marketInfo,
148
+ })));
149
+ export const getMorphoEarnDataWithMarketInfo = (data, marketInfo) => {
150
+ const loanTokenInfo = marketInfo.assetsData[marketInfo.loanToken];
151
+ const usedAssets = {
152
+ [marketInfo.loanToken]: {
153
+ symbol: loanTokenInfo.symbol,
154
+ supplied: data.amount,
155
+ borrowed: '0',
156
+ isSupplied: new Dec(data.amount).gt(0),
157
+ isBorrowed: false,
158
+ collateral: false,
159
+ suppliedUsd: data.amountUsd,
160
+ borrowedUsd: '0',
161
+ },
162
+ };
163
+ return Object.assign(Object.assign({}, data), { apy: calculateNetApy({ usedAssets, assetsData: marketInfo.assetsData }).netApy });
164
+ };
165
+ export function getMorphoBlueMarketRewards(network, selectedMarket) {
166
+ return getRewardsForMarket(selectedMarket.marketId, network);
167
+ }
132
168
  export const _getMorphoBlueAccountBalances = (provider, network, block, addressMapping, address, selectedMarket) => __awaiter(void 0, void 0, void 0, function* () {
133
169
  let balances = {
134
170
  collateral: {},
@@ -216,23 +252,10 @@ export function getMorphoEarn(provider, network, account, selectedMarket, market
216
252
  const loanTokenInfo = marketInfo.assetsData[marketInfo.loanToken];
217
253
  const loanTokenSupplied = assetAmountInEth(loanInfo.suppliedInAssets.toString(), marketInfo.loanToken);
218
254
  const loanTokenSuppliedUsd = new Dec(loanTokenSupplied).mul(loanTokenInfo.price).toString();
219
- const usedAssets = {
220
- [marketInfo.loanToken]: {
221
- symbol: loanTokenInfo.symbol,
222
- supplied: loanTokenSupplied,
223
- borrowed: '0',
224
- isSupplied: new Dec(loanInfo.suppliedInAssets.toString()).gt(0),
225
- isBorrowed: false,
226
- collateral: false,
227
- suppliedUsd: loanTokenSuppliedUsd,
228
- borrowedUsd: '0',
229
- },
230
- };
231
- const { netApy } = calculateNetApy({ usedAssets, assetsData: marketInfo.assetsData });
232
- return {
233
- apy: netApy,
255
+ return getMorphoEarnDataWithMarketInfo({
256
+ apy: '0',
234
257
  amount: loanTokenSupplied,
235
258
  amountUsd: loanTokenSuppliedUsd,
236
- };
259
+ }, marketInfo);
237
260
  });
238
261
  }
@@ -10,7 +10,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
10
10
  import Dec from 'decimal.js';
11
11
  import { NetworkNumber } from '../types/common';
12
12
  import { AaveMarkets, AaveV4Spokes, CompoundMarkets, CrvUsdMarkets, EulerV2Markets, LiquityV2Markets, LlamaLendMarkets, MorphoBlueMarkets, SparkMarkets, } from '../markets';
13
- import { _getMorphoBlueAccountData, _getMorphoBlueMarketData, getMorphoEarn } from '../morphoBlue';
13
+ import { _getMorphoBlueAccountData, _getMorphoBluePortfolioMarketData, getMorphoEarn } from '../morphoBlue';
14
14
  import { AaveVersions, CompoundVersions, } from '../types';
15
15
  import { _getCompoundV3AccountData, _getCompoundV3MarketsData } from '../compoundV3';
16
16
  import { _getSparkAccountData, _getSparkMarketsData } from '../spark';
@@ -131,7 +131,7 @@ export function getPortfolioData(provider_1, network_1, defaultProvider_1, addre
131
131
  yield Promise.allSettled([
132
132
  // === MARKET DATA (needs to be fetched first) ===
133
133
  ...morphoMarkets.map((market) => __awaiter(this, void 0, void 0, function* () {
134
- const marketData = yield _getMorphoBlueMarketData(client, network, market);
134
+ const marketData = yield _getMorphoBluePortfolioMarketData(client, network, market);
135
135
  morphoMarketsData[market.value] = marketData;
136
136
  })),
137
137
  ...compoundV3Markets.map((market) => __awaiter(this, void 0, void 0, function* () {
@@ -212,6 +212,15 @@ export interface MorphoBluePositionData {
212
212
  borrowShares: string;
213
213
  exposure: string;
214
214
  }
215
+ export interface MorphoBlueEarnData {
216
+ apy: string;
217
+ amount: string;
218
+ amountUsd: string;
219
+ }
220
+ export interface MorphoBlueMarketRewards {
221
+ supplyApy: string;
222
+ borrowApy: string;
223
+ }
215
224
  export interface MorphoBlueVault {
216
225
  address: string;
217
226
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@defisaver/positions-sdk",
3
- "version": "2.1.126",
3
+ "version": "2.1.127",
4
4
  "description": "",
5
5
  "main": "./cjs/index.js",
6
6
  "module": "./esm/index.js",
@@ -389,6 +389,7 @@ export const getRewardsForMarket = async (marketId: string, network: NetworkNumb
389
389
  query: REWARDS_QUERY,
390
390
  variables: { marketId, chainId: network },
391
391
  }),
392
+ signal: AbortSignal.timeout(LONGER_TIMEOUT),
392
393
  });
393
394
 
394
395
  const data = await response.json();
@@ -8,7 +8,7 @@ import {
8
8
  DFSFeedRegistryContractViem, FeedRegistryContractViem, MorphoBlueViewContractViem,
9
9
  } from '../contracts';
10
10
  import {
11
- MorphoBlueAssetsData, MorphoBlueMarketData, MorphoBlueMarketInfo, MorphoBluePositionData,
11
+ MorphoBlueAssetsData, MorphoBlueEarnData, MorphoBlueMarketData, MorphoBlueMarketInfo, MorphoBlueMarketRewards, MorphoBluePositionData,
12
12
  } from '../types';
13
13
  import { USD_QUOTE, WAD } from '../constants';
14
14
  import { calculateNetApy, getStakingApy, STAKING_ASSETS } from '../staking';
@@ -21,7 +21,39 @@ import { getViemProvider, setViemBlockNumber } from '../services/viem';
21
21
 
22
22
  const HARDCODED_USD_STABLE_PRICE = '100000000'; // $1 with 8 decimals
23
23
 
24
- export async function _getMorphoBlueMarketData(provider: Client, network: NetworkNumber, selectedMarket: MorphoBlueMarketData): Promise<MorphoBlueMarketInfo> {
24
+ const getMorphoRewardIncentives = (apy: string) => [{
25
+ token: 'MORPHO',
26
+ apy,
27
+ incentiveKind: IncentiveKind.Reward,
28
+ description: 'Eligible for protocol-level MORPHO incentives.',
29
+ }];
30
+
31
+ export const addMorphoBlueRewardsToMarketInfo = (
32
+ marketInfo: MorphoBlueMarketInfo,
33
+ rewards: MorphoBlueMarketRewards,
34
+ ): MorphoBlueMarketInfo => ({
35
+ ...marketInfo,
36
+ assetsData: {
37
+ ...marketInfo.assetsData,
38
+ [marketInfo.loanToken]: {
39
+ ...marketInfo.assetsData[marketInfo.loanToken],
40
+ supplyIncentives: [
41
+ ...marketInfo.assetsData[marketInfo.loanToken].supplyIncentives.filter(({ token }) => token !== 'MORPHO'),
42
+ ...getMorphoRewardIncentives(rewards.supplyApy),
43
+ ],
44
+ borrowIncentives: [
45
+ ...marketInfo.assetsData[marketInfo.loanToken].borrowIncentives.filter(({ token }) => token !== 'MORPHO'),
46
+ ...getMorphoRewardIncentives(rewards.borrowApy),
47
+ ],
48
+ },
49
+ },
50
+ });
51
+
52
+ async function getMorphoBlueMarketDataInternal(
53
+ provider: Client,
54
+ network: NetworkNumber,
55
+ selectedMarket: MorphoBlueMarketData,
56
+ ): Promise<MorphoBlueMarketInfo> {
25
57
  const {
26
58
  loanToken, collateralToken, oracle, irm, lltv, oracleType,
27
59
  } = selectedMarket;
@@ -59,16 +91,6 @@ export async function _getMorphoBlueMarketData(provider: Client, network: Networ
59
91
  loanTokenPrice = loanTokenPriceRound[1].toString();
60
92
  }
61
93
 
62
- let morphoSupplyApy = '0';
63
- let morphoBorrowApy = '0';
64
- try {
65
- const { supplyApy: _morphoSupplyApy, borrowApy: _morphoBorrowApy } = await getRewardsForMarket(selectedMarket.marketId, network);
66
- morphoSupplyApy = _morphoSupplyApy;
67
- morphoBorrowApy = _morphoBorrowApy;
68
- } catch (e) {
69
- console.error(e);
70
- }
71
-
72
94
  const supplyRate = getSupplyRate(marketInfo.totalSupplyAssets.toString(), marketInfo.totalBorrowAssets.toString(), marketInfo.borrowRate.toString(), marketInfo.fee.toString());
73
95
  const compoundedBorrowRate = getBorrowRate(marketInfo.borrowRate.toString(), marketInfo.totalBorrowShares.toString());
74
96
  const utillization = new Dec(marketInfo.totalBorrowAssets.toString()).div(marketInfo.totalSupplyAssets.toString()).mul(100).toString();
@@ -90,18 +112,8 @@ export async function _getMorphoBlueMarketData(provider: Client, network: Networ
90
112
  totalBorrow: new Dec(marketInfo.totalBorrowAssets.toString()).div(scale).toString(),
91
113
  canBeSupplied: true,
92
114
  canBeBorrowed: true,
93
- supplyIncentives: [{
94
- token: 'MORPHO',
95
- apy: morphoSupplyApy,
96
- incentiveKind: IncentiveKind.Reward,
97
- description: 'Eligible for protocol-level MORPHO incentives.',
98
- }],
99
- borrowIncentives: [{
100
- token: 'MORPHO',
101
- apy: morphoBorrowApy,
102
- incentiveKind: IncentiveKind.Reward,
103
- description: 'Eligible for protocol-level MORPHO incentives.',
104
- }],
115
+ supplyIncentives: [],
116
+ borrowIncentives: [],
105
117
  };
106
118
 
107
119
  assetsData[wethToEth(collateralTokenInfo.symbol)] = {
@@ -138,10 +150,70 @@ export async function _getMorphoBlueMarketData(provider: Client, network: Networ
138
150
  };
139
151
  }
140
152
 
153
+ export async function _getMorphoBlueMarketData(provider: Client, network: NetworkNumber, selectedMarket: MorphoBlueMarketData): Promise<MorphoBlueMarketInfo> {
154
+ const marketInfo = await getMorphoBlueMarketDataInternal(provider, network, selectedMarket);
155
+
156
+ try {
157
+ const rewards = await getRewardsForMarket(selectedMarket.marketId, network);
158
+ return addMorphoBlueRewardsToMarketInfo(marketInfo, rewards);
159
+ } catch (error) {
160
+ console.error(error);
161
+ return addMorphoBlueRewardsToMarketInfo(marketInfo, { supplyApy: '0', borrowApy: '0' });
162
+ }
163
+ }
164
+
165
+ export function _getMorphoBluePortfolioMarketData(provider: Client, network: NetworkNumber, selectedMarket: MorphoBlueMarketData): Promise<MorphoBlueMarketInfo> {
166
+ return getMorphoBlueMarketDataInternal(provider, network, selectedMarket);
167
+ }
168
+
141
169
  export async function getMorphoBlueMarketData(provider: EthereumProvider, network: NetworkNumber, selectedMarket: MorphoBlueMarketData): Promise<MorphoBlueMarketInfo> {
142
170
  return _getMorphoBlueMarketData(getViemProvider(provider, network), network, selectedMarket);
143
171
  }
144
172
 
173
+ export function getMorphoBluePortfolioMarketData(provider: EthereumProvider, network: NetworkNumber, selectedMarket: MorphoBlueMarketData): Promise<MorphoBlueMarketInfo> {
174
+ return _getMorphoBluePortfolioMarketData(getViemProvider(provider, network), network, selectedMarket);
175
+ }
176
+
177
+ export const getMorphoBluePositionDataWithMarketInfo = (
178
+ data: MorphoBluePositionData,
179
+ marketInfo: MorphoBlueMarketInfo,
180
+ ): MorphoBluePositionData => ({
181
+ ...data,
182
+ ...getMorphoBlueAggregatedPositionData({
183
+ usedAssets: data.usedAssets,
184
+ assetsData: marketInfo.assetsData,
185
+ marketInfo,
186
+ }),
187
+ });
188
+
189
+ export const getMorphoEarnDataWithMarketInfo = (data: MorphoBlueEarnData, marketInfo: MorphoBlueMarketInfo): MorphoBlueEarnData => {
190
+ const loanTokenInfo = marketInfo.assetsData[marketInfo.loanToken];
191
+ const usedAssets: MMUsedAssets = {
192
+ [marketInfo.loanToken]: {
193
+ symbol: loanTokenInfo.symbol,
194
+ supplied: data.amount,
195
+ borrowed: '0',
196
+ isSupplied: new Dec(data.amount).gt(0),
197
+ isBorrowed: false,
198
+ collateral: false,
199
+ suppliedUsd: data.amountUsd,
200
+ borrowedUsd: '0',
201
+ },
202
+ };
203
+
204
+ return {
205
+ ...data,
206
+ apy: calculateNetApy({ usedAssets, assetsData: marketInfo.assetsData as unknown as MMAssetsData }).netApy,
207
+ };
208
+ };
209
+
210
+ export function getMorphoBlueMarketRewards(
211
+ network: NetworkNumber,
212
+ selectedMarket: MorphoBlueMarketData,
213
+ ): Promise<MorphoBlueMarketRewards> {
214
+ return getRewardsForMarket(selectedMarket.marketId, network);
215
+ }
216
+
145
217
  export const _getMorphoBlueAccountBalances = async (provider: Client, network: NetworkNumber, block: Blockish, addressMapping: boolean, address: EthAddress, selectedMarket: MorphoBlueMarketData): Promise<PositionBalances> => {
146
218
  let balances: PositionBalances = {
147
219
  collateral: {},
@@ -238,7 +310,7 @@ export async function getMorphoBlueAccountData(provider: EthereumProvider, netwo
238
310
  return _getMorphoBlueAccountData(getViemProvider(provider, network), network, account, selectedMarket, marketInfo);
239
311
  }
240
312
 
241
- export async function getMorphoEarn(provider: Client, network: NetworkNumber, account: EthAddress, selectedMarket: MorphoBlueMarketData, marketInfo: MorphoBlueMarketInfo): Promise<{ apy: string, amount: string, amountUsd: string }> {
313
+ export async function getMorphoEarn(provider: Client, network: NetworkNumber, account: EthAddress, selectedMarket: MorphoBlueMarketData, marketInfo: MorphoBlueMarketInfo): Promise<MorphoBlueEarnData> {
242
314
  const {
243
315
  loanToken, collateralToken, oracle, irm, lltv,
244
316
  } = selectedMarket;
@@ -254,24 +326,9 @@ export async function getMorphoEarn(provider: Client, network: NetworkNumber, ac
254
326
  const loanTokenInfo = marketInfo.assetsData[marketInfo.loanToken];
255
327
  const loanTokenSupplied = assetAmountInEth(loanInfo.suppliedInAssets.toString(), marketInfo.loanToken);
256
328
  const loanTokenSuppliedUsd = new Dec(loanTokenSupplied).mul(loanTokenInfo.price).toString();
257
- const usedAssets: MMUsedAssets = {
258
- [marketInfo.loanToken]: {
259
- symbol: loanTokenInfo.symbol,
260
- supplied: loanTokenSupplied,
261
- borrowed: '0',
262
- isSupplied: new Dec(loanInfo.suppliedInAssets.toString()).gt(0),
263
- isBorrowed: false,
264
- collateral: false,
265
- suppliedUsd: loanTokenSuppliedUsd,
266
- borrowedUsd: '0',
267
- },
268
- };
269
-
270
- const { netApy } = calculateNetApy({ usedAssets, assetsData: marketInfo.assetsData as unknown as MMAssetsData });
271
-
272
- return {
273
- apy: netApy,
329
+ return getMorphoEarnDataWithMarketInfo({
330
+ apy: '0',
274
331
  amount: loanTokenSupplied,
275
332
  amountUsd: loanTokenSuppliedUsd,
276
- };
277
- }
333
+ }, marketInfo);
334
+ }
@@ -11,7 +11,7 @@ import {
11
11
  MorphoBlueMarkets,
12
12
  SparkMarkets,
13
13
  } from '../markets';
14
- import { _getMorphoBlueAccountData, _getMorphoBlueMarketData, getMorphoEarn } from '../morphoBlue';
14
+ import { _getMorphoBlueAccountData, _getMorphoBluePortfolioMarketData, getMorphoEarn } from '../morphoBlue';
15
15
  import {
16
16
  AaveV2MarketData,
17
17
  AaveV3MarketData,
@@ -162,7 +162,7 @@ export async function getPortfolioData(provider: EthereumProvider, network: Netw
162
162
  await Promise.allSettled([
163
163
  // === MARKET DATA (needs to be fetched first) ===
164
164
  ...morphoMarkets.map(async (market) => {
165
- const marketData = await _getMorphoBlueMarketData(client, network, market);
165
+ const marketData = await _getMorphoBluePortfolioMarketData(client, network, market);
166
166
  morphoMarketsData[market.value] = marketData;
167
167
  }),
168
168
  ...compoundV3Markets.map(async (market) => {
@@ -235,6 +235,17 @@ export interface MorphoBluePositionData {
235
235
  exposure: string,
236
236
  }
237
237
 
238
+ export interface MorphoBlueEarnData {
239
+ apy: string,
240
+ amount: string,
241
+ amountUsd: string,
242
+ }
243
+
244
+ export interface MorphoBlueMarketRewards {
245
+ supplyApy: string,
246
+ borrowApy: string,
247
+ }
248
+
238
249
  export interface MorphoBlueVault {
239
250
  address: string,
240
251
  }