@defisaver/automation-sdk 3.3.17 → 3.3.18-audit-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 (35) hide show
  1. package/cjs/constants/index.js +135 -0
  2. package/cjs/index.d.ts +2 -2
  3. package/cjs/index.js +5 -2
  4. package/cjs/services/strategiesService.js +157 -9
  5. package/cjs/services/strategySubService.d.ts +18 -17
  6. package/cjs/services/strategySubService.js +68 -28
  7. package/cjs/services/strategySubService.test.js +2 -40
  8. package/cjs/services/subDataService.d.ts +70 -20
  9. package/cjs/services/subDataService.js +23 -79
  10. package/cjs/services/subDataService.test.js +17 -202
  11. package/cjs/types/enums.d.ts +35 -4
  12. package/cjs/types/enums.js +31 -0
  13. package/esm/constants/index.js +135 -0
  14. package/esm/index.d.ts +2 -2
  15. package/esm/index.js +5 -2
  16. package/esm/services/strategiesService.js +157 -9
  17. package/esm/services/strategySubService.d.ts +18 -17
  18. package/esm/services/strategySubService.js +67 -27
  19. package/esm/services/strategySubService.test.js +3 -38
  20. package/esm/services/subDataService.d.ts +70 -20
  21. package/esm/services/subDataService.js +21 -77
  22. package/esm/services/subDataService.test.js +18 -200
  23. package/esm/types/enums.d.ts +35 -4
  24. package/esm/types/enums.js +31 -0
  25. package/package.json +10 -2
  26. package/src/constants/index.ts +137 -1
  27. package/src/index.ts +22 -6
  28. package/src/services/strategiesService.ts +221 -9
  29. package/src/services/strategySubService.test.ts +2 -46
  30. package/src/services/strategySubService.ts +164 -40
  31. package/src/services/subDataService.test.ts +18 -214
  32. package/src/services/subDataService.ts +42 -106
  33. package/src/services/utils.test.ts +1 -1
  34. package/src/services/utils.ts +3 -1
  35. package/src/types/enums.ts +31 -2
