@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
@@ -573,6 +573,62 @@ export const MAINNET_BUNDLES_INFO: MainnetBundleInfo = {
573
573
  strategyId: Strategies.Identifiers.EoaCloseOnPrice,
574
574
  protocol: PROTOCOLS.AaveV4,
575
575
  },
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
+ },
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,
610
+ protocol: PROTOCOLS.MorphoBlue,
611
+ },
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,
630
+ protocol: PROTOCOLS.MorphoBlue,
631
+ },
576
632
  [Bundles.MainnetIds.MORPHO_BLUE_REPAY_ON_PRICE]: {
577
633
  strategyOrBundleId: Bundles.MainnetIds.MORPHO_BLUE_REPAY_ON_PRICE,
578
634
  strategyId: Strategies.Identifiers.RepayOnPrice,
@@ -651,7 +707,16 @@ export const OPTIMISM_BUNDLES_INFO: OptimismBundleInfo = {
651
707
  strategyId: Strategies.Identifiers.EoaCloseOnPrice,
652
708
  protocol: PROTOCOLS.AaveV3,
653
709
  },
654
-
710
+ [Bundles.OptimismIds.AAVE_V3_SW_LIQUIDATION_PROTECTION]: {
711
+ strategyOrBundleId: Bundles.OptimismIds.AAVE_V3_SW_LIQUIDATION_PROTECTION,
712
+ strategyId: Strategies.Identifiers.LiquidationProtection,
713
+ protocol: PROTOCOLS.AaveV3,
714
+ },
715
+ [Bundles.OptimismIds.AAVE_V3_EOA_LIQUIDATION_PROTECTION]: {
716
+ strategyOrBundleId: Bundles.OptimismIds.AAVE_V3_EOA_LIQUIDATION_PROTECTION,
717
+ strategyId: Strategies.Identifiers.EoaLiquidationProtection,
718
+ protocol: PROTOCOLS.AaveV3,
719
+ },
655
720
  };
656
721
 
