@defisaver/positions-sdk 2.1.168-stable-pair-dev → 2.1.169-custom-fetching-dev
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/cjs/markets/morphoBlue/index.d.ts +2 -0
- package/cjs/markets/morphoBlue/index.js +18 -1
- package/cjs/portfolio/customDeFiData.d.ts +3 -0
- package/cjs/portfolio/customDeFiData.js +262 -0
- package/cjs/portfolio/index.d.ts +1 -0
- package/cjs/portfolio/index.js +15 -851
- package/cjs/types/morphoBlue.d.ts +1 -0
- package/cjs/types/morphoBlue.js +1 -0
- package/cjs/types/portfolio.d.ts +34 -0
- package/cjs/types/portfolio.js +18 -0
- package/esm/markets/morphoBlue/index.d.ts +2 -0
- package/esm/markets/morphoBlue/index.js +16 -0
- package/esm/portfolio/customDeFiData.d.ts +3 -0
- package/esm/portfolio/customDeFiData.js +256 -0
- package/esm/portfolio/index.d.ts +1 -0
- package/esm/portfolio/index.js +16 -849
- package/esm/types/morphoBlue.d.ts +1 -0
- package/esm/types/morphoBlue.js +1 -0
- package/esm/types/portfolio.d.ts +34 -0
- package/esm/types/portfolio.js +17 -1
- package/package.json +2 -2
- package/src/markets/morphoBlue/index.ts +16 -0
- package/src/portfolio/customDeFiData.ts +378 -0
- package/src/portfolio/index.ts +16 -834
- package/src/types/morphoBlue.ts +1 -0
- package/src/types/portfolio.ts +37 -0
|
@@ -110,6 +110,7 @@ export declare enum MorphoBlueVersions {
|
|
|
110
110
|
MorphoBlueUSDeUSDC_915_Base = "morphoblueusdeusdc_915_base",// USDe/USDC 0.915
|
|
111
111
|
MorphoBlueCbEthUSDC_770_Base = "morphobluecbethusdc_770_base",// cbETH/USDC 0.77
|
|
112
112
|
MorphoBlueCbXRPUSDC_625_Base = "morphobluecbxrpusdc_625_base",// cbXRP/USDC 0.625
|
|
113
|
+
MorphoBlueCbHYPEUSDC_625_Base = "morphobluecbhypeusdc_625_base",// cbHYPE/USDC 0.625
|
|
113
114
|
MorphoBlueSyrupUSDCUSDC_915_Arb = "morphobluesyrupusdcusdc_915_arb",// syrupUSDC/USDC
|
|
114
115
|
MorphoBlueWBTCUSDC_860_Arb = "morphobluewbtcusdc_860_arb",// WBTC/USDC
|
|
115
116
|
MorphoBlueWstEthUSDC_860_Arb = "morphobluewstethusdc_860_arb",// wstETH/USDC
|
package/cjs/types/morphoBlue.js
CHANGED
|
@@ -120,6 +120,7 @@ var MorphoBlueVersions;
|
|
|
120
120
|
MorphoBlueVersions["MorphoBlueUSDeUSDC_915_Base"] = "morphoblueusdeusdc_915_base";
|
|
121
121
|
MorphoBlueVersions["MorphoBlueCbEthUSDC_770_Base"] = "morphobluecbethusdc_770_base";
|
|
122
122
|
MorphoBlueVersions["MorphoBlueCbXRPUSDC_625_Base"] = "morphobluecbxrpusdc_625_base";
|
|
123
|
+
MorphoBlueVersions["MorphoBlueCbHYPEUSDC_625_Base"] = "morphobluecbhypeusdc_625_base";
|
|
123
124
|
// ARBITRUM
|
|
124
125
|
MorphoBlueVersions["MorphoBlueSyrupUSDCUSDC_915_Arb"] = "morphobluesyrupusdcusdc_915_arb";
|
|
125
126
|
MorphoBlueVersions["MorphoBlueWBTCUSDC_860_Arb"] = "morphobluewbtcusdc_860_arb";
|
package/cjs/types/portfolio.d.ts
CHANGED
|
@@ -60,6 +60,40 @@ export interface PortfolioPositionsDataForAddress {
|
|
|
60
60
|
export interface PortfolioPositionsData {
|
|
61
61
|
[key: EthAddress]: PortfolioPositionsDataForAddress;
|
|
62
62
|
}
|
|
63
|
+
export declare enum PortfolioProtocol {
|
|
64
|
+
AaveV2 = "aaveV2",
|
|
65
|
+
AaveV3 = "aaveV3",
|
|
66
|
+
AaveV4 = "aaveV4",
|
|
67
|
+
CompoundV2 = "compoundV2",
|
|
68
|
+
CompoundV3 = "compoundV3",
|
|
69
|
+
Spark = "spark",
|
|
70
|
+
MorphoBlue = "morphoBlue",
|
|
71
|
+
MorphoMidnight = "morphoMidnight",
|
|
72
|
+
CrvUsd = "crvUsd",
|
|
73
|
+
LlamaLend = "llamaLend",
|
|
74
|
+
Maker = "maker",
|
|
75
|
+
Liquity = "liquity",
|
|
76
|
+
LiquityV2 = "liquityV2",
|
|
77
|
+
Fluid = "fluid"
|
|
78
|
+
}
|
|
79
|
+
export interface CustomDeFiDataOptions {
|
|
80
|
+
/** Defaults to every protocol. */
|
|
81
|
+
protocols?: PortfolioProtocol[];
|
|
82
|
+
fetchStaking?: boolean;
|
|
83
|
+
fetchRewards?: boolean;
|
|
84
|
+
/** Keep Aave V3 / Spark positions with no supply so the eMode category is available. */
|
|
85
|
+
returnEmptyEModePositions?: boolean;
|
|
86
|
+
fetchFluidMarkets?: boolean;
|
|
87
|
+
isSim?: boolean;
|
|
88
|
+
/** viem multicall calldata cap in bytes; defaults to 250k (2k when isSim). */
|
|
89
|
+
batchSize?: number;
|
|
90
|
+
}
|
|
91
|
+
export interface CustomDeFiData {
|
|
92
|
+
positions: PortfolioPositionsData;
|
|
93
|
+
stakingPositions: Record<string, any>;
|
|
94
|
+
rewardsData: Record<string, any>;
|
|
95
|
+
markets: PortfolioMarketsData;
|
|
96
|
+
}
|
|
63
97
|
export interface PortfolioMarketsData {
|
|
64
98
|
morphoMarketsData: Record<string, MorphoBlueMarketInfo>;
|
|
65
99
|
morphoMidnightMarketsData: Record<string, MorphoMidnightMarketInfo>;
|
package/cjs/types/portfolio.js
CHANGED
|
@@ -1,2 +1,20 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PortfolioProtocol = void 0;
|
|
4
|
+
var PortfolioProtocol;
|
|
5
|
+
(function (PortfolioProtocol) {
|
|
6
|
+
PortfolioProtocol["AaveV2"] = "aaveV2";
|
|
7
|
+
PortfolioProtocol["AaveV3"] = "aaveV3";
|
|
8
|
+
PortfolioProtocol["AaveV4"] = "aaveV4";
|
|
9
|
+
PortfolioProtocol["CompoundV2"] = "compoundV2";
|
|
10
|
+
PortfolioProtocol["CompoundV3"] = "compoundV3";
|
|
11
|
+
PortfolioProtocol["Spark"] = "spark";
|
|
12
|
+
PortfolioProtocol["MorphoBlue"] = "morphoBlue";
|
|
13
|
+
PortfolioProtocol["MorphoMidnight"] = "morphoMidnight";
|
|
14
|
+
PortfolioProtocol["CrvUsd"] = "crvUsd";
|
|
15
|
+
PortfolioProtocol["LlamaLend"] = "llamaLend";
|
|
16
|
+
PortfolioProtocol["Maker"] = "maker";
|
|
17
|
+
PortfolioProtocol["Liquity"] = "liquity";
|
|
18
|
+
PortfolioProtocol["LiquityV2"] = "liquityV2";
|
|
19
|
+
PortfolioProtocol["Fluid"] = "fluid";
|
|
20
|
+
})(PortfolioProtocol || (exports.PortfolioProtocol = PortfolioProtocol = {}));
|
|
@@ -109,6 +109,7 @@ export declare const MORPHO_BLUE_AERO_USDC_625_BASE: (networkId?: NetworkNumber)
|
|
|
109
109
|
export declare const MORPHO_BLUE_USDE_USDC_915_BASE: (networkId?: NetworkNumber) => MorphoBlueMarketData;
|
|
110
110
|
export declare const MORPHO_BLUE_CBETH_USDC_770_BASE: (networkId?: NetworkNumber) => MorphoBlueMarketData;
|
|
111
111
|
export declare const MORPHO_BLUE_CBXRP_USDC_625_BASE: (networkId?: NetworkNumber) => MorphoBlueMarketData;
|
|
112
|
+
export declare const MORPHO_BLUE_CBHYPE_USDC_625_BASE: (networkId?: NetworkNumber) => MorphoBlueMarketData;
|
|
112
113
|
export declare const MORPHO_BLUE_SYRUPUSDC_USDC_915_ARB: (networkId?: NetworkNumber) => MorphoBlueMarketData;
|
|
113
114
|
export declare const MorphoBlueWBTCUSDC_860_Arb: (networkId?: NetworkNumber) => MorphoBlueMarketData;
|
|
114
115
|
export declare const MORPHO_BLUE_WSTETH_USDC_860_ARB: (networkId?: NetworkNumber) => MorphoBlueMarketData;
|
|
@@ -226,6 +227,7 @@ export declare const MorphoBlueMarkets: (networkId: NetworkNumber) => {
|
|
|
226
227
|
readonly morphoblueusdeusdc_915_base: MorphoBlueMarketData;
|
|
227
228
|
readonly morphobluecbethusdc_770_base: MorphoBlueMarketData;
|
|
228
229
|
readonly morphobluecbxrpusdc_625_base: MorphoBlueMarketData;
|
|
230
|
+
readonly morphobluecbhypeusdc_625_base: MorphoBlueMarketData;
|
|
229
231
|
readonly morphobluewsuperoethbweth_915_base: MorphoBlueMarketData;
|
|
230
232
|
readonly morphobluecbetheth_945_base: MorphoBlueMarketData;
|
|
231
233
|
readonly morphobluecbetheth_965_base: MorphoBlueMarketData;
|
|
@@ -1652,6 +1652,21 @@ export const MORPHO_BLUE_CBXRP_USDC_625_BASE = (networkId = NetworkNumber.Base)
|
|
|
1652
1652
|
marketId: '0xd4a903dc6d949519060c7707f9604fdc9772c046e05c2e3a8fce0bd7196e4109',
|
|
1653
1653
|
protocolName: 'morpho-blue',
|
|
1654
1654
|
});
|
|
1655
|
+
export const MORPHO_BLUE_CBHYPE_USDC_625_BASE = (networkId = NetworkNumber.Base) => ({
|
|
1656
|
+
chainIds: [NetworkNumber.Base],
|
|
1657
|
+
label: 'Morpho Blue',
|
|
1658
|
+
shortLabel: 'cbHYPE/USDC',
|
|
1659
|
+
value: MorphoBlueVersions.MorphoBlueCbHYPEUSDC_625_Base,
|
|
1660
|
+
url: 'cbhypeusdc-76629002',
|
|
1661
|
+
loanToken: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913',
|
|
1662
|
+
collateralToken: '0xB200000000000000000000451d033a5000cb479e',
|
|
1663
|
+
oracle: '0x7FaD8B8De2DDb7b4B415e1Aa3613e45EeF9E4bFf',
|
|
1664
|
+
oracleType: MorphoBlueOracleType.MARKET_RATE,
|
|
1665
|
+
irm: '0x46415998764C29aB2a25CbeA6254146D50D22687',
|
|
1666
|
+
lltv: 0.625,
|
|
1667
|
+
marketId: '0x76629002c9fdb20fb2092053a4f22c5c65e04a81887218b9546f2a2d82b4c0a8',
|
|
1668
|
+
protocolName: 'morpho-blue',
|
|
1669
|
+
});
|
|
1655
1670
|
// ARBITRUM
|
|
1656
1671
|
export const MORPHO_BLUE_SYRUPUSDC_USDC_915_ARB = (networkId = NetworkNumber.Eth) => ({
|
|
1657
1672
|
chainIds: [NetworkNumber.Arb],
|
|
@@ -1926,6 +1941,7 @@ export const MorphoBlueMarkets = (networkId) => ({
|
|
|
1926
1941
|
[MorphoBlueVersions.MorphoBlueUSDeUSDC_915_Base]: MORPHO_BLUE_USDE_USDC_915_BASE(networkId),
|
|
1927
1942
|
[MorphoBlueVersions.MorphoBlueCbEthUSDC_770_Base]: MORPHO_BLUE_CBETH_USDC_770_BASE(networkId),
|
|
1928
1943
|
[MorphoBlueVersions.MorphoBlueCbXRPUSDC_625_Base]: MORPHO_BLUE_CBXRP_USDC_625_BASE(networkId),
|
|
1944
|
+
[MorphoBlueVersions.MorphoBlueCbHYPEUSDC_625_Base]: MORPHO_BLUE_CBHYPE_USDC_625_BASE(networkId),
|
|
1929
1945
|
[MorphoBlueVersions.MorphoBlueWsuperOETHbWETH_915_Base]: MORPHO_BLUE_WSUPEROETHB_WETH_915_BASE(networkId),
|
|
1930
1946
|
[MorphoBlueVersions.MorphoBlueCbEthEth_945_Base]: MORPHO_BLUE_CBETH_ETH_945_BASE(networkId),
|
|
1931
1947
|
[MorphoBlueVersions.MorphoBlueCbEthEth_965_Base]: MORPHO_BLUE_CBETH_ETH_965_BASE(networkId),
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { EthAddress, EthereumProvider, NetworkNumber } from '../types/common';
|
|
2
|
+
import { CustomDeFiData, CustomDeFiDataOptions } from '../types';
|
|
3
|
+
export declare function getCustomDeFiData(provider: EthereumProvider, network: NetworkNumber, defaultProvider: EthereumProvider, addresses: EthAddress[], options?: CustomDeFiDataOptions): Promise<CustomDeFiData>;
|
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
import Dec from 'decimal.js';
|
|
11
|
+
import { NetworkNumber } from '../types/common';
|
|
12
|
+
import { AaveMarkets, AaveV4Spokes, CompoundMarkets, CrvUsdMarkets, LiquityV2Markets, LlamaLendMarkets, MakerActiveIlks, MorphoBlueMarkets, MorphoMidnightMarkets, SparkMarkets, } from '../markets';
|
|
13
|
+
import { AaveVersions, CompoundVersions, PortfolioProtocol, } from '../types';
|
|
14
|
+
import { getViemProvider } from '../services/viem';
|
|
15
|
+
import { ZERO_ADDRESS } from '../constants';
|
|
16
|
+
import { _getAaveV2AccountData, _getAaveV2MarketsData } from '../aaveV2';
|
|
17
|
+
import { _getAaveV3AccountData, _getAaveV3MarketData, getStakeAaveData } from '../aaveV3';
|
|
18
|
+
import { _getAaveV4AccountData, _getAaveV4SpokeData } from '../aaveV4';
|
|
19
|
+
import { _getCompoundV2AccountData, _getCompoundV2MarketsData } from '../compoundV2';
|
|
20
|
+
import { _getCompoundV3AccountData, _getCompoundV3MarketsData } from '../compoundV3';
|
|
21
|
+
import { _getSparkAccountData, _getSparkMarketsData } from '../spark';
|
|
22
|
+
import { _getCurveUsdGlobalData, _getCurveUsdUserData } from '../curveUsd';
|
|
23
|
+
import { _getLlamaLendGlobalData, _getLlamaLendUserData } from '../llamaLend';
|
|
24
|
+
import { _getMorphoBlueAccountData, _getMorphoBluePortfolioMarketData, getMorphoEarn } from '../morphoBlue';
|
|
25
|
+
import { _getMorphoMidnightAccountData, _getMorphoMidnightMarketData } from '../morphoMidnight';
|
|
26
|
+
import { _getMakerCdpData, _getMakerIlksData, _getUserCdps } from '../maker';
|
|
27
|
+
import { _getLiquityTroveInfo, getLiquityStakingData } from '../liquity';
|
|
28
|
+
import { _getLiquityV2MarketData, getLiquitySAndYBold, getLiquityV2Staking } from '../liquityV2';
|
|
29
|
+
import { _getAllFluidMarketDataPortfolio, _getAllUserEarnPositionsWithFTokens, _getUserPositionsPortfolio } from '../fluid';
|
|
30
|
+
import { getUmbrellaData } from '../umbrella';
|
|
31
|
+
import { getMerklUnclaimedRewards, getUnclaimedRewardsForAllMarkets } from '../claiming/aaveV3';
|
|
32
|
+
import { fetchSparkAirdropRewards, fetchSparkRewards } from '../claiming/spark';
|
|
33
|
+
import { getKingRewards } from '../claiming/king';
|
|
34
|
+
import { fetchEthenaAirdropRewards } from '../claiming/ethena';
|
|
35
|
+
import { getUniswapRewards } from '../claiming/uniswap';
|
|
36
|
+
const lower = (address) => address.toLowerCase();
|
|
37
|
+
const positive = (value) => new Dec(value || '0').gt(0);
|
|
38
|
+
const supported = (list, network) => (Object.values(list).filter((m) => m.chainIds.includes(network)));
|
|
39
|
+
export function getCustomDeFiData(provider_1, network_1, defaultProvider_1, addresses_1) {
|
|
40
|
+
return __awaiter(this, arguments, void 0, function* (provider, network, defaultProvider, addresses, options = {}) {
|
|
41
|
+
var _a;
|
|
42
|
+
const { protocols = Object.values(PortfolioProtocol), fetchStaking = false, fetchRewards = false, returnEmptyEModePositions = false, fetchFluidMarkets = false, isSim = false, } = options;
|
|
43
|
+
// JSON-RPC body ends up ~4x the calldata cap; 250k keeps it under the ~2.5MB provider limit.
|
|
44
|
+
const batchSize = (_a = options.batchSize) !== null && _a !== void 0 ? _a : (isSim ? 2000 : 250000);
|
|
45
|
+
const has = (protocol) => protocols.includes(protocol);
|
|
46
|
+
const isMainnet = network === NetworkNumber.Eth;
|
|
47
|
+
const isFluidSupported = [NetworkNumber.Eth, NetworkNumber.Arb, NetworkNumber.Base, NetworkNumber.Plasma].includes(network);
|
|
48
|
+
const client = getViemProvider(provider, network, { batch: { multicall: { batchSize } } });
|
|
49
|
+
const defaultClient = getViemProvider(defaultProvider, network, { batch: { multicall: { batchSize } } });
|
|
50
|
+
const aaveV3Markets = has(PortfolioProtocol.AaveV3)
|
|
51
|
+
? [AaveVersions.AaveV3, AaveVersions.AaveV3Lido, AaveVersions.AaveV3Etherfi].map((v) => AaveMarkets(network)[v]).filter((m) => m.chainIds.includes(network))
|
|
52
|
+
: [];
|
|
53
|
+
const aaveV2Markets = has(PortfolioProtocol.AaveV2) ? [AaveMarkets(network)[AaveVersions.AaveV2]].filter((m) => m.chainIds.includes(network)) : [];
|
|
54
|
+
const aaveV4Spokes = has(PortfolioProtocol.AaveV4) ? supported(AaveV4Spokes(network), network) : [];
|
|
55
|
+
const compoundV3Markets = has(PortfolioProtocol.CompoundV3) ? supported(CompoundMarkets(network), network).filter((m) => m.value !== CompoundVersions.CompoundV2) : [];
|
|
56
|
+
const compoundV2Markets = has(PortfolioProtocol.CompoundV2) ? [CompoundMarkets(network)[CompoundVersions.CompoundV2]].filter((m) => m.chainIds.includes(network)) : [];
|
|
57
|
+
const sparkMarkets = has(PortfolioProtocol.Spark) ? supported(SparkMarkets(network), network) : [];
|
|
58
|
+
const morphoMarkets = has(PortfolioProtocol.MorphoBlue) ? supported(MorphoBlueMarkets(network), network) : [];
|
|
59
|
+
const morphoMidnightMarkets = has(PortfolioProtocol.MorphoMidnight) ? supported(MorphoMidnightMarkets(network), network) : [];
|
|
60
|
+
const crvUsdMarkets = has(PortfolioProtocol.CrvUsd) ? supported(CrvUsdMarkets(network), network) : [];
|
|
61
|
+
const llamaLendMarkets = has(PortfolioProtocol.LlamaLend) && [NetworkNumber.Eth, NetworkNumber.Arb].includes(network) ? supported(LlamaLendMarkets(network), network) : [];
|
|
62
|
+
const liquityV2Markets = has(PortfolioProtocol.LiquityV2) && isMainnet ? Object.values(LiquityV2Markets(network)) : [];
|
|
63
|
+
const liquityV2StakingMarkets = liquityV2Markets.filter((m) => !m.isLegacy);
|
|
64
|
+
const fetchMaker = has(PortfolioProtocol.Maker) && isMainnet;
|
|
65
|
+
const fetchLiquity = has(PortfolioProtocol.Liquity) && isMainnet;
|
|
66
|
+
const fetchFluid = has(PortfolioProtocol.Fluid) && isFluidSupported;
|
|
67
|
+
const markets = {
|
|
68
|
+
morphoMarketsData: {},
|
|
69
|
+
morphoMidnightMarketsData: {},
|
|
70
|
+
compoundV3MarketsData: {},
|
|
71
|
+
sparkMarketsData: {},
|
|
72
|
+
aaveV3MarketsData: {},
|
|
73
|
+
aaveV2MarketsData: {},
|
|
74
|
+
compoundV2MarketsData: {},
|
|
75
|
+
crvUsdMarketsData: {},
|
|
76
|
+
llamaLendMarketsData: {},
|
|
77
|
+
liquityV2MarketsData: {},
|
|
78
|
+
aaveV4SpokesData: {},
|
|
79
|
+
fluidMarketsData: {},
|
|
80
|
+
makerMarketsData: {},
|
|
81
|
+
};
|
|
82
|
+
const makerCdps = {};
|
|
83
|
+
const positions = {};
|
|
84
|
+
const stakingPositions = {};
|
|
85
|
+
const rewardsData = {};
|
|
86
|
+
for (const address of addresses) {
|
|
87
|
+
positions[lower(address)] = {
|
|
88
|
+
aaveV3: {},
|
|
89
|
+
aaveV4: {},
|
|
90
|
+
morphoBlue: {},
|
|
91
|
+
morphoMidnight: {},
|
|
92
|
+
compoundV3: {},
|
|
93
|
+
spark: {},
|
|
94
|
+
maker: {},
|
|
95
|
+
aaveV2: {},
|
|
96
|
+
compoundV2: {},
|
|
97
|
+
liquity: {},
|
|
98
|
+
crvUsd: {},
|
|
99
|
+
llamaLend: {},
|
|
100
|
+
fluid: { error: '', data: {} },
|
|
101
|
+
};
|
|
102
|
+
if (fetchStaking) {
|
|
103
|
+
stakingPositions[lower(address)] = {
|
|
104
|
+
aaveV3: {}, morphoBlue: {}, liquity: {}, liquityV2: {}, fluid: { error: '', data: {} },
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
if (fetchRewards) {
|
|
108
|
+
rewardsData[lower(address)] = {
|
|
109
|
+
merkl: {}, aaveV3: {}, spark: {}, spk: {}, king: {}, ethena: {}, uniswap: {},
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
const run = (label, fetch, store, onError) => __awaiter(this, void 0, void 0, function* () {
|
|
114
|
+
try {
|
|
115
|
+
store(yield fetch());
|
|
116
|
+
}
|
|
117
|
+
catch (error) {
|
|
118
|
+
console.error(`Error fetching ${label}:`, error);
|
|
119
|
+
onError({ error: `Error fetching ${label}`, data: null });
|
|
120
|
+
}
|
|
121
|
+
});
|
|
122
|
+
const perAddress = (list, task) => list.map((m) => addresses.map((a) => task(m, a))).flat();
|
|
123
|
+
const batchRewards = (key, label, fetch, enabled = true) => (() => __awaiter(this, void 0, void 0, function* () {
|
|
124
|
+
if (!enabled) {
|
|
125
|
+
for (const address of addresses)
|
|
126
|
+
rewardsData[lower(address)][key] = { error: '', data: [] };
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
129
|
+
try {
|
|
130
|
+
const result = yield fetch();
|
|
131
|
+
for (const address of addresses)
|
|
132
|
+
rewardsData[lower(address)][key] = { error: '', data: result[lower(address)] || [] };
|
|
133
|
+
}
|
|
134
|
+
catch (error) {
|
|
135
|
+
console.error(`Error fetching ${label}:`, error);
|
|
136
|
+
for (const address of addresses)
|
|
137
|
+
rewardsData[lower(address)][key] = { error: `Error fetching ${label}`, data: null };
|
|
138
|
+
}
|
|
139
|
+
}))();
|
|
140
|
+
yield Promise.allSettled([
|
|
141
|
+
...morphoMarkets.map((m) => __awaiter(this, void 0, void 0, function* () { markets.morphoMarketsData[m.value] = yield _getMorphoBluePortfolioMarketData(client, network, m); })),
|
|
142
|
+
...morphoMidnightMarkets.map((m) => __awaiter(this, void 0, void 0, function* () { markets.morphoMidnightMarketsData[m.value] = yield _getMorphoMidnightMarketData(client, network, m); })),
|
|
143
|
+
...compoundV3Markets.map((m) => __awaiter(this, void 0, void 0, function* () { markets.compoundV3MarketsData[m.value] = yield _getCompoundV3MarketsData(client, network, m, defaultClient); })),
|
|
144
|
+
...sparkMarkets.map((m) => __awaiter(this, void 0, void 0, function* () { markets.sparkMarketsData[m.value] = yield _getSparkMarketsData(client, network, m); })),
|
|
145
|
+
...aaveV3Markets.map((m) => __awaiter(this, void 0, void 0, function* () { markets.aaveV3MarketsData[m.value] = yield _getAaveV3MarketData(client, network, m); })),
|
|
146
|
+
...aaveV4Spokes.map((s) => __awaiter(this, void 0, void 0, function* () { markets.aaveV4SpokesData[s.value] = yield _getAaveV4SpokeData(client, network, s); })),
|
|
147
|
+
...aaveV2Markets.map((m) => __awaiter(this, void 0, void 0, function* () { markets.aaveV2MarketsData[m.value] = yield _getAaveV2MarketsData(client, network, m); })),
|
|
148
|
+
...compoundV2Markets.map((m) => __awaiter(this, void 0, void 0, function* () { markets.compoundV2MarketsData[m.value] = yield _getCompoundV2MarketsData(client, network); })),
|
|
149
|
+
...crvUsdMarkets.map((m) => __awaiter(this, void 0, void 0, function* () { markets.crvUsdMarketsData[m.value] = yield _getCurveUsdGlobalData(client, network, m); })),
|
|
150
|
+
...llamaLendMarkets.map((m) => __awaiter(this, void 0, void 0, function* () { markets.llamaLendMarketsData[m.value] = yield _getLlamaLendGlobalData(client, network, m); })),
|
|
151
|
+
...liquityV2Markets.map((m) => __awaiter(this, void 0, void 0, function* () { markets.liquityV2MarketsData[m.value] = yield _getLiquityV2MarketData(client, network, m); })),
|
|
152
|
+
(() => __awaiter(this, void 0, void 0, function* () {
|
|
153
|
+
if (!fetchFluid || !fetchFluidMarkets)
|
|
154
|
+
return;
|
|
155
|
+
try {
|
|
156
|
+
markets.fluidMarketsData = yield _getAllFluidMarketDataPortfolio(client, network);
|
|
157
|
+
}
|
|
158
|
+
catch (error) {
|
|
159
|
+
console.error('Error fetching Fluid markets data:', error);
|
|
160
|
+
}
|
|
161
|
+
}))(),
|
|
162
|
+
(() => __awaiter(this, void 0, void 0, function* () {
|
|
163
|
+
if (!fetchMaker)
|
|
164
|
+
return;
|
|
165
|
+
try {
|
|
166
|
+
markets.makerMarketsData = yield _getMakerIlksData(client, network, MakerActiveIlks);
|
|
167
|
+
}
|
|
168
|
+
catch (error) {
|
|
169
|
+
console.error('Error fetching Maker ilks data:', error);
|
|
170
|
+
}
|
|
171
|
+
}))(),
|
|
172
|
+
...addresses.map((address) => __awaiter(this, void 0, void 0, function* () {
|
|
173
|
+
if (!fetchMaker)
|
|
174
|
+
return;
|
|
175
|
+
makerCdps[lower(address)] = yield _getUserCdps(client, network, address);
|
|
176
|
+
})),
|
|
177
|
+
...addresses.map((address) => fetchFluid && run(`Fluid positions for address ${address}`, () => _getUserPositionsPortfolio(client, network, address), (userPositions) => {
|
|
178
|
+
for (const position of userPositions) {
|
|
179
|
+
if (position.userData && positive(position.userData.suppliedUsd))
|
|
180
|
+
positions[lower(address)].fluid.data[position.userData.nftId] = position.userData;
|
|
181
|
+
}
|
|
182
|
+
}, (err) => { positions[lower(address)].fluid = { error: err.error, data: {} }; })),
|
|
183
|
+
...(fetchStaking ? [
|
|
184
|
+
...addresses.map((address) => fetchFluid && run(`Fluid lend data for address ${address}`, () => _getAllUserEarnPositionsWithFTokens(client, network, address), (data) => { stakingPositions[lower(address)].fluid = data; }, (err) => { stakingPositions[lower(address)].fluid = err; })),
|
|
185
|
+
...addresses.map((address) => fetchLiquity && run(`Liquity staking data for address ${address}`, () => getLiquityStakingData(client, network, address), (data) => { stakingPositions[lower(address)].liquity = data; }, (err) => { stakingPositions[lower(address)].liquity = err; })),
|
|
186
|
+
...addresses.map((address) => has(PortfolioProtocol.AaveV3) && isMainnet && run(`Aave V3 staking data for address ${address}`, () => getStakeAaveData(client, network, address), (data) => { stakingPositions[lower(address)].aaveV3 = data; }, (err) => { stakingPositions[lower(address)].aaveV3 = err; })),
|
|
187
|
+
...addresses.map((address) => has(PortfolioProtocol.AaveV3) && isMainnet && run(`Umbrella staking data for address ${address}`, () => getUmbrellaData(client, network, address), (data) => { stakingPositions[lower(address)].umbrella = data; }, (err) => { stakingPositions[lower(address)].umbrella = err; })),
|
|
188
|
+
...perAddress(liquityV2StakingMarkets, (market, address) => run(`Liquity V2 staking data for address ${address}, market ${market.value}`, () => getLiquityV2Staking(client, network, market.value, address), (data) => { stakingPositions[lower(address)].liquityV2[market.value] = { error: '', data }; }, (err) => { stakingPositions[lower(address)].liquityV2[market.value] = err; })),
|
|
189
|
+
] : []),
|
|
190
|
+
...(fetchRewards ? [
|
|
191
|
+
batchRewards('king', 'King rewards data', () => getKingRewards(client, network, addresses), isMainnet),
|
|
192
|
+
batchRewards('uniswap', 'Uniswap rewards data', () => getUniswapRewards(client, network, addresses), isMainnet),
|
|
193
|
+
batchRewards('spk', 'Spark Airdrop rewards data', () => fetchSparkAirdropRewards(client, network, addresses), isMainnet && has(PortfolioProtocol.Spark)),
|
|
194
|
+
batchRewards('ethena', 'Ethena Airdrop rewards data', () => fetchEthenaAirdropRewards(addresses), isMainnet),
|
|
195
|
+
...addresses.map((address) => run(`Merkl rewards data for address ${address}`, () => getMerklUnclaimedRewards(address, network), (data) => { rewardsData[lower(address)].merkl = { error: '', data }; }, (err) => { rewardsData[lower(address)].merkl = err; })),
|
|
196
|
+
...perAddress(aaveV3Markets, (market, address) => run(`Aave V3 rewards data for address ${address}, market ${market.value}`, () => getUnclaimedRewardsForAllMarkets(client, network, address, market.providerAddress), (data) => { rewardsData[lower(address)].aaveV3[market.value] = { error: '', data }; }, (err) => { rewardsData[lower(address)].aaveV3[market.value] = err; })),
|
|
197
|
+
...perAddress(sparkMarkets, (market, address) => {
|
|
198
|
+
if (!isMainnet) {
|
|
199
|
+
rewardsData[lower(address)].spark[market.value] = { error: '', data: [] };
|
|
200
|
+
return Promise.resolve();
|
|
201
|
+
}
|
|
202
|
+
return run(`Spark rewards data for address ${address}, market ${market.value}`, () => fetchSparkRewards(client, network, address, market.providerAddress), (data) => { rewardsData[lower(address)].spark[market.value] = { error: '', data }; }, (err) => { rewardsData[lower(address)].spark[market.value] = err; });
|
|
203
|
+
}),
|
|
204
|
+
] : []),
|
|
205
|
+
]);
|
|
206
|
+
yield Promise.all([
|
|
207
|
+
...perAddress(aaveV3Markets, (market, address) => run(`AaveV3 account data for address ${address} on market ${market.value}`, () => _getAaveV3AccountData(client, network, address, Object.assign({ selectedMarket: market }, markets.aaveV3MarketsData[market.value])), (data) => { if (returnEmptyEModePositions || positive(data.suppliedUsd))
|
|
208
|
+
positions[lower(address)].aaveV3[market.value] = { error: '', data }; }, (err) => { positions[lower(address)].aaveV3[market.value] = err; })),
|
|
209
|
+
...perAddress(sparkMarkets, (market, address) => run(`Spark account data for address ${address} on market ${market.value}`, () => _getSparkAccountData(client, network, address, { selectedMarket: market, assetsData: markets.sparkMarketsData[market.value].assetsData, eModeCategoriesData: markets.sparkMarketsData[market.value].eModeCategoriesData }), (data) => { if (returnEmptyEModePositions || positive(data.suppliedUsd))
|
|
210
|
+
positions[lower(address)].spark[market.value] = { error: '', data }; }, (err) => { positions[lower(address)].spark[market.value] = err; })),
|
|
211
|
+
...perAddress(aaveV4Spokes, (spoke, address) => run(`AaveV4 account data for address ${address} on spoke ${spoke.value}`, () => _getAaveV4AccountData(client, network, markets.aaveV4SpokesData[spoke.value], address), (data) => { if (positive(data.suppliedUsd))
|
|
212
|
+
positions[lower(address)].aaveV4[spoke.value] = { error: '', data }; }, (err) => { positions[lower(address)].aaveV4[spoke.value] = err; })),
|
|
213
|
+
...perAddress(morphoMarkets, (market, address) => run(`MorphoBlue account data for address ${address} on market ${market.value}`, () => _getMorphoBlueAccountData(client, network, address, market, markets.morphoMarketsData[market.value]), (data) => { if (positive(data.suppliedUsd))
|
|
214
|
+
positions[lower(address)].morphoBlue[market.value] = { error: '', data }; }, (err) => { positions[lower(address)].morphoBlue[market.value] = err; })),
|
|
215
|
+
...(fetchStaking ? perAddress(morphoMarkets, (market, address) => run(`MorphoBlue earn data for address ${address} on market ${market.value}`, () => getMorphoEarn(client, network, address, market, markets.morphoMarketsData[market.value]), (data) => { if (data && positive(data.amount))
|
|
216
|
+
stakingPositions[lower(address)].morphoBlue[market.value] = { error: '', data }; }, (err) => { stakingPositions[lower(address)].morphoBlue[market.value] = err; })) : []),
|
|
217
|
+
...perAddress(morphoMidnightMarkets, (market, address) => {
|
|
218
|
+
var _a;
|
|
219
|
+
if (!((_a = markets.morphoMidnightMarketsData[market.value]) === null || _a === void 0 ? void 0 : _a.isCreated))
|
|
220
|
+
return Promise.resolve();
|
|
221
|
+
return run(`MorphoMidnight account data for address ${address} on market ${market.value}`, () => _getMorphoMidnightAccountData(client, network, address, market, markets.morphoMidnightMarketsData[market.value]), (data) => { if (positive(data.suppliedUsd))
|
|
222
|
+
positions[lower(address)].morphoMidnight[market.value] = { error: '', data }; }, (err) => { positions[lower(address)].morphoMidnight[market.value] = err; });
|
|
223
|
+
}),
|
|
224
|
+
...perAddress(compoundV3Markets, (market, address) => run(`CompoundV3 account data for address ${address} on market ${market.value}`, () => _getCompoundV3AccountData(client, network, address, ZERO_ADDRESS, { selectedMarket: market, assetsData: markets.compoundV3MarketsData[market.value].assetsData }), (data) => { if (positive(data.suppliedUsd))
|
|
225
|
+
positions[lower(address)].compoundV3[market.value] = { error: '', data }; }, (err) => { positions[lower(address)].compoundV3[market.value] = err; })),
|
|
226
|
+
...perAddress(compoundV2Markets, (market, address) => run(`CompoundV2 account data for address ${address}`, () => _getCompoundV2AccountData(client, network, address, markets.compoundV2MarketsData[market.value].assetsData), (data) => { if (positive(data.suppliedUsd))
|
|
227
|
+
positions[lower(address)].compoundV2[market.value] = { error: '', data }; }, (err) => { positions[lower(address)].compoundV2[market.value] = err; })),
|
|
228
|
+
...perAddress(aaveV2Markets, (market, address) => run(`AaveV2 account data for address ${address}`, () => _getAaveV2AccountData(client, network, address, markets.aaveV2MarketsData[market.value].assetsData, market), (data) => { if (positive(data.suppliedUsd))
|
|
229
|
+
positions[lower(address)].aaveV2[market.value] = { error: '', data }; }, (err) => { positions[lower(address)].aaveV2[market.value] = err; })),
|
|
230
|
+
...perAddress(crvUsdMarkets, (market, address) => run(`Curve USD account data for address ${address} on market ${market.value}`, () => _getCurveUsdUserData(client, network, address, market, markets.crvUsdMarketsData[market.value].activeBand, markets.crvUsdMarketsData[market.value].borrowRate), (data) => { if (positive(data.suppliedUsd) || positive(data.borrowedUsd))
|
|
231
|
+
positions[lower(address)].crvUsd[market.value] = { error: '', data }; }, (err) => { positions[lower(address)].crvUsd[market.value] = err; })),
|
|
232
|
+
...perAddress(llamaLendMarkets, (market, address) => run(`LlamaLend account data for address ${address} on market ${market.value}`, () => _getLlamaLendUserData(client, network, address, market, markets.llamaLendMarketsData[market.value]), (data) => {
|
|
233
|
+
if (positive(data.suppliedUsd) || positive(data.borrowedUsd)) {
|
|
234
|
+
positions[lower(address)].llamaLend[market.value] = { error: '', data: Object.assign(Object.assign({}, data), { borrowRate: markets.llamaLendMarketsData[market.value].borrowRate }) };
|
|
235
|
+
}
|
|
236
|
+
}, (err) => { positions[lower(address)].llamaLend[market.value] = err; })),
|
|
237
|
+
...addresses.map((address) => (makerCdps[lower(address)] || []).map((cdpInfo) => run(`Maker CDP data for address ${address} with ID ${cdpInfo.id}`, () => _getMakerCdpData(client, network, cdpInfo, markets.makerMarketsData[cdpInfo.ilkLabel]), (data) => { if (data)
|
|
238
|
+
positions[lower(address)].maker[cdpInfo.id] = { error: '', data }; }, (err) => { positions[lower(address)].maker[cdpInfo.id] = err; }))).flat(),
|
|
239
|
+
...addresses.map((address) => fetchLiquity && run(`Liquity trove info for address ${address}`, () => _getLiquityTroveInfo(client, network, address), (data) => { if (positive(data.collateral))
|
|
240
|
+
positions[lower(address)].liquity = { error: '', data }; }, (err) => { positions[lower(address)].liquity = err; })),
|
|
241
|
+
...(fetchStaking && has(PortfolioProtocol.LiquityV2) ? addresses.map((address) => {
|
|
242
|
+
if (!isMainnet) {
|
|
243
|
+
stakingPositions[lower(address)].liquityV2SBoldYBold = { error: '', data: null };
|
|
244
|
+
return Promise.resolve();
|
|
245
|
+
}
|
|
246
|
+
return run(`sBold/yBold data for address ${address}`, () => getLiquitySAndYBold(client, network, stakingPositions[lower(address)].liquityV2, address), (data) => { stakingPositions[lower(address)].liquityV2SBoldYBold = { error: '', data }; }, (err) => { stakingPositions[lower(address)].liquityV2SBoldYBold = err; });
|
|
247
|
+
}) : []),
|
|
248
|
+
]);
|
|
249
|
+
return {
|
|
250
|
+
positions,
|
|
251
|
+
stakingPositions,
|
|
252
|
+
rewardsData,
|
|
253
|
+
markets,
|
|
254
|
+
};
|
|
255
|
+
});
|
|
256
|
+
}
|
package/esm/portfolio/index.d.ts
CHANGED