@defisaver/positions-sdk 2.1.6 → 2.1.8

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 (132) hide show
  1. package/.mocharc.json +4 -4
  2. package/.nvmrc +1 -1
  3. package/README.md +64 -64
  4. package/cjs/aaveV3/index.js +3 -3
  5. package/cjs/aaveV3/merit.js +5 -3
  6. package/cjs/aaveV3/merkl.d.ts +1 -1
  7. package/cjs/config/contracts.d.ts +23 -0
  8. package/cjs/config/contracts.js +23 -0
  9. package/cjs/helpers/aaveHelpers/index.d.ts +1 -1
  10. package/cjs/helpers/aaveHelpers/index.js +6 -4
  11. package/cjs/helpers/morphoBlueHelpers/index.d.ts +1 -1
  12. package/cjs/helpers/morphoBlueHelpers/index.js +66 -66
  13. package/cjs/markets/aave/index.js +1 -1
  14. package/cjs/markets/aave/marketAssets.d.ts +4 -0
  15. package/cjs/markets/aave/marketAssets.js +5 -1
  16. package/cjs/markets/compound/index.js +11 -0
  17. package/cjs/markets/compound/marketsAssets.d.ts +7 -0
  18. package/cjs/markets/compound/marketsAssets.js +7 -0
  19. package/cjs/markets/spark/marketAssets.d.ts +1 -0
  20. package/cjs/markets/spark/marketAssets.js +1 -0
  21. package/cjs/services/utils.d.ts +8 -4
  22. package/cjs/services/utils.js +30 -10
  23. package/cjs/services/viem.d.ts +54 -15
  24. package/cjs/services/viem.js +2 -0
  25. package/cjs/staking/eligibility.js +1 -6
  26. package/cjs/types/common.d.ts +4 -2
  27. package/cjs/types/common.js +2 -0
  28. package/esm/aaveV3/index.js +4 -4
  29. package/esm/aaveV3/merit.js +5 -3
  30. package/esm/aaveV3/merkl.d.ts +1 -1
  31. package/esm/config/contracts.d.ts +23 -0
  32. package/esm/config/contracts.js +23 -0
  33. package/esm/helpers/aaveHelpers/index.d.ts +1 -1
  34. package/esm/helpers/aaveHelpers/index.js +7 -5
  35. package/esm/helpers/morphoBlueHelpers/index.d.ts +1 -1
  36. package/esm/helpers/morphoBlueHelpers/index.js +66 -66
  37. package/esm/markets/aave/index.js +1 -1
  38. package/esm/markets/aave/marketAssets.d.ts +4 -0
  39. package/esm/markets/aave/marketAssets.js +4 -0
  40. package/esm/markets/compound/index.js +11 -0
  41. package/esm/markets/compound/marketsAssets.d.ts +7 -0
  42. package/esm/markets/compound/marketsAssets.js +7 -0
  43. package/esm/markets/spark/marketAssets.d.ts +1 -0
  44. package/esm/markets/spark/marketAssets.js +1 -0
  45. package/esm/services/utils.d.ts +8 -4
  46. package/esm/services/utils.js +21 -5
  47. package/esm/services/viem.d.ts +54 -15
  48. package/esm/services/viem.js +3 -1
  49. package/esm/staking/eligibility.js +1 -6
  50. package/esm/types/common.d.ts +4 -2
  51. package/esm/types/common.js +2 -0
  52. package/package.json +47 -47
  53. package/src/aaveV2/index.ts +240 -240
  54. package/src/aaveV3/index.ts +614 -614
  55. package/src/aaveV3/merit.ts +97 -94
  56. package/src/aaveV3/merkl.ts +74 -74
  57. package/src/claiming/aaveV3.ts +154 -154
  58. package/src/claiming/compV3.ts +22 -22
  59. package/src/claiming/index.ts +12 -12
  60. package/src/claiming/king.ts +66 -66
  61. package/src/claiming/morphoBlue.ts +118 -118
  62. package/src/claiming/spark.ts +225 -225
  63. package/src/compoundV2/index.ts +244 -244
  64. package/src/compoundV3/index.ts +274 -274
  65. package/src/config/contracts.ts +1251 -1228
  66. package/src/constants/index.ts +10 -10
  67. package/src/contracts.ts +120 -120
  68. package/src/curveUsd/index.ts +254 -254
  69. package/src/eulerV2/index.ts +324 -324
  70. package/src/exchange/index.ts +25 -25
  71. package/src/fluid/index.ts +1638 -1638
  72. package/src/helpers/aaveHelpers/index.ts +187 -185
  73. package/src/helpers/compoundHelpers/index.ts +283 -283
  74. package/src/helpers/curveUsdHelpers/index.ts +40 -40
  75. package/src/helpers/eulerHelpers/index.ts +222 -222
  76. package/src/helpers/fluidHelpers/index.ts +326 -326
  77. package/src/helpers/index.ts +10 -10
  78. package/src/helpers/liquityV2Helpers/index.ts +82 -82
  79. package/src/helpers/llamaLendHelpers/index.ts +53 -53
  80. package/src/helpers/makerHelpers/index.ts +52 -52
  81. package/src/helpers/morphoBlueHelpers/index.ts +396 -396
  82. package/src/helpers/sparkHelpers/index.ts +155 -155
  83. package/src/index.ts +47 -47
  84. package/src/liquity/index.ts +159 -159
  85. package/src/liquityV2/index.ts +657 -657
  86. package/src/llamaLend/index.ts +305 -305
  87. package/src/maker/index.ts +223 -223
  88. package/src/markets/aave/index.ts +116 -116
  89. package/src/markets/aave/marketAssets.ts +54 -49
  90. package/src/markets/compound/index.ts +238 -227
  91. package/src/markets/compound/marketsAssets.ts +97 -90
  92. package/src/markets/curveUsd/index.ts +69 -69
  93. package/src/markets/euler/index.ts +26 -26
  94. package/src/markets/fluid/index.ts +2456 -2456
  95. package/src/markets/index.ts +25 -25
  96. package/src/markets/liquityV2/index.ts +102 -102
  97. package/src/markets/llamaLend/contractAddresses.ts +141 -141
  98. package/src/markets/llamaLend/index.ts +235 -235
  99. package/src/markets/morphoBlue/index.ts +895 -895
  100. package/src/markets/spark/index.ts +29 -29
  101. package/src/markets/spark/marketAssets.ts +12 -11
  102. package/src/moneymarket/moneymarketCommonService.ts +80 -80
  103. package/src/morphoBlue/index.ts +274 -274
  104. package/src/portfolio/index.ts +570 -570
  105. package/src/services/priceService.ts +159 -159
  106. package/src/services/utils.ts +115 -99
  107. package/src/services/viem.ts +34 -32
  108. package/src/setup.ts +8 -8
  109. package/src/spark/index.ts +445 -445
  110. package/src/staking/eligibility.ts +53 -59
  111. package/src/staking/index.ts +1 -1
  112. package/src/staking/staking.ts +170 -170
  113. package/src/types/aave.ts +189 -189
  114. package/src/types/claiming.ts +109 -109
  115. package/src/types/common.ts +107 -105
  116. package/src/types/compound.ts +136 -136
  117. package/src/types/curveUsd.ts +123 -123
  118. package/src/types/euler.ts +175 -175
  119. package/src/types/fluid.ts +448 -448
  120. package/src/types/index.ts +13 -13
  121. package/src/types/liquity.ts +30 -30
  122. package/src/types/liquityV2.ts +126 -126
  123. package/src/types/llamaLend.ts +159 -159
  124. package/src/types/maker.ts +63 -63
  125. package/src/types/merit.ts +1 -1
  126. package/src/types/merkl.ts +70 -70
  127. package/src/types/morphoBlue.ts +194 -194
  128. package/src/types/portfolio.ts +60 -60
  129. package/src/types/spark.ts +135 -135
  130. package/src/umbrella/index.ts +69 -69
  131. package/src/umbrella/umbrellaUtils.ts +29 -29
  132. package/CLAUDE.md +0 -32
