@defisaver/automation-sdk 3.3.17 → 3.3.18-spark-eoa-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 (38) hide show
  1. package/cjs/constants/index.js +170 -0
  2. package/cjs/index.d.ts +2 -2
  3. package/cjs/index.js +5 -2
  4. package/cjs/services/ethereumService.test.js +4 -7
  5. package/cjs/services/strategiesService.js +195 -15
  6. package/cjs/services/strategySubService.d.ts +22 -17
  7. package/cjs/services/strategySubService.js +92 -28
  8. package/cjs/services/strategySubService.test.js +297 -40
  9. package/cjs/services/subDataService.d.ts +108 -20
  10. package/cjs/services/subDataService.js +97 -79
  11. package/cjs/services/subDataService.test.js +479 -174
  12. package/cjs/types/enums.d.ts +44 -6
  13. package/cjs/types/enums.js +38 -0
  14. package/esm/constants/index.js +170 -0
  15. package/esm/index.d.ts +2 -2
  16. package/esm/index.js +5 -2
  17. package/esm/services/ethereumService.test.js +4 -7
  18. package/esm/services/strategiesService.js +195 -15
  19. package/esm/services/strategySubService.d.ts +22 -17
  20. package/esm/services/strategySubService.js +91 -27
  21. package/esm/services/strategySubService.test.js +298 -38
  22. package/esm/services/subDataService.d.ts +108 -20
  23. package/esm/services/subDataService.js +95 -77
  24. package/esm/services/subDataService.test.js +480 -172
  25. package/esm/types/enums.d.ts +44 -6
  26. package/esm/types/enums.js +38 -0
  27. package/package.json +1 -1
  28. package/src/constants/index.ts +172 -1
  29. package/src/index.ts +22 -6
  30. package/src/services/ethereumService.test.ts +5 -8
  31. package/src/services/strategiesService.ts +262 -16
  32. package/src/services/strategySubService.test.ts +384 -46
  33. package/src/services/strategySubService.ts +251 -40
  34. package/src/services/subDataService.test.ts +639 -231
  35. package/src/services/subDataService.ts +149 -106
  36. package/src/services/utils.test.ts +1 -1
  37. package/src/services/utils.ts +3 -1
  38. package/src/types/enums.ts +38 -2
@@ -8,7 +8,7 @@ import type {
8
8
  BundleInfoUnion, StrategyInfoUnion,
9
9
  } from '../types';
10
10
  import {
11
- ChainId, ProtocolIdentifiers, RatioState, Strategies,
11
+ ChainId, ProtocolIdentifiers, Strategies,
12
12
  } from '../types/enums';
13
13
 
