@defisaver/automation-sdk 3.0.4 → 3.0.6

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 (143) 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 +41 -41
  6. package/.tests.sh +2 -2
  7. package/README.md +41 -41
  8. package/esm/abis/Erc20.json +223 -223
  9. package/esm/abis/SubStorage.json +17 -17
  10. package/esm/abis/UniMulticall.json +14 -14
  11. package/esm/abis/index.d.ts +9 -9
  12. package/esm/abis/index.js +30 -30
  13. package/esm/abis/legacy_AaveV2Subscriptions.json +8 -8
  14. package/esm/abis/legacy_AuthCheck.json +8 -8
  15. package/esm/abis/legacy_CompoundV2Subscriptions.json +9 -9
  16. package/esm/abis/legacy_MakerSubscriptions.json +9 -9
  17. package/esm/automation/private/Automation.d.ts +12 -12
  18. package/esm/automation/private/Automation.js +42 -42
  19. package/esm/automation/private/LegacyAutomation.d.ts +25 -25
  20. package/esm/automation/private/LegacyAutomation.js +118 -118
  21. package/esm/automation/private/LegacyProtocol.d.ts +22 -22
  22. package/esm/automation/private/LegacyProtocol.js +41 -41
  23. package/esm/automation/private/LegacyProtocol.test.d.ts +1 -1
  24. package/esm/automation/private/LegacyProtocol.test.js +25 -25
  25. package/esm/automation/private/Protocol.d.ts +22 -22
  26. package/esm/automation/private/Protocol.js +41 -41
  27. package/esm/automation/private/Protocol.test.d.ts +1 -1
  28. package/esm/automation/private/Protocol.test.js +25 -25
  29. package/esm/automation/private/StrategiesAutomation.d.ts +33 -33
  30. package/esm/automation/private/StrategiesAutomation.js +181 -181
  31. package/esm/automation/private/StrategiesAutomation.test.d.ts +1 -1
  32. package/esm/automation/private/StrategiesAutomation.test.js +671 -671
  33. package/esm/automation/public/ArbitrumStrategies.d.ts +5 -5
  34. package/esm/automation/public/ArbitrumStrategies.js +13 -13
  35. package/esm/automation/public/EthereumStrategies.d.ts +5 -5
  36. package/esm/automation/public/EthereumStrategies.js +13 -13
  37. package/esm/automation/public/OptimismStrategies.d.ts +5 -5
  38. package/esm/automation/public/OptimismStrategies.js +13 -13
  39. package/esm/automation/public/legacy/LegacyAaveAutomation.d.ts +6 -6
  40. package/esm/automation/public/legacy/LegacyAaveAutomation.js +20 -20
  41. package/esm/automation/public/legacy/LegacyCompoundAutomation.d.ts +6 -6
  42. package/esm/automation/public/legacy/LegacyCompoundAutomation.js +20 -20
  43. package/esm/automation/public/legacy/LegacyMakerAutomation.d.ts +6 -6
  44. package/esm/automation/public/legacy/LegacyMakerAutomation.js +20 -20
  45. package/esm/configuration.d.ts +1 -1
  46. package/esm/configuration.js +12 -12
  47. package/esm/constants/index.d.ts +45 -45
  48. package/esm/constants/index.js +395 -385
  49. package/esm/index.d.ts +22 -22
  50. package/esm/index.js +63 -63
  51. package/esm/services/contractService.d.ts +12 -12
  52. package/esm/services/contractService.js +54 -54
  53. package/esm/services/ethereumService.d.ts +7 -7
  54. package/esm/services/ethereumService.js +49 -49
  55. package/esm/services/ethereumService.test.d.ts +1 -1
  56. package/esm/services/ethereumService.test.js +242 -242
  57. package/esm/services/strategiesService.d.ts +2 -2
  58. package/esm/services/strategiesService.js +701 -698
  59. package/esm/services/strategiesService.test.d.ts +1 -1
  60. package/esm/services/strategiesService.test.js +110 -110
  61. package/esm/services/strategySubService.d.ts +87 -87
  62. package/esm/services/strategySubService.js +257 -252
  63. package/esm/services/strategySubService.test.d.ts +1 -1
  64. package/esm/services/strategySubService.test.js +894 -890
  65. package/esm/services/subDataService.d.ts +181 -181
  66. package/esm/services/subDataService.js +443 -442
  67. package/esm/services/subDataService.test.d.ts +1 -1
  68. package/esm/services/subDataService.test.js +1225 -1223
  69. package/esm/services/triggerService.d.ts +191 -191
  70. package/esm/services/triggerService.js +367 -367
  71. package/esm/services/triggerService.test.d.ts +1 -1
  72. package/esm/services/triggerService.test.js +926 -926
  73. package/esm/services/utils.d.ts +25 -25
  74. package/esm/services/utils.js +131 -131
  75. package/esm/services/utils.test.d.ts +1 -1
  76. package/esm/services/utils.test.js +376 -376
  77. package/esm/types/contracts/generated/Erc20.d.ts +53 -53
  78. package/esm/types/contracts/generated/Erc20.js +5 -5
  79. package/esm/types/contracts/generated/Legacy_AaveV2Subscriptions.d.ts +129 -129
  80. package/esm/types/contracts/generated/Legacy_AaveV2Subscriptions.js +5 -5
  81. package/esm/types/contracts/generated/Legacy_AuthCheck.d.ts +20 -20
  82. package/esm/types/contracts/generated/Legacy_AuthCheck.js +5 -5
  83. package/esm/types/contracts/generated/Legacy_CompoundV2Subscriptions.d.ts +128 -128
  84. package/esm/types/contracts/generated/Legacy_CompoundV2Subscriptions.js +5 -5
  85. package/esm/types/contracts/generated/Legacy_MakerSubscriptions.d.ts +246 -246
  86. package/esm/types/contracts/generated/Legacy_MakerSubscriptions.js +5 -5
  87. package/esm/types/contracts/generated/SubStorage.d.ts +114 -114
  88. package/esm/types/contracts/generated/SubStorage.js +5 -5
  89. package/esm/types/contracts/generated/UniMulticall.d.ts +55 -55
  90. package/esm/types/contracts/generated/UniMulticall.js +5 -5
  91. package/esm/types/contracts/generated/index.d.ts +7 -7
  92. package/esm/types/contracts/generated/index.js +2 -2
  93. package/esm/types/contracts/generated/types.d.ts +54 -54
  94. package/esm/types/contracts/generated/types.js +2 -2
  95. package/esm/types/enums.d.ts +160 -158
  96. package/esm/types/enums.js +180 -178
  97. package/esm/types/index.d.ts +217 -217
  98. package/esm/types/index.js +2 -2
  99. package/package.json +71 -71
  100. package/scripts/generateContractTypes.js +39 -39
  101. package/src/abis/Erc20.json +222 -222
  102. package/src/abis/SubStorage.json +17 -17
  103. package/src/abis/UniMulticall.json +14 -14
  104. package/src/abis/index.ts +28 -28
  105. package/src/abis/legacy_AaveV2Subscriptions.json +7 -7
  106. package/src/abis/legacy_AuthCheck.json +7 -7
  107. package/src/abis/legacy_CompoundV2Subscriptions.json +8 -8
  108. package/src/abis/legacy_MakerSubscriptions.json +8 -8
  109. package/src/automation/private/Automation.ts +44 -44
  110. package/src/automation/private/LegacyAutomation.ts +135 -135
  111. package/src/automation/private/LegacyProtocol.test.ts +23 -23
  112. package/src/automation/private/LegacyProtocol.ts +51 -51
  113. package/src/automation/private/Protocol.test.ts +23 -23
  114. package/src/automation/private/Protocol.ts +51 -51
  115. package/src/automation/private/StrategiesAutomation.test.ts +663 -663
  116. package/src/automation/private/StrategiesAutomation.ts +242 -242
  117. package/src/automation/public/ArbitrumStrategies.ts +10 -10
  118. package/src/automation/public/EthereumStrategies.ts +10 -10
  119. package/src/automation/public/OptimismStrategies.ts +10 -10
  120. package/src/automation/public/legacy/LegacyAaveAutomation.ts +20 -20
  121. package/src/automation/public/legacy/LegacyCompoundAutomation.ts +20 -20
  122. package/src/automation/public/legacy/LegacyMakerAutomation.ts +20 -20
  123. package/src/configuration.ts +8 -8
  124. package/src/constants/index.ts +409 -399
  125. package/src/index.ts +38 -38
  126. package/src/services/contractService.ts +77 -77
  127. package/src/services/ethereumService.test.ts +257 -257
  128. package/src/services/ethereumService.ts +69 -69
  129. package/src/services/strategiesService.test.ts +105 -105
  130. package/src/services/strategiesService.ts +905 -901
  131. package/src/services/strategySubService.test.ts +1065 -1060
  132. package/src/services/strategySubService.ts +496 -492
  133. package/src/services/subDataService.test.ts +1326 -1324
  134. package/src/services/subDataService.ts +595 -593
  135. package/src/services/triggerService.test.ts +1004 -1004
  136. package/src/services/triggerService.ts +449 -449
  137. package/src/services/utils.test.ts +430 -430
  138. package/src/services/utils.ts +103 -103
  139. package/src/types/enums.ts +174 -172
  140. package/src/types/index.ts +262 -262
  141. package/tsconfig.json +79 -79
  142. package/umd/index.js +42 -24
  143. package/webpack.umd.js +52 -52
