@defisaver/automation-sdk 3.3.14 → 3.3.15-liq-prot-1-dev

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/cjs/constants/index.js +130 -0
  2. package/cjs/index.d.ts +4 -3
  3. package/cjs/index.js +6 -2
  4. package/cjs/services/strategiesService.js +178 -17
  5. package/cjs/services/strategySubService.d.ts +14 -13
  6. package/cjs/services/strategySubService.js +79 -63
  7. package/cjs/services/strategySubService.test.js +0 -234
  8. package/cjs/services/subDataService.d.ts +92 -4
  9. package/cjs/services/subDataService.js +245 -35
  10. package/cjs/services/subDataService.test.js +0 -110
  11. package/cjs/services/utils.d.ts +3 -1
  12. package/cjs/services/utils.js +34 -1
  13. package/cjs/services/utils.test.js +25 -0
  14. package/cjs/types/enums.d.ts +36 -6
  15. package/cjs/types/enums.js +30 -0
  16. package/esm/constants/index.js +130 -0
  17. package/esm/index.d.ts +4 -3
  18. package/esm/index.js +7 -3
  19. package/esm/services/strategiesService.js +178 -17
  20. package/esm/services/strategySubService.d.ts +14 -13
  21. package/esm/services/strategySubService.js +79 -60
  22. package/esm/services/strategySubService.test.js +2 -236
  23. package/esm/services/subDataService.d.ts +92 -4
  24. package/esm/services/subDataService.js +243 -34
  25. package/esm/services/subDataService.test.js +0 -110
  26. package/esm/services/utils.d.ts +3 -1
  27. package/esm/services/utils.js +32 -1
  28. package/esm/services/utils.test.js +27 -2
  29. package/esm/types/enums.d.ts +36 -6
  30. package/esm/types/enums.js +30 -0
  31. package/package.json +1 -1
  32. package/src/constants/index.ts +132 -1
  33. package/src/index.ts +24 -6
  34. package/src/services/strategiesService.ts +242 -17
  35. package/src/services/strategySubService.test.ts +0 -279
  36. package/src/services/strategySubService.ts +209 -116
  37. package/src/services/subDataService.test.ts +0 -120
  38. package/src/services/subDataService.ts +335 -49
  39. package/src/services/utils.test.ts +32 -1
  40. package/src/services/utils.ts +32 -1
  41. package/src/types/enums.ts +30 -2
