@defisaver/positions-sdk 2.1.168 → 2.1.169-custom-fetching-2-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.
Files changed (42) hide show
  1. package/cjs/helpers/aaveV4Helpers/index.js +11 -1
  2. package/cjs/markets/morphoBlue/index.d.ts +2 -0
  3. package/cjs/markets/morphoBlue/index.js +18 -1
  4. package/cjs/moneymarket/moneymarketCommonService.js +12 -2
  5. package/cjs/portfolio/customDeFiData.d.ts +3 -0
  6. package/cjs/portfolio/customDeFiData.js +263 -0
  7. package/cjs/portfolio/index.d.ts +1 -0
  8. package/cjs/portfolio/index.js +15 -851
  9. package/cjs/services/viem.d.ts +2 -0
  10. package/cjs/services/viem.js +27 -1
  11. package/cjs/types/common.d.ts +1 -0
  12. package/cjs/types/common.js +1 -0
  13. package/cjs/types/morphoBlue.d.ts +1 -0
  14. package/cjs/types/morphoBlue.js +1 -0
  15. package/cjs/types/portfolio.d.ts +36 -0
  16. package/cjs/types/portfolio.js +18 -0
  17. package/esm/helpers/aaveV4Helpers/index.js +11 -1
  18. package/esm/markets/morphoBlue/index.d.ts +2 -0
  19. package/esm/markets/morphoBlue/index.js +16 -0
  20. package/esm/moneymarket/moneymarketCommonService.js +12 -2
  21. package/esm/portfolio/customDeFiData.d.ts +3 -0
  22. package/esm/portfolio/customDeFiData.js +257 -0
  23. package/esm/portfolio/index.d.ts +1 -0
  24. package/esm/portfolio/index.js +16 -849
  25. package/esm/services/viem.d.ts +2 -0
  26. package/esm/services/viem.js +25 -0
  27. package/esm/types/common.d.ts +1 -0
  28. package/esm/types/common.js +1 -0
  29. package/esm/types/morphoBlue.d.ts +1 -0
  30. package/esm/types/morphoBlue.js +1 -0
  31. package/esm/types/portfolio.d.ts +36 -0
  32. package/esm/types/portfolio.js +17 -1
  33. package/package.json +2 -2
  34. package/src/helpers/aaveV4Helpers/index.ts +12 -1
  35. package/src/markets/morphoBlue/index.ts +16 -0
  36. package/src/moneymarket/moneymarketCommonService.ts +13 -2
  37. package/src/portfolio/customDeFiData.ts +379 -0
  38. package/src/portfolio/index.ts +16 -834
  39. package/src/services/viem.ts +14 -0
  40. package/src/types/common.ts +1 -0
  41. package/src/types/morphoBlue.ts +1 -0
  42. package/src/types/portfolio.ts +39 -0
@@ -4393,6 +4393,8 @@ export declare const getViemProvider: (provider: EthereumProvider, network: Netw
4393
4393
  uid?: undefined;
4394
4394
  } & import("viem").ExactPartial<Pick<import("viem").PublicActions<import("viem").Transport, undefined, undefined>, "getBlockNumber" | "call" | "createContractEventFilter" | "createEventFilter" | "estimateContractGas" | "estimateGas" | "getBlock" | "getChainId" | "getContractEvents" | "getEnsText" | "getFilterChanges" | "getGasPrice" | "getLogs" | "getTransaction" | "getTransactionCount" | "getTransactionReceipt" | "prepareTransactionRequest" | "readContract" | "sendRawTransaction" | "simulateContract" | "uninstallFilter" | "watchBlockNumber" | "watchContractEvent"> & Pick<import("viem").WalletActions<undefined, undefined>, "sendTransaction" | "writeContract">>>(fn: (client: import("viem").Client<import("viem").Transport, undefined, undefined, import("viem").PublicRpcSchema, import("viem").PublicActions<import("viem").Transport, undefined>>) => client) => import("viem").Client<import("viem").Transport, undefined, undefined, import("viem").PublicRpcSchema, { [K in keyof client]: client[K]; } & import("viem").PublicActions<import("viem").Transport, undefined>>;
