@defisaver/positions-sdk 1.0.11-dev → 1.0.11-fluid-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 (109) hide show
  1. package/.mocharc.json +4 -4
  2. package/.nvmrc +1 -1
  3. package/README.md +69 -69
  4. package/cjs/config/contracts.d.ts +113 -49
  5. package/cjs/config/contracts.js +10 -2
  6. package/cjs/contracts.d.ts +1 -0
  7. package/cjs/contracts.js +2 -1
  8. package/cjs/fluid/index.d.ts +2 -0
  9. package/cjs/fluid/index.js +636 -13
  10. package/cjs/helpers/fluidHelpers/index.d.ts +59 -2
  11. package/cjs/helpers/fluidHelpers/index.js +142 -4
  12. package/cjs/helpers/morphoBlueHelpers/index.js +66 -66
  13. package/cjs/markets/fluid/index.js +276 -245
  14. package/cjs/services/priceService.d.ts +23 -0
  15. package/cjs/services/priceService.js +44 -5
  16. package/cjs/types/contracts/generated/FluidView.d.ts +220 -3
  17. package/cjs/types/contracts/generated/WeETHPriceFeed.d.ts +135 -0
  18. package/cjs/types/contracts/generated/WeETHPriceFeed.js +5 -0
  19. package/cjs/types/contracts/generated/index.d.ts +1 -0
  20. package/cjs/types/fluid.d.ts +39 -10
  21. package/esm/config/contracts.d.ts +113 -49
  22. package/esm/config/contracts.js +10 -2
  23. package/esm/contracts.d.ts +1 -0
  24. package/esm/contracts.js +1 -0
  25. package/esm/fluid/index.d.ts +2 -0
  26. package/esm/fluid/index.js +639 -16
  27. package/esm/helpers/fluidHelpers/index.d.ts +59 -2
  28. package/esm/helpers/fluidHelpers/index.js +137 -3
  29. package/esm/helpers/morphoBlueHelpers/index.js +66 -66
  30. package/esm/markets/fluid/index.js +276 -245
  31. package/esm/services/priceService.d.ts +23 -0
  32. package/esm/services/priceService.js +40 -5
  33. package/esm/types/contracts/generated/FluidView.d.ts +220 -3
  34. package/esm/types/contracts/generated/WeETHPriceFeed.d.ts +135 -0
  35. package/esm/types/contracts/generated/WeETHPriceFeed.js +4 -0
  36. package/esm/types/contracts/generated/index.d.ts +1 -0
  37. package/esm/types/fluid.d.ts +39 -10
  38. package/package.json +54 -54
  39. package/src/aaveV2/index.ts +227 -227
  40. package/src/aaveV3/index.ts +624 -624
  41. package/src/assets/index.ts +60 -60
  42. package/src/chickenBonds/index.ts +123 -123
  43. package/src/compoundV2/index.ts +220 -220
  44. package/src/compoundV3/index.ts +291 -291
  45. package/src/config/contracts.js +1155 -1147
  46. package/src/constants/index.ts +6 -6
  47. package/src/contracts.ts +135 -134
  48. package/src/curveUsd/index.ts +239 -239
  49. package/src/eulerV2/index.ts +303 -303
  50. package/src/exchange/index.ts +17 -17
  51. package/src/fluid/index.ts +1216 -354
  52. package/src/helpers/aaveHelpers/index.ts +203 -203
  53. package/src/helpers/chickenBondsHelpers/index.ts +23 -23
  54. package/src/helpers/compoundHelpers/index.ts +248 -248
  55. package/src/helpers/curveUsdHelpers/index.ts +40 -40
  56. package/src/helpers/eulerHelpers/index.ts +234 -234
  57. package/src/helpers/fluidHelpers/index.ts +295 -57
  58. package/src/helpers/index.ts +11 -11
  59. package/src/helpers/liquityV2Helpers/index.ts +80 -80
  60. package/src/helpers/llamaLendHelpers/index.ts +53 -53
  61. package/src/helpers/makerHelpers/index.ts +94 -94
  62. package/src/helpers/morphoBlueHelpers/index.ts +367 -367
  63. package/src/helpers/sparkHelpers/index.ts +154 -154
  64. package/src/index.ts +52 -52
  65. package/src/liquity/index.ts +116 -116
  66. package/src/liquityV2/index.ts +295 -295
  67. package/src/llamaLend/index.ts +275 -275
  68. package/src/maker/index.ts +117 -117
  69. package/src/markets/aave/index.ts +152 -152
  70. package/src/markets/aave/marketAssets.ts +46 -46
  71. package/src/markets/compound/index.ts +213 -213
  72. package/src/markets/compound/marketsAssets.ts +82 -82
  73. package/src/markets/curveUsd/index.ts +69 -69
  74. package/src/markets/euler/index.ts +26 -26
  75. package/src/markets/fluid/index.ts +2043 -2012
  76. package/src/markets/index.ts +27 -27
  77. package/src/markets/liquityV2/index.ts +54 -54
  78. package/src/markets/llamaLend/contractAddresses.ts +141 -141
  79. package/src/markets/llamaLend/index.ts +235 -235
  80. package/src/markets/morphoBlue/index.ts +895 -895
  81. package/src/markets/spark/index.ts +29 -29
  82. package/src/markets/spark/marketAssets.ts +10 -10
  83. package/src/moneymarket/moneymarketCommonService.ts +80 -80
  84. package/src/morphoAaveV2/index.ts +256 -256
  85. package/src/morphoAaveV3/index.ts +630 -630
  86. package/src/morphoBlue/index.ts +202 -202
  87. package/src/multicall/index.ts +33 -33
  88. package/src/services/priceService.ts +130 -91
  89. package/src/services/utils.ts +59 -59
  90. package/src/setup.ts +8 -8
  91. package/src/spark/index.ts +460 -460
  92. package/src/staking/staking.ts +217 -217
  93. package/src/types/aave.ts +275 -275
  94. package/src/types/chickenBonds.ts +45 -45
  95. package/src/types/common.ts +84 -84
  96. package/src/types/compound.ts +133 -133
  97. package/src/types/contracts/generated/FluidView.ts +263 -2
  98. package/src/types/contracts/generated/WeETHPriceFeed.ts +202 -0
  99. package/src/types/contracts/generated/index.ts +1 -0
  100. package/src/types/curveUsd.ts +119 -119
  101. package/src/types/euler.ts +173 -173
  102. package/src/types/fluid.ts +299 -268
  103. package/src/types/index.ts +11 -11
  104. package/src/types/liquity.ts +30 -30
  105. package/src/types/liquityV2.ts +119 -119
  106. package/src/types/llamaLend.ts +155 -155
  107. package/src/types/maker.ts +50 -50
  108. package/src/types/morphoBlue.ts +194 -194
  109. package/src/types/spark.ts +135 -135
@@ -44,19 +44,67 @@ const parseVaultType = (vaultType) => {
44
44
  default: return types_1.FluidVaultType.Unknown;
45
45
  }
46
46
  };