@@ -102,7 +102,7 @@ function parseMakerTrailingStop(position: Position.Automated, parseData: ParseDa
102
102
  function parseMakerLeverageManagement(position: Position.Automated, parseData: ParseData): Position.Automated {
103
103
  const _position = cloneDeep(position);
104
104
 
105
- const { subStruct, subId } = parseData.subscriptionEventData;
105
+ const { subStruct, subId, subHash } = parseData.subscriptionEventData;
106
106
  const { isEnabled } = parseData.strategiesSubsData;
107
107
 
108
108
  const triggerData = triggerService.makerRatioTrigger.decode(subStruct.triggerData);
@@ -119,9 +119,10 @@ function parseMakerLeverageManagement(position: Position.Automated, parseData: P
119
119
  _position.specific = {
120
120
  triggerRepayRatio: triggerData.ratio,
121
121
  targetRepayRatio: subData.targetRatio,
122
- repayEnabled: true,
122
+ repayEnabled: isEnabled,
123
123
  subId1: Number(subId),
124
124
  mergeWithId: Strategies.Identifiers.Boost,
125
+ subHashRepay: subHash,
125
126
  };
126
127
  } else {
127
128
  _position.specific = {
@@ -130,6 +131,7 @@ function parseMakerLeverageManagement(position: Position.Automated, parseData: P
130
131
  boostEnabled: isEnabled,
131
132
  subId2: Number(subId),
132
133
  mergeId: Strategies.Identifiers.Boost,
134
+ subHashBoost: subHash,
133
135
  };
134
136
  }
135
137
 
@@ -138,6 +140,33 @@ function parseMakerLeverageManagement(position: Position.Automated, parseData: P
138
140
  return _position;
139
141
  }
140
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
+
141
170
  function parseLiquityCloseOnPrice(position: Position.Automated, parseData: ParseData): Position.Automated {
142
171
  const _position = cloneDeep(position);
143
172
 
@@ -190,7 +219,7 @@ function parseLiquityTrailingStop(position: Position.Automated, parseData: Parse
190
219
  function parseAaveV2LeverageManagement(position: Position.Automated, parseData: ParseData): Position.Automated {
191
220
  const _position = cloneDeep(position);
192
221
 
193
- const { subStruct, subId } = parseData.subscriptionEventData;
222
+ const { subStruct, subId, subHash } = parseData.subscriptionEventData;
194
223
  const { isEnabled } = parseData.strategiesSubsData;
195
224
 
196
225
  const triggerData = triggerService.aaveV2RatioTrigger.decode(subStruct.triggerData);
@@ -207,9 +236,10 @@ function parseAaveV2LeverageManagement(position: Position.Automated, parseData:
207
236
  _position.specific = {
208
237
  triggerRepayRatio: triggerData.ratio,
209
238
  targetRepayRatio: subData.targetRatio,
210
- repayEnabled: true,
239
+ repayEnabled: isEnabled,
211
240
  subId1: Number(subId),
212
241
  mergeWithId: Strategies.Identifiers.Boost,
242
+ subHashRepay: subHash,
213
243
  };
214
244
  } else {
215
245
  _position.specific = {
@@ -218,6 +248,7 @@ function parseAaveV2LeverageManagement(position: Position.Automated, parseData:
218
248
  boostEnabled: isEnabled,
219
249
  subId2: Number(subId),
220
250
  mergeId: Strategies.Identifiers.Boost,
251
+ subHashBoost: subHash,
221
252
  };
222
253
  }
223
254
 
@@ -276,6 +307,35 @@ function parseAaveV3LeverageManagement(position: Position.Automated, parseData:
276
307
  return _position;
277
308
  }
278
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
+
279
339
  function parseAaveV3LeverageManagementOnPrice(position: Position.Automated, parseData: ParseData): Position.Automated {
280
340
  const _position = cloneDeep(position);
281
341
  const { subStruct } = parseData.subscriptionEventData;
@@ -433,6 +493,31 @@ function parseAaveV4LeverageManagement(position: Position.Automated, parseData:
433
493
  return _position;
434
494
  }
435
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
+
436
521
  function parseAaveV4LeverageManagementOnPrice(position: Position.Automated, parseData: ParseData): Position.Automated {
437
522
  const _position = cloneDeep(position);
438
523
  const { subStruct } = parseData.subscriptionEventData;
@@ -501,7 +586,7 @@ function parseAaveV4CollateralSwitch(position: Position.Automated, parseData: Pa
501
586
  function parseMorphoAaveV2LeverageManagement(position: Position.Automated, parseData: ParseData): Position.Automated {
502
587
  const _position = cloneDeep(position);
503
588
 
504
- const { subStruct, subId } = parseData.subscriptionEventData;
589
+ const { subStruct, subId, subHash } = parseData.subscriptionEventData;
505
590
  const { isEnabled } = parseData.strategiesSubsData;
506
591
 
507
592
  const triggerData = triggerService.morphoAaveV2RatioTrigger.decode(subStruct.triggerData);
@@ -518,9 +603,10 @@ function parseMorphoAaveV2LeverageManagement(position: Position.Automated, parse
518
603
  _position.specific = {
519
604
  triggerRepayRatio: triggerData.ratio,
520
605
  targetRepayRatio: subData.targetRatio,
521
- repayEnabled: true,
606
+ repayEnabled: isEnabled,
522
607
  subId1: Number(subId),
523
608
  mergeWithId: Strategies.Identifiers.Boost,
609
+ subHashRepay: subHash,
524
610
  };
525
611
  } else {
526
612
  _position.specific = {
@@ -529,6 +615,7 @@ function parseMorphoAaveV2LeverageManagement(position: Position.Automated, parse
529
615
  boostEnabled: isEnabled,
530
616
  subId2: Number(subId),
531
617
  mergeId: Strategies.Identifiers.Boost,
618
+ subHashBoost: subHash,
532
619
  };
533
620
  }
534
621
 
@@ -579,7 +666,7 @@ function parseAaveV3CloseOnPriceWithMaximumGasPrice(position: Position.Automated
579
666
  function parseCompoundV2LeverageManagement(position: Position.Automated, parseData: ParseData): Position.Automated {
580
667
  const _position = cloneDeep(position);
581
668
 
582
- const { subStruct, subId } = parseData.subscriptionEventData;
669
+ const { subStruct, subId, subHash } = parseData.subscriptionEventData;
583
670
  const { isEnabled } = parseData.strategiesSubsData;
584
671
 
585
672
  const triggerData = triggerService.compoundV2RatioTrigger.decode(subStruct.triggerData);
@@ -597,9 +684,10 @@ function parseCompoundV2LeverageManagement(position: Position.Automated, parseDa
597
684
  _position.specific = {
598
685
  triggerRepayRatio: triggerData.ratio,
599
686
  targetRepayRatio: subData.targetRatio,
600
- repayEnabled: true,
687
+ repayEnabled: isEnabled,
601
688
  subId1: Number(subId),
602
689
  mergeWithId: Strategies.Identifiers.Boost,
690
+ subHashRepay: subHash,
603
691
  };
604
692
  } else {
605
693
  _position.specific = {
@@ -608,6 +696,7 @@ function parseCompoundV2LeverageManagement(position: Position.Automated, parseDa
608
696
  boostEnabled: isEnabled,
609
697
  subId2: Number(subId),
610
698
  mergeId: Strategies.Identifiers.Boost,
699
+ subHashBoost: subHash,
611
700
  };
612
701
  }
613
702
 
@@ -620,12 +709,10 @@ function parseCompoundV2LeverageManagement(position: Position.Automated, parseDa
620
709
  function parseCompoundV3LeverageManagement(position: Position.Automated, parseData: ParseData): Position.Automated {
621
710
  const _position = cloneDeep(position);
622
711
 
623
- const { subStruct, subId } = parseData.subscriptionEventData;
712
+ const { subStruct, subId, subHash } = parseData.subscriptionEventData;
624
713
  const { isEnabled } = parseData.strategiesSubsData;
625
714
 
626
- const subDataDecoder = position.chainId !== 1
627
- ? subDataService.compoundV3L2LeverageManagementSubData
628
- : subDataService.compoundV3LeverageManagementSubData;
715
+ const subDataDecoder = subDataService.compoundV3LeverageManagementSubDataWithoutSubProxy;
629
716
 
630
717
  const triggerData = triggerService.compoundV3RatioTrigger.decode(subStruct.triggerData);
631
718
  const subData = subDataDecoder.decode(subStruct.subData);
@@ -643,9 +730,10 @@ function parseCompoundV3LeverageManagement(position: Position.Automated, parseDa
643
730
  _position.specific = {
644
731
  triggerRepayRatio: triggerData.ratio,
645
732
  targetRepayRatio: subData.targetRatio,
646
- repayEnabled: true,
733
+ repayEnabled: isEnabled,
647
734
  subId1: Number(subId),
648
735
  mergeWithId: isEOA ? Strategies.Identifiers.EoaBoost : Strategies.Identifiers.Boost,
736
+ subHashRepay: subHash,
649
737
  };
650
738
  } else {
651
739
  _position.specific = {
@@ -654,6 +742,7 @@ function parseCompoundV3LeverageManagement(position: Position.Automated, parseDa
654
742
  boostEnabled: isEnabled,
655
743
  subId2: Number(subId),
656
744
  mergeId: isEOA ? Strategies.Identifiers.EoaBoost : Strategies.Identifiers.Boost,
745
+ subHashBoost: subHash,
657
746
  };
658
747
  }
659
748
 
@@ -662,6 +751,39 @@ function parseCompoundV3LeverageManagement(position: Position.Automated, parseDa
662
751
  return _position;
663
752
  }
664
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.compoundV3LiquidationProtectionSubDataWithoutSubProxy;
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
+
665
787
  function parseCompoundV3LeverageManagementOnPrice(position: Position.Automated, parseData: ParseData): Position.Automated {
666
788
  const _position = cloneDeep(position);
667
789
 
@@ -779,7 +901,7 @@ function parseExchangeLimitOrder(position: Position.Automated, parseData: ParseD
779
901
  function parseLiquityLeverageManagement(position: Position.Automated, parseData: ParseData): Position.Automated {
780
902
  const _position = cloneDeep(position);
781
903
 
782
- const { subStruct, subId } = parseData.subscriptionEventData;
904
+ const { subStruct, subId, subHash } = parseData.subscriptionEventData;
783
905
  const { isEnabled } = parseData.strategiesSubsData;
784
906
 
785
907
  const triggerData = triggerService.liquityRatioTrigger.decode(subStruct.triggerData);
@@ -796,9 +918,10 @@ function parseLiquityLeverageManagement(position: Position.Automated, parseData:
796
918
  _position.specific = {
797
919
  triggerRepayRatio: triggerData.ratio,
798
920
  targetRepayRatio: subData.targetRatio,
799
- repayEnabled: true,
921
+ repayEnabled: isEnabled,
800
922
  subId1: Number(subId),
801
923
  mergeWithId: Strategies.Identifiers.Boost,
924
+ subHashRepay: subHash,
802
925
  };
803
926
  } else {
804
927
  _position.specific = {
@@ -807,6 +930,7 @@ function parseLiquityLeverageManagement(position: Position.Automated, parseData:
807
930
  boostEnabled: isEnabled,
808
931
  subId2: Number(subId),
809
932
  mergeId: Strategies.Identifiers.Boost,
933
+ subHashBoost: subHash,
810
934
  };
811
935
  }
812
936
 
@@ -861,7 +985,7 @@ function parseLiquityV2LeverageManagement(position: Position.Automated, parseDat
861
985
  function parseSparkLeverageManagement(position: Position.Automated, parseData: ParseData): Position.Automated {
862
986
  const _position = cloneDeep(position);
863
987
 
864
- const { subStruct, subId } = parseData.subscriptionEventData;
988
+ const { subStruct, subId, subHash } = parseData.subscriptionEventData;
865
989
  const { isEnabled } = parseData.strategiesSubsData;
866
990
 
867
991
  const triggerData = triggerService.sparkRatioTrigger.decode(subStruct.triggerData);
@@ -878,9 +1002,10 @@ function parseSparkLeverageManagement(position: Position.Automated, parseData: P
878
1002
  _position.specific = {
879
1003
  triggerRepayRatio: triggerData.ratio,
880
1004
  targetRepayRatio: subData.targetRatio,
881
- repayEnabled: true,
1005
+ repayEnabled: isEnabled,
882
1006
  subId1: Number(subId),
883
1007
  mergeWithId: Strategies.Identifiers.Boost,
1008
+ subHashRepay: subHash,
884
1009
  };
885
1010
  } else {
886
1011
  _position.specific = {
@@ -889,6 +1014,7 @@ function parseSparkLeverageManagement(position: Position.Automated, parseData: P
889
1014
  boostEnabled: isEnabled,
890
1015
  subId2: Number(subId),
891
1016
  mergeId: Strategies.Identifiers.Boost,
1017
+ subHashBoost: subHash,
892
1018
  };
893
1019
  }
894
1020
 
@@ -897,6 +1023,34 @@ function parseSparkLeverageManagement(position: Position.Automated, parseData: P
897
1023
  return _position;
898
1024
  }
899
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
+
900
1054
  function parseSparkLeverageManagementOnPrice(position: Position.Automated, parseData: ParseData): Position.Automated {
901
1055
  const _position = cloneDeep(position);
902
1056
  const { subStruct } = parseData.subscriptionEventData;
@@ -1097,6 +1251,34 @@ function parseMorphoBlueLeverageManagement(position: Position.Automated, parseDa
1097
1251
  return _position;
1098
1252
  }
1099
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
+
1100
1282
  function parseMorphoBlueLeverageManagementOnPrice(position: Position.Automated, parseData: ParseData): Position.Automated {
1101
1283
  const _position = cloneDeep(position);
1102
1284
 
@@ -1128,6 +1310,7 @@ function parseMorphoBlueLeverageManagementOnPrice(position: Position.Automated,
1128
1310
  debtAsset: subData.loanToken,
1129
1311
  price: triggerData.price,
1130
1312
  ratio: subData.targetRatio,
1313
+ ratioState: triggerData.priceState,
1131
1314
  };
1132
1315
 
1133
1316
  return _position;
@@ -1302,6 +1485,37 @@ function parseFluidT1LeverageManagement(position: Position.Automated, parseData:
1302
1485
  return _position;
1303
1486
  }
1304
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
+
1305
1519
  const parsingMethodsMapping: StrategiesToProtocolVersionMapping = {
1306
1520
  [ProtocolIdentifiers.StrategiesAutomation.MakerDAO]: {
1307
1521
  [Strategies.Identifiers.SavingsLiqProtection]: parseMakerSavingsLiqProtection,
@@ -1311,6 +1525,7 @@ const parsingMethodsMapping: StrategiesToProtocolVersionMapping = {
1311
1525
  [Strategies.Identifiers.TrailingStopToDebt]: parseMakerTrailingStop,
1312
1526
  [Strategies.Identifiers.Repay]: parseMakerLeverageManagement,
1313
1527
  [Strategies.Identifiers.Boost]: parseMakerLeverageManagement,
1528
+ [Strategies.Identifiers.LiquidationProtection]: parseMakerLiquidationProtection,
1314
1529
  },
1315
1530
  [ProtocolIdentifiers.StrategiesAutomation.Liquity]: {
1316
1531
  [Strategies.Identifiers.CloseOnPriceToColl]: parseLiquityCloseOnPrice,
@@ -1349,6 +1564,8 @@ const parsingMethodsMapping: StrategiesToProtocolVersionMapping = {
1349
1564
  [Strategies.Identifiers.EoaBoostOnPrice]: parseAaveV3LeverageManagementOnPrice,
1350
1565
  [Strategies.Identifiers.EoaCloseOnPrice]: parseAaveV3CloseOnPrice,
1351
1566
  [Strategies.Identifiers.CollateralSwitch]: parseAaveV3CollateralSwitch,
1567
+ [Strategies.Identifiers.LiquidationProtection]: parseAaveV3LiquidationProtection,
1568
+ [Strategies.Identifiers.EoaLiquidationProtection]: parseAaveV3LiquidationProtection,
1352
1569
  },
1353
1570
  [ProtocolIdentifiers.StrategiesAutomation.AaveV4]: {
1354
1571
  [Strategies.Identifiers.Repay]: parseAaveV4LeverageManagement,
@@ -1363,6 +1580,8 @@ const parsingMethodsMapping: StrategiesToProtocolVersionMapping = {
1363
1580
  [Strategies.Identifiers.EoaCloseOnPrice]: parseAaveV4CloseOnPrice,
1364
1581
  [Strategies.Identifiers.CollateralSwitch]: parseAaveV4CollateralSwitch,
1365
1582
  [Strategies.Identifiers.EoaCollateralSwitch]: parseAaveV4CollateralSwitch,
1583
+ [Strategies.Identifiers.LiquidationProtection]: parseAaveV4LiquidationProtection,
1584
+ [Strategies.Identifiers.EoaLiquidationProtection]: parseAaveV4LiquidationProtection,
1366
1585
  },
1367
1586
  [ProtocolIdentifiers.StrategiesAutomation.CompoundV2]: {
1368
1587
  [Strategies.Identifiers.Repay]: parseCompoundV2LeverageManagement,
@@ -1379,6 +1598,8 @@ const parsingMethodsMapping: StrategiesToProtocolVersionMapping = {
1379
1598
  [Strategies.Identifiers.EoaBoostOnPrice]: parseCompoundV3LeverageManagementOnPrice,
1380
1599
  [Strategies.Identifiers.CloseOnPrice]: parseCompoundV3CloseOnPrice,
1381
1600
  [Strategies.Identifiers.EoaCloseOnPrice]: parseCompoundV3CloseOnPrice,
1601
+ [Strategies.Identifiers.LiquidationProtection]: parseCompoundV3LiquidationProtection,
1602
+ [Strategies.Identifiers.EoaLiquidationProtection]: parseCompoundV3LiquidationProtection,
1382
1603
  },
1383
1604
  [ProtocolIdentifiers.StrategiesAutomation.ChickenBonds]: {
1384
1605
  [Strategies.Identifiers.Rebond]: parseChickenBondsRebond,
@@ -1398,6 +1619,7 @@ const parsingMethodsMapping: StrategiesToProtocolVersionMapping = {
1398
1619
  [Strategies.Identifiers.BoostOnPrice]: parseSparkLeverageManagementOnPrice,
1399
1620
  [Strategies.Identifiers.CloseOnPrice]: parseSparkCloseOnPrice,
1400
1621
  [Strategies.Identifiers.CollateralSwitch]: parseSparkCollateralSwitch,
1622
+ [Strategies.Identifiers.LiquidationProtection]: parseSparkLiquidationProtection,
1401
1623
  },
1402
1624
  [ProtocolIdentifiers.StrategiesAutomation.CrvUSD]: {
1403
1625
  [Strategies.Identifiers.Repay]: parseCrvUSDLeverageManagement,
@@ -1411,10 +1633,13 @@ const parsingMethodsMapping: StrategiesToProtocolVersionMapping = {
1411
1633
  [Strategies.Identifiers.EoaBoost]: parseMorphoBlueLeverageManagement,
1412
1634
  [Strategies.Identifiers.BoostOnPrice]: parseMorphoBlueLeverageManagementOnPrice,
1413
1635
  [Strategies.Identifiers.CloseOnPrice]: parseMorphoBlueCloseOnPrice,
1636
+ [Strategies.Identifiers.LiquidationProtection]: parseMorphoBlueLiquidationProtection,
1637
+ [Strategies.Identifiers.EoaLiquidationProtection]: parseMorphoBlueLiquidationProtection,
1414
1638
  },
1415
1639
  [ProtocolIdentifiers.StrategiesAutomation.FluidT1]: {
1416
1640
  [Strategies.Identifiers.Repay]: parseFluidT1LeverageManagement,
1417
1641
  [Strategies.Identifiers.Boost]: parseFluidT1LeverageManagement,
1642
+ [Strategies.Identifiers.LiquidationProtection]: parseFluidT1LiquidationProtection,
1418
1643
  },
1419
1644
  };
1420
1645