@defisaver/automation-sdk 3.0.9 → 3.1.1-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 (242) hide show
  1. package/.babelrc +3 -3
  2. package/.editorconfig +9 -9
  3. package/.env.dev +4 -4
  4. package/.eslintignore +6 -7
  5. package/.eslintrc.js +39 -41
  6. package/.mocharc.json +5 -0
  7. package/.nvmrc +1 -0
  8. package/README.md +47 -41
  9. package/cjs/abis/Erc20.json +223 -0
  10. package/cjs/abis/SubStorage.json +21 -0
  11. package/cjs/abis/UniMulticall.json +17 -0
  12. package/cjs/abis/index.d.ts +9 -0
  13. package/cjs/abis/index.js +30 -0
  14. package/cjs/abis/legacy_AaveV2Subscriptions.json +8 -0
  15. package/cjs/abis/legacy_AuthCheck.json +8 -0
  16. package/cjs/abis/legacy_CompoundV2Subscriptions.json +9 -0
  17. package/cjs/abis/legacy_MakerSubscriptions.json +9 -0
  18. package/cjs/automation/private/Automation.d.ts +12 -0
  19. package/cjs/automation/private/Automation.js +42 -0
  20. package/cjs/automation/private/LegacyAutomation.d.ts +25 -0
  21. package/cjs/automation/private/LegacyAutomation.js +118 -0
  22. package/cjs/automation/private/LegacyProtocol.d.ts +22 -0
  23. package/cjs/automation/private/LegacyProtocol.js +41 -0
  24. package/cjs/automation/private/LegacyProtocol.test.d.ts +1 -0
  25. package/cjs/automation/private/LegacyProtocol.test.js +25 -0
  26. package/cjs/automation/private/Protocol.d.ts +22 -0
  27. package/cjs/automation/private/Protocol.js +41 -0
  28. package/cjs/automation/private/Protocol.test.d.ts +1 -0
  29. package/cjs/automation/private/Protocol.test.js +25 -0
  30. package/cjs/automation/private/StrategiesAutomation.d.ts +33 -0
  31. package/cjs/automation/private/StrategiesAutomation.js +181 -0
  32. package/cjs/automation/private/StrategiesAutomation.test.d.ts +1 -0
  33. package/cjs/automation/private/StrategiesAutomation.test.js +671 -0
  34. package/cjs/automation/public/ArbitrumStrategies.d.ts +5 -0
  35. package/cjs/automation/public/ArbitrumStrategies.js +13 -0
  36. package/cjs/automation/public/BaseStrategies.d.ts +5 -0
  37. package/cjs/automation/public/BaseStrategies.js +13 -0
  38. package/cjs/automation/public/EthereumStrategies.d.ts +5 -0
  39. package/cjs/automation/public/EthereumStrategies.js +13 -0
  40. package/cjs/automation/public/OptimismStrategies.d.ts +5 -0
  41. package/cjs/automation/public/OptimismStrategies.js +13 -0
  42. package/cjs/automation/public/legacy/LegacyAaveAutomation.d.ts +6 -0
  43. package/cjs/automation/public/legacy/LegacyAaveAutomation.js +20 -0
  44. package/cjs/automation/public/legacy/LegacyCompoundAutomation.d.ts +6 -0
  45. package/cjs/automation/public/legacy/LegacyCompoundAutomation.js +20 -0
  46. package/cjs/automation/public/legacy/LegacyMakerAutomation.d.ts +6 -0
  47. package/cjs/automation/public/legacy/LegacyMakerAutomation.js +20 -0
  48. package/cjs/configuration.d.ts +1 -0
  49. package/cjs/configuration.js +12 -0
  50. package/cjs/constants/index.d.ts +28 -0
  51. package/cjs/constants/index.js +484 -0
  52. package/cjs/index.d.ts +23 -0
  53. package/cjs/index.js +65 -0
  54. package/cjs/services/contractService.d.ts +12 -0
  55. package/cjs/services/contractService.js +54 -0
  56. package/cjs/services/ethereumService.d.ts +7 -0
  57. package/cjs/services/ethereumService.js +49 -0
  58. package/cjs/services/ethereumService.test.d.ts +1 -0
  59. package/cjs/services/ethereumService.test.js +242 -0
  60. package/cjs/services/strategiesService.d.ts +2 -0
  61. package/cjs/services/strategiesService.js +758 -0
  62. package/cjs/services/strategiesService.test.d.ts +1 -0
  63. package/cjs/services/strategiesService.test.js +110 -0
  64. package/cjs/services/strategySubService.d.ts +103 -0
  65. package/cjs/services/strategySubService.js +277 -0
  66. package/cjs/services/strategySubService.test.d.ts +1 -0
  67. package/cjs/services/strategySubService.test.js +934 -0
  68. package/cjs/services/subDataService.d.ts +201 -0
  69. package/cjs/services/subDataService.js +499 -0
  70. package/cjs/services/subDataService.test.d.ts +1 -0
  71. package/cjs/services/subDataService.test.js +1282 -0
  72. package/cjs/services/triggerService.d.ts +200 -0
  73. package/cjs/services/triggerService.js +382 -0
  74. package/cjs/services/triggerService.test.d.ts +1 -0
  75. package/cjs/services/triggerService.test.js +926 -0
  76. package/cjs/services/utils.d.ts +25 -0
  77. package/cjs/services/utils.js +131 -0
  78. package/cjs/services/utils.test.d.ts +1 -0
  79. package/cjs/services/utils.test.js +376 -0
  80. package/cjs/types/contracts/generated/Erc20.d.ts +53 -0
  81. package/cjs/types/contracts/generated/Erc20.js +5 -0
  82. package/cjs/types/contracts/generated/Legacy_AaveV2Subscriptions.d.ts +129 -0
  83. package/cjs/types/contracts/generated/Legacy_AaveV2Subscriptions.js +5 -0
  84. package/cjs/types/contracts/generated/Legacy_AuthCheck.d.ts +20 -0
  85. package/cjs/types/contracts/generated/Legacy_AuthCheck.js +5 -0
  86. package/cjs/types/contracts/generated/Legacy_CompoundV2Subscriptions.d.ts +128 -0
  87. package/cjs/types/contracts/generated/Legacy_CompoundV2Subscriptions.js +5 -0
  88. package/cjs/types/contracts/generated/Legacy_MakerSubscriptions.d.ts +246 -0
  89. package/cjs/types/contracts/generated/Legacy_MakerSubscriptions.js +5 -0
  90. package/cjs/types/contracts/generated/SubStorage.d.ts +114 -0
  91. package/cjs/types/contracts/generated/SubStorage.js +5 -0
  92. package/cjs/types/contracts/generated/UniMulticall.d.ts +55 -0
  93. package/cjs/types/contracts/generated/UniMulticall.js +5 -0
  94. package/cjs/types/contracts/generated/index.d.ts +7 -0
  95. package/cjs/types/contracts/generated/index.js +2 -0
  96. package/cjs/types/contracts/generated/types.d.ts +54 -0
  97. package/cjs/types/contracts/generated/types.js +2 -0
  98. package/cjs/types/enums.d.ts +192 -0
  99. package/cjs/types/enums.js +216 -0
  100. package/cjs/types/index.d.ts +224 -0
  101. package/cjs/types/index.js +2 -0
  102. package/esm/abis/Erc20.json +223 -223
  103. package/esm/abis/SubStorage.json +21 -17
  104. package/esm/abis/UniMulticall.json +17 -14
  105. package/esm/abis/index.d.ts +9 -9
  106. package/esm/abis/index.js +18 -30
  107. package/esm/abis/legacy_AaveV2Subscriptions.json +8 -8
  108. package/esm/abis/legacy_AuthCheck.json +8 -8
  109. package/esm/abis/legacy_CompoundV2Subscriptions.json +9 -9
  110. package/esm/abis/legacy_MakerSubscriptions.json +9 -9
  111. package/esm/automation/private/Automation.d.ts +12 -12
  112. package/esm/automation/private/Automation.js +39 -42
  113. package/esm/automation/private/LegacyAutomation.d.ts +25 -25
  114. package/esm/automation/private/LegacyAutomation.js +112 -118
  115. package/esm/automation/private/LegacyProtocol.d.ts +22 -22
  116. package/esm/automation/private/LegacyProtocol.js +38 -41
  117. package/esm/automation/private/LegacyProtocol.test.d.ts +1 -1
  118. package/esm/automation/private/LegacyProtocol.test.js +20 -25
  119. package/esm/automation/private/Protocol.d.ts +22 -22
  120. package/esm/automation/private/Protocol.js +38 -41
  121. package/esm/automation/private/Protocol.test.d.ts +1 -1
  122. package/esm/automation/private/Protocol.test.js +20 -25
  123. package/esm/automation/private/StrategiesAutomation.d.ts +33 -33
  124. package/esm/automation/private/StrategiesAutomation.js +175 -181
  125. package/esm/automation/private/StrategiesAutomation.test.d.ts +1 -1
  126. package/esm/automation/private/StrategiesAutomation.test.js +666 -671
  127. package/esm/automation/public/ArbitrumStrategies.d.ts +5 -5
  128. package/esm/automation/public/ArbitrumStrategies.js +7 -13
  129. package/esm/automation/public/BaseStrategies.d.ts +5 -0
  130. package/esm/automation/public/BaseStrategies.js +7 -0
  131. package/esm/automation/public/EthereumStrategies.d.ts +5 -5
  132. package/esm/automation/public/EthereumStrategies.js +7 -13
  133. package/esm/automation/public/OptimismStrategies.d.ts +5 -5
  134. package/esm/automation/public/OptimismStrategies.js +7 -13
  135. package/esm/automation/public/legacy/LegacyAaveAutomation.d.ts +6 -6
  136. package/esm/automation/public/legacy/LegacyAaveAutomation.js +14 -20
  137. package/esm/automation/public/legacy/LegacyCompoundAutomation.d.ts +6 -6
  138. package/esm/automation/public/legacy/LegacyCompoundAutomation.js +14 -20
  139. package/esm/automation/public/legacy/LegacyMakerAutomation.d.ts +6 -6
  140. package/esm/automation/public/legacy/LegacyMakerAutomation.js +14 -20
  141. package/esm/configuration.d.ts +1 -1
  142. package/esm/configuration.js +7 -12
  143. package/esm/constants/index.d.ts +28 -24
  144. package/esm/constants/index.js +478 -426
  145. package/esm/index.d.ts +23 -22
  146. package/esm/index.js +23 -63
  147. package/esm/services/contractService.d.ts +12 -12
  148. package/esm/services/contractService.js +45 -54
  149. package/esm/services/ethereumService.d.ts +7 -7
  150. package/esm/services/ethereumService.js +41 -49
  151. package/esm/services/ethereumService.test.d.ts +1 -1
  152. package/esm/services/ethereumService.test.js +237 -242
  153. package/esm/services/strategiesService.d.ts +2 -2
  154. package/esm/services/strategiesService.js +731 -722
  155. package/esm/services/strategiesService.test.d.ts +1 -1
  156. package/esm/services/strategiesService.test.js +108 -110
  157. package/esm/services/strategySubService.d.ts +103 -100
  158. package/esm/services/strategySubService.js +248 -264
  159. package/esm/services/strategySubService.test.d.ts +1 -1
  160. package/esm/services/strategySubService.test.js +906 -934
  161. package/esm/services/subDataService.d.ts +201 -192
  162. package/esm/services/subDataService.js +493 -475
  163. package/esm/services/subDataService.test.d.ts +1 -1
  164. package/esm/services/subDataService.test.js +1254 -1282
  165. package/esm/services/triggerService.d.ts +200 -191
  166. package/esm/services/triggerService.js +353 -367
  167. package/esm/services/triggerService.test.d.ts +1 -1
  168. package/esm/services/triggerService.test.js +901 -926
  169. package/esm/services/utils.d.ts +25 -25
  170. package/esm/services/utils.js +82 -131
  171. package/esm/services/utils.test.d.ts +1 -1
  172. package/esm/services/utils.test.js +348 -376
  173. package/esm/types/contracts/generated/Erc20.d.ts +53 -53
  174. package/esm/types/contracts/generated/Erc20.js +4 -5
  175. package/esm/types/contracts/generated/Legacy_AaveV2Subscriptions.d.ts +129 -129
  176. package/esm/types/contracts/generated/Legacy_AaveV2Subscriptions.js +4 -5
  177. package/esm/types/contracts/generated/Legacy_AuthCheck.d.ts +20 -20
  178. package/esm/types/contracts/generated/Legacy_AuthCheck.js +4 -5
  179. package/esm/types/contracts/generated/Legacy_CompoundV2Subscriptions.d.ts +128 -128
  180. package/esm/types/contracts/generated/Legacy_CompoundV2Subscriptions.js +4 -5
  181. package/esm/types/contracts/generated/Legacy_MakerSubscriptions.d.ts +246 -246
  182. package/esm/types/contracts/generated/Legacy_MakerSubscriptions.js +4 -5
  183. package/esm/types/contracts/generated/SubStorage.d.ts +114 -114
  184. package/esm/types/contracts/generated/SubStorage.js +4 -5
  185. package/esm/types/contracts/generated/UniMulticall.d.ts +55 -55
  186. package/esm/types/contracts/generated/UniMulticall.js +4 -5
  187. package/esm/types/contracts/generated/index.d.ts +7 -7
  188. package/esm/types/contracts/generated/index.js +1 -2
  189. package/esm/types/contracts/generated/types.d.ts +54 -54
  190. package/esm/types/contracts/generated/types.js +1 -2
  191. package/esm/types/enums.d.ts +192 -168
  192. package/esm/types/enums.js +213 -188
  193. package/esm/types/index.d.ts +224 -220
  194. package/esm/types/index.js +1 -2
  195. package/package.json +61 -71
  196. package/scripts/generateContractTypes.js +39 -39
  197. package/src/abis/Erc20.json +222 -222
  198. package/src/abis/SubStorage.json +21 -17
  199. package/src/abis/UniMulticall.json +17 -14
  200. package/src/abis/index.ts +28 -28
  201. package/src/abis/legacy_AaveV2Subscriptions.json +7 -7
  202. package/src/abis/legacy_AuthCheck.json +7 -7
  203. package/src/abis/legacy_CompoundV2Subscriptions.json +8 -8
  204. package/src/abis/legacy_MakerSubscriptions.json +8 -8
  205. package/src/automation/private/Automation.ts +44 -44
  206. package/src/automation/private/LegacyAutomation.ts +135 -135
  207. package/src/automation/private/LegacyProtocol.test.ts +23 -23
  208. package/src/automation/private/LegacyProtocol.ts +51 -51
  209. package/src/automation/private/Protocol.test.ts +23 -23
  210. package/src/automation/private/Protocol.ts +51 -51
  211. package/src/automation/private/StrategiesAutomation.test.ts +663 -663
  212. package/src/automation/private/StrategiesAutomation.ts +242 -242
  213. package/src/automation/public/ArbitrumStrategies.ts +10 -10
  214. package/src/automation/public/BaseStrategies.ts +10 -0
  215. package/src/automation/public/EthereumStrategies.ts +10 -10
  216. package/src/automation/public/OptimismStrategies.ts +10 -10
  217. package/src/automation/public/legacy/LegacyAaveAutomation.ts +20 -20
  218. package/src/automation/public/legacy/LegacyCompoundAutomation.ts +20 -20
  219. package/src/automation/public/legacy/LegacyMakerAutomation.ts +20 -20
  220. package/src/configuration.ts +8 -8
  221. package/src/constants/index.ts +502 -441
  222. package/src/index.ts +39 -38
  223. package/src/services/contractService.ts +77 -77
  224. package/src/services/ethereumService.test.ts +257 -257
  225. package/src/services/ethereumService.ts +69 -69
  226. package/src/services/strategiesService.test.ts +105 -105
  227. package/src/services/strategiesService.ts +979 -932
  228. package/src/services/strategySubService.test.ts +1119 -1119
  229. package/src/services/strategySubService.ts +542 -518
  230. package/src/services/subDataService.test.ts +1387 -1387
  231. package/src/services/subDataService.ts +681 -645
  232. package/src/services/triggerService.test.ts +1004 -1004
  233. package/src/services/triggerService.ts +472 -449
  234. package/src/services/utils.test.ts +430 -430
  235. package/src/services/utils.ts +103 -103
  236. package/src/types/enums.ts +210 -182
  237. package/src/types/index.ts +279 -273
  238. package/tsconfig.esm.json +8 -0
  239. package/tsconfig.json +22 -79
  240. package/umd/index.js +17 -133
  241. package/.tests.sh +0 -3
  242. package/webpack.umd.js +0 -52