@@ -66,7 +66,7 @@ function parseMakerLeverageManagement(position, parseData) {
66
66
  const { subStruct, subId, subHash } = parseData.subscriptionEventData;
67
67
  const { isEnabled } = parseData.strategiesSubsData;
68
68
  const triggerData = triggerService.makerRatioTrigger.decode(subStruct.triggerData);
69
- const subData = subDataService.makerLeverageManagementSubData.decode(subStruct.subData);
69
+ const subData = subDataService.legacyMakerLeverageManagementSubData.decode(subStruct.subData);
70
70
  _position.strategyData.decoded.triggerData = triggerData;
71
71
  _position.strategyData.decoded.subData = subData;
72
72
  _position.positionId = getPositionId(_position.chainId, _position.protocol.id, subData.vaultId);
@@ -94,6 +94,24 @@ function parseMakerLeverageManagement(position, parseData) {
94
94
  _position.strategy.strategyId = Strategies.IdOverrides.LeverageManagement;
95
95
  return _position;
96
96
  }
97
+ function parseMakerLiquidationProtection(position, parseData) {
98
+ const _position = cloneDeep(position);
99
+ const { subStruct, subId } = parseData.subscriptionEventData;
100
+ const { isEnabled } = parseData.strategiesSubsData;
101
+ const triggerData = triggerService.makerRatioTrigger.decode(subStruct.triggerData);
102
+ const subData = subDataService.makerLiquidationProtectionSubData.decode(subStruct.subData);
103
+ _position.strategyData.decoded.triggerData = triggerData;
104
+ _position.strategyData.decoded.subData = subData;
105
+ _position.positionId = getPositionId(_position.chainId, _position.protocol.id, subData.vaultId);
106
+ _position.specific = {
107
+ triggerRepayRatio: triggerData.ratio,
108
+ targetRepayRatio: subData.targetRatio,
109
+ repayEnabled: isEnabled,
110
+ subId1: Number(subId),
111
+ };
112
+ _position.strategy.strategyId = Strategies.IdOverrides.LiquidationProtection;
113
+ return _position;
114
+ }
97
115
  function parseLiquityCloseOnPrice(position, parseData) {
98
116
  const _position = cloneDeep(position);
99
117
  const { subStruct } = parseData.subscriptionEventData;
@@ -131,7 +149,7 @@ function parseAaveV2LeverageManagement(position, parseData) {
131
149
  const { subStruct, subId, subHash } = parseData.subscriptionEventData;
132
150
  const { isEnabled } = parseData.strategiesSubsData;
133
151
  const triggerData = triggerService.aaveV2RatioTrigger.decode(subStruct.triggerData);
134
- const subData = subDataService.aaveV2LeverageManagementSubData.decode(subStruct.subData);
152
+ const subData = subDataService.legacyAaveV2LeverageManagementSubData.decode(subStruct.subData);
135
153
  _position.strategyData.decoded.triggerData = triggerData;
136
154
  _position.strategyData.decoded.subData = subData;
137
155
  _position.positionId = getPositionId(_position.chainId, _position.protocol.id, _position.owner, triggerData.market);
@@ -167,10 +185,10 @@ function parseAaveV3LeverageManagement(position, parseData) {
167
185
  const isEOA = _position.strategy.strategyId.includes('eoa');
168
186
  let subData;
169
187
  if (isEOA) {
170
- subData = subDataService.aaveV3LeverageManagementSubDataWithoutSubProxy.decode(subStruct.subData);
188
+ subData = subDataService.aaveV3LeverageManagementSubData.decode(subStruct.subData);
171
189
  }
172
190
  else {
173
- subData = subDataService.aaveV3LeverageManagementSubData.decode(subStruct.subData);
191
+ subData = subDataService.legacyAaveV3LeverageManagementSubData.decode(subStruct.subData);
174
192
  }
175
193
  _position.strategyData.decoded.triggerData = triggerData;
176
194
  _position.strategyData.decoded.subData = subData;
@@ -204,6 +222,26 @@ function parseAaveV3LeverageManagement(position, parseData) {
204
222
  }
205
223
  return _position;
206
224
  }
225
+ function parseAaveV3LiquidationProtection(position, parseData) {
226
+ const _position = cloneDeep(position);
227
+ const { subStruct, subId, subHash } = parseData.subscriptionEventData;
228
+ const { isEnabled } = parseData.strategiesSubsData;
229
+ const triggerData = triggerService.aaveV3RatioTrigger.decode(subStruct.triggerData);
230
+ const subData = subDataService.aaveV3LiquidationProtectionSubData.decode(subStruct.subData);
231
+ _position.strategyData.decoded.triggerData = triggerData;
232
+ _position.strategyData.decoded.subData = subData;
233
+ _position.positionId = getPositionId(_position.chainId, _position.protocol.id, _position.owner, triggerData.market);
234
+ _position.specific = {
235
+ triggerRepayRatio: triggerData.ratio,
236
+ targetRepayRatio: subData.targetRatio,
237
+ repayEnabled: isEnabled,
238
+ subId1: Number(subId),
239
+ subHashRepay: subHash,
240
+ };
241
+ const isEOA = _position.strategy.strategyId.includes('eoa');
242
+ _position.strategy.strategyId = isEOA ? Strategies.IdOverrides.EoaLiquidationProtection : Strategies.IdOverrides.LiquidationProtection;
243
+ return _position;
244
+ }
207
245
  function parseAaveV3LeverageManagementOnPrice(position, parseData) {
208
246
  const _position = cloneDeep(position);
209
247
  const { subStruct } = parseData.subscriptionEventData;
@@ -333,6 +371,26 @@ function parseAaveV4LeverageManagement(position, parseData) {
333
371
  }
334
372
  return _position;
335
373
  }
374
+ function parseAaveV4LiquidationProtection(position, parseData) {
375
+ const _position = cloneDeep(position);
376
+ const { subStruct, subId, subHash } = parseData.subscriptionEventData;
377
+ const { isEnabled } = parseData.strategiesSubsData;
378
+ const triggerData = triggerService.aaveV4RatioTrigger.decode(subStruct.triggerData);
379
+ const subData = subDataService.aaveV4LiquidationProtectionSubData.decode(subStruct.subData);
380
+ const isEOA = _position.strategy.strategyId.includes('eoa');
381
+ _position.strategyData.decoded.triggerData = triggerData;
382
+ _position.strategyData.decoded.subData = subData;
383
+ _position.positionId = getPositionId(_position.chainId, _position.protocol.id, _position.owner, triggerData.spoke);
384
+ _position.strategy.strategyId = isEOA ? Strategies.IdOverrides.EoaLiquidationProtection : Strategies.IdOverrides.LiquidationProtection;
385
+ _position.specific = {
386
+ triggerRepayRatio: triggerData.ratio,
387
+ targetRepayRatio: subData.targetRatio,
388
+ repayEnabled: isEnabled,
389
+ subId1: Number(subId),
390
+ subHashRepay: subHash,
391
+ };
392
+ return _position;
393
+ }
336
394
  function parseAaveV4LeverageManagementOnPrice(position, parseData) {
337
395
  const _position = cloneDeep(position);
338
396
  const { subStruct } = parseData.subscriptionEventData;
@@ -452,7 +510,7 @@ function parseCompoundV2LeverageManagement(position, parseData) {
452
510
  const { subStruct, subId, subHash } = parseData.subscriptionEventData;
453
511
  const { isEnabled } = parseData.strategiesSubsData;
454
512
  const triggerData = triggerService.compoundV2RatioTrigger.decode(subStruct.triggerData);
455
- const subData = subDataService.compoundV2LeverageManagementSubData.decode(subStruct.subData);
513
+ const subData = subDataService.legacyCompoundV2LeverageManagementSubData.decode(subStruct.subData);
456
514
  _position.strategyData.decoded.triggerData = triggerData;
457
515
  _position.strategyData.decoded.subData = subData;
458
516
  _position.owner = triggerData.owner.toLowerCase();
@@ -486,7 +544,7 @@ function parseCompoundV3LeverageManagement(position, parseData) {
486
544
  const _position = cloneDeep(position);
487
545
  const { subStruct, subId, subHash } = parseData.subscriptionEventData;
488
546
  const { isEnabled } = parseData.strategiesSubsData;
489
- const subDataDecoder = subDataService.compoundV3LeverageManagementSubDataWithoutSubProxy;
547
+ const subDataDecoder = subDataService.compoundV3LeverageManagementSubData;
490
548
  const triggerData = triggerService.compoundV3RatioTrigger.decode(subStruct.triggerData);
491
549
  const subData = subDataDecoder.decode(subStruct.subData);
492
550
  _position.strategyData.decoded.triggerData = triggerData;
@@ -517,6 +575,27 @@ function parseCompoundV3LeverageManagement(position, parseData) {
517
575
  _position.strategy.strategyId = isEOA ? Strategies.IdOverrides.EoaLeverageManagement : Strategies.IdOverrides.LeverageManagement;
518
576
  return _position;
519
577
  }
578
+ function parseCompoundV3LiquidationProtection(position, parseData) {
579
+ const _position = cloneDeep(position);
580
+ const { subStruct, subId, subHash } = parseData.subscriptionEventData;
581
+ const { isEnabled } = parseData.strategiesSubsData;
582
+ const subDataDecoder = subDataService.compoundV3LiquidationProtectionSubData;
583
+ const triggerData = triggerService.compoundV3RatioTrigger.decode(subStruct.triggerData);
584
+ const subData = subDataDecoder.decode(subStruct.subData);
585
+ _position.strategyData.decoded.triggerData = triggerData;
586
+ _position.strategyData.decoded.subData = subData;
587
+ _position.positionId = getPositionId(_position.chainId, _position.protocol.id, triggerData.owner.toLowerCase(), triggerData.market);
588
+ const isEOA = _position.strategy.strategyId.includes('eoa');
589
+ _position.specific = {
590
+ triggerRepayRatio: triggerData.ratio,
591
+ targetRepayRatio: subData.targetRatio,
592
+ repayEnabled: isEnabled,
593
+ subId1: Number(subId),
594
+ subHashRepay: subHash,
595
+ };
596
+ _position.strategy.strategyId = isEOA ? Strategies.IdOverrides.EoaLiquidationProtection : Strategies.IdOverrides.LiquidationProtection;
597
+ return _position;
598
+ }
520
599
  function parseCompoundV3LeverageManagementOnPrice(position, parseData) {
521
600
  const _position = cloneDeep(position);
522
601
  const { subStruct } = parseData.subscriptionEventData;
@@ -590,7 +669,7 @@ function parseExchangeDca(position, parseData, chainId) {
590
669
  function parseExchangeLimitOrder(position, parseData, chainId) {
591
670
  const _position = cloneDeep(position);
592
671
  const { subStruct } = parseData.subscriptionEventData;
593
- _position.strategyData.decoded.subData = subDataService.exchangeLimitOrderSubData.decode(subStruct.subData, chainId);
672
+ _position.strategyData.decoded.subData = subDataService.legacyExchangeLimitOrderSubData.decode(subStruct.subData, chainId);
594
673
  const fromTokenDecimals = getAssetInfoByAddress(_position.strategyData.decoded.subData.fromToken, chainId).decimals;
595
674
  const toTokenDecimals = getAssetInfoByAddress(_position.strategyData.decoded.subData.toToken, chainId).decimals;
596
675
  _position.strategyData.decoded.triggerData = triggerService.exchangeOffchainPriceTrigger.decode(subStruct.triggerData, fromTokenDecimals, toTokenDecimals);
@@ -602,7 +681,7 @@ function parseLiquityLeverageManagement(position, parseData) {
602
681
  const { subStruct, subId, subHash } = parseData.subscriptionEventData;
603
682
  const { isEnabled } = parseData.strategiesSubsData;
604
683
  const triggerData = triggerService.liquityRatioTrigger.decode(subStruct.triggerData);
605
- const subData = subDataService.liquityLeverageManagementSubData.decode(subStruct.subData);
684
+ const subData = subDataService.legacyLiquityLeverageManagementSubData.decode(subStruct.subData);
606
685
  _position.strategyData.decoded.triggerData = triggerData;
607
686
  _position.strategyData.decoded.subData = subData;
608
687
  _position.positionId = getPositionId(_position.chainId, _position.protocol.id, _position.owner);
@@ -668,7 +747,7 @@ function parseSparkLeverageManagement(position, parseData) {
668
747
  const { subStruct, subId, subHash } = parseData.subscriptionEventData;
669
748
  const { isEnabled } = parseData.strategiesSubsData;
670
749
  const triggerData = triggerService.sparkRatioTrigger.decode(subStruct.triggerData);
671
- const subData = subDataService.sparkLeverageManagementSubData.decode(subStruct.subData);
750
+ const subData = subDataService.legacySparkLeverageManagementSubData.decode(subStruct.subData);
672
751
  _position.strategyData.decoded.triggerData = triggerData;
673
752
  _position.strategyData.decoded.subData = subData;
674
753
  _position.positionId = getPositionId(_position.chainId, _position.protocol.id, _position.owner, triggerData.market);
@@ -696,6 +775,25 @@ function parseSparkLeverageManagement(position, parseData) {
696
775
  _position.strategy.strategyId = Strategies.IdOverrides.LeverageManagement;
697
776
  return _position;
698
777
  }
778
+ function parseSparkLiquidationProtection(position, parseData) {
779
+ const _position = cloneDeep(position);
780
+ const { subStruct, subId, subHash } = parseData.subscriptionEventData;
781
+ const { isEnabled } = parseData.strategiesSubsData;
782
+ const triggerData = triggerService.sparkRatioTrigger.decode(subStruct.triggerData);
783
+ const subData = subDataService.sparkLiquidationProtectionSubData.decode(subStruct.subData);
784
+ _position.strategyData.decoded.triggerData = triggerData;
785
+ _position.strategyData.decoded.subData = subData;
786
+ _position.positionId = getPositionId(_position.chainId, _position.protocol.id, _position.owner, triggerData.market);
787
+ _position.specific = {
788
+ triggerRepayRatio: triggerData.ratio,
789
+ targetRepayRatio: subData.targetRatio,
790
+ repayEnabled: isEnabled,
791
+ subId1: Number(subId),
792
+ subHashRepay: subHash,
793
+ };
794
+ _position.strategy.strategyId = Strategies.IdOverrides.LiquidationProtection;
795
+ return _position;
796
+ }
699
797
  function parseSparkLeverageManagementOnPrice(position, parseData) {
700
798
  const _position = cloneDeep(position);
701
799
  const { subStruct } = parseData.subscriptionEventData;
@@ -850,6 +948,26 @@ function parseMorphoBlueLeverageManagement(position, parseData) {
850
948
  _position.strategy.strategyId = isEOA ? Strategies.IdOverrides.EoaLeverageManagement : Strategies.IdOverrides.LeverageManagement;
851
949
  return _position;
852
950
  }
951
+ function parseMorphoBlueLiquidationProtection(position, parseData) {
952
+ const _position = cloneDeep(position);
953
+ const { subStruct, subId, subHash } = parseData.subscriptionEventData;
954
+ const { isEnabled } = parseData.strategiesSubsData;
955
+ const triggerData = triggerService.morphoBlueRatioTrigger.decode(subStruct.triggerData);
956
+ const subData = subDataService.morphoBlueLiquidationProtectionSubData.decode(subStruct.subData);
957
+ _position.strategyData.decoded.triggerData = triggerData;
958
+ _position.strategyData.decoded.subData = subData;
959
+ _position.positionId = getPositionId(_position.chainId, _position.protocol.id, triggerData.owner.toLowerCase(), triggerData.marketId);
960
+ _position.specific = {
961
+ triggerRepayRatio: triggerData.ratio,
962
+ targetRepayRatio: subData.targetRatio,
963
+ repayEnabled: isEnabled,
964
+ subId1: Number(subId),
965
+ subHashRepay: subHash,
966
+ };
967
+ const isEOA = _position.strategy.strategyId.includes('eoa');
968
+ _position.strategy.strategyId = isEOA ? Strategies.IdOverrides.EoaLiquidationProtection : Strategies.IdOverrides.LiquidationProtection;
969
+ return _position;
970
+ }
853
971
  function parseMorphoBlueLeverageManagementOnPrice(position, parseData) {
854
972
  const _position = cloneDeep(position);
855
973
  const { subStruct } = parseData.subscriptionEventData;
@@ -1008,6 +1126,25 @@ function parseFluidT1LeverageManagement(position, parseData) {
1008
1126
  _position.strategy.strategyId = Strategies.IdOverrides.LeverageManagement;
1009
1127
  return _position;
1010
1128
  }
1129
+ function parseFluidT1LiquidationProtection(position, parseData) {
1130
+ const _position = cloneDeep(position);
1131
+ const { subStruct, subId, subHash } = parseData.subscriptionEventData;
1132
+ const { isEnabled } = parseData.strategiesSubsData;
1133
+ const triggerData = triggerService.fluidRatioTrigger.decode(subStruct.triggerData);
1134
+ const subData = subDataService.fluidLiquidationProtectionSubData.decode(subStruct.subData);
1135
+ _position.strategyData.decoded.triggerData = triggerData;
1136
+ _position.strategyData.decoded.subData = subData;
1137
+ _position.positionId = getPositionId(_position.chainId, _position.protocol.id, _position.owner, triggerData.nftId, subData.vault);
1138
+ _position.specific = {
1139
+ triggerRepayRatio: triggerData.ratio,
1140
+ targetRepayRatio: subData.targetRatio,
1141
+ repayEnabled: isEnabled,
1142
+ subId1: Number(subId),
1143
+ subHashRepay: subHash,
1144
+ };
1145
+ _position.strategy.strategyId = Strategies.IdOverrides.LiquidationProtection;
1146
+ return _position;
1147
+ }
1011
1148
  const parsingMethodsMapping = {
1012
1149
  [ProtocolIdentifiers.StrategiesAutomation.MakerDAO]: {
1013
1150
  [Strategies.Identifiers.SavingsLiqProtection]: parseMakerSavingsLiqProtection,
@@ -1017,6 +1154,7 @@ const parsingMethodsMapping = {
1017
1154
  [Strategies.Identifiers.TrailingStopToDebt]: parseMakerTrailingStop,
1018
1155
  [Strategies.Identifiers.Repay]: parseMakerLeverageManagement,
1019
1156
  [Strategies.Identifiers.Boost]: parseMakerLeverageManagement,
1157
+ [Strategies.Identifiers.LiquidationProtection]: parseMakerLiquidationProtection,
1020
1158
  },
1021
1159
  [ProtocolIdentifiers.StrategiesAutomation.Liquity]: {
1022
1160
  [Strategies.Identifiers.CloseOnPriceToColl]: parseLiquityCloseOnPrice,
@@ -1055,6 +1193,8 @@ const parsingMethodsMapping = {
1055
1193
  [Strategies.Identifiers.EoaBoostOnPrice]: parseAaveV3LeverageManagementOnPrice,
1056
1194
  [Strategies.Identifiers.EoaCloseOnPrice]: parseAaveV3CloseOnPrice,
1057
1195
  [Strategies.Identifiers.CollateralSwitch]: parseAaveV3CollateralSwitch,
1196
+ [Strategies.Identifiers.LiquidationProtection]: parseAaveV3LiquidationProtection,
1197
+ [Strategies.Identifiers.EoaLiquidationProtection]: parseAaveV3LiquidationProtection,
1058
1198
  },
1059
1199
  [ProtocolIdentifiers.StrategiesAutomation.AaveV4]: {
1060
1200
  [Strategies.Identifiers.Repay]: parseAaveV4LeverageManagement,
@@ -1069,6 +1209,8 @@ const parsingMethodsMapping = {
1069
1209
  [Strategies.Identifiers.EoaCloseOnPrice]: parseAaveV4CloseOnPrice,
1070
1210
  [Strategies.Identifiers.CollateralSwitch]: parseAaveV4CollateralSwitch,
1071
1211
  [Strategies.Identifiers.EoaCollateralSwitch]: parseAaveV4CollateralSwitch,
1212
+ [Strategies.Identifiers.LiquidationProtection]: parseAaveV4LiquidationProtection,
1213
+ [Strategies.Identifiers.EoaLiquidationProtection]: parseAaveV4LiquidationProtection,
1072
1214
  },
1073
1215
  [ProtocolIdentifiers.StrategiesAutomation.CompoundV2]: {
1074
1216
  [Strategies.Identifiers.Repay]: parseCompoundV2LeverageManagement,
@@ -1085,6 +1227,8 @@ const parsingMethodsMapping = {
1085
1227
  [Strategies.Identifiers.EoaBoostOnPrice]: parseCompoundV3LeverageManagementOnPrice,
1086
1228
  [Strategies.Identifiers.CloseOnPrice]: parseCompoundV3CloseOnPrice,
1087
1229
  [Strategies.Identifiers.EoaCloseOnPrice]: parseCompoundV3CloseOnPrice,
1230
+ [Strategies.Identifiers.LiquidationProtection]: parseCompoundV3LiquidationProtection,
1231
+ [Strategies.Identifiers.EoaLiquidationProtection]: parseCompoundV3LiquidationProtection,
1088
1232
  },
1089
1233
  [ProtocolIdentifiers.StrategiesAutomation.ChickenBonds]: {
1090
1234
  [Strategies.Identifiers.Rebond]: parseChickenBondsRebond,
@@ -1104,6 +1248,7 @@ const parsingMethodsMapping = {
1104
1248
  [Strategies.Identifiers.BoostOnPrice]: parseSparkLeverageManagementOnPrice,
1105
1249
  [Strategies.Identifiers.CloseOnPrice]: parseSparkCloseOnPrice,
1106
1250
  [Strategies.Identifiers.CollateralSwitch]: parseSparkCollateralSwitch,
1251
+ [Strategies.Identifiers.LiquidationProtection]: parseSparkLiquidationProtection,
1107
1252
  },
1108
1253
  [ProtocolIdentifiers.StrategiesAutomation.CrvUSD]: {
1109
1254
  [Strategies.Identifiers.Repay]: parseCrvUSDLeverageManagement,
@@ -1120,11 +1265,14 @@ const parsingMethodsMapping = {
1120
1265
  [Strategies.Identifiers.EoaBoostOnPrice]: parseMorphoBlueLeverageManagementOnPrice,
1121
1266
  [Strategies.Identifiers.EoaRepayOnPrice]: parseMorphoBlueLeverageManagementOnPrice,
1122
1267
  [Strategies.Identifiers.CloseOnPrice]: parseMorphoBlueCloseOnPrice,
1268
+ [Strategies.Identifiers.LiquidationProtection]: parseMorphoBlueLiquidationProtection,
1269
+ [Strategies.Identifiers.EoaLiquidationProtection]: parseMorphoBlueLiquidationProtection,
1123
1270
  [Strategies.Identifiers.EoaCloseOnPrice]: parseMorphoBlueCloseOnPrice,
1124
1271
  },
1125
1272
  [ProtocolIdentifiers.StrategiesAutomation.FluidT1]: {
1126
1273
  [Strategies.Identifiers.Repay]: parseFluidT1LeverageManagement,
1127
1274
  [Strategies.Identifiers.Boost]: parseFluidT1LeverageManagement,
1275
+ [Strategies.Identifiers.LiquidationProtection]: parseFluidT1LiquidationProtection,
1128
1276
  },
1129
1277
  };
1130
1278
  function getParsingMethod(id, strategy) {
@@ -1,26 +1,24 @@
1
- import type { OrderType } from '../types/enums';
2
- import { CloseToAssetType, Bundles, ChainId, RatioState, Strategies } from '../types/enums';
1
+ import { Bundles, ChainId, CloseToAssetType, RatioState, Strategies } from '../types/enums';
3
2
  import type { EthereumAddress, StrategyOrBundleIds } from '../types';
3
+ import type { OrderType } from '../types/enums';
4
4
  export declare const makerEncode: {
5
5
  repayFromSavings(bundleId: StrategyOrBundleIds, vaultId: number, triggerRepayRatio: number, targetRepayRatio: number, isBundle?: boolean, chainId?: ChainId, daiAddr?: EthereumAddress, mcdCdpManagerAddr?: EthereumAddress): (boolean | string[] | Strategies.MainnetIds | Strategies.OptimismIds | Strategies.ArbitrumIds | Strategies.BaseIds | Bundles.MainnetIds | Bundles.OptimismIds | Bundles.ArbitrumIds | Bundles.BaseIds)[];
6
6
  closeOnPrice(vaultId: number, ratioState: RatioState, price: string, closeToAssetAddr: EthereumAddress, chainlinkCollAddress: EthereumAddress, chainId?: ChainId, daiAddr?: EthereumAddress, mcdCdpManagerAddr?: EthereumAddress): (boolean | string[] | Strategies.MainnetIds)[];
7
7
  trailingStop(vaultId: number, triggerPercentage: number, closeToAssetAddr: EthereumAddress, chainlinkCollAddress: EthereumAddress, roundId: number, chainId?: ChainId, daiAddr?: EthereumAddress, mcdCdpManagerAddr?: EthereumAddress): (boolean | string[] | Strategies.MainnetIds)[];
8
- leverageManagementWithoutSubProxy(vaultId: number, triggerRatio: number, targetRatio: number, ratioState: RatioState, isBoost: boolean, daiAddr?: EthereumAddress): (boolean | string[] | Bundles.MainnetIds)[];
8
+ leverageManagement(vaultId: number, triggerRatio: number, targetRatio: number, ratioState: RatioState, isBoost: boolean, daiAddr?: EthereumAddress): (boolean | string[] | Bundles.MainnetIds)[];
9
+ liquidationProtection(vaultId: number, triggerRatio: number, targetRatio: number, ratioState: RatioState, daiAddr?: EthereumAddress): (boolean | string[] | Bundles.MainnetIds)[];
9
10
  };
10
11
  export declare const liquityEncode: {
11
12
  closeOnPrice(priceOverOrUnder: RatioState, price: string, closeToAssetAddr: EthereumAddress, chainlinkCollAddress: EthereumAddress, chainId?: ChainId, collAddr?: EthereumAddress, debtAddr?: EthereumAddress): (boolean | string[] | Strategies.MainnetIds)[];
12
13
  trailingStop(triggerPercentage: number, closeToAssetAddr: EthereumAddress, chainlinkCollAddress: EthereumAddress, roundId: number, chainId?: ChainId, collAddr?: EthereumAddress, debtAddr?: EthereumAddress): (boolean | string[] | Strategies.MainnetIds)[];
13
14
  paybackFromChickenBondStrategySub(proxyAddress: EthereumAddress, ratio: number, sourceId: string, sourceType: number, ratioState?: RatioState): (boolean | string[] | Bundles.MainnetIds)[];
14
- leverageManagementWithoutSubProxy(strategyOrBundleId: number, user: EthereumAddress, ratioState: RatioState, targetRatio: number, triggerRatio: number): (number | boolean | string[])[];
15
+ leverageManagement(strategyOrBundleId: number, user: EthereumAddress, ratioState: RatioState, targetRatio: number, triggerRatio: number): (number | boolean | string[])[];
15
16
  dsrPayback(proxyAddress: EthereumAddress, triggerRatio: number, targetRatio: number): (boolean | string[] | Strategies.MainnetIds)[];
16
17
  dsrSupply(proxyAddress: EthereumAddress, triggerRatio: number, targetRatio: number): (boolean | string[] | Strategies.MainnetIds)[];
17
18
  debtInFrontRepay(proxyAddress: EthereumAddress, debtInFrontMin: string, targetRatioIncrease: number): (boolean | string[] | Strategies.MainnetIds)[];
18
19
  };
19
- export declare const chickenBondsEncode: {
20
- rebond(bondId: number): string[];
21
- };
22
20
  export declare const aaveV2Encode: {
23
- leverageManagementWithoutSubProxy(strategyOrBundleId: number, market: EthereumAddress, user: EthereumAddress, ratioState: RatioState, targetRatio: number, triggerRatio: number): (number | boolean | string[])[];
21
+ leverageManagement(strategyOrBundleId: number, market: EthereumAddress, user: EthereumAddress, ratioState: RatioState, targetRatio: number, triggerRatio: number): (number | boolean | string[])[];
24
22
  };
25
23
  export declare const aaveV3Encode: {
26
24
  closeToAsset(strategyOrBundleId: number, isBundle: boolean | undefined, triggerData: {
@@ -59,25 +57,24 @@ export declare const aaveV3Encode: {
59
57
  marketAddr: EthereumAddress;
60
58
  targetRatio: number;
61
59
  }): (number | boolean | string[])[];
62
- leverageManagementWithoutSubProxy(strategyOrBundleId: number, market: EthereumAddress, user: EthereumAddress, ratioState: RatioState, targetRatio: number, triggerRatio: number, isGeneric?: boolean): (number | boolean | string[])[];
60
+ leverageManagement(strategyOrBundleId: number, market: EthereumAddress, user: EthereumAddress, ratioState: RatioState, targetRatio: number, triggerRatio: number, isGeneric?: boolean): (number | boolean | string[])[];
61
+ liquidationProtection(strategyOrBundleId: number, market: EthereumAddress, user: EthereumAddress, ratioState: RatioState, targetRatio: number, triggerRatio: number): (number | boolean | string[])[];
63
62
  leverageManagementOnPriceGeneric(strategyOrBundleId: number, price: number, ratioState: RatioState, collAsset: EthereumAddress, collAssetId: number, debtAsset: EthereumAddress, debtAssetId: number, marketAddr: EthereumAddress, targetRatio: number, user: EthereumAddress): (number | boolean | string[])[];
64
63
  closeOnPriceGeneric(strategyOrBundleId: number, collAsset: EthereumAddress, collAssetId: number, debtAsset: EthereumAddress, debtAssetId: number, marketAddr: EthereumAddress, user: EthereumAddress, stopLossPrice?: number, stopLossType?: CloseToAssetType, takeProfitPrice?: number, takeProfitType?: CloseToAssetType): (number | boolean | string[])[];
65
64
  collateralSwitch(strategyOrBundleId: number, fromAsset: EthereumAddress, fromAssetId: number, toAsset: EthereumAddress, toAssetId: number, marketAddr: EthereumAddress, amountToSwitch: string, baseTokenAddress: EthereumAddress, quoteTokenAddress: EthereumAddress, price: number, state: RatioState): (number | boolean | string[])[];
66
65
  };
67
66
  export declare const compoundV2Encode: {
68
- leverageManagementWithoutSubProxy(strategyOrBundleId: number, user: EthereumAddress, ratioState: RatioState, targetRatio: number, triggerRatio: number): (number | boolean | string[])[];
67
+ leverageManagement(strategyOrBundleId: number, user: EthereumAddress, ratioState: RatioState, targetRatio: number, triggerRatio: number): (number | boolean | string[])[];
69
68
  };
70
69
  export declare const compoundV3Encode: {
71
- leverageManagementWithoutSubProxy(strategyOrBundleId: number, market: EthereumAddress, baseToken: EthereumAddress, user: EthereumAddress, ratioState: RatioState, targetRatio: number, triggerRatio: number): (number | boolean | string[])[];
70
+ leverageManagement(strategyOrBundleId: number, market: EthereumAddress, baseToken: EthereumAddress, user: EthereumAddress, ratioState: RatioState, targetRatio: number, triggerRatio: number): (number | boolean | string[])[];
71
+ liquidationProtection(strategyOrBundleId: number, market: EthereumAddress, baseToken: EthereumAddress, user: EthereumAddress, ratioState: RatioState, targetRatio: number, triggerRatio: number): (number | boolean | string[])[];
72
72
  leverageManagementOnPrice(strategyOrBundleId: number, market: EthereumAddress, collToken: EthereumAddress, baseToken: EthereumAddress, targetRatio: number, price: number, priceState: RatioState, ratioState: RatioState, user: EthereumAddress): (number | boolean | string[])[];
73
73
  closeOnPrice(strategyOrBundleId: number, market: EthereumAddress, collToken: EthereumAddress, baseToken: EthereumAddress, stopLossPrice: number | undefined, stopLossType: CloseToAssetType | undefined, takeProfitPrice: number | undefined, takeProfitType: CloseToAssetType | undefined, user: EthereumAddress): (number | boolean | string[])[];
74
74
  };
75
- export declare const morphoAaveV2Encode: {
76
- leverageManagement(triggerRepayRatio: number, triggerBoostRatio: number, targetBoostRatio: number, targetRepayRatio: number, boostEnabled: boolean): string[];
77
- };
78
75
  export declare const exchangeEncode: {
79
76
  dca(fromToken: EthereumAddress, toToken: EthereumAddress, amount: string, timestamp: number, interval: number, network: ChainId): (boolean | string[] | Strategies.MainnetIds | Strategies.OptimismIds | Strategies.ArbitrumIds | Strategies.BaseIds)[];
80
- limitOrderWithoutSubProxy(fromToken: EthereumAddress, toToken: EthereumAddress, amount: string, targetPrice: string, goodUntil: string | number, orderType: OrderType, fromTokenDecimals: number, toTokenDecimals: number, network: ChainId): (boolean | string[] | Strategies.MainnetIds | Strategies.OptimismIds | Strategies.ArbitrumIds | Strategies.BaseIds)[];
77
+ limitOrder(fromToken: EthereumAddress, toToken: EthereumAddress, amount: string, targetPrice: string, goodUntil: string | number, orderType: OrderType, fromTokenDecimals: number, toTokenDecimals: number, network: ChainId): (boolean | string[] | Strategies.MainnetIds | Strategies.OptimismIds | Strategies.ArbitrumIds | Strategies.BaseIds)[];
81
78
  };
82
79
  export declare const sparkEncode: {
83
80
  leverageManagementOnPrice(strategyOrBundleId: number, isBundle: boolean | undefined, triggerData: {
@@ -94,17 +91,19 @@ export declare const sparkEncode: {
94
91
  targetRatio: number;
95
92
  }): (number | boolean | string[])[];
96
93
  closeOnPriceGeneric(strategyOrBundleId: number, collAsset: EthereumAddress, collAssetId: number, debtAsset: EthereumAddress, debtAssetId: number, marketAddr: EthereumAddress, user: EthereumAddress, stopLossPrice?: number, stopLossType?: CloseToAssetType, takeProfitPrice?: number, takeProfitType?: CloseToAssetType): (number | boolean | string[])[];
97
- leverageManagementWithoutSubProxy(strategyOrBundleId: number, market: EthereumAddress, user: EthereumAddress, ratioState: RatioState, targetRatio: number, triggerRatio: number): (number | boolean | string[])[];
94
+ leverageManagement(strategyOrBundleId: number, market: EthereumAddress, user: EthereumAddress, ratioState: RatioState, targetRatio: number, triggerRatio: number): (number | boolean | string[])[];
95
+ liquidationProtection(strategyOrBundleId: number, market: EthereumAddress, user: EthereumAddress, ratioState: RatioState, targetRatio: number, triggerRatio: number): (number | boolean | string[])[];
98
96
  collateralSwitch(strategyOrBundleId: number, fromAsset: EthereumAddress, fromAssetId: number, toAsset: EthereumAddress, toAssetId: number, marketAddr: EthereumAddress, amountToSwitch: string, baseTokenAddress: EthereumAddress, quoteTokenAddress: EthereumAddress, price: number, state: RatioState): (number | boolean | string[])[];
99
97
  };
100
98
  export declare const crvUSDEncode: {
101
99
  leverageManagement(owner: EthereumAddress, controllerAddr: EthereumAddress, ratioState: RatioState, targetRatio: number, triggerRatio: number, collTokenAddr: EthereumAddress, crvUSDAddr: EthereumAddress): (boolean | string[] | Bundles.MainnetIds)[];
102
100
  payback(proxyAddress: EthereumAddress, addressToPullTokensFrom: EthereumAddress, positionOwner: EthereumAddress, paybackAmount: string, crvUSDAddr: EthereumAddress, controllerAddr: EthereumAddress, minHealthRatio: number): (boolean | string[] | Strategies.MainnetIds)[];
103
101
  };
104
- export type MorphoBlueBundleStrategy = 'repay' | 'boost' | 'repayOnPrice' | 'boostOnPrice' | 'close';
102
+ export type MorphoBlueBundleStrategy = 'repay' | 'boost' | 'repayOnPrice' | 'boostOnPrice' | 'close' | 'liquidationProtection';
105
103
  export declare function getMorphoBlueBundleId(network: ChainId, strategy: MorphoBlueBundleStrategy, isEOA: boolean): number;
106
104
  export declare const morphoBlueEncode: {
107
105
  leverageManagement(marketId: string, loanToken: EthereumAddress, collToken: EthereumAddress, oracle: EthereumAddress, irm: EthereumAddress, lltv: string, ratioState: RatioState, targetRatio: number, triggerRatio: number, user: EthereumAddress, isEOA: boolean, network: ChainId): (number | boolean | string[])[];
106
+ liquidationProtection(marketId: string, loanToken: EthereumAddress, collToken: EthereumAddress, oracle: EthereumAddress, irm: EthereumAddress, lltv: string, ratioState: RatioState, targetRatio: number, triggerRatio: number, user: EthereumAddress, isEOA: boolean, network: ChainId): (number | boolean | string[])[];
108
107
  leverageManagementOnPrice(strategyOrBundleId: number, isBundle: boolean | undefined, loanToken: EthereumAddress, collToken: EthereumAddress, oracle: EthereumAddress, irm: EthereumAddress, lltv: string, user: EthereumAddress, targetRatio: number, price: number, priceState: RatioState): (number | boolean | string[])[];
109
108
  leverageManagementOnPriceGeneric(loanToken: EthereumAddress, collToken: EthereumAddress, oracle: EthereumAddress, irm: EthereumAddress, lltv: string, user: EthereumAddress, targetRatio: number, price: number, priceState: RatioState, isBoost: boolean, isEOA: boolean, network: ChainId): (number | boolean | string[])[];
110
109
  closeOnPrice(strategyOrBundleId: number, loanToken: EthereumAddress, collToken: EthereumAddress, oracle: EthereumAddress, irm: EthereumAddress, lltv: string, user: EthereumAddress, stopLossPrice?: number, stopLossType?: CloseToAssetType, takeProfitPrice?: number, takeProfitType?: CloseToAssetType): (number | boolean | string[])[];
@@ -118,9 +117,11 @@ export declare const liquityV2Encode: {
118
117
  };
119
118
  export declare const fluidEncode: {
120
119
  leverageManagement(nftId: string, vault: EthereumAddress, ratioState: RatioState, targetRatio: number, triggerRatio: number, strategyOrBundleId: number): (number | boolean | string[])[];
120
+ liquidationProtection(nftId: string, vault: EthereumAddress, ratioState: RatioState, targetRatio: number, triggerRatio: number, strategyOrBundleId: number): (number | boolean | string[])[];
121
121
  };
122
122
  export declare const aaveV4Encode: {
123
123
  leverageManagement(strategyOrBundleId: number, owner: EthereumAddress, spoke: EthereumAddress, ratioState: RatioState, targetRatio: number, triggerRatio: number): (number | boolean | string[])[];
124
+ liquidationProtection(strategyOrBundleId: number, owner: EthereumAddress, spoke: EthereumAddress, ratioState: RatioState, targetRatio: number, triggerRatio: number): (number | boolean | string[])[];
124
125
  leverageManagementOnPrice(strategyOrBundleId: number, owner: EthereumAddress, spoke: EthereumAddress, collAsset: EthereumAddress, collAssetId: number, debtAsset: EthereumAddress, debtAssetId: number, targetRatio: number, price: string, priceState: RatioState, ratioState: RatioState): (number | boolean | string[])[];
125
126
  closeOnPrice(strategyOrBundleId: number, owner: EthereumAddress, spoke: EthereumAddress, collAsset: EthereumAddress, collAssetId: number, debtAsset: EthereumAddress, debtAssetId: number, stopLossPrice?: string, stopLossType?: CloseToAssetType, takeProfitPrice?: string, takeProfitType?: CloseToAssetType): (number | boolean | string[])[];
126
127
  collateralSwitch(strategyOrBundleId: number, owner: EthereumAddress, spoke: EthereumAddress, fromAsset: EthereumAddress, fromAssetId: number, toAsset: EthereumAddress, toAssetId: number, amountToSwitch: string, price: string, ratioState: RatioState): (number | boolean | string[])[];
@@ -1,6 +1,6 @@
1
1
  import { getAssetInfo } from '@defisaver/tokens';
2
- import { CloseToAssetType, Bundles, ChainId, RatioState, Strategies, } from '../types/enums';
3
2
  import { STRATEGY_IDS } from '../constants';
3
+ import { Bundles, ChainId, CloseToAssetType, RatioState, Strategies, } from '../types/enums';
4
4
  import * as subDataService from './subDataService';
5
5
  import * as triggerService from './triggerService';
6
6
  import { compareAddresses, getCloseStrategyType, requireAddress, requireAddresses, } from './utils';
@@ -30,10 +30,21 @@ export const makerEncode = {
30
30
  const isBundle = false;
31
31
  return [strategyOrBundleId, isBundle, triggerData, subData];
32
32
  },
33
- leverageManagementWithoutSubProxy(vaultId, triggerRatio, targetRatio, ratioState, isBoost, daiAddr) {
33
+ leverageManagement(vaultId, triggerRatio, targetRatio, ratioState, isBoost, daiAddr) {
34
34
  const bundleId = isBoost ? Bundles.MainnetIds.MAKER_BOOST : Bundles.MainnetIds.MAKER_REPAY;
35
35
  const triggerData = triggerService.makerRatioTrigger.encode(vaultId, triggerRatio, ratioState);
36
- const subData = subDataService.makerLeverageManagementWithoutSubProxy.encode(vaultId, targetRatio, daiAddr);
36
+ const subData = subDataService.makerLeverageManagementSubData.encode(vaultId, targetRatio, daiAddr);
37
+ return [
38
+ bundleId,
39
+ true,
40
+ triggerData,
41
+ subData,
42
+ ];
43
+ },
44
+ liquidationProtection(vaultId, triggerRatio, targetRatio, ratioState, daiAddr) {
45
+ const bundleId = Bundles.MainnetIds.MAKER_SW_LIQUIDATION_PROTECTION;
46
+ const triggerData = triggerService.makerRatioTrigger.encode(vaultId, triggerRatio, ratioState);
47
+ const subData = subDataService.makerLiquidationProtectionSubData.encode(vaultId, targetRatio, daiAddr);
37
48
  return [
38
49
  bundleId,
39
50
  true,
@@ -67,9 +78,9 @@ export const liquityEncode = {
67
78
  const isBundle = true;
68
79
  return [strategyId, isBundle, triggerData, subData];
69
80
  },
70
- leverageManagementWithoutSubProxy(strategyOrBundleId, user, ratioState, targetRatio, triggerRatio) {
81
+ leverageManagement(strategyOrBundleId, user, ratioState, targetRatio, triggerRatio) {
71
82
  const isBundle = true;
72
- const subData = subDataService.liquityLeverageManagementSubDataWithoutSubProxy.encode(targetRatio, ratioState);
83
+ const subData = subDataService.liquityLeverageManagementSubData.encode(targetRatio, ratioState);
73
84
  const triggerData = triggerService.liquityRatioTrigger.encode(user, triggerRatio, ratioState);
74
85
  return [strategyOrBundleId, isBundle, triggerData, subData];
75
86
  },
@@ -98,15 +109,10 @@ export const liquityEncode = {
98
109
  return [strategyOrBundleId, isBundle, triggerData, subData];
99
110
  },
100
111
  };
101
- export const chickenBondsEncode = {
102
- rebond(bondId) {
103
- return subDataService.cBondsRebondSubData.encode(bondId);
104
- },
105
- };
106
112
  export const aaveV2Encode = {
107
- leverageManagementWithoutSubProxy(strategyOrBundleId, market, user, ratioState, targetRatio, triggerRatio) {
113
+ leverageManagement(strategyOrBundleId, market, user, ratioState, targetRatio, triggerRatio) {
108
114
  const isBundle = true;
109
- const subData = subDataService.aaveV2LeverageManagementSubDataWithoutSubProxy.encode(market, targetRatio, ratioState);
115
+ const subData = subDataService.aaveV2LeverageManagementSubData.encode(market, targetRatio, ratioState);
110
116
  const triggerData = triggerService.aaveV2RatioTrigger.encode(user, market, triggerRatio, ratioState);
111
117
  return [strategyOrBundleId, isBundle, triggerData, subData];
112
118
  },
@@ -133,9 +139,15 @@ export const aaveV3Encode = {
133
139
  const triggerDataEncoded = triggerService.aaveV3QuotePriceTrigger.encode(baseTokenAddress, quoteTokenAddress, price, state);
134
140
  return [strategyOrBundleId, isBundle, triggerDataEncoded, subDataEncoded];
135
141
  },
136
- leverageManagementWithoutSubProxy(strategyOrBundleId, market, user, ratioState, targetRatio, triggerRatio, isGeneric = false) {
142
+ leverageManagement(strategyOrBundleId, market, user, ratioState, targetRatio, triggerRatio, isGeneric = false) {
143
+ const isBundle = true;
144
+ const subData = subDataService.aaveV3LeverageManagementSubData.encode(targetRatio, ratioState, market, user, isGeneric);
145
+ const triggerData = triggerService.aaveV3RatioTrigger.encode(user, market, triggerRatio, ratioState);
146
+ return [strategyOrBundleId, isBundle, triggerData, subData];
147
+ },
148
+ liquidationProtection(strategyOrBundleId, market, user, ratioState, targetRatio, triggerRatio) {
137
149
  const isBundle = true;
138
- const subData = subDataService.aaveV3LeverageManagementSubDataWithoutSubProxy.encode(targetRatio, ratioState, market, user, isGeneric);
150
+ const subData = subDataService.aaveV3LiquidationProtectionSubData.encode(targetRatio, ratioState, market, user, true);
139
151
  const triggerData = triggerService.aaveV3RatioTrigger.encode(user, market, triggerRatio, ratioState);
140
152
  return [strategyOrBundleId, isBundle, triggerData, subData];
141
153
  },
@@ -160,17 +172,23 @@ export const aaveV3Encode = {
160
172
  },
161
173
  };
162
174
  export const compoundV2Encode = {
163
- leverageManagementWithoutSubProxy(strategyOrBundleId, user, ratioState, targetRatio, triggerRatio) {
175
+ leverageManagement(strategyOrBundleId, user, ratioState, targetRatio, triggerRatio) {
164
176
  const isBundle = true;
165
- const subData = subDataService.compoundV2LeverageManagementSubDataWithoutSubProxy.encode(targetRatio, ratioState);
177
+ const subData = subDataService.compoundV2LeverageManagementSubData.encode(targetRatio, ratioState);
166
178
  const triggerData = triggerService.compoundV2RatioTrigger.encode(user, triggerRatio, ratioState);
167
179
  return [strategyOrBundleId, isBundle, triggerData, subData];
168
180
  },
169
181
  };
170
182
  export const compoundV3Encode = {
171
- leverageManagementWithoutSubProxy(strategyOrBundleId, market, baseToken, user, ratioState, targetRatio, triggerRatio) {
183
+ leverageManagement(strategyOrBundleId, market, baseToken, user, ratioState, targetRatio, triggerRatio) {
184
+ const isBundle = true;
185
+ const subData = subDataService.compoundV3LeverageManagementSubData.encode(market, baseToken, targetRatio, ratioState);
186
+ const triggerData = triggerService.compoundV3RatioTrigger.encode(user, market, triggerRatio, ratioState);
187
+ return [strategyOrBundleId, isBundle, triggerData, subData];
188
+ },
189
+ liquidationProtection(strategyOrBundleId, market, baseToken, user, ratioState, targetRatio, triggerRatio) {
172
190
  const isBundle = true;
173
- const subData = subDataService.compoundV3LeverageManagementSubDataWithoutSubProxy.encode(market, baseToken, targetRatio, ratioState);
191
+ const subData = subDataService.compoundV3LiquidationProtectionSubData.encode(market, baseToken, targetRatio, ratioState);
174
192
  const triggerData = triggerService.compoundV3RatioTrigger.encode(user, market, triggerRatio, ratioState);
175
193
  return [strategyOrBundleId, isBundle, triggerData, subData];
176
194
  },
@@ -189,11 +207,6 @@ export const compoundV3Encode = {
189
207
  return [strategyOrBundleId, isBundle, triggerDataEncoded, subDataEncoded];
190
208
  },
191
209
  };
192
- export const morphoAaveV2Encode = {
193
- leverageManagement(triggerRepayRatio, triggerBoostRatio, targetBoostRatio, targetRepayRatio, boostEnabled) {
194
- return subDataService.morphoAaveV2LeverageManagementSubData.encode(triggerRepayRatio, triggerBoostRatio, targetBoostRatio, targetRepayRatio, boostEnabled);
195
- },
196
- };
197
210
  export const exchangeEncode = {
198
211
  dca(fromToken, toToken, amount, timestamp, interval, network) {
199
212
  requireAddresses([fromToken, toToken]);
@@ -202,9 +215,9 @@ export const exchangeEncode = {
202
215
  const strategyId = STRATEGY_IDS[network].EXCHANGE_DCA;
203
216
  return [strategyId, false, triggerData, subData];
204
217
  },
205
- limitOrderWithoutSubProxy(fromToken, toToken, amount, targetPrice, goodUntil, orderType, fromTokenDecimals, toTokenDecimals, network) {
218
+ limitOrder(fromToken, toToken, amount, targetPrice, goodUntil, orderType, fromTokenDecimals, toTokenDecimals, network) {
206
219
  requireAddresses([fromToken, toToken]);
207
- const subData = subDataService.exchangeLimitOrderSubDataWithoutSubProxy.encode(fromToken, toToken, amount);
220
+ const subData = subDataService.exchangeLimitOrderSubData.encode(fromToken, toToken, amount);
208
221
  const triggerData = triggerService.exchangeOffchainPriceTrigger.encode(targetPrice, Number(goodUntil), orderType, fromTokenDecimals, toTokenDecimals);
209
222
  const strategyId = STRATEGY_IDS[network].EXCHANGE_LIMIT_ORDER;
210
223
  return [strategyId, false, triggerData, subData];
@@ -225,9 +238,15 @@ export const sparkEncode = {
225
238
  const triggerDataEncoded = triggerService.sparkQuotePriceRangeTrigger.encode(collAsset, debtAsset, stopLossPrice, takeProfitPrice);
226
239
  return [strategyOrBundleId, isBundle, triggerDataEncoded, subDataEncoded];
227
240
  },
228
- leverageManagementWithoutSubProxy(strategyOrBundleId, market, user, ratioState, targetRatio, triggerRatio) {
241
+ leverageManagement(strategyOrBundleId, market, user, ratioState, targetRatio, triggerRatio) {
229
242
  const isBundle = true;
230
- const subData = subDataService.sparkLeverageManagementSubDataWithoutSubProxy.encode(targetRatio, ratioState);
243
+ const subData = subDataService.sparkLeverageManagementSubData.encode(targetRatio, ratioState);
244
+ const triggerData = triggerService.sparkRatioTrigger.encode(user, market, triggerRatio, ratioState);
245
+ return [strategyOrBundleId, isBundle, triggerData, subData];
246
+ },
247
+ liquidationProtection(strategyOrBundleId, market, user, ratioState, targetRatio, triggerRatio) {
248
+ const isBundle = true;
249
+ const subData = subDataService.sparkLiquidationProtectionSubData.encode(targetRatio, ratioState);
231
250
  const triggerData = triggerService.sparkRatioTrigger.encode(user, market, triggerRatio, ratioState);
232
251
  return [strategyOrBundleId, isBundle, triggerData, subData];
233
252
  },
@@ -280,6 +299,8 @@ export function getMorphoBlueBundleId(network, strategy, isEOA) {
280
299
  return isEOA ? bundlesIds.MORPHO_BLUE_EOA_BOOST_ON_PRICE : bundlesIds.MORPHO_BLUE_BOOST_ON_PRICE;
281
300
  case 'close':
282
301
  return isEOA ? bundlesIds.MORPHO_BLUE_EOA_CLOSE : bundlesIds.MORPHO_BLUE_CLOSE;
302
+ case 'liquidationProtection':
303
+ return isEOA ? bundlesIds.MORPHO_BLUE_EOA_LIQUIDATION_PROTECTION : bundlesIds.MORPHO_BLUE_SW_LIQUIDATION_PROTECTION;
283
304
  default:
284
305
  throw new Error(`Unknown Morpho Blue strategy: ${strategy}`);
285
306
  }
@@ -294,6 +315,13 @@ export const morphoBlueEncode = {
294
315
  const isBundle = true;
295
316
  return [bundleId, isBundle, triggerData, subData];
296
317
  },
318
+ liquidationProtection(marketId, loanToken, collToken, oracle, irm, lltv, ratioState, targetRatio, triggerRatio, user, isEOA, network) {
319
+ const subData = subDataService.morphoBlueLiquidationProtectionSubData.encode(loanToken, collToken, oracle, irm, lltv, ratioState, targetRatio, user, isEOA);
320
+ const triggerData = triggerService.morphoBlueRatioTrigger.encode(marketId, user, triggerRatio, ratioState);
321
+ const bundleId = getMorphoBlueBundleId(network, 'liquidationProtection', isEOA);
322
+ const isBundle = true;
323
+ return [bundleId, isBundle, triggerData, subData];
324
+ },
297
325
  leverageManagementOnPrice(strategyOrBundleId, isBundle = true, loanToken, collToken, oracle, irm, lltv, user, targetRatio, price, priceState) {
298
326
  const subData = subDataService.morphoBlueLeverageManagementOnPriceSubData.encode(loanToken, collToken, oracle, irm, lltv, targetRatio, user);
299
327
  const triggerData = triggerService.morphoBluePriceTrigger.encode(oracle, collToken, loanToken, price, priceState);
@@ -357,6 +385,12 @@ export const fluidEncode = {
357
385
  const triggerData = triggerService.fluidRatioTrigger.encode(nftId, triggerRatio, ratioState);
358
386
  return [strategyOrBundleId, isBundle, triggerData, subData];
359
387
  },
388
+ liquidationProtection(nftId, vault, ratioState, targetRatio, triggerRatio, strategyOrBundleId) {
389
+ const isBundle = true;
390
+ const subData = subDataService.fluidLiquidationProtectionSubData.encode(nftId, vault, ratioState, targetRatio);
391
+ const triggerData = triggerService.fluidRatioTrigger.encode(nftId, triggerRatio, ratioState);
392
+ return [strategyOrBundleId, isBundle, triggerData, subData];
393
+ },
360
394
  };
361
395
  export const aaveV4Encode = {
362
396
  leverageManagement(strategyOrBundleId, owner, spoke, ratioState, targetRatio, triggerRatio) {
@@ -365,6 +399,12 @@ export const aaveV4Encode = {
365
399
  const triggerData = triggerService.aaveV4RatioTrigger.encode(owner, spoke, triggerRatio, ratioState);
366
400
  return [strategyOrBundleId, isBundle, triggerData, subData];
367
401
  },
402
+ liquidationProtection(strategyOrBundleId, owner, spoke, ratioState, targetRatio, triggerRatio) {
403
+ const isBundle = true;
404
+ const subData = subDataService.aaveV4LiquidationProtectionSubData.encode(spoke, owner, ratioState, targetRatio);
405
+ const triggerData = triggerService.aaveV4RatioTrigger.encode(owner, spoke, triggerRatio, ratioState);
406
+ return [strategyOrBundleId, isBundle, triggerData, subData];
407
+ },
368
408
  leverageManagementOnPrice(strategyOrBundleId, owner, spoke, collAsset, collAssetId, debtAsset, debtAssetId, targetRatio, price, priceState, ratioState) {
369
409
  const isBundle = true;
370
410
  const subData = subDataService.aaveV4LeverageManagementOnPriceSubData.encode(spoke, owner, collAsset, collAssetId, debtAsset, debtAssetId, ratioState, targetRatio);