@defisaver/automation-sdk 3.3.16-dev-13082-morpho-eoa-dev → 3.3.16-liq-prot-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 (39) hide show
  1. package/cjs/constants/index.js +117 -42
  2. package/cjs/index.d.ts +2 -2
  3. package/cjs/index.js +5 -2
  4. package/cjs/services/strategiesService.js +157 -12
  5. package/cjs/services/strategySubService.d.ts +18 -21
  6. package/cjs/services/strategySubService.js +78 -74
  7. package/cjs/services/strategySubService.test.js +3 -149
  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/services/utils.d.ts +2 -1
  12. package/cjs/services/utils.js +14 -1
  13. package/cjs/types/enums.d.ts +36 -17
  14. package/cjs/types/enums.js +30 -11
  15. package/esm/constants/index.js +117 -42
  16. package/esm/index.d.ts +2 -2
  17. package/esm/index.js +5 -2
  18. package/esm/services/strategiesService.js +157 -12
  19. package/esm/services/strategySubService.d.ts +18 -21
  20. package/esm/services/strategySubService.js +78 -73
  21. package/esm/services/strategySubService.test.js +4 -147
  22. package/esm/services/subDataService.d.ts +70 -20
  23. package/esm/services/subDataService.js +21 -77
  24. package/esm/services/subDataService.test.js +18 -200
  25. package/esm/services/utils.d.ts +2 -1
  26. package/esm/services/utils.js +13 -1
  27. package/esm/types/enums.d.ts +36 -17
  28. package/esm/types/enums.js +30 -11
  29. package/package.json +1 -1
  30. package/src/constants/index.ts +119 -43
  31. package/src/index.ts +22 -6
  32. package/src/services/strategiesService.ts +221 -12
  33. package/src/services/strategySubService.test.ts +3 -191
  34. package/src/services/strategySubService.ts +173 -121
  35. package/src/services/subDataService.test.ts +18 -214
  36. package/src/services/subDataService.ts +42 -106
  37. package/src/services/utils.test.ts +1 -1
  38. package/src/services/utils.ts +15 -1
  39. package/src/types/enums.ts +30 -13
@@ -573,24 +573,65 @@ export const MAINNET_BUNDLES_INFO: MainnetBundleInfo = {
573
573
  strategyId: Strategies.Identifiers.EoaCloseOnPrice,
574
574
  protocol: PROTOCOLS.AaveV4,
575
575
  },