47
- const parseMarketData = (web3, data, network, mainnetWeb3) => __awaiter(void 0, void 0, void 0, function* () {
48
- const collAsset = (0, tokens_1.getAssetInfoByAddress)(data.supplyToken0, network);
49
- const debtAsset = (0, tokens_1.getAssetInfoByAddress)(data.borrowToken0, network);
50
- const supplyRate = new decimal_js_1.default(data.supplyRateVault).div(100).toString();
51
- const borrowRate = new decimal_js_1.default(data.borrowRateVault).div(100).toString();
52
- const oracleScaleFactor = new decimal_js_1.default(27).add(debtAsset.decimals).sub(collAsset.decimals).toString();
53
- const oracleScale = new decimal_js_1.default(10).pow(oracleScaleFactor).toString();
54
- const oraclePrice = new decimal_js_1.default(data.oraclePriceOperate).div(oracleScale).toString();
55
- const isTokenUSDA = debtAsset.symbol === 'USDA';
47
+ const getChainLinkPricesForTokens = (tokens, network, web3) => __awaiter(void 0, void 0, void 0, function* () {
56
48
  const isMainnet = (0, utils_1.isMainnetNetwork)(network);
57
- const loanTokenFeedAddress = (0, priceService_1.getChainlinkAssetAddress)(debtAsset.symbol, network);
49
+ const noDuplicateTokens = new Array(...new Set(tokens));
50
+ const calls = noDuplicateTokens.flatMap((address) => {
51
+ const assetInfo = (0, tokens_1.getAssetInfoByAddress)(address, network);
52
+ const isTokenUSDA = assetInfo.symbol === 'USDA';
53
+ if (isTokenUSDA)
54
+ return;
55
+ const chainLinkFeedAddress = (0, priceService_1.getChainlinkAssetAddress)(assetInfo.symbol, network);
56
+ if (assetInfo.symbol === 'wstETH')
57
+ return (0, priceService_1.getWstETHChainLinkPriceCalls)(web3, network);
58
+ if (assetInfo.symbol === 'weETH')
59
+ return (0, priceService_1.getWeETHChainLinkPriceCalls)(web3, network);
60
+ if (isMainnet) {
61
+ const feedRegistryContract = (0, contracts_1.FeedRegistryContract)(web3, common_1.NetworkNumber.Eth);
62
+ return ({
63
+ target: feedRegistryContract.options.address,
64
+ abiItem: feedRegistryContract.options.jsonInterface.find(({ name }) => name === 'latestAnswer'),
65
+ params: [chainLinkFeedAddress, constants_1.USD_QUOTE],
66
+ });
67
+ }
68
+ const feedRegistryContract = (0, contracts_1.DFSFeedRegistryContract)(web3, network);
69
+ return ({
70
+ target: feedRegistryContract.options.address,
71
+ abiItem: feedRegistryContract.options.jsonInterface.find(({ name }) => name === 'latestRoundData'),
72
+ params: [chainLinkFeedAddress, constants_1.USD_QUOTE],
73
+ });
74
+ });
75
+ const prices = yield (0, multicall_1.chunkAndMulticall)(calls, 10, 'latest', web3, network);
76
+ let offset = 0; // wstETH has 3 calls, while others have only 1, so we need to keep track
77
+ return noDuplicateTokens.reduce((acc, token, i) => {
78
+ const assetInfo = (0, tokens_1.getAssetInfoByAddress)(token, network);
79
+ switch (assetInfo.symbol) {
80
+ case 'USDA':
81
+ acc[token] = '100000000';
82
+ break;
83
+ case 'wstETH': {
84
+ const { ethPrice, wstETHRate, } = (0, priceService_1.parseWstETHPriceCalls)(prices[i + offset][0], prices[i + offset + 1], prices[i + offset + 2][0]);
85
+ offset += 2;
86
+ acc[token] = new decimal_js_1.default(ethPrice).mul(wstETHRate).toString();
87
+ break;
88
+ }
89
+ case 'weETH': {
90
+ const { ethPrice, weETHRate, } = (0, priceService_1.parseWeETHPriceCalls)(prices[i + offset][0], prices[i + offset + 1], prices[i + offset + 2][0]);
91
+ offset += 2;
92
+ acc[token] = new decimal_js_1.default(ethPrice).mul(weETHRate).toString();
93
+ break;
94
+ }
95
+ default:
96
+ acc[token] = new decimal_js_1.default(prices[i + offset].answer).div(1e8).toString();
97
+ break;
98
+ }
99
+ return acc;
100
+ }, {});
101
+ });
102
+ const getTokenPriceFromChainlink = (asset, network, web3) => __awaiter(void 0, void 0, void 0, function* () {
103
+ const isTokenUSDA = asset.symbol === 'USDA';
104
+ const isMainnet = (0, utils_1.isMainnetNetwork)(network);
105
+ const loanTokenFeedAddress = (0, priceService_1.getChainlinkAssetAddress)(asset.symbol, network);
58
106
  let loanTokenPrice;
59
- if (debtAsset.symbol === 'wstETH') {
107
+ if (asset.symbol === 'wstETH') {
60
108
  // need to handle wstETH for l2s inside getWstETHPrice
61
109
  loanTokenPrice = yield (0, priceService_1.getWstETHPriceFluid)(web3, network);
62
110
  }
@@ -70,7 +118,17 @@ const parseMarketData = (web3, data, network, mainnetWeb3) => __awaiter(void 0,
70
118
  const roundPriceData = isTokenUSDA ? { answer: '100000000' } : yield feedRegistryContract.methods.latestRoundData(loanTokenFeedAddress, constants_1.USD_QUOTE).call();
71
119
  loanTokenPrice = roundPriceData.answer;
72
120
  }
73
- const debtPriceParsed = new decimal_js_1.default(loanTokenPrice).div(1e8).toString();
121
+ return new decimal_js_1.default(loanTokenPrice).div(1e8).toString();
122
+ });
123
+ const parseT1MarketData = (web3, data, network, mainnetWeb3) => __awaiter(void 0, void 0, void 0, function* () {
124
+ const collAsset = (0, tokens_1.getAssetInfoByAddress)(data.supplyToken0, network);
125
+ const debtAsset = (0, tokens_1.getAssetInfoByAddress)(data.borrowToken0, network);
126
+ const supplyRate = new decimal_js_1.default(data.supplyRateVault).div(100).toString();
127
+ const borrowRate = new decimal_js_1.default(data.borrowRateVault).div(100).toString();
128
+ const oracleScaleFactor = new decimal_js_1.default(27).add(debtAsset.decimals).sub(collAsset.decimals).toString();
129
+ const oracleScale = new decimal_js_1.default(10).pow(oracleScaleFactor).toString();
130
+ const oraclePrice = new decimal_js_1.default(data.oraclePriceOperate).div(oracleScale).toString();
131
+ const debtPriceParsed = yield getTokenPriceFromChainlink(debtAsset, network, web3);
74
132
  const collAssetData = {
75
133
  symbol: collAsset.symbol,
76
134
  address: collAsset.address,
@@ -101,6 +159,10 @@ const parseMarketData = (web3, data, network, mainnetWeb3) => __awaiter(void 0,
101
159
  debtAssetData.incentiveBorrowApy = yield (0, staking_1.getStakingApy)(debtAsset.symbol, mainnetWeb3);
102
160
  debtAssetData.incentiveBorrowToken = debtAsset.symbol;
103
161
  }
162
+ if (staking_1.STAKING_ASSETS.includes(debtAssetData.symbol)) {
163
+ debtAssetData.incentiveBorrowApy = yield (0, staking_1.getStakingApy)(debtAsset.symbol, mainnetWeb3);
164
+ debtAssetData.incentiveBorrowToken = debtAsset.symbol;
165
+ }
104
166
  const assetsData = {
105
167
  [collAsset.symbol]: collAssetData,
106
168
  [debtAsset.symbol]: debtAssetData,
@@ -150,6 +212,398 @@ const parseMarketData = (web3, data, network, mainnetWeb3) => __awaiter(void 0,
150
212
  marketData,
151
213
  };
152
214
  });
215
+ const parseT2MarketData = (web3, data, network, mainnetWeb3) => __awaiter(void 0, void 0, void 0, function* () {
216
+ const collAsset0 = (0, tokens_1.getAssetInfoByAddress)(data.supplyToken0, network);
217
+ const collAsset1 = (0, tokens_1.getAssetInfoByAddress)(data.supplyToken1, network);
218
+ const debtAsset = (0, tokens_1.getAssetInfoByAddress)(data.borrowToken0, network);
219
+ // 18 because collateral is represented in shares for which they use 18 decimals
220
+ const oracleScaleFactor = new decimal_js_1.default(27).add(debtAsset.decimals).sub(18).toString();
221
+ const oracleScale = new decimal_js_1.default(10).pow(oracleScaleFactor).toString();
222
+ const oraclePrice = new decimal_js_1.default(data.oraclePriceOperate).div(oracleScale).toString();
223
+ const prices = yield getChainLinkPricesForTokens([collAsset0.address, collAsset1.address, debtAsset.address], network, web3);
224
+ const { supplyDexFee, totalSupplyShares, supplyRate1, totalSupplyToken1, token0PerSupplyShare, token1PerSupplyShare, totalSupplyToken0, maxSupplyShares, withdrawableToken0, withdrawable0, withdrawableToken1, withdrawable1, supplyRate0, utilizationSupply0, utilizationSupply1, withdrawableShares, reservesSupplyToken0, reservesSupplyToken1, } = (0, fluidHelpers_1.parseDexSupplyData)(data.dexSupplyData, collAsset0.symbol, collAsset1.symbol);
225
+ const collFirstAssetData = {
226
+ symbol: collAsset0.symbol,
227
+ address: collAsset0.address,
228
+ price: prices[collAsset0.address],
229
+ totalSupply: new decimal_js_1.default(totalSupplyShares).mul(token0PerSupplyShare).toString(),
230
+ canBeSupplied: true,
231
+ supplyRate: supplyRate0,
232
+ utilization: utilizationSupply0,
233
+ withdrawable: withdrawable0,
234
+ tokenPerSupplyShare: token0PerSupplyShare,
235
+ supplyReserves: reservesSupplyToken0,
236
+ };
237
+ if (staking_1.STAKING_ASSETS.includes(collFirstAssetData.symbol)) {
238
+ collFirstAssetData.incentiveSupplyApy = yield (0, staking_1.getStakingApy)(collAsset0.symbol, mainnetWeb3);
239
+ collFirstAssetData.incentiveSupplyToken = collAsset0.symbol;
240
+ }
241
+ const collSecondAssetData = {
242
+ symbol: collAsset1.symbol,
243
+ address: collAsset1.address,
244
+ price: prices[collAsset1.address],
245
+ totalSupply: new decimal_js_1.default(totalSupplyShares).mul(token1PerSupplyShare).toString(),
246
+ canBeSupplied: true,
247
+ supplyRate: supplyRate1,
248
+ withdrawable: withdrawable1,
249
+ utilization: utilizationSupply1,
250
+ tokenPerSupplyShare: token1PerSupplyShare,
251
+ supplyReserves: reservesSupplyToken1,
252
+ };
253
+ if (staking_1.STAKING_ASSETS.includes(collFirstAssetData.symbol)) {
254
+ collFirstAssetData.incentiveSupplyApy = yield (0, staking_1.getStakingApy)(collAsset1.symbol, mainnetWeb3);
255
+ collFirstAssetData.incentiveSupplyToken = collAsset1.symbol;
256
+ }
257
+ const borrowRate = new decimal_js_1.default(data.borrowRateVault).div(100).toString();
258
+ const debtAssetData = {
259
+ symbol: debtAsset.symbol,
260
+ address: debtAsset.address,
261
+ price: prices[debtAsset.address],
262
+ totalBorrow: data.totalBorrowVault,
263
+ canBeBorrowed: true,
264
+ borrowRate,
265
+ };
266
+ if (staking_1.STAKING_ASSETS.includes(debtAssetData.symbol)) {
267
+ debtAssetData.incentiveBorrowApy = yield (0, staking_1.getStakingApy)(debtAsset.symbol, mainnetWeb3);
268
+ debtAssetData.incentiveBorrowToken = debtAsset.symbol;
269
+ }
270
+ const assetsData = [
271
+ [collAsset0.symbol, collFirstAssetData],
272
+ [collAsset1.symbol, collSecondAssetData],
273
+ [debtAsset.symbol, debtAssetData],
274
+ ]
275
+ .reduce((acc, [symbol, partialData]) => (Object.assign(Object.assign({}, acc), { [symbol]: (0, fluidHelpers_1.mergeAssetData)(acc[symbol], partialData) })), {});
276
+ const marketInfo = (0, markets_1.getFluidMarketInfoById)(+data.vaultId, network);
277
+ const totalBorrowVault = (0, utils_1.getEthAmountForDecimals)(data.totalBorrowVault, debtAsset.decimals);
278
+ const liqRatio = new decimal_js_1.default(data.liquidationThreshold).div(100).toString();
279
+ const liquidationMaxLimit = new decimal_js_1.default(data.liquidationMaxLimit).div(100).toString();
280
+ const liqFactor = new decimal_js_1.default(data.liquidationThreshold).div(10000).toString();
281
+ const totalSupplySharesInVault = (0, tokens_1.assetAmountInEth)(data.totalSupplyVault);
282
+ const collSharePrice = new decimal_js_1.default(oraclePrice).mul(prices[debtAsset.address]).toString();
283
+ const totalSupplyVaultUsd = new decimal_js_1.default(totalSupplySharesInVault).mul(collSharePrice).toString();
284
+ const withdrawableUSD = new decimal_js_1.default(withdrawableShares).mul(collSharePrice).toString();
285
+ const marketData = {
286
+ vaultId: +data.vaultId,
287
+ vaultValue: marketInfo === null || marketInfo === void 0 ? void 0 : marketInfo.value,
288
+ isSmartColl: data.isSmartColl,
289
+ isSmartDebt: data.isSmartDebt,
290
+ marketAddress: data.vault,
291
+ vaultType: parseVaultType(+data.vaultType),
292
+ oracle: data.oracle,
293
+ liquidationPenaltyPercent: new decimal_js_1.default(data.liquidationPenalty).div(100).toString(),
294
+ collFactor: new decimal_js_1.default(data.collateralFactor).div(10000).toString(),
295
+ liquidationRatio: liqRatio,
296
+ liqFactor,
297
+ minRatio: new decimal_js_1.default(1).div(liqFactor).mul(100).toString(),
298
+ collAsset0: collAsset0.symbol,
299
+ collAsset1: collAsset1.symbol,
300
+ debtAsset0: debtAsset.symbol,
301
+ totalPositions: data.totalPositions,
302
+ totalSupplyVault: totalSupplyShares,
303
+ totalBorrowVault,
304
+ totalSupplyVaultUsd,
305
+ collSharePrice,
306
+ totalBorrowVaultUsd: new decimal_js_1.default(totalBorrowVault).mul(assetsData[debtAsset.symbol].price).toString(),
307
+ borrowLimit: (0, utils_1.getEthAmountForDecimals)(data.borrowLimit, debtAsset.decimals),
308
+ borrowableUntilLimit: (0, utils_1.getEthAmountForDecimals)(data.borrowableUntilLimit, debtAsset.decimals),
309
+ borrowable: (0, utils_1.getEthAmountForDecimals)(data.borrowable, debtAsset.decimals),
310
+ borrowLimitUtilization: (0, utils_1.getEthAmountForDecimals)(data.borrowLimitUtilization, debtAsset.decimals),
311
+ maxBorrowLimit: (0, utils_1.getEthAmountForDecimals)(data.maxBorrowLimit, debtAsset.decimals),
312
+ baseBorrowLimit: (0, utils_1.getEthAmountForDecimals)(data.baseBorrowLimit, debtAsset.decimals),
313
+ minimumBorrowing: (0, utils_1.getEthAmountForDecimals)(data.minimumBorrowing, debtAsset.decimals),
314
+ liquidationMaxLimit,
315
+ borrowRate,
316
+ supplyRate: '0',
317
+ totalSupplyToken0,
318
+ totalSupplyToken1,
319
+ withdrawableToken0,
320
+ withdrawableToken1,
321
+ withdrawableUSD,
322
+ withdrawable: withdrawableShares,
323
+ widthdrawableDex: new decimal_js_1.default(maxSupplyShares).minus(totalSupplyShares).toString(),
324
+ maxSupplyShares,
325
+ collDexFee: supplyDexFee,
326
+ };
327
+ return {
328
+ assetsData,
329
+ marketData,
330
+ };
331
+ });
332
+ const parseT3MarketData = (web3, data, network, mainnetWeb3) => __awaiter(void 0, void 0, void 0, function* () {
333
+ const collAsset = (0, tokens_1.getAssetInfoByAddress)(data.supplyToken0, network);
334
+ const debtAsset0 = (0, tokens_1.getAssetInfoByAddress)(data.borrowToken0, network);
335
+ const debtAsset1 = (0, tokens_1.getAssetInfoByAddress)(data.borrowToken1, network);
336
+ const { borrowableShares, maxBorrowShares, borrowDexFee, utilizationBorrow0, utilizationBorrow1, borrowable0, borrowable1, borrowRate0, borrowRate1, totalBorrowShares, token0PerBorrowShare, token1PerBorrowShare, borrowableToken0, borrowableToken1, totalBorrowToken0, totalBorrowToken1, reservesBorrowToken0, reservesBorrowToken1, } = (0, fluidHelpers_1.parseDexBorrowData)(data.dexBorrowData, debtAsset0.symbol, debtAsset1.symbol);
337
+ // 18 because debt is represented in shares for which they use 18 decimals
338
+ const oracleScaleFactor = new decimal_js_1.default(27).add(18).sub(collAsset.decimals).toString();
339
+ const oracleScale = new decimal_js_1.default(10).pow(oracleScaleFactor).toString();
340
+ const oraclePrice = new decimal_js_1.default(1).div(new decimal_js_1.default(data.oraclePriceOperate).div(oracleScale)).toString();
341
+ const prices = yield getChainLinkPricesForTokens([collAsset.address, debtAsset0.address, debtAsset1.address], network, web3);
342
+ const supplyRate = new decimal_js_1.default(data.supplyRateVault).div(100).toString();
343
+ const collAssetData = {
344
+ symbol: collAsset.symbol,
345
+ address: collAsset.address,
346
+ price: prices[collAsset.address],
347
+ totalSupply: data.totalSupplyVault,
348
+ canBeSupplied: true,
349
+ supplyRate,
350
+ };
351
+ if (staking_1.STAKING_ASSETS.includes(collAssetData.symbol)) {
352
+ collAssetData.incentiveSupplyApy = yield (0, staking_1.getStakingApy)(collAsset.symbol, mainnetWeb3);
353
+ collAssetData.incentiveSupplyToken = collAsset.symbol;
354
+ }
355
+ const debtAsset0Data = {
356
+ symbol: debtAsset0.symbol,
357
+ address: debtAsset0.address,
358
+ price: prices[debtAsset0.address],
359
+ totalBorrow: new decimal_js_1.default(totalBorrowShares).mul(token0PerBorrowShare).toString(),
360
+ canBeBorrowed: true,
361
+ borrowRate: borrowRate0,
362
+ borrowable: borrowable0,
363
+ utilization: utilizationBorrow0,
364
+ tokenPerBorrowShare: token0PerBorrowShare,
365
+ borrowReserves: reservesBorrowToken0,
366
+ };
367
+ if (staking_1.STAKING_ASSETS.includes(debtAsset0Data.symbol)) {
368
+ debtAsset0Data.incentiveSupplyApy = yield (0, staking_1.getStakingApy)(debtAsset0.symbol, mainnetWeb3);
369
+ debtAsset0Data.incentiveSupplyToken = debtAsset0.symbol;
370
+ }
371
+ const debtAsset1Data = {
372
+ symbol: debtAsset1.symbol,
373
+ address: debtAsset1.address,
374
+ price: prices[debtAsset1.address],
375
+ totalBorrow: new decimal_js_1.default(totalBorrowShares).mul(token1PerBorrowShare).toString(),
376
+ canBeBorrowed: true,
377
+ borrowRate: borrowRate1,
378
+ borrowable: borrowable1,
379
+ utilization: utilizationBorrow1,
380
+ tokenPerBorrowShare: token1PerBorrowShare,
381
+ borrowReserves: reservesBorrowToken1,
382
+ };
383
+ if (staking_1.STAKING_ASSETS.includes(debtAsset1Data.symbol)) {
384
+ debtAsset1Data.incentiveSupplyApy = yield (0, staking_1.getStakingApy)(debtAsset1.symbol, mainnetWeb3);
385
+ debtAsset1Data.incentiveSupplyToken = debtAsset1.symbol;
386
+ }
387
+ const assetsData = [
388
+ [collAsset.symbol, collAssetData],
389
+ [debtAsset0.symbol, debtAsset0Data],
390
+ [debtAsset1.symbol, debtAsset1Data],
391
+ ]
392
+ .reduce((acc, [symbol, partialData]) => (Object.assign(Object.assign({}, acc), { [symbol]: (0, fluidHelpers_1.mergeAssetData)(acc[symbol], partialData) })), {});
393
+ const marketInfo = (0, markets_1.getFluidMarketInfoById)(+data.vaultId, network);
394
+ const totalSupplyVault = (0, utils_1.getEthAmountForDecimals)(data.totalSupplyVault, collAsset.decimals);
395
+ const liqRatio = new decimal_js_1.default(data.liquidationThreshold).div(100).toString();
396
+ const liquidationMaxLimit = new decimal_js_1.default(data.liquidationMaxLimit).div(100).toString();
397
+ const liqFactor = new decimal_js_1.default(data.liquidationThreshold).div(10000).toString();
398
+ const debtSharePrice = new decimal_js_1.default(oraclePrice).mul(prices[collAsset.address]).toString();
399
+ const totalBorrowSharesInVault = (0, tokens_1.assetAmountInEth)(data.totalBorrowVault);
400
+ const totalBorrowVaultUsd = new decimal_js_1.default(totalBorrowSharesInVault).mul(debtSharePrice).toString();
401
+ const borrowableUSD = new decimal_js_1.default(borrowableShares).mul(debtSharePrice).toString();
402
+ const marketData = {
403
+ vaultId: +data.vaultId,
404
+ vaultValue: marketInfo === null || marketInfo === void 0 ? void 0 : marketInfo.value,
405
+ isSmartColl: data.isSmartColl,
406
+ isSmartDebt: data.isSmartDebt,
407
+ marketAddress: data.vault,
408
+ vaultType: parseVaultType(+data.vaultType),
409
+ oracle: data.oracle,
410
+ liquidationPenaltyPercent: new decimal_js_1.default(data.liquidationPenalty).div(100).toString(),
411
+ collFactor: new decimal_js_1.default(data.collateralFactor).div(10000).toString(),
412
+ liquidationRatio: liqRatio,
413
+ liqFactor,
414
+ minRatio: new decimal_js_1.default(1).div(liqFactor).mul(100).toString(),
415
+ collAsset0: collAsset.symbol,
416
+ debtAsset0: debtAsset0.symbol,
417
+ debtAsset1: debtAsset1.symbol,
418
+ totalPositions: data.totalPositions,
419
+ totalSupplyVault,
420
+ totalBorrowVault: totalBorrowShares,
421
+ totalSupplyVaultUsd: new decimal_js_1.default(totalSupplyVault).mul(assetsData[collAsset.symbol].price).toString(),
422
+ totalBorrowVaultUsd,
423
+ withdrawalLimit: (0, utils_1.getEthAmountForDecimals)(data.withdrawalLimit, collAsset.decimals),
424
+ withdrawableUntilLimit: (0, utils_1.getEthAmountForDecimals)(data.withdrawableUntilLimit, collAsset.decimals),
425
+ withdrawable: (0, utils_1.getEthAmountForDecimals)(data.withdrawable, collAsset.decimals),
426
+ liquidationMaxLimit,
427
+ borrowRate: '0',
428
+ supplyRate,
429
+ borrowableToken0,
430
+ borrowableToken1,
431
+ totalBorrowToken0,
432
+ totalBorrowToken1,
433
+ borrowableUSD,
434
+ borrowable: borrowableShares,
435
+ borrowableDex: new decimal_js_1.default(maxBorrowShares).minus(totalBorrowShares).toString(),
436
+ maxBorrowShares,
437
+ borrowDexFee,
438
+ debtSharePrice,
439
+ };
440
+ return {
441
+ assetsData,
442
+ marketData,
443
+ };
444
+ });
445
+ const parseT4MarketData = (web3, data, network, mainnetWeb3) => __awaiter(void 0, void 0, void 0, function* () {
446
+ const collAsset0 = (0, tokens_1.getAssetInfoByAddress)(data.supplyToken0, network);
447
+ const collAsset1 = (0, tokens_1.getAssetInfoByAddress)(data.supplyToken1, network);
448
+ const debtAsset0 = (0, tokens_1.getAssetInfoByAddress)(data.borrowToken0, network);
449
+ const debtAsset1 = (0, tokens_1.getAssetInfoByAddress)(data.borrowToken1, network);
450
+ const quoteToken = (0, tokens_1.getAssetInfoByAddress)(data.dexBorrowData.quoteToken, network);
451
+ // 27 - 18 + 18
452
+ const oracleScaleFactor = new decimal_js_1.default(27).toString();
453
+ const oracleScale = new decimal_js_1.default(10).pow(oracleScaleFactor).toString();
454
+ const oraclePrice = new decimal_js_1.default(data.oraclePriceOperate).div(oracleScale).toString();
455
+ const prices = yield getChainLinkPricesForTokens([collAsset0.address, collAsset1.address, debtAsset0.address, debtAsset1.address], network, web3);
456
+ const { supplyDexFee, totalSupplyShares, supplyRate1, token0PerSupplyShare, token1PerSupplyShare, totalSupplyToken0, totalSupplyToken1, maxSupplyShares, withdrawableToken0, withdrawable0, withdrawableToken1, withdrawable1, supplyRate0, utilizationSupply0, utilizationSupply1, withdrawableShares, reservesSupplyToken0, reservesSupplyToken1, } = (0, fluidHelpers_1.parseDexSupplyData)(data.dexSupplyData, collAsset0.symbol, collAsset1.symbol);
457
+ const { borrowableShares, maxBorrowShares, borrowDexFee, utilizationBorrow0, utilizationBorrow1, borrowable0, borrowable1, borrowRate0, borrowRate1, totalBorrowShares, token0PerBorrowShare, token1PerBorrowShare, borrowableToken0, borrowableToken1, totalBorrowToken0, totalBorrowToken1, quoteTokensPerShare, reservesBorrowToken0, reservesBorrowToken1, } = (0, fluidHelpers_1.parseDexBorrowData)(data.dexBorrowData, debtAsset0.symbol, debtAsset1.symbol);
458
+ const collAsset0Data = {
459
+ symbol: collAsset0.symbol,
460
+ address: collAsset0.address,
461
+ price: prices[collAsset0.address],
462
+ totalSupply: new decimal_js_1.default(totalSupplyShares).mul(token0PerSupplyShare).toString(),
463
+ canBeSupplied: true,
464
+ supplyRate: supplyRate0,
465
+ utilization: utilizationSupply0,
466
+ withdrawable: withdrawable0,
467
+ tokenPerSupplyShare: token0PerSupplyShare,
468
+ supplyReserves: reservesSupplyToken0,
469
+ };
470
+ if (staking_1.STAKING_ASSETS.includes(collAsset0Data.symbol)) {
471
+ collAsset0Data.incentiveSupplyApy = yield (0, staking_1.getStakingApy)(collAsset0.symbol, mainnetWeb3);
472
+ collAsset0Data.incentiveSupplyToken = collAsset0.symbol;
473
+ }
474
+ const collAsset1Data = {
475
+ symbol: collAsset1.symbol,
476
+ address: collAsset1.address,
477
+ price: prices[collAsset1.address],
478
+ totalSupply: new decimal_js_1.default(totalSupplyShares).mul(token1PerSupplyShare).toString(),
479
+ canBeSupplied: true,
480
+ supplyRate: supplyRate1,
481
+ withdrawable: withdrawable1,
482
+ utilization: utilizationSupply1,
483
+ tokenPerSupplyShare: token1PerSupplyShare,
484
+ supplyReserves: reservesSupplyToken1,
485
+ };
486
+ if (staking_1.STAKING_ASSETS.includes(collAsset1Data.symbol)) {
487
+ collAsset1Data.incentiveSupplyApy = yield (0, staking_1.getStakingApy)(collAsset1.symbol, mainnetWeb3);
488
+ collAsset1Data.incentiveSupplyToken = collAsset1.symbol;
489
+ }
490
+ const debtAsset0Data = {
491
+ symbol: debtAsset0.symbol,
492
+ address: debtAsset0.address,
493
+ price: prices[debtAsset0.address],
494
+ totalBorrow: new decimal_js_1.default(totalBorrowShares).mul(token0PerBorrowShare).toString(),
495
+ canBeBorrowed: true,
496
+ borrowRate: borrowRate0,
497
+ borrowable: borrowable0,
498
+ utilization: utilizationBorrow0,
499
+ tokenPerBorrowShare: token0PerBorrowShare,
500
+ borrowReserves: reservesBorrowToken0,
501
+ };
502
+ if (staking_1.STAKING_ASSETS.includes(debtAsset0Data.symbol)) {
503
+ debtAsset0Data.incentiveSupplyApy = yield (0, staking_1.getStakingApy)(debtAsset0.symbol, mainnetWeb3);
504
+ debtAsset0Data.incentiveSupplyToken = debtAsset0.symbol;
505
+ }
506
+ const debtAsset1Data = {
507
+ symbol: debtAsset1.symbol,
508
+ address: debtAsset1.address,
509
+ price: prices[debtAsset1.address],
510
+ totalBorrow: new decimal_js_1.default(totalBorrowShares).mul(token1PerBorrowShare).toString(),
511
+ canBeBorrowed: true,
512
+ borrowRate: borrowRate1,
513
+ borrowable: borrowable1,
514
+ utilization: utilizationBorrow1,
515
+ tokenPerBorrowShare: token1PerBorrowShare,
516
+ borrowReserves: reservesBorrowToken1,
517
+ };
518
+ if (staking_1.STAKING_ASSETS.includes(debtAsset1Data.symbol)) {
519
+ debtAsset1Data.incentiveSupplyApy = yield (0, staking_1.getStakingApy)(debtAsset1.symbol, mainnetWeb3);
520
+ debtAsset1Data.incentiveSupplyToken = debtAsset1.symbol;
521
+ }
522
+ const assetsData = [
523
+ [collAsset0.symbol, collAsset0Data],
524
+ [collAsset1.symbol, collAsset1Data],
525
+ [debtAsset0.symbol, debtAsset0Data],
526
+ [debtAsset1.symbol, debtAsset1Data],
527
+ ]
528
+ .reduce((acc, [symbol, partialData]) => (Object.assign(Object.assign({}, acc), { [symbol]: (0, fluidHelpers_1.mergeAssetData)(acc[symbol], partialData) })), {});
529
+ const marketInfo = (0, markets_1.getFluidMarketInfoById)(+data.vaultId, network);
530
+ const liqRatio = new decimal_js_1.default(data.liquidationThreshold).div(100).toString();
531
+ const liquidationMaxLimit = new decimal_js_1.default(data.liquidationMaxLimit).div(100).toString();
532
+ const liqFactor = new decimal_js_1.default(data.liquidationThreshold).div(10000).toString();
533
+ const totalBorrowSharesInVault = (0, tokens_1.assetAmountInEth)(data.totalBorrowVault);
534
+ const debtSharePrice = new decimal_js_1.default(quoteTokensPerShare).mul(prices[quoteToken.address]).toString();
535
+ const totalBorrowVaultUsd = new decimal_js_1.default(totalBorrowSharesInVault).mul(debtSharePrice).toString();
536
+ const borrowableUSD = new decimal_js_1.default(borrowableShares).mul(debtSharePrice).toString();
537
+ const totalSupplySharesInVault = (0, tokens_1.assetAmountInEth)(data.totalSupplyVault);
538
+ const collSharePrice = new decimal_js_1.default(oraclePrice).mul(debtSharePrice).toString();
539
+ const totalSupplyVaultUsd = new decimal_js_1.default(totalSupplySharesInVault).mul(collSharePrice).toString();
540
+ const withdrawableUSD = new decimal_js_1.default(withdrawableShares).mul(collSharePrice).toString();
541
+ const marketData = {
542
+ vaultId: +data.vaultId,
543
+ vaultValue: marketInfo === null || marketInfo === void 0 ? void 0 : marketInfo.value,
544
+ isSmartColl: data.isSmartColl,
545
+ isSmartDebt: data.isSmartDebt,
546
+ marketAddress: data.vault,
547
+ vaultType: parseVaultType(+data.vaultType),
548
+ oracle: data.oracle,
549
+ liquidationPenaltyPercent: new decimal_js_1.default(data.liquidationPenalty).div(100).toString(),
550
+ collFactor: new decimal_js_1.default(data.collateralFactor).div(10000).toString(),
551
+ liquidationRatio: liqRatio,
552
+ liqFactor,
553
+ minRatio: new decimal_js_1.default(1).div(liqFactor).mul(100).toString(),
554
+ collAsset0: collAsset0.symbol,
555
+ collAsset1: collAsset1.symbol,
556
+ debtAsset0: debtAsset0.symbol,
557
+ debtAsset1: debtAsset1.symbol,
558
+ totalPositions: data.totalPositions,
559
+ totalSupplyVault: totalSupplyShares,
560
+ totalBorrowVault: totalBorrowShares,
561
+ totalSupplyVaultUsd,
562
+ totalBorrowVaultUsd,
563
+ liquidationMaxLimit,
564
+ borrowRate: '0',
565
+ supplyRate: '0',
566
+ borrowableToken0,
567
+ borrowableToken1,
568
+ totalBorrowToken0,
569
+ totalBorrowToken1,
570
+ borrowableUSD,
571
+ borrowable: borrowableShares,
572
+ borrowableDex: new decimal_js_1.default(maxBorrowShares).minus(totalBorrowShares).toString(),
573
+ maxBorrowShares,
574
+ borrowDexFee,
575
+ totalSupplyToken0,
576
+ totalSupplyToken1,
577
+ withdrawableToken0,
578
+ withdrawableToken1,
579
+ withdrawableUSD,
580
+ withdrawable: withdrawableShares,
581
+ widthdrawableDex: new decimal_js_1.default(maxSupplyShares).minus(totalSupplyShares).toString(),
582
+ maxSupplyShares,
583
+ collDexFee: supplyDexFee,
584
+ collSharePrice,
585
+ debtSharePrice,
586
+ };
587
+ return {
588
+ assetsData,
589
+ marketData,
590
+ };
591
+ });
592
+ const parseMarketData = (web3, data, network, mainnetWeb3) => __awaiter(void 0, void 0, void 0, function* () {
593
+ const vaultType = parseVaultType(+data.vaultType);
594
+ switch (vaultType) {
595
+ case types_1.FluidVaultType.T1:
596
+ return parseT1MarketData(web3, data, network, mainnetWeb3);
597
+ case types_1.FluidVaultType.T2:
598
+ return parseT2MarketData(web3, data, network, mainnetWeb3);
599
+ case types_1.FluidVaultType.T3:
600
+ return parseT3MarketData(web3, data, network, mainnetWeb3);
601
+ case types_1.FluidVaultType.T4:
602
+ return parseT4MarketData(web3, data, network, mainnetWeb3);
603
+ default:
604
+ throw new Error(`Unknown vault type: ${vaultType}`);
605
+ }
606
+ });
153
607
  exports.EMPTY_FLUID_DATA = {
154
608
  usedAssets: {},
155
609
  suppliedUsd: '0',
@@ -165,11 +619,12 @@ exports.EMPTY_FLUID_DATA = {
165
619
  automationResubscribeRequired: false,
166
620
  lastUpdated: Date.now(),
167
621
  };
168
- const parseUserData = (userPositionData, vaultData) => {
622
+ const parseT1UserData = (userPositionData, vaultData) => {
169
623
  const { assetsData, marketData, } = vaultData;
170
624
  const payload = Object.assign(Object.assign({ owner: userPositionData.owner, vaultId: marketData.vaultId }, exports.EMPTY_FLUID_DATA), { lastUpdated: Date.now() });
171
625
  const collAsset = (0, tokens_1.getAssetInfo)(marketData.collAsset0);
172
626
  const debtAsset = (0, tokens_1.getAssetInfo)(marketData.debtAsset0);
627
+ // for T2 and T4 - this is the number of shares
173
628
  const supplied = (0, utils_1.getEthAmountForDecimals)(userPositionData.supply, collAsset.decimals);
174
629
  const borrowed = (0, utils_1.getEthAmountForDecimals)(userPositionData.borrow, debtAsset.decimals);
175
630
  const collUsedAsset = Object.assign(Object.assign({}, exports.EMPTY_USED_ASSET), { symbol: collAsset.symbol, collateral: true, supplied, suppliedUsd: new decimal_js_1.default(supplied).mul(assetsData[collAsset.symbol].price).toString(), isSupplied: new decimal_js_1.default(supplied).gt(0) });
@@ -184,6 +639,174 @@ const parseUserData = (userPositionData, vaultData) => {
184
639
  marketData,
185
640
  }));
186
641
  };
642
+ const parseT2UserData = (userPositionData, vaultData) => {
643
+ const { assetsData, marketData, } = vaultData;
644
+ const payload = Object.assign(Object.assign({ owner: userPositionData.owner, vaultId: marketData.vaultId }, exports.EMPTY_FLUID_DATA), { lastUpdated: Date.now() });
645
+ const collAsset0 = (0, tokens_1.getAssetInfo)(marketData.collAsset0);
646
+ const collAsset1 = (0, tokens_1.getAssetInfo)(marketData.collAsset1);
647
+ const debtAsset = (0, tokens_1.getAssetInfo)(marketData.debtAsset0);
648
+ const supplyShares = (0, utils_1.getEthAmountForDecimals)(userPositionData.supply, 18); // this is supplied in coll shares
649
+ const borrowed = (0, utils_1.getEthAmountForDecimals)(userPositionData.borrow, debtAsset.decimals); // this is actual token borrow
650
+ const supplied0 = new decimal_js_1.default(supplyShares).mul(assetsData[collAsset0.symbol].tokenPerSupplyShare).toString();
651
+ const supplied1 = new decimal_js_1.default(supplyShares).mul(assetsData[collAsset1.symbol].tokenPerSupplyShare).toString();
652
+ const collUsedAsset0 = {
653
+ symbol: collAsset0.symbol,
654
+ collateral: true,
655
+ supplied: supplied0,
656
+ suppliedUsd: new decimal_js_1.default(supplied0).mul(assetsData[collAsset0.symbol].price).toString(),
657
+ isSupplied: new decimal_js_1.default(supplied0).gt(0),
658
+ };
659
+ const collUsedAsset1 = {
660
+ symbol: collAsset1.symbol,
661
+ collateral: true,
662
+ supplied: supplied1,
663
+ suppliedUsd: new decimal_js_1.default(supplied1).mul(assetsData[collAsset1.symbol].price).toString(),
664
+ isSupplied: new decimal_js_1.default(supplied1).gt(0),
665
+ };
666
+ const debtUsedAsset = {
667
+ symbol: debtAsset.symbol,
668
+ collateral: false,
669
+ borrowed,
670
+ borrowedUsd: new decimal_js_1.default(borrowed).mul(assetsData[debtAsset.symbol].price).toString(),
671
+ isBorrowed: new decimal_js_1.default(borrowed).gt(0),
672
+ };
673
+ const usedAssets = [
674
+ [collAsset0.symbol, collUsedAsset0],
675
+ [collAsset1.symbol, collUsedAsset1],
676
+ [debtAsset.symbol, debtUsedAsset],
677
+ ]
678
+ .reduce((acc, [symbol, partialData]) => {
679
+ acc[symbol] = (0, fluidHelpers_1.mergeUsedAssets)(acc[symbol], partialData);
680
+ return acc;
681
+ }, {});
682
+ return Object.assign(Object.assign(Object.assign({}, payload), { usedAssets,
683
+ supplyShares }), (0, fluidHelpers_1.getFluidAggregatedData)({
684
+ usedAssets,
685
+ assetsData,
686
+ marketData,
687
+ }, supplyShares));
688
+ };
689
+ const parseT3UserData = (userPositionData, vaultData) => {
690
+ const { assetsData, marketData, } = vaultData;
691
+ const payload = Object.assign(Object.assign({ owner: userPositionData.owner, vaultId: marketData.vaultId }, exports.EMPTY_FLUID_DATA), { lastUpdated: Date.now() });
692
+ const collAsset = (0, tokens_1.getAssetInfo)(marketData.collAsset0);
693
+ const debtAsset0 = (0, tokens_1.getAssetInfo)(marketData.debtAsset0);
694
+ const debtAsset1 = (0, tokens_1.getAssetInfo)(marketData.debtAsset1);
695
+ const supplied = (0, utils_1.getEthAmountForDecimals)(userPositionData.supply, collAsset.decimals); // this is actual token supply
696
+ const borrowShares = (0, utils_1.getEthAmountForDecimals)(userPositionData.borrow, 18); // this is actual token borrow
697
+ const borrowed0 = new decimal_js_1.default(borrowShares).mul(assetsData[debtAsset0.symbol].tokenPerBorrowShare).toString();
698
+ const borrowed1 = new decimal_js_1.default(borrowShares).mul(assetsData[debtAsset1.symbol].tokenPerBorrowShare).toString();
699
+ const collUsedAsset = {
700
+ symbol: collAsset.symbol,
701
+ collateral: true,
702
+ supplied,
703
+ suppliedUsd: new decimal_js_1.default(supplied).mul(assetsData[collAsset.symbol].price).toString(),
704
+ isSupplied: new decimal_js_1.default(supplied).gt(0),
705
+ };
706
+ const debtUsedAsset0 = {
707
+ symbol: debtAsset0.symbol,
708
+ collateral: false,
709
+ borrowed: borrowed0,
710
+ borrowedUsd: new decimal_js_1.default(borrowed0).mul(assetsData[debtAsset0.symbol].price).toString(),
711
+ isBorrowed: new decimal_js_1.default(borrowed0).gt(0),
712
+ };
713
+ const debtUsedAsset1 = {
714
+ symbol: debtAsset1.symbol,
715
+ collateral: false,
716
+ borrowed: borrowed1,
717
+ borrowedUsd: new decimal_js_1.default(borrowed1).mul(assetsData[debtAsset1.symbol].price).toString(),
718
+ isBorrowed: new decimal_js_1.default(borrowed1).gt(0),
719
+ };
720
+ const usedAssets = [
721
+ [collAsset.symbol, collUsedAsset],
722
+ [debtAsset0.symbol, debtUsedAsset0],
723
+ [debtAsset1.symbol, debtUsedAsset1],
724
+ ]
725
+ .reduce((acc, [symbol, partialData]) => {
726
+ acc[symbol] = (0, fluidHelpers_1.mergeUsedAssets)(acc[symbol], partialData);
727
+ return acc;
728
+ }, {});
729
+ return Object.assign(Object.assign(Object.assign({}, payload), { usedAssets,
730
+ borrowShares }), (0, fluidHelpers_1.getFluidAggregatedData)({
731
+ usedAssets,
732
+ assetsData,
733
+ marketData,
734
+ }, '', borrowShares));
735
+ };
736
+ const parseT4UserData = (userPositionData, vaultData) => {
737
+ const { assetsData, marketData, } = vaultData;
738
+ const payload = Object.assign(Object.assign({ owner: userPositionData.owner, vaultId: marketData.vaultId }, exports.EMPTY_FLUID_DATA), { lastUpdated: Date.now() });
739
+ const collAsset0 = (0, tokens_1.getAssetInfo)(marketData.collAsset0);
740
+ const collAsset1 = (0, tokens_1.getAssetInfo)(marketData.collAsset1);
741
+ const debtAsset0 = (0, tokens_1.getAssetInfo)(marketData.debtAsset0);
742
+ const debtAsset1 = (0, tokens_1.getAssetInfo)(marketData.debtAsset1);
743
+ const supplyShares = (0, utils_1.getEthAmountForDecimals)(userPositionData.supply, 18); // this is actual token supply
744
+ const borrowShares = (0, utils_1.getEthAmountForDecimals)(userPositionData.borrow, 18); // this is actual token borrow
745
+ const supplied0 = new decimal_js_1.default(supplyShares).mul(assetsData[collAsset0.symbol].tokenPerSupplyShare).toString();
746
+ const supplied1 = new decimal_js_1.default(supplyShares).mul(assetsData[collAsset1.symbol].tokenPerSupplyShare).toString();
747
+ const borrowed0 = new decimal_js_1.default(borrowShares).mul(assetsData[debtAsset0.symbol].tokenPerBorrowShare).toString();
748
+ const borrowed1 = new decimal_js_1.default(borrowShares).mul(assetsData[debtAsset1.symbol].tokenPerBorrowShare).toString();
749
+ const collUsedAsset0 = {
750
+ symbol: collAsset0.symbol,
751
+ collateral: true,
752
+ supplied: supplied0,
753
+ suppliedUsd: new decimal_js_1.default(supplied0).mul(assetsData[collAsset0.symbol].price).toString(),
754
+ isSupplied: new decimal_js_1.default(supplied0).gt(0),
755
+ };
756
+ const collUsedAsset1 = {
757
+ symbol: collAsset1.symbol,
758
+ collateral: true,
759
+ supplied: supplied1,
760
+ suppliedUsd: new decimal_js_1.default(supplied1).mul(assetsData[collAsset1.symbol].price).toString(),
761
+ isSupplied: new decimal_js_1.default(supplied1).gt(0),
762
+ };
763
+ const debtUsedAsset0 = {
764
+ symbol: debtAsset0.symbol,
765
+ collateral: false,
766
+ borrowed: borrowed0,
767
+ borrowedUsd: new decimal_js_1.default(borrowed0).mul(assetsData[debtAsset0.symbol].price).toString(),
768
+ isBorrowed: new decimal_js_1.default(borrowed0).gt(0),
769
+ };
770
+ const debtUsedAsset1 = {
771
+ symbol: debtAsset1.symbol,
772
+ collateral: false,
773
+ borrowed: borrowed1,
774
+ borrowedUsd: new decimal_js_1.default(borrowed1).mul(assetsData[debtAsset1.symbol].price).toString(),
775
+ isBorrowed: new decimal_js_1.default(borrowed1).gt(0),
776
+ };
777
+ const usedAssets = [
778
+ [collAsset0.symbol, collUsedAsset0],
779
+ [collAsset1.symbol, collUsedAsset1],
780
+ [debtAsset0.symbol, debtUsedAsset0],
781
+ [debtAsset1.symbol, debtUsedAsset1],
782
+ ]
783
+ .reduce((acc, [symbol, partialData]) => {
784
+ acc[symbol] = (0, fluidHelpers_1.mergeUsedAssets)(acc[symbol], partialData);
785
+ return acc;
786
+ }, {});
787
+ return Object.assign(Object.assign(Object.assign({}, payload), { usedAssets,
788
+ supplyShares,
789
+ borrowShares }), (0, fluidHelpers_1.getFluidAggregatedData)({
790
+ usedAssets,
791
+ assetsData,
792
+ marketData,
793
+ }, supplyShares, borrowShares));
794
+ };
795
+ const parseUserData = (userPositionData, vaultData) => {
796
+ const vaultType = vaultData.marketData.vaultType;
797
+ switch (vaultType) {
798
+ case types_1.FluidVaultType.T1:
799
+ return parseT1UserData(userPositionData, vaultData);
800
+ case types_1.FluidVaultType.T2:
801
+ return parseT2UserData(userPositionData, vaultData);
802
+ case types_1.FluidVaultType.T3:
803
+ return parseT3UserData(userPositionData, vaultData);
804
+ case types_1.FluidVaultType.T4:
805
+ return parseT4UserData(userPositionData, vaultData);
806
+ default:
807
+ throw new Error(`Unknown vault type: ${vaultType}`);
808
+ }
809
+ };
187
810
  const getFluidMarketData = (web3, network, market, mainnetWeb3) => __awaiter(void 0, void 0, void 0, function* () {
188
811
  const view = (0, contracts_1.FluidViewContract)(web3, network);
189
812
  const data = yield view.methods.getVaultData(market.marketAddress).call();