657
722
  export const BASE_BUNDLES_INFO: BaseBundleInfo = {
@@ -795,6 +860,41 @@ export const BASE_BUNDLES_INFO: BaseBundleInfo = {
795
860
  strategyId: Strategies.Identifiers.RepayOnPrice,
796
861
  protocol: PROTOCOLS.MorphoBlue,
797
862
  },
863
+ [Bundles.BaseIds.AAVE_V3_SW_LIQUIDATION_PROTECTION]: {
864
+ strategyOrBundleId: Bundles.BaseIds.AAVE_V3_SW_LIQUIDATION_PROTECTION,
865
+ strategyId: Strategies.Identifiers.LiquidationProtection,
866
+ protocol: PROTOCOLS.AaveV3,
867
+ },
868
+ [Bundles.BaseIds.COMP_V3_SW_LIQUIDATION_PROTECTION]: {
869
+ strategyOrBundleId: Bundles.BaseIds.COMP_V3_SW_LIQUIDATION_PROTECTION,
870
+ strategyId: Strategies.Identifiers.LiquidationProtection,
871
+ protocol: PROTOCOLS.CompoundV3,
872
+ },
873
+ [Bundles.BaseIds.COMP_V3_EOA_LIQUIDATION_PROTECTION]: {
874
+ strategyOrBundleId: Bundles.BaseIds.COMP_V3_EOA_LIQUIDATION_PROTECTION,
875
+ strategyId: Strategies.Identifiers.EoaLiquidationProtection,
876
+ protocol: PROTOCOLS.CompoundV3,
877
+ },
878
+ [Bundles.BaseIds.MORPHO_BLUE_SW_LIQUIDATION_PROTECTION]: {
879
+ strategyOrBundleId: Bundles.BaseIds.MORPHO_BLUE_SW_LIQUIDATION_PROTECTION,
880
+ strategyId: Strategies.Identifiers.LiquidationProtection,
881
+ protocol: PROTOCOLS.MorphoBlue,
882
+ },
883
+ [Bundles.BaseIds.MORPHO_BLUE_EOA_LIQUIDATION_PROTECTION]: {
884
+ strategyOrBundleId: Bundles.BaseIds.MORPHO_BLUE_EOA_LIQUIDATION_PROTECTION,
885
+ strategyId: Strategies.Identifiers.EoaLiquidationProtection,
886
+ protocol: PROTOCOLS.MorphoBlue,
887
+ },
888
+ [Bundles.BaseIds.FLUID_T1_SW_LIQUIDATION_PROTECTION]: {
889
+ strategyOrBundleId: Bundles.BaseIds.FLUID_T1_SW_LIQUIDATION_PROTECTION,
890
+ strategyId: Strategies.Identifiers.LiquidationProtection,
891
+ protocol: PROTOCOLS.FluidT1,
892
+ },
893
+ [Bundles.BaseIds.AAVE_V3_EOA_LIQUIDATION_PROTECTION]: {
894
+ strategyOrBundleId: Bundles.BaseIds.AAVE_V3_EOA_LIQUIDATION_PROTECTION,
895
+ strategyId: Strategies.Identifiers.EoaLiquidationProtection,
896
+ protocol: PROTOCOLS.AaveV3,
897
+ },
798
898
  [Bundles.BaseIds.MORPHO_BLUE_EOA_REPAY]: {
799
899
  strategyOrBundleId: Bundles.BaseIds.MORPHO_BLUE_EOA_REPAY,
800
900
  strategyId: Strategies.Identifiers.EoaRepay,
@@ -973,6 +1073,42 @@ export const ARBITRUM_BUNDLES_INFO: ArbitrumBundleInfo = {
973
1073
  strategyId: Strategies.Identifiers.RepayOnPrice,
974
1074
  protocol: PROTOCOLS.MorphoBlue,
975
1075
  },
1076
+ [Bundles.ArbitrumIds.AAVE_V3_SW_LIQUIDATION_PROTECTION]: {
1077
+ strategyOrBundleId: Bundles.ArbitrumIds.AAVE_V3_SW_LIQUIDATION_PROTECTION,
1078
+ strategyId: Strategies.Identifiers.LiquidationProtection,
1079
+ protocol: PROTOCOLS.AaveV3,
1080
+ },
1081
+ [Bundles.ArbitrumIds.COMP_V3_SW_LIQUIDATION_PROTECTION]: {
1082
+ strategyOrBundleId: Bundles.ArbitrumIds.COMP_V3_SW_LIQUIDATION_PROTECTION,
1083
+ strategyId: Strategies.Identifiers.LiquidationProtection,
1084
+ protocol: PROTOCOLS.CompoundV3,
1085
+ },
1086
+ [Bundles.ArbitrumIds.COMP_V3_EOA_LIQUIDATION_PROTECTION]: {
1087
+ strategyOrBundleId: Bundles.ArbitrumIds.COMP_V3_EOA_LIQUIDATION_PROTECTION,
1088
+ strategyId: Strategies.Identifiers.EoaLiquidationProtection,
1089
+ protocol: PROTOCOLS.CompoundV3,
1090
+ },
1091
+ [Bundles.ArbitrumIds.MORPHO_BLUE_SW_LIQUIDATION_PROTECTION]: {
1092
+ strategyOrBundleId:
1093
+ Bundles.ArbitrumIds.MORPHO_BLUE_SW_LIQUIDATION_PROTECTION,
1094
+ strategyId: Strategies.Identifiers.LiquidationProtection,
1095
+ protocol: PROTOCOLS.MorphoBlue,
1096
+ },
1097
+ [Bundles.ArbitrumIds.FLUID_T1_SW_LIQUIDATION_PROTECTION]: {
1098
+ strategyOrBundleId: Bundles.ArbitrumIds.FLUID_T1_SW_LIQUIDATION_PROTECTION,
1099
+ strategyId: Strategies.Identifiers.LiquidationProtection,
1100
+ protocol: PROTOCOLS.FluidT1,
1101
+ },
1102
+ [Bundles.ArbitrumIds.AAVE_V3_EOA_LIQUIDATION_PROTECTION]: {
1103
+ strategyOrBundleId: Bundles.ArbitrumIds.AAVE_V3_EOA_LIQUIDATION_PROTECTION,
1104
+ strategyId: Strategies.Identifiers.EoaLiquidationProtection,
1105
+ protocol: PROTOCOLS.AaveV3,
1106
+ },
1107
+ [Bundles.ArbitrumIds.MORPHO_BLUE_EOA_LIQUIDATION_PROTECTION]: {
1108
+ strategyOrBundleId: Bundles.ArbitrumIds.MORPHO_BLUE_EOA_LIQUIDATION_PROTECTION,
1109
+ strategyId: Strategies.Identifiers.EoaLiquidationProtection,
1110
+ protocol: PROTOCOLS.MorphoBlue,
1111
+ },
976
1112
  [Bundles.ArbitrumIds.MORPHO_BLUE_EOA_BOOST_ON_PRICE]: {
977
1113
  strategyOrBundleId: Bundles.ArbitrumIds.MORPHO_BLUE_EOA_BOOST_ON_PRICE,
978
1114
  strategyId: Strategies.Identifiers.EoaBoostOnPrice,
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;
@@ -1108,6 +1250,34 @@ function parseMorphoBlueLeverageManagement(position: Position.Automated, parseDa
1108
1250
  return _position;
1109
1251
  }
1110
1252
 
1253
+
1254
+ function parseMorphoBlueLiquidationProtection(position: Position.Automated, parseData: ParseData): Position.Automated {
1255
+ const _position = cloneDeep(position);
1256
+
1257
+ const { subStruct, subId, subHash } = parseData.subscriptionEventData;
1258
+ const { isEnabled } = parseData.strategiesSubsData;
1259
+ const triggerData = triggerService.morphoBlueRatioTrigger.decode(subStruct.triggerData);
1260
+ const subData = subDataService.morphoBlueLiquidationProtectionSubData.decode(subStruct.subData);
1261
+
1262
+ _position.strategyData.decoded.triggerData = triggerData;
1263
+ _position.strategyData.decoded.subData = subData;
1264
+
1265
+ _position.positionId = getPositionId(_position.chainId, _position.protocol.id, triggerData.owner.toLowerCase(), triggerData.marketId);
1266
+
1267
+ _position.specific = {
1268
+ triggerRepayRatio: triggerData.ratio,
1269
+ targetRepayRatio: subData.targetRatio,
1270
+ repayEnabled: isEnabled,
1271
+ subId1: Number(subId),
1272
+ subHashRepay: subHash,
1273
+ };
1274
+
1275
+ const isEOA = _position.strategy.strategyId.includes('eoa');
1276
+ _position.strategy.strategyId = isEOA ? Strategies.IdOverrides.EoaLiquidationProtection : Strategies.IdOverrides.LiquidationProtection;
1277
+
1278
+ return _position;
1279
+ }
1280
+
1111
1281
  function parseMorphoBlueLeverageManagementOnPrice(position: Position.Automated, parseData: ParseData): Position.Automated {
1112
1282
  const _position = cloneDeep(position);
1113
1283
 
@@ -1322,6 +1492,37 @@ function parseFluidT1LeverageManagement(position: Position.Automated, parseData:
1322
1492
  return _position;
1323
1493
  }
1324
1494
 
1495
+
1496
+ function parseFluidT1LiquidationProtection(position: Position.Automated, parseData: ParseData): Position.Automated {
1497
+ const _position = cloneDeep(position);
1498
+
1499
+ const { subStruct, subId, subHash } = parseData.subscriptionEventData;
1500
+ const { isEnabled } = parseData.strategiesSubsData;
1501
+
1502
+ const triggerData = triggerService.fluidRatioTrigger.decode(subStruct.triggerData);
1503
+ const subData = subDataService.fluidLiquidationProtectionSubData.decode(subStruct.subData);
1504
+
1505
+ _position.strategyData.decoded.triggerData = triggerData;
1506
+ _position.strategyData.decoded.subData = subData;
1507
+
1508
+ _position.positionId = getPositionId(
1509
+ _position.chainId, _position.protocol.id, _position.owner, triggerData.nftId, subData.vault,
1510
+ );
1511
+
1512
+ _position.specific = {
1513
+ triggerRepayRatio: triggerData.ratio,
1514
+ targetRepayRatio: subData.targetRatio,
1515
+ repayEnabled: isEnabled,
1516
+ subId1: Number(subId),
1517
+ subHashRepay: subHash,
1518
+ };
1519
+
1520
+ _position.strategy.strategyId = Strategies.IdOverrides.LiquidationProtection;
1521
+
1522
+ return _position;
1523
+ }
1524
+
1525
+
1325
1526
  const parsingMethodsMapping: StrategiesToProtocolVersionMapping = {
1326
1527
  [ProtocolIdentifiers.StrategiesAutomation.MakerDAO]: {
1327
1528
  [Strategies.Identifiers.SavingsLiqProtection]: parseMakerSavingsLiqProtection,
@@ -1331,6 +1532,7 @@ const parsingMethodsMapping: StrategiesToProtocolVersionMapping = {
1331
1532
  [Strategies.Identifiers.TrailingStopToDebt]: parseMakerTrailingStop,
1332
1533
  [Strategies.Identifiers.Repay]: parseMakerLeverageManagement,
1333
1534
  [Strategies.Identifiers.Boost]: parseMakerLeverageManagement,
1535
+ [Strategies.Identifiers.LiquidationProtection]: parseMakerLiquidationProtection,
1334
1536
  },
1335
1537
  [ProtocolIdentifiers.StrategiesAutomation.Liquity]: {
1336
1538
  [Strategies.Identifiers.CloseOnPriceToColl]: parseLiquityCloseOnPrice,
@@ -1369,6 +1571,8 @@ const parsingMethodsMapping: StrategiesToProtocolVersionMapping = {
1369
1571
  [Strategies.Identifiers.EoaBoostOnPrice]: parseAaveV3LeverageManagementOnPrice,
1370
1572
  [Strategies.Identifiers.EoaCloseOnPrice]: parseAaveV3CloseOnPrice,
1371
1573
  [Strategies.Identifiers.CollateralSwitch]: parseAaveV3CollateralSwitch,
1574
+ [Strategies.Identifiers.LiquidationProtection]: parseAaveV3LiquidationProtection,
1575
+ [Strategies.Identifiers.EoaLiquidationProtection]: parseAaveV3LiquidationProtection,
1372
1576
  },
1373
1577
  [ProtocolIdentifiers.StrategiesAutomation.AaveV4]: {
1374
1578
  [Strategies.Identifiers.Repay]: parseAaveV4LeverageManagement,
@@ -1383,6 +1587,8 @@ const parsingMethodsMapping: StrategiesToProtocolVersionMapping = {
1383
1587
  [Strategies.Identifiers.EoaCloseOnPrice]: parseAaveV4CloseOnPrice,
1384
1588
  [Strategies.Identifiers.CollateralSwitch]: parseAaveV4CollateralSwitch,
1385
1589
  [Strategies.Identifiers.EoaCollateralSwitch]: parseAaveV4CollateralSwitch,
1590
+ [Strategies.Identifiers.LiquidationProtection]: parseAaveV4LiquidationProtection,
1591
+ [Strategies.Identifiers.EoaLiquidationProtection]: parseAaveV4LiquidationProtection,
1386
1592
  },
1387
1593
  [ProtocolIdentifiers.StrategiesAutomation.CompoundV2]: {
1388
1594
  [Strategies.Identifiers.Repay]: parseCompoundV2LeverageManagement,
@@ -1399,6 +1605,8 @@ const parsingMethodsMapping: StrategiesToProtocolVersionMapping = {
1399
1605
  [Strategies.Identifiers.EoaBoostOnPrice]: parseCompoundV3LeverageManagementOnPrice,
1400
1606
  [Strategies.Identifiers.CloseOnPrice]: parseCompoundV3CloseOnPrice,
1401
1607
  [Strategies.Identifiers.EoaCloseOnPrice]: parseCompoundV3CloseOnPrice,
1608
+ [Strategies.Identifiers.LiquidationProtection]: parseCompoundV3LiquidationProtection,
1609
+ [Strategies.Identifiers.EoaLiquidationProtection]: parseCompoundV3LiquidationProtection,
1402
1610
  },
1403
1611
  [ProtocolIdentifiers.StrategiesAutomation.ChickenBonds]: {
1404
1612
  [Strategies.Identifiers.Rebond]: parseChickenBondsRebond,
@@ -1418,6 +1626,7 @@ const parsingMethodsMapping: StrategiesToProtocolVersionMapping = {
1418
1626
  [Strategies.Identifiers.BoostOnPrice]: parseSparkLeverageManagementOnPrice,
1419
1627
  [Strategies.Identifiers.CloseOnPrice]: parseSparkCloseOnPrice,
1420
1628
  [Strategies.Identifiers.CollateralSwitch]: parseSparkCollateralSwitch,
1629
+ [Strategies.Identifiers.LiquidationProtection]: parseSparkLiquidationProtection,
1421
1630
  },
1422
1631
  [ProtocolIdentifiers.StrategiesAutomation.CrvUSD]: {
1423
1632
  [Strategies.Identifiers.Repay]: parseCrvUSDLeverageManagement,
@@ -1434,11 +1643,14 @@ const parsingMethodsMapping: StrategiesToProtocolVersionMapping = {
1434
1643
  [Strategies.Identifiers.EoaBoostOnPrice]: parseMorphoBlueLeverageManagementOnPrice,
1435
1644
  [Strategies.Identifiers.EoaRepayOnPrice]: parseMorphoBlueLeverageManagementOnPrice,
1436
1645
  [Strategies.Identifiers.CloseOnPrice]: parseMorphoBlueCloseOnPrice,
1646
+ [Strategies.Identifiers.LiquidationProtection]: parseMorphoBlueLiquidationProtection,
1647
+ [Strategies.Identifiers.EoaLiquidationProtection]: parseMorphoBlueLiquidationProtection,
1437
1648
  [Strategies.Identifiers.EoaCloseOnPrice]: parseMorphoBlueCloseOnPrice,
1438
1649
  },
1439
1650
  [ProtocolIdentifiers.StrategiesAutomation.FluidT1]: {
1440
1651
  [Strategies.Identifiers.Repay]: parseFluidT1LeverageManagement,
1441
1652
  [Strategies.Identifiers.Boost]: parseFluidT1LeverageManagement,
1653
+ [Strategies.Identifiers.LiquidationProtection]: parseFluidT1LiquidationProtection,
1442
1654
  },
1443
1655
  };
1444
1656
 
@@ -1,5 +1,4 @@
1
1
  import { expect } from 'chai';
2
- import Dec from 'decimal.js';
3
2
  import { otherAddresses } from '@defisaver/sdk';
4
3
  import { getAssetInfo, MAXUINT } from '@defisaver/tokens';
5
4
  import * as web3Utils from 'web3-utils';
@@ -9,12 +8,10 @@ import type { EthereumAddress, StrategyOrBundleIds, SubData, TriggerData } from
9
8
 
10
9
  import '../configuration';
11
10
  import {
12
- chickenBondsEncode,
13
11
  liquityEncode,
14
12
  makerEncode,
15
13
  aaveV3Encode,
16
14
  compoundV3Encode,
17
- morphoAaveV2Encode,
18
15
  exchangeEncode,
19
16
  crvUSDEncode,
20
17
  morphoBlueEncode,
@@ -137,7 +134,7 @@ describe('Feature: strategySubService.ts', () => {
137
134
  });
138
135
  });
139
136
 
140
- describe('leverageManagementWithoutSubProxy()', () => {
137
+ describe('leverageManagement()', () => {
141
138
  const examples: Array<[
142
139
  [StrategyOrBundleIds, boolean, TriggerData, SubData],
143
140
  [
@@ -187,7 +184,7 @@ describe('Feature: strategySubService.ts', () => {
187
184
 
188
185
  examples.forEach(([expected, actual]) => {
189
186
  it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
190
- expect(makerEncode.leverageManagementWithoutSubProxy(...actual)).to.eql(expected);
187
+ expect(makerEncode.leverageManagement(...actual)).to.eql(expected);
191
188
  });
192
189
  });
193
190
  });
@@ -348,26 +345,6 @@ describe('Feature: strategySubService.ts', () => {
348
345
  });
349
346
  });
350
347
 
351
- describe('When testing strategySubService.chickenBondsEncode', () => {
352
- describe('rebond()', () => {
353
- const examples: Array<[
354
- SubData,
355
- [bondId: number],
356
- ]> = [
357
- [
358
- ['0x00000000000000000000000000000000000000000000000000000000000005e3'],
359
- [1507]
360
- ]
361
- ];
362
-
363
- examples.forEach(([expected, actual]) => {
364
- it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
365
- expect(chickenBondsEncode.rebond(...actual)).to.eql(expected);
366
- });
367
- });
368
- });
369
- });
370
-
371
348
  describe('When testing strategySubService.aaveV3Encode', () => {
372
349
  describe('closeToAsset()', () => {
373
350
  const examples: Array<[
@@ -1156,27 +1133,6 @@ describe('Feature: strategySubService.ts', () => {
1156
1133
  });
1157
1134
  });
1158
1135
 
1159
- describe('When testing strategySubService.morphoAaveV2Encode', () => {
1160
- describe('leverageManagement()', () => {
1161
- const examples: Array<[[string, string, string, string, boolean], [triggerRepayRatio: number, triggerBoostRatio: number, targetBoostRatio: number, targetRepayRatio: number, boostEnabled: boolean]]> = [
1162
- [
1163
- [new Dec(160).mul(1e16).toString(), new Dec(220).mul(1e16).toString(), new Dec(180).mul(1e16).toString(), new Dec(190).mul(1e16).toString(), true],
1164
- [160, 220, 180, 190, true]
1165
- ],
1166
- [
1167
- [new Dec(160).mul(1e16).toString(), new Dec(200).mul(1e16).toString(), new Dec(180).mul(1e16).toString(), new Dec(190).mul(1e16).toString(), false],
1168
- [160, 200, 180, 190, false]
1169
- ],
1170
- ];
1171
-
1172
- examples.forEach(([expected, actual]) => {
1173
- it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
1174
- expect(morphoAaveV2Encode.leverageManagement(...actual)).to.eql(expected);
1175
- });
1176
- });
1177
- });
1178
- });
1179
-
1180
1136
  describe('When testing strategySubService.exchangeEncode', () => {
1181
1137
  describe('dca()', () => {
1182
1138
  const examples: Array<[