@@ -1,698 +1,701 @@
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.owner = triggerData.owner.toLowerCase();
337
- _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner, triggerData.market);
338
- const isRepay = [enums_1.Strategies.Identifiers.Repay, enums_1.Strategies.Identifiers.EoaRepay].includes(_position.strategy.strategyId);
339
- if (isRepay) {
340
- _position.specific = {
341
- triggerRepayRatio: triggerData.ratio,
342
- targetRepayRatio: subData.targetRatio,
343
- repayEnabled: true,
344
- subId1: Number(subId),
345
- mergeWithId: enums_1.Strategies.Identifiers.Boost,
346
- };
347
- }
348
- else {
349
- _position.specific = {
350
- triggerBoostRatio: triggerData.ratio,
351
- targetBoostRatio: subData.targetRatio,
352
- boostEnabled: isEnabled,
353
- subId2: Number(subId),
354
- mergeId: enums_1.Strategies.Identifiers.Boost,
355
- };
356
- }
357
- const isEOA = _position.strategy.strategyId.includes('eoa');
358
- _position.strategy.strategyId = isEOA ? enums_1.Strategies.IdOverrides.EoaLeverageManagement : enums_1.Strategies.IdOverrides.LeverageManagement;
359
- return _position;
360
- }
361
- function parseChickenBondsRebond(position, parseData) {
362
- const _position = (0, lodash_1.cloneDeep)(position);
363
- const { subStruct } = parseData.subscriptionEventData;
364
- _position.strategyData.decoded.triggerData = triggerService.cBondsRebondTrigger.decode(subStruct.triggerData);
365
- _position.strategyData.decoded.subData = subDataService.cBondsRebondSubData.decode(subStruct.subData);
366
- _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.strategyData.decoded.triggerData.bondId);
367
- return _position;
368
- }
369
- function parseLiquityBondProtection(position, parseData) {
370
- const _position = (0, lodash_1.cloneDeep)(position);
371
- const { subStruct } = parseData.subscriptionEventData;
372
- const triggerData = triggerService.liquityRatioTrigger.decode(subStruct.triggerData);
373
- _position.strategyData.decoded.triggerData = triggerData;
374
- _position.strategyData.decoded.subData = subDataService.liquityPaybackUsingChickenBondSubData.decode(subStruct.subData);
375
- _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner);
376
- _position.specific = {
377
- triggerRepayRatio: Number(triggerData.ratio),
378
- targetRepayRatio: Infinity,
379
- repayEnabled: true,
380
- };
381
- return _position;
382
- }
383
- function parseExchangeDca(position, parseData, chainId) {
384
- const _position = (0, lodash_1.cloneDeep)(position);
385
- const { subStruct } = parseData.subscriptionEventData;
386
- _position.strategyData.decoded.triggerData = triggerService.exchangeTimestampTrigger.decode(subStruct.triggerData);
387
- _position.strategyData.decoded.subData = subDataService.exchangeDcaSubData.decode(subStruct.subData, chainId);
388
- _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner, Math.random());
389
- return _position;
390
- }
391
- function parseExchangeLimitOrder(position, parseData, chainId) {
392
- const _position = (0, lodash_1.cloneDeep)(position);
393
- const { subStruct } = parseData.subscriptionEventData;
394
- _position.strategyData.decoded.subData = subDataService.exchangeLimitOrderSubData.decode(subStruct.subData, chainId);
395
- const fromTokenDecimals = (0, tokens_1.getAssetInfoByAddress)(_position.strategyData.decoded.subData.fromToken, chainId).decimals;
396
- const toTokenDecimals = (0, tokens_1.getAssetInfoByAddress)(_position.strategyData.decoded.subData.toToken, chainId).decimals;
397
- _position.strategyData.decoded.triggerData = triggerService.exchangeOffchainPriceTrigger.decode(subStruct.triggerData, fromTokenDecimals, toTokenDecimals);
398
- _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner, Math.random());
399
- return _position;
400
- }
401
- function parseLiquityLeverageManagement(position, parseData) {
402
- const _position = (0, lodash_1.cloneDeep)(position);
403
- const { subStruct, subId } = parseData.subscriptionEventData;
404
- const { isEnabled } = parseData.strategiesSubsData;
405
- const triggerData = triggerService.liquityRatioTrigger.decode(subStruct.triggerData);
406
- const subData = subDataService.liquityLeverageManagementSubData.decode(subStruct.subData);
407
- _position.strategyData.decoded.triggerData = triggerData;
408
- _position.strategyData.decoded.subData = subData;
409
- _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner);
410
- const isRepay = _position.strategy.strategyId === enums_1.Strategies.Identifiers.Repay;
411
- if (isRepay) {
412
- _position.specific = {
413
- triggerRepayRatio: triggerData.ratio,
414
- targetRepayRatio: subData.targetRatio,
415
- repayEnabled: true,
416
- subId1: Number(subId),
417
- mergeWithId: enums_1.Strategies.Identifiers.Boost,
418
- };
419
- }
420
- else {
421
- _position.specific = {
422
- triggerBoostRatio: triggerData.ratio,
423
- targetBoostRatio: subData.targetRatio,
424
- boostEnabled: isEnabled,
425
- subId2: Number(subId),
426
- mergeId: enums_1.Strategies.Identifiers.Boost,
427
- };
428
- }
429
- _position.strategy.strategyId = enums_1.Strategies.IdOverrides.LeverageManagement;
430
- return _position;
431
- }
432
- function parseSparkLeverageManagement(position, parseData) {
433
- const _position = (0, lodash_1.cloneDeep)(position);
434
- const { subStruct, subId } = parseData.subscriptionEventData;
435
- const { isEnabled } = parseData.strategiesSubsData;
436
- const triggerData = triggerService.sparkRatioTrigger.decode(subStruct.triggerData);
437
- const subData = subDataService.sparkLeverageManagementSubData.decode(subStruct.subData);
438
- _position.strategyData.decoded.triggerData = triggerData;
439
- _position.strategyData.decoded.subData = subData;
440
- _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner, triggerData.market);
441
- const isRepay = _position.strategy.strategyId === enums_1.Strategies.Identifiers.Repay;
442
- if (isRepay) {
443
- _position.specific = {
444
- triggerRepayRatio: triggerData.ratio,
445
- targetRepayRatio: subData.targetRatio,
446
- repayEnabled: true,
447
- subId1: Number(subId),
448
- mergeWithId: enums_1.Strategies.Identifiers.Boost,
449
- };
450
- }
451
- else {
452
- _position.specific = {
453
- triggerBoostRatio: triggerData.ratio,
454
- targetBoostRatio: subData.targetRatio,
455
- boostEnabled: isEnabled,
456
- subId2: Number(subId),
457
- mergeId: enums_1.Strategies.Identifiers.Boost,
458
- };
459
- }
460
- _position.strategy.strategyId = enums_1.Strategies.IdOverrides.LeverageManagement;
461
- return _position;
462
- }
463
- function parseSparkCloseOnPrice(position, parseData) {
464
- const _position = (0, lodash_1.cloneDeep)(position);
465
- const { subStruct } = parseData.subscriptionEventData;
466
- const triggerData = triggerService.sparkQuotePriceTrigger.decode(subStruct.triggerData);
467
- const subData = subDataService.sparkQuotePriceSubData.decode(subStruct.subData);
468
- _position.strategyData.decoded.triggerData = triggerData;
469
- _position.strategyData.decoded.subData = subData;
470
- _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner, SPARK_MARKET_ADDRESSES[_position.chainId]);
471
- _position.specific = {
472
- collAsset: subData.collAsset,
473
- collAssetId: subData.collAssetId,
474
- debtAsset: subData.debtAsset,
475
- debtAssetId: subData.debtAssetId,
476
- baseToken: triggerData.baseTokenAddress,
477
- quoteToken: triggerData.quoteTokenAddress,
478
- price: triggerData.price,
479
- ratioState: triggerData.ratioState,
480
- };
481
- 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);
482
- _position.strategy.strategyId = (0, utils_1.isRatioStateOver)(ratioState) ? enums_1.Strategies.IdOverrides.TakeProfit : enums_1.Strategies.IdOverrides.StopLoss;
483
- return _position;
484
- }
485
- function parseLiquitySavingsLiqProtection(position, parseData) {
486
- const _position = (0, lodash_1.cloneDeep)(position);
487
- const { subStruct } = parseData.subscriptionEventData;
488
- const triggerData = triggerService.liquityRatioTrigger.decode(subStruct.triggerData);
489
- const subData = subDataService.liquityRepayFromSavingsSubData.decode(subStruct.subData);
490
- _position.strategyData.decoded.triggerData = triggerData;
491
- _position.strategyData.decoded.subData = subData;
492
- _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner);
493
- _position.specific = {
494
- triggerRepayRatio: triggerData.ratio,
495
- targetRepayRatio: subData.targetRatio,
496
- repayEnabled: true,
497
- boostEnabled: false,
498
- };
499
- return _position;
500
- }
501
- function parseLiquityDebtInFrontRepay(position, parseData) {
502
- const _position = (0, lodash_1.cloneDeep)(position);
503
- const { subStruct } = parseData.subscriptionEventData;
504
- const triggerData = triggerService.liquityDebtInFrontWithLimitTrigger.decode(subStruct.triggerData);
505
- const subData = subDataService.liquityDebtInFrontRepaySubData.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);
509
- _position.specific = {
510
- debtInFrontMin: triggerData.debtInFrontMin,
511
- targetRepayRatioIncrease: subData.targetRatioIncrease,
512
- };
513
- return _position;
514
- }
515
- function parseCrvUSDLeverageManagement(position, parseData) {
516
- const _position = (0, lodash_1.cloneDeep)(position);
517
- const { subStruct, subId, subHash } = parseData.subscriptionEventData;
518
- const { isEnabled } = parseData.strategiesSubsData;
519
- const triggerData = triggerService.crvUSDRatioTrigger.decode(subStruct.triggerData);
520
- const subData = subDataService.crvUSDLeverageManagementSubData.decode(subStruct.subData);
521
- _position.strategyData.decoded.triggerData = triggerData;
522
- _position.strategyData.decoded.subData = subData;
523
- _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner, triggerData.controller);
524
- const isRepay = _position.strategy.strategyId === enums_1.Strategies.Identifiers.Repay;
525
- if (isRepay) {
526
- _position.specific = {
527
- triggerRepayRatio: triggerData.ratio,
528
- targetRepayRatio: subData.targetRatio,
529
- repayEnabled: isEnabled,
530
- subId1: Number(subId),
531
- subHashRepay: subHash,
532
- mergeWithId: enums_1.Strategies.Identifiers.Boost,
533
- };
534
- }
535
- else {
536
- _position.specific = {
537
- triggerBoostRatio: triggerData.ratio,
538
- targetBoostRatio: subData.targetRatio,
539
- boostEnabled: isEnabled,
540
- subId2: Number(subId),
541
- subHashBoost: subHash,
542
- mergeId: enums_1.Strategies.Identifiers.Boost,
543
- };
544
- }
545
- _position.strategy.strategyId = enums_1.Strategies.IdOverrides.LeverageManagement;
546
- return _position;
547
- }
548
- function parseCrvUSDPayback(position, parseData) {
549
- const _position = (0, lodash_1.cloneDeep)(position);
550
- const { subStruct } = parseData.subscriptionEventData;
551
- const triggerData = triggerService.crvUsdHealthRatioTrigger.decode(subStruct.triggerData);
552
- const subData = subDataService.crvUSDPaybackSubData.decode(subStruct.subData);
553
- _position.strategyData.decoded.triggerData = triggerData;
554
- _position.strategyData.decoded.subData = subData;
555
- _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner, triggerData.controller, Math.random());
556
- _position.strategy.strategyId = enums_1.Strategies.Identifiers.Payback;
557
- return _position;
558
- }
559
- function parseMorphoBlueLeverageManagement(position, parseData) {
560
- const _position = (0, lodash_1.cloneDeep)(position);
561
- const { subStruct, subId, subHash } = parseData.subscriptionEventData;
562
- const { isEnabled } = parseData.strategiesSubsData;
563
- const triggerData = triggerService.morphoBlueRatioTrigger.decode(subStruct.triggerData);
564
- const subData = subDataService.morphoBlueLeverageManagementSubData.decode(subStruct.subData);
565
- _position.strategyData.decoded.triggerData = triggerData;
566
- _position.strategyData.decoded.subData = subData;
567
- _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner, triggerData.marketId);
568
- const isRepay = _position.strategy.strategyId === enums_1.Strategies.Identifiers.Repay;
569
- if (isRepay) {
570
- _position.specific = {
571
- triggerRepayRatio: triggerData.ratio,
572
- targetRepayRatio: subData.targetRatio,
573
- repayEnabled: isEnabled,
574
- subId1: Number(subId),
575
- subHashRepay: subHash,
576
- mergeWithId: enums_1.Strategies.Identifiers.Boost,
577
- };
578
- }
579
- else {
580
- _position.specific = {
581
- triggerBoostRatio: triggerData.ratio,
582
- targetBoostRatio: subData.targetRatio,
583
- boostEnabled: isEnabled,
584
- subId2: Number(subId),
585
- subHashBoost: subHash,
586
- mergeId: enums_1.Strategies.Identifiers.Boost,
587
- };
588
- }
589
- _position.strategy.strategyId = enums_1.Strategies.IdOverrides.LeverageManagement;
590
- return _position;
591
- }
592
- const parsingMethodsMapping = {
593
- [enums_1.ProtocolIdentifiers.StrategiesAutomation.MakerDAO]: {
594
- [enums_1.Strategies.Identifiers.SavingsLiqProtection]: parseMakerSavingsLiqProtection,
595
- [enums_1.Strategies.Identifiers.CloseOnPriceToDebt]: parseMakerCloseOnPrice,
596
- [enums_1.Strategies.Identifiers.CloseOnPriceToColl]: parseMakerCloseOnPrice,
597
- [enums_1.Strategies.Identifiers.TrailingStopToColl]: parseMakerTrailingStop,
598
- [enums_1.Strategies.Identifiers.TrailingStopToDebt]: parseMakerTrailingStop,
599
- [enums_1.Strategies.Identifiers.Repay]: parseMakerLeverageManagement,
600
- [enums_1.Strategies.Identifiers.Boost]: parseMakerLeverageManagement,
601
- },
602
- [enums_1.ProtocolIdentifiers.StrategiesAutomation.Liquity]: {
603
- [enums_1.Strategies.Identifiers.CloseOnPriceToColl]: parseLiquityCloseOnPrice,
604
- [enums_1.Strategies.Identifiers.TrailingStopToColl]: parseLiquityTrailingStop,
605
- [enums_1.Strategies.Identifiers.BondProtection]: parseLiquityBondProtection,
606
- [enums_1.Strategies.Identifiers.Repay]: parseLiquityLeverageManagement,
607
- [enums_1.Strategies.Identifiers.Boost]: parseLiquityLeverageManagement,
608
- [enums_1.Strategies.Identifiers.SavingsDsrPayback]: parseLiquitySavingsLiqProtection,
609
- [enums_1.Strategies.Identifiers.SavingsDsrSupply]: parseLiquitySavingsLiqProtection,
610
- [enums_1.Strategies.Identifiers.DebtInFrontRepay]: parseLiquityDebtInFrontRepay,
611
- },
612
- [enums_1.ProtocolIdentifiers.StrategiesAutomation.AaveV2]: {
613
- [enums_1.Strategies.Identifiers.Repay]: parseAaveV2LeverageManagement,
614
- [enums_1.Strategies.Identifiers.Boost]: parseAaveV2LeverageManagement,
615
- },
616
- [enums_1.ProtocolIdentifiers.StrategiesAutomation.AaveV3]: {
617
- [enums_1.Strategies.Identifiers.Repay]: parseAaveV3LeverageManagement,
618
- [enums_1.Strategies.Identifiers.Boost]: parseAaveV3LeverageManagement,
619
- [enums_1.Strategies.Identifiers.CloseToDebt]: parseAaveV3CloseOnPrice,
620
- [enums_1.Strategies.Identifiers.CloseToDebtWithGasPrice]: parseAaveV3CloseOnPriceWithMaximumGasPrice,
621
- [enums_1.Strategies.Identifiers.CloseToCollateral]: parseAaveV3CloseOnPrice,
622
- [enums_1.Strategies.Identifiers.CloseToCollateralWithGasPrice]: parseAaveV3CloseOnPriceWithMaximumGasPrice,
623
- },
624
- [enums_1.ProtocolIdentifiers.StrategiesAutomation.CompoundV2]: {
625
- [enums_1.Strategies.Identifiers.Repay]: parseCompoundV2LeverageManagement,
626
- [enums_1.Strategies.Identifiers.Boost]: parseCompoundV2LeverageManagement,
627
- },
628
- [enums_1.ProtocolIdentifiers.StrategiesAutomation.CompoundV3]: {
629
- [enums_1.Strategies.Identifiers.Repay]: parseCompoundV3LeverageManagement,
630
- [enums_1.Strategies.Identifiers.Boost]: parseCompoundV3LeverageManagement,
631
- [enums_1.Strategies.Identifiers.EoaRepay]: parseCompoundV3LeverageManagement,
632
- [enums_1.Strategies.Identifiers.EoaBoost]: parseCompoundV3LeverageManagement,
633
- },
634
- [enums_1.ProtocolIdentifiers.StrategiesAutomation.ChickenBonds]: {
635
- [enums_1.Strategies.Identifiers.Rebond]: parseChickenBondsRebond,
636
- },
637
- [enums_1.ProtocolIdentifiers.StrategiesAutomation.MorphoAaveV2]: {
638
- [enums_1.Strategies.Identifiers.Repay]: parseMorphoAaveV2LeverageManagement,
639
- [enums_1.Strategies.Identifiers.Boost]: parseMorphoAaveV2LeverageManagement,
640
- },
641
- [enums_1.ProtocolIdentifiers.StrategiesAutomation.Exchange]: {
642
- [enums_1.Strategies.Identifiers.Dca]: parseExchangeDca,
643
- [enums_1.Strategies.Identifiers.LimitOrder]: parseExchangeLimitOrder,
644
- },
645
- [enums_1.ProtocolIdentifiers.StrategiesAutomation.Spark]: {
646
- [enums_1.Strategies.Identifiers.Repay]: parseSparkLeverageManagement,
647
- [enums_1.Strategies.Identifiers.Boost]: parseSparkLeverageManagement,
648
- [enums_1.Strategies.Identifiers.CloseToDebt]: parseSparkCloseOnPrice,
649
- [enums_1.Strategies.Identifiers.CloseToCollateral]: parseSparkCloseOnPrice,
650
- },
651
- [enums_1.ProtocolIdentifiers.StrategiesAutomation.CrvUSD]: {
652
- [enums_1.Strategies.Identifiers.Repay]: parseCrvUSDLeverageManagement,
653
- [enums_1.Strategies.Identifiers.Boost]: parseCrvUSDLeverageManagement,
654
- [enums_1.Strategies.Identifiers.Payback]: parseCrvUSDPayback,
655
- },
656
- [enums_1.ProtocolIdentifiers.StrategiesAutomation.MorphoBlue]: {
657
- [enums_1.Strategies.Identifiers.Repay]: parseMorphoBlueLeverageManagement,
658
- [enums_1.Strategies.Identifiers.Boost]: parseMorphoBlueLeverageManagement,
659
- },
660
- };
661
- function getParsingMethod(id, strategy) {
662
- return parsingMethodsMapping[id][strategy.strategyId];
663
- }
664
- function parseStrategiesAutomatedPosition(parseData) {
665
- const { chainId, blockNumber, subscriptionEventData, strategiesSubsData, } = parseData;
666
- const { subStruct, proxy, subId, subHash, } = subscriptionEventData;
667
- const { isEnabled } = strategiesSubsData;
668
- const id = subStruct.strategyOrBundleId;
669
- const strategyOrBundleInfo = (subStruct.isBundle
670
- ? constants_1.BUNDLES_INFO[chainId][id]
671
- : constants_1.STRATEGIES_INFO[chainId][id]);
672
- if (!strategyOrBundleInfo)
673
- return null;
674
- const position = {
675
- isEnabled,
676
- chainId,
677
- subHash,
678
- blockNumber,
679
- positionId: 'positionId parsing not implemented.',
680
- subId: Number(subId),
681
- owner: proxy.toLowerCase(),
682
- protocol: Object.assign({}, strategyOrBundleInfo.protocol),
683
- strategy: Object.assign({ isBundle: subStruct.isBundle }, strategyOrBundleInfo),
684
- strategyData: {
685
- encoded: {
686
- triggerData: subStruct.triggerData,
687
- subData: subStruct.subData,
688
- },
689
- decoded: {
690
- triggerData: null,
691
- subData: null,
692
- },
693
- },
694
- specific: {},
695
- };
696
- return getParsingMethod(position.protocol.id, position.strategy)(position, parseData, chainId);
697
- }
698
- 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
+ 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.owner = triggerData.owner.toLowerCase();
337
+ _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner, triggerData.market);
338
+ const isRepay = [enums_1.Strategies.Identifiers.Repay, enums_1.Strategies.Identifiers.EoaRepay].includes(_position.strategy.strategyId);
339
+ if (isRepay) {
340
+ _position.specific = {
341
+ triggerRepayRatio: triggerData.ratio,
342
+ targetRepayRatio: subData.targetRatio,
343
+ repayEnabled: true,
344
+ subId1: Number(subId),
345
+ mergeWithId: enums_1.Strategies.Identifiers.Boost,
346
+ };
347
+ }
348
+ else {
349
+ _position.specific = {
350
+ triggerBoostRatio: triggerData.ratio,
351
+ targetBoostRatio: subData.targetRatio,
352
+ boostEnabled: isEnabled,
353
+ subId2: Number(subId),
354
+ mergeId: enums_1.Strategies.Identifiers.Boost,
355
+ };
356
+ }
357
+ const isEOA = _position.strategy.strategyId.includes('eoa');
358
+ _position.strategy.strategyId = isEOA ? enums_1.Strategies.IdOverrides.EoaLeverageManagement : enums_1.Strategies.IdOverrides.LeverageManagement;
359
+ return _position;
360
+ }
361
+ function parseChickenBondsRebond(position, parseData) {
362
+ const _position = (0, lodash_1.cloneDeep)(position);
363
+ const { subStruct } = parseData.subscriptionEventData;
364
+ _position.strategyData.decoded.triggerData = triggerService.cBondsRebondTrigger.decode(subStruct.triggerData);
365
+ _position.strategyData.decoded.subData = subDataService.cBondsRebondSubData.decode(subStruct.subData);
366
+ _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.strategyData.decoded.triggerData.bondId);
367
+ return _position;
368
+ }
369
+ function parseLiquityBondProtection(position, parseData) {
370
+ const _position = (0, lodash_1.cloneDeep)(position);
371
+ const { subStruct } = parseData.subscriptionEventData;
372
+ const triggerData = triggerService.liquityRatioTrigger.decode(subStruct.triggerData);
373
+ _position.strategyData.decoded.triggerData = triggerData;
374
+ _position.strategyData.decoded.subData = subDataService.liquityPaybackUsingChickenBondSubData.decode(subStruct.subData);
375
+ _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner);
376
+ _position.specific = {
377
+ triggerRepayRatio: Number(triggerData.ratio),
378
+ targetRepayRatio: Infinity,
379
+ repayEnabled: true,
380
+ };
381
+ return _position;
382
+ }
383
+ function parseExchangeDca(position, parseData, chainId) {
384
+ const _position = (0, lodash_1.cloneDeep)(position);
385
+ const { subStruct } = parseData.subscriptionEventData;
386
+ _position.strategyData.decoded.triggerData = triggerService.exchangeTimestampTrigger.decode(subStruct.triggerData);
387
+ _position.strategyData.decoded.subData = subDataService.exchangeDcaSubData.decode(subStruct.subData, chainId);
388
+ _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner, Math.random());
389
+ return _position;
390
+ }
391
+ function parseExchangeLimitOrder(position, parseData, chainId) {
392
+ const _position = (0, lodash_1.cloneDeep)(position);
393
+ const { subStruct } = parseData.subscriptionEventData;
394
+ _position.strategyData.decoded.subData = subDataService.exchangeLimitOrderSubData.decode(subStruct.subData, chainId);
395
+ const fromTokenDecimals = (0, tokens_1.getAssetInfoByAddress)(_position.strategyData.decoded.subData.fromToken, chainId).decimals;
396
+ const toTokenDecimals = (0, tokens_1.getAssetInfoByAddress)(_position.strategyData.decoded.subData.toToken, chainId).decimals;
397
+ _position.strategyData.decoded.triggerData = triggerService.exchangeOffchainPriceTrigger.decode(subStruct.triggerData, fromTokenDecimals, toTokenDecimals);
398
+ _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner, Math.random());
399
+ return _position;
400
+ }
401
+ function parseLiquityLeverageManagement(position, parseData) {
402
+ const _position = (0, lodash_1.cloneDeep)(position);
403
+ const { subStruct, subId } = parseData.subscriptionEventData;
404
+ const { isEnabled } = parseData.strategiesSubsData;
405
+ const triggerData = triggerService.liquityRatioTrigger.decode(subStruct.triggerData);
406
+ const subData = subDataService.liquityLeverageManagementSubData.decode(subStruct.subData);
407
+ _position.strategyData.decoded.triggerData = triggerData;
408
+ _position.strategyData.decoded.subData = subData;
409
+ _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner);
410
+ const isRepay = _position.strategy.strategyId === enums_1.Strategies.Identifiers.Repay;
411
+ if (isRepay) {
412
+ _position.specific = {
413
+ triggerRepayRatio: triggerData.ratio,
414
+ targetRepayRatio: subData.targetRatio,
415
+ repayEnabled: true,
416
+ subId1: Number(subId),
417
+ mergeWithId: enums_1.Strategies.Identifiers.Boost,
418
+ };
419
+ }
420
+ else {
421
+ _position.specific = {
422
+ triggerBoostRatio: triggerData.ratio,
423
+ targetBoostRatio: subData.targetRatio,
424
+ boostEnabled: isEnabled,
425
+ subId2: Number(subId),
426
+ mergeId: enums_1.Strategies.Identifiers.Boost,
427
+ };
428
+ }
429
+ _position.strategy.strategyId = enums_1.Strategies.IdOverrides.LeverageManagement;
430
+ return _position;
431
+ }
432
+ function parseSparkLeverageManagement(position, parseData) {
433
+ const _position = (0, lodash_1.cloneDeep)(position);
434
+ const { subStruct, subId } = parseData.subscriptionEventData;
435
+ const { isEnabled } = parseData.strategiesSubsData;
436
+ const triggerData = triggerService.sparkRatioTrigger.decode(subStruct.triggerData);
437
+ const subData = subDataService.sparkLeverageManagementSubData.decode(subStruct.subData);
438
+ _position.strategyData.decoded.triggerData = triggerData;
439
+ _position.strategyData.decoded.subData = subData;
440
+ _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner, triggerData.market);
441
+ const isRepay = _position.strategy.strategyId === enums_1.Strategies.Identifiers.Repay;
442
+ if (isRepay) {
443
+ _position.specific = {
444
+ triggerRepayRatio: triggerData.ratio,
445
+ targetRepayRatio: subData.targetRatio,
446
+ repayEnabled: true,
447
+ subId1: Number(subId),
448
+ mergeWithId: enums_1.Strategies.Identifiers.Boost,
449
+ };
450
+ }
451
+ else {
452
+ _position.specific = {
453
+ triggerBoostRatio: triggerData.ratio,
454
+ targetBoostRatio: subData.targetRatio,
455
+ boostEnabled: isEnabled,
456
+ subId2: Number(subId),
457
+ mergeId: enums_1.Strategies.Identifiers.Boost,
458
+ };
459
+ }
460
+ _position.strategy.strategyId = enums_1.Strategies.IdOverrides.LeverageManagement;
461
+ return _position;
462
+ }
463
+ function parseSparkCloseOnPrice(position, parseData) {
464
+ const _position = (0, lodash_1.cloneDeep)(position);
465
+ const { subStruct } = parseData.subscriptionEventData;
466
+ const triggerData = triggerService.sparkQuotePriceTrigger.decode(subStruct.triggerData);
467
+ const subData = subDataService.sparkQuotePriceSubData.decode(subStruct.subData);
468
+ _position.strategyData.decoded.triggerData = triggerData;
469
+ _position.strategyData.decoded.subData = subData;
470
+ _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner, SPARK_MARKET_ADDRESSES[_position.chainId]);
471
+ _position.specific = {
472
+ collAsset: subData.collAsset,
473
+ collAssetId: subData.collAssetId,
474
+ debtAsset: subData.debtAsset,
475
+ debtAssetId: subData.debtAssetId,
476
+ baseToken: triggerData.baseTokenAddress,
477
+ quoteToken: triggerData.quoteTokenAddress,
478
+ price: triggerData.price,
479
+ ratioState: triggerData.ratioState,
480
+ };
481
+ 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);
482
+ _position.strategy.strategyId = (0, utils_1.isRatioStateOver)(ratioState) ? enums_1.Strategies.IdOverrides.TakeProfit : enums_1.Strategies.IdOverrides.StopLoss;
483
+ return _position;
484
+ }
485
+ function parseLiquitySavingsLiqProtection(position, parseData) {
486
+ const _position = (0, lodash_1.cloneDeep)(position);
487
+ const { subStruct } = parseData.subscriptionEventData;
488
+ const triggerData = triggerService.liquityRatioTrigger.decode(subStruct.triggerData);
489
+ const subData = subDataService.liquityRepayFromSavingsSubData.decode(subStruct.subData);
490
+ _position.strategyData.decoded.triggerData = triggerData;
491
+ _position.strategyData.decoded.subData = subData;
492
+ _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner);
493
+ _position.specific = {
494
+ triggerRepayRatio: triggerData.ratio,
495
+ targetRepayRatio: subData.targetRatio,
496
+ repayEnabled: true,
497
+ boostEnabled: false,
498
+ };
499
+ return _position;
500
+ }
501
+ function parseLiquityDebtInFrontRepay(position, parseData) {
502
+ const _position = (0, lodash_1.cloneDeep)(position);
503
+ const { subStruct } = parseData.subscriptionEventData;
504
+ const triggerData = triggerService.liquityDebtInFrontWithLimitTrigger.decode(subStruct.triggerData);
505
+ const subData = subDataService.liquityDebtInFrontRepaySubData.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);
509
+ _position.specific = {
510
+ debtInFrontMin: triggerData.debtInFrontMin,
511
+ targetRepayRatioIncrease: subData.targetRatioIncrease,
512
+ };
513
+ return _position;
514
+ }
515
+ function parseCrvUSDLeverageManagement(position, parseData) {
516
+ const _position = (0, lodash_1.cloneDeep)(position);
517
+ const { subStruct, subId, subHash } = parseData.subscriptionEventData;
518
+ const { isEnabled } = parseData.strategiesSubsData;
519
+ const triggerData = triggerService.crvUSDRatioTrigger.decode(subStruct.triggerData);
520
+ const subData = subDataService.crvUSDLeverageManagementSubData.decode(subStruct.subData);
521
+ _position.strategyData.decoded.triggerData = triggerData;
522
+ _position.strategyData.decoded.subData = subData;
523
+ _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner, triggerData.controller);
524
+ const isRepay = _position.strategy.strategyId === enums_1.Strategies.Identifiers.Repay;
525
+ if (isRepay) {
526
+ _position.specific = {
527
+ triggerRepayRatio: triggerData.ratio,
528
+ targetRepayRatio: subData.targetRatio,
529
+ repayEnabled: isEnabled,
530
+ subId1: Number(subId),
531
+ subHashRepay: subHash,
532
+ mergeWithId: enums_1.Strategies.Identifiers.Boost,
533
+ };
534
+ }
535
+ else {
536
+ _position.specific = {
537
+ triggerBoostRatio: triggerData.ratio,
538
+ targetBoostRatio: subData.targetRatio,
539
+ boostEnabled: isEnabled,
540
+ subId2: Number(subId),
541
+ subHashBoost: subHash,
542
+ mergeId: enums_1.Strategies.Identifiers.Boost,
543
+ };
544
+ }
545
+ _position.strategy.strategyId = enums_1.Strategies.IdOverrides.LeverageManagement;
546
+ return _position;
547
+ }
548
+ function parseCrvUSDPayback(position, parseData) {
549
+ const _position = (0, lodash_1.cloneDeep)(position);
550
+ const { subStruct } = parseData.subscriptionEventData;
551
+ const triggerData = triggerService.crvUsdHealthRatioTrigger.decode(subStruct.triggerData);
552
+ const subData = subDataService.crvUSDPaybackSubData.decode(subStruct.subData);
553
+ _position.strategyData.decoded.triggerData = triggerData;
554
+ _position.strategyData.decoded.subData = subData;
555
+ _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner, triggerData.controller, Math.random());
556
+ _position.strategy.strategyId = enums_1.Strategies.Identifiers.Payback;
557
+ return _position;
558
+ }
559
+ function parseMorphoBlueLeverageManagement(position, parseData) {
560
+ const _position = (0, lodash_1.cloneDeep)(position);
561
+ const { subStruct, subId, subHash } = parseData.subscriptionEventData;
562
+ const { isEnabled } = parseData.strategiesSubsData;
563
+ const triggerData = triggerService.morphoBlueRatioTrigger.decode(subStruct.triggerData);
564
+ const subData = subDataService.morphoBlueLeverageManagementSubData.decode(subStruct.subData);
565
+ _position.strategyData.decoded.triggerData = triggerData;
566
+ _position.strategyData.decoded.subData = subData;
567
+ _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner, triggerData.marketId);
568
+ const isRepay = [enums_1.Strategies.Identifiers.Repay, enums_1.Strategies.Identifiers.EoaRepay].includes(_position.strategy.strategyId);
569
+ if (isRepay) {
570
+ _position.specific = {
571
+ triggerRepayRatio: triggerData.ratio,
572
+ targetRepayRatio: subData.targetRatio,
573
+ repayEnabled: isEnabled,
574
+ subId1: Number(subId),
575
+ subHashRepay: subHash,
576
+ mergeWithId: enums_1.Strategies.Identifiers.Boost,
577
+ };
578
+ }
579
+ else {
580
+ _position.specific = {
581
+ triggerBoostRatio: triggerData.ratio,
582
+ targetBoostRatio: subData.targetRatio,
583
+ boostEnabled: isEnabled,
584
+ subId2: Number(subId),
585
+ subHashBoost: subHash,
586
+ mergeId: enums_1.Strategies.Identifiers.Boost,
587
+ };
588
+ }
589
+ const isEOA = _position.strategy.strategyId.includes('eoa');
590
+ _position.strategy.strategyId = isEOA ? enums_1.Strategies.IdOverrides.EoaLeverageManagement : enums_1.Strategies.IdOverrides.LeverageManagement;
591
+ return _position;
592
+ }
593
+ const parsingMethodsMapping = {
594
+ [enums_1.ProtocolIdentifiers.StrategiesAutomation.MakerDAO]: {
595
+ [enums_1.Strategies.Identifiers.SavingsLiqProtection]: parseMakerSavingsLiqProtection,
596
+ [enums_1.Strategies.Identifiers.CloseOnPriceToDebt]: parseMakerCloseOnPrice,
597
+ [enums_1.Strategies.Identifiers.CloseOnPriceToColl]: parseMakerCloseOnPrice,
598
+ [enums_1.Strategies.Identifiers.TrailingStopToColl]: parseMakerTrailingStop,
599
+ [enums_1.Strategies.Identifiers.TrailingStopToDebt]: parseMakerTrailingStop,
600
+ [enums_1.Strategies.Identifiers.Repay]: parseMakerLeverageManagement,
601
+ [enums_1.Strategies.Identifiers.Boost]: parseMakerLeverageManagement,
602
+ },
603
+ [enums_1.ProtocolIdentifiers.StrategiesAutomation.Liquity]: {
604
+ [enums_1.Strategies.Identifiers.CloseOnPriceToColl]: parseLiquityCloseOnPrice,
605
+ [enums_1.Strategies.Identifiers.TrailingStopToColl]: parseLiquityTrailingStop,
606
+ [enums_1.Strategies.Identifiers.BondProtection]: parseLiquityBondProtection,
607
+ [enums_1.Strategies.Identifiers.Repay]: parseLiquityLeverageManagement,
608
+ [enums_1.Strategies.Identifiers.Boost]: parseLiquityLeverageManagement,
609
+ [enums_1.Strategies.Identifiers.SavingsDsrPayback]: parseLiquitySavingsLiqProtection,
610
+ [enums_1.Strategies.Identifiers.SavingsDsrSupply]: parseLiquitySavingsLiqProtection,
611
+ [enums_1.Strategies.Identifiers.DebtInFrontRepay]: parseLiquityDebtInFrontRepay,
612
+ },
613
+ [enums_1.ProtocolIdentifiers.StrategiesAutomation.AaveV2]: {
614
+ [enums_1.Strategies.Identifiers.Repay]: parseAaveV2LeverageManagement,
615
+ [enums_1.Strategies.Identifiers.Boost]: parseAaveV2LeverageManagement,
616
+ },
617
+ [enums_1.ProtocolIdentifiers.StrategiesAutomation.AaveV3]: {
618
+ [enums_1.Strategies.Identifiers.Repay]: parseAaveV3LeverageManagement,
619
+ [enums_1.Strategies.Identifiers.Boost]: parseAaveV3LeverageManagement,
620
+ [enums_1.Strategies.Identifiers.CloseToDebt]: parseAaveV3CloseOnPrice,
621
+ [enums_1.Strategies.Identifiers.CloseToDebtWithGasPrice]: parseAaveV3CloseOnPriceWithMaximumGasPrice,
622
+ [enums_1.Strategies.Identifiers.CloseToCollateral]: parseAaveV3CloseOnPrice,
623
+ [enums_1.Strategies.Identifiers.CloseToCollateralWithGasPrice]: parseAaveV3CloseOnPriceWithMaximumGasPrice,
624
+ },
625
+ [enums_1.ProtocolIdentifiers.StrategiesAutomation.CompoundV2]: {
626
+ [enums_1.Strategies.Identifiers.Repay]: parseCompoundV2LeverageManagement,
627
+ [enums_1.Strategies.Identifiers.Boost]: parseCompoundV2LeverageManagement,
628
+ },
629
+ [enums_1.ProtocolIdentifiers.StrategiesAutomation.CompoundV3]: {
630
+ [enums_1.Strategies.Identifiers.Repay]: parseCompoundV3LeverageManagement,
631
+ [enums_1.Strategies.Identifiers.Boost]: parseCompoundV3LeverageManagement,
632
+ [enums_1.Strategies.Identifiers.EoaRepay]: parseCompoundV3LeverageManagement,
633
+ [enums_1.Strategies.Identifiers.EoaBoost]: parseCompoundV3LeverageManagement,
634
+ },
635
+ [enums_1.ProtocolIdentifiers.StrategiesAutomation.ChickenBonds]: {
636
+ [enums_1.Strategies.Identifiers.Rebond]: parseChickenBondsRebond,
637
+ },
638
+ [enums_1.ProtocolIdentifiers.StrategiesAutomation.MorphoAaveV2]: {
639
+ [enums_1.Strategies.Identifiers.Repay]: parseMorphoAaveV2LeverageManagement,
640
+ [enums_1.Strategies.Identifiers.Boost]: parseMorphoAaveV2LeverageManagement,
641
+ },
642
+ [enums_1.ProtocolIdentifiers.StrategiesAutomation.Exchange]: {
643
+ [enums_1.Strategies.Identifiers.Dca]: parseExchangeDca,
644
+ [enums_1.Strategies.Identifiers.LimitOrder]: parseExchangeLimitOrder,
645
+ },
646
+ [enums_1.ProtocolIdentifiers.StrategiesAutomation.Spark]: {
647
+ [enums_1.Strategies.Identifiers.Repay]: parseSparkLeverageManagement,
648
+ [enums_1.Strategies.Identifiers.Boost]: parseSparkLeverageManagement,
649
+ [enums_1.Strategies.Identifiers.CloseToDebt]: parseSparkCloseOnPrice,
650
+ [enums_1.Strategies.Identifiers.CloseToCollateral]: parseSparkCloseOnPrice,
651
+ },
652
+ [enums_1.ProtocolIdentifiers.StrategiesAutomation.CrvUSD]: {
653
+ [enums_1.Strategies.Identifiers.Repay]: parseCrvUSDLeverageManagement,
654
+ [enums_1.Strategies.Identifiers.Boost]: parseCrvUSDLeverageManagement,
655
+ [enums_1.Strategies.Identifiers.Payback]: parseCrvUSDPayback,
656
+ },
657
+ [enums_1.ProtocolIdentifiers.StrategiesAutomation.MorphoBlue]: {
658
+ [enums_1.Strategies.Identifiers.Repay]: parseMorphoBlueLeverageManagement,
659
+ [enums_1.Strategies.Identifiers.Boost]: parseMorphoBlueLeverageManagement,
660
+ [enums_1.Strategies.Identifiers.EoaRepay]: parseMorphoBlueLeverageManagement,
661
+ [enums_1.Strategies.Identifiers.EoaBoost]: parseMorphoBlueLeverageManagement,
662
+ },
663
+ };
664
+ function getParsingMethod(id, strategy) {
665
+ return parsingMethodsMapping[id][strategy.strategyId];
666
+ }
667
+ function parseStrategiesAutomatedPosition(parseData) {
668
+ const { chainId, blockNumber, subscriptionEventData, strategiesSubsData, } = parseData;
669
+ const { subStruct, proxy, subId, subHash, } = subscriptionEventData;
670
+ const { isEnabled } = strategiesSubsData;
671
+ const id = subStruct.strategyOrBundleId;
672
+ const strategyOrBundleInfo = (subStruct.isBundle
673
+ ? constants_1.BUNDLES_INFO[chainId][id]
674
+ : constants_1.STRATEGIES_INFO[chainId][id]);
675
+ if (!strategyOrBundleInfo)
676
+ return null;
677
+ const position = {
678
+ isEnabled,
679
+ chainId,
680
+ subHash,
681
+ blockNumber,
682
+ positionId: 'positionId parsing not implemented.',
683
+ subId: Number(subId),
684
+ owner: proxy.toLowerCase(),
685
+ protocol: Object.assign({}, strategyOrBundleInfo.protocol),
686
+ strategy: Object.assign({ isBundle: subStruct.isBundle }, strategyOrBundleInfo),
687
+ strategyData: {
688
+ encoded: {
689
+ triggerData: subStruct.triggerData,
690
+ subData: subStruct.subData,
691
+ },
692
+ decoded: {
693
+ triggerData: null,
694
+ subData: null,
695
+ },
696
+ },
697
+ specific: {},
698
+ };
699
+ return getParsingMethod(position.protocol.id, position.strategy)(position, parseData, chainId);
700
+ }
701
+ exports.parseStrategiesAutomatedPosition = parseStrategiesAutomatedPosition;