@@ -1,61 +1,61 @@
1
- import { AaveV2PositionData, AaveV3PositionData, AaveVersions } from './aave';
2
- import { EthAddress } from './common';
3
- import { CompoundV2PositionData, CompoundV3PositionData, CompoundVersions } from './compound';
4
- import { CrvUSDUserData, CrvUSDVersions } from './curveUsd';
5
- import { EulerV2PositionData, EulerV2Versions } from './euler';
6
- import { FluidVaultData } from './fluid';
7
- import { LiquityTroveInfo } from './liquity';
8
- import { LiquityV2TroveData, LiquityV2Versions } from './liquityV2';
9
- import { LlamaLendUserData, LlamaLendVersionsType } from './llamaLend';
10
- import { CdpData } from './maker';
11
- import { MorphoBluePositionData, MorphoBlueVersions } from './morphoBlue';
12
- import { SparkPositionData, SparkVersions } from './spark';
13
-
14
- export interface PortfolioProtocolData<T> {
15
- error: string,
16
- data: T | null,
17
- }
18
-
19
- export interface PortfolioPositionsDataForAddress {
20
- aaveV3: {
21
- [key in AaveVersions]?: PortfolioProtocolData<AaveV3PositionData>;
22
- };
23
- morphoBlue: {
24
- [key in MorphoBlueVersions]?: PortfolioProtocolData<MorphoBluePositionData>;
25
- };
26
- compoundV3: {
27
- [key in CompoundVersions]?: PortfolioProtocolData<CompoundV3PositionData>;
28
- };
29
- spark: {
30
- [key in SparkVersions]?: PortfolioProtocolData<SparkPositionData>;
31
- };
32
- eulerV2: {
33
- [key in EulerV2Versions]?: Record<EthAddress, PortfolioProtocolData<EulerV2PositionData>>;
34
- };
35
- maker: {
36
- [key: string]: PortfolioProtocolData<CdpData>;
37
- };
38
- aaveV2: {
39
- [key in AaveVersions]?: PortfolioProtocolData<AaveV2PositionData>;
40
- };
41
- compoundV2: {
42
- [key in CompoundVersions]?: PortfolioProtocolData<CompoundV2PositionData>;
43
- };
44
- liquity: PortfolioProtocolData<LiquityTroveInfo> | {};
45
- crvUsd: {
46
- [key in CrvUSDVersions]?: PortfolioProtocolData<CrvUSDUserData>;
47
- };
48
- llamaLend: {
49
- [key in LlamaLendVersionsType]?: PortfolioProtocolData<LlamaLendUserData>;
50
- };
51
- fluid: {
52
- error: string;
53
- data: {
54
- [key: string]: FluidVaultData;
55
- };
56
- };
57
- }
58
-
59
- export interface PortfolioPositionsData {
60
- [key: EthAddress]: PortfolioPositionsDataForAddress;
1
+ import { AaveV2PositionData, AaveV3PositionData, AaveVersions } from './aave';
2
+ import { EthAddress } from './common';
3
+ import { CompoundV2PositionData, CompoundV3PositionData, CompoundVersions } from './compound';
4
+ import { CrvUSDUserData, CrvUSDVersions } from './curveUsd';
5
+ import { EulerV2PositionData, EulerV2Versions } from './euler';
6
+ import { FluidVaultData } from './fluid';
7
+ import { LiquityTroveInfo } from './liquity';
8
+ import { LiquityV2TroveData, LiquityV2Versions } from './liquityV2';
9
+ import { LlamaLendUserData, LlamaLendVersionsType } from './llamaLend';
10
+ import { CdpData } from './maker';
11
+ import { MorphoBluePositionData, MorphoBlueVersions } from './morphoBlue';
12
+ import { SparkPositionData, SparkVersions } from './spark';
13
+
14
+ export interface PortfolioProtocolData<T> {
15
+ error: string,
16
+ data: T | null,
17
+ }
18
+
19
+ export interface PortfolioPositionsDataForAddress {
20
+ aaveV3: {
21
+ [key in AaveVersions]?: PortfolioProtocolData<AaveV3PositionData>;
22
+ };
23
+ morphoBlue: {
24
+ [key in MorphoBlueVersions]?: PortfolioProtocolData<MorphoBluePositionData>;
25
+ };
26
+ compoundV3: {
27
+ [key in CompoundVersions]?: PortfolioProtocolData<CompoundV3PositionData>;
28
+ };
29
+ spark: {
30
+ [key in SparkVersions]?: PortfolioProtocolData<SparkPositionData>;
31
+ };
32
+ eulerV2: {
33
+ [key in EulerV2Versions]?: Record<EthAddress, PortfolioProtocolData<EulerV2PositionData>>;
34
+ };
35
+ maker: {
36
+ [key: string]: PortfolioProtocolData<CdpData>;
37
+ };
38
+ aaveV2: {
39
+ [key in AaveVersions]?: PortfolioProtocolData<AaveV2PositionData>;
40
+ };
41
+ compoundV2: {
42
+ [key in CompoundVersions]?: PortfolioProtocolData<CompoundV2PositionData>;
43
+ };
44
+ liquity: PortfolioProtocolData<LiquityTroveInfo> | {};
45
+ crvUsd: {
46
+ [key in CrvUSDVersions]?: PortfolioProtocolData<CrvUSDUserData>;
47
+ };
48
+ llamaLend: {
49
+ [key in LlamaLendVersionsType]?: PortfolioProtocolData<LlamaLendUserData>;
50
+ };
51
+ fluid: {
52
+ error: string;
53
+ data: {
54
+ [key: string]: FluidVaultData;
55
+ };
56
+ };
57
+ }
58
+
59
+ export interface PortfolioPositionsData {
60
+ [key: EthAddress]: PortfolioPositionsDataForAddress;
61
61
  }
@@ -1,135 +1,135 @@
1
- import {
2
- EthAddress,
3
- IncentiveData,
4
- MMAssetData, MMPositionData, MMUsedAsset, NetworkNumber,
5
- } from './common';
6
-
7
- export enum SparkVersions {
8
- SparkV1 = 'v1default',
9
- }
10
-
11
- export interface SparkEModeCategoryData {
12
- label: string,
13
- liquidationBonus: string,
14
- liquidationRatio: string,
15
- collateralFactor: string,
16
- priceSource: string,
17
- }
18
-
19
- export interface SparkEModeCategoryDataMapping {
20
- enteringTerms: boolean[],
21
- canEnterCategory: boolean,
22
- id: number,
23
- data: SparkEModeCategoryData,
24
- assets: string[],
25
- enabledData: {
26
- ratio: string,
27
- liqRatio: string,
28
- liqPercent: string,
29
- collRatio: string,
30
- }
31
- }
32
-
33
- export interface SparkMarketData {
34
- chainIds: NetworkNumber[],
35
- label: string,
36
- shortLabel: string,
37
- url: string,
38
- value: SparkVersions,
39
- assets: readonly string[],
40
- provider: '' | 'SparkPoolAddressesProvider',
41
- providerAddress: EthAddress,
42
- lendingPool: 'SparkLendingPool',
43
- lendingPoolAddress: EthAddress,
44
- protocolData: '' | 'SparkProtocolDataProvider',
45
- protocolDataAddress: EthAddress,
46
- subVersionLabel?: string
47
- // icon: Function,
48
- protocolName: string,
49
- disabled?: boolean,
50
- }
51
-
52
- export interface SparkAssetData extends MMAssetData {
53
- totalBorrowVar: string,
54
- sortIndex?: number,
55
- usageAsCollateralEnabled: boolean,
56
- isIsolated: boolean,
57
- eModeCategory: number,
58
- eModeCategoryData: SparkEModeCategoryData,
59
- liquidationRatio: string,
60
- }
61
-
62
- export interface SparkAssetsData {
63
- [token: string]: SparkAssetData,
64
- }
65
-
66
- export type SparkMarketsData = { assetsData: SparkAssetsData };
67
-
68
- export interface SparkUsedAsset extends MMUsedAsset {
69
- stableBorrowRate: string,
70
- borrowedStable: string,
71
- borrowedVariable: string,
72
- borrowedUsdStable: string,
73
- borrowedUsdVariable: string,
74
- stableLimit: string,
75
- variableLimit: string,
76
- limit: string,
77
- eModeCategory: number,
78
- }
79
-
80
- export interface SparkUsedAssets {
81
- [token: string]: SparkUsedAsset,
82
- }
83
-
84
- export interface SparkHelperCommon {
85
- usedAssets: SparkUsedAssets,
86
- eModeCategory: number,
87
- eModeCategories?: object,
88
- assetsData: SparkAssetsData,
89
- selectedMarket?: SparkMarketData,
90
- network?: NetworkNumber,
91
- }
92
-
93
- export interface SparkAggregatedPositionData {
94
- suppliedUsd: string,
95
- suppliedCollateralUsd: string,
96
- borrowedUsd: string,
97
- borrowLimitUsd: string,
98
- liquidationLimitUsd: string,
99
- leftToBorrowUsd: string,
100
- ratio: string,
101
- collRatio: string,
102
- netApy: string,
103
- incentiveUsd: string,
104
- totalInterestUsd: string,
105
- liqRatio: string,
106
- liqPercent: string,
107
- leveragedType: string,
108
- leveragedAsset?: string,
109
- leveragedLsdAssetRatio?: string,
110
- liquidationPrice?: string,
111
- minCollRatio: string,
112
- collLiquidationRatio: string,
113
- healthRatio: string;
114
- minHealthRatio: string;
115
- }
116
-
117
- export interface SparkPositionData extends MMPositionData {
118
- ratio: string,
119
- minRatio: string,
120
- collRatio: string,
121
- suppliedUsd: string,
122
- borrowedUsd: string,
123
- borrowLimitUsd: string,
124
- suppliedCollateralUsd: string,
125
- incentiveUsd: string,
126
- totalInterestUsd: string,
127
- isSubscribedToAutomation?: boolean,
128
- automationResubscribeRequired?: boolean,
129
- totalSupplied: string,
130
- usedAssets: SparkUsedAssets,
131
- eModeCategory: number,
132
- isInIsolationMode: boolean,
133
- isInSiloedMode: boolean,
134
- eModeCategories: { [key: number]: SparkEModeCategoryDataMapping },
135
- }
1
+ import {
2
+ EthAddress,
3
+ IncentiveData,
4
+ MMAssetData, MMPositionData, MMUsedAsset, NetworkNumber,
5
+ } from './common';
6
+
7
+ export enum SparkVersions {
8
+ SparkV1 = 'v1default',
9
+ }
10
+
11
+ export interface SparkEModeCategoryData {
12
+ label: string,
13
+ liquidationBonus: string,
14
+ liquidationRatio: string,
15
+ collateralFactor: string,
16
+ priceSource: string,
17
+ }
18
+
19
+ export interface SparkEModeCategoryDataMapping {
20
+ enteringTerms: boolean[],
21
+ canEnterCategory: boolean,
22
+ id: number,
23
+ data: SparkEModeCategoryData,
24
+ assets: string[],
25
+ enabledData: {
26
+ ratio: string,
27
+ liqRatio: string,
28
+ liqPercent: string,
29
+ collRatio: string,
30
+ }
31
+ }
32
+
33
+ export interface SparkMarketData {
34
+ chainIds: NetworkNumber[],
35
+ label: string,
36
+ shortLabel: string,
37
+ url: string,
38
+ value: SparkVersions,
39
+ assets: readonly string[],
40
+ provider: '' | 'SparkPoolAddressesProvider',
41
+ providerAddress: EthAddress,
42
+ lendingPool: 'SparkLendingPool',
43
+ lendingPoolAddress: EthAddress,
44
+ protocolData: '' | 'SparkProtocolDataProvider',
45
+ protocolDataAddress: EthAddress,
46
+ subVersionLabel?: string
47
+ // icon: Function,
48
+ protocolName: string,
49
+ disabled?: boolean,
50
+ }
51
+
52
+ export interface SparkAssetData extends MMAssetData {
53
+ totalBorrowVar: string,
54
+ sortIndex?: number,
55
+ usageAsCollateralEnabled: boolean,
56
+ isIsolated: boolean,
57
+ eModeCategory: number,
58
+ eModeCategoryData: SparkEModeCategoryData,
59
+ liquidationRatio: string,
60
+ }
61
+
62
+ export interface SparkAssetsData {
63
+ [token: string]: SparkAssetData,
64
+ }
65
+
66
+ export type SparkMarketsData = { assetsData: SparkAssetsData };
67
+
68
+ export interface SparkUsedAsset extends MMUsedAsset {
69
+ stableBorrowRate: string,
70
+ borrowedStable: string,
71
+ borrowedVariable: string,
72
+ borrowedUsdStable: string,
73
+ borrowedUsdVariable: string,
74
+ stableLimit: string,
75
+ variableLimit: string,
76
+ limit: string,
77
+ eModeCategory: number,
78
+ }
79
+
80
+ export interface SparkUsedAssets {
81
+ [token: string]: SparkUsedAsset,
82
+ }
83
+
84
+ export interface SparkHelperCommon {
85
+ usedAssets: SparkUsedAssets,
86
+ eModeCategory: number,
87
+ eModeCategories?: object,
88
+ assetsData: SparkAssetsData,
89
+ selectedMarket?: SparkMarketData,
90
+ network?: NetworkNumber,
91
+ }
92
+
93
+ export interface SparkAggregatedPositionData {
94
+ suppliedUsd: string,
95
+ suppliedCollateralUsd: string,
96
+ borrowedUsd: string,
97
+ borrowLimitUsd: string,
98
+ liquidationLimitUsd: string,
99
+ leftToBorrowUsd: string,
100
+ ratio: string,
101
+ collRatio: string,
102
+ netApy: string,
103
+ incentiveUsd: string,
104
+ totalInterestUsd: string,
105
+ liqRatio: string,
106
+ liqPercent: string,
107
+ leveragedType: string,
108
+ leveragedAsset?: string,
109
+ leveragedLsdAssetRatio?: string,
110
+ liquidationPrice?: string,
111
+ minCollRatio: string,
112
+ collLiquidationRatio: string,
113
+ healthRatio: string;
114
+ minHealthRatio: string;
115
+ }
116
+
117
+ export interface SparkPositionData extends MMPositionData {
118
+ ratio: string,
119
+ minRatio: string,
120
+ collRatio: string,
121
+ suppliedUsd: string,
122
+ borrowedUsd: string,
123
+ borrowLimitUsd: string,
124
+ suppliedCollateralUsd: string,
125
+ incentiveUsd: string,
126
+ totalInterestUsd: string,
127
+ isSubscribedToAutomation?: boolean,
128
+ automationResubscribeRequired?: boolean,
129
+ totalSupplied: string,
130
+ usedAssets: SparkUsedAssets,
131
+ eModeCategory: number,
132
+ isInIsolationMode: boolean,
133
+ isInSiloedMode: boolean,
134
+ eModeCategories: { [key: number]: SparkEModeCategoryDataMapping },
135
+ }
@@ -1,70 +1,70 @@
1
- import { Client } from 'viem';
2
- import { AaveUmbrellaViewViem, AaveV3ViewContractViem } from '../contracts';
3
- import { EthAddress, NetworkNumber } from '../types/common';
4
- import { compareAddresses, convertHybridArraysToObjects, getEthAmountForDecimals } from '../services/utils';
5
- import { findMatching, tokenEntries } from './umbrellaUtils';
6
-
7
- const umbrella = '0xD400fc38ED4732893174325693a63C30ee3881a8';
8
- const aaveOracle = '0x54586bE62E3c3580375aE3723C145253060Ca0C2';
9
-
10
- export const getUmbrellaData = async (provider: Client, network: NetworkNumber, address: EthAddress) => {
11
- const umbrellaView = AaveUmbrellaViewViem(provider, network);
12
- const aaveV3View = AaveV3ViewContractViem(provider, network);
13
- const [tokensAggregatedData, additionalUmbrellaStakingData, userAggregatedData] = await Promise.all([
14
- umbrellaView.read.getTokensAggregatedData([umbrella, aaveOracle]),
15
- aaveV3View.read.getAdditionalUmbrellaStakingData([umbrella, address]),
16
- umbrellaView.read.getUserAggregatedData([umbrella, address]),
17
- ]);
18
-
19
- return Object.fromEntries(
20
- tokenEntries.map(([symbol, tokenAddr]) => {
21
- // @ts-ignore
22
- const fromTokens = convertHybridArraysToObjects(findMatching(tokensAggregatedData, tokenAddr));
23
- // @ts-ignore
24
- const fromUser = convertHybridArraysToObjects(findMatching(userAggregatedData, tokenAddr));
25
- // @ts-ignore
26
- const fromAdditionalData = convertHybridArraysToObjects(findMatching(additionalUmbrellaStakingData, tokenAddr));
27
- const data = {
28
- ...fromTokens,
29
- ...fromUser,
30
- ...fromAdditionalData,
31
- account: {
32
- stakeUserBalance: fromUser?.stakeUserBalance || '0',
33
- rewardsTokenUserData: convertHybridArraysToObjects(fromUser?.rewardsTokenUserData) || [],
34
- userCooldownAmount: fromAdditionalData?.userCooldownAmount || '0',
35
- userEndOfCooldown: fromAdditionalData?.userEndOfCooldown || '0',
36
- userWithdrawalWindow: fromAdditionalData?.userWithdrawalWindow || '0',
37
- },
38
- };
39
-
40
- const stakeTokenData = data.stakeTokenData;
41
-
42
- return [symbol, {
43
- ...data,
44
- stakeTokenData: { ...stakeTokenData, price: getEthAmountForDecimals(stakeTokenData.price, 8) },
45
- stkTokenToWaTokenRate: getEthAmountForDecimals(data.stkTokenToWaTokenRate, stakeTokenData.decimals),
46
- waTokenToATokenRate: getEthAmountForDecimals(data.waTokenToATokenRate, stakeTokenData.decimals),
47
- totalShares: getEthAmountForDecimals(data.totalShares, stakeTokenData.decimals),
48
- totalAssets: getEthAmountForDecimals(data.totalAssets, stakeTokenData.decimals),
49
- targetLiquidity: getEthAmountForDecimals(data.targetLiquidity, stakeTokenData.decimals),
50
- rewardsTokenData: data.rewardsTokenData.map((tokenData: { rewardTokenData: { price: string | number; }; }) => ({ ...tokenData, rewardTokenData: { ...tokenData.rewardTokenData, price: getEthAmountForDecimals(tokenData.rewardTokenData.price, 8) } })),
51
- rewardsEmissionRates: data.rewardsEmissionRates.map((rate: string, i: number) => {
52
- const tokenData = data.rewardsTokenData[i].rewardTokenData;
53
- return getEthAmountForDecimals(rate, tokenData.decimals);
54
- }),
55
- account: {
56
- ...data.account,
57
- stakeUserBalance: getEthAmountForDecimals(data.account.stakeUserBalance, stakeTokenData.decimals),
58
- userCooldownAmount: getEthAmountForDecimals(data.account.userCooldownAmount, stakeTokenData.decimals),
59
- rewardsTokenUserData: data.account.rewardsTokenUserData.map((reward: any) => {
60
- const tokenData = data.rewardsTokenData.find((tknData: { rewardTokenData: { token: string | undefined; }; }) => compareAddresses(tknData.rewardTokenData.token, reward.reward));
61
- return ({
62
- ...reward,
63
- currentReward: getEthAmountForDecimals(reward.currentReward, tokenData.rewardTokenData.decimals),
64
- });
65
- }),
66
- },
67
- }];
68
- }),
69
- );
1
+ import { Client } from 'viem';
2
+ import { AaveUmbrellaViewViem, AaveV3ViewContractViem } from '../contracts';
3
+ import { EthAddress, NetworkNumber } from '../types/common';
4
+ import { compareAddresses, convertHybridArraysToObjects, getEthAmountForDecimals } from '../services/utils';
5
+ import { findMatching, tokenEntries } from './umbrellaUtils';
6
+
7
+ const umbrella = '0xD400fc38ED4732893174325693a63C30ee3881a8';
8
+ const aaveOracle = '0x54586bE62E3c3580375aE3723C145253060Ca0C2';
9
+
10
+ export const getUmbrellaData = async (provider: Client, network: NetworkNumber, address: EthAddress) => {
11
+ const umbrellaView = AaveUmbrellaViewViem(provider, network);
12
+ const aaveV3View = AaveV3ViewContractViem(provider, network);
13
+ const [tokensAggregatedData, additionalUmbrellaStakingData, userAggregatedData] = await Promise.all([
14
+ umbrellaView.read.getTokensAggregatedData([umbrella, aaveOracle]),
15
+ aaveV3View.read.getAdditionalUmbrellaStakingData([umbrella, address]),
16
+ umbrellaView.read.getUserAggregatedData([umbrella, address]),
17
+ ]);
18
+
19
+ return Object.fromEntries(
20
+ tokenEntries.map(([symbol, tokenAddr]) => {
21
+ // @ts-ignore
22
+ const fromTokens = convertHybridArraysToObjects(findMatching(tokensAggregatedData, tokenAddr));
23
+ // @ts-ignore
24
+ const fromUser = convertHybridArraysToObjects(findMatching(userAggregatedData, tokenAddr));
25
+ // @ts-ignore
26
+ const fromAdditionalData = convertHybridArraysToObjects(findMatching(additionalUmbrellaStakingData, tokenAddr));
27
+ const data = {
28
+ ...fromTokens,
29
+ ...fromUser,
30
+ ...fromAdditionalData,
31
+ account: {
32
+ stakeUserBalance: fromUser?.stakeUserBalance || '0',
33
+ rewardsTokenUserData: convertHybridArraysToObjects(fromUser?.rewardsTokenUserData) || [],
34
+ userCooldownAmount: fromAdditionalData?.userCooldownAmount || '0',
35
+ userEndOfCooldown: fromAdditionalData?.userEndOfCooldown || '0',
36
+ userWithdrawalWindow: fromAdditionalData?.userWithdrawalWindow || '0',
37
+ },
38
+ };
39
+
40
+ const stakeTokenData = data.stakeTokenData;
41
+
42
+ return [symbol, {
43
+ ...data,
44
+ stakeTokenData: { ...stakeTokenData, price: getEthAmountForDecimals(stakeTokenData.price, 8) },
45
+ stkTokenToWaTokenRate: getEthAmountForDecimals(data.stkTokenToWaTokenRate, stakeTokenData.decimals),
46
+ waTokenToATokenRate: getEthAmountForDecimals(data.waTokenToATokenRate, stakeTokenData.decimals),
47
+ totalShares: getEthAmountForDecimals(data.totalShares, stakeTokenData.decimals),
48
+ totalAssets: getEthAmountForDecimals(data.totalAssets, stakeTokenData.decimals),
49
+ targetLiquidity: getEthAmountForDecimals(data.targetLiquidity, stakeTokenData.decimals),
50
+ rewardsTokenData: data.rewardsTokenData.map((tokenData: { rewardTokenData: { price: string | number; }; }) => ({ ...tokenData, rewardTokenData: { ...tokenData.rewardTokenData, price: getEthAmountForDecimals(tokenData.rewardTokenData.price, 8) } })),
51
+ rewardsEmissionRates: data.rewardsEmissionRates.map((rate: string, i: number) => {
52
+ const tokenData = data.rewardsTokenData[i].rewardTokenData;
53
+ return getEthAmountForDecimals(rate, tokenData.decimals);
54
+ }),
55
+ account: {
56
+ ...data.account,
57
+ stakeUserBalance: getEthAmountForDecimals(data.account.stakeUserBalance, stakeTokenData.decimals),
58
+ userCooldownAmount: getEthAmountForDecimals(data.account.userCooldownAmount, stakeTokenData.decimals),
59
+ rewardsTokenUserData: data.account.rewardsTokenUserData.map((reward: any) => {
60
+ const tokenData = data.rewardsTokenData.find((tknData: { rewardTokenData: { token: string | undefined; }; }) => compareAddresses(tknData.rewardTokenData.token, reward.reward));
61
+ return ({
62
+ ...reward,
63
+ currentReward: getEthAmountForDecimals(reward.currentReward, tokenData.rewardTokenData.decimals),
64
+ });
65
+ }),
66
+ },
67
+ }];
68
+ }),
69
+ );
70
70
  };
@@ -1,30 +1,30 @@
1
- export enum UmbrellaStaking {
2
- UmbrellaGHO = 'UmbrellaGHO',
3
- UmbrellaUSDC = 'UmbrellaUSDC',
4
- UmbrellaUSDT = 'UmbrellaUSDT',
5
- UmbrellaETH = 'UmbrellaETH',
6
- }
7
-
8
- export const tokenMapping = {
9
- [UmbrellaStaking.UmbrellaUSDC]: '0x6bf183243FdD1e306ad2C4450BC7dcf6f0bf8Aa6',
10
- [UmbrellaStaking.UmbrellaUSDT]: '0xA484Ab92fe32B143AEE7019fC1502b1dAA522D31',
11
- [UmbrellaStaking.UmbrellaETH]: '0xaAFD07D53A7365D3e9fb6F3a3B09EC19676B73Ce',
12
- [UmbrellaStaking.UmbrellaGHO]: '0x4f827A63755855cDf3e8f3bcD20265C833f15033',
13
- } as const;
14
-
15
- // ----- chat gpt code for result mapping ---------
16
- export const normalize = (addr?: string) => addr?.toLowerCase?.() ?? '';
17
-
18
- export const tokenEntries = Object.entries(tokenMapping).map(([symbol, address]) => [
19
- symbol,
20
- normalize(address),
21
- ]);
22
-
23
- // 👇 Define how to extract the token address from each source type
24
- export const extractAddress = (item?: { stakeToken?: string, stkToken?: string, stakeTokenData?: { token?: string } }): string => normalize(item?.stakeToken
25
- || item?.stkToken
26
- || item?.stakeTokenData?.token,
27
- );
28
-
29
- // 👇 Utility to find the matching object in a dataset
1
+ export enum UmbrellaStaking {
2
+ UmbrellaGHO = 'UmbrellaGHO',
3
+ UmbrellaUSDC = 'UmbrellaUSDC',
4
+ UmbrellaUSDT = 'UmbrellaUSDT',
5
+ UmbrellaETH = 'UmbrellaETH',
6
+ }
7
+
8
+ export const tokenMapping = {
9
+ [UmbrellaStaking.UmbrellaUSDC]: '0x6bf183243FdD1e306ad2C4450BC7dcf6f0bf8Aa6',
10
+ [UmbrellaStaking.UmbrellaUSDT]: '0xA484Ab92fe32B143AEE7019fC1502b1dAA522D31',
11
+ [UmbrellaStaking.UmbrellaETH]: '0xaAFD07D53A7365D3e9fb6F3a3B09EC19676B73Ce',
12
+ [UmbrellaStaking.UmbrellaGHO]: '0x4f827A63755855cDf3e8f3bcD20265C833f15033',
13
+ } as const;
14
+
15
+ // ----- chat gpt code for result mapping ---------
16
+ export const normalize = (addr?: string) => addr?.toLowerCase?.() ?? '';
17
+
18
+ export const tokenEntries = Object.entries(tokenMapping).map(([symbol, address]) => [
19
+ symbol,
20
+ normalize(address),
21
+ ]);
22
+
23
+ // 👇 Define how to extract the token address from each source type
24
+ export const extractAddress = (item?: { stakeToken?: string, stkToken?: string, stakeTokenData?: { token?: string } }): string => normalize(item?.stakeToken
25
+ || item?.stkToken
26
+ || item?.stakeTokenData?.token,
27
+ );
28
+
29
+ // 👇 Utility to find the matching object in a dataset
30
30
  export const findMatching = (dataset: any[], targetAddr: string) => dataset.find((item) => extractAddress(item) === targetAddr);
package/CLAUDE.md DELETED
@@ -1,32 +0,0 @@
1
- # DeFiSaver Positions SDK
2
-
3
- TypeScript SDK for DeFi positions tracking and management.
4
-
5
- ## Commands
6
-
7
- ```bash
8
- # Development
9
- npm run dev # Watch mode compilation
10
- npm run build # Lint and build both CJS and ESM
11
- npm run build:cjs # Build CommonJS
12
- npm run build:esm # Build ES modules
13
-
14
- # Linting
15
- npm run lint # Lint and fix
16
- npm run lint-check # Lint without fixing
17
-
18
- # Testing
19
- npm run test # Run all tests
20
- npm run test-single # Run single test (use --name=filename)
21
- npm run test:debugger # Run tests with debugger
22
-
23
- # Versioning
24
- npm run version-bump # Commit and bump patch version
25
- ```
26
-
27
- ## Project Structure
28
-
29
- - `src/` - TypeScript source code
30
- - `tests/` - Test files
31
- - `esm/` - ES module build output
32
- - `cjs/` - CommonJS build output