576
- [Bundles.MainnetIds.MORPHO_BLUE_REPAY_ON_PRICE]: {
577
- strategyOrBundleId: Bundles.MainnetIds.MORPHO_BLUE_REPAY_ON_PRICE,
578
- strategyId: Strategies.Identifiers.RepayOnPrice,
579
- protocol: PROTOCOLS.MorphoBlue,
576
+ [Bundles.MainnetIds.MAKER_SW_LIQUIDATION_PROTECTION]: {
577
+ strategyOrBundleId: Bundles.MainnetIds.MAKER_SW_LIQUIDATION_PROTECTION,
578
+ strategyId: Strategies.Identifiers.LiquidationProtection,
579
+ protocol: PROTOCOLS.MakerDAO,
580
580
  },
581
- [Bundles.MainnetIds.MORPHO_BLUE_EOA_BOOST_ON_PRICE]: {
582
- strategyOrBundleId: Bundles.MainnetIds.MORPHO_BLUE_EOA_BOOST_ON_PRICE,
583
- strategyId: Strategies.Identifiers.EoaBoostOnPrice,
581
+ [Bundles.MainnetIds.AAVE_V3_SW_LIQUIDATION_PROTECTION]: {
582
+ strategyOrBundleId: Bundles.MainnetIds.AAVE_V3_SW_LIQUIDATION_PROTECTION,
583
+ strategyId: Strategies.Identifiers.LiquidationProtection,
584
+ protocol: PROTOCOLS.AaveV3,
585
+ },
586
+ [Bundles.MainnetIds.AAVE_V4_SW_LIQUIDATION_PROTECTION]: {
587
+ strategyOrBundleId: Bundles.MainnetIds.AAVE_V4_SW_LIQUIDATION_PROTECTION,
588
+ strategyId: Strategies.Identifiers.LiquidationProtection,
589
+ protocol: PROTOCOLS.AaveV4,
590
+ },
591
+ [Bundles.MainnetIds.SPARK_SW_LIQUIDATION_PROTECTION]: {
592
+ strategyOrBundleId: Bundles.MainnetIds.SPARK_SW_LIQUIDATION_PROTECTION,
593
+ strategyId: Strategies.Identifiers.LiquidationProtection,
594
+ protocol: PROTOCOLS.Spark,
595
+ },
596
+ [Bundles.MainnetIds.COMP_V3_SW_LIQUIDATION_PROTECTION]: {
597
+ strategyOrBundleId: Bundles.MainnetIds.COMP_V3_SW_LIQUIDATION_PROTECTION,
598
+ strategyId: Strategies.Identifiers.LiquidationProtection,
599
+ protocol: PROTOCOLS.CompoundV3,
600
+ },
601
+ [Bundles.MainnetIds.COMP_V3_EOA_LIQUIDATION_PROTECTION]: {
602
+ strategyOrBundleId: Bundles.MainnetIds.COMP_V3_EOA_LIQUIDATION_PROTECTION,
603
+ strategyId: Strategies.Identifiers.EoaLiquidationProtection,
604
+ protocol: PROTOCOLS.CompoundV3,
605
+ },
606
+ [Bundles.MainnetIds.MORPHO_BLUE_SW_LIQUIDATION_PROTECTION]: {
607
+ strategyOrBundleId:
608
+ Bundles.MainnetIds.MORPHO_BLUE_SW_LIQUIDATION_PROTECTION,
609
+ strategyId: Strategies.Identifiers.LiquidationProtection,
584
610
  protocol: PROTOCOLS.MorphoBlue,
585
611
  },
586
- [Bundles.MainnetIds.MORPHO_BLUE_EOA_REPAY_ON_PRICE]: {
587
- strategyOrBundleId: Bundles.MainnetIds.MORPHO_BLUE_EOA_REPAY_ON_PRICE,
588
- strategyId: Strategies.Identifiers.EoaRepayOnPrice,
612
+ [Bundles.MainnetIds.FLUID_T1_SW_LIQUIDATION_PROTECTION]: {
613
+ strategyOrBundleId: Bundles.MainnetIds.FLUID_T1_SW_LIQUIDATION_PROTECTION,
614
+ strategyId: Strategies.Identifiers.LiquidationProtection,
615
+ protocol: PROTOCOLS.FluidT1,
616
+ },
617
+ [Bundles.MainnetIds.AAVE_V3_EOA_LIQUIDATION_PROTECTION]: {
618
+ strategyOrBundleId: Bundles.MainnetIds.AAVE_V3_EOA_LIQUIDATION_PROTECTION,
619
+ strategyId: Strategies.Identifiers.EoaLiquidationProtection,
620
+ protocol: PROTOCOLS.AaveV3,
621
+ },
622
+ [Bundles.MainnetIds.AAVE_V4_EOA_LIQUIDATION_PROTECTION]: {
623
+ strategyOrBundleId: Bundles.MainnetIds.AAVE_V4_EOA_LIQUIDATION_PROTECTION,
624
+ strategyId: Strategies.Identifiers.EoaLiquidationProtection,
625
+ protocol: PROTOCOLS.AaveV4,
626
+ },
627
+ [Bundles.MainnetIds.MORPHO_BLUE_EOA_LIQUIDATION_PROTECTION]: {
628
+ strategyOrBundleId: Bundles.MainnetIds.MORPHO_BLUE_EOA_LIQUIDATION_PROTECTION,
629
+ strategyId: Strategies.Identifiers.EoaLiquidationProtection,
589
630
  protocol: PROTOCOLS.MorphoBlue,
590
631
  },
591
- [Bundles.MainnetIds.MORPHO_BLUE_EOA_CLOSE]: {
592
- strategyOrBundleId: Bundles.MainnetIds.MORPHO_BLUE_EOA_CLOSE,
593
- strategyId: Strategies.Identifiers.EoaCloseOnPrice,
632
+ [Bundles.MainnetIds.MORPHO_BLUE_REPAY_ON_PRICE]: {
633
+ strategyOrBundleId: Bundles.MainnetIds.MORPHO_BLUE_REPAY_ON_PRICE,
634
+ strategyId: Strategies.Identifiers.RepayOnPrice,
594
635
  protocol: PROTOCOLS.MorphoBlue,
595
636
  },
596
637
  };
@@ -651,7 +692,16 @@ export const OPTIMISM_BUNDLES_INFO: OptimismBundleInfo = {
651
692
  strategyId: Strategies.Identifiers.EoaCloseOnPrice,
652
693
  protocol: PROTOCOLS.AaveV3,
653
694
  },
654
-
695
+ [Bundles.OptimismIds.AAVE_V3_SW_LIQUIDATION_PROTECTION]: {
696
+ strategyOrBundleId: Bundles.OptimismIds.AAVE_V3_SW_LIQUIDATION_PROTECTION,
697
+ strategyId: Strategies.Identifiers.LiquidationProtection,
698
+ protocol: PROTOCOLS.AaveV3,
699
+ },
700
+ [Bundles.OptimismIds.AAVE_V3_EOA_LIQUIDATION_PROTECTION]: {
701
+ strategyOrBundleId: Bundles.OptimismIds.AAVE_V3_EOA_LIQUIDATION_PROTECTION,
702
+ strategyId: Strategies.Identifiers.EoaLiquidationProtection,
703
+ protocol: PROTOCOLS.AaveV3,
704
+ },
655
705
  };
656
706
 
657
707
  export const BASE_BUNDLES_INFO: BaseBundleInfo = {
@@ -795,30 +845,35 @@ export const BASE_BUNDLES_INFO: BaseBundleInfo = {
795
845
  strategyId: Strategies.Identifiers.RepayOnPrice,
796
846
  protocol: PROTOCOLS.MorphoBlue,
797
847
  },
798
- [Bundles.BaseIds.MORPHO_BLUE_EOA_REPAY]: {
799
- strategyOrBundleId: Bundles.BaseIds.MORPHO_BLUE_EOA_REPAY,
800
- strategyId: Strategies.Identifiers.EoaRepay,
801
- protocol: PROTOCOLS.MorphoBlue,
848
+ [Bundles.BaseIds.AAVE_V3_SW_LIQUIDATION_PROTECTION]: {
849
+ strategyOrBundleId: Bundles.BaseIds.AAVE_V3_SW_LIQUIDATION_PROTECTION,
850
+ strategyId: Strategies.Identifiers.LiquidationProtection,
851
+ protocol: PROTOCOLS.AaveV3,
802
852
  },
803
- [Bundles.BaseIds.MORPHO_BLUE_EOA_BOOST]: {
804
- strategyOrBundleId: Bundles.BaseIds.MORPHO_BLUE_EOA_BOOST,
805
- strategyId: Strategies.Identifiers.EoaBoost,
806
- protocol: PROTOCOLS.MorphoBlue,
853
+ [Bundles.BaseIds.COMP_V3_SW_LIQUIDATION_PROTECTION]: {
854
+ strategyOrBundleId: Bundles.BaseIds.COMP_V3_SW_LIQUIDATION_PROTECTION,
855
+ strategyId: Strategies.Identifiers.LiquidationProtection,
856
+ protocol: PROTOCOLS.CompoundV3,
807
857
  },
808
- [Bundles.BaseIds.MORPHO_BLUE_EOA_BOOST_ON_PRICE]: {
809
- strategyOrBundleId: Bundles.BaseIds.MORPHO_BLUE_EOA_BOOST_ON_PRICE,
810
- strategyId: Strategies.Identifiers.EoaBoostOnPrice,
811
- protocol: PROTOCOLS.MorphoBlue,
858
+ [Bundles.BaseIds.COMP_V3_EOA_LIQUIDATION_PROTECTION]: {
859
+ strategyOrBundleId: Bundles.BaseIds.COMP_V3_EOA_LIQUIDATION_PROTECTION,
860
+ strategyId: Strategies.Identifiers.EoaLiquidationProtection,
861
+ protocol: PROTOCOLS.CompoundV3,
812
862
  },
813
- [Bundles.BaseIds.MORPHO_BLUE_EOA_REPAY_ON_PRICE]: {
814
- strategyOrBundleId: Bundles.BaseIds.MORPHO_BLUE_EOA_REPAY_ON_PRICE,
815
- strategyId: Strategies.Identifiers.EoaRepayOnPrice,
863
+ [Bundles.BaseIds.MORPHO_BLUE_SW_LIQUIDATION_PROTECTION]: {
864
+ strategyOrBundleId: Bundles.BaseIds.MORPHO_BLUE_SW_LIQUIDATION_PROTECTION,
865
+ strategyId: Strategies.Identifiers.LiquidationProtection,
816
866
  protocol: PROTOCOLS.MorphoBlue,
817
867
  },
818
- [Bundles.BaseIds.MORPHO_BLUE_EOA_CLOSE]: {
819
- strategyOrBundleId: Bundles.BaseIds.MORPHO_BLUE_EOA_CLOSE,
820
- strategyId: Strategies.Identifiers.EoaCloseOnPrice,
821
- protocol: PROTOCOLS.MorphoBlue,
868
+ [Bundles.BaseIds.FLUID_T1_SW_LIQUIDATION_PROTECTION]: {
869
+ strategyOrBundleId: Bundles.BaseIds.FLUID_T1_SW_LIQUIDATION_PROTECTION,
870
+ strategyId: Strategies.Identifiers.LiquidationProtection,
871
+ protocol: PROTOCOLS.FluidT1,
872
+ },
873
+ [Bundles.BaseIds.AAVE_V3_EOA_LIQUIDATION_PROTECTION]: {
874
+ strategyOrBundleId: Bundles.BaseIds.AAVE_V3_EOA_LIQUIDATION_PROTECTION,
875
+ strategyId: Strategies.Identifiers.EoaLiquidationProtection,
876
+ protocol: PROTOCOLS.AaveV3,
822
877
  },
823
878
  };
824
879
 
@@ -973,19 +1028,40 @@ export const ARBITRUM_BUNDLES_INFO: ArbitrumBundleInfo = {
973
1028
  strategyId: Strategies.Identifiers.RepayOnPrice,
974
1029
  protocol: PROTOCOLS.MorphoBlue,
975
1030
  },
976
- [Bundles.ArbitrumIds.MORPHO_BLUE_EOA_BOOST_ON_PRICE]: {
977
- strategyOrBundleId: Bundles.ArbitrumIds.MORPHO_BLUE_EOA_BOOST_ON_PRICE,
978
- strategyId: Strategies.Identifiers.EoaBoostOnPrice,
979
- protocol: PROTOCOLS.MorphoBlue,
1031
+ [Bundles.ArbitrumIds.AAVE_V3_SW_LIQUIDATION_PROTECTION]: {
1032
+ strategyOrBundleId: Bundles.ArbitrumIds.AAVE_V3_SW_LIQUIDATION_PROTECTION,
1033
+ strategyId: Strategies.Identifiers.LiquidationProtection,
1034
+ protocol: PROTOCOLS.AaveV3,
980
1035
  },
981
- [Bundles.ArbitrumIds.MORPHO_BLUE_EOA_REPAY_ON_PRICE]: {
982
- strategyOrBundleId: Bundles.ArbitrumIds.MORPHO_BLUE_EOA_REPAY_ON_PRICE,
983
- strategyId: Strategies.Identifiers.EoaRepayOnPrice,
1036
+ [Bundles.ArbitrumIds.COMP_V3_SW_LIQUIDATION_PROTECTION]: {
1037
+ strategyOrBundleId: Bundles.ArbitrumIds.COMP_V3_SW_LIQUIDATION_PROTECTION,
1038
+ strategyId: Strategies.Identifiers.LiquidationProtection,
1039
+ protocol: PROTOCOLS.CompoundV3,
1040
+ },
1041
+ [Bundles.ArbitrumIds.COMP_V3_EOA_LIQUIDATION_PROTECTION]: {
1042
+ strategyOrBundleId: Bundles.ArbitrumIds.COMP_V3_EOA_LIQUIDATION_PROTECTION,
1043
+ strategyId: Strategies.Identifiers.EoaLiquidationProtection,
1044
+ protocol: PROTOCOLS.CompoundV3,
1045
+ },
1046
+ [Bundles.ArbitrumIds.MORPHO_BLUE_SW_LIQUIDATION_PROTECTION]: {
1047
+ strategyOrBundleId:
1048
+ Bundles.ArbitrumIds.MORPHO_BLUE_SW_LIQUIDATION_PROTECTION,
1049
+ strategyId: Strategies.Identifiers.LiquidationProtection,
984
1050
  protocol: PROTOCOLS.MorphoBlue,
985
1051
  },
986
- [Bundles.ArbitrumIds.MORPHO_BLUE_EOA_CLOSE]: {
987
- strategyOrBundleId: Bundles.ArbitrumIds.MORPHO_BLUE_EOA_CLOSE,
988
- strategyId: Strategies.Identifiers.EoaCloseOnPrice,
1052
+ [Bundles.ArbitrumIds.FLUID_T1_SW_LIQUIDATION_PROTECTION]: {
1053
+ strategyOrBundleId: Bundles.ArbitrumIds.FLUID_T1_SW_LIQUIDATION_PROTECTION,
1054
+ strategyId: Strategies.Identifiers.LiquidationProtection,
1055
+ protocol: PROTOCOLS.FluidT1,
1056
+ },
1057
+ [Bundles.ArbitrumIds.AAVE_V3_EOA_LIQUIDATION_PROTECTION]: {
1058
+ strategyOrBundleId: Bundles.ArbitrumIds.AAVE_V3_EOA_LIQUIDATION_PROTECTION,
1059
+ strategyId: Strategies.Identifiers.EoaLiquidationProtection,
1060
+ protocol: PROTOCOLS.AaveV3,
1061
+ },
1062
+ [Bundles.ArbitrumIds.MORPHO_BLUE_EOA_LIQUIDATION_PROTECTION]: {
1063
+ strategyOrBundleId: Bundles.ArbitrumIds.MORPHO_BLUE_EOA_LIQUIDATION_PROTECTION,
1064
+ strategyId: Strategies.Identifiers.EoaLiquidationProtection,
989
1065
  protocol: PROTOCOLS.MorphoBlue,
990
1066
  },
991
1067
  };
package/src/index.ts CHANGED
@@ -24,18 +24,34 @@ import * as enums from './types/enums';
24
24
  import type * as types from './types';
25
25
 
26
26
  import {
27
- getRatioStateInfoForAaveCloseStrategy, compareSubHashes, encodeSubId, getCloseStrategyType,
27
+ getRatioStateInfoForAaveCloseStrategy,
28
+ compareSubHashes,
29
+ encodeSubId,
30
+ getCloseStrategyType,
28
31
  } from './services/utils';
29
32
 
30
33
  const utils = {
31
- getRatioStateInfoForAaveCloseStrategy, compareSubHashes, encodeSubId, getCloseStrategyType,
34
+ compareSubHashes,
35
+ encodeSubId,
36
+ getCloseStrategyType,
37
+ getRatioStateInfoForAaveCloseStrategy,
32
38
  };
33
39
 
34
40
  export {
35
- LegacyMakerAutomation, LegacyAaveAutomation, LegacyCompoundAutomation,
36
- EthereumStrategies, OptimismStrategies, ArbitrumStrategies, BaseStrategies,
37
- triggerService, subDataService, strategySubService, utils,
38
- enums, constants, strategiesService,
41
+ ArbitrumStrategies,
42
+ BaseStrategies,
43
+ EthereumStrategies,
44
+ LegacyAaveAutomation,
45
+ LegacyCompoundAutomation,
46
+ LegacyMakerAutomation,
47
+ OptimismStrategies,
48
+ constants,
49
+ enums,
50
+ strategiesService,
51
+ strategySubService,
52
+ subDataService,
53
+ triggerService,
54
+ utils,
39
55
  };
40
56
 
41
57
  export type { types };
@@ -106,7 +106,7 @@ function parseMakerLeverageManagement(position: Position.Automated, parseData: P
106
106
  const { isEnabled } = parseData.strategiesSubsData;
107
107
 
108
108
  const triggerData = triggerService.makerRatioTrigger.decode(subStruct.triggerData);
109
- const subData = subDataService.makerLeverageManagementSubData.decode(subStruct.subData);
109
+ const subData = subDataService.legacyMakerLeverageManagementSubData.decode(subStruct.subData);
110
110
 
111
111
  _position.strategyData.decoded.triggerData = triggerData;
112
112
  _position.strategyData.decoded.subData = subData;
@@ -140,6 +140,33 @@ function parseMakerLeverageManagement(position: Position.Automated, parseData: P
140
140
  return _position;
141
141
  }
142
142
 
143
+ function parseMakerLiquidationProtection(position: Position.Automated, parseData: ParseData): Position.Automated {
144
+ const _position = cloneDeep(position);
145
+
146
+ const { subStruct, subId } = parseData.subscriptionEventData;
147
+ const { isEnabled } = parseData.strategiesSubsData;
148
+
149
+ const triggerData = triggerService.makerRatioTrigger.decode(subStruct.triggerData);
150
+ const subData = subDataService.makerLiquidationProtectionSubData.decode(subStruct.subData);
151
+
152
+ _position.strategyData.decoded.triggerData = triggerData;
153
+ _position.strategyData.decoded.subData = subData;
154
+
155
+ _position.positionId = getPositionId(_position.chainId, _position.protocol.id, subData.vaultId);
156
+
157
+
158
+ _position.specific = {
159
+ triggerRepayRatio: triggerData.ratio,
160
+ targetRepayRatio: subData.targetRatio,
161
+ repayEnabled: isEnabled,
162
+ subId1: Number(subId),
163
+ };
164
+
165
+ _position.strategy.strategyId = Strategies.IdOverrides.LiquidationProtection;
166
+
167
+ return _position;
168
+ }
169
+
143
170
  function parseLiquityCloseOnPrice(position: Position.Automated, parseData: ParseData): Position.Automated {
144
171
  const _position = cloneDeep(position);
145
172
 
@@ -196,7 +223,7 @@ function parseAaveV2LeverageManagement(position: Position.Automated, parseData:
196
223
  const { isEnabled } = parseData.strategiesSubsData;
197
224
 
198
225
  const triggerData = triggerService.aaveV2RatioTrigger.decode(subStruct.triggerData);
199
- const subData = subDataService.aaveV2LeverageManagementSubData.decode(subStruct.subData);
226
+ const subData = subDataService.legacyAaveV2LeverageManagementSubData.decode(subStruct.subData);
200
227
 
201
228
  _position.strategyData.decoded.triggerData = triggerData;
202
229
  _position.strategyData.decoded.subData = subData;
@@ -240,9 +267,9 @@ function parseAaveV3LeverageManagement(position: Position.Automated, parseData:
240
267
  const isEOA = _position.strategy.strategyId.includes('eoa');
241
268
  let subData;
242
269
  if (isEOA) {
243
- subData = subDataService.aaveV3LeverageManagementSubDataWithoutSubProxy.decode(subStruct.subData);
244
- } else {
245
270
  subData = subDataService.aaveV3LeverageManagementSubData.decode(subStruct.subData);
271
+ } else {
272
+ subData = subDataService.legacyAaveV3LeverageManagementSubData.decode(subStruct.subData);
246
273
  }
247
274
 
248
275
  _position.strategyData.decoded.triggerData = triggerData;
@@ -280,6 +307,35 @@ function parseAaveV3LeverageManagement(position: Position.Automated, parseData:
280
307
  return _position;
281
308
  }
282
309
 
310
+ function parseAaveV3LiquidationProtection(position: Position.Automated, parseData: ParseData): Position.Automated {
311
+ const _position = cloneDeep(position);
312
+
313
+ const { subStruct, subId, subHash } = parseData.subscriptionEventData;
314
+ const { isEnabled } = parseData.strategiesSubsData;
315
+
316
+ const triggerData = triggerService.aaveV3RatioTrigger.decode(subStruct.triggerData);
317
+
318
+ const subData = subDataService.aaveV3LiquidationProtectionSubData.decode(subStruct.subData);
319
+
320
+ _position.strategyData.decoded.triggerData = triggerData;
321
+ _position.strategyData.decoded.subData = subData;
322
+
323
+ _position.positionId = getPositionId(_position.chainId, _position.protocol.id, _position.owner, triggerData.market);
324
+
325
+ _position.specific = {
326
+ triggerRepayRatio: triggerData.ratio,
327
+ targetRepayRatio: subData.targetRatio,
328
+ repayEnabled: isEnabled,
329
+ subId1: Number(subId),
330
+ subHashRepay: subHash,
331
+ };
332
+
333
+ const isEOA = _position.strategy.strategyId.includes('eoa');
334
+ _position.strategy.strategyId = isEOA ? Strategies.IdOverrides.EoaLiquidationProtection : Strategies.IdOverrides.LiquidationProtection;
335
+
336
+ return _position;
337
+ }
338
+
283
339
  function parseAaveV3LeverageManagementOnPrice(position: Position.Automated, parseData: ParseData): Position.Automated {
284
340
  const _position = cloneDeep(position);
285
341
  const { subStruct } = parseData.subscriptionEventData;
@@ -437,6 +493,31 @@ function parseAaveV4LeverageManagement(position: Position.Automated, parseData:
437
493
  return _position;
438
494
  }
439
495
 
496
+ function parseAaveV4LiquidationProtection(position: Position.Automated, parseData: ParseData): Position.Automated {
497
+ const _position = cloneDeep(position);
498
+ const { subStruct, subId, subHash } = parseData.subscriptionEventData;
499
+ const { isEnabled } = parseData.strategiesSubsData;
500
+ const triggerData = triggerService.aaveV4RatioTrigger.decode(subStruct.triggerData);
501
+ const subData = subDataService.aaveV4LiquidationProtectionSubData.decode(subStruct.subData);
502
+ const isEOA = _position.strategy.strategyId.includes('eoa');
503
+
504
+ _position.strategyData.decoded.triggerData = triggerData;
505
+ _position.strategyData.decoded.subData = subData;
506
+ _position.positionId = getPositionId(_position.chainId, _position.protocol.id, _position.owner, triggerData.spoke);
507
+ _position.strategy.strategyId = isEOA ? Strategies.IdOverrides.EoaLiquidationProtection : Strategies.IdOverrides.LiquidationProtection;
508
+
509
+ _position.specific = {
510
+ triggerRepayRatio: triggerData.ratio,
511
+ targetRepayRatio: subData.targetRatio,
512
+ repayEnabled: isEnabled,
513
+ subId1: Number(subId),
514
+ subHashRepay: subHash,
515
+ };
516
+
517
+ return _position;
518
+ }
519
+
520
+
440
521
  function parseAaveV4LeverageManagementOnPrice(position: Position.Automated, parseData: ParseData): Position.Automated {
441
522
  const _position = cloneDeep(position);
442
523
  const { subStruct } = parseData.subscriptionEventData;
@@ -589,7 +670,7 @@ function parseCompoundV2LeverageManagement(position: Position.Automated, parseDa
589
670
  const { isEnabled } = parseData.strategiesSubsData;
590
671
 
591
672
  const triggerData = triggerService.compoundV2RatioTrigger.decode(subStruct.triggerData);
592
- const subData = subDataService.compoundV2LeverageManagementSubData.decode(subStruct.subData);
673
+ const subData = subDataService.legacyCompoundV2LeverageManagementSubData.decode(subStruct.subData);
593
674
 
594
675
  _position.strategyData.decoded.triggerData = triggerData;
595
676
  _position.strategyData.decoded.subData = subData;
@@ -631,7 +712,7 @@ function parseCompoundV3LeverageManagement(position: Position.Automated, parseDa
631
712
  const { subStruct, subId, subHash } = parseData.subscriptionEventData;
632
713
  const { isEnabled } = parseData.strategiesSubsData;
633
714
 
634
- const subDataDecoder = subDataService.compoundV3LeverageManagementSubDataWithoutSubProxy;
715
+ const subDataDecoder = subDataService.compoundV3LeverageManagementSubData;
635
716
 
636
717
  const triggerData = triggerService.compoundV3RatioTrigger.decode(subStruct.triggerData);
637
718
  const subData = subDataDecoder.decode(subStruct.subData);
@@ -670,6 +751,39 @@ function parseCompoundV3LeverageManagement(position: Position.Automated, parseDa
670
751
  return _position;
671
752
  }
672
753
 
754
+
755
+ function parseCompoundV3LiquidationProtection(position: Position.Automated, parseData: ParseData): Position.Automated {
756
+ const _position = cloneDeep(position);
757
+
758
+ const { subStruct, subId, subHash } = parseData.subscriptionEventData;
759
+ const { isEnabled } = parseData.strategiesSubsData;
760
+
761
+ const subDataDecoder = subDataService.compoundV3LiquidationProtectionSubData;
762
+
763
+ const triggerData = triggerService.compoundV3RatioTrigger.decode(subStruct.triggerData);
764
+ const subData = subDataDecoder.decode(subStruct.subData);
765
+
766
+ _position.strategyData.decoded.triggerData = triggerData;
767
+ _position.strategyData.decoded.subData = subData;
768
+
769
+ _position.positionId = getPositionId(_position.chainId, _position.protocol.id, triggerData.owner.toLowerCase(), triggerData.market);
770
+
771
+ const isEOA = _position.strategy.strategyId.includes('eoa');
772
+
773
+ _position.specific = {
774
+ triggerRepayRatio: triggerData.ratio,
775
+ targetRepayRatio: subData.targetRatio,
776
+ repayEnabled: isEnabled,
777
+ subId1: Number(subId),
778
+ subHashRepay: subHash,
779
+ };
780
+
781
+ _position.strategy.strategyId = isEOA ? Strategies.IdOverrides.EoaLiquidationProtection : Strategies.IdOverrides.LiquidationProtection;
782
+
783
+ return _position;
784
+ }
785
+
786
+
673
787
  function parseCompoundV3LeverageManagementOnPrice(position: Position.Automated, parseData: ParseData): Position.Automated {
674
788
  const _position = cloneDeep(position);
675
789
 
@@ -774,7 +888,7 @@ function parseExchangeLimitOrder(position: Position.Automated, parseData: ParseD
774
888
 
775
889
  const { subStruct } = parseData.subscriptionEventData;
776
890
 
777
- _position.strategyData.decoded.subData = subDataService.exchangeLimitOrderSubData.decode(subStruct.subData, chainId);
891
+ _position.strategyData.decoded.subData = subDataService.legacyExchangeLimitOrderSubData.decode(subStruct.subData, chainId);
778
892
  const fromTokenDecimals = getAssetInfoByAddress(_position.strategyData.decoded.subData.fromToken, chainId).decimals;
779
893
  const toTokenDecimals = getAssetInfoByAddress(_position.strategyData.decoded.subData.toToken, chainId).decimals;
780
894
  _position.strategyData.decoded.triggerData = triggerService.exchangeOffchainPriceTrigger.decode(subStruct.triggerData, fromTokenDecimals, toTokenDecimals);
@@ -791,7 +905,7 @@ function parseLiquityLeverageManagement(position: Position.Automated, parseData:
791
905
  const { isEnabled } = parseData.strategiesSubsData;
792
906
 
793
907
  const triggerData = triggerService.liquityRatioTrigger.decode(subStruct.triggerData);
794
- const subData = subDataService.liquityLeverageManagementSubData.decode(subStruct.subData);
908
+ const subData = subDataService.legacyLiquityLeverageManagementSubData.decode(subStruct.subData);
795
909
 
796
910
  _position.strategyData.decoded.triggerData = triggerData;
797
911
  _position.strategyData.decoded.subData = subData;
@@ -875,7 +989,7 @@ function parseSparkLeverageManagement(position: Position.Automated, parseData: P
875
989
  const { isEnabled } = parseData.strategiesSubsData;
876
990
 
877
991
  const triggerData = triggerService.sparkRatioTrigger.decode(subStruct.triggerData);
878
- const subData = subDataService.sparkLeverageManagementSubData.decode(subStruct.subData);
992
+ const subData = subDataService.legacySparkLeverageManagementSubData.decode(subStruct.subData);
879
993
 
880
994
  _position.strategyData.decoded.triggerData = triggerData;
881
995
  _position.strategyData.decoded.subData = subData;
@@ -909,6 +1023,34 @@ function parseSparkLeverageManagement(position: Position.Automated, parseData: P
909
1023
  return _position;
910
1024
  }
911
1025
 
1026
+ function parseSparkLiquidationProtection(position: Position.Automated, parseData: ParseData): Position.Automated {
1027
+ const _position = cloneDeep(position);
1028
+
1029
+ const { subStruct, subId, subHash } = parseData.subscriptionEventData;
1030
+ const { isEnabled } = parseData.strategiesSubsData;
1031
+
1032
+ const triggerData = triggerService.sparkRatioTrigger.decode(subStruct.triggerData);
1033
+ const subData = subDataService.sparkLiquidationProtectionSubData.decode(subStruct.subData);
1034
+
1035
+ _position.strategyData.decoded.triggerData = triggerData;
1036
+ _position.strategyData.decoded.subData = subData;
1037
+
1038
+ _position.positionId = getPositionId(_position.chainId, _position.protocol.id, _position.owner, triggerData.market);
1039
+
1040
+ _position.specific = {
1041
+ triggerRepayRatio: triggerData.ratio,
1042
+ targetRepayRatio: subData.targetRatio,
1043
+ repayEnabled: isEnabled,
1044
+ subId1: Number(subId),
1045
+ subHashRepay: subHash,
1046
+ };
1047
+
1048
+ _position.strategy.strategyId = Strategies.IdOverrides.LiquidationProtection;
1049
+
1050
+ return _position;
1051
+ }
1052
+
1053
+
912
1054
  function parseSparkLeverageManagementOnPrice(position: Position.Automated, parseData: ParseData): Position.Automated {
913
1055
  const _position = cloneDeep(position);
914
1056
  const { subStruct } = parseData.subscriptionEventData;
@@ -1109,6 +1251,34 @@ function parseMorphoBlueLeverageManagement(position: Position.Automated, parseDa
1109
1251
  return _position;
1110
1252
  }
1111
1253
 
1254
+
1255
+ function parseMorphoBlueLiquidationProtection(position: Position.Automated, parseData: ParseData): Position.Automated {
1256
+ const _position = cloneDeep(position);
1257
+
1258
+ const { subStruct, subId, subHash } = parseData.subscriptionEventData;
1259
+ const { isEnabled } = parseData.strategiesSubsData;
1260
+ const triggerData = triggerService.morphoBlueRatioTrigger.decode(subStruct.triggerData);
1261
+ const subData = subDataService.morphoBlueLiquidationProtectionSubData.decode(subStruct.subData);
1262
+
1263
+ _position.strategyData.decoded.triggerData = triggerData;
1264
+ _position.strategyData.decoded.subData = subData;
1265
+
1266
+ _position.positionId = getPositionId(_position.chainId, _position.protocol.id, triggerData.owner.toLowerCase(), triggerData.marketId);
1267
+
1268
+ _position.specific = {
1269
+ triggerRepayRatio: triggerData.ratio,
1270
+ targetRepayRatio: subData.targetRatio,
1271
+ repayEnabled: isEnabled,
1272
+ subId1: Number(subId),
1273
+ subHashRepay: subHash,
1274
+ };
1275
+
1276
+ const isEOA = _position.strategy.strategyId.includes('eoa');
1277
+ _position.strategy.strategyId = isEOA ? Strategies.IdOverrides.EoaLiquidationProtection : Strategies.IdOverrides.LiquidationProtection;
1278
+
1279
+ return _position;
1280
+ }
1281
+
1112
1282
  function parseMorphoBlueLeverageManagementOnPrice(position: Position.Automated, parseData: ParseData): Position.Automated {
1113
1283
  const _position = cloneDeep(position);
1114
1284
 
@@ -1315,6 +1485,37 @@ function parseFluidT1LeverageManagement(position: Position.Automated, parseData:
1315
1485
  return _position;
1316
1486
  }
1317
1487
 
1488
+
1489
+ function parseFluidT1LiquidationProtection(position: Position.Automated, parseData: ParseData): Position.Automated {
1490
+ const _position = cloneDeep(position);
1491
+
1492
+ const { subStruct, subId, subHash } = parseData.subscriptionEventData;
1493
+ const { isEnabled } = parseData.strategiesSubsData;
1494
+
1495
+ const triggerData = triggerService.fluidRatioTrigger.decode(subStruct.triggerData);
1496
+ const subData = subDataService.fluidLiquidationProtectionSubData.decode(subStruct.subData);
1497
+
1498
+ _position.strategyData.decoded.triggerData = triggerData;
1499
+ _position.strategyData.decoded.subData = subData;
1500
+
1501
+ _position.positionId = getPositionId(
1502
+ _position.chainId, _position.protocol.id, _position.owner, triggerData.nftId, subData.vault,
1503
+ );
1504
+
1505
+ _position.specific = {
1506
+ triggerRepayRatio: triggerData.ratio,
1507
+ targetRepayRatio: subData.targetRatio,
1508
+ repayEnabled: isEnabled,
1509
+ subId1: Number(subId),
1510
+ subHashRepay: subHash,
1511
+ };
1512
+
1513
+ _position.strategy.strategyId = Strategies.IdOverrides.LiquidationProtection;
1514
+
1515
+ return _position;
1516
+ }
1517
+
1518
+
1318
1519
  const parsingMethodsMapping: StrategiesToProtocolVersionMapping = {
1319
1520
  [ProtocolIdentifiers.StrategiesAutomation.MakerDAO]: {
1320
1521
  [Strategies.Identifiers.SavingsLiqProtection]: parseMakerSavingsLiqProtection,
@@ -1324,6 +1525,7 @@ const parsingMethodsMapping: StrategiesToProtocolVersionMapping = {
1324
1525
  [Strategies.Identifiers.TrailingStopToDebt]: parseMakerTrailingStop,
1325
1526
  [Strategies.Identifiers.Repay]: parseMakerLeverageManagement,
1326
1527
  [Strategies.Identifiers.Boost]: parseMakerLeverageManagement,
1528
+ [Strategies.Identifiers.LiquidationProtection]: parseMakerLiquidationProtection,
1327
1529
  },
1328
1530
  [ProtocolIdentifiers.StrategiesAutomation.Liquity]: {
1329
1531
  [Strategies.Identifiers.CloseOnPriceToColl]: parseLiquityCloseOnPrice,
@@ -1362,6 +1564,8 @@ const parsingMethodsMapping: StrategiesToProtocolVersionMapping = {
1362
1564
  [Strategies.Identifiers.EoaBoostOnPrice]: parseAaveV3LeverageManagementOnPrice,
1363
1565
  [Strategies.Identifiers.EoaCloseOnPrice]: parseAaveV3CloseOnPrice,
1364
1566
  [Strategies.Identifiers.CollateralSwitch]: parseAaveV3CollateralSwitch,
1567
+ [Strategies.Identifiers.LiquidationProtection]: parseAaveV3LiquidationProtection,
1568
+ [Strategies.Identifiers.EoaLiquidationProtection]: parseAaveV3LiquidationProtection,
1365
1569
  },
1366
1570
  [ProtocolIdentifiers.StrategiesAutomation.AaveV4]: {
1367
1571
  [Strategies.Identifiers.Repay]: parseAaveV4LeverageManagement,
@@ -1376,6 +1580,8 @@ const parsingMethodsMapping: StrategiesToProtocolVersionMapping = {
1376
1580
  [Strategies.Identifiers.EoaCloseOnPrice]: parseAaveV4CloseOnPrice,
1377
1581
  [Strategies.Identifiers.CollateralSwitch]: parseAaveV4CollateralSwitch,
1378
1582
  [Strategies.Identifiers.EoaCollateralSwitch]: parseAaveV4CollateralSwitch,
1583
+ [Strategies.Identifiers.LiquidationProtection]: parseAaveV4LiquidationProtection,
1584
+ [Strategies.Identifiers.EoaLiquidationProtection]: parseAaveV4LiquidationProtection,
1379
1585
  },
1380
1586
  [ProtocolIdentifiers.StrategiesAutomation.CompoundV2]: {
1381
1587
  [Strategies.Identifiers.Repay]: parseCompoundV2LeverageManagement,
@@ -1392,6 +1598,8 @@ const parsingMethodsMapping: StrategiesToProtocolVersionMapping = {
1392
1598
  [Strategies.Identifiers.EoaBoostOnPrice]: parseCompoundV3LeverageManagementOnPrice,
1393
1599
  [Strategies.Identifiers.CloseOnPrice]: parseCompoundV3CloseOnPrice,
1394
1600
  [Strategies.Identifiers.EoaCloseOnPrice]: parseCompoundV3CloseOnPrice,
1601
+ [Strategies.Identifiers.LiquidationProtection]: parseCompoundV3LiquidationProtection,
1602
+ [Strategies.Identifiers.EoaLiquidationProtection]: parseCompoundV3LiquidationProtection,
1395
1603
  },
1396
1604
  [ProtocolIdentifiers.StrategiesAutomation.ChickenBonds]: {
1397
1605
  [Strategies.Identifiers.Rebond]: parseChickenBondsRebond,
@@ -1411,6 +1619,7 @@ const parsingMethodsMapping: StrategiesToProtocolVersionMapping = {
1411
1619
  [Strategies.Identifiers.BoostOnPrice]: parseSparkLeverageManagementOnPrice,
1412
1620
  [Strategies.Identifiers.CloseOnPrice]: parseSparkCloseOnPrice,
1413
1621
  [Strategies.Identifiers.CollateralSwitch]: parseSparkCollateralSwitch,
1622
+ [Strategies.Identifiers.LiquidationProtection]: parseSparkLiquidationProtection,
1414
1623
  },
1415
1624
  [ProtocolIdentifiers.StrategiesAutomation.CrvUSD]: {
1416
1625
  [Strategies.Identifiers.Repay]: parseCrvUSDLeverageManagement,
@@ -1424,14 +1633,14 @@ const parsingMethodsMapping: StrategiesToProtocolVersionMapping = {
1424
1633
  [Strategies.Identifiers.EoaBoost]: parseMorphoBlueLeverageManagement,
1425
1634
  [Strategies.Identifiers.BoostOnPrice]: parseMorphoBlueLeverageManagementOnPrice,
1426
1635
  [Strategies.Identifiers.RepayOnPrice]: parseMorphoBlueLeverageManagementOnPrice,
1427
- [Strategies.Identifiers.EoaBoostOnPrice]: parseMorphoBlueLeverageManagementOnPrice,
1428
- [Strategies.Identifiers.EoaRepayOnPrice]: parseMorphoBlueLeverageManagementOnPrice,
1429
1636
  [Strategies.Identifiers.CloseOnPrice]: parseMorphoBlueCloseOnPrice,
1430
- [Strategies.Identifiers.EoaCloseOnPrice]: parseMorphoBlueCloseOnPrice,
1637
+ [Strategies.Identifiers.LiquidationProtection]: parseMorphoBlueLiquidationProtection,
1638
+ [Strategies.Identifiers.EoaLiquidationProtection]: parseMorphoBlueLiquidationProtection,
1431
1639
  },
1432
1640
  [ProtocolIdentifiers.StrategiesAutomation.FluidT1]: {
1433
1641
  [Strategies.Identifiers.Repay]: parseFluidT1LeverageManagement,
1434
1642
  [Strategies.Identifiers.Boost]: parseFluidT1LeverageManagement,
1643
+ [Strategies.Identifiers.LiquidationProtection]: parseFluidT1LiquidationProtection,
1435
1644
  },
1436
1645
  };
1437
1646