4395
4395
  };
4396
+ /** Rewrites 'latest' reads so a client built on this provider sees a fixed block. */
4397
+ export declare const pinProviderBlock: (provider: EthereumProvider, blockNumber: number | bigint) => EthereumProvider;
4396
4398
  export declare const setViemBlockNumber: (block: Blockish) => {
4397
4399
  blockNumber?: undefined;
4398
4400
  } | {
@@ -1,3 +1,12 @@
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
+ };
1
10
  import { createPublicClient, custom, encodeFunctionData, } from 'viem';
2
11
  import { arbitrum, base, mainnet, optimism, linea, plasma, } from 'viem/chains';
3
12
  import { NetworkNumber } from '../types/common';
@@ -20,6 +29,22 @@ export const getViemChain = (network) => {
20
29
  }
21
30
  };
22
31
  export const getViemProvider = (provider, network, options) => createPublicClient(Object.assign({ transport: custom(provider), chain: getViemChain(network) }, options));
32
+ /** Rewrites 'latest' reads so a client built on this provider sees a fixed block. */
33
+ export const pinProviderBlock = (provider, blockNumber) => {
34
+ const block = `0x${BigInt(blockNumber).toString(16)}`;
35
+ return {
36
+ request: (args) => __awaiter(void 0, void 0, void 0, function* () {
37
+ const params = [...(args.params || [])];
38
+ if (args.method === 'eth_blockNumber')
39
+ return block;
40
+ if (['eth_call', 'eth_getCode', 'eth_getBalance', 'eth_getStorageAt'].includes(args.method) && (params[1] === undefined || params[1] === 'latest'))
41
+ params[1] = block;
42
+ if (args.method === 'eth_getBlockByNumber' && params[0] === 'latest')
43
+ params[0] = block;
44
+ return provider.request(Object.assign(Object.assign({}, args), { params }));
45
+ }),
46
+ };
47
+ };
23
48
  export const setViemBlockNumber = (block) => {
24
49
  if (block === 'latest')
25
50
  return {};
@@ -22,6 +22,7 @@ export declare enum LeverageType {
22
22
  Short = "short",
23
23
  VolatilePair = "volatile-pair",
24
24
  VolatilePairReverse = "volatile-pair-reverse",
25
+ StablePair = "stable-pair",
25
26
  None = ""
26
27
  }
27
28
  export interface IncentiveData {
@@ -27,6 +27,7 @@ export var LeverageType;
27
27
  LeverageType["Short"] = "short";
28
28
  LeverageType["VolatilePair"] = "volatile-pair";
29
29
  LeverageType["VolatilePairReverse"] = "volatile-pair-reverse";
30
+ LeverageType["StablePair"] = "stable-pair";
30
31
  LeverageType["None"] = "";
31
32
  })(LeverageType || (LeverageType = {}));
32
33
  export var NetworkNumber;
@@ -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
@@ -117,6 +117,7 @@ export var MorphoBlueVersions;
117
117
  MorphoBlueVersions["MorphoBlueUSDeUSDC_915_Base"] = "morphoblueusdeusdc_915_base";
118
118
  MorphoBlueVersions["MorphoBlueCbEthUSDC_770_Base"] = "morphobluecbethusdc_770_base";
119
119
  MorphoBlueVersions["MorphoBlueCbXRPUSDC_625_Base"] = "morphobluecbxrpusdc_625_base";
120
+ MorphoBlueVersions["MorphoBlueCbHYPEUSDC_625_Base"] = "morphobluecbhypeusdc_625_base";
120
121
  // ARBITRUM
121
122
  MorphoBlueVersions["MorphoBlueSyrupUSDCUSDC_915_Arb"] = "morphobluesyrupusdcusdc_915_arb";
122
123
  MorphoBlueVersions["MorphoBlueWBTCUSDC_860_Arb"] = "morphobluewbtcusdc_860_arb";
