@defisaver/automation-sdk 3.1.9 → 3.1.14-spark-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 (245) hide show
  1. package/.babelrc +3 -3
  2. package/.editorconfig +9 -9
  3. package/.env.dev +4 -4
  4. package/.eslintignore +6 -6
  5. package/.eslintrc.js +39 -39
  6. package/.mocharc.json +4 -4
  7. package/.nvmrc +1 -1
  8. package/README.md +46 -46
  9. package/cjs/abis/Erc20.json +223 -223
  10. package/cjs/abis/SubStorage.json +21 -21
  11. package/cjs/abis/UniMulticall.json +17 -17
  12. package/cjs/abis/index.d.ts +9 -9
  13. package/cjs/abis/index.js +30 -30
  14. package/cjs/abis/legacy_AaveV2Subscriptions.json +8 -8
  15. package/cjs/abis/legacy_AuthCheck.json +8 -8
  16. package/cjs/abis/legacy_CompoundV2Subscriptions.json +9 -9
  17. package/cjs/abis/legacy_MakerSubscriptions.json +9 -9
  18. package/cjs/automation/private/Automation.d.ts +12 -12
  19. package/cjs/automation/private/Automation.js +42 -42
  20. package/cjs/automation/private/LegacyAutomation.d.ts +25 -25
  21. package/cjs/automation/private/LegacyAutomation.js +118 -118
  22. package/cjs/automation/private/LegacyProtocol.d.ts +22 -22
  23. package/cjs/automation/private/LegacyProtocol.js +41 -41
  24. package/cjs/automation/private/LegacyProtocol.test.d.ts +1 -1
  25. package/cjs/automation/private/LegacyProtocol.test.js +25 -25
  26. package/cjs/automation/private/Protocol.d.ts +22 -22
  27. package/cjs/automation/private/Protocol.js +41 -41
  28. package/cjs/automation/private/Protocol.test.d.ts +1 -1
  29. package/cjs/automation/private/Protocol.test.js +25 -25
  30. package/cjs/automation/private/StrategiesAutomation.d.ts +35 -33
  31. package/cjs/automation/private/StrategiesAutomation.js +198 -181
  32. package/cjs/automation/private/StrategiesAutomation.test.d.ts +1 -1
  33. package/cjs/automation/private/StrategiesAutomation.test.js +696 -671
  34. package/cjs/automation/public/ArbitrumStrategies.d.ts +5 -5
  35. package/cjs/automation/public/ArbitrumStrategies.js +13 -13
  36. package/cjs/automation/public/BaseStrategies.d.ts +5 -5
  37. package/cjs/automation/public/BaseStrategies.js +13 -13
  38. package/cjs/automation/public/EthereumStrategies.d.ts +5 -5
  39. package/cjs/automation/public/EthereumStrategies.js +13 -13
  40. package/cjs/automation/public/OptimismStrategies.d.ts +5 -5
  41. package/cjs/automation/public/OptimismStrategies.js +13 -13
  42. package/cjs/automation/public/Strategies.test.d.ts +1 -1
  43. package/cjs/automation/public/Strategies.test.js +61 -61
  44. package/cjs/automation/public/legacy/LegacyAaveAutomation.d.ts +6 -6
  45. package/cjs/automation/public/legacy/LegacyAaveAutomation.js +20 -20
  46. package/cjs/automation/public/legacy/LegacyCompoundAutomation.d.ts +6 -6
  47. package/cjs/automation/public/legacy/LegacyCompoundAutomation.js +20 -20
  48. package/cjs/automation/public/legacy/LegacyMakerAutomation.d.ts +6 -6
  49. package/cjs/automation/public/legacy/LegacyMakerAutomation.js +20 -20
  50. package/cjs/configuration.d.ts +1 -1
  51. package/cjs/configuration.js +12 -12
  52. package/cjs/constants/index.d.ts +29 -28
  53. package/cjs/constants/index.js +905 -534
  54. package/cjs/index.d.ts +24 -23
  55. package/cjs/index.js +65 -65
  56. package/cjs/services/contractService.d.ts +12 -12
  57. package/cjs/services/contractService.js +54 -54
  58. package/cjs/services/ethereumService.d.ts +7 -7
  59. package/cjs/services/ethereumService.js +56 -49
  60. package/cjs/services/ethereumService.test.d.ts +1 -1
  61. package/cjs/services/ethereumService.test.js +245 -242
  62. package/cjs/services/strategiesService.d.ts +2 -2
  63. package/cjs/services/strategiesService.js +1173 -861
  64. package/cjs/services/strategiesService.test.d.ts +1 -1
  65. package/cjs/services/strategiesService.test.js +111 -110
  66. package/cjs/services/strategySubService.d.ts +129 -107
  67. package/cjs/services/strategySubService.js +414 -300
  68. package/cjs/services/strategySubService.test.d.ts +1 -1
  69. package/cjs/services/strategySubService.test.js +1812 -936
  70. package/cjs/services/subDataService.d.ts +527 -245
  71. package/cjs/services/subDataService.js +1219 -636
  72. package/cjs/services/subDataService.test.d.ts +1 -1
  73. package/cjs/services/subDataService.test.js +2427 -1282
  74. package/cjs/services/triggerService.d.ts +325 -226
  75. package/cjs/services/triggerService.js +616 -433
  76. package/cjs/services/triggerService.test.d.ts +1 -1
  77. package/cjs/services/triggerService.test.js +1317 -926
  78. package/cjs/services/utils.d.ts +30 -30
  79. package/cjs/services/utils.js +190 -182
  80. package/cjs/services/utils.test.d.ts +1 -1
  81. package/cjs/services/utils.test.js +299 -376
  82. package/cjs/types/contracts/generated/Erc20.d.ts +53 -53
  83. package/cjs/types/contracts/generated/Erc20.js +5 -5
  84. package/cjs/types/contracts/generated/Legacy_AaveV2Subscriptions.d.ts +129 -129
  85. package/cjs/types/contracts/generated/Legacy_AaveV2Subscriptions.js +5 -5
  86. package/cjs/types/contracts/generated/Legacy_AuthCheck.d.ts +20 -20
  87. package/cjs/types/contracts/generated/Legacy_AuthCheck.js +5 -5
  88. package/cjs/types/contracts/generated/Legacy_CompoundV2Subscriptions.d.ts +128 -128
  89. package/cjs/types/contracts/generated/Legacy_CompoundV2Subscriptions.js +5 -5
  90. package/cjs/types/contracts/generated/Legacy_MakerSubscriptions.d.ts +246 -246
  91. package/cjs/types/contracts/generated/Legacy_MakerSubscriptions.js +5 -5
  92. package/cjs/types/contracts/generated/SubStorage.d.ts +114 -114
  93. package/cjs/types/contracts/generated/SubStorage.js +5 -5
  94. package/cjs/types/contracts/generated/UniMulticall.d.ts +55 -55
  95. package/cjs/types/contracts/generated/UniMulticall.js +5 -5
  96. package/cjs/types/contracts/generated/index.d.ts +7 -7
  97. package/cjs/types/contracts/generated/index.js +2 -2
  98. package/cjs/types/contracts/generated/types.d.ts +54 -54
  99. package/cjs/types/contracts/generated/types.js +2 -2
  100. package/cjs/types/enums.d.ts +302 -219
  101. package/cjs/types/enums.js +328 -245
  102. package/cjs/types/index.d.ts +306 -248
  103. package/cjs/types/index.js +2 -2
  104. package/esm/abis/Erc20.json +223 -223
  105. package/esm/abis/SubStorage.json +21 -21
  106. package/esm/abis/UniMulticall.json +17 -17
  107. package/esm/abis/index.d.ts +9 -9
  108. package/esm/abis/index.js +18 -18
  109. package/esm/abis/legacy_AaveV2Subscriptions.json +8 -8
  110. package/esm/abis/legacy_AuthCheck.json +8 -8
  111. package/esm/abis/legacy_CompoundV2Subscriptions.json +9 -9
  112. package/esm/abis/legacy_MakerSubscriptions.json +9 -9
  113. package/esm/automation/private/Automation.d.ts +12 -12
  114. package/esm/automation/private/Automation.js +39 -39
  115. package/esm/automation/private/LegacyAutomation.d.ts +25 -25
  116. package/esm/automation/private/LegacyAutomation.js +112 -112
  117. package/esm/automation/private/LegacyProtocol.d.ts +22 -22
  118. package/esm/automation/private/LegacyProtocol.js +38 -38
  119. package/esm/automation/private/LegacyProtocol.test.d.ts +1 -1
  120. package/esm/automation/private/LegacyProtocol.test.js +20 -20
  121. package/esm/automation/private/Protocol.d.ts +22 -22
  122. package/esm/automation/private/Protocol.js +38 -38
  123. package/esm/automation/private/Protocol.test.d.ts +1 -1
  124. package/esm/automation/private/Protocol.test.js +20 -20
  125. package/esm/automation/private/StrategiesAutomation.d.ts +35 -33
  126. package/esm/automation/private/StrategiesAutomation.js +192 -175
  127. package/esm/automation/private/StrategiesAutomation.test.d.ts +1 -1
  128. package/esm/automation/private/StrategiesAutomation.test.js +691 -666
  129. package/esm/automation/public/ArbitrumStrategies.d.ts +5 -5
  130. package/esm/automation/public/ArbitrumStrategies.js +7 -7
  131. package/esm/automation/public/BaseStrategies.d.ts +5 -5
  132. package/esm/automation/public/BaseStrategies.js +7 -7
  133. package/esm/automation/public/EthereumStrategies.d.ts +5 -5
  134. package/esm/automation/public/EthereumStrategies.js +7 -7
  135. package/esm/automation/public/OptimismStrategies.d.ts +5 -5
  136. package/esm/automation/public/OptimismStrategies.js +7 -7
  137. package/esm/automation/public/Strategies.test.d.ts +1 -1
  138. package/esm/automation/public/Strategies.test.js +56 -56
  139. package/esm/automation/public/legacy/LegacyAaveAutomation.d.ts +6 -6
  140. package/esm/automation/public/legacy/LegacyAaveAutomation.js +14 -14
  141. package/esm/automation/public/legacy/LegacyCompoundAutomation.d.ts +6 -6
  142. package/esm/automation/public/legacy/LegacyCompoundAutomation.js +14 -14
  143. package/esm/automation/public/legacy/LegacyMakerAutomation.d.ts +6 -6
  144. package/esm/automation/public/legacy/LegacyMakerAutomation.js +14 -14
  145. package/esm/configuration.d.ts +1 -1
  146. package/esm/configuration.js +7 -7
  147. package/esm/constants/index.d.ts +29 -28
  148. package/esm/constants/index.js +899 -528
  149. package/esm/index.d.ts +24 -23
  150. package/esm/index.js +23 -23
  151. package/esm/services/contractService.d.ts +12 -12
  152. package/esm/services/contractService.js +45 -45
  153. package/esm/services/ethereumService.d.ts +7 -7
  154. package/esm/services/ethereumService.js +48 -41
  155. package/esm/services/ethereumService.test.d.ts +1 -1
  156. package/esm/services/ethereumService.test.js +240 -237
  157. package/esm/services/strategiesService.d.ts +2 -2
  158. package/esm/services/strategiesService.js +1143 -831
  159. package/esm/services/strategiesService.test.d.ts +1 -1
  160. package/esm/services/strategiesService.test.js +109 -108
  161. package/esm/services/strategySubService.d.ts +129 -107
  162. package/esm/services/strategySubService.js +385 -271
  163. package/esm/services/strategySubService.test.d.ts +1 -1
  164. package/esm/services/strategySubService.test.js +1784 -908
  165. package/esm/services/subDataService.d.ts +527 -245
  166. package/esm/services/subDataService.js +1213 -630
  167. package/esm/services/subDataService.test.d.ts +1 -1
  168. package/esm/services/subDataService.test.js +2399 -1254
  169. package/esm/services/triggerService.d.ts +325 -226
  170. package/esm/services/triggerService.js +587 -404
  171. package/esm/services/triggerService.test.d.ts +1 -1
  172. package/esm/services/triggerService.test.js +1292 -901
  173. package/esm/services/utils.d.ts +30 -30
  174. package/esm/services/utils.js +139 -131
  175. package/esm/services/utils.test.d.ts +1 -1
  176. package/esm/services/utils.test.js +297 -348
  177. package/esm/types/contracts/generated/Erc20.d.ts +53 -53
  178. package/esm/types/contracts/generated/Erc20.js +4 -4
  179. package/esm/types/contracts/generated/Legacy_AaveV2Subscriptions.d.ts +129 -129
  180. package/esm/types/contracts/generated/Legacy_AaveV2Subscriptions.js +4 -4
  181. package/esm/types/contracts/generated/Legacy_AuthCheck.d.ts +20 -20
  182. package/esm/types/contracts/generated/Legacy_AuthCheck.js +4 -4
  183. package/esm/types/contracts/generated/Legacy_CompoundV2Subscriptions.d.ts +128 -128
  184. package/esm/types/contracts/generated/Legacy_CompoundV2Subscriptions.js +4 -4
  185. package/esm/types/contracts/generated/Legacy_MakerSubscriptions.d.ts +246 -246
  186. package/esm/types/contracts/generated/Legacy_MakerSubscriptions.js +4 -4
  187. package/esm/types/contracts/generated/SubStorage.d.ts +114 -114
  188. package/esm/types/contracts/generated/SubStorage.js +4 -4
  189. package/esm/types/contracts/generated/UniMulticall.d.ts +55 -55
  190. package/esm/types/contracts/generated/UniMulticall.js +4 -4
  191. package/esm/types/contracts/generated/index.d.ts +7 -7
  192. package/esm/types/contracts/generated/index.js +1 -1
  193. package/esm/types/contracts/generated/types.d.ts +54 -54
  194. package/esm/types/contracts/generated/types.js +1 -1
  195. package/esm/types/enums.d.ts +302 -219
  196. package/esm/types/enums.js +325 -242
  197. package/esm/types/index.d.ts +306 -248
  198. package/esm/types/index.js +1 -1
  199. package/package.json +60 -61
  200. package/scripts/generateContractTypes.js +39 -39
  201. package/src/abis/Erc20.json +222 -222
  202. package/src/abis/SubStorage.json +21 -21
  203. package/src/abis/UniMulticall.json +17 -17
  204. package/src/abis/index.ts +28 -28
  205. package/src/abis/legacy_AaveV2Subscriptions.json +7 -7
  206. package/src/abis/legacy_AuthCheck.json +7 -7
  207. package/src/abis/legacy_CompoundV2Subscriptions.json +8 -8
  208. package/src/abis/legacy_MakerSubscriptions.json +8 -8
  209. package/src/automation/private/Automation.ts +44 -44
  210. package/src/automation/private/LegacyAutomation.ts +135 -135
  211. package/src/automation/private/LegacyProtocol.test.ts +23 -23
  212. package/src/automation/private/LegacyProtocol.ts +51 -51
  213. package/src/automation/private/Protocol.test.ts +23 -23
  214. package/src/automation/private/Protocol.ts +51 -51
  215. package/src/automation/private/StrategiesAutomation.test.ts +703 -663
  216. package/src/automation/private/StrategiesAutomation.ts +265 -242
  217. package/src/automation/public/ArbitrumStrategies.ts +10 -10
  218. package/src/automation/public/BaseStrategies.ts +10 -10
  219. package/src/automation/public/EthereumStrategies.ts +10 -10
  220. package/src/automation/public/OptimismStrategies.ts +10 -10
  221. package/src/automation/public/Strategies.test.ts +49 -49
  222. package/src/automation/public/legacy/LegacyAaveAutomation.ts +20 -20
  223. package/src/automation/public/legacy/LegacyCompoundAutomation.ts +20 -20
  224. package/src/automation/public/legacy/LegacyMakerAutomation.ts +20 -20
  225. package/src/configuration.ts +8 -8
  226. package/src/constants/index.ts +935 -563
  227. package/src/index.ts +41 -39
  228. package/src/services/contractService.ts +77 -77
  229. package/src/services/ethereumService.test.ts +260 -257
  230. package/src/services/ethereumService.ts +76 -69
  231. package/src/services/strategiesService.test.ts +106 -105
  232. package/src/services/strategiesService.ts +1473 -1111
  233. package/src/services/strategySubService.test.ts +2136 -1122
  234. package/src/services/strategySubService.ts +987 -617
  235. package/src/services/subDataService.test.ts +2630 -1387
  236. package/src/services/subDataService.ts +1631 -870
  237. package/src/services/triggerService.test.ts +1434 -1004
  238. package/src/services/triggerService.ts +819 -553
  239. package/src/services/utils.test.ts +371 -430
  240. package/src/services/utils.ts +173 -162
  241. package/src/types/enums.ts +322 -239
  242. package/src/types/index.ts +385 -312
  243. package/tsconfig.esm.json +8 -8
  244. package/tsconfig.json +22 -22
  245. package/umd/index.js +0 -34103