@@ -1,722 +1,731 @@
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
- Object.defineProperty(exports, "__esModule", { value: true });
26
- exports.parseStrategiesAutomatedPosition = void 0;
27
- const tokens_1 = require("@defisaver/tokens");
28
- const lodash_1 = require("lodash");
29
- const constants_1 = require("../constants");
30
- const enums_1 = require("../types/enums");
31
- const utils_1 = require("./utils");
32
- const subDataService = __importStar(require("./subDataService"));
33
- const triggerService = __importStar(require("./triggerService"));
34
- const SPARK_MARKET_ADDRESSES = {
35
- [enums_1.ChainId.Ethereum]: '0x02C3eA4e34C0cBd694D2adFa2c690EECbC1793eE',
36
- };
37
- const AAVE_V3_MARKET_ADDRESSES = {
38
- [enums_1.ChainId.Ethereum]: '0x2f39d218133AFaB8F2B819B1066c7E434Ad94E9e',
39
- [enums_1.ChainId.Optimism]: '0xa97684ead0e402dC232d5A977953DF7ECBaB3CDb',
40
- [enums_1.ChainId.Arbitrum]: '0xa97684ead0e402dC232d5A977953DF7ECBaB3CDb',
41
- };
42
- function parseMakerSavingsLiqProtection(position, parseData) {
43
- const _position = (0, lodash_1.cloneDeep)(position);
44
- const { subStruct } = parseData.subscriptionEventData;
45
- const triggerData = triggerService.makerRatioTrigger.decode(subStruct.triggerData);
46
- const subData = subDataService.makerRepayFromSavingsSubData.decode(subStruct.subData);
47
- _position.strategyData.decoded.triggerData = triggerData;
48
- _position.strategyData.decoded.subData = subData;
49
- _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, subData.vaultId);
50
- _position.specific = {
51
- triggerRepayRatio: Number(triggerData.ratio),
52
- targetRepayRatio: Number(subData.targetRatio),
53
- repayEnabled: true,
54
- boostEnabled: false,
55
- };
56
- return _position;
57
- }
58
- function parseMakerCloseOnPrice(position, parseData) {
59
- const _position = (0, lodash_1.cloneDeep)(position);
60
- const { subStruct } = parseData.subscriptionEventData;
61
- const triggerData = triggerService.chainlinkPriceTrigger.decode(subStruct.triggerData);
62
- const subData = subDataService.makerCloseSubData.decode(subStruct.subData);
63
- _position.strategyData.decoded.triggerData = triggerData;
64
- _position.strategyData.decoded.subData = subData;
65
- _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, subData.vaultId);
66
- const isTakeProfit = (0, utils_1.isRatioStateOver)(Number(triggerData.state));
67
- _position.strategy.strategyId = isTakeProfit ? enums_1.Strategies.IdOverrides.TakeProfit : enums_1.Strategies.IdOverrides.StopLoss;
68
- _position.specific = {
69
- price: triggerData.price,
70
- closeToAssetAddr: subData.closeToAssetAddr,
71
- };
72
- return _position;
73
- }
74
- function parseMakerTrailingStop(position, parseData) {
75
- const _position = (0, lodash_1.cloneDeep)(position);
76
- const { subStruct } = parseData.subscriptionEventData;
77
- const triggerData = triggerService.trailingStopTrigger.decode(subStruct.triggerData);
78
- const subData = subDataService.makerCloseSubData.decode(subStruct.subData);
79
- _position.strategyData.decoded.triggerData = triggerData;
80
- _position.strategyData.decoded.subData = subData;
81
- _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, subData.vaultId);
82
- _position.strategy.strategyId = enums_1.Strategies.IdOverrides.TrailingStop;
83
- _position.specific = {
84
- triggerPercentage: Number(triggerData.triggerPercentage),
85
- roundId: Number(triggerData.roundId),
86
- closeToAssetAddr: subData.closeToAssetAddr,
87
- };
88
- return _position;
89
- }
90
- function parseMakerLeverageManagement(position, parseData) {
91
- const _position = (0, lodash_1.cloneDeep)(position);
92
- const { subStruct, subId } = parseData.subscriptionEventData;
93
- const { isEnabled } = parseData.strategiesSubsData;
94
- const triggerData = triggerService.makerRatioTrigger.decode(subStruct.triggerData);
95
- const subData = subDataService.makerLeverageManagementSubData.decode(subStruct.subData);
96
- _position.strategyData.decoded.triggerData = triggerData;
97
- _position.strategyData.decoded.subData = subData;
98
- _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, subData.vaultId);
99
- const isRepay = _position.strategy.strategyId === enums_1.Strategies.Identifiers.Repay;
100
- if (isRepay) {
101
- _position.specific = {
102
- triggerRepayRatio: triggerData.ratio,
103
- targetRepayRatio: subData.targetRatio,
104
- repayEnabled: true,
105
- subId1: Number(subId),
106
- mergeWithId: enums_1.Strategies.Identifiers.Boost,
107
- };
108
- }
109
- else {
110
- _position.specific = {
111
- triggerBoostRatio: triggerData.ratio,
112
- targetBoostRatio: subData.targetRatio,
113
- boostEnabled: isEnabled,
114
- subId2: Number(subId),
115
- mergeId: enums_1.Strategies.Identifiers.Boost,
116
- };
117
- }
118
- _position.strategy.strategyId = enums_1.Strategies.IdOverrides.LeverageManagement;
119
- return _position;
120
- }
121
- function parseLiquityCloseOnPrice(position, parseData) {
122
- const _position = (0, lodash_1.cloneDeep)(position);
123
- const { subStruct } = parseData.subscriptionEventData;
124
- const triggerData = triggerService.chainlinkPriceTrigger.decode(subStruct.triggerData);
125
- const subData = subDataService.liquityCloseSubData.decode(subStruct.subData);
126
- _position.strategyData.decoded.triggerData = triggerData;
127
- _position.strategyData.decoded.subData = subData;
128
- _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner);
129
- const isTakeProfit = (0, utils_1.isRatioStateOver)(Number(triggerData.state));
130
- _position.strategy.strategyId = isTakeProfit ? enums_1.Strategies.IdOverrides.TakeProfit : enums_1.Strategies.IdOverrides.StopLoss;
131
- _position.specific = {
132
- price: triggerData.price,
133
- closeToAssetAddr: subData.closeToAssetAddr,
134
- };
135
- return _position;
136
- }
137
- function parseLiquityTrailingStop(position, parseData) {
138
- const _position = (0, lodash_1.cloneDeep)(position);
139
- const { subStruct } = parseData.subscriptionEventData;
140
- const triggerData = triggerService.trailingStopTrigger.decode(subStruct.triggerData);
141
- const subData = subDataService.liquityCloseSubData.decode(subStruct.subData);
142
- _position.strategyData.decoded.triggerData = triggerData;
143
- _position.strategyData.decoded.subData = subData;
144
- _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner);
145
- _position.strategy.strategyId = enums_1.Strategies.IdOverrides.TrailingStop;
146
- _position.specific = {
147
- triggerPercentage: Number(triggerData.triggerPercentage),
148
- roundId: Number(triggerData.roundId),
149
- closeToAssetAddr: subData.closeToAssetAddr,
150
- };
151
- return _position;
152
- }
153
- function parseAaveV2LeverageManagement(position, parseData) {
154
- const _position = (0, lodash_1.cloneDeep)(position);
155
- const { subStruct, subId } = parseData.subscriptionEventData;
156
- const { isEnabled } = parseData.strategiesSubsData;
157
- const triggerData = triggerService.aaveV2RatioTrigger.decode(subStruct.triggerData);
158
- const subData = subDataService.aaveV2LeverageManagementSubData.decode(subStruct.subData);
159
- _position.strategyData.decoded.triggerData = triggerData;
160
- _position.strategyData.decoded.subData = subData;
161
- _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner, triggerData.market);
162
- const isRepay = _position.strategy.strategyId === enums_1.Strategies.Identifiers.Repay;
163
- if (isRepay) {
164
- _position.specific = {
165
- triggerRepayRatio: triggerData.ratio,
166
- targetRepayRatio: subData.targetRatio,
167
- repayEnabled: true,
168
- subId1: Number(subId),
169
- mergeWithId: enums_1.Strategies.Identifiers.Boost,
170
- };
171
- }
172
- else {
173
- _position.specific = {
174
- triggerBoostRatio: triggerData.ratio,
175
- targetBoostRatio: subData.targetRatio,
176
- boostEnabled: isEnabled,
177
- subId2: Number(subId),
178
- mergeId: enums_1.Strategies.Identifiers.Boost,
179
- };
180
- }
181
- _position.strategy.strategyId = enums_1.Strategies.IdOverrides.LeverageManagement;
182
- return _position;
183
- }
184
- function parseAaveV3LeverageManagement(position, parseData) {
185
- const _position = (0, lodash_1.cloneDeep)(position);
186
- const { subStruct, subId } = parseData.subscriptionEventData;
187
- const { isEnabled } = parseData.strategiesSubsData;
188
- const triggerData = triggerService.aaveV3RatioTrigger.decode(subStruct.triggerData);
189
- const subData = subDataService.aaveV3LeverageManagementSubData.decode(subStruct.subData);
190
- _position.strategyData.decoded.triggerData = triggerData;
191
- _position.strategyData.decoded.subData = subData;
192
- _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner, triggerData.market);
193
- const isRepay = _position.strategy.strategyId === enums_1.Strategies.Identifiers.Repay;
194
- if (isRepay) {
195
- _position.specific = {
196
- triggerRepayRatio: triggerData.ratio,
197
- targetRepayRatio: subData.targetRatio,
198
- repayEnabled: true,
199
- subId1: Number(subId),
200
- mergeWithId: enums_1.Strategies.Identifiers.Boost,
201
- };
202
- }
203
- else {
204
- _position.specific = {
205
- triggerBoostRatio: triggerData.ratio,
206
- targetBoostRatio: subData.targetRatio,
207
- boostEnabled: isEnabled,
208
- subId2: Number(subId),
209
- mergeId: enums_1.Strategies.Identifiers.Boost,
210
- };
211
- }
212
- _position.strategy.strategyId = enums_1.Strategies.IdOverrides.LeverageManagement;
213
- return _position;
214
- }
215
- function parseMorphoAaveV2LeverageManagement(position, parseData) {
216
- const _position = (0, lodash_1.cloneDeep)(position);
217
- const { subStruct, subId } = parseData.subscriptionEventData;
218
- const { isEnabled } = parseData.strategiesSubsData;
219
- const triggerData = triggerService.morphoAaveV2RatioTrigger.decode(subStruct.triggerData);
220
- const subData = subDataService.morphoAaveV2LeverageManagementSubData.decode(subStruct.subData);
221
- _position.strategyData.decoded.triggerData = triggerData;
222
- _position.strategyData.decoded.subData = subData;
223
- _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner);
224
- const isRepay = _position.strategy.strategyId === enums_1.Strategies.Identifiers.Repay;
225
- if (isRepay) {
226
- _position.specific = {
227
- triggerRepayRatio: triggerData.ratio,
228
- targetRepayRatio: subData.targetRatio,
229
- repayEnabled: true,
230
- subId1: Number(subId),
231
- mergeWithId: enums_1.Strategies.Identifiers.Boost,
232
- };
233
- }
234
- else {
235
- _position.specific = {
236
- triggerBoostRatio: triggerData.ratio,
237
- targetBoostRatio: subData.targetRatio,
238
- boostEnabled: isEnabled,
239
- subId2: Number(subId),
240
- mergeId: enums_1.Strategies.Identifiers.Boost,
241
- };
242
- }
243
- _position.strategy.strategyId = enums_1.Strategies.IdOverrides.LeverageManagement;
244
- return _position;
245
- }
246
- function parseAaveV3CloseOnPrice(position, parseData) {
247
- const _position = (0, lodash_1.cloneDeep)(position);
248
- const { subStruct } = parseData.subscriptionEventData;
249
- const triggerData = triggerService.aaveV3QuotePriceTrigger.decode(subStruct.triggerData);
250
- const subData = subDataService.aaveV3QuotePriceSubData.decode(subStruct.subData);
251
- _position.strategyData.decoded.triggerData = triggerData;
252
- _position.strategyData.decoded.subData = subData;
253
- _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner, AAVE_V3_MARKET_ADDRESSES[_position.chainId]);
254
- _position.specific = {
255
- collAsset: subData.collAsset,
256
- collAssetId: subData.collAssetId,
257
- debtAsset: subData.debtAsset,
258
- debtAssetId: subData.debtAssetId,
259
- baseToken: triggerData.baseTokenAddress,
260
- quoteToken: triggerData.quoteTokenAddress,
261
- price: triggerData.price,
262
- ratioState: triggerData.ratioState,
263
- };
264
- 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);
265
- _position.strategy.strategyId = (0, utils_1.isRatioStateOver)(ratioState) ? enums_1.Strategies.IdOverrides.TakeProfit : enums_1.Strategies.IdOverrides.StopLoss;
266
- return _position;
267
- }
268
- function parseAaveV3CloseOnPriceWithMaximumGasPrice(position, parseData) {
269
- const _position = (0, lodash_1.cloneDeep)(position);
270
- const { subStruct } = parseData.subscriptionEventData;
271
- const triggerData = triggerService.aaveV3QuotePriceWithMaximumGasPriceTrigger.decode(subStruct.triggerData);
272
- const subData = subDataService.aaveV3QuotePriceSubData.decode(subStruct.subData);
273
- _position.strategyData.decoded.triggerData = triggerData;
274
- _position.strategyData.decoded.subData = subData;
275
- _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner, AAVE_V3_MARKET_ADDRESSES[_position.chainId]);
276
- _position.specific = {
277
- collAsset: subData.collAsset,
278
- collAssetId: subData.collAssetId,
279
- debtAsset: subData.debtAsset,
280
- debtAssetId: subData.debtAssetId,
281
- baseToken: triggerData.baseTokenAddress,
282
- quoteToken: triggerData.quoteTokenAddress,
283
- price: triggerData.price,
284
- maximumGasPrice: triggerData.maximumGasPrice,
285
- ratioState: triggerData.ratioState,
286
- };
287
- 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);
288
- _position.strategy.strategyId = (0, utils_1.isRatioStateOver)(ratioState)
289
- ? enums_1.Strategies.IdOverrides.TakeProfitWithGasPrice
290
- : enums_1.Strategies.IdOverrides.StopLossWithGasPrice;
291
- return _position;
292
- }
293
- function parseCompoundV2LeverageManagement(position, parseData) {
294
- const _position = (0, lodash_1.cloneDeep)(position);
295
- const { subStruct, subId } = parseData.subscriptionEventData;
296
- const { isEnabled } = parseData.strategiesSubsData;
297
- const triggerData = triggerService.compoundV2RatioTrigger.decode(subStruct.triggerData);
298
- const subData = subDataService.compoundV2LeverageManagementSubData.decode(subStruct.subData);
299
- _position.strategyData.decoded.triggerData = triggerData;
300
- _position.strategyData.decoded.subData = subData;
301
- _position.owner = triggerData.owner.toLowerCase();
302
- _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner);
303
- const isRepay = [enums_1.Strategies.Identifiers.Repay, enums_1.Strategies.Identifiers.EoaRepay].includes(_position.strategy.strategyId);
304
- if (isRepay) {
305
- _position.specific = {
306
- triggerRepayRatio: triggerData.ratio,
307
- targetRepayRatio: subData.targetRatio,
308
- repayEnabled: true,
309
- subId1: Number(subId),
310
- mergeWithId: enums_1.Strategies.Identifiers.Boost,
311
- };
312
- }
313
- else {
314
- _position.specific = {
315
- triggerBoostRatio: triggerData.ratio,
316
- targetBoostRatio: subData.targetRatio,
317
- boostEnabled: isEnabled,
318
- subId2: Number(subId),
319
- mergeId: enums_1.Strategies.Identifiers.Boost,
320
- };
321
- }
322
- _position.strategy.strategyId = enums_1.Strategies.IdOverrides.LeverageManagement;
323
- return _position;
324
- }
325
- function parseCompoundV3LeverageManagement(position, parseData) {
326
- const _position = (0, lodash_1.cloneDeep)(position);
327
- const { subStruct, subId } = parseData.subscriptionEventData;
328
- const { isEnabled } = parseData.strategiesSubsData;
329
- const subDataDecoder = position.chainId !== 1
330
- ? subDataService.compoundV3L2LeverageManagementSubData
331
- : subDataService.compoundV3LeverageManagementSubData;
332
- const triggerData = triggerService.compoundV3RatioTrigger.decode(subStruct.triggerData);
333
- const subData = subDataDecoder.decode(subStruct.subData);
334
- _position.strategyData.decoded.triggerData = triggerData;
335
- _position.strategyData.decoded.subData = subData;
336
- _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, triggerData.owner.toLowerCase(), triggerData.market);
337
- const isRepay = [enums_1.Strategies.Identifiers.Repay, enums_1.Strategies.Identifiers.EoaRepay].includes(_position.strategy.strategyId);
338
- if (isRepay) {
339
- _position.specific = {
340
- triggerRepayRatio: triggerData.ratio,
341
- targetRepayRatio: subData.targetRatio,
342
- repayEnabled: true,
343
- subId1: Number(subId),
344
- mergeWithId: enums_1.Strategies.Identifiers.Boost,
345
- };
346
- }
347
- else {
348
- _position.specific = {
349
- triggerBoostRatio: triggerData.ratio,
350
- targetBoostRatio: subData.targetRatio,
351
- boostEnabled: isEnabled,
352
- subId2: Number(subId),
353
- mergeId: enums_1.Strategies.Identifiers.Boost,
354
- };
355
- }
356
- const isEOA = _position.strategy.strategyId.includes('eoa');
357
- _position.strategy.strategyId = isEOA ? enums_1.Strategies.IdOverrides.EoaLeverageManagement : enums_1.Strategies.IdOverrides.LeverageManagement;
358
- return _position;
359
- }
360
- function parseChickenBondsRebond(position, parseData) {
361
- const _position = (0, lodash_1.cloneDeep)(position);
362
- const { subStruct } = parseData.subscriptionEventData;
363
- _position.strategyData.decoded.triggerData = triggerService.cBondsRebondTrigger.decode(subStruct.triggerData);
364
- _position.strategyData.decoded.subData = subDataService.cBondsRebondSubData.decode(subStruct.subData);
365
- _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.strategyData.decoded.triggerData.bondId);
366
- return _position;
367
- }
368
- function parseLiquityBondProtection(position, parseData) {
369
- const _position = (0, lodash_1.cloneDeep)(position);
370
- const { subStruct } = parseData.subscriptionEventData;
371
- const triggerData = triggerService.liquityRatioTrigger.decode(subStruct.triggerData);
372
- _position.strategyData.decoded.triggerData = triggerData;
373
- _position.strategyData.decoded.subData = subDataService.liquityPaybackUsingChickenBondSubData.decode(subStruct.subData);
374
- _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner);
375
- _position.specific = {
376
- triggerRepayRatio: Number(triggerData.ratio),
377
- targetRepayRatio: Infinity,
378
- repayEnabled: true,
379
- };
380
- return _position;
381
- }
382
- function parseExchangeDca(position, parseData, chainId) {
383
- const _position = (0, lodash_1.cloneDeep)(position);
384
- const { subStruct } = parseData.subscriptionEventData;
385
- _position.strategyData.decoded.triggerData = triggerService.exchangeTimestampTrigger.decode(subStruct.triggerData);
386
- _position.strategyData.decoded.subData = subDataService.exchangeDcaSubData.decode(subStruct.subData, chainId);
387
- _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner, Math.random());
388
- return _position;
389
- }
390
- function parseExchangeLimitOrder(position, parseData, chainId) {
391
- const _position = (0, lodash_1.cloneDeep)(position);
392
- const { subStruct } = parseData.subscriptionEventData;
393
- _position.strategyData.decoded.subData = subDataService.exchangeLimitOrderSubData.decode(subStruct.subData, chainId);
394
- const fromTokenDecimals = (0, tokens_1.getAssetInfoByAddress)(_position.strategyData.decoded.subData.fromToken, chainId).decimals;
395
- const toTokenDecimals = (0, tokens_1.getAssetInfoByAddress)(_position.strategyData.decoded.subData.toToken, chainId).decimals;
396
- _position.strategyData.decoded.triggerData = triggerService.exchangeOffchainPriceTrigger.decode(subStruct.triggerData, fromTokenDecimals, toTokenDecimals);
397
- _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner, Math.random());
398
- return _position;
399
- }
400
- function parseLiquityLeverageManagement(position, parseData) {
401
- const _position = (0, lodash_1.cloneDeep)(position);
402
- const { subStruct, subId } = parseData.subscriptionEventData;
403
- const { isEnabled } = parseData.strategiesSubsData;
404
- const triggerData = triggerService.liquityRatioTrigger.decode(subStruct.triggerData);
405
- const subData = subDataService.liquityLeverageManagementSubData.decode(subStruct.subData);
406
- _position.strategyData.decoded.triggerData = triggerData;
407
- _position.strategyData.decoded.subData = subData;
408
- _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner);
409
- const isRepay = _position.strategy.strategyId === enums_1.Strategies.Identifiers.Repay;
410
- if (isRepay) {
411
- _position.specific = {
412
- triggerRepayRatio: triggerData.ratio,
413
- targetRepayRatio: subData.targetRatio,
414
- repayEnabled: true,
415
- subId1: Number(subId),
416
- mergeWithId: enums_1.Strategies.Identifiers.Boost,
417
- };
418
- }
419
- else {
420
- _position.specific = {
421
- triggerBoostRatio: triggerData.ratio,
422
- targetBoostRatio: subData.targetRatio,
423
- boostEnabled: isEnabled,
424
- subId2: Number(subId),
425
- mergeId: enums_1.Strategies.Identifiers.Boost,
426
- };
427
- }
428
- _position.strategy.strategyId = enums_1.Strategies.IdOverrides.LeverageManagement;
429
- return _position;
430
- }
431
- function parseSparkLeverageManagement(position, parseData) {
432
- const _position = (0, lodash_1.cloneDeep)(position);
433
- const { subStruct, subId } = parseData.subscriptionEventData;
434
- const { isEnabled } = parseData.strategiesSubsData;
435
- const triggerData = triggerService.sparkRatioTrigger.decode(subStruct.triggerData);
436
- const subData = subDataService.sparkLeverageManagementSubData.decode(subStruct.subData);
437
- _position.strategyData.decoded.triggerData = triggerData;
438
- _position.strategyData.decoded.subData = subData;
439
- _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner, triggerData.market);
440
- const isRepay = _position.strategy.strategyId === enums_1.Strategies.Identifiers.Repay;
441
- if (isRepay) {
442
- _position.specific = {
443
- triggerRepayRatio: triggerData.ratio,
444
- targetRepayRatio: subData.targetRatio,
445
- repayEnabled: true,
446
- subId1: Number(subId),
447
- mergeWithId: enums_1.Strategies.Identifiers.Boost,
448
- };
449
- }
450
- else {
451
- _position.specific = {
452
- triggerBoostRatio: triggerData.ratio,
453
- targetBoostRatio: subData.targetRatio,
454
- boostEnabled: isEnabled,
455
- subId2: Number(subId),
456
- mergeId: enums_1.Strategies.Identifiers.Boost,
457
- };
458
- }
459
- _position.strategy.strategyId = enums_1.Strategies.IdOverrides.LeverageManagement;
460
- return _position;
461
- }
462
- function parseSparkCloseOnPrice(position, parseData) {
463
- const _position = (0, lodash_1.cloneDeep)(position);
464
- const { subStruct } = parseData.subscriptionEventData;
465
- const triggerData = triggerService.sparkQuotePriceTrigger.decode(subStruct.triggerData);
466
- const subData = subDataService.sparkQuotePriceSubData.decode(subStruct.subData);
467
- _position.strategyData.decoded.triggerData = triggerData;
468
- _position.strategyData.decoded.subData = subData;
469
- _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner, SPARK_MARKET_ADDRESSES[_position.chainId]);
470
- _position.specific = {
471
- collAsset: subData.collAsset,
472
- collAssetId: subData.collAssetId,
473
- debtAsset: subData.debtAsset,
474
- debtAssetId: subData.debtAssetId,
475
- baseToken: triggerData.baseTokenAddress,
476
- quoteToken: triggerData.quoteTokenAddress,
477
- price: triggerData.price,
478
- ratioState: triggerData.ratioState,
479
- };
480
- 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);
481
- _position.strategy.strategyId = (0, utils_1.isRatioStateOver)(ratioState) ? enums_1.Strategies.IdOverrides.TakeProfit : enums_1.Strategies.IdOverrides.StopLoss;
482
- return _position;
483
- }
484
- function parseLiquitySavingsLiqProtection(position, parseData) {
485
- const _position = (0, lodash_1.cloneDeep)(position);
486
- const { subStruct } = parseData.subscriptionEventData;
487
- const triggerData = triggerService.liquityRatioTrigger.decode(subStruct.triggerData);
488
- const subData = subDataService.liquityRepayFromSavingsSubData.decode(subStruct.subData);
489
- _position.strategyData.decoded.triggerData = triggerData;
490
- _position.strategyData.decoded.subData = subData;
491
- _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner);
492
- _position.specific = {
493
- triggerRepayRatio: triggerData.ratio,
494
- targetRepayRatio: subData.targetRatio,
495
- repayEnabled: true,
496
- boostEnabled: false,
497
- };
498
- return _position;
499
- }
500
- function parseLiquityDebtInFrontRepay(position, parseData) {
501
- const _position = (0, lodash_1.cloneDeep)(position);
502
- const { subStruct } = parseData.subscriptionEventData;
503
- const triggerData = triggerService.liquityDebtInFrontWithLimitTrigger.decode(subStruct.triggerData);
504
- const subData = subDataService.liquityDebtInFrontRepaySubData.decode(subStruct.subData);
505
- _position.strategyData.decoded.triggerData = triggerData;
506
- _position.strategyData.decoded.subData = subData;
507
- _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner);
508
- _position.specific = {
509
- debtInFrontMin: triggerData.debtInFrontMin,
510
- targetRepayRatioIncrease: subData.targetRatioIncrease,
511
- };
512
- return _position;
513
- }
514
- function parseCrvUSDLeverageManagement(position, parseData) {
515
- const _position = (0, lodash_1.cloneDeep)(position);
516
- const { subStruct, subId, subHash } = parseData.subscriptionEventData;
517
- const { isEnabled } = parseData.strategiesSubsData;
518
- const triggerData = triggerService.crvUSDRatioTrigger.decode(subStruct.triggerData);
519
- const subData = subDataService.crvUSDLeverageManagementSubData.decode(subStruct.subData);
520
- _position.strategyData.decoded.triggerData = triggerData;
521
- _position.strategyData.decoded.subData = subData;
522
- _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner, triggerData.controller);
523
- const isRepay = _position.strategy.strategyId === enums_1.Strategies.Identifiers.Repay;
524
- if (isRepay) {
525
- _position.specific = {
526
- triggerRepayRatio: triggerData.ratio,
527
- targetRepayRatio: subData.targetRatio,
528
- repayEnabled: isEnabled,
529
- subId1: Number(subId),
530
- subHashRepay: subHash,
531
- mergeWithId: enums_1.Strategies.Identifiers.Boost,
532
- };
533
- }
534
- else {
535
- _position.specific = {
536
- triggerBoostRatio: triggerData.ratio,
537
- targetBoostRatio: subData.targetRatio,
538
- boostEnabled: isEnabled,
539
- subId2: Number(subId),
540
- subHashBoost: subHash,
541
- mergeId: enums_1.Strategies.Identifiers.Boost,
542
- };
543
- }
544
- _position.strategy.strategyId = enums_1.Strategies.IdOverrides.LeverageManagement;
545
- return _position;
546
- }
547
- function parseCrvUSDPayback(position, parseData) {
548
- const _position = (0, lodash_1.cloneDeep)(position);
549
- const { subStruct } = parseData.subscriptionEventData;
550
- const triggerData = triggerService.crvUsdHealthRatioTrigger.decode(subStruct.triggerData);
551
- const subData = subDataService.crvUSDPaybackSubData.decode(subStruct.subData);
552
- _position.strategyData.decoded.triggerData = triggerData;
553
- _position.strategyData.decoded.subData = subData;
554
- _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner, triggerData.controller, Math.random());
555
- _position.strategy.strategyId = enums_1.Strategies.Identifiers.Payback;
556
- return _position;
557
- }
558
- function parseMorphoBlueLeverageManagement(position, parseData) {
559
- const _position = (0, lodash_1.cloneDeep)(position);
560
- const { subStruct, subId, subHash } = parseData.subscriptionEventData;
561
- const { isEnabled } = parseData.strategiesSubsData;
562
- const triggerData = triggerService.morphoBlueRatioTrigger.decode(subStruct.triggerData);
563
- const subData = subDataService.morphoBlueLeverageManagementSubData.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.owner.toLowerCase(), triggerData.marketId);
567
- const isRepay = [enums_1.Strategies.Identifiers.Repay, enums_1.Strategies.Identifiers.EoaRepay].includes(_position.strategy.strategyId);
568
- if (isRepay) {
569
- _position.specific = {
570
- triggerRepayRatio: triggerData.ratio,
571
- targetRepayRatio: subData.targetRatio,
572
- repayEnabled: isEnabled,
573
- subId1: Number(subId),
574
- subHashRepay: subHash,
575
- mergeWithId: enums_1.Strategies.Identifiers.Boost,
576
- };
577
- }
578
- else {
579
- _position.specific = {
580
- triggerBoostRatio: triggerData.ratio,
581
- targetBoostRatio: subData.targetRatio,
582
- boostEnabled: isEnabled,
583
- subId2: Number(subId),
584
- subHashBoost: subHash,
585
- mergeId: enums_1.Strategies.Identifiers.Boost,
586
- };
587
- }
588
- const isEOA = _position.strategy.strategyId.includes('eoa');
589
- _position.strategy.strategyId = isEOA ? enums_1.Strategies.IdOverrides.EoaLeverageManagement : enums_1.Strategies.IdOverrides.LeverageManagement;
590
- return _position;
591
- }
592
- function parseAaveV3OpenOrderFromCollateral(position, parseData) {
593
- const _position = (0, lodash_1.cloneDeep)(position);
594
- const { subStruct } = parseData.subscriptionEventData;
595
- const triggerData = triggerService.aaveV3QuotePriceTrigger.decode(subStruct.triggerData);
596
- const subData = subDataService.aaveV3OpenOrderSubData.decode(subStruct.subData);
597
- _position.strategyData.decoded.triggerData = triggerData;
598
- _position.strategyData.decoded.subData = subData;
599
- _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner, Math.random());
600
- _position.specific = {
601
- collAsset: subData.collAsset,
602
- debtAsset: subData.debtAsset,
603
- baseToken: triggerData.baseTokenAddress,
604
- quoteToken: triggerData.quoteTokenAddress,
605
- price: triggerData.price,
606
- ratioState: triggerData.ratioState,
607
- debtAssetId: subData.debtAssetId,
608
- collAssetId: subData.collAssetId,
609
- ratio: subData.targetRatio,
610
- };
611
- return _position;
612
- }
613
- const parsingMethodsMapping = {
614
- [enums_1.ProtocolIdentifiers.StrategiesAutomation.MakerDAO]: {
615
- [enums_1.Strategies.Identifiers.SavingsLiqProtection]: parseMakerSavingsLiqProtection,
616
- [enums_1.Strategies.Identifiers.CloseOnPriceToDebt]: parseMakerCloseOnPrice,
617
- [enums_1.Strategies.Identifiers.CloseOnPriceToColl]: parseMakerCloseOnPrice,
618
- [enums_1.Strategies.Identifiers.TrailingStopToColl]: parseMakerTrailingStop,
619
- [enums_1.Strategies.Identifiers.TrailingStopToDebt]: parseMakerTrailingStop,
620
- [enums_1.Strategies.Identifiers.Repay]: parseMakerLeverageManagement,
621
- [enums_1.Strategies.Identifiers.Boost]: parseMakerLeverageManagement,
622
- },
623
- [enums_1.ProtocolIdentifiers.StrategiesAutomation.Liquity]: {
624
- [enums_1.Strategies.Identifiers.CloseOnPriceToColl]: parseLiquityCloseOnPrice,
625
- [enums_1.Strategies.Identifiers.TrailingStopToColl]: parseLiquityTrailingStop,
626
- [enums_1.Strategies.Identifiers.BondProtection]: parseLiquityBondProtection,
627
- [enums_1.Strategies.Identifiers.Repay]: parseLiquityLeverageManagement,
628
- [enums_1.Strategies.Identifiers.Boost]: parseLiquityLeverageManagement,
629
- [enums_1.Strategies.Identifiers.SavingsDsrPayback]: parseLiquitySavingsLiqProtection,
630
- [enums_1.Strategies.Identifiers.SavingsDsrSupply]: parseLiquitySavingsLiqProtection,
631
- [enums_1.Strategies.Identifiers.DebtInFrontRepay]: parseLiquityDebtInFrontRepay,
632
- },
633
- [enums_1.ProtocolIdentifiers.StrategiesAutomation.AaveV2]: {
634
- [enums_1.Strategies.Identifiers.Repay]: parseAaveV2LeverageManagement,
635
- [enums_1.Strategies.Identifiers.Boost]: parseAaveV2LeverageManagement,
636
- },
637
- [enums_1.ProtocolIdentifiers.StrategiesAutomation.AaveV3]: {
638
- [enums_1.Strategies.Identifiers.Repay]: parseAaveV3LeverageManagement,
639
- [enums_1.Strategies.Identifiers.Boost]: parseAaveV3LeverageManagement,
640
- [enums_1.Strategies.Identifiers.CloseToDebt]: parseAaveV3CloseOnPrice,
641
- [enums_1.Strategies.Identifiers.CloseToDebtWithGasPrice]: parseAaveV3CloseOnPriceWithMaximumGasPrice,
642
- [enums_1.Strategies.Identifiers.CloseToCollateral]: parseAaveV3CloseOnPrice,
643
- [enums_1.Strategies.Identifiers.CloseToCollateralWithGasPrice]: parseAaveV3CloseOnPriceWithMaximumGasPrice,
644
- [enums_1.Strategies.Identifiers.OpenOrderFromCollateral]: parseAaveV3OpenOrderFromCollateral,
645
- },
646
- [enums_1.ProtocolIdentifiers.StrategiesAutomation.CompoundV2]: {
647
- [enums_1.Strategies.Identifiers.Repay]: parseCompoundV2LeverageManagement,
648
- [enums_1.Strategies.Identifiers.Boost]: parseCompoundV2LeverageManagement,
649
- },
650
- [enums_1.ProtocolIdentifiers.StrategiesAutomation.CompoundV3]: {
651
- [enums_1.Strategies.Identifiers.Repay]: parseCompoundV3LeverageManagement,
652
- [enums_1.Strategies.Identifiers.Boost]: parseCompoundV3LeverageManagement,
653
- [enums_1.Strategies.Identifiers.EoaRepay]: parseCompoundV3LeverageManagement,
654
- [enums_1.Strategies.Identifiers.EoaBoost]: parseCompoundV3LeverageManagement,
655
- },
656
- [enums_1.ProtocolIdentifiers.StrategiesAutomation.ChickenBonds]: {
657
- [enums_1.Strategies.Identifiers.Rebond]: parseChickenBondsRebond,
658
- },
659
- [enums_1.ProtocolIdentifiers.StrategiesAutomation.MorphoAaveV2]: {
660
- [enums_1.Strategies.Identifiers.Repay]: parseMorphoAaveV2LeverageManagement,
661
- [enums_1.Strategies.Identifiers.Boost]: parseMorphoAaveV2LeverageManagement,
662
- },
663
- [enums_1.ProtocolIdentifiers.StrategiesAutomation.Exchange]: {
664
- [enums_1.Strategies.Identifiers.Dca]: parseExchangeDca,
665
- [enums_1.Strategies.Identifiers.LimitOrder]: parseExchangeLimitOrder,
666
- },
667
- [enums_1.ProtocolIdentifiers.StrategiesAutomation.Spark]: {
668
- [enums_1.Strategies.Identifiers.Repay]: parseSparkLeverageManagement,
669
- [enums_1.Strategies.Identifiers.Boost]: parseSparkLeverageManagement,
670
- [enums_1.Strategies.Identifiers.CloseToDebt]: parseSparkCloseOnPrice,
671
- [enums_1.Strategies.Identifiers.CloseToCollateral]: parseSparkCloseOnPrice,
672
- },
673
- [enums_1.ProtocolIdentifiers.StrategiesAutomation.CrvUSD]: {
674
- [enums_1.Strategies.Identifiers.Repay]: parseCrvUSDLeverageManagement,
675
- [enums_1.Strategies.Identifiers.Boost]: parseCrvUSDLeverageManagement,
676
- [enums_1.Strategies.Identifiers.Payback]: parseCrvUSDPayback,
677
- },
678
- [enums_1.ProtocolIdentifiers.StrategiesAutomation.MorphoBlue]: {
679
- [enums_1.Strategies.Identifiers.Repay]: parseMorphoBlueLeverageManagement,
680
- [enums_1.Strategies.Identifiers.Boost]: parseMorphoBlueLeverageManagement,
681
- [enums_1.Strategies.Identifiers.EoaRepay]: parseMorphoBlueLeverageManagement,
682
- [enums_1.Strategies.Identifiers.EoaBoost]: parseMorphoBlueLeverageManagement,
683
- },
684
- };
685
- function getParsingMethod(id, strategy) {
686
- return parsingMethodsMapping[id][strategy.strategyId];
687
- }
688
- function parseStrategiesAutomatedPosition(parseData) {
689
- const { chainId, blockNumber, subscriptionEventData, strategiesSubsData, } = parseData;
690
- const { subStruct, proxy, subId, subHash, } = subscriptionEventData;
691
- const { isEnabled } = strategiesSubsData;
692
- const id = subStruct.strategyOrBundleId;
693
- const strategyOrBundleInfo = (subStruct.isBundle
694
- ? constants_1.BUNDLES_INFO[chainId][id]
695
- : constants_1.STRATEGIES_INFO[chainId][id]);
696
- if (!strategyOrBundleInfo)
697
- return null;
698
- const position = {
699
- isEnabled,
700
- chainId,
701
- subHash,
702
- blockNumber,
703
- positionId: 'positionId parsing not implemented.',
704
- subId: Number(subId),
705
- owner: proxy.toLowerCase(),
706
- protocol: Object.assign({}, strategyOrBundleInfo.protocol),
707
- strategy: Object.assign({ isBundle: subStruct.isBundle }, strategyOrBundleInfo),
708
- strategyData: {
709
- encoded: {
710
- triggerData: subStruct.triggerData,
711
- subData: subStruct.subData,
712
- },
713
- decoded: {
714
- triggerData: null,
715
- subData: null,
716
- },
717
- },
718
- specific: {},
719
- };
720
- return getParsingMethod(position.protocol.id, position.strategy)(position, parseData, chainId);
721
- }
722
- exports.parseStrategiesAutomatedPosition = parseStrategiesAutomatedPosition;
1
+ import { getAssetInfoByAddress } from '@defisaver/tokens';
2
+ import { cloneDeep } from 'lodash';
3
+ import { BUNDLES_INFO, STRATEGIES_INFO } from '../constants';
4
+ import { ChainId, ProtocolIdentifiers, Strategies } from '../types/enums';
5
+ import { getPositionId, getRatioStateInfoForAaveCloseStrategy, isRatioStateOver, wethToEthByAddress, } from './utils';
6
+ import * as subDataService from './subDataService';
7
+ import * as triggerService from './triggerService';
8
+ const SPARK_MARKET_ADDRESSES = {
9
+ [ChainId.Ethereum]: '0x02C3eA4e34C0cBd694D2adFa2c690EECbC1793eE',
10
+ };
11
+ const AAVE_V3_MARKET_ADDRESSES = {
12
+ [ChainId.Ethereum]: '0x2f39d218133AFaB8F2B819B1066c7E434Ad94E9e',
13
+ [ChainId.Optimism]: '0xa97684ead0e402dC232d5A977953DF7ECBaB3CDb',
14
+ [ChainId.Arbitrum]: '0xa97684ead0e402dC232d5A977953DF7ECBaB3CDb',
15
+ [ChainId.Base]: '0xe20fCBdBfFC4Dd138cE8b2E6FBb6CB49777ad64D',
16
+ };
17
+ function parseMakerSavingsLiqProtection(position, parseData) {
18
+ const _position = cloneDeep(position);
19
+ const { subStruct } = parseData.subscriptionEventData;
20
+ const triggerData = triggerService.makerRatioTrigger.decode(subStruct.triggerData);
21
+ const subData = subDataService.makerRepayFromSavingsSubData.decode(subStruct.subData);
22
+ _position.strategyData.decoded.triggerData = triggerData;
23
+ _position.strategyData.decoded.subData = subData;
24
+ _position.positionId = getPositionId(_position.chainId, _position.protocol.id, subData.vaultId);
25
+ _position.specific = {
26
+ triggerRepayRatio: Number(triggerData.ratio),
27
+ targetRepayRatio: Number(subData.targetRatio),
28
+ repayEnabled: true,
29
+ boostEnabled: false,
30
+ };
31
+ return _position;
32
+ }
33
+ function parseMakerCloseOnPrice(position, parseData) {
34
+ const _position = cloneDeep(position);
35
+ const { subStruct } = parseData.subscriptionEventData;
36
+ const triggerData = triggerService.chainlinkPriceTrigger.decode(subStruct.triggerData);
37
+ const subData = subDataService.makerCloseSubData.decode(subStruct.subData);
38
+ _position.strategyData.decoded.triggerData = triggerData;
39
+ _position.strategyData.decoded.subData = subData;
40
+ _position.positionId = getPositionId(_position.chainId, _position.protocol.id, subData.vaultId);
41
+ const isTakeProfit = isRatioStateOver(Number(triggerData.state));
42
+ _position.strategy.strategyId = isTakeProfit ? Strategies.IdOverrides.TakeProfit : Strategies.IdOverrides.StopLoss;
43
+ _position.specific = {
44
+ price: triggerData.price,
45
+ closeToAssetAddr: subData.closeToAssetAddr,
46
+ };
47
+ return _position;
48
+ }
49
+ function parseMakerTrailingStop(position, parseData) {
50
+ const _position = cloneDeep(position);
51
+ const { subStruct } = parseData.subscriptionEventData;
52
+ const triggerData = triggerService.trailingStopTrigger.decode(subStruct.triggerData);
53
+ const subData = subDataService.makerCloseSubData.decode(subStruct.subData);
54
+ _position.strategyData.decoded.triggerData = triggerData;
55
+ _position.strategyData.decoded.subData = subData;
56
+ _position.positionId = getPositionId(_position.chainId, _position.protocol.id, subData.vaultId);
57
+ _position.strategy.strategyId = Strategies.IdOverrides.TrailingStop;
58
+ _position.specific = {
59
+ triggerPercentage: Number(triggerData.triggerPercentage),
60
+ roundId: Number(triggerData.roundId),
61
+ closeToAssetAddr: subData.closeToAssetAddr,
62
+ };
63
+ return _position;
64
+ }
65
+ function parseMakerLeverageManagement(position, parseData) {
66
+ const _position = cloneDeep(position);
67
+ const { subStruct, subId } = parseData.subscriptionEventData;
68
+ const { isEnabled } = parseData.strategiesSubsData;
69
+ const triggerData = triggerService.makerRatioTrigger.decode(subStruct.triggerData);
70
+ const subData = subDataService.makerLeverageManagementSubData.decode(subStruct.subData);
71
+ _position.strategyData.decoded.triggerData = triggerData;
72
+ _position.strategyData.decoded.subData = subData;
73
+ _position.positionId = getPositionId(_position.chainId, _position.protocol.id, subData.vaultId);
74
+ const isRepay = _position.strategy.strategyId === Strategies.Identifiers.Repay;
75
+ if (isRepay) {
76
+ _position.specific = {
77
+ triggerRepayRatio: triggerData.ratio,
78
+ targetRepayRatio: subData.targetRatio,
79
+ repayEnabled: true,
80
+ subId1: Number(subId),
81
+ mergeWithId: Strategies.Identifiers.Boost,
82
+ };
83
+ }
84
+ else {
85
+ _position.specific = {
86
+ triggerBoostRatio: triggerData.ratio,
87
+ targetBoostRatio: subData.targetRatio,
88
+ boostEnabled: isEnabled,
89
+ subId2: Number(subId),
90
+ mergeId: Strategies.Identifiers.Boost,
91
+ };
92
+ }
93
+ _position.strategy.strategyId = Strategies.IdOverrides.LeverageManagement;
94
+ return _position;
95
+ }
96
+ function parseLiquityCloseOnPrice(position, parseData) {
97
+ const _position = cloneDeep(position);
98
+ const { subStruct } = parseData.subscriptionEventData;
99
+ const triggerData = triggerService.chainlinkPriceTrigger.decode(subStruct.triggerData);
100
+ const subData = subDataService.liquityCloseSubData.decode(subStruct.subData);
101
+ _position.strategyData.decoded.triggerData = triggerData;
102
+ _position.strategyData.decoded.subData = subData;
103
+ _position.positionId = getPositionId(_position.chainId, _position.protocol.id, _position.owner);
104
+ const isTakeProfit = isRatioStateOver(Number(triggerData.state));
105
+ _position.strategy.strategyId = isTakeProfit ? Strategies.IdOverrides.TakeProfit : Strategies.IdOverrides.StopLoss;
106
+ _position.specific = {
107
+ price: triggerData.price,
108
+ closeToAssetAddr: subData.closeToAssetAddr,
109
+ };
110
+ return _position;
111
+ }
112
+ function parseLiquityTrailingStop(position, parseData) {
113
+ const _position = cloneDeep(position);
114
+ const { subStruct } = parseData.subscriptionEventData;
115
+ const triggerData = triggerService.trailingStopTrigger.decode(subStruct.triggerData);
116
+ const subData = subDataService.liquityCloseSubData.decode(subStruct.subData);
117
+ _position.strategyData.decoded.triggerData = triggerData;
118
+ _position.strategyData.decoded.subData = subData;
119
+ _position.positionId = getPositionId(_position.chainId, _position.protocol.id, _position.owner);
120
+ _position.strategy.strategyId = Strategies.IdOverrides.TrailingStop;
121
+ _position.specific = {
122
+ triggerPercentage: Number(triggerData.triggerPercentage),
123
+ roundId: Number(triggerData.roundId),
124
+ closeToAssetAddr: subData.closeToAssetAddr,
125
+ };
126
+ return _position;
127
+ }
128
+ function parseAaveV2LeverageManagement(position, parseData) {
129
+ const _position = cloneDeep(position);
130
+ const { subStruct, subId } = parseData.subscriptionEventData;
131
+ const { isEnabled } = parseData.strategiesSubsData;
132
+ const triggerData = triggerService.aaveV2RatioTrigger.decode(subStruct.triggerData);
133
+ const subData = subDataService.aaveV2LeverageManagementSubData.decode(subStruct.subData);
134
+ _position.strategyData.decoded.triggerData = triggerData;
135
+ _position.strategyData.decoded.subData = subData;
136
+ _position.positionId = getPositionId(_position.chainId, _position.protocol.id, _position.owner, triggerData.market);
137
+ const isRepay = _position.strategy.strategyId === Strategies.Identifiers.Repay;
138
+ if (isRepay) {
139
+ _position.specific = {
140
+ triggerRepayRatio: triggerData.ratio,
141
+ targetRepayRatio: subData.targetRatio,
142
+ repayEnabled: true,
143
+ subId1: Number(subId),
144
+ mergeWithId: Strategies.Identifiers.Boost,
145
+ };
146
+ }
147
+ else {
148
+ _position.specific = {
149
+ triggerBoostRatio: triggerData.ratio,
150
+ targetBoostRatio: subData.targetRatio,
151
+ boostEnabled: isEnabled,
152
+ subId2: Number(subId),
153
+ mergeId: Strategies.Identifiers.Boost,
154
+ };
155
+ }
156
+ _position.strategy.strategyId = Strategies.IdOverrides.LeverageManagement;
157
+ return _position;
158
+ }
159
+ function parseAaveV3LeverageManagement(position, parseData) {
160
+ const _position = cloneDeep(position);
161
+ const { subStruct, subId } = parseData.subscriptionEventData;
162
+ const { isEnabled } = parseData.strategiesSubsData;
163
+ const triggerData = triggerService.aaveV3RatioTrigger.decode(subStruct.triggerData);
164
+ const subData = subDataService.aaveV3LeverageManagementSubData.decode(subStruct.subData);
165
+ _position.strategyData.decoded.triggerData = triggerData;
166
+ _position.strategyData.decoded.subData = subData;
167
+ _position.positionId = getPositionId(_position.chainId, _position.protocol.id, _position.owner, triggerData.market);
168
+ const isRepay = _position.strategy.strategyId === 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: 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: Strategies.Identifiers.Boost,
185
+ };
186
+ }
187
+ _position.strategy.strategyId = Strategies.IdOverrides.LeverageManagement;
188
+ return _position;
189
+ }
190
+ function parseMorphoAaveV2LeverageManagement(position, parseData) {
191
+ const _position = cloneDeep(position);
192
+ const { subStruct, subId } = parseData.subscriptionEventData;
193
+ const { isEnabled } = parseData.strategiesSubsData;
194
+ const triggerData = triggerService.morphoAaveV2RatioTrigger.decode(subStruct.triggerData);
195
+ const subData = subDataService.morphoAaveV2LeverageManagementSubData.decode(subStruct.subData);
196
+ _position.strategyData.decoded.triggerData = triggerData;
197
+ _position.strategyData.decoded.subData = subData;
198
+ _position.positionId = getPositionId(_position.chainId, _position.protocol.id, _position.owner);
199
+ const isRepay = _position.strategy.strategyId === 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: 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: Strategies.Identifiers.Boost,
216
+ };
217
+ }
218
+ _position.strategy.strategyId = Strategies.IdOverrides.LeverageManagement;
219
+ return _position;
220
+ }
221
+ function parseAaveV3CloseOnPrice(position, parseData) {
222
+ const _position = cloneDeep(position);
223
+ const { subStruct } = parseData.subscriptionEventData;
224
+ const triggerData = triggerService.aaveV3QuotePriceTrigger.decode(subStruct.triggerData);
225
+ const subData = subDataService.aaveV3QuotePriceSubData.decode(subStruct.subData);
226
+ _position.strategyData.decoded.triggerData = triggerData;
227
+ _position.strategyData.decoded.subData = subData;
228
+ _position.positionId = getPositionId(_position.chainId, _position.protocol.id, _position.owner, AAVE_V3_MARKET_ADDRESSES[_position.chainId]);
229
+ _position.specific = {
230
+ collAsset: subData.collAsset,
231
+ collAssetId: subData.collAssetId,
232
+ debtAsset: subData.debtAsset,
233
+ debtAssetId: subData.debtAssetId,
234
+ baseToken: triggerData.baseTokenAddress,
235
+ quoteToken: triggerData.quoteTokenAddress,
236
+ price: triggerData.price,
237
+ ratioState: triggerData.ratioState,
238
+ };
239
+ const { ratioState } = getRatioStateInfoForAaveCloseStrategy(_position.specific.ratioState, wethToEthByAddress(_position.specific.collAsset, parseData.chainId), wethToEthByAddress(_position.specific.debtAsset, parseData.chainId), parseData.chainId);
240
+ _position.strategy.strategyId = isRatioStateOver(ratioState) ? Strategies.IdOverrides.TakeProfit : Strategies.IdOverrides.StopLoss;
241
+ return _position;
242
+ }
243
+ function parseAaveV3CloseOnPriceWithMaximumGasPrice(position, parseData) {
244
+ const _position = cloneDeep(position);
245
+ const { subStruct } = parseData.subscriptionEventData;
246
+ const triggerData = triggerService.aaveV3QuotePriceWithMaximumGasPriceTrigger.decode(subStruct.triggerData);
247
+ const subData = subDataService.aaveV3QuotePriceSubData.decode(subStruct.subData);
248
+ _position.strategyData.decoded.triggerData = triggerData;
249
+ _position.strategyData.decoded.subData = subData;
250
+ _position.positionId = getPositionId(_position.chainId, _position.protocol.id, _position.owner, AAVE_V3_MARKET_ADDRESSES[_position.chainId]);
251
+ _position.specific = {
252
+ collAsset: subData.collAsset,
253
+ collAssetId: subData.collAssetId,
254
+ debtAsset: subData.debtAsset,
255
+ debtAssetId: subData.debtAssetId,
256
+ baseToken: triggerData.baseTokenAddress,
257
+ quoteToken: triggerData.quoteTokenAddress,
258
+ price: triggerData.price,
259
+ maximumGasPrice: triggerData.maximumGasPrice,
260
+ ratioState: triggerData.ratioState,
261
+ };
262
+ const { ratioState } = getRatioStateInfoForAaveCloseStrategy(_position.specific.ratioState, wethToEthByAddress(_position.specific.collAsset, parseData.chainId), wethToEthByAddress(_position.specific.debtAsset, parseData.chainId), parseData.chainId);
263
+ _position.strategy.strategyId = isRatioStateOver(ratioState)
264
+ ? Strategies.IdOverrides.TakeProfitWithGasPrice
265
+ : Strategies.IdOverrides.StopLossWithGasPrice;
266
+ return _position;
267
+ }
268
+ function parseCompoundV2LeverageManagement(position, parseData) {
269
+ const _position = cloneDeep(position);
270
+ const { subStruct, subId } = parseData.subscriptionEventData;
271
+ const { isEnabled } = parseData.strategiesSubsData;
272
+ const triggerData = triggerService.compoundV2RatioTrigger.decode(subStruct.triggerData);
273
+ const subData = subDataService.compoundV2LeverageManagementSubData.decode(subStruct.subData);
274
+ _position.strategyData.decoded.triggerData = triggerData;
275
+ _position.strategyData.decoded.subData = subData;
276
+ _position.owner = triggerData.owner.toLowerCase();
277
+ _position.positionId = getPositionId(_position.chainId, _position.protocol.id, _position.owner);
278
+ const isRepay = [Strategies.Identifiers.Repay, Strategies.Identifiers.EoaRepay].includes(_position.strategy.strategyId);
279
+ if (isRepay) {
280
+ _position.specific = {
281
+ triggerRepayRatio: triggerData.ratio,
282
+ targetRepayRatio: subData.targetRatio,
283
+ repayEnabled: true,
284
+ subId1: Number(subId),
285
+ mergeWithId: Strategies.Identifiers.Boost,
286
+ };
287
+ }
288
+ else {
289
+ _position.specific = {
290
+ triggerBoostRatio: triggerData.ratio,
291
+ targetBoostRatio: subData.targetRatio,
292
+ boostEnabled: isEnabled,
293
+ subId2: Number(subId),
294
+ mergeId: Strategies.Identifiers.Boost,
295
+ };
296
+ }
297
+ _position.strategy.strategyId = Strategies.IdOverrides.LeverageManagement;
298
+ return _position;
299
+ }
300
+ function parseCompoundV3LeverageManagement(position, parseData) {
301
+ const _position = cloneDeep(position);
302
+ const { subStruct, subId } = parseData.subscriptionEventData;
303
+ const { isEnabled } = parseData.strategiesSubsData;
304
+ const subDataDecoder = position.chainId !== 1
305
+ ? subDataService.compoundV3L2LeverageManagementSubData
306
+ : subDataService.compoundV3LeverageManagementSubData;
307
+ const triggerData = triggerService.compoundV3RatioTrigger.decode(subStruct.triggerData);
308
+ const subData = subDataDecoder.decode(subStruct.subData);
309
+ _position.strategyData.decoded.triggerData = triggerData;
310
+ _position.strategyData.decoded.subData = subData;
311
+ _position.positionId = getPositionId(_position.chainId, _position.protocol.id, triggerData.owner.toLowerCase(), triggerData.market);
312
+ const isRepay = [Strategies.Identifiers.Repay, Strategies.Identifiers.EoaRepay].includes(_position.strategy.strategyId);
313
+ if (isRepay) {
314
+ _position.specific = {
315
+ triggerRepayRatio: triggerData.ratio,
316
+ targetRepayRatio: subData.targetRatio,
317
+ repayEnabled: true,
318
+ subId1: Number(subId),
319
+ mergeWithId: Strategies.Identifiers.Boost,
320
+ };
321
+ }
322
+ else {
323
+ _position.specific = {
324
+ triggerBoostRatio: triggerData.ratio,
325
+ targetBoostRatio: subData.targetRatio,
326
+ boostEnabled: isEnabled,
327
+ subId2: Number(subId),
328
+ mergeId: Strategies.Identifiers.Boost,
329
+ };
330
+ }
331
+ const isEOA = _position.strategy.strategyId.includes('eoa');
332
+ _position.strategy.strategyId = isEOA ? Strategies.IdOverrides.EoaLeverageManagement : Strategies.IdOverrides.LeverageManagement;
333
+ return _position;
334
+ }
335
+ function parseChickenBondsRebond(position, parseData) {
336
+ const _position = cloneDeep(position);
337
+ const { subStruct } = parseData.subscriptionEventData;
338
+ _position.strategyData.decoded.triggerData = triggerService.cBondsRebondTrigger.decode(subStruct.triggerData);
339
+ _position.strategyData.decoded.subData = subDataService.cBondsRebondSubData.decode(subStruct.subData);
340
+ _position.positionId = getPositionId(_position.chainId, _position.protocol.id, _position.strategyData.decoded.triggerData.bondId);
341
+ return _position;
342
+ }
343
+ function parseLiquityBondProtection(position, parseData) {
344
+ const _position = cloneDeep(position);
345
+ const { subStruct } = parseData.subscriptionEventData;
346
+ const triggerData = triggerService.liquityRatioTrigger.decode(subStruct.triggerData);
347
+ _position.strategyData.decoded.triggerData = triggerData;
348
+ _position.strategyData.decoded.subData = subDataService.liquityPaybackUsingChickenBondSubData.decode(subStruct.subData);
349
+ _position.positionId = getPositionId(_position.chainId, _position.protocol.id, _position.owner);
350
+ _position.specific = {
351
+ triggerRepayRatio: Number(triggerData.ratio),
352
+ targetRepayRatio: Infinity,
353
+ repayEnabled: true,
354
+ };
355
+ return _position;
356
+ }
357
+ function parseExchangeDca(position, parseData, chainId) {
358
+ const _position = cloneDeep(position);
359
+ const { subStruct } = parseData.subscriptionEventData;
360
+ _position.strategyData.decoded.triggerData = triggerService.exchangeTimestampTrigger.decode(subStruct.triggerData);
361
+ _position.strategyData.decoded.subData = subDataService.exchangeDcaSubData.decode(subStruct.subData, chainId);
362
+ _position.positionId = getPositionId(_position.chainId, _position.protocol.id, _position.owner, Math.random());
363
+ return _position;
364
+ }
365
+ function parseExchangeLimitOrder(position, parseData, chainId) {
366
+ const _position = cloneDeep(position);
367
+ const { subStruct } = parseData.subscriptionEventData;
368
+ _position.strategyData.decoded.subData = subDataService.exchangeLimitOrderSubData.decode(subStruct.subData, chainId);
369
+ const fromTokenDecimals = getAssetInfoByAddress(_position.strategyData.decoded.subData.fromToken, chainId).decimals;
370
+ const toTokenDecimals = getAssetInfoByAddress(_position.strategyData.decoded.subData.toToken, chainId).decimals;
371
+ _position.strategyData.decoded.triggerData = triggerService.exchangeOffchainPriceTrigger.decode(subStruct.triggerData, fromTokenDecimals, toTokenDecimals);
372
+ _position.positionId = getPositionId(_position.chainId, _position.protocol.id, _position.owner, Math.random());
373
+ return _position;
374
+ }
375
+ function parseLiquityLeverageManagement(position, parseData) {
376
+ const _position = cloneDeep(position);
377
+ const { subStruct, subId } = parseData.subscriptionEventData;
378
+ const { isEnabled } = parseData.strategiesSubsData;
379
+ const triggerData = triggerService.liquityRatioTrigger.decode(subStruct.triggerData);
380
+ const subData = subDataService.liquityLeverageManagementSubData.decode(subStruct.subData);
381
+ _position.strategyData.decoded.triggerData = triggerData;
382
+ _position.strategyData.decoded.subData = subData;
383
+ _position.positionId = getPositionId(_position.chainId, _position.protocol.id, _position.owner);
384
+ const isRepay = _position.strategy.strategyId === Strategies.Identifiers.Repay;
385
+ if (isRepay) {
386
+ _position.specific = {
387
+ triggerRepayRatio: triggerData.ratio,
388
+ targetRepayRatio: subData.targetRatio,
389
+ repayEnabled: true,
390
+ subId1: Number(subId),
391
+ mergeWithId: Strategies.Identifiers.Boost,
392
+ };
393
+ }
394
+ else {
395
+ _position.specific = {
396
+ triggerBoostRatio: triggerData.ratio,
397
+ targetBoostRatio: subData.targetRatio,
398
+ boostEnabled: isEnabled,
399
+ subId2: Number(subId),
400
+ mergeId: Strategies.Identifiers.Boost,
401
+ };
402
+ }
403
+ _position.strategy.strategyId = Strategies.IdOverrides.LeverageManagement;
404
+ return _position;
405
+ }
406
+ function parseLiquityV2LeverageManagement(position, parseData) {
407
+ const _position = cloneDeep(position);
408
+ const { subStruct, subId } = parseData.subscriptionEventData;
409
+ const { isEnabled } = parseData.strategiesSubsData;
410
+ const triggerData = triggerService.liquityV2RatioTrigger.decode(subStruct.triggerData);
411
+ const subData = subDataService.liquityV2LeverageManagementSubData.decode(subStruct.subData);
412
+ _position.strategyData.decoded.triggerData = triggerData;
413
+ _position.strategyData.decoded.subData = subData;
414
+ _position.positionId = getPositionId(_position.chainId, _position.protocol.id, _position.owner, triggerData.troveId, triggerData.market);
415
+ const isRepay = _position.strategy.strategyId === 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: 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: Strategies.Identifiers.Boost,
432
+ };
433
+ }
434
+ _position.strategy.strategyId = Strategies.IdOverrides.LeverageManagement;
435
+ return _position;
436
+ }
437
+ function parseSparkLeverageManagement(position, parseData) {
438
+ const _position = cloneDeep(position);
439
+ const { subStruct, subId } = parseData.subscriptionEventData;
440
+ const { isEnabled } = parseData.strategiesSubsData;
441
+ const triggerData = triggerService.sparkRatioTrigger.decode(subStruct.triggerData);
442
+ const subData = subDataService.sparkLeverageManagementSubData.decode(subStruct.subData);
443
+ _position.strategyData.decoded.triggerData = triggerData;
444
+ _position.strategyData.decoded.subData = subData;
445
+ _position.positionId = getPositionId(_position.chainId, _position.protocol.id, _position.owner, triggerData.market);
446
+ const isRepay = _position.strategy.strategyId === Strategies.Identifiers.Repay;
447
+ if (isRepay) {
448
+ _position.specific = {
449
+ triggerRepayRatio: triggerData.ratio,
450
+ targetRepayRatio: subData.targetRatio,
451
+ repayEnabled: true,
452
+ subId1: Number(subId),
453
+ mergeWithId: Strategies.Identifiers.Boost,
454
+ };
455
+ }
456
+ else {
457
+ _position.specific = {
458
+ triggerBoostRatio: triggerData.ratio,
459
+ targetBoostRatio: subData.targetRatio,
460
+ boostEnabled: isEnabled,
461
+ subId2: Number(subId),
462
+ mergeId: Strategies.Identifiers.Boost,
463
+ };
464
+ }
465
+ _position.strategy.strategyId = Strategies.IdOverrides.LeverageManagement;
466
+ return _position;
467
+ }
468
+ function parseSparkCloseOnPrice(position, parseData) {
469
+ const _position = cloneDeep(position);
470
+ const { subStruct } = parseData.subscriptionEventData;
471
+ const triggerData = triggerService.sparkQuotePriceTrigger.decode(subStruct.triggerData);
472
+ const subData = subDataService.sparkQuotePriceSubData.decode(subStruct.subData);
473
+ _position.strategyData.decoded.triggerData = triggerData;
474
+ _position.strategyData.decoded.subData = subData;
475
+ _position.positionId = getPositionId(_position.chainId, _position.protocol.id, _position.owner, SPARK_MARKET_ADDRESSES[_position.chainId]);
476
+ _position.specific = {
477
+ collAsset: subData.collAsset,
478
+ collAssetId: subData.collAssetId,
479
+ debtAsset: subData.debtAsset,
480
+ debtAssetId: subData.debtAssetId,
481
+ baseToken: triggerData.baseTokenAddress,
482
+ quoteToken: triggerData.quoteTokenAddress,
483
+ price: triggerData.price,
484
+ ratioState: triggerData.ratioState,
485
+ };
486
+ const { ratioState } = getRatioStateInfoForAaveCloseStrategy(_position.specific.ratioState, wethToEthByAddress(_position.specific.collAsset, parseData.chainId), wethToEthByAddress(_position.specific.debtAsset, parseData.chainId), parseData.chainId);
487
+ _position.strategy.strategyId = isRatioStateOver(ratioState) ? Strategies.IdOverrides.TakeProfit : Strategies.IdOverrides.StopLoss;
488
+ return _position;
489
+ }
490
+ function parseLiquitySavingsLiqProtection(position, parseData) {
491
+ const _position = cloneDeep(position);
492
+ const { subStruct } = parseData.subscriptionEventData;
493
+ const triggerData = triggerService.liquityRatioTrigger.decode(subStruct.triggerData);
494
+ const subData = subDataService.liquityRepayFromSavingsSubData.decode(subStruct.subData);
495
+ _position.strategyData.decoded.triggerData = triggerData;
496
+ _position.strategyData.decoded.subData = subData;
497
+ _position.positionId = getPositionId(_position.chainId, _position.protocol.id, _position.owner);
498
+ _position.specific = {
499
+ triggerRepayRatio: triggerData.ratio,
500
+ targetRepayRatio: subData.targetRatio,
501
+ repayEnabled: true,
502
+ boostEnabled: false,
503
+ };
504
+ return _position;
505
+ }
506
+ function parseLiquityDebtInFrontRepay(position, parseData) {
507
+ const _position = cloneDeep(position);
508
+ const { subStruct } = parseData.subscriptionEventData;
509
+ const triggerData = triggerService.liquityDebtInFrontWithLimitTrigger.decode(subStruct.triggerData);
510
+ const subData = subDataService.liquityDebtInFrontRepaySubData.decode(subStruct.subData);
511
+ _position.strategyData.decoded.triggerData = triggerData;
512
+ _position.strategyData.decoded.subData = subData;
513
+ _position.positionId = getPositionId(_position.chainId, _position.protocol.id, _position.owner);
514
+ _position.specific = {
515
+ debtInFrontMin: triggerData.debtInFrontMin,
516
+ targetRepayRatioIncrease: subData.targetRatioIncrease,
517
+ };
518
+ return _position;
519
+ }
520
+ function parseCrvUSDLeverageManagement(position, parseData) {
521
+ const _position = cloneDeep(position);
522
+ const { subStruct, subId, subHash } = parseData.subscriptionEventData;
523
+ const { isEnabled } = parseData.strategiesSubsData;
524
+ const triggerData = triggerService.crvUSDRatioTrigger.decode(subStruct.triggerData);
525
+ const subData = subDataService.crvUSDLeverageManagementSubData.decode(subStruct.subData);
526
+ _position.strategyData.decoded.triggerData = triggerData;
527
+ _position.strategyData.decoded.subData = subData;
528
+ _position.positionId = getPositionId(_position.chainId, _position.protocol.id, _position.owner, triggerData.controller);
529
+ const isRepay = _position.strategy.strategyId === Strategies.Identifiers.Repay;
530
+ if (isRepay) {
531
+ _position.specific = {
532
+ triggerRepayRatio: triggerData.ratio,
533
+ targetRepayRatio: subData.targetRatio,
534
+ repayEnabled: isEnabled,
535
+ subId1: Number(subId),
536
+ subHashRepay: subHash,
537
+ mergeWithId: Strategies.Identifiers.Boost,
538
+ };
539
+ }
540
+ else {
541
+ _position.specific = {
542
+ triggerBoostRatio: triggerData.ratio,
543
+ targetBoostRatio: subData.targetRatio,
544
+ boostEnabled: isEnabled,
545
+ subId2: Number(subId),
546
+ subHashBoost: subHash,
547
+ mergeId: Strategies.Identifiers.Boost,
548
+ };
549
+ }
550
+ _position.strategy.strategyId = Strategies.IdOverrides.LeverageManagement;
551
+ return _position;
552
+ }
553
+ function parseCrvUSDPayback(position, parseData) {
554
+ const _position = cloneDeep(position);
555
+ const { subStruct } = parseData.subscriptionEventData;
556
+ const triggerData = triggerService.crvUsdHealthRatioTrigger.decode(subStruct.triggerData);
557
+ const subData = subDataService.crvUSDPaybackSubData.decode(subStruct.subData);
558
+ _position.strategyData.decoded.triggerData = triggerData;
559
+ _position.strategyData.decoded.subData = subData;
560
+ _position.positionId = getPositionId(_position.chainId, _position.protocol.id, _position.owner, triggerData.controller, Math.random());
561
+ _position.strategy.strategyId = Strategies.Identifiers.Payback;
562
+ return _position;
563
+ }
564
+ function parseMorphoBlueLeverageManagement(position, parseData) {
565
+ const _position = cloneDeep(position);
566
+ const { subStruct, subId, subHash } = parseData.subscriptionEventData;
567
+ const { isEnabled } = parseData.strategiesSubsData;
568
+ const triggerData = triggerService.morphoBlueRatioTrigger.decode(subStruct.triggerData);
569
+ const subData = subDataService.morphoBlueLeverageManagementSubData.decode(subStruct.subData);
570
+ _position.strategyData.decoded.triggerData = triggerData;
571
+ _position.strategyData.decoded.subData = subData;
572
+ _position.positionId = getPositionId(_position.chainId, _position.protocol.id, triggerData.owner.toLowerCase(), triggerData.marketId);
573
+ const isRepay = [Strategies.Identifiers.Repay, Strategies.Identifiers.EoaRepay].includes(_position.strategy.strategyId);
574
+ if (isRepay) {
575
+ _position.specific = {
576
+ triggerRepayRatio: triggerData.ratio,
577
+ targetRepayRatio: subData.targetRatio,
578
+ repayEnabled: isEnabled,
579
+ subId1: Number(subId),
580
+ subHashRepay: subHash,
581
+ mergeWithId: Strategies.Identifiers.Boost,
582
+ };
583
+ }
584
+ else {
585
+ _position.specific = {
586
+ triggerBoostRatio: triggerData.ratio,
587
+ targetBoostRatio: subData.targetRatio,
588
+ boostEnabled: isEnabled,
589
+ subId2: Number(subId),
590
+ subHashBoost: subHash,
591
+ mergeId: Strategies.Identifiers.Boost,
592
+ };
593
+ }
594
+ const isEOA = _position.strategy.strategyId.includes('eoa');
595
+ _position.strategy.strategyId = isEOA ? Strategies.IdOverrides.EoaLeverageManagement : Strategies.IdOverrides.LeverageManagement;
596
+ return _position;
597
+ }
598
+ function parseAaveV3OpenOrderFromCollateral(position, parseData) {
599
+ const _position = cloneDeep(position);
600
+ const { subStruct } = parseData.subscriptionEventData;
601
+ const triggerData = triggerService.aaveV3QuotePriceTrigger.decode(subStruct.triggerData);
602
+ const subData = subDataService.aaveV3OpenOrderSubData.decode(subStruct.subData);
603
+ _position.strategyData.decoded.triggerData = triggerData;
604
+ _position.strategyData.decoded.subData = subData;
605
+ _position.positionId = getPositionId(_position.chainId, _position.protocol.id, _position.owner, Math.random());
606
+ _position.specific = {
607
+ collAsset: subData.collAsset,
608
+ debtAsset: subData.debtAsset,
609
+ baseToken: triggerData.baseTokenAddress,
610
+ quoteToken: triggerData.quoteTokenAddress,
611
+ price: triggerData.price,
612
+ ratioState: triggerData.ratioState,
613
+ debtAssetId: subData.debtAssetId,
614
+ collAssetId: subData.collAssetId,
615
+ ratio: subData.targetRatio,
616
+ };
617
+ return _position;
618
+ }
619
+ const parsingMethodsMapping = {
620
+ [ProtocolIdentifiers.StrategiesAutomation.MakerDAO]: {
621
+ [Strategies.Identifiers.SavingsLiqProtection]: parseMakerSavingsLiqProtection,
622
+ [Strategies.Identifiers.CloseOnPriceToDebt]: parseMakerCloseOnPrice,
623
+ [Strategies.Identifiers.CloseOnPriceToColl]: parseMakerCloseOnPrice,
624
+ [Strategies.Identifiers.TrailingStopToColl]: parseMakerTrailingStop,
625
+ [Strategies.Identifiers.TrailingStopToDebt]: parseMakerTrailingStop,
626
+ [Strategies.Identifiers.Repay]: parseMakerLeverageManagement,
627
+ [Strategies.Identifiers.Boost]: parseMakerLeverageManagement,
628
+ },
629
+ [ProtocolIdentifiers.StrategiesAutomation.Liquity]: {
630
+ [Strategies.Identifiers.CloseOnPriceToColl]: parseLiquityCloseOnPrice,
631
+ [Strategies.Identifiers.TrailingStopToColl]: parseLiquityTrailingStop,
632
+ [Strategies.Identifiers.BondProtection]: parseLiquityBondProtection,
633
+ [Strategies.Identifiers.Repay]: parseLiquityLeverageManagement,
634
+ [Strategies.Identifiers.Boost]: parseLiquityLeverageManagement,
635
+ [Strategies.Identifiers.SavingsDsrPayback]: parseLiquitySavingsLiqProtection,
636
+ [Strategies.Identifiers.SavingsDsrSupply]: parseLiquitySavingsLiqProtection,
637
+ [Strategies.Identifiers.DebtInFrontRepay]: parseLiquityDebtInFrontRepay,
638
+ },
639
+ [ProtocolIdentifiers.StrategiesAutomation.LiquityV2]: {
640
+ [Strategies.Identifiers.Repay]: parseLiquityV2LeverageManagement,
641
+ [Strategies.Identifiers.Boost]: parseLiquityV2LeverageManagement,
642
+ },
643
+ [ProtocolIdentifiers.StrategiesAutomation.AaveV2]: {
644
+ [Strategies.Identifiers.Repay]: parseAaveV2LeverageManagement,
645
+ [Strategies.Identifiers.Boost]: parseAaveV2LeverageManagement,
646
+ },
647
+ [ProtocolIdentifiers.StrategiesAutomation.AaveV3]: {
648
+ [Strategies.Identifiers.Repay]: parseAaveV3LeverageManagement,
649
+ [Strategies.Identifiers.Boost]: parseAaveV3LeverageManagement,
650
+ [Strategies.Identifiers.CloseToDebt]: parseAaveV3CloseOnPrice,
651
+ [Strategies.Identifiers.CloseToDebtWithGasPrice]: parseAaveV3CloseOnPriceWithMaximumGasPrice,
652
+ [Strategies.Identifiers.CloseToCollateral]: parseAaveV3CloseOnPrice,
653
+ [Strategies.Identifiers.CloseToCollateralWithGasPrice]: parseAaveV3CloseOnPriceWithMaximumGasPrice,
654
+ [Strategies.Identifiers.OpenOrderFromCollateral]: parseAaveV3OpenOrderFromCollateral,
655
+ },
656
+ [ProtocolIdentifiers.StrategiesAutomation.CompoundV2]: {
657
+ [Strategies.Identifiers.Repay]: parseCompoundV2LeverageManagement,
658
+ [Strategies.Identifiers.Boost]: parseCompoundV2LeverageManagement,
659
+ },
660
+ [ProtocolIdentifiers.StrategiesAutomation.CompoundV3]: {
661
+ [Strategies.Identifiers.Repay]: parseCompoundV3LeverageManagement,
662
+ [Strategies.Identifiers.Boost]: parseCompoundV3LeverageManagement,
663
+ [Strategies.Identifiers.EoaRepay]: parseCompoundV3LeverageManagement,
664
+ [Strategies.Identifiers.EoaBoost]: parseCompoundV3LeverageManagement,
665
+ },
666
+ [ProtocolIdentifiers.StrategiesAutomation.ChickenBonds]: {
667
+ [Strategies.Identifiers.Rebond]: parseChickenBondsRebond,
668
+ },
669
+ [ProtocolIdentifiers.StrategiesAutomation.MorphoAaveV2]: {
670
+ [Strategies.Identifiers.Repay]: parseMorphoAaveV2LeverageManagement,
671
+ [Strategies.Identifiers.Boost]: parseMorphoAaveV2LeverageManagement,
672
+ },
673
+ [ProtocolIdentifiers.StrategiesAutomation.Exchange]: {
674
+ [Strategies.Identifiers.Dca]: parseExchangeDca,
675
+ [Strategies.Identifiers.LimitOrder]: parseExchangeLimitOrder,
676
+ },
677
+ [ProtocolIdentifiers.StrategiesAutomation.Spark]: {
678
+ [Strategies.Identifiers.Repay]: parseSparkLeverageManagement,
679
+ [Strategies.Identifiers.Boost]: parseSparkLeverageManagement,
680
+ [Strategies.Identifiers.CloseToDebt]: parseSparkCloseOnPrice,
681
+ [Strategies.Identifiers.CloseToCollateral]: parseSparkCloseOnPrice,
682
+ },
683
+ [ProtocolIdentifiers.StrategiesAutomation.CrvUSD]: {
684
+ [Strategies.Identifiers.Repay]: parseCrvUSDLeverageManagement,
685
+ [Strategies.Identifiers.Boost]: parseCrvUSDLeverageManagement,
686
+ [Strategies.Identifiers.Payback]: parseCrvUSDPayback,
687
+ },
688
+ [ProtocolIdentifiers.StrategiesAutomation.MorphoBlue]: {
689
+ [Strategies.Identifiers.Repay]: parseMorphoBlueLeverageManagement,
690
+ [Strategies.Identifiers.Boost]: parseMorphoBlueLeverageManagement,
691
+ [Strategies.Identifiers.EoaRepay]: parseMorphoBlueLeverageManagement,
692
+ [Strategies.Identifiers.EoaBoost]: parseMorphoBlueLeverageManagement,
693
+ },
694
+ };
695
+ function getParsingMethod(id, strategy) {
696
+ return parsingMethodsMapping[id][strategy.strategyId];
697
+ }
698
+ export function parseStrategiesAutomatedPosition(parseData) {
699
+ const { chainId, blockNumber, subscriptionEventData, strategiesSubsData, } = parseData;
700
+ const { subStruct, proxy, subId, subHash, } = subscriptionEventData;
701
+ const { isEnabled } = strategiesSubsData;
702
+ const id = subStruct.strategyOrBundleId;
703
+ const strategyOrBundleInfo = (subStruct.isBundle
704
+ ? BUNDLES_INFO[chainId][id]
705
+ : STRATEGIES_INFO[chainId][id]);
706
+ if (!strategyOrBundleInfo)
707
+ return null;
708
+ const position = {
709
+ isEnabled,
710
+ chainId,
711
+ subHash,
712
+ blockNumber,
713
+ positionId: 'positionId parsing not implemented.',
714
+ subId: Number(subId),
715
+ owner: proxy.toLowerCase(),
716
+ protocol: Object.assign({}, strategyOrBundleInfo.protocol),
717
+ strategy: Object.assign({ isBundle: subStruct.isBundle }, strategyOrBundleInfo),
718
+ strategyData: {
719
+ encoded: {
720
+ triggerData: subStruct.triggerData,
721
+ subData: subStruct.subData,
722
+ },
723
+ decoded: {
724
+ triggerData: null,
725
+ subData: null,
726
+ },
727
+ },
728
+ specific: {},
729
+ };
730
+ return getParsingMethod(position.protocol.id, position.strategy)(position, parseData, chainId);
731
+ }