@@ -60,6 +60,42 @@ 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
+ /** Pins every read to this block; defaults to latest. */
91
+ blockNumber?: number;
92
+ }
93
+ export interface CustomDeFiData {
94
+ positions: PortfolioPositionsData;
95
+ stakingPositions: Record<string, any>;
96
+ rewardsData: Record<string, any>;
97
+ markets: PortfolioMarketsData;
98
+ }
63
99
  export interface PortfolioMarketsData {
64
100
  morphoMarketsData: Record<string, MorphoBlueMarketInfo>;
65
101
  morphoMidnightMarketsData: Record<string, MorphoMidnightMarketInfo>;
@@ -1 +1,17 @@
1
- export {};
1
+ export var PortfolioProtocol;
2
+ (function (PortfolioProtocol) {
3
+ PortfolioProtocol["AaveV2"] = "aaveV2";
4
+ PortfolioProtocol["AaveV3"] = "aaveV3";
5
+ PortfolioProtocol["AaveV4"] = "aaveV4";
6
+ PortfolioProtocol["CompoundV2"] = "compoundV2";
7
+ PortfolioProtocol["CompoundV3"] = "compoundV3";
8
+ PortfolioProtocol["Spark"] = "spark";
9
+ PortfolioProtocol["MorphoBlue"] = "morphoBlue";
10
+ PortfolioProtocol["MorphoMidnight"] = "morphoMidnight";
11
+ PortfolioProtocol["CrvUsd"] = "crvUsd";
12
+ PortfolioProtocol["LlamaLend"] = "llamaLend";
13
+ PortfolioProtocol["Maker"] = "maker";
14
+ PortfolioProtocol["Liquity"] = "liquity";
15
+ PortfolioProtocol["LiquityV2"] = "liquityV2";
16
+ PortfolioProtocol["Fluid"] = "fluid";
17
+ })(PortfolioProtocol || (PortfolioProtocol = {}));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@defisaver/positions-sdk",
3
- "version": "2.1.168",
3
+ "version": "2.1.169-custom-fetching-2-dev",
4
4
  "description": "",
5
5
  "main": "./cjs/index.js",
6
6
  "module": "./esm/index.js",
@@ -22,7 +22,7 @@
22
22
  "repository": "https://github.com/defisaver/defisaver-positions-sdk",
23
23
  "license": "ISC",
24
24
  "dependencies": {
25
- "@defisaver/tokens": "^1.7.45",
25
+ "@defisaver/tokens": "^1.7.50",
26
26
  "@types/lodash": "^4.17.15",
27
27
  "@types/memoizee": "^0.4.12",
28
28
  "decimal.js": "^10.6.0",
@@ -198,13 +198,17 @@ export const isLeveragedPosAaveV4 = (usedAssets: AaveV4UsedReserveAssets, dustLi
198
198
  let supplyUnstable = 0;
199
199
  let longAsset = '';
200
200
  let shortAsset = '';
201
+ let stableCollAsset = '';
201
202
  Object.values(usedAssets).forEach(({
202
203
  symbol, suppliedUsd, borrowedUsd, collateral, reserveId,
203
204
  }) => {
204
205
  const spokeAsset = `${symbol}-${reserveId}`;
205
206
  const isSupplied = (+suppliedUsd) > dustLimit; // ignore dust like <limit leftover supply
206
207
  const isBorrowed = (+borrowedUsd) > dustLimit; // ignore dust like <limit leftover supply
207
- if (isSupplied && STABLE_ASSETS.includes(symbol) && collateral) supplyStable += 1;
208
+ if (isSupplied && STABLE_ASSETS.includes(symbol) && collateral) {
209
+ supplyStable += 1;
210
+ stableCollAsset = spokeAsset;
211
+ }
208
212
  if (isBorrowed && STABLE_ASSETS.includes(symbol)) borrowStable += 1;
209
213
  if (isBorrowed && !STABLE_ASSETS.includes(symbol)) {
210
214
  borrowUnstable += 1;
@@ -218,6 +222,7 @@ export const isLeveragedPosAaveV4 = (usedAssets: AaveV4UsedReserveAssets, dustLi
218
222
  const isLong = borrowStable > 0 && borrowUnstable === 0 && supplyUnstable === 1 && supplyStable === 0;
219
223
  const isShort = supplyStable > 0 && supplyUnstable === 0 && borrowUnstable === 1 && borrowStable === 0;
220
224
  const isVolatilePair = supplyUnstable === 1 && borrowUnstable === 1 && supplyStable === 0 && borrowStable === 0;
225
+ const isStablePair = supplyStable === 1 && borrowStable === 1 && supplyUnstable === 0 && borrowUnstable === 0;
221
226
  if (isLong) {
222
227
  return {
223
228
  leveragedType: LeverageType.Long,
@@ -236,6 +241,12 @@ export const isLeveragedPosAaveV4 = (usedAssets: AaveV4UsedReserveAssets, dustLi
236
241
  leveragedAsset: longAsset,
237
242
  };
238
243
  }
244
+ if (isStablePair) {
245
+ return {
246
+ leveragedType: LeverageType.StablePair,
247
+ leveragedAsset: stableCollAsset,
248
+ };
249
+ }
239
250
  return {
240
251
  leveragedType: LeverageType.None,
241
252
  leveragedAsset: '',
@@ -1659,6 +1659,21 @@ export const MORPHO_BLUE_CBXRP_USDC_625_BASE = (networkId: NetworkNumber = Netwo
1659
1659
  marketId: '0xd4a903dc6d949519060c7707f9604fdc9772c046e05c2e3a8fce0bd7196e4109',
1660
1660
  protocolName: 'morpho-blue',
1661
1661
  });
1662
+ export const MORPHO_BLUE_CBHYPE_USDC_625_BASE = (networkId: NetworkNumber = NetworkNumber.Base): MorphoBlueMarketData => ({
1663
+ chainIds: [NetworkNumber.Base],
1664
+ label: 'Morpho Blue',
1665
+ shortLabel: 'cbHYPE/USDC',
1666
+ value: MorphoBlueVersions.MorphoBlueCbHYPEUSDC_625_Base,
1667
+ url: 'cbhypeusdc-76629002',
1668
+ loanToken: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913',
1669
+ collateralToken: '0xB200000000000000000000451d033a5000cb479e',
1670
+ oracle: '0x7FaD8B8De2DDb7b4B415e1Aa3613e45EeF9E4bFf',
1671
+ oracleType: MorphoBlueOracleType.MARKET_RATE,
1672
+ irm: '0x46415998764C29aB2a25CbeA6254146D50D22687',
1673
+ lltv: 0.625,
1674
+ marketId: '0x76629002c9fdb20fb2092053a4f22c5c65e04a81887218b9546f2a2d82b4c0a8',
1675
+ protocolName: 'morpho-blue',
1676
+ });
1662
1677
 
1663
1678
  // ARBITRUM
1664
1679
  export const MORPHO_BLUE_SYRUPUSDC_USDC_915_ARB = (networkId: NetworkNumber = NetworkNumber.Eth): MorphoBlueMarketData => ({
@@ -1935,6 +1950,7 @@ export const MorphoBlueMarkets = (networkId: NetworkNumber) => ({
1935
1950
  [MorphoBlueVersions.MorphoBlueUSDeUSDC_915_Base]: MORPHO_BLUE_USDE_USDC_915_BASE(networkId),
1936
1951
  [MorphoBlueVersions.MorphoBlueCbEthUSDC_770_Base]: MORPHO_BLUE_CBETH_USDC_770_BASE(networkId),
1937
1952
  [MorphoBlueVersions.MorphoBlueCbXRPUSDC_625_Base]: MORPHO_BLUE_CBXRP_USDC_625_BASE(networkId),
1953
+ [MorphoBlueVersions.MorphoBlueCbHYPEUSDC_625_Base]: MORPHO_BLUE_CBHYPE_USDC_625_BASE(networkId),
1938
1954
  [MorphoBlueVersions.MorphoBlueWsuperOETHbWETH_915_Base]: MORPHO_BLUE_WSUPEROETHB_WETH_915_BASE(networkId),
1939
1955
  [MorphoBlueVersions.MorphoBlueCbEthEth_945_Base]: MORPHO_BLUE_CBETH_ETH_945_BASE(networkId),
1940
1956
  [MorphoBlueVersions.MorphoBlueCbEthEth_965_Base]: MORPHO_BLUE_CBETH_ETH_965_BASE(networkId),
@@ -13,7 +13,7 @@ export const calcShortLiqPrice = (assetPrice: string, borrowedUsd: string, borro
13
13
 
14
14
  export const calcLeverageLiqPrice = (leverageType: LeverageType, assetPrice: string, borrowedUsd: string, borrowLimitUsd: string) => {
15
15
  if (leverageType === LeverageType.Short || leverageType === LeverageType.VolatilePairReverse) return calcShortLiqPrice(assetPrice, borrowedUsd, borrowLimitUsd);
16
- if (leverageType === LeverageType.Long || leverageType === LeverageType.VolatilePair) return calcLongLiqPrice(assetPrice, borrowedUsd, borrowLimitUsd);
16
+ if (leverageType === LeverageType.Long || leverageType === LeverageType.VolatilePair || leverageType === LeverageType.StablePair) return calcLongLiqPrice(assetPrice, borrowedUsd, borrowLimitUsd);
17
17
  console.error('invalid leverageType', leverageType);
18
18
  return '0';
19
19
  };
@@ -37,12 +37,16 @@ export const isLeveragedPos = (usedAssets: MMUsedAssets, dustLimit = 5) => {
37
37
  let supplyUnstable = 0;
38
38
  let longAsset = '';
39
39
  let shortAsset = '';
40
+ let stableCollAsset = '';
40
41
  Object.values(usedAssets).forEach(({
41
42
  symbol, suppliedUsd, borrowedUsd, collateral,
42
43
  }) => {
43
44
  const isSupplied = (+suppliedUsd) > dustLimit; // ignore dust like <limit leftover supply
44
45
  const isBorrowed = (+borrowedUsd) > dustLimit; // ignore dust like <limit leftover supply
45
- if (isSupplied && STABLE_ASSETS.includes(symbol) && collateral) supplyStable += 1;
46
+ if (isSupplied && STABLE_ASSETS.includes(symbol) && collateral) {
47
+ supplyStable += 1;
48
+ stableCollAsset = symbol;
49
+ }
46
50
  if (isBorrowed && STABLE_ASSETS.includes(symbol)) borrowStable += 1;
47
51
  if (isBorrowed && !STABLE_ASSETS.includes(symbol)) {
48
52
  borrowUnstable += 1;
@@ -56,6 +60,7 @@ export const isLeveragedPos = (usedAssets: MMUsedAssets, dustLimit = 5) => {
56
60
  const isLong = borrowStable > 0 && borrowUnstable === 0 && supplyUnstable === 1 && supplyStable === 0;
57
61
  const isShort = supplyStable > 0 && supplyUnstable === 0 && borrowUnstable === 1 && borrowStable === 0;
58
62
  const isVolatilePair = supplyUnstable === 1 && borrowUnstable === 1 && supplyStable === 0 && borrowStable === 0;
63
+ const isStablePair = supplyStable === 1 && borrowStable === 1 && supplyUnstable === 0 && borrowUnstable === 0;
59
64
  if (isLong) {
60
65
  return {
61
66
  leveragedType: LeverageType.Long,
@@ -74,6 +79,12 @@ export const isLeveragedPos = (usedAssets: MMUsedAssets, dustLimit = 5) => {
74
79
  leveragedAsset: longAsset,
75
80
  };
76
81
  }
82
+ if (isStablePair) {
83
+ return {
84
+ leveragedType: LeverageType.StablePair,
85
+ leveragedAsset: stableCollAsset,
86
+ };
87
+ }
77
88
  return {
78
89
  leveragedType: LeverageType.None,
79
90
  leveragedAsset: '',