@@ -1,861 +1,1173 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
25
- var __importDefault = (this && this.__importDefault) || function (mod) {
26
- return (mod && mod.__esModule) ? mod : { "default": mod };
27
- };
28
- Object.defineProperty(exports, "__esModule", { value: true });
29
- exports.parseStrategiesAutomatedPosition = void 0;
30
- const tokens_1 = require("@defisaver/tokens");
31
- const lodash_1 = require("lodash");
32
- const web3_1 = __importDefault(require("web3"));
33
- const constants_1 = require("../constants");
34
- const enums_1 = require("../types/enums");
35
- const utils_1 = require("./utils");
36
- const subDataService = __importStar(require("./subDataService"));
37
- const triggerService = __importStar(require("./triggerService"));
38
- const web3 = new web3_1.default();
39
- const SPARK_MARKET_ADDRESSES = {
40
- [enums_1.ChainId.Ethereum]: '0x02C3eA4e34C0cBd694D2adFa2c690EECbC1793eE',
41
- };
42
- const AAVE_V3_MARKET_ADDRESSES = {
43
- [enums_1.ChainId.Ethereum]: '0x2f39d218133AFaB8F2B819B1066c7E434Ad94E9e',
44
- [enums_1.ChainId.Optimism]: '0xa97684ead0e402dC232d5A977953DF7ECBaB3CDb',
45
- [enums_1.ChainId.Arbitrum]: '0xa97684ead0e402dC232d5A977953DF7ECBaB3CDb',
46
- [enums_1.ChainId.Base]: '0xe20fCBdBfFC4Dd138cE8b2E6FBb6CB49777ad64D',
47
- };
48
- function parseMakerSavingsLiqProtection(position, parseData) {
49
- const _position = (0, lodash_1.cloneDeep)(position);
50
- const { subStruct } = parseData.subscriptionEventData;
51
- const triggerData = triggerService.makerRatioTrigger.decode(subStruct.triggerData);
52
- const subData = subDataService.makerRepayFromSavingsSubData.decode(subStruct.subData);
53
- _position.strategyData.decoded.triggerData = triggerData;
54
- _position.strategyData.decoded.subData = subData;
55
- _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, subData.vaultId);
56
- _position.specific = {
57
- triggerRepayRatio: Number(triggerData.ratio),
58
- targetRepayRatio: Number(subData.targetRatio),
59
- repayEnabled: true,
60
- boostEnabled: false,
61
- };
62
- return _position;
63
- }
64
- function parseMakerCloseOnPrice(position, parseData) {
65
- const _position = (0, lodash_1.cloneDeep)(position);
66
- const { subStruct } = parseData.subscriptionEventData;
67
- const triggerData = triggerService.chainlinkPriceTrigger.decode(subStruct.triggerData);
68
- const subData = subDataService.makerCloseSubData.decode(subStruct.subData);
69
- _position.strategyData.decoded.triggerData = triggerData;
70
- _position.strategyData.decoded.subData = subData;
71
- _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, subData.vaultId);
72
- const isTakeProfit = (0, utils_1.isRatioStateOver)(Number(triggerData.state));
73
- _position.strategy.strategyId = isTakeProfit ? enums_1.Strategies.IdOverrides.TakeProfit : enums_1.Strategies.IdOverrides.StopLoss;
74
- _position.specific = {
75
- price: triggerData.price,
76
- closeToAssetAddr: subData.closeToAssetAddr,
77
- };
78
- return _position;
79
- }
80
- function parseMakerTrailingStop(position, parseData) {
81
- const _position = (0, lodash_1.cloneDeep)(position);
82
- const { subStruct } = parseData.subscriptionEventData;
83
- const triggerData = triggerService.trailingStopTrigger.decode(subStruct.triggerData);
84
- const subData = subDataService.makerCloseSubData.decode(subStruct.subData);
85
- _position.strategyData.decoded.triggerData = triggerData;
86
- _position.strategyData.decoded.subData = subData;
87
- _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, subData.vaultId);
88
- _position.strategy.strategyId = enums_1.Strategies.IdOverrides.TrailingStop;
89
- _position.specific = {
90
- triggerPercentage: Number(triggerData.triggerPercentage),
91
- roundId: Number(triggerData.roundId),
92
- closeToAssetAddr: subData.closeToAssetAddr,
93
- };
94
- return _position;
95
- }
96
- function parseMakerLeverageManagement(position, parseData) {
97
- const _position = (0, lodash_1.cloneDeep)(position);
98
- const { subStruct, subId } = parseData.subscriptionEventData;
99
- const { isEnabled } = parseData.strategiesSubsData;
100
- const triggerData = triggerService.makerRatioTrigger.decode(subStruct.triggerData);
101
- const subData = subDataService.makerLeverageManagementSubData.decode(subStruct.subData);
102
- _position.strategyData.decoded.triggerData = triggerData;
103
- _position.strategyData.decoded.subData = subData;
104
- _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, subData.vaultId);
105
- const isRepay = _position.strategy.strategyId === enums_1.Strategies.Identifiers.Repay;
106
- if (isRepay) {
107
- _position.specific = {
108
- triggerRepayRatio: triggerData.ratio,
109
- targetRepayRatio: subData.targetRatio,
110
- repayEnabled: true,
111
- subId1: Number(subId),
112
- mergeWithId: enums_1.Strategies.Identifiers.Boost,
113
- };
114
- }
115
- else {
116
- _position.specific = {
117
- triggerBoostRatio: triggerData.ratio,
118
- targetBoostRatio: subData.targetRatio,
119
- boostEnabled: isEnabled,
120
- subId2: Number(subId),
121
- mergeId: enums_1.Strategies.Identifiers.Boost,
122
- };
123
- }
124
- _position.strategy.strategyId = enums_1.Strategies.IdOverrides.LeverageManagement;
125
- return _position;
126
- }
127
- function parseLiquityCloseOnPrice(position, parseData) {
128
- const _position = (0, lodash_1.cloneDeep)(position);
129
- const { subStruct } = parseData.subscriptionEventData;
130
- const triggerData = triggerService.chainlinkPriceTrigger.decode(subStruct.triggerData);
131
- const subData = subDataService.liquityCloseSubData.decode(subStruct.subData);
132
- _position.strategyData.decoded.triggerData = triggerData;
133
- _position.strategyData.decoded.subData = subData;
134
- _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner);
135
- const isTakeProfit = (0, utils_1.isRatioStateOver)(Number(triggerData.state));
136
- _position.strategy.strategyId = isTakeProfit ? enums_1.Strategies.IdOverrides.TakeProfit : enums_1.Strategies.IdOverrides.StopLoss;
137
- _position.specific = {
138
- price: triggerData.price,
139
- closeToAssetAddr: subData.closeToAssetAddr,
140
- };
141
- return _position;
142
- }
143
- function parseLiquityTrailingStop(position, parseData) {
144
- const _position = (0, lodash_1.cloneDeep)(position);
145
- const { subStruct } = parseData.subscriptionEventData;
146
- const triggerData = triggerService.trailingStopTrigger.decode(subStruct.triggerData);
147
- const subData = subDataService.liquityCloseSubData.decode(subStruct.subData);
148
- _position.strategyData.decoded.triggerData = triggerData;
149
- _position.strategyData.decoded.subData = subData;
150
- _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner);
151
- _position.strategy.strategyId = enums_1.Strategies.IdOverrides.TrailingStop;
152
- _position.specific = {
153
- triggerPercentage: Number(triggerData.triggerPercentage),
154
- roundId: Number(triggerData.roundId),
155
- closeToAssetAddr: subData.closeToAssetAddr,
156
- };
157
- return _position;
158
- }
159
- function parseAaveV2LeverageManagement(position, parseData) {
160
- const _position = (0, lodash_1.cloneDeep)(position);
161
- const { subStruct, subId } = parseData.subscriptionEventData;
162
- const { isEnabled } = parseData.strategiesSubsData;
163
- const triggerData = triggerService.aaveV2RatioTrigger.decode(subStruct.triggerData);
164
- const subData = subDataService.aaveV2LeverageManagementSubData.decode(subStruct.subData);
165
- _position.strategyData.decoded.triggerData = triggerData;
166
- _position.strategyData.decoded.subData = subData;
167
- _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner, triggerData.market);
168
- const isRepay = _position.strategy.strategyId === enums_1.Strategies.Identifiers.Repay;
169
- if (isRepay) {
170
- _position.specific = {
171
- triggerRepayRatio: triggerData.ratio,
172
- targetRepayRatio: subData.targetRatio,
173
- repayEnabled: true,
174
- subId1: Number(subId),
175
- mergeWithId: enums_1.Strategies.Identifiers.Boost,
176
- };
177
- }
178
- else {
179
- _position.specific = {
180
- triggerBoostRatio: triggerData.ratio,
181
- targetBoostRatio: subData.targetRatio,
182
- boostEnabled: isEnabled,
183
- subId2: Number(subId),
184
- mergeId: enums_1.Strategies.Identifiers.Boost,
185
- };
186
- }
187
- _position.strategy.strategyId = enums_1.Strategies.IdOverrides.LeverageManagement;
188
- return _position;
189
- }
190
- function parseAaveV3LeverageManagement(position, parseData) {
191
- const _position = (0, lodash_1.cloneDeep)(position);
192
- const { subStruct, subId } = parseData.subscriptionEventData;
193
- const { isEnabled } = parseData.strategiesSubsData;
194
- const triggerData = triggerService.aaveV3RatioTrigger.decode(subStruct.triggerData);
195
- const subData = subDataService.aaveV3LeverageManagementSubData.decode(subStruct.subData);
196
- _position.strategyData.decoded.triggerData = triggerData;
197
- _position.strategyData.decoded.subData = subData;
198
- _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner, triggerData.market);
199
- const isRepay = _position.strategy.strategyId === enums_1.Strategies.Identifiers.Repay;
200
- if (isRepay) {
201
- _position.specific = {
202
- triggerRepayRatio: triggerData.ratio,
203
- targetRepayRatio: subData.targetRatio,
204
- repayEnabled: true,
205
- subId1: Number(subId),
206
- mergeWithId: enums_1.Strategies.Identifiers.Boost,
207
- };
208
- }
209
- else {
210
- _position.specific = {
211
- triggerBoostRatio: triggerData.ratio,
212
- targetBoostRatio: subData.targetRatio,
213
- boostEnabled: isEnabled,
214
- subId2: Number(subId),
215
- mergeId: enums_1.Strategies.Identifiers.Boost,
216
- };
217
- }
218
- _position.strategy.strategyId = enums_1.Strategies.IdOverrides.LeverageManagement;
219
- return _position;
220
- }
221
- function parseMorphoAaveV2LeverageManagement(position, parseData) {
222
- const _position = (0, lodash_1.cloneDeep)(position);
223
- const { subStruct, subId } = parseData.subscriptionEventData;
224
- const { isEnabled } = parseData.strategiesSubsData;
225
- const triggerData = triggerService.morphoAaveV2RatioTrigger.decode(subStruct.triggerData);
226
- const subData = subDataService.morphoAaveV2LeverageManagementSubData.decode(subStruct.subData);
227
- _position.strategyData.decoded.triggerData = triggerData;
228
- _position.strategyData.decoded.subData = subData;
229
- _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner);
230
- const isRepay = _position.strategy.strategyId === enums_1.Strategies.Identifiers.Repay;
231
- if (isRepay) {
232
- _position.specific = {
233
- triggerRepayRatio: triggerData.ratio,
234
- targetRepayRatio: subData.targetRatio,
235
- repayEnabled: true,
236
- subId1: Number(subId),
237
- mergeWithId: enums_1.Strategies.Identifiers.Boost,
238
- };
239
- }
240
- else {
241
- _position.specific = {
242
- triggerBoostRatio: triggerData.ratio,
243
- targetBoostRatio: subData.targetRatio,
244
- boostEnabled: isEnabled,
245
- subId2: Number(subId),
246
- mergeId: enums_1.Strategies.Identifiers.Boost,
247
- };
248
- }
249
- _position.strategy.strategyId = enums_1.Strategies.IdOverrides.LeverageManagement;
250
- return _position;
251
- }
252
- function parseAaveV3CloseOnPrice(position, parseData) {
253
- const _position = (0, lodash_1.cloneDeep)(position);
254
- const { subStruct } = parseData.subscriptionEventData;
255
- const triggerData = triggerService.aaveV3QuotePriceTrigger.decode(subStruct.triggerData);
256
- const subData = subDataService.aaveV3QuotePriceSubData.decode(subStruct.subData);
257
- _position.strategyData.decoded.triggerData = triggerData;
258
- _position.strategyData.decoded.subData = subData;
259
- _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner, AAVE_V3_MARKET_ADDRESSES[_position.chainId]);
260
- _position.specific = {
261
- collAsset: subData.collAsset,
262
- collAssetId: subData.collAssetId,
263
- debtAsset: subData.debtAsset,
264
- debtAssetId: subData.debtAssetId,
265
- baseToken: triggerData.baseTokenAddress,
266
- quoteToken: triggerData.quoteTokenAddress,
267
- price: triggerData.price,
268
- ratioState: triggerData.ratioState,
269
- };
270
- const { ratioState } = (0, utils_1.getRatioStateInfoForAaveCloseStrategy)(_position.specific.ratioState, (0, utils_1.wethToEthByAddress)(_position.specific.collAsset, parseData.chainId), (0, utils_1.wethToEthByAddress)(_position.specific.debtAsset, parseData.chainId), parseData.chainId);
271
- _position.strategy.strategyId = (0, utils_1.isRatioStateOver)(ratioState) ? enums_1.Strategies.IdOverrides.TakeProfit : enums_1.Strategies.IdOverrides.StopLoss;
272
- return _position;
273
- }
274
- function parseAaveV3CloseOnPriceWithMaximumGasPrice(position, parseData) {
275
- const _position = (0, lodash_1.cloneDeep)(position);
276
- const { subStruct } = parseData.subscriptionEventData;
277
- const triggerData = triggerService.aaveV3QuotePriceWithMaximumGasPriceTrigger.decode(subStruct.triggerData);
278
- const subData = subDataService.aaveV3QuotePriceSubData.decode(subStruct.subData);
279
- _position.strategyData.decoded.triggerData = triggerData;
280
- _position.strategyData.decoded.subData = subData;
281
- _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner, AAVE_V3_MARKET_ADDRESSES[_position.chainId]);
282
- _position.specific = {
283
- collAsset: subData.collAsset,
284
- collAssetId: subData.collAssetId,
285
- debtAsset: subData.debtAsset,
286
- debtAssetId: subData.debtAssetId,
287
- baseToken: triggerData.baseTokenAddress,
288
- quoteToken: triggerData.quoteTokenAddress,
289
- price: triggerData.price,
290
- maximumGasPrice: triggerData.maximumGasPrice,
291
- ratioState: triggerData.ratioState,
292
- };
293
- const { ratioState } = (0, utils_1.getRatioStateInfoForAaveCloseStrategy)(_position.specific.ratioState, (0, utils_1.wethToEthByAddress)(_position.specific.collAsset, parseData.chainId), (0, utils_1.wethToEthByAddress)(_position.specific.debtAsset, parseData.chainId), parseData.chainId);
294
- _position.strategy.strategyId = (0, utils_1.isRatioStateOver)(ratioState)
295
- ? enums_1.Strategies.IdOverrides.TakeProfitWithGasPrice
296
- : enums_1.Strategies.IdOverrides.StopLossWithGasPrice;
297
- return _position;
298
- }
299
- function parseCompoundV2LeverageManagement(position, parseData) {
300
- const _position = (0, lodash_1.cloneDeep)(position);
301
- const { subStruct, subId } = parseData.subscriptionEventData;
302
- const { isEnabled } = parseData.strategiesSubsData;
303
- const triggerData = triggerService.compoundV2RatioTrigger.decode(subStruct.triggerData);
304
- const subData = subDataService.compoundV2LeverageManagementSubData.decode(subStruct.subData);
305
- _position.strategyData.decoded.triggerData = triggerData;
306
- _position.strategyData.decoded.subData = subData;
307
- _position.owner = triggerData.owner.toLowerCase();
308
- _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner);
309
- const isRepay = [enums_1.Strategies.Identifiers.Repay, enums_1.Strategies.Identifiers.EoaRepay].includes(_position.strategy.strategyId);
310
- if (isRepay) {
311
- _position.specific = {
312
- triggerRepayRatio: triggerData.ratio,
313
- targetRepayRatio: subData.targetRatio,
314
- repayEnabled: true,
315
- subId1: Number(subId),
316
- mergeWithId: enums_1.Strategies.Identifiers.Boost,
317
- };
318
- }
319
- else {
320
- _position.specific = {
321
- triggerBoostRatio: triggerData.ratio,
322
- targetBoostRatio: subData.targetRatio,
323
- boostEnabled: isEnabled,
324
- subId2: Number(subId),
325
- mergeId: enums_1.Strategies.Identifiers.Boost,
326
- };
327
- }
328
- _position.strategy.strategyId = enums_1.Strategies.IdOverrides.LeverageManagement;
329
- return _position;
330
- }
331
- function parseCompoundV3LeverageManagement(position, parseData) {
332
- const _position = (0, lodash_1.cloneDeep)(position);
333
- const { subStruct, subId } = parseData.subscriptionEventData;
334
- const { isEnabled } = parseData.strategiesSubsData;
335
- const subDataDecoder = position.chainId !== 1
336
- ? subDataService.compoundV3L2LeverageManagementSubData
337
- : subDataService.compoundV3LeverageManagementSubData;
338
- const triggerData = triggerService.compoundV3RatioTrigger.decode(subStruct.triggerData);
339
- const subData = subDataDecoder.decode(subStruct.subData);
340
- _position.strategyData.decoded.triggerData = triggerData;
341
- _position.strategyData.decoded.subData = subData;
342
- _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, triggerData.owner.toLowerCase(), triggerData.market);
343
- const isRepay = [enums_1.Strategies.Identifiers.Repay, enums_1.Strategies.Identifiers.EoaRepay].includes(_position.strategy.strategyId);
344
- if (isRepay) {
345
- _position.specific = {
346
- triggerRepayRatio: triggerData.ratio,
347
- targetRepayRatio: subData.targetRatio,
348
- repayEnabled: true,
349
- subId1: Number(subId),
350
- mergeWithId: enums_1.Strategies.Identifiers.Boost,
351
- };
352
- }
353
- else {
354
- _position.specific = {
355
- triggerBoostRatio: triggerData.ratio,
356
- targetBoostRatio: subData.targetRatio,
357
- boostEnabled: isEnabled,
358
- subId2: Number(subId),
359
- mergeId: enums_1.Strategies.Identifiers.Boost,
360
- };
361
- }
362
- const isEOA = _position.strategy.strategyId.includes('eoa');
363
- _position.strategy.strategyId = isEOA ? enums_1.Strategies.IdOverrides.EoaLeverageManagement : enums_1.Strategies.IdOverrides.LeverageManagement;
364
- return _position;
365
- }
366
- function parseChickenBondsRebond(position, parseData) {
367
- const _position = (0, lodash_1.cloneDeep)(position);
368
- const { subStruct } = parseData.subscriptionEventData;
369
- _position.strategyData.decoded.triggerData = triggerService.cBondsRebondTrigger.decode(subStruct.triggerData);
370
- _position.strategyData.decoded.subData = subDataService.cBondsRebondSubData.decode(subStruct.subData);
371
- _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.strategyData.decoded.triggerData.bondId);
372
- return _position;
373
- }
374
- function parseLiquityBondProtection(position, parseData) {
375
- const _position = (0, lodash_1.cloneDeep)(position);
376
- const { subStruct } = parseData.subscriptionEventData;
377
- const triggerData = triggerService.liquityRatioTrigger.decode(subStruct.triggerData);
378
- _position.strategyData.decoded.triggerData = triggerData;
379
- _position.strategyData.decoded.subData = subDataService.liquityPaybackUsingChickenBondSubData.decode(subStruct.subData);
380
- _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner);
381
- _position.specific = {
382
- triggerRepayRatio: Number(triggerData.ratio),
383
- targetRepayRatio: Infinity,
384
- repayEnabled: true,
385
- };
386
- return _position;
387
- }
388
- function parseExchangeDca(position, parseData, chainId) {
389
- const _position = (0, lodash_1.cloneDeep)(position);
390
- const { subStruct } = parseData.subscriptionEventData;
391
- _position.strategyData.decoded.triggerData = triggerService.exchangeTimestampTrigger.decode(subStruct.triggerData);
392
- _position.strategyData.decoded.subData = subDataService.exchangeDcaSubData.decode(subStruct.subData, chainId);
393
- _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner, Math.random());
394
- return _position;
395
- }
396
- function parseExchangeLimitOrder(position, parseData, chainId) {
397
- const _position = (0, lodash_1.cloneDeep)(position);
398
- const { subStruct } = parseData.subscriptionEventData;
399
- _position.strategyData.decoded.subData = subDataService.exchangeLimitOrderSubData.decode(subStruct.subData, chainId);
400
- const fromTokenDecimals = (0, tokens_1.getAssetInfoByAddress)(_position.strategyData.decoded.subData.fromToken, chainId).decimals;
401
- const toTokenDecimals = (0, tokens_1.getAssetInfoByAddress)(_position.strategyData.decoded.subData.toToken, chainId).decimals;
402
- _position.strategyData.decoded.triggerData = triggerService.exchangeOffchainPriceTrigger.decode(subStruct.triggerData, fromTokenDecimals, toTokenDecimals);
403
- _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner, Math.random());
404
- return _position;
405
- }
406
- function parseLiquityLeverageManagement(position, parseData) {
407
- const _position = (0, lodash_1.cloneDeep)(position);
408
- const { subStruct, subId } = parseData.subscriptionEventData;
409
- const { isEnabled } = parseData.strategiesSubsData;
410
- const triggerData = triggerService.liquityRatioTrigger.decode(subStruct.triggerData);
411
- const subData = subDataService.liquityLeverageManagementSubData.decode(subStruct.subData);
412
- _position.strategyData.decoded.triggerData = triggerData;
413
- _position.strategyData.decoded.subData = subData;
414
- _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner);
415
- const isRepay = _position.strategy.strategyId === enums_1.Strategies.Identifiers.Repay;
416
- if (isRepay) {
417
- _position.specific = {
418
- triggerRepayRatio: triggerData.ratio,
419
- targetRepayRatio: subData.targetRatio,
420
- repayEnabled: true,
421
- subId1: Number(subId),
422
- mergeWithId: enums_1.Strategies.Identifiers.Boost,
423
- };
424
- }
425
- else {
426
- _position.specific = {
427
- triggerBoostRatio: triggerData.ratio,
428
- targetBoostRatio: subData.targetRatio,
429
- boostEnabled: isEnabled,
430
- subId2: Number(subId),
431
- mergeId: enums_1.Strategies.Identifiers.Boost,
432
- };
433
- }
434
- _position.strategy.strategyId = enums_1.Strategies.IdOverrides.LeverageManagement;
435
- return _position;
436
- }
437
- function parseLiquityV2LeverageManagement(position, parseData) {
438
- const _position = (0, lodash_1.cloneDeep)(position);
439
- const { subStruct, subId, subHash } = parseData.subscriptionEventData;
440
- const { isEnabled } = parseData.strategiesSubsData;
441
- const triggerData = triggerService.liquityV2RatioTrigger.decode(subStruct.triggerData);
442
- const subData = subDataService.liquityV2LeverageManagementSubData.decode(subStruct.subData);
443
- _position.strategyData.decoded.triggerData = triggerData;
444
- _position.strategyData.decoded.subData = subData;
445
- _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner, triggerData.troveId, triggerData.market);
446
- const isRepay = _position.strategy.strategyId === enums_1.Strategies.Identifiers.Repay;
447
- if (isRepay) {
448
- _position.specific = {
449
- triggerRepayRatio: triggerData.ratio,
450
- targetRepayRatio: subData.targetRatio,
451
- repayEnabled: isEnabled,
452
- subId1: Number(subId),
453
- subHashRepay: subHash,
454
- mergeWithId: enums_1.Strategies.Identifiers.Boost,
455
- };
456
- }
457
- else {
458
- _position.specific = {
459
- triggerBoostRatio: triggerData.ratio,
460
- targetBoostRatio: subData.targetRatio,
461
- boostEnabled: isEnabled,
462
- subId2: Number(subId),
463
- subHashBoost: subHash,
464
- mergeId: enums_1.Strategies.Identifiers.Boost,
465
- };
466
- }
467
- _position.strategy.strategyId = enums_1.Strategies.IdOverrides.LeverageManagement;
468
- return _position;
469
- }
470
- function parseSparkLeverageManagement(position, parseData) {
471
- const _position = (0, lodash_1.cloneDeep)(position);
472
- const { subStruct, subId } = parseData.subscriptionEventData;
473
- const { isEnabled } = parseData.strategiesSubsData;
474
- const triggerData = triggerService.sparkRatioTrigger.decode(subStruct.triggerData);
475
- const subData = subDataService.sparkLeverageManagementSubData.decode(subStruct.subData);
476
- _position.strategyData.decoded.triggerData = triggerData;
477
- _position.strategyData.decoded.subData = subData;
478
- _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner, triggerData.market);
479
- const isRepay = _position.strategy.strategyId === enums_1.Strategies.Identifiers.Repay;
480
- if (isRepay) {
481
- _position.specific = {
482
- triggerRepayRatio: triggerData.ratio,
483
- targetRepayRatio: subData.targetRatio,
484
- repayEnabled: true,
485
- subId1: Number(subId),
486
- mergeWithId: enums_1.Strategies.Identifiers.Boost,
487
- };
488
- }
489
- else {
490
- _position.specific = {
491
- triggerBoostRatio: triggerData.ratio,
492
- targetBoostRatio: subData.targetRatio,
493
- boostEnabled: isEnabled,
494
- subId2: Number(subId),
495
- mergeId: enums_1.Strategies.Identifiers.Boost,
496
- };
497
- }
498
- _position.strategy.strategyId = enums_1.Strategies.IdOverrides.LeverageManagement;
499
- return _position;
500
- }
501
- function parseSparkCloseOnPrice(position, parseData) {
502
- const _position = (0, lodash_1.cloneDeep)(position);
503
- const { subStruct } = parseData.subscriptionEventData;
504
- const triggerData = triggerService.sparkQuotePriceTrigger.decode(subStruct.triggerData);
505
- const subData = subDataService.sparkQuotePriceSubData.decode(subStruct.subData);
506
- _position.strategyData.decoded.triggerData = triggerData;
507
- _position.strategyData.decoded.subData = subData;
508
- _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner, SPARK_MARKET_ADDRESSES[_position.chainId]);
509
- _position.specific = {
510
- collAsset: subData.collAsset,
511
- collAssetId: subData.collAssetId,
512
- debtAsset: subData.debtAsset,
513
- debtAssetId: subData.debtAssetId,
514
- baseToken: triggerData.baseTokenAddress,
515
- quoteToken: triggerData.quoteTokenAddress,
516
- price: triggerData.price,
517
- ratioState: triggerData.ratioState,
518
- };
519
- const { ratioState } = (0, utils_1.getRatioStateInfoForAaveCloseStrategy)(_position.specific.ratioState, (0, utils_1.wethToEthByAddress)(_position.specific.collAsset, parseData.chainId), (0, utils_1.wethToEthByAddress)(_position.specific.debtAsset, parseData.chainId), parseData.chainId);
520
- _position.strategy.strategyId = (0, utils_1.isRatioStateOver)(ratioState) ? enums_1.Strategies.IdOverrides.TakeProfit : enums_1.Strategies.IdOverrides.StopLoss;
521
- return _position;
522
- }
523
- function parseLiquitySavingsLiqProtection(position, parseData) {
524
- const _position = (0, lodash_1.cloneDeep)(position);
525
- const { subStruct } = parseData.subscriptionEventData;
526
- const triggerData = triggerService.liquityRatioTrigger.decode(subStruct.triggerData);
527
- const subData = subDataService.liquityRepayFromSavingsSubData.decode(subStruct.subData);
528
- _position.strategyData.decoded.triggerData = triggerData;
529
- _position.strategyData.decoded.subData = subData;
530
- _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner);
531
- _position.specific = {
532
- triggerRepayRatio: triggerData.ratio,
533
- targetRepayRatio: subData.targetRatio,
534
- repayEnabled: true,
535
- boostEnabled: false,
536
- };
537
- return _position;
538
- }
539
- function parseLiquityDebtInFrontRepay(position, parseData) {
540
- const _position = (0, lodash_1.cloneDeep)(position);
541
- const { subStruct } = parseData.subscriptionEventData;
542
- const triggerData = triggerService.liquityDebtInFrontWithLimitTrigger.decode(subStruct.triggerData);
543
- const subData = subDataService.liquityDebtInFrontRepaySubData.decode(subStruct.subData);
544
- _position.strategyData.decoded.triggerData = triggerData;
545
- _position.strategyData.decoded.subData = subData;
546
- _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner);
547
- _position.specific = {
548
- debtInFrontMin: triggerData.debtInFrontMin,
549
- targetRepayRatioIncrease: subData.targetRatioIncrease,
550
- };
551
- return _position;
552
- }
553
- function parseCrvUSDLeverageManagement(position, parseData) {
554
- const _position = (0, lodash_1.cloneDeep)(position);
555
- const { subStruct, subId, subHash } = parseData.subscriptionEventData;
556
- const { isEnabled } = parseData.strategiesSubsData;
557
- const triggerData = triggerService.crvUSDRatioTrigger.decode(subStruct.triggerData);
558
- const subData = subDataService.crvUSDLeverageManagementSubData.decode(subStruct.subData);
559
- _position.strategyData.decoded.triggerData = triggerData;
560
- _position.strategyData.decoded.subData = subData;
561
- _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner, triggerData.controller);
562
- const isRepay = _position.strategy.strategyId === enums_1.Strategies.Identifiers.Repay;
563
- if (isRepay) {
564
- _position.specific = {
565
- triggerRepayRatio: triggerData.ratio,
566
- targetRepayRatio: subData.targetRatio,
567
- repayEnabled: isEnabled,
568
- subId1: Number(subId),
569
- subHashRepay: subHash,
570
- mergeWithId: enums_1.Strategies.Identifiers.Boost,
571
- };
572
- }
573
- else {
574
- _position.specific = {
575
- triggerBoostRatio: triggerData.ratio,
576
- targetBoostRatio: subData.targetRatio,
577
- boostEnabled: isEnabled,
578
- subId2: Number(subId),
579
- subHashBoost: subHash,
580
- mergeId: enums_1.Strategies.Identifiers.Boost,
581
- };
582
- }
583
- _position.strategy.strategyId = enums_1.Strategies.IdOverrides.LeverageManagement;
584
- return _position;
585
- }
586
- function parseCrvUSDPayback(position, parseData) {
587
- const _position = (0, lodash_1.cloneDeep)(position);
588
- const { subStruct } = parseData.subscriptionEventData;
589
- const triggerData = triggerService.crvUsdHealthRatioTrigger.decode(subStruct.triggerData);
590
- const subData = subDataService.crvUSDPaybackSubData.decode(subStruct.subData);
591
- _position.strategyData.decoded.triggerData = triggerData;
592
- _position.strategyData.decoded.subData = subData;
593
- _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner, triggerData.controller, Math.random());
594
- _position.strategy.strategyId = enums_1.Strategies.Identifiers.Payback;
595
- return _position;
596
- }
597
- function parseMorphoBlueLeverageManagement(position, parseData) {
598
- const _position = (0, lodash_1.cloneDeep)(position);
599
- const { subStruct, subId, subHash } = parseData.subscriptionEventData;
600
- const { isEnabled } = parseData.strategiesSubsData;
601
- const triggerData = triggerService.morphoBlueRatioTrigger.decode(subStruct.triggerData);
602
- const subData = subDataService.morphoBlueLeverageManagementSubData.decode(subStruct.subData);
603
- _position.strategyData.decoded.triggerData = triggerData;
604
- _position.strategyData.decoded.subData = subData;
605
- _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, triggerData.owner.toLowerCase(), triggerData.marketId);
606
- const isRepay = [enums_1.Strategies.Identifiers.Repay, enums_1.Strategies.Identifiers.EoaRepay].includes(_position.strategy.strategyId);
607
- if (isRepay) {
608
- _position.specific = {
609
- triggerRepayRatio: triggerData.ratio,
610
- targetRepayRatio: subData.targetRatio,
611
- repayEnabled: isEnabled,
612
- subId1: Number(subId),
613
- subHashRepay: subHash,
614
- mergeWithId: enums_1.Strategies.Identifiers.Boost,
615
- };
616
- }
617
- else {
618
- _position.specific = {
619
- triggerBoostRatio: triggerData.ratio,
620
- targetBoostRatio: subData.targetRatio,
621
- boostEnabled: isEnabled,
622
- subId2: Number(subId),
623
- subHashBoost: subHash,
624
- mergeId: enums_1.Strategies.Identifiers.Boost,
625
- };
626
- }
627
- const isEOA = _position.strategy.strategyId.includes('eoa');
628
- _position.strategy.strategyId = isEOA ? enums_1.Strategies.IdOverrides.EoaLeverageManagement : enums_1.Strategies.IdOverrides.LeverageManagement;
629
- return _position;
630
- }
631
- function parseMorphoBlueLeverageManagementOnPrice(position, parseData) {
632
- const _position = (0, lodash_1.cloneDeep)(position);
633
- const { subStruct } = parseData.subscriptionEventData;
634
- const triggerData = triggerService.morphoBluePriceTrigger.decode(subStruct.triggerData);
635
- const subData = subDataService.morphoBlueLeverageManagementOnPriceSubData.decode(subStruct.subData);
636
- _position.strategyData.decoded.triggerData = triggerData;
637
- _position.strategyData.decoded.subData = subData;
638
- _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner, Math.random());
639
- const marketIdEncodedData = web3.eth.abi.encodeParameters(['address', 'address', 'address', 'address', 'uint256'], [
640
- subData.loanToken,
641
- subData.collToken,
642
- subData.oracle,
643
- subData.irm,
644
- subData.lltv,
645
- ]);
646
- const marketId = web3.utils.keccak256(marketIdEncodedData);
647
- _position.specific = {
648
- subHash: _position.subHash,
649
- marketId,
650
- collAsset: subData.collToken,
651
- debtAsset: subData.loanToken,
652
- price: triggerData.price,
653
- ratio: subData.targetRatio,
654
- };
655
- return _position;
656
- }
657
- function parseAaveV3LeverageManagementOnPrice(position, parseData) {
658
- const _position = (0, lodash_1.cloneDeep)(position);
659
- const { subStruct } = parseData.subscriptionEventData;
660
- const triggerData = triggerService.aaveV3QuotePriceTrigger.decode(subStruct.triggerData);
661
- const subData = subDataService.aaveV3LeverageManagementOnPriceSubData.decode(subStruct.subData);
662
- _position.strategyData.decoded.triggerData = triggerData;
663
- _position.strategyData.decoded.subData = subData;
664
- _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner, Math.random());
665
- _position.specific = {
666
- collAsset: subData.collAsset,
667
- debtAsset: subData.debtAsset,
668
- baseToken: triggerData.baseTokenAddress,
669
- quoteToken: triggerData.quoteTokenAddress,
670
- price: triggerData.price,
671
- ratioState: triggerData.ratioState,
672
- debtAssetId: subData.debtAssetId,
673
- collAssetId: subData.collAssetId,
674
- ratio: subData.targetRatio,
675
- };
676
- return _position;
677
- }
678
- function parseLiquityV2CloseOnPrice(position, parseData) {
679
- const _position = (0, lodash_1.cloneDeep)(position);
680
- const { subStruct } = parseData.subscriptionEventData;
681
- const triggerData = triggerService.closePriceTrigger.decode(subStruct.triggerData);
682
- const subData = subDataService.liquityV2CloseSubData.decode(subStruct.subData);
683
- _position.strategyData.decoded.triggerData = triggerData;
684
- _position.strategyData.decoded.subData = subData;
685
- _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner, subData.troveId, subData.market);
686
- const { takeProfitType, stopLossType } = (0, utils_1.getStopLossAndTakeProfitTypeByCloseStrategyType)(+subData.closeType);
687
- // User can have:
688
- // - Only TakeProfit
689
- // - Only StopLoss
690
- // - Both
691
- // TODO: see on frontend what specific data we need here because stop-loss and take-profit is one bundle now
692
- _position.strategy.strategyId = enums_1.Strategies.Identifiers.CloseOnPrice;
693
- _position.specific = {
694
- market: subData.market,
695
- troveId: subData.troveId,
696
- stopLossPrice: triggerData.lowerPrice,
697
- takeProfitPrice: triggerData.upperPrice,
698
- closeToAssetAddr: triggerData.tokenAddr,
699
- takeProfitType,
700
- stopLossType,
701
- };
702
- return _position;
703
- }
704
- function parseLiquityV2LeverageManagementOnPrice(position, parseData) {
705
- const _position = (0, lodash_1.cloneDeep)(position);
706
- const { subStruct } = parseData.subscriptionEventData;
707
- const triggerData = triggerService.liquityV2QuotePriceTrigger.decode(subStruct.triggerData);
708
- const subData = subDataService.liquityV2LeverageManagementOnPriceSubData.decode(subStruct.subData);
709
- _position.strategyData.decoded.triggerData = triggerData;
710
- _position.strategyData.decoded.subData = subData;
711
- _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner, Math.random());
712
- _position.specific = {
713
- subHash: _position.subHash,
714
- market: subData.market,
715
- troveId: subData.troveId,
716
- collAsset: subData.collToken,
717
- debtAsset: subData.boldToken,
718
- price: triggerData.price,
719
- ratio: subData.targetRatio,
720
- ratioState: triggerData.ratioState,
721
- };
722
- return _position;
723
- }
724
- function parseLiquityV2Payback(position, parseData) {
725
- const _position = (0, lodash_1.cloneDeep)(position);
726
- const { subStruct } = parseData.subscriptionEventData;
727
- const triggerData = triggerService.liquityV2RatioTrigger.decode(subStruct.triggerData);
728
- const subData = subDataService.liquityV2PaybackSubData.decode(subStruct.subData);
729
- _position.strategyData.decoded.triggerData = triggerData;
730
- _position.strategyData.decoded.subData = subData;
731
- _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner, triggerData.troveId, triggerData.market);
732
- _position.strategy.strategyId = enums_1.Strategies.Identifiers.Payback;
733
- _position.specific = {
734
- subHash: _position.subHash,
735
- market: subData.market,
736
- troveId: subData.troveId,
737
- targetRatio: subData.targetRatio,
738
- triggerRatio: triggerData.ratio,
739
- };
740
- return _position;
741
- }
742
- const parsingMethodsMapping = {
743
- [enums_1.ProtocolIdentifiers.StrategiesAutomation.MakerDAO]: {
744
- [enums_1.Strategies.Identifiers.SavingsLiqProtection]: parseMakerSavingsLiqProtection,
745
- [enums_1.Strategies.Identifiers.CloseOnPriceToDebt]: parseMakerCloseOnPrice,
746
- [enums_1.Strategies.Identifiers.CloseOnPriceToColl]: parseMakerCloseOnPrice,
747
- [enums_1.Strategies.Identifiers.TrailingStopToColl]: parseMakerTrailingStop,
748
- [enums_1.Strategies.Identifiers.TrailingStopToDebt]: parseMakerTrailingStop,
749
- [enums_1.Strategies.Identifiers.Repay]: parseMakerLeverageManagement,
750
- [enums_1.Strategies.Identifiers.Boost]: parseMakerLeverageManagement,
751
- },
752
- [enums_1.ProtocolIdentifiers.StrategiesAutomation.Liquity]: {
753
- [enums_1.Strategies.Identifiers.CloseOnPriceToColl]: parseLiquityCloseOnPrice,
754
- [enums_1.Strategies.Identifiers.TrailingStopToColl]: parseLiquityTrailingStop,
755
- [enums_1.Strategies.Identifiers.BondProtection]: parseLiquityBondProtection,
756
- [enums_1.Strategies.Identifiers.Repay]: parseLiquityLeverageManagement,
757
- [enums_1.Strategies.Identifiers.Boost]: parseLiquityLeverageManagement,
758
- [enums_1.Strategies.Identifiers.SavingsDsrPayback]: parseLiquitySavingsLiqProtection,
759
- [enums_1.Strategies.Identifiers.SavingsDsrSupply]: parseLiquitySavingsLiqProtection,
760
- [enums_1.Strategies.Identifiers.DebtInFrontRepay]: parseLiquityDebtInFrontRepay,
761
- },
762
- [enums_1.ProtocolIdentifiers.StrategiesAutomation.LiquityV2]: {
763
- [enums_1.Strategies.Identifiers.Repay]: parseLiquityV2LeverageManagement,
764
- [enums_1.Strategies.Identifiers.Boost]: parseLiquityV2LeverageManagement,
765
- [enums_1.Strategies.Identifiers.CloseOnPrice]: parseLiquityV2CloseOnPrice,
766
- [enums_1.Strategies.Identifiers.BoostOnPrice]: parseLiquityV2LeverageManagementOnPrice,
767
- [enums_1.Strategies.Identifiers.RepayOnPrice]: parseLiquityV2LeverageManagementOnPrice,
768
- [enums_1.Strategies.Identifiers.Payback]: parseLiquityV2Payback,
769
- },
770
- [enums_1.ProtocolIdentifiers.StrategiesAutomation.AaveV2]: {
771
- [enums_1.Strategies.Identifiers.Repay]: parseAaveV2LeverageManagement,
772
- [enums_1.Strategies.Identifiers.Boost]: parseAaveV2LeverageManagement,
773
- },
774
- [enums_1.ProtocolIdentifiers.StrategiesAutomation.AaveV3]: {
775
- [enums_1.Strategies.Identifiers.Repay]: parseAaveV3LeverageManagement,
776
- [enums_1.Strategies.Identifiers.Boost]: parseAaveV3LeverageManagement,
777
- [enums_1.Strategies.Identifiers.CloseToDebt]: parseAaveV3CloseOnPrice,
778
- [enums_1.Strategies.Identifiers.CloseToDebtWithGasPrice]: parseAaveV3CloseOnPriceWithMaximumGasPrice,
779
- [enums_1.Strategies.Identifiers.CloseToCollateral]: parseAaveV3CloseOnPrice,
780
- [enums_1.Strategies.Identifiers.CloseToCollateralWithGasPrice]: parseAaveV3CloseOnPriceWithMaximumGasPrice,
781
- [enums_1.Strategies.Identifiers.OpenOrderFromCollateral]: parseAaveV3LeverageManagementOnPrice,
782
- [enums_1.Strategies.Identifiers.RepayOnPrice]: parseAaveV3LeverageManagementOnPrice,
783
- },
784
- [enums_1.ProtocolIdentifiers.StrategiesAutomation.CompoundV2]: {
785
- [enums_1.Strategies.Identifiers.Repay]: parseCompoundV2LeverageManagement,
786
- [enums_1.Strategies.Identifiers.Boost]: parseCompoundV2LeverageManagement,
787
- },
788
- [enums_1.ProtocolIdentifiers.StrategiesAutomation.CompoundV3]: {
789
- [enums_1.Strategies.Identifiers.Repay]: parseCompoundV3LeverageManagement,
790
- [enums_1.Strategies.Identifiers.Boost]: parseCompoundV3LeverageManagement,
791
- [enums_1.Strategies.Identifiers.EoaRepay]: parseCompoundV3LeverageManagement,
792
- [enums_1.Strategies.Identifiers.EoaBoost]: parseCompoundV3LeverageManagement,
793
- },
794
- [enums_1.ProtocolIdentifiers.StrategiesAutomation.ChickenBonds]: {
795
- [enums_1.Strategies.Identifiers.Rebond]: parseChickenBondsRebond,
796
- },
797
- [enums_1.ProtocolIdentifiers.StrategiesAutomation.MorphoAaveV2]: {
798
- [enums_1.Strategies.Identifiers.Repay]: parseMorphoAaveV2LeverageManagement,
799
- [enums_1.Strategies.Identifiers.Boost]: parseMorphoAaveV2LeverageManagement,
800
- },
801
- [enums_1.ProtocolIdentifiers.StrategiesAutomation.Exchange]: {
802
- [enums_1.Strategies.Identifiers.Dca]: parseExchangeDca,
803
- [enums_1.Strategies.Identifiers.LimitOrder]: parseExchangeLimitOrder,
804
- },
805
- [enums_1.ProtocolIdentifiers.StrategiesAutomation.Spark]: {
806
- [enums_1.Strategies.Identifiers.Repay]: parseSparkLeverageManagement,
807
- [enums_1.Strategies.Identifiers.Boost]: parseSparkLeverageManagement,
808
- [enums_1.Strategies.Identifiers.CloseToDebt]: parseSparkCloseOnPrice,
809
- [enums_1.Strategies.Identifiers.CloseToCollateral]: parseSparkCloseOnPrice,
810
- },
811
- [enums_1.ProtocolIdentifiers.StrategiesAutomation.CrvUSD]: {
812
- [enums_1.Strategies.Identifiers.Repay]: parseCrvUSDLeverageManagement,
813
- [enums_1.Strategies.Identifiers.Boost]: parseCrvUSDLeverageManagement,
814
- [enums_1.Strategies.Identifiers.Payback]: parseCrvUSDPayback,
815
- },
816
- [enums_1.ProtocolIdentifiers.StrategiesAutomation.MorphoBlue]: {
817
- [enums_1.Strategies.Identifiers.Repay]: parseMorphoBlueLeverageManagement,
818
- [enums_1.Strategies.Identifiers.Boost]: parseMorphoBlueLeverageManagement,
819
- [enums_1.Strategies.Identifiers.EoaRepay]: parseMorphoBlueLeverageManagement,
820
- [enums_1.Strategies.Identifiers.EoaBoost]: parseMorphoBlueLeverageManagement,
821
- [enums_1.Strategies.Identifiers.BoostOnPrice]: parseMorphoBlueLeverageManagementOnPrice,
822
- },
823
- };
824
- function getParsingMethod(id, strategy) {
825
- return parsingMethodsMapping[id][strategy.strategyId];
826
- }
827
- function parseStrategiesAutomatedPosition(parseData) {
828
- const { chainId, blockNumber, subscriptionEventData, strategiesSubsData, } = parseData;
829
- const { subStruct, proxy, subId, subHash, } = subscriptionEventData;
830
- const { isEnabled } = strategiesSubsData;
831
- const id = subStruct.strategyOrBundleId;
832
- const strategyOrBundleInfo = (subStruct.isBundle
833
- ? constants_1.BUNDLES_INFO[chainId][id]
834
- : constants_1.STRATEGIES_INFO[chainId][id]);
835
- if (!strategyOrBundleInfo)
836
- return null;
837
- const position = {
838
- isEnabled,
839
- chainId,
840
- subHash,
841
- blockNumber,
842
- positionId: 'positionId parsing not implemented.',
843
- subId: Number(subId),
844
- owner: proxy.toLowerCase(),
845
- protocol: Object.assign({}, strategyOrBundleInfo.protocol),
846
- strategy: Object.assign({ isBundle: subStruct.isBundle }, strategyOrBundleInfo),
847
- strategyData: {
848
- encoded: {
849
- triggerData: subStruct.triggerData,
850
- subData: subStruct.subData,
851
- },
852
- decoded: {
853
- triggerData: null,
854
- subData: null,
855
- },
856
- },
857
- specific: {},
858
- };
859
- return getParsingMethod(position.protocol.id, position.strategy)(position, parseData, chainId);
860
- }
861
- exports.parseStrategiesAutomatedPosition = parseStrategiesAutomatedPosition;
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.parseStrategiesAutomatedPosition = void 0;
30
+ const tokens_1 = require("@defisaver/tokens");
31
+ const lodash_1 = require("lodash");
32
+ const web3_1 = __importDefault(require("web3"));
33
+ const constants_1 = require("../constants");
34
+ const enums_1 = require("../types/enums");
35
+ const utils_1 = require("./utils");
36
+ const subDataService = __importStar(require("./subDataService"));
37
+ const triggerService = __importStar(require("./triggerService"));
38
+ const web3 = new web3_1.default();
39
+ const AAVE_V3_MARKET_ADDRESSES = {
40
+ [enums_1.ChainId.Ethereum]: '0x2f39d218133AFaB8F2B819B1066c7E434Ad94E9e',
41
+ [enums_1.ChainId.Optimism]: '0xa97684ead0e402dC232d5A977953DF7ECBaB3CDb',
42
+ [enums_1.ChainId.Arbitrum]: '0xa97684ead0e402dC232d5A977953DF7ECBaB3CDb',
43
+ [enums_1.ChainId.Base]: '0xe20fCBdBfFC4Dd138cE8b2E6FBb6CB49777ad64D',
44
+ };
45
+ function parseMakerSavingsLiqProtection(position, parseData) {
46
+ const _position = (0, lodash_1.cloneDeep)(position);
47
+ const { subStruct } = parseData.subscriptionEventData;
48
+ const triggerData = triggerService.makerRatioTrigger.decode(subStruct.triggerData);
49
+ const subData = subDataService.makerRepayFromSavingsSubData.decode(subStruct.subData);
50
+ _position.strategyData.decoded.triggerData = triggerData;
51
+ _position.strategyData.decoded.subData = subData;
52
+ _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, subData.vaultId);
53
+ _position.specific = {
54
+ triggerRepayRatio: Number(triggerData.ratio),
55
+ targetRepayRatio: Number(subData.targetRatio),
56
+ repayEnabled: true,
57
+ boostEnabled: false,
58
+ };
59
+ return _position;
60
+ }
61
+ function parseMakerCloseOnPrice(position, parseData) {
62
+ const _position = (0, lodash_1.cloneDeep)(position);
63
+ const { subStruct } = parseData.subscriptionEventData;
64
+ const triggerData = triggerService.chainlinkPriceTrigger.decode(subStruct.triggerData);
65
+ const subData = subDataService.makerCloseSubData.decode(subStruct.subData);
66
+ _position.strategyData.decoded.triggerData = triggerData;
67
+ _position.strategyData.decoded.subData = subData;
68
+ _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, subData.vaultId);
69
+ const isTakeProfit = (0, utils_1.isRatioStateOver)(Number(triggerData.state));
70
+ _position.strategy.strategyId = isTakeProfit ? enums_1.Strategies.IdOverrides.TakeProfit : enums_1.Strategies.IdOverrides.StopLoss;
71
+ _position.specific = {
72
+ price: triggerData.price,
73
+ closeToAssetAddr: subData.closeToAssetAddr,
74
+ };
75
+ return _position;
76
+ }
77
+ function parseMakerTrailingStop(position, parseData) {
78
+ const _position = (0, lodash_1.cloneDeep)(position);
79
+ const { subStruct } = parseData.subscriptionEventData;
80
+ const triggerData = triggerService.trailingStopTrigger.decode(subStruct.triggerData);
81
+ const subData = subDataService.makerCloseSubData.decode(subStruct.subData);
82
+ _position.strategyData.decoded.triggerData = triggerData;
83
+ _position.strategyData.decoded.subData = subData;
84
+ _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, subData.vaultId);
85
+ _position.strategy.strategyId = enums_1.Strategies.IdOverrides.TrailingStop;
86
+ _position.specific = {
87
+ triggerPercentage: Number(triggerData.triggerPercentage),
88
+ roundId: Number(triggerData.roundId),
89
+ closeToAssetAddr: subData.closeToAssetAddr,
90
+ };
91
+ return _position;
92
+ }
93
+ function parseMakerLeverageManagement(position, parseData) {
94
+ const _position = (0, lodash_1.cloneDeep)(position);
95
+ const { subStruct, subId } = parseData.subscriptionEventData;
96
+ const { isEnabled } = parseData.strategiesSubsData;
97
+ const triggerData = triggerService.makerRatioTrigger.decode(subStruct.triggerData);
98
+ const subData = subDataService.makerLeverageManagementSubData.decode(subStruct.subData);
99
+ _position.strategyData.decoded.triggerData = triggerData;
100
+ _position.strategyData.decoded.subData = subData;
101
+ _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, subData.vaultId);
102
+ const isRepay = _position.strategy.strategyId === enums_1.Strategies.Identifiers.Repay;
103
+ if (isRepay) {
104
+ _position.specific = {
105
+ triggerRepayRatio: triggerData.ratio,
106
+ targetRepayRatio: subData.targetRatio,
107
+ repayEnabled: true,
108
+ subId1: Number(subId),
109
+ mergeWithId: enums_1.Strategies.Identifiers.Boost,
110
+ };
111
+ }
112
+ else {
113
+ _position.specific = {
114
+ triggerBoostRatio: triggerData.ratio,
115
+ targetBoostRatio: subData.targetRatio,
116
+ boostEnabled: isEnabled,
117
+ subId2: Number(subId),
118
+ mergeId: enums_1.Strategies.Identifiers.Boost,
119
+ };
120
+ }
121
+ _position.strategy.strategyId = enums_1.Strategies.IdOverrides.LeverageManagement;
122
+ return _position;
123
+ }
124
+ function parseLiquityCloseOnPrice(position, parseData) {
125
+ const _position = (0, lodash_1.cloneDeep)(position);
126
+ const { subStruct } = parseData.subscriptionEventData;
127
+ const triggerData = triggerService.chainlinkPriceTrigger.decode(subStruct.triggerData);
128
+ const subData = subDataService.liquityCloseSubData.decode(subStruct.subData);
129
+ _position.strategyData.decoded.triggerData = triggerData;
130
+ _position.strategyData.decoded.subData = subData;
131
+ _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner);
132
+ const isTakeProfit = (0, utils_1.isRatioStateOver)(Number(triggerData.state));
133
+ _position.strategy.strategyId = isTakeProfit ? enums_1.Strategies.IdOverrides.TakeProfit : enums_1.Strategies.IdOverrides.StopLoss;
134
+ _position.specific = {
135
+ price: triggerData.price,
136
+ closeToAssetAddr: subData.closeToAssetAddr,
137
+ };
138
+ return _position;
139
+ }
140
+ function parseLiquityTrailingStop(position, parseData) {
141
+ const _position = (0, lodash_1.cloneDeep)(position);
142
+ const { subStruct } = parseData.subscriptionEventData;
143
+ const triggerData = triggerService.trailingStopTrigger.decode(subStruct.triggerData);
144
+ const subData = subDataService.liquityCloseSubData.decode(subStruct.subData);
145
+ _position.strategyData.decoded.triggerData = triggerData;
146
+ _position.strategyData.decoded.subData = subData;
147
+ _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner);
148
+ _position.strategy.strategyId = enums_1.Strategies.IdOverrides.TrailingStop;
149
+ _position.specific = {
150
+ triggerPercentage: Number(triggerData.triggerPercentage),
151
+ roundId: Number(triggerData.roundId),
152
+ closeToAssetAddr: subData.closeToAssetAddr,
153
+ };
154
+ return _position;
155
+ }
156
+ function parseAaveV2LeverageManagement(position, parseData) {
157
+ const _position = (0, lodash_1.cloneDeep)(position);
158
+ const { subStruct, subId } = parseData.subscriptionEventData;
159
+ const { isEnabled } = parseData.strategiesSubsData;
160
+ const triggerData = triggerService.aaveV2RatioTrigger.decode(subStruct.triggerData);
161
+ const subData = subDataService.aaveV2LeverageManagementSubData.decode(subStruct.subData);
162
+ _position.strategyData.decoded.triggerData = triggerData;
163
+ _position.strategyData.decoded.subData = subData;
164
+ _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner, triggerData.market);
165
+ const isRepay = _position.strategy.strategyId === enums_1.Strategies.Identifiers.Repay;
166
+ if (isRepay) {
167
+ _position.specific = {
168
+ triggerRepayRatio: triggerData.ratio,
169
+ targetRepayRatio: subData.targetRatio,
170
+ repayEnabled: true,
171
+ subId1: Number(subId),
172
+ mergeWithId: enums_1.Strategies.Identifiers.Boost,
173
+ };
174
+ }
175
+ else {
176
+ _position.specific = {
177
+ triggerBoostRatio: triggerData.ratio,
178
+ targetBoostRatio: subData.targetRatio,
179
+ boostEnabled: isEnabled,
180
+ subId2: Number(subId),
181
+ mergeId: enums_1.Strategies.Identifiers.Boost,
182
+ };
183
+ }
184
+ _position.strategy.strategyId = enums_1.Strategies.IdOverrides.LeverageManagement;
185
+ return _position;
186
+ }
187
+ function parseAaveV3LeverageManagement(position, parseData) {
188
+ const _position = (0, lodash_1.cloneDeep)(position);
189
+ const { subStruct, subId, subHash } = parseData.subscriptionEventData;
190
+ const { isEnabled } = parseData.strategiesSubsData;
191
+ const triggerData = triggerService.aaveV3RatioTrigger.decode(subStruct.triggerData);
192
+ const isEOA = _position.strategy.strategyId.includes('eoa');
193
+ let subData;
194
+ if (isEOA) {
195
+ subData = subDataService.aaveV3LeverageManagementSubDataWithoutSubProxy.decode(subStruct.subData);
196
+ }
197
+ else {
198
+ subData = subDataService.aaveV3LeverageManagementSubData.decode(subStruct.subData);
199
+ }
200
+ _position.strategyData.decoded.triggerData = triggerData;
201
+ _position.strategyData.decoded.subData = subData;
202
+ _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner, triggerData.market);
203
+ const isRepay = [enums_1.Strategies.Identifiers.Repay, enums_1.Strategies.Identifiers.EoaRepay].includes(_position.strategy.strategyId);
204
+ if (isRepay) {
205
+ _position.specific = {
206
+ triggerRepayRatio: triggerData.ratio,
207
+ targetRepayRatio: subData.targetRatio,
208
+ repayEnabled: isEnabled,
209
+ subId1: Number(subId),
210
+ mergeWithId: isEOA ? enums_1.Strategies.Identifiers.EoaBoost : enums_1.Strategies.Identifiers.Boost,
211
+ subHashRepay: subHash,
212
+ };
213
+ }
214
+ else {
215
+ _position.specific = {
216
+ triggerBoostRatio: triggerData.ratio,
217
+ targetBoostRatio: subData.targetRatio,
218
+ boostEnabled: isEnabled,
219
+ subId2: Number(subId),
220
+ mergeId: isEOA ? enums_1.Strategies.Identifiers.EoaBoost : enums_1.Strategies.Identifiers.Boost,
221
+ subHashBoost: subHash,
222
+ };
223
+ }
224
+ if (!isEOA) {
225
+ _position.strategy.strategyId = enums_1.Strategies.IdOverrides.LeverageManagement;
226
+ }
227
+ else {
228
+ _position.strategy.strategyId = enums_1.Strategies.IdOverrides.EoaLeverageManagement;
229
+ }
230
+ return _position;
231
+ }
232
+ function parseAaveV3LeverageManagementOnPrice(position, parseData) {
233
+ const _position = (0, lodash_1.cloneDeep)(position);
234
+ const { subStruct } = parseData.subscriptionEventData;
235
+ const triggerData = triggerService.aaveV3QuotePriceTrigger.decode(subStruct.triggerData);
236
+ const isEOA = _position.strategy.strategyId.includes('eoa');
237
+ let subData;
238
+ if (isEOA) {
239
+ subData = subDataService.aaveV3LeverageManagementOnPriceGeneric.decode(subStruct.subData);
240
+ }
241
+ else {
242
+ subData = subDataService.aaveV3LeverageManagementOnPriceSubData.decode(subStruct.subData);
243
+ }
244
+ _position.strategyData.decoded.triggerData = triggerData;
245
+ _position.strategyData.decoded.subData = subData;
246
+ _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner, Math.random());
247
+ _position.specific = {
248
+ collAsset: subData.collAsset,
249
+ debtAsset: subData.debtAsset,
250
+ baseToken: triggerData.baseTokenAddress,
251
+ quoteToken: triggerData.quoteTokenAddress,
252
+ price: triggerData.price,
253
+ ratioState: triggerData.ratioState,
254
+ debtAssetId: subData.debtAssetId,
255
+ collAssetId: subData.collAssetId,
256
+ ratio: subData.targetRatio,
257
+ };
258
+ return _position;
259
+ }
260
+ function parseAaveV3CloseOnPrice(position, parseData) {
261
+ const _position = (0, lodash_1.cloneDeep)(position);
262
+ const { subStruct } = parseData.subscriptionEventData;
263
+ const isEOA = _position.strategy.strategyId.includes('eoa');
264
+ _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner, AAVE_V3_MARKET_ADDRESSES[_position.chainId]);
265
+ if (isEOA) {
266
+ const triggerData = triggerService.aaveV3QuotePriceRangeTrigger.decode(subStruct.triggerData);
267
+ const subData = subDataService.aaveV3CloseGenericSubData.decode(subStruct.subData);
268
+ const { takeProfitType, stopLossType } = (0, utils_1.getStopLossAndTakeProfitTypeByCloseStrategyType)(+subData.closeType);
269
+ _position.strategyData.decoded.triggerData = triggerData;
270
+ _position.strategyData.decoded.subData = subData;
271
+ _position.specific = {
272
+ collAsset: subData.collAsset,
273
+ collAssetId: subData.collAssetId,
274
+ debtAsset: subData.debtAsset,
275
+ debtAssetId: subData.debtAssetId,
276
+ baseToken: triggerData.collToken,
277
+ quoteToken: triggerData.debtToken,
278
+ stopLossPrice: triggerData.lowerPrice,
279
+ takeProfitPrice: triggerData.upperPrice,
280
+ stopLossType,
281
+ takeProfitType,
282
+ };
283
+ _position.strategy.strategyId = enums_1.Strategies.Identifiers.EoaCloseOnPrice;
284
+ }
285
+ else {
286
+ const triggerData = triggerService.aaveV3QuotePriceTrigger.decode(subStruct.triggerData);
287
+ const subData = subDataService.aaveV3QuotePriceSubData.decode(subStruct.subData);
288
+ _position.strategyData.decoded.triggerData = triggerData;
289
+ _position.strategyData.decoded.subData = subData;
290
+ _position.specific = {
291
+ collAsset: subData.collAsset,
292
+ collAssetId: subData.collAssetId,
293
+ debtAsset: subData.debtAsset,
294
+ debtAssetId: subData.debtAssetId,
295
+ baseToken: triggerData.baseTokenAddress,
296
+ quoteToken: triggerData.quoteTokenAddress,
297
+ price: triggerData.price,
298
+ ratioState: triggerData.ratioState,
299
+ };
300
+ const { ratioState } = (0, utils_1.getRatioStateInfoForAaveCloseStrategy)(_position.specific.ratioState, (0, utils_1.wethToEthByAddress)(_position.specific.collAsset, parseData.chainId), (0, utils_1.wethToEthByAddress)(_position.specific.debtAsset, parseData.chainId), parseData.chainId);
301
+ _position.strategy.strategyId = (0, utils_1.isRatioStateOver)(ratioState)
302
+ ? enums_1.Strategies.IdOverrides.TakeProfit
303
+ : enums_1.Strategies.IdOverrides.StopLoss;
304
+ }
305
+ return _position;
306
+ }
307
+ function parseAaveV3CollateralSwitch(position, parseData) {
308
+ const _position = (0, lodash_1.cloneDeep)(position);
309
+ const { subStruct } = parseData.subscriptionEventData;
310
+ const triggerData = triggerService.aaveV3QuotePriceTrigger.decode(subStruct.triggerData);
311
+ const subData = subDataService.aaveV3CollateralSwitchSubData.decode(subStruct.subData);
312
+ _position.strategyData.decoded.triggerData = triggerData;
313
+ _position.strategyData.decoded.subData = subData;
314
+ _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner, subData.marketAddr);
315
+ return _position;
316
+ }
317
+ function parseSparkCollateralSwitch(position, parseData) {
318
+ const _position = (0, lodash_1.cloneDeep)(position);
319
+ const { subStruct } = parseData.subscriptionEventData;
320
+ const triggerData = triggerService.sparkQuotePriceTrigger.decode(subStruct.triggerData);
321
+ const subData = subDataService.sparkCollateralSwitchSubData.decode(subStruct.subData);
322
+ _position.strategyData.decoded.triggerData = triggerData;
323
+ _position.strategyData.decoded.subData = subData;
324
+ _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner, subData.marketAddr);
325
+ return _position;
326
+ }
327
+ function parseAaveV4LeverageManagement(position, parseData) {
328
+ const _position = (0, lodash_1.cloneDeep)(position);
329
+ const { subStruct, subId, subHash } = parseData.subscriptionEventData;
330
+ const { isEnabled } = parseData.strategiesSubsData;
331
+ const triggerData = triggerService.aaveV4RatioTrigger.decode(subStruct.triggerData);
332
+ const subData = subDataService.aaveV4LeverageManagementSubData.decode(subStruct.subData);
333
+ const isEOA = _position.strategy.strategyId.includes('eoa');
334
+ const isRepay = [enums_1.Strategies.Identifiers.Repay, enums_1.Strategies.Identifiers.EoaRepay].includes(_position.strategy.strategyId);
335
+ _position.strategyData.decoded.triggerData = triggerData;
336
+ _position.strategyData.decoded.subData = subData;
337
+ _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner, triggerData.spoke);
338
+ _position.strategy.strategyId = isEOA ? enums_1.Strategies.IdOverrides.EoaLeverageManagement : enums_1.Strategies.IdOverrides.LeverageManagement;
339
+ if (isRepay) {
340
+ _position.specific = {
341
+ triggerRepayRatio: triggerData.ratio,
342
+ targetRepayRatio: subData.targetRatio,
343
+ repayEnabled: isEnabled,
344
+ subId1: Number(subId),
345
+ mergeWithId: isEOA ? enums_1.Strategies.Identifiers.EoaBoost : enums_1.Strategies.Identifiers.Boost,
346
+ subHashRepay: subHash,
347
+ };
348
+ }
349
+ else {
350
+ _position.specific = {
351
+ triggerBoostRatio: triggerData.ratio,
352
+ targetBoostRatio: subData.targetRatio,
353
+ boostEnabled: isEnabled,
354
+ subId2: Number(subId),
355
+ mergeId: isEOA ? enums_1.Strategies.Identifiers.EoaBoost : enums_1.Strategies.Identifiers.Boost,
356
+ subHashBoost: subHash,
357
+ };
358
+ }
359
+ return _position;
360
+ }
361
+ function parseAaveV4LeverageManagementOnPrice(position, parseData) {
362
+ const _position = (0, lodash_1.cloneDeep)(position);
363
+ const { subStruct } = parseData.subscriptionEventData;
364
+ const triggerData = triggerService.aaveV4QuotePriceTrigger.decode(subStruct.triggerData);
365
+ const subData = subDataService.aaveV4LeverageManagementOnPriceSubData.decode(subStruct.subData);
366
+ const isEOA = _position.strategy.strategyId.includes('eoa');
367
+ _position.strategyData.decoded.triggerData = triggerData;
368
+ _position.strategyData.decoded.subData = subData;
369
+ _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner, triggerData.spoke);
370
+ _position.strategy.strategyId = isEOA ? enums_1.Strategies.IdOverrides.EoaLeverageManagementOnPrice : enums_1.Strategies.IdOverrides.LeverageManagementOnPrice;
371
+ _position.specific = {
372
+ collAsset: subData.collAsset,
373
+ collAssetId: subData.collAssetId,
374
+ debtAsset: subData.debtAsset,
375
+ debtAssetId: subData.debtAssetId,
376
+ price: triggerData.price,
377
+ ratioState: triggerData.ratioState,
378
+ ratio: subData.targetRatio,
379
+ };
380
+ return _position;
381
+ }
382
+ function parseAaveV4CloseOnPrice(position, parseData) {
383
+ const _position = (0, lodash_1.cloneDeep)(position);
384
+ const { subStruct } = parseData.subscriptionEventData;
385
+ const triggerData = triggerService.aaveV4QuotePriceRangeTrigger.decode(subStruct.triggerData);
386
+ const subData = subDataService.aaveV4CloseSubData.decode(subStruct.subData);
387
+ const { takeProfitType, stopLossType } = (0, utils_1.getStopLossAndTakeProfitTypeByCloseStrategyType)(+subData.closeType);
388
+ const isEOA = _position.strategy.strategyId.includes('eoa');
389
+ _position.strategyData.decoded.triggerData = triggerData;
390
+ _position.strategyData.decoded.subData = subData;
391
+ _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner, triggerData.spoke);
392
+ _position.strategy.strategyId = isEOA ? enums_1.Strategies.Identifiers.EoaCloseOnPrice : enums_1.Strategies.Identifiers.CloseOnPrice;
393
+ _position.specific = {
394
+ collAsset: subData.collAsset,
395
+ collAssetId: subData.collAssetId,
396
+ debtAsset: subData.debtAsset,
397
+ debtAssetId: subData.debtAssetId,
398
+ stopLossPrice: triggerData.lowerPrice,
399
+ takeProfitPrice: triggerData.upperPrice,
400
+ stopLossType,
401
+ takeProfitType,
402
+ };
403
+ return _position;
404
+ }
405
+ function parseAaveV4CollateralSwitch(position, parseData) {
406
+ const _position = (0, lodash_1.cloneDeep)(position);
407
+ const { subStruct } = parseData.subscriptionEventData;
408
+ const triggerData = triggerService.aaveV4QuotePriceTrigger.decode(subStruct.triggerData);
409
+ const subData = subDataService.aaveV4CollateralSwitchSubData.decode(subStruct.subData);
410
+ const isEOA = _position.strategy.strategyId.includes('eoa');
411
+ _position.strategyData.decoded.triggerData = triggerData;
412
+ _position.strategyData.decoded.subData = subData;
413
+ _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner, triggerData.spoke);
414
+ _position.strategy.strategyId = isEOA ? enums_1.Strategies.Identifiers.EoaCollateralSwitch : enums_1.Strategies.Identifiers.CollateralSwitch;
415
+ return _position;
416
+ }
417
+ function parseMorphoAaveV2LeverageManagement(position, parseData) {
418
+ const _position = (0, lodash_1.cloneDeep)(position);
419
+ const { subStruct, subId } = parseData.subscriptionEventData;
420
+ const { isEnabled } = parseData.strategiesSubsData;
421
+ const triggerData = triggerService.morphoAaveV2RatioTrigger.decode(subStruct.triggerData);
422
+ const subData = subDataService.morphoAaveV2LeverageManagementSubData.decode(subStruct.subData);
423
+ _position.strategyData.decoded.triggerData = triggerData;
424
+ _position.strategyData.decoded.subData = subData;
425
+ _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner);
426
+ const isRepay = _position.strategy.strategyId === enums_1.Strategies.Identifiers.Repay;
427
+ if (isRepay) {
428
+ _position.specific = {
429
+ triggerRepayRatio: triggerData.ratio,
430
+ targetRepayRatio: subData.targetRatio,
431
+ repayEnabled: true,
432
+ subId1: Number(subId),
433
+ mergeWithId: enums_1.Strategies.Identifiers.Boost,
434
+ };
435
+ }
436
+ else {
437
+ _position.specific = {
438
+ triggerBoostRatio: triggerData.ratio,
439
+ targetBoostRatio: subData.targetRatio,
440
+ boostEnabled: isEnabled,
441
+ subId2: Number(subId),
442
+ mergeId: enums_1.Strategies.Identifiers.Boost,
443
+ };
444
+ }
445
+ _position.strategy.strategyId = enums_1.Strategies.IdOverrides.LeverageManagement;
446
+ return _position;
447
+ }
448
+ function parseAaveV3CloseOnPriceWithMaximumGasPrice(position, parseData) {
449
+ const _position = (0, lodash_1.cloneDeep)(position);
450
+ const { subStruct } = parseData.subscriptionEventData;
451
+ const triggerData = triggerService.aaveV3QuotePriceWithMaximumGasPriceTrigger.decode(subStruct.triggerData);
452
+ const subData = subDataService.aaveV3QuotePriceSubData.decode(subStruct.subData);
453
+ _position.strategyData.decoded.triggerData = triggerData;
454
+ _position.strategyData.decoded.subData = subData;
455
+ _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner, AAVE_V3_MARKET_ADDRESSES[_position.chainId]);
456
+ _position.specific = {
457
+ collAsset: subData.collAsset,
458
+ collAssetId: subData.collAssetId,
459
+ debtAsset: subData.debtAsset,
460
+ debtAssetId: subData.debtAssetId,
461
+ baseToken: triggerData.baseTokenAddress,
462
+ quoteToken: triggerData.quoteTokenAddress,
463
+ price: triggerData.price,
464
+ maximumGasPrice: triggerData.maximumGasPrice,
465
+ ratioState: triggerData.ratioState,
466
+ };
467
+ const { ratioState } = (0, utils_1.getRatioStateInfoForAaveCloseStrategy)(_position.specific.ratioState, (0, utils_1.wethToEthByAddress)(_position.specific.collAsset, parseData.chainId), (0, utils_1.wethToEthByAddress)(_position.specific.debtAsset, parseData.chainId), parseData.chainId);
468
+ _position.strategy.strategyId = (0, utils_1.isRatioStateOver)(ratioState)
469
+ ? enums_1.Strategies.IdOverrides.TakeProfitWithGasPrice
470
+ : enums_1.Strategies.IdOverrides.StopLossWithGasPrice;
471
+ return _position;
472
+ }
473
+ function parseCompoundV2LeverageManagement(position, parseData) {
474
+ const _position = (0, lodash_1.cloneDeep)(position);
475
+ const { subStruct, subId } = parseData.subscriptionEventData;
476
+ const { isEnabled } = parseData.strategiesSubsData;
477
+ const triggerData = triggerService.compoundV2RatioTrigger.decode(subStruct.triggerData);
478
+ const subData = subDataService.compoundV2LeverageManagementSubData.decode(subStruct.subData);
479
+ _position.strategyData.decoded.triggerData = triggerData;
480
+ _position.strategyData.decoded.subData = subData;
481
+ _position.owner = triggerData.owner.toLowerCase();
482
+ _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner);
483
+ const isRepay = [enums_1.Strategies.Identifiers.Repay, enums_1.Strategies.Identifiers.EoaRepay].includes(_position.strategy.strategyId);
484
+ if (isRepay) {
485
+ _position.specific = {
486
+ triggerRepayRatio: triggerData.ratio,
487
+ targetRepayRatio: subData.targetRatio,
488
+ repayEnabled: true,
489
+ subId1: Number(subId),
490
+ mergeWithId: enums_1.Strategies.Identifiers.Boost,
491
+ };
492
+ }
493
+ else {
494
+ _position.specific = {
495
+ triggerBoostRatio: triggerData.ratio,
496
+ targetBoostRatio: subData.targetRatio,
497
+ boostEnabled: isEnabled,
498
+ subId2: Number(subId),
499
+ mergeId: enums_1.Strategies.Identifiers.Boost,
500
+ };
501
+ }
502
+ const isEOA = _position.strategy.strategyId.includes('eoa');
503
+ _position.strategy.strategyId = isEOA ? enums_1.Strategies.IdOverrides.EoaLeverageManagement : enums_1.Strategies.IdOverrides.LeverageManagement;
504
+ return _position;
505
+ }
506
+ function parseCompoundV3LeverageManagement(position, parseData) {
507
+ const _position = (0, lodash_1.cloneDeep)(position);
508
+ const { subStruct, subId } = parseData.subscriptionEventData;
509
+ const { isEnabled } = parseData.strategiesSubsData;
510
+ const subDataDecoder = position.chainId !== 1
511
+ ? subDataService.compoundV3L2LeverageManagementSubData
512
+ : subDataService.compoundV3LeverageManagementSubData;
513
+ const triggerData = triggerService.compoundV3RatioTrigger.decode(subStruct.triggerData);
514
+ const subData = subDataDecoder.decode(subStruct.subData);
515
+ _position.strategyData.decoded.triggerData = triggerData;
516
+ _position.strategyData.decoded.subData = subData;
517
+ _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, triggerData.owner.toLowerCase(), triggerData.market);
518
+ const isRepay = [enums_1.Strategies.Identifiers.Repay, enums_1.Strategies.Identifiers.EoaRepay].includes(_position.strategy.strategyId);
519
+ const isEOA = _position.strategy.strategyId.includes('eoa');
520
+ if (isRepay) {
521
+ _position.specific = {
522
+ triggerRepayRatio: triggerData.ratio,
523
+ targetRepayRatio: subData.targetRatio,
524
+ repayEnabled: true,
525
+ subId1: Number(subId),
526
+ mergeWithId: isEOA ? enums_1.Strategies.Identifiers.EoaBoost : enums_1.Strategies.Identifiers.Boost,
527
+ };
528
+ }
529
+ else {
530
+ _position.specific = {
531
+ triggerBoostRatio: triggerData.ratio,
532
+ targetBoostRatio: subData.targetRatio,
533
+ boostEnabled: isEnabled,
534
+ subId2: Number(subId),
535
+ mergeId: isEOA ? enums_1.Strategies.Identifiers.EoaBoost : enums_1.Strategies.Identifiers.Boost,
536
+ };
537
+ }
538
+ _position.strategy.strategyId = isEOA ? enums_1.Strategies.IdOverrides.EoaLeverageManagement : enums_1.Strategies.IdOverrides.LeverageManagement;
539
+ return _position;
540
+ }
541
+ function parseCompoundV3LeverageManagementOnPrice(position, parseData) {
542
+ const _position = (0, lodash_1.cloneDeep)(position);
543
+ const { subStruct } = parseData.subscriptionEventData;
544
+ const triggerData = triggerService.compoundV3PriceTrigger.decode(subStruct.triggerData);
545
+ const subData = subDataService.compoundV3LeverageManagementOnPriceSubData.decode(subStruct.subData);
546
+ _position.strategyData.decoded.triggerData = triggerData;
547
+ _position.strategyData.decoded.subData = subData;
548
+ _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, triggerData.market, triggerData.user, Math.random());
549
+ _position.specific = {
550
+ market: subData.market,
551
+ collToken: subData.collToken,
552
+ baseToken: subData.baseToken,
553
+ ratio: subData.targetRatio,
554
+ price: triggerData.price,
555
+ priceState: triggerData.priceState,
556
+ };
557
+ return _position;
558
+ }
559
+ function parseCompoundV3CloseOnPrice(position, parseData) {
560
+ const _position = (0, lodash_1.cloneDeep)(position);
561
+ const { subStruct } = parseData.subscriptionEventData;
562
+ const triggerData = triggerService.compoundV3PriceRangeTrigger.decode(subStruct.triggerData);
563
+ const subData = subDataService.compoundV3CloseSubData.decode(subStruct.subData);
564
+ _position.strategyData.decoded.triggerData = triggerData;
565
+ _position.strategyData.decoded.subData = subData;
566
+ _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, triggerData.market, Math.random());
567
+ const { takeProfitType, stopLossType } = (0, utils_1.getStopLossAndTakeProfitTypeByCloseStrategyType)(+subData.closeType);
568
+ const isEOA = _position.strategy.strategyId.includes('eoa');
569
+ _position.strategy.strategyId = isEOA ? enums_1.Strategies.Identifiers.EoaCloseOnPrice : enums_1.Strategies.Identifiers.CloseOnPrice;
570
+ _position.specific = {
571
+ market: subData.market,
572
+ collToken: subData.collToken,
573
+ baseToken: subData.baseToken,
574
+ stopLossPrice: triggerData.lowerPrice,
575
+ takeProfitPrice: triggerData.upperPrice,
576
+ takeProfitType,
577
+ stopLossType,
578
+ };
579
+ return _position;
580
+ }
581
+ function parseChickenBondsRebond(position, parseData) {
582
+ const _position = (0, lodash_1.cloneDeep)(position);
583
+ const { subStruct } = parseData.subscriptionEventData;
584
+ _position.strategyData.decoded.triggerData = triggerService.cBondsRebondTrigger.decode(subStruct.triggerData);
585
+ _position.strategyData.decoded.subData = subDataService.cBondsRebondSubData.decode(subStruct.subData);
586
+ _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.strategyData.decoded.triggerData.bondId);
587
+ return _position;
588
+ }
589
+ function parseLiquityBondProtection(position, parseData) {
590
+ const _position = (0, lodash_1.cloneDeep)(position);
591
+ const { subStruct } = parseData.subscriptionEventData;
592
+ const triggerData = triggerService.liquityRatioTrigger.decode(subStruct.triggerData);
593
+ _position.strategyData.decoded.triggerData = triggerData;
594
+ _position.strategyData.decoded.subData = subDataService.liquityPaybackUsingChickenBondSubData.decode(subStruct.subData);
595
+ _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner);
596
+ _position.specific = {
597
+ triggerRepayRatio: Number(triggerData.ratio),
598
+ targetRepayRatio: Infinity,
599
+ repayEnabled: true,
600
+ };
601
+ return _position;
602
+ }
603
+ function parseExchangeDca(position, parseData, chainId) {
604
+ const _position = (0, lodash_1.cloneDeep)(position);
605
+ const { subStruct } = parseData.subscriptionEventData;
606
+ _position.strategyData.decoded.triggerData = triggerService.exchangeTimestampTrigger.decode(subStruct.triggerData);
607
+ _position.strategyData.decoded.subData = subDataService.exchangeDcaSubData.decode(subStruct.subData, chainId);
608
+ _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner, Math.random());
609
+ return _position;
610
+ }
611
+ function parseExchangeLimitOrder(position, parseData, chainId) {
612
+ const _position = (0, lodash_1.cloneDeep)(position);
613
+ const { subStruct } = parseData.subscriptionEventData;
614
+ _position.strategyData.decoded.subData = subDataService.exchangeLimitOrderSubData.decode(subStruct.subData, chainId);
615
+ const fromTokenDecimals = (0, tokens_1.getAssetInfoByAddress)(_position.strategyData.decoded.subData.fromToken, chainId).decimals;
616
+ const toTokenDecimals = (0, tokens_1.getAssetInfoByAddress)(_position.strategyData.decoded.subData.toToken, chainId).decimals;
617
+ _position.strategyData.decoded.triggerData = triggerService.exchangeOffchainPriceTrigger.decode(subStruct.triggerData, fromTokenDecimals, toTokenDecimals);
618
+ _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner, Math.random());
619
+ return _position;
620
+ }
621
+ function parseLiquityLeverageManagement(position, parseData) {
622
+ const _position = (0, lodash_1.cloneDeep)(position);
623
+ const { subStruct, subId } = parseData.subscriptionEventData;
624
+ const { isEnabled } = parseData.strategiesSubsData;
625
+ const triggerData = triggerService.liquityRatioTrigger.decode(subStruct.triggerData);
626
+ const subData = subDataService.liquityLeverageManagementSubData.decode(subStruct.subData);
627
+ _position.strategyData.decoded.triggerData = triggerData;
628
+ _position.strategyData.decoded.subData = subData;
629
+ _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner);
630
+ const isRepay = _position.strategy.strategyId === enums_1.Strategies.Identifiers.Repay;
631
+ if (isRepay) {
632
+ _position.specific = {
633
+ triggerRepayRatio: triggerData.ratio,
634
+ targetRepayRatio: subData.targetRatio,
635
+ repayEnabled: true,
636
+ subId1: Number(subId),
637
+ mergeWithId: enums_1.Strategies.Identifiers.Boost,
638
+ };
639
+ }
640
+ else {
641
+ _position.specific = {
642
+ triggerBoostRatio: triggerData.ratio,
643
+ targetBoostRatio: subData.targetRatio,
644
+ boostEnabled: isEnabled,
645
+ subId2: Number(subId),
646
+ mergeId: enums_1.Strategies.Identifiers.Boost,
647
+ };
648
+ }
649
+ _position.strategy.strategyId = enums_1.Strategies.IdOverrides.LeverageManagement;
650
+ return _position;
651
+ }
652
+ function parseLiquityV2LeverageManagement(position, parseData) {
653
+ const _position = (0, lodash_1.cloneDeep)(position);
654
+ const { subStruct, subId, subHash } = parseData.subscriptionEventData;
655
+ const { isEnabled } = parseData.strategiesSubsData;
656
+ const triggerData = triggerService.liquityV2RatioTrigger.decode(subStruct.triggerData);
657
+ const subData = subDataService.liquityV2LeverageManagementSubData.decode(subStruct.subData);
658
+ _position.strategyData.decoded.triggerData = triggerData;
659
+ _position.strategyData.decoded.subData = subData;
660
+ _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner, triggerData.troveId, triggerData.market);
661
+ const isRepay = _position.strategy.strategyId === enums_1.Strategies.Identifiers.Repay;
662
+ if (isRepay) {
663
+ _position.specific = {
664
+ triggerRepayRatio: triggerData.ratio,
665
+ targetRepayRatio: subData.targetRatio,
666
+ repayEnabled: isEnabled,
667
+ subId1: Number(subId),
668
+ subHashRepay: subHash,
669
+ mergeWithId: enums_1.Strategies.Identifiers.Boost,
670
+ };
671
+ }
672
+ else {
673
+ _position.specific = {
674
+ triggerBoostRatio: triggerData.ratio,
675
+ targetBoostRatio: subData.targetRatio,
676
+ boostEnabled: isEnabled,
677
+ subId2: Number(subId),
678
+ subHashBoost: subHash,
679
+ mergeId: enums_1.Strategies.Identifiers.Boost,
680
+ };
681
+ }
682
+ _position.strategy.strategyId = enums_1.Strategies.IdOverrides.LeverageManagement;
683
+ return _position;
684
+ }
685
+ function parseSparkLeverageManagement(position, parseData) {
686
+ const _position = (0, lodash_1.cloneDeep)(position);
687
+ const { subStruct, subId } = parseData.subscriptionEventData;
688
+ const { isEnabled } = parseData.strategiesSubsData;
689
+ const triggerData = triggerService.sparkRatioTrigger.decode(subStruct.triggerData);
690
+ const subData = subDataService.sparkLeverageManagementSubData.decode(subStruct.subData);
691
+ _position.strategyData.decoded.triggerData = triggerData;
692
+ _position.strategyData.decoded.subData = subData;
693
+ _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner, triggerData.market);
694
+ const isRepay = _position.strategy.strategyId === enums_1.Strategies.Identifiers.Repay;
695
+ if (isRepay) {
696
+ _position.specific = {
697
+ triggerRepayRatio: triggerData.ratio,
698
+ targetRepayRatio: subData.targetRatio,
699
+ repayEnabled: true,
700
+ subId1: Number(subId),
701
+ mergeWithId: enums_1.Strategies.Identifiers.Boost,
702
+ };
703
+ }
704
+ else {
705
+ _position.specific = {
706
+ triggerBoostRatio: triggerData.ratio,
707
+ targetBoostRatio: subData.targetRatio,
708
+ boostEnabled: isEnabled,
709
+ subId2: Number(subId),
710
+ mergeId: enums_1.Strategies.Identifiers.Boost,
711
+ };
712
+ }
713
+ _position.strategy.strategyId = enums_1.Strategies.IdOverrides.LeverageManagement;
714
+ return _position;
715
+ }
716
+ function parseSparkLeverageManagementOnPrice(position, parseData) {
717
+ const _position = (0, lodash_1.cloneDeep)(position);
718
+ const { subStruct } = parseData.subscriptionEventData;
719
+ const triggerData = triggerService.sparkQuotePriceTrigger.decode(subStruct.triggerData);
720
+ const subData = subDataService.sparkLeverageManagementOnPriceSubData.decode(subStruct.subData);
721
+ _position.strategyData.decoded.triggerData = triggerData;
722
+ _position.strategyData.decoded.subData = subData;
723
+ _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner, subData.marketAddr);
724
+ _position.specific = {
725
+ // subData
726
+ collAsset: subData.collAsset,
727
+ collAssetId: subData.collAssetId,
728
+ debtAsset: subData.debtAsset,
729
+ debtAssetId: subData.debtAssetId,
730
+ ratio: subData.targetRatio,
731
+ // triggerData
732
+ baseToken: triggerData.baseTokenAddr,
733
+ quoteToken: triggerData.quoteTokenAddr,
734
+ price: triggerData.price,
735
+ ratioState: triggerData.ratioState,
736
+ };
737
+ return _position;
738
+ }
739
+ function parseSparkCloseOnPrice(position, parseData) {
740
+ const _position = (0, lodash_1.cloneDeep)(position);
741
+ const { subStruct } = parseData.subscriptionEventData;
742
+ const triggerData = triggerService.sparkQuotePriceRangeTrigger.decode(subStruct.triggerData);
743
+ const subData = subDataService.sparkCloseGenericSubData.decode(subStruct.subData);
744
+ _position.strategyData.decoded.triggerData = triggerData;
745
+ _position.strategyData.decoded.subData = subData;
746
+ _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner, subData.marketAddr);
747
+ const { takeProfitType, stopLossType } = (0, utils_1.getStopLossAndTakeProfitTypeByCloseStrategyType)(+subData.closeType);
748
+ _position.specific = {
749
+ collAsset: subData.collAsset,
750
+ collAssetId: subData.collAssetId,
751
+ debtAsset: subData.debtAsset,
752
+ debtAssetId: subData.debtAssetId,
753
+ baseToken: triggerData.collToken,
754
+ quoteToken: triggerData.debtToken,
755
+ stopLossPrice: triggerData.lowerPrice,
756
+ takeProfitPrice: triggerData.upperPrice,
757
+ stopLossType,
758
+ takeProfitType,
759
+ };
760
+ return _position;
761
+ }
762
+ function parseLiquitySavingsLiqProtection(position, parseData) {
763
+ const _position = (0, lodash_1.cloneDeep)(position);
764
+ const { subStruct } = parseData.subscriptionEventData;
765
+ const triggerData = triggerService.liquityRatioTrigger.decode(subStruct.triggerData);
766
+ const subData = subDataService.liquityRepayFromSavingsSubData.decode(subStruct.subData);
767
+ _position.strategyData.decoded.triggerData = triggerData;
768
+ _position.strategyData.decoded.subData = subData;
769
+ _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner);
770
+ _position.specific = {
771
+ triggerRepayRatio: triggerData.ratio,
772
+ targetRepayRatio: subData.targetRatio,
773
+ repayEnabled: true,
774
+ boostEnabled: false,
775
+ };
776
+ return _position;
777
+ }
778
+ function parseLiquityDebtInFrontRepay(position, parseData) {
779
+ const _position = (0, lodash_1.cloneDeep)(position);
780
+ const { subStruct } = parseData.subscriptionEventData;
781
+ const triggerData = triggerService.liquityDebtInFrontWithLimitTrigger.decode(subStruct.triggerData);
782
+ const subData = subDataService.liquityDebtInFrontRepaySubData.decode(subStruct.subData);
783
+ _position.strategyData.decoded.triggerData = triggerData;
784
+ _position.strategyData.decoded.subData = subData;
785
+ _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner);
786
+ _position.specific = {
787
+ debtInFrontMin: triggerData.debtInFrontMin,
788
+ targetRepayRatioIncrease: subData.targetRatioIncrease,
789
+ };
790
+ return _position;
791
+ }
792
+ function parseCrvUSDLeverageManagement(position, parseData) {
793
+ const _position = (0, lodash_1.cloneDeep)(position);
794
+ const { subStruct, subId, subHash } = parseData.subscriptionEventData;
795
+ const { isEnabled } = parseData.strategiesSubsData;
796
+ const triggerData = triggerService.crvUSDRatioTrigger.decode(subStruct.triggerData);
797
+ const subData = subDataService.crvUSDLeverageManagementSubData.decode(subStruct.subData);
798
+ _position.strategyData.decoded.triggerData = triggerData;
799
+ _position.strategyData.decoded.subData = subData;
800
+ _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner, triggerData.controller);
801
+ const isRepay = _position.strategy.strategyId === enums_1.Strategies.Identifiers.Repay;
802
+ if (isRepay) {
803
+ _position.specific = {
804
+ triggerRepayRatio: triggerData.ratio,
805
+ targetRepayRatio: subData.targetRatio,
806
+ repayEnabled: isEnabled,
807
+ subId1: Number(subId),
808
+ subHashRepay: subHash,
809
+ mergeWithId: enums_1.Strategies.Identifiers.Boost,
810
+ };
811
+ }
812
+ else {
813
+ _position.specific = {
814
+ triggerBoostRatio: triggerData.ratio,
815
+ targetBoostRatio: subData.targetRatio,
816
+ boostEnabled: isEnabled,
817
+ subId2: Number(subId),
818
+ subHashBoost: subHash,
819
+ mergeId: enums_1.Strategies.Identifiers.Boost,
820
+ };
821
+ }
822
+ _position.strategy.strategyId = enums_1.Strategies.IdOverrides.LeverageManagement;
823
+ return _position;
824
+ }
825
+ function parseCrvUSDPayback(position, parseData) {
826
+ const _position = (0, lodash_1.cloneDeep)(position);
827
+ const { subStruct } = parseData.subscriptionEventData;
828
+ const triggerData = triggerService.crvUsdHealthRatioTrigger.decode(subStruct.triggerData);
829
+ const subData = subDataService.crvUSDPaybackSubData.decode(subStruct.subData);
830
+ _position.strategyData.decoded.triggerData = triggerData;
831
+ _position.strategyData.decoded.subData = subData;
832
+ _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner, triggerData.controller, Math.random());
833
+ _position.strategy.strategyId = enums_1.Strategies.Identifiers.Payback;
834
+ return _position;
835
+ }
836
+ function parseMorphoBlueLeverageManagement(position, parseData) {
837
+ const _position = (0, lodash_1.cloneDeep)(position);
838
+ const { subStruct, subId, subHash } = parseData.subscriptionEventData;
839
+ const { isEnabled } = parseData.strategiesSubsData;
840
+ const triggerData = triggerService.morphoBlueRatioTrigger.decode(subStruct.triggerData);
841
+ const subData = subDataService.morphoBlueLeverageManagementSubData.decode(subStruct.subData);
842
+ _position.strategyData.decoded.triggerData = triggerData;
843
+ _position.strategyData.decoded.subData = subData;
844
+ _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, triggerData.owner.toLowerCase(), triggerData.marketId);
845
+ const isRepay = [enums_1.Strategies.Identifiers.Repay, enums_1.Strategies.Identifiers.EoaRepay].includes(_position.strategy.strategyId);
846
+ if (isRepay) {
847
+ _position.specific = {
848
+ triggerRepayRatio: triggerData.ratio,
849
+ targetRepayRatio: subData.targetRatio,
850
+ repayEnabled: isEnabled,
851
+ subId1: Number(subId),
852
+ subHashRepay: subHash,
853
+ mergeWithId: enums_1.Strategies.Identifiers.Boost,
854
+ };
855
+ }
856
+ else {
857
+ _position.specific = {
858
+ triggerBoostRatio: triggerData.ratio,
859
+ targetBoostRatio: subData.targetRatio,
860
+ boostEnabled: isEnabled,
861
+ subId2: Number(subId),
862
+ subHashBoost: subHash,
863
+ mergeId: enums_1.Strategies.Identifiers.Boost,
864
+ };
865
+ }
866
+ const isEOA = _position.strategy.strategyId.includes('eoa');
867
+ _position.strategy.strategyId = isEOA ? enums_1.Strategies.IdOverrides.EoaLeverageManagement : enums_1.Strategies.IdOverrides.LeverageManagement;
868
+ return _position;
869
+ }
870
+ function parseMorphoBlueLeverageManagementOnPrice(position, parseData) {
871
+ const _position = (0, lodash_1.cloneDeep)(position);
872
+ const { subStruct } = parseData.subscriptionEventData;
873
+ const triggerData = triggerService.morphoBluePriceTrigger.decode(subStruct.triggerData);
874
+ const subData = subDataService.morphoBlueLeverageManagementOnPriceSubData.decode(subStruct.subData);
875
+ _position.strategyData.decoded.triggerData = triggerData;
876
+ _position.strategyData.decoded.subData = subData;
877
+ _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner, Math.random());
878
+ const marketIdEncodedData = web3.eth.abi.encodeParameters(['address', 'address', 'address', 'address', 'uint256'], [
879
+ subData.loanToken,
880
+ subData.collToken,
881
+ subData.oracle,
882
+ subData.irm,
883
+ subData.lltv,
884
+ ]);
885
+ const marketId = web3.utils.keccak256(marketIdEncodedData);
886
+ _position.specific = {
887
+ subHash: _position.subHash,
888
+ marketId,
889
+ collAsset: subData.collToken,
890
+ debtAsset: subData.loanToken,
891
+ price: triggerData.price,
892
+ ratio: subData.targetRatio,
893
+ };
894
+ return _position;
895
+ }
896
+ function parseMorphoBlueCloseOnPrice(position, parseData) {
897
+ const _position = (0, lodash_1.cloneDeep)(position);
898
+ const { subStruct } = parseData.subscriptionEventData;
899
+ const triggerData = triggerService.morphoBluePriceRangeTrigger.decode(subStruct.triggerData);
900
+ const subData = subDataService.morphoBlueCloseOnPriceSubData.decode(subStruct.subData);
901
+ _position.strategyData.decoded.triggerData = triggerData;
902
+ _position.strategyData.decoded.subData = subData;
903
+ _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner, Math.random());
904
+ const marketIdEncodedData = web3.eth.abi.encodeParameters(['address', 'address', 'address', 'address', 'uint256'], [
905
+ subData.loanToken,
906
+ subData.collToken,
907
+ subData.oracle,
908
+ subData.irm,
909
+ subData.lltv,
910
+ ]);
911
+ const marketId = web3.utils.keccak256(marketIdEncodedData);
912
+ const { takeProfitType, stopLossType } = (0, utils_1.getStopLossAndTakeProfitTypeByCloseStrategyType)(+subData.closeType);
913
+ _position.specific = {
914
+ subHash: _position.subHash,
915
+ marketId,
916
+ collAsset: subData.collToken,
917
+ debtAsset: subData.loanToken,
918
+ stopLossPrice: triggerData.lowerPrice,
919
+ takeProfitPrice: triggerData.upperPrice,
920
+ stopLossType,
921
+ takeProfitType,
922
+ };
923
+ return _position;
924
+ }
925
+ function parseLiquityV2CloseOnPrice(position, parseData) {
926
+ const _position = (0, lodash_1.cloneDeep)(position);
927
+ const { subStruct } = parseData.subscriptionEventData;
928
+ const triggerData = triggerService.closePriceTrigger.decode(subStruct.triggerData);
929
+ const subData = subDataService.liquityV2CloseSubData.decode(subStruct.subData);
930
+ _position.strategyData.decoded.triggerData = triggerData;
931
+ _position.strategyData.decoded.subData = subData;
932
+ _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner, subData.troveId, subData.market);
933
+ const { takeProfitType, stopLossType } = (0, utils_1.getStopLossAndTakeProfitTypeByCloseStrategyType)(+subData.closeType);
934
+ // User can have:
935
+ // - Only TakeProfit
936
+ // - Only StopLoss
937
+ // - Both
938
+ _position.strategy.strategyId = enums_1.Strategies.Identifiers.CloseOnPrice;
939
+ _position.specific = {
940
+ market: subData.market,
941
+ troveId: subData.troveId,
942
+ stopLossPrice: triggerData.lowerPrice,
943
+ takeProfitPrice: triggerData.upperPrice,
944
+ closeToAssetAddr: triggerData.tokenAddr,
945
+ takeProfitType,
946
+ stopLossType,
947
+ };
948
+ return _position;
949
+ }
950
+ function parseLiquityV2LeverageManagementOnPrice(position, parseData) {
951
+ const _position = (0, lodash_1.cloneDeep)(position);
952
+ const { subStruct } = parseData.subscriptionEventData;
953
+ const triggerData = triggerService.liquityV2QuotePriceTrigger.decode(subStruct.triggerData);
954
+ const subData = subDataService.liquityV2LeverageManagementOnPriceSubData.decode(subStruct.subData);
955
+ _position.strategyData.decoded.triggerData = triggerData;
956
+ _position.strategyData.decoded.subData = subData;
957
+ _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner, Math.random());
958
+ _position.specific = {
959
+ subHash: _position.subHash,
960
+ market: subData.market,
961
+ troveId: subData.troveId,
962
+ collAsset: subData.collToken,
963
+ debtAsset: subData.boldToken,
964
+ price: triggerData.price,
965
+ ratio: subData.targetRatio,
966
+ ratioState: triggerData.ratioState,
967
+ };
968
+ return _position;
969
+ }
970
+ function parseLiquityV2Payback(position, parseData) {
971
+ const _position = (0, lodash_1.cloneDeep)(position);
972
+ const { subStruct } = parseData.subscriptionEventData;
973
+ const triggerData = triggerService.liquityV2RatioTrigger.decode(subStruct.triggerData);
974
+ const subData = subDataService.liquityV2PaybackSubData.decode(subStruct.subData);
975
+ _position.strategyData.decoded.triggerData = triggerData;
976
+ _position.strategyData.decoded.subData = subData;
977
+ _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner, triggerData.troveId, triggerData.market);
978
+ _position.strategy.strategyId = enums_1.Strategies.Identifiers.Payback;
979
+ _position.specific = {
980
+ subHash: _position.subHash,
981
+ market: subData.market,
982
+ troveId: subData.troveId,
983
+ targetRatio: subData.targetRatio,
984
+ triggerRatio: triggerData.ratio,
985
+ };
986
+ return _position;
987
+ }
988
+ function parseFluidT1LeverageManagement(position, parseData) {
989
+ const _position = (0, lodash_1.cloneDeep)(position);
990
+ const { subStruct, subId, subHash } = parseData.subscriptionEventData;
991
+ const { isEnabled } = parseData.strategiesSubsData;
992
+ const triggerData = triggerService.fluidRatioTrigger.decode(subStruct.triggerData);
993
+ const subData = subDataService.fluidLeverageManagementSubData.decode(subStruct.subData);
994
+ _position.strategyData.decoded.triggerData = triggerData;
995
+ _position.strategyData.decoded.subData = subData;
996
+ _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner, triggerData.nftId, subData.vault);
997
+ const isRepay = _position.strategy.strategyId === enums_1.Strategies.Identifiers.Repay;
998
+ if (isRepay) {
999
+ _position.specific = {
1000
+ triggerRepayRatio: triggerData.ratio,
1001
+ targetRepayRatio: subData.targetRatio,
1002
+ repayEnabled: isEnabled,
1003
+ subId1: Number(subId),
1004
+ subHashRepay: subHash,
1005
+ mergeWithId: enums_1.Strategies.Identifiers.Boost,
1006
+ };
1007
+ }
1008
+ else {
1009
+ _position.specific = {
1010
+ triggerBoostRatio: triggerData.ratio,
1011
+ targetBoostRatio: subData.targetRatio,
1012
+ boostEnabled: isEnabled,
1013
+ subId2: Number(subId),
1014
+ subHashBoost: subHash,
1015
+ mergeId: enums_1.Strategies.Identifiers.Boost,
1016
+ };
1017
+ }
1018
+ _position.strategy.strategyId = enums_1.Strategies.IdOverrides.LeverageManagement;
1019
+ return _position;
1020
+ }
1021
+ const parsingMethodsMapping = {
1022
+ [enums_1.ProtocolIdentifiers.StrategiesAutomation.MakerDAO]: {
1023
+ [enums_1.Strategies.Identifiers.SavingsLiqProtection]: parseMakerSavingsLiqProtection,
1024
+ [enums_1.Strategies.Identifiers.CloseOnPriceToDebt]: parseMakerCloseOnPrice,
1025
+ [enums_1.Strategies.Identifiers.CloseOnPriceToColl]: parseMakerCloseOnPrice,
1026
+ [enums_1.Strategies.Identifiers.TrailingStopToColl]: parseMakerTrailingStop,
1027
+ [enums_1.Strategies.Identifiers.TrailingStopToDebt]: parseMakerTrailingStop,
1028
+ [enums_1.Strategies.Identifiers.Repay]: parseMakerLeverageManagement,
1029
+ [enums_1.Strategies.Identifiers.Boost]: parseMakerLeverageManagement,
1030
+ },
1031
+ [enums_1.ProtocolIdentifiers.StrategiesAutomation.Liquity]: {
1032
+ [enums_1.Strategies.Identifiers.CloseOnPriceToColl]: parseLiquityCloseOnPrice,
1033
+ [enums_1.Strategies.Identifiers.TrailingStopToColl]: parseLiquityTrailingStop,
1034
+ [enums_1.Strategies.Identifiers.BondProtection]: parseLiquityBondProtection,
1035
+ [enums_1.Strategies.Identifiers.Repay]: parseLiquityLeverageManagement,
1036
+ [enums_1.Strategies.Identifiers.Boost]: parseLiquityLeverageManagement,
1037
+ [enums_1.Strategies.Identifiers.SavingsDsrPayback]: parseLiquitySavingsLiqProtection,
1038
+ [enums_1.Strategies.Identifiers.SavingsDsrSupply]: parseLiquitySavingsLiqProtection,
1039
+ [enums_1.Strategies.Identifiers.DebtInFrontRepay]: parseLiquityDebtInFrontRepay,
1040
+ },
1041
+ [enums_1.ProtocolIdentifiers.StrategiesAutomation.LiquityV2]: {
1042
+ [enums_1.Strategies.Identifiers.Repay]: parseLiquityV2LeverageManagement,
1043
+ [enums_1.Strategies.Identifiers.Boost]: parseLiquityV2LeverageManagement,
1044
+ [enums_1.Strategies.Identifiers.CloseOnPrice]: parseLiquityV2CloseOnPrice,
1045
+ [enums_1.Strategies.Identifiers.BoostOnPrice]: parseLiquityV2LeverageManagementOnPrice,
1046
+ [enums_1.Strategies.Identifiers.RepayOnPrice]: parseLiquityV2LeverageManagementOnPrice,
1047
+ [enums_1.Strategies.Identifiers.Payback]: parseLiquityV2Payback,
1048
+ },
1049
+ [enums_1.ProtocolIdentifiers.StrategiesAutomation.AaveV2]: {
1050
+ [enums_1.Strategies.Identifiers.Repay]: parseAaveV2LeverageManagement,
1051
+ [enums_1.Strategies.Identifiers.Boost]: parseAaveV2LeverageManagement,
1052
+ },
1053
+ [enums_1.ProtocolIdentifiers.StrategiesAutomation.AaveV3]: {
1054
+ [enums_1.Strategies.Identifiers.Repay]: parseAaveV3LeverageManagement,
1055
+ [enums_1.Strategies.Identifiers.Boost]: parseAaveV3LeverageManagement,
1056
+ [enums_1.Strategies.Identifiers.CloseToDebt]: parseAaveV3CloseOnPrice,
1057
+ [enums_1.Strategies.Identifiers.CloseToDebtWithGasPrice]: parseAaveV3CloseOnPriceWithMaximumGasPrice,
1058
+ [enums_1.Strategies.Identifiers.CloseToCollateral]: parseAaveV3CloseOnPrice,
1059
+ [enums_1.Strategies.Identifiers.CloseToCollateralWithGasPrice]: parseAaveV3CloseOnPriceWithMaximumGasPrice,
1060
+ [enums_1.Strategies.Identifiers.OpenOrderFromCollateral]: parseAaveV3LeverageManagementOnPrice,
1061
+ [enums_1.Strategies.Identifiers.RepayOnPrice]: parseAaveV3LeverageManagementOnPrice,
1062
+ [enums_1.Strategies.Identifiers.EoaRepay]: parseAaveV3LeverageManagement,
1063
+ [enums_1.Strategies.Identifiers.EoaBoost]: parseAaveV3LeverageManagement,
1064
+ [enums_1.Strategies.Identifiers.EoaRepayOnPrice]: parseAaveV3LeverageManagementOnPrice,
1065
+ [enums_1.Strategies.Identifiers.EoaBoostOnPrice]: parseAaveV3LeverageManagementOnPrice,
1066
+ [enums_1.Strategies.Identifiers.EoaCloseOnPrice]: parseAaveV3CloseOnPrice,
1067
+ [enums_1.Strategies.Identifiers.CollateralSwitch]: parseAaveV3CollateralSwitch,
1068
+ },
1069
+ [enums_1.ProtocolIdentifiers.StrategiesAutomation.AaveV4]: {
1070
+ [enums_1.Strategies.Identifiers.Repay]: parseAaveV4LeverageManagement,
1071
+ [enums_1.Strategies.Identifiers.Boost]: parseAaveV4LeverageManagement,
1072
+ [enums_1.Strategies.Identifiers.RepayOnPrice]: parseAaveV4LeverageManagementOnPrice,
1073
+ [enums_1.Strategies.Identifiers.BoostOnPrice]: parseAaveV4LeverageManagementOnPrice,
1074
+ [enums_1.Strategies.Identifiers.CloseOnPrice]: parseAaveV4CloseOnPrice,
1075
+ [enums_1.Strategies.Identifiers.EoaRepay]: parseAaveV4LeverageManagement,
1076
+ [enums_1.Strategies.Identifiers.EoaBoost]: parseAaveV4LeverageManagement,
1077
+ [enums_1.Strategies.Identifiers.EoaRepayOnPrice]: parseAaveV4LeverageManagementOnPrice,
1078
+ [enums_1.Strategies.Identifiers.EoaBoostOnPrice]: parseAaveV4LeverageManagementOnPrice,
1079
+ [enums_1.Strategies.Identifiers.EoaCloseOnPrice]: parseAaveV4CloseOnPrice,
1080
+ [enums_1.Strategies.Identifiers.CollateralSwitch]: parseAaveV4CollateralSwitch,
1081
+ [enums_1.Strategies.Identifiers.EoaCollateralSwitch]: parseAaveV4CollateralSwitch,
1082
+ },
1083
+ [enums_1.ProtocolIdentifiers.StrategiesAutomation.CompoundV2]: {
1084
+ [enums_1.Strategies.Identifiers.Repay]: parseCompoundV2LeverageManagement,
1085
+ [enums_1.Strategies.Identifiers.Boost]: parseCompoundV2LeverageManagement,
1086
+ },
1087
+ [enums_1.ProtocolIdentifiers.StrategiesAutomation.CompoundV3]: {
1088
+ [enums_1.Strategies.Identifiers.Repay]: parseCompoundV3LeverageManagement,
1089
+ [enums_1.Strategies.Identifiers.Boost]: parseCompoundV3LeverageManagement,
1090
+ [enums_1.Strategies.Identifiers.EoaRepay]: parseCompoundV3LeverageManagement,
1091
+ [enums_1.Strategies.Identifiers.EoaBoost]: parseCompoundV3LeverageManagement,
1092
+ [enums_1.Strategies.Identifiers.RepayOnPrice]: parseCompoundV3LeverageManagementOnPrice,
1093
+ [enums_1.Strategies.Identifiers.BoostOnPrice]: parseCompoundV3LeverageManagementOnPrice,
1094
+ [enums_1.Strategies.Identifiers.EoaRepayOnPrice]: parseCompoundV3LeverageManagementOnPrice,
1095
+ [enums_1.Strategies.Identifiers.EoaBoostOnPrice]: parseCompoundV3LeverageManagementOnPrice,
1096
+ [enums_1.Strategies.Identifiers.CloseOnPrice]: parseCompoundV3CloseOnPrice,
1097
+ [enums_1.Strategies.Identifiers.EoaCloseOnPrice]: parseCompoundV3CloseOnPrice,
1098
+ },
1099
+ [enums_1.ProtocolIdentifiers.StrategiesAutomation.ChickenBonds]: {
1100
+ [enums_1.Strategies.Identifiers.Rebond]: parseChickenBondsRebond,
1101
+ },
1102
+ [enums_1.ProtocolIdentifiers.StrategiesAutomation.MorphoAaveV2]: {
1103
+ [enums_1.Strategies.Identifiers.Repay]: parseMorphoAaveV2LeverageManagement,
1104
+ [enums_1.Strategies.Identifiers.Boost]: parseMorphoAaveV2LeverageManagement,
1105
+ },
1106
+ [enums_1.ProtocolIdentifiers.StrategiesAutomation.Exchange]: {
1107
+ [enums_1.Strategies.Identifiers.Dca]: parseExchangeDca,
1108
+ [enums_1.Strategies.Identifiers.LimitOrder]: parseExchangeLimitOrder,
1109
+ },
1110
+ [enums_1.ProtocolIdentifiers.StrategiesAutomation.Spark]: {
1111
+ [enums_1.Strategies.Identifiers.Repay]: parseSparkLeverageManagement,
1112
+ [enums_1.Strategies.Identifiers.Boost]: parseSparkLeverageManagement,
1113
+ [enums_1.Strategies.Identifiers.RepayOnPrice]: parseSparkLeverageManagementOnPrice,
1114
+ [enums_1.Strategies.Identifiers.BoostOnPrice]: parseSparkLeverageManagementOnPrice,
1115
+ [enums_1.Strategies.Identifiers.CloseOnPrice]: parseSparkCloseOnPrice,
1116
+ [enums_1.Strategies.Identifiers.CollateralSwitch]: parseSparkCollateralSwitch,
1117
+ },
1118
+ [enums_1.ProtocolIdentifiers.StrategiesAutomation.CrvUSD]: {
1119
+ [enums_1.Strategies.Identifiers.Repay]: parseCrvUSDLeverageManagement,
1120
+ [enums_1.Strategies.Identifiers.Boost]: parseCrvUSDLeverageManagement,
1121
+ [enums_1.Strategies.Identifiers.Payback]: parseCrvUSDPayback,
1122
+ },
1123
+ [enums_1.ProtocolIdentifiers.StrategiesAutomation.MorphoBlue]: {
1124
+ [enums_1.Strategies.Identifiers.Repay]: parseMorphoBlueLeverageManagement,
1125
+ [enums_1.Strategies.Identifiers.Boost]: parseMorphoBlueLeverageManagement,
1126
+ [enums_1.Strategies.Identifiers.EoaRepay]: parseMorphoBlueLeverageManagement,
1127
+ [enums_1.Strategies.Identifiers.EoaBoost]: parseMorphoBlueLeverageManagement,
1128
+ [enums_1.Strategies.Identifiers.BoostOnPrice]: parseMorphoBlueLeverageManagementOnPrice,
1129
+ [enums_1.Strategies.Identifiers.CloseOnPrice]: parseMorphoBlueCloseOnPrice,
1130
+ },
1131
+ [enums_1.ProtocolIdentifiers.StrategiesAutomation.FluidT1]: {
1132
+ [enums_1.Strategies.Identifiers.Repay]: parseFluidT1LeverageManagement,
1133
+ [enums_1.Strategies.Identifiers.Boost]: parseFluidT1LeverageManagement,
1134
+ },
1135
+ };
1136
+ function getParsingMethod(id, strategy) {
1137
+ return parsingMethodsMapping[id][strategy.strategyId];
1138
+ }
1139
+ function parseStrategiesAutomatedPosition(parseData) {
1140
+ const { chainId, blockNumber, subscriptionEventData, strategiesSubsData, } = parseData;
1141
+ const { subStruct, proxy, subId, subHash, } = subscriptionEventData;
1142
+ const { isEnabled } = strategiesSubsData;
1143
+ const id = subStruct.strategyOrBundleId;
1144
+ const strategyOrBundleInfo = (subStruct.isBundle
1145
+ ? constants_1.BUNDLES_INFO[chainId][id]
1146
+ : constants_1.STRATEGIES_INFO[chainId][id]);
1147
+ if (!strategyOrBundleInfo)
1148
+ return null;
1149
+ const position = {
1150
+ isEnabled,
1151
+ chainId,
1152
+ subHash,
1153
+ blockNumber,
1154
+ positionId: 'positionId parsing not implemented.',
1155
+ subId: Number(subId),
1156
+ owner: proxy.toLowerCase(),
1157
+ protocol: Object.assign({}, strategyOrBundleInfo.protocol),
1158
+ strategy: Object.assign({ isBundle: subStruct.isBundle }, strategyOrBundleInfo),
1159
+ strategyData: {
1160
+ encoded: {
1161
+ triggerData: subStruct.triggerData,
1162
+ subData: subStruct.subData,
1163
+ },
1164
+ decoded: {
1165
+ triggerData: null,
1166
+ subData: null,
1167
+ },
1168
+ },
1169
+ specific: {},
1170
+ };
1171
+ return getParsingMethod(position.protocol.id, position.strategy)(position, parseData, chainId);
1172
+ }
1173
+ exports.parseStrategiesAutomatedPosition = parseStrategiesAutomatedPosition;