14
14
  import {
@@ -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;
@@ -392,11 +448,17 @@ function parseAaveV3CollateralSwitch(position: Position.Automated, parseData: Pa
392
448
  function parseSparkCollateralSwitch(position: Position.Automated, parseData: ParseData): Position.Automated {
393
449
  const _position = cloneDeep(position);
394
450
  const { subStruct } = parseData.subscriptionEventData;
451
+ const isEOA = _position.strategy.strategyId.includes('eoa');
395
452
  const triggerData = triggerService.sparkQuotePriceTrigger.decode(subStruct.triggerData);
396
- const subData = subDataService.sparkCollateralSwitchSubData.decode(subStruct.subData);
453
+ const subData = isEOA
454
+ ? subDataService.sparkGenericFLCollateralSwitchSubData.decode(subStruct.subData)
455
+ : subDataService.sparkCollateralSwitchSubData.decode(subStruct.subData);
397
456
  _position.strategyData.decoded.triggerData = triggerData;
398
457
  _position.strategyData.decoded.subData = subData;
399
458
  _position.positionId = getPositionId(_position.chainId, _position.protocol.id, _position.owner, subData.marketAddr);
459
+ _position.strategy.strategyId = isEOA
460
+ ? Strategies.Identifiers.EoaCollateralSwitch
461
+ : Strategies.Identifiers.CollateralSwitch;
400
462
  return _position;
401
463
  }
402
464
 
@@ -437,6 +499,31 @@ function parseAaveV4LeverageManagement(position: Position.Automated, parseData:
437
499
  return _position;
438
500
  }
439
501
 
502
+ function parseAaveV4LiquidationProtection(position: Position.Automated, parseData: ParseData): Position.Automated {
503
+ const _position = cloneDeep(position);
504
+ const { subStruct, subId, subHash } = parseData.subscriptionEventData;
505
+ const { isEnabled } = parseData.strategiesSubsData;
506
+ const triggerData = triggerService.aaveV4RatioTrigger.decode(subStruct.triggerData);
507
+ const subData = subDataService.aaveV4LiquidationProtectionSubData.decode(subStruct.subData);
508
+ const isEOA = _position.strategy.strategyId.includes('eoa');
509
+
510
+ _position.strategyData.decoded.triggerData = triggerData;
511
+ _position.strategyData.decoded.subData = subData;
512
+ _position.positionId = getPositionId(_position.chainId, _position.protocol.id, _position.owner, triggerData.spoke);
513
+ _position.strategy.strategyId = isEOA ? Strategies.IdOverrides.EoaLiquidationProtection : Strategies.IdOverrides.LiquidationProtection;
514
+
515
+ _position.specific = {
516
+ triggerRepayRatio: triggerData.ratio,
517
+ targetRepayRatio: subData.targetRatio,
518
+ repayEnabled: isEnabled,
519
+ subId1: Number(subId),
520
+ subHashRepay: subHash,
521
+ };
522
+
523
+ return _position;
524
+ }
525
+
526
+
440
527
  function parseAaveV4LeverageManagementOnPrice(position: Position.Automated, parseData: ParseData): Position.Automated {
441
528
  const _position = cloneDeep(position);
442
529
  const { subStruct } = parseData.subscriptionEventData;
@@ -589,7 +676,7 @@ function parseCompoundV2LeverageManagement(position: Position.Automated, parseDa
589
676
  const { isEnabled } = parseData.strategiesSubsData;
590
677
 
591
678
  const triggerData = triggerService.compoundV2RatioTrigger.decode(subStruct.triggerData);
592
- const subData = subDataService.compoundV2LeverageManagementSubData.decode(subStruct.subData);
679
+ const subData = subDataService.legacyCompoundV2LeverageManagementSubData.decode(subStruct.subData);
593
680
 
594
681
  _position.strategyData.decoded.triggerData = triggerData;
595
682
  _position.strategyData.decoded.subData = subData;
@@ -631,7 +718,7 @@ function parseCompoundV3LeverageManagement(position: Position.Automated, parseDa
631
718
  const { subStruct, subId, subHash } = parseData.subscriptionEventData;
632
719
  const { isEnabled } = parseData.strategiesSubsData;
633
720
 
634
- const subDataDecoder = subDataService.compoundV3LeverageManagementSubDataWithoutSubProxy;
721
+ const subDataDecoder = subDataService.compoundV3LeverageManagementSubData;
635
722
 
636
723
  const triggerData = triggerService.compoundV3RatioTrigger.decode(subStruct.triggerData);
637
724
  const subData = subDataDecoder.decode(subStruct.subData);
@@ -670,6 +757,39 @@ function parseCompoundV3LeverageManagement(position: Position.Automated, parseDa
670
757
  return _position;
671
758
  }
672
759
 
760
+
761
+ function parseCompoundV3LiquidationProtection(position: Position.Automated, parseData: ParseData): Position.Automated {
762
+ const _position = cloneDeep(position);
763
+
764
+ const { subStruct, subId, subHash } = parseData.subscriptionEventData;
765
+ const { isEnabled } = parseData.strategiesSubsData;
766
+
767
+ const subDataDecoder = subDataService.compoundV3LiquidationProtectionSubData;
768
+
769
+ const triggerData = triggerService.compoundV3RatioTrigger.decode(subStruct.triggerData);
770
+ const subData = subDataDecoder.decode(subStruct.subData);
771
+
772
+ _position.strategyData.decoded.triggerData = triggerData;
773
+ _position.strategyData.decoded.subData = subData;
774
+
775
+ _position.positionId = getPositionId(_position.chainId, _position.protocol.id, triggerData.owner.toLowerCase(), triggerData.market);
776
+
777
+ const isEOA = _position.strategy.strategyId.includes('eoa');
778
+
779
+ _position.specific = {
780
+ triggerRepayRatio: triggerData.ratio,
781
+ targetRepayRatio: subData.targetRatio,
782
+ repayEnabled: isEnabled,
783
+ subId1: Number(subId),
784
+ subHashRepay: subHash,
785
+ };
786
+
787
+ _position.strategy.strategyId = isEOA ? Strategies.IdOverrides.EoaLiquidationProtection : Strategies.IdOverrides.LiquidationProtection;
788
+
789
+ return _position;
790
+ }
791
+
792
+
673
793
  function parseCompoundV3LeverageManagementOnPrice(position: Position.Automated, parseData: ParseData): Position.Automated {
674
794
  const _position = cloneDeep(position);
675
795
 
@@ -774,7 +894,7 @@ function parseExchangeLimitOrder(position: Position.Automated, parseData: ParseD
774
894
 
775
895
  const { subStruct } = parseData.subscriptionEventData;
776
896
 
777
- _position.strategyData.decoded.subData = subDataService.exchangeLimitOrderSubData.decode(subStruct.subData, chainId);
897
+ _position.strategyData.decoded.subData = subDataService.legacyExchangeLimitOrderSubData.decode(subStruct.subData, chainId);
778
898
  const fromTokenDecimals = getAssetInfoByAddress(_position.strategyData.decoded.subData.fromToken, chainId).decimals;
779
899
  const toTokenDecimals = getAssetInfoByAddress(_position.strategyData.decoded.subData.toToken, chainId).decimals;
780
900
  _position.strategyData.decoded.triggerData = triggerService.exchangeOffchainPriceTrigger.decode(subStruct.triggerData, fromTokenDecimals, toTokenDecimals);
@@ -791,7 +911,7 @@ function parseLiquityLeverageManagement(position: Position.Automated, parseData:
791
911
  const { isEnabled } = parseData.strategiesSubsData;
792
912
 
793
913
  const triggerData = triggerService.liquityRatioTrigger.decode(subStruct.triggerData);
794
- const subData = subDataService.liquityLeverageManagementSubData.decode(subStruct.subData);
914
+ const subData = subDataService.legacyLiquityLeverageManagementSubData.decode(subStruct.subData);
795
915
 
796
916
  _position.strategyData.decoded.triggerData = triggerData;
797
917
  _position.strategyData.decoded.subData = subData;
@@ -873,16 +993,19 @@ function parseSparkLeverageManagement(position: Position.Automated, parseData: P
873
993
 
874
994
  const { subStruct, subId, subHash } = parseData.subscriptionEventData;
875
995
  const { isEnabled } = parseData.strategiesSubsData;
996
+ const isEOA = _position.strategy.strategyId.includes('eoa');
876
997
 
877
998
  const triggerData = triggerService.sparkRatioTrigger.decode(subStruct.triggerData);
878
- const subData = subDataService.sparkLeverageManagementSubData.decode(subStruct.subData);
999
+ const subData = isEOA
1000
+ ? subDataService.sparkGenericLeverageManagementSubData.decode(subStruct.subData)
1001
+ : subDataService.legacySparkLeverageManagementSubData.decode(subStruct.subData);
879
1002
 
880
1003
  _position.strategyData.decoded.triggerData = triggerData;
881
1004
  _position.strategyData.decoded.subData = subData;
882
1005
 
883
1006
  _position.positionId = getPositionId(_position.chainId, _position.protocol.id, _position.owner, triggerData.market);
884
1007
 
885
- const isRepay = _position.strategy.strategyId === Strategies.Identifiers.Repay;
1008
+ const isRepay = [Strategies.Identifiers.Repay, Strategies.Identifiers.EoaRepay].includes(_position.strategy.strategyId as Strategies.Identifiers);
886
1009
 
887
1010
  if (isRepay) {
888
1011
  _position.specific = {
@@ -890,7 +1013,7 @@ function parseSparkLeverageManagement(position: Position.Automated, parseData: P
890
1013
  targetRepayRatio: subData.targetRatio,
891
1014
  repayEnabled: isEnabled,
892
1015
  subId1: Number(subId),
893
- mergeWithId: Strategies.Identifiers.Boost,
1016
+ mergeWithId: isEOA ? Strategies.Identifiers.EoaBoost : Strategies.Identifiers.Boost,
894
1017
  subHashRepay: subHash,
895
1018
  };
896
1019
  } else {
@@ -899,22 +1022,61 @@ function parseSparkLeverageManagement(position: Position.Automated, parseData: P
899
1022
  targetBoostRatio: subData.targetRatio,
900
1023
  boostEnabled: isEnabled,
901
1024
  subId2: Number(subId),
902
- mergeId: Strategies.Identifiers.Boost,
1025
+ mergeId: isEOA ? Strategies.Identifiers.EoaBoost : Strategies.Identifiers.Boost,
903
1026
  subHashBoost: subHash,
904
1027
  };
905
1028
  }
906
1029
 
907
- _position.strategy.strategyId = Strategies.IdOverrides.LeverageManagement;
1030
+ _position.strategy.strategyId = isEOA
1031
+ ? Strategies.IdOverrides.EoaLeverageManagement
1032
+ : Strategies.IdOverrides.LeverageManagement;
1033
+
1034
+ return _position;
1035
+ }
1036
+
1037
+ function parseSparkLiquidationProtection(position: Position.Automated, parseData: ParseData): Position.Automated {
1038
+ const _position = cloneDeep(position);
1039
+
1040
+ const { subStruct, subId, subHash } = parseData.subscriptionEventData;
1041
+ const { isEnabled } = parseData.strategiesSubsData;
1042
+ const isEOA = _position.strategy.strategyId.includes('eoa');
1043
+
1044
+ const triggerData = triggerService.sparkRatioTrigger.decode(subStruct.triggerData);
1045
+ const subData = isEOA
1046
+ ? subDataService.sparkGenericLiquidationProtectionSubData.decode(subStruct.subData)
1047
+ : subDataService.sparkLiquidationProtectionSubData.decode(subStruct.subData);
1048
+
1049
+ _position.strategyData.decoded.triggerData = triggerData;
1050
+ _position.strategyData.decoded.subData = subData;
1051
+
1052
+ _position.positionId = getPositionId(_position.chainId, _position.protocol.id, _position.owner, triggerData.market);
1053
+
1054
+ _position.specific = {
1055
+ triggerRepayRatio: triggerData.ratio,
1056
+ targetRepayRatio: subData.targetRatio,
1057
+ repayEnabled: isEnabled,
1058
+ subId1: Number(subId),
1059
+ subHashRepay: subHash,
1060
+ };
1061
+
1062
+ _position.strategy.strategyId = isEOA
1063
+ ? Strategies.IdOverrides.EoaLiquidationProtection
1064
+ : Strategies.IdOverrides.LiquidationProtection;
1065
+ _position.strategy.strategyId = Strategies.IdOverrides.LiquidationProtection;
908
1066
 
909
1067
  return _position;
910
1068
  }
911
1069
 
1070
+
912
1071
  function parseSparkLeverageManagementOnPrice(position: Position.Automated, parseData: ParseData): Position.Automated {
913
1072
  const _position = cloneDeep(position);
914
1073
  const { subStruct } = parseData.subscriptionEventData;
1074
+ const isEOA = _position.strategy.strategyId.includes('eoa');
915
1075
 
916
1076
  const triggerData = triggerService.sparkQuotePriceTrigger.decode(subStruct.triggerData);
917
- const subData = subDataService.sparkLeverageManagementOnPriceSubData.decode(subStruct.subData);
1077
+ const subData = isEOA
1078
+ ? subDataService.sparkLeverageManagementOnPriceGenericSubData.decode(subStruct.subData)
1079
+ : subDataService.sparkLeverageManagementOnPriceSubData.decode(subStruct.subData);
918
1080
 
919
1081
  _position.strategyData.decoded.triggerData = triggerData;
920
1082
  _position.strategyData.decoded.subData = subData;
@@ -935,6 +1097,10 @@ function parseSparkLeverageManagementOnPrice(position: Position.Automated, parse
935
1097
  ratioState: triggerData.ratioState,
936
1098
  };
937
1099
 
1100
+ _position.strategy.strategyId = isEOA
1101
+ ? Strategies.IdOverrides.EoaLeverageManagementOnPrice
1102
+ : Strategies.IdOverrides.LeverageManagementOnPrice;
1103
+
938
1104
  return _position;
939
1105
  }
940
1106
 
@@ -945,10 +1111,13 @@ function parseSparkCloseOnPrice(position: Position.Automated, parseData: ParseDa
945
1111
  const triggerData = triggerService.sparkQuotePriceRangeTrigger.decode(subStruct.triggerData);
946
1112
  const subData = subDataService.sparkCloseGenericSubData.decode(subStruct.subData);
947
1113
 
1114
+ const isEOA = _position.strategy.strategyId.includes('eoa');
1115
+
948
1116
  _position.strategyData.decoded.triggerData = triggerData;
949
1117
  _position.strategyData.decoded.subData = subData;
950
1118
 
951
1119
  _position.positionId = getPositionId(_position.chainId, _position.protocol.id, _position.owner, subData.marketAddr);
1120
+ _position.strategy.strategyId = isEOA ? Strategies.Identifiers.EoaCloseOnPrice : Strategies.Identifiers.CloseOnPrice;
952
1121
 
953
1122
  const { takeProfitType, stopLossType } = getStopLossAndTakeProfitTypeByCloseStrategyType(+subData.closeType);
954
1123
 
@@ -1108,6 +1277,34 @@ function parseMorphoBlueLeverageManagement(position: Position.Automated, parseDa
1108
1277
  return _position;
1109
1278
  }
1110
1279
 
1280
+
1281
+ function parseMorphoBlueLiquidationProtection(position: Position.Automated, parseData: ParseData): Position.Automated {
1282
+ const _position = cloneDeep(position);
1283
+
1284
+ const { subStruct, subId, subHash } = parseData.subscriptionEventData;
1285
+ const { isEnabled } = parseData.strategiesSubsData;
1286
+ const triggerData = triggerService.morphoBlueRatioTrigger.decode(subStruct.triggerData);
1287
+ const subData = subDataService.morphoBlueLiquidationProtectionSubData.decode(subStruct.subData);
1288
+
1289
+ _position.strategyData.decoded.triggerData = triggerData;
1290
+ _position.strategyData.decoded.subData = subData;
1291
+
1292
+ _position.positionId = getPositionId(_position.chainId, _position.protocol.id, triggerData.owner.toLowerCase(), triggerData.marketId);
1293
+
1294
+ _position.specific = {
1295
+ triggerRepayRatio: triggerData.ratio,
1296
+ targetRepayRatio: subData.targetRatio,
1297
+ repayEnabled: isEnabled,
1298
+ subId1: Number(subId),
1299
+ subHashRepay: subHash,
1300
+ };
1301
+
1302
+ const isEOA = _position.strategy.strategyId.includes('eoa');
1303
+ _position.strategy.strategyId = isEOA ? Strategies.IdOverrides.EoaLiquidationProtection : Strategies.IdOverrides.LiquidationProtection;
1304
+
1305
+ return _position;
1306
+ }
1307
+
1111
1308
  function parseMorphoBlueLeverageManagementOnPrice(position: Position.Automated, parseData: ParseData): Position.Automated {
1112
1309
  const _position = cloneDeep(position);
1113
1310
 
@@ -1322,6 +1519,37 @@ function parseFluidT1LeverageManagement(position: Position.Automated, parseData:
1322
1519
  return _position;
1323
1520
  }
1324
1521
 
1522
+
1523
+ function parseFluidT1LiquidationProtection(position: Position.Automated, parseData: ParseData): Position.Automated {
1524
+ const _position = cloneDeep(position);
1525
+
1526
+ const { subStruct, subId, subHash } = parseData.subscriptionEventData;
1527
+ const { isEnabled } = parseData.strategiesSubsData;
1528
+
1529
+ const triggerData = triggerService.fluidRatioTrigger.decode(subStruct.triggerData);
1530
+ const subData = subDataService.fluidLiquidationProtectionSubData.decode(subStruct.subData);
1531
+
1532
+ _position.strategyData.decoded.triggerData = triggerData;
1533
+ _position.strategyData.decoded.subData = subData;
1534
+
1535
+ _position.positionId = getPositionId(
1536
+ _position.chainId, _position.protocol.id, _position.owner, triggerData.nftId, subData.vault,
1537
+ );
1538
+
1539
+ _position.specific = {
1540
+ triggerRepayRatio: triggerData.ratio,
1541
+ targetRepayRatio: subData.targetRatio,
1542
+ repayEnabled: isEnabled,
1543
+ subId1: Number(subId),
1544
+ subHashRepay: subHash,
1545
+ };
1546
+
1547
+ _position.strategy.strategyId = Strategies.IdOverrides.LiquidationProtection;
1548
+
1549
+ return _position;
1550
+ }
1551
+
1552
+
1325
1553
  const parsingMethodsMapping: StrategiesToProtocolVersionMapping = {
1326
1554
  [ProtocolIdentifiers.StrategiesAutomation.MakerDAO]: {
1327
1555
  [Strategies.Identifiers.SavingsLiqProtection]: parseMakerSavingsLiqProtection,
@@ -1331,6 +1559,7 @@ const parsingMethodsMapping: StrategiesToProtocolVersionMapping = {
1331
1559
  [Strategies.Identifiers.TrailingStopToDebt]: parseMakerTrailingStop,
1332
1560
  [Strategies.Identifiers.Repay]: parseMakerLeverageManagement,
1333
1561
  [Strategies.Identifiers.Boost]: parseMakerLeverageManagement,
1562
+ [Strategies.Identifiers.LiquidationProtection]: parseMakerLiquidationProtection,
1334
1563
  },
1335
1564
  [ProtocolIdentifiers.StrategiesAutomation.Liquity]: {
1336
1565
  [Strategies.Identifiers.CloseOnPriceToColl]: parseLiquityCloseOnPrice,
@@ -1369,6 +1598,8 @@ const parsingMethodsMapping: StrategiesToProtocolVersionMapping = {
1369
1598
  [Strategies.Identifiers.EoaBoostOnPrice]: parseAaveV3LeverageManagementOnPrice,
1370
1599
  [Strategies.Identifiers.EoaCloseOnPrice]: parseAaveV3CloseOnPrice,
1371
1600
  [Strategies.Identifiers.CollateralSwitch]: parseAaveV3CollateralSwitch,
1601
+ [Strategies.Identifiers.LiquidationProtection]: parseAaveV3LiquidationProtection,
1602
+ [Strategies.Identifiers.EoaLiquidationProtection]: parseAaveV3LiquidationProtection,
1372
1603
  },
1373
1604
  [ProtocolIdentifiers.StrategiesAutomation.AaveV4]: {
1374
1605
  [Strategies.Identifiers.Repay]: parseAaveV4LeverageManagement,
@@ -1383,6 +1614,8 @@ const parsingMethodsMapping: StrategiesToProtocolVersionMapping = {
1383
1614
  [Strategies.Identifiers.EoaCloseOnPrice]: parseAaveV4CloseOnPrice,
1384
1615
  [Strategies.Identifiers.CollateralSwitch]: parseAaveV4CollateralSwitch,
1385
1616
  [Strategies.Identifiers.EoaCollateralSwitch]: parseAaveV4CollateralSwitch,
1617
+ [Strategies.Identifiers.LiquidationProtection]: parseAaveV4LiquidationProtection,
1618
+ [Strategies.Identifiers.EoaLiquidationProtection]: parseAaveV4LiquidationProtection,
1386
1619
  },
1387
1620
  [ProtocolIdentifiers.StrategiesAutomation.CompoundV2]: {
1388
1621
  [Strategies.Identifiers.Repay]: parseCompoundV2LeverageManagement,
@@ -1399,6 +1632,8 @@ const parsingMethodsMapping: StrategiesToProtocolVersionMapping = {
1399
1632
  [Strategies.Identifiers.EoaBoostOnPrice]: parseCompoundV3LeverageManagementOnPrice,
1400
1633
  [Strategies.Identifiers.CloseOnPrice]: parseCompoundV3CloseOnPrice,
1401
1634
  [Strategies.Identifiers.EoaCloseOnPrice]: parseCompoundV3CloseOnPrice,
1635
+ [Strategies.Identifiers.LiquidationProtection]: parseCompoundV3LiquidationProtection,
1636
+ [Strategies.Identifiers.EoaLiquidationProtection]: parseCompoundV3LiquidationProtection,
1402
1637
  },
1403
1638
  [ProtocolIdentifiers.StrategiesAutomation.ChickenBonds]: {
1404
1639
  [Strategies.Identifiers.Rebond]: parseChickenBondsRebond,
@@ -1417,7 +1652,15 @@ const parsingMethodsMapping: StrategiesToProtocolVersionMapping = {
1417
1652
  [Strategies.Identifiers.RepayOnPrice]: parseSparkLeverageManagementOnPrice,
1418
1653
  [Strategies.Identifiers.BoostOnPrice]: parseSparkLeverageManagementOnPrice,
1419
1654
  [Strategies.Identifiers.CloseOnPrice]: parseSparkCloseOnPrice,
1655
+ [Strategies.Identifiers.EoaRepay]: parseSparkLeverageManagement,
1656
+ [Strategies.Identifiers.EoaBoost]: parseSparkLeverageManagement,
1657
+ [Strategies.Identifiers.EoaRepayOnPrice]: parseSparkLeverageManagementOnPrice,
1658
+ [Strategies.Identifiers.EoaBoostOnPrice]: parseSparkLeverageManagementOnPrice,
1659
+ [Strategies.Identifiers.EoaCloseOnPrice]: parseSparkCloseOnPrice,
1420
1660
  [Strategies.Identifiers.CollateralSwitch]: parseSparkCollateralSwitch,
1661
+ [Strategies.Identifiers.EoaCollateralSwitch]: parseSparkCollateralSwitch,
1662
+ [Strategies.Identifiers.LiquidationProtection]: parseSparkLiquidationProtection,
1663
+ [Strategies.Identifiers.EoaLiquidationProtection]: parseSparkLiquidationProtection,
1421
1664
  },
1422
1665
  [ProtocolIdentifiers.StrategiesAutomation.CrvUSD]: {
1423
1666
  [Strategies.Identifiers.Repay]: parseCrvUSDLeverageManagement,
@@ -1434,11 +1677,14 @@ const parsingMethodsMapping: StrategiesToProtocolVersionMapping = {
1434
1677
  [Strategies.Identifiers.EoaBoostOnPrice]: parseMorphoBlueLeverageManagementOnPrice,
1435
1678
  [Strategies.Identifiers.EoaRepayOnPrice]: parseMorphoBlueLeverageManagementOnPrice,
1436
1679
  [Strategies.Identifiers.CloseOnPrice]: parseMorphoBlueCloseOnPrice,
1680
+ [Strategies.Identifiers.LiquidationProtection]: parseMorphoBlueLiquidationProtection,
1681
+ [Strategies.Identifiers.EoaLiquidationProtection]: parseMorphoBlueLiquidationProtection,
1437
1682
  [Strategies.Identifiers.EoaCloseOnPrice]: parseMorphoBlueCloseOnPrice,
1438
1683
  },
1439
1684
  [ProtocolIdentifiers.StrategiesAutomation.FluidT1]: {
1440
1685
  [Strategies.Identifiers.Repay]: parseFluidT1LeverageManagement,
1441
1686
  [Strategies.Identifiers.Boost]: parseFluidT1LeverageManagement,
1687
+ [Strategies.Identifiers.LiquidationProtection]: parseFluidT1LiquidationProtection,
1442
1688
  },
1443
1689
  };
1444
1690