@defisaver/automation-sdk 3.2.0 → 3.2.2

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/.env +4 -5
  2. package/cjs/automation/private/StrategiesAutomation.js +5 -6
  3. package/cjs/constants/index.js +70 -0
  4. package/cjs/services/strategiesService.js +174 -0
  5. package/cjs/services/strategySubService.d.ts +11 -1
  6. package/cjs/services/strategySubService.js +42 -1
  7. package/cjs/services/subDataService.d.ts +63 -1
  8. package/cjs/services/subDataService.js +195 -1
  9. package/cjs/services/triggerService.d.ts +43 -0
  10. package/cjs/services/triggerService.js +81 -1
  11. package/cjs/services/utils.d.ts +6 -1
  12. package/cjs/services/utils.js +52 -1
  13. package/cjs/types/contracts/generated/SubStorage.d.ts +4 -0
  14. package/cjs/types/enums.d.ts +45 -5
  15. package/cjs/types/enums.js +45 -1
  16. package/cjs/types/index.d.ts +26 -2
  17. package/esm/automation/private/StrategiesAutomation.js +5 -6
  18. package/esm/constants/index.js +70 -0
  19. package/esm/services/strategiesService.js +172 -1
  20. package/esm/services/strategySubService.d.ts +11 -1
  21. package/esm/services/strategySubService.js +43 -2
  22. package/esm/services/subDataService.d.ts +63 -1
  23. package/esm/services/subDataService.js +195 -1
  24. package/esm/services/triggerService.d.ts +43 -0
  25. package/esm/services/triggerService.js +80 -0
  26. package/esm/services/utils.d.ts +6 -1
  27. package/esm/services/utils.js +50 -1
  28. package/esm/types/contracts/generated/SubStorage.d.ts +4 -0
  29. package/esm/types/enums.d.ts +45 -5
  30. package/esm/types/enums.js +44 -0
  31. package/esm/types/index.d.ts +26 -2
  32. package/package.json +3 -5
  33. package/src/automation/private/StrategiesAutomation.ts +5 -5
  34. package/src/constants/index.ts +70 -0
  35. package/src/services/strategiesService.ts +224 -1
  36. package/src/services/strategySubService.ts +111 -1
  37. package/src/services/subDataService.ts +271 -2
  38. package/src/services/triggerService.ts +125 -0
  39. package/src/services/utils.ts +60 -1
  40. package/src/types/enums.ts +44 -0
  41. package/src/types/index.ts +34 -1
package/.env CHANGED
@@ -1,5 +1,4 @@
1
- # Used for testing
2
- RPC_1=https://eth-mainnet.g.alchemy.com/v2/4jm0fn2xvapd3pDpmdE8Y1rZKEp71U0Y
3
- RPC_10=https://opt-mainnet.g.alchemy.com/v2/4jm0fn2xvapd3pDpmdE8Y1rZKEp71U0Y
4
- RPC_42161=https://arb-mainnet.g.alchemy.com/v2/4jm0fn2xvapd3pDpmdE8Y1rZKEp71U0Y
5
- RPC_8453=https://base-mainnet.g.alchemy.com/v2/4jm0fn2xvapd3pDpmdE8Y1rZKEp71U0Y
1
+ RPC_1 = https://eth-mainnet.alchemyapi.io/v2/Pwh-hdbsP7Bf0CP_UMw4_Pw-NfHhSpIA
2
+ RPC_10 = https://base-mainnet.g.alchemy.com/v2/TERsAaPNcA7sgCVHHAMBvd95UtT4wCEf
3
+ RPC_8453 = https://arb-mainnet.alchemyapi.io/v2/Pwh-hdbsP7Bf0CP_UMw4_Pw-NfHhSpIA
4
+ RPC_42161 = https://opt-mainnet.g.alchemy.com/v2/Pwh-hdbsP7Bf0CP_UMw4_Pw-NfHhSpIA
@@ -126,7 +126,6 @@ class StrategiesAutomation extends Automation_1.default {
126
126
  }
127
127
  });
128
128
  if (mergeExtension.length > 0) {
129
- console.error('Not all merge-able extensions were used', mergeExtension);
130
129
  subscriptions = [...subscriptions, ...mergeExtension.map((s) => (Object.assign(Object.assign({}, s), { subIds: [s.subId] })))];
131
130
  }
132
131
  return subscriptions;
@@ -150,10 +149,10 @@ class StrategiesAutomation extends Automation_1.default {
150
149
  const replaceSubWithUpdate = (index) => __awaiter(this, void 0, void 0, function* () {
151
150
  var _a;
152
151
  const sub = strategiesSubs[index];
153
- let latestUpdate = subscriptionEvents[index].returnValues;
152
+ let latestUpdate = Object.assign({}, subscriptionEvents[index].returnValues);
154
153
  if (latestUpdate.subHash !== (sub === null || sub === void 0 ? void 0 : sub.strategySubHash)) {
155
154
  const updates = yield this.getUpdateDataEventsFromSubStorage(Object.assign(Object.assign({}, (0, utils_1.addToObjectIf)(!!_options, _options)), { filter: { subId: latestUpdate.subId } }));
156
- latestUpdate = Object.assign(Object.assign({}, latestUpdate), (_a = updates === null || updates === void 0 ? void 0 : updates[updates.length - 1]) === null || _a === void 0 ? void 0 : _a.returnValues);
155
+ latestUpdate = Object.assign(Object.assign(Object.assign({}, latestUpdate), (_a = updates === null || updates === void 0 ? void 0 : updates[updates.length - 1]) === null || _a === void 0 ? void 0 : _a.returnValues), { 2: latestUpdate[2] });
157
156
  }
158
157
  subscriptions.push(this.getParsedSubscriptions({
159
158
  chainId: this.chainId,
@@ -162,12 +161,12 @@ class StrategiesAutomation extends Automation_1.default {
162
161
  strategiesSubsData: sub,
163
162
  }));
164
163
  });
165
- const generatePromises = function* () {
164
+ // eslint-disable-next-line func-names
165
+ const pool = new es6_promise_pool_1.default(function* () {
166
166
  for (let index = 0; index < strategiesSubs.length; index++) {
167
167
  yield replaceSubWithUpdate(index);
168
168
  }
169
- };
170
- const pool = new es6_promise_pool_1.default(generatePromises, 50);
169
+ }, 50);
171
170
  yield pool.start();
172
171
  if (options === null || options === void 0 ? void 0 : options.mergeSubs) {
173
172
  subscriptions = this.mergeSubs(subscriptions);
@@ -96,6 +96,11 @@ exports.MAINNET_STRATEGIES_INFO = {
96
96
  strategyId: enums_1.Strategies.Identifiers.Payback,
97
97
  protocol: exports.PROTOCOLS.CrvUSD,
98
98
  },
99
+ [enums_1.Strategies.MainnetIds.LIQUITY_V2_PAYBACK]: {
100
+ strategyOrBundleId: enums_1.Strategies.MainnetIds.LIQUITY_V2_PAYBACK,
101
+ strategyId: enums_1.Strategies.Identifiers.Payback,
102
+ protocol: exports.PROTOCOLS.LiquityV2,
103
+ },
99
104
  };
100
105
  exports.OPTIMISM_STRATEGIES_INFO = {
101
106
  [enums_1.Strategies.OptimismIds.EXCHANGE_DCA]: {
@@ -353,6 +358,46 @@ exports.MAINNET_BUNDLES_INFO = {
353
358
  strategyId: enums_1.Strategies.Identifiers.RepayOnPrice,
354
359
  protocol: exports.PROTOCOLS.AaveV3,
355
360
  },
361
+ [enums_1.Bundles.MainnetIds.LIQUITY_V2_REPAY]: {
362
+ strategyOrBundleId: enums_1.Bundles.MainnetIds.LIQUITY_V2_REPAY,
363
+ strategyId: enums_1.Strategies.Identifiers.Repay,
364
+ protocol: exports.PROTOCOLS.LiquityV2,
365
+ },
366
+ [enums_1.Bundles.MainnetIds.LIQUITY_V2_BOOST]: {
367
+ strategyOrBundleId: enums_1.Bundles.MainnetIds.LIQUITY_V2_BOOST,
368
+ strategyId: enums_1.Strategies.Identifiers.Boost,
369
+ protocol: exports.PROTOCOLS.LiquityV2,
370
+ },
371
+ [enums_1.Bundles.MainnetIds.LIQUITY_V2_CLOSE]: {
372
+ strategyOrBundleId: enums_1.Bundles.MainnetIds.LIQUITY_V2_CLOSE,
373
+ strategyId: enums_1.Strategies.Identifiers.CloseOnPrice,
374
+ protocol: exports.PROTOCOLS.LiquityV2,
375
+ },
376
+ [enums_1.Bundles.MainnetIds.LIQUITY_V2_REPAY_ON_PRICE]: {
377
+ strategyOrBundleId: enums_1.Bundles.MainnetIds.LIQUITY_V2_REPAY_ON_PRICE,
378
+ strategyId: enums_1.Strategies.Identifiers.RepayOnPrice,
379
+ protocol: exports.PROTOCOLS.LiquityV2,
380
+ },
381
+ [enums_1.Bundles.MainnetIds.LIQUITY_V2_BOOST_ON_PRICE]: {
382
+ strategyOrBundleId: enums_1.Bundles.MainnetIds.LIQUITY_V2_BOOST_ON_PRICE,
383
+ strategyId: enums_1.Strategies.Identifiers.BoostOnPrice,
384
+ protocol: exports.PROTOCOLS.LiquityV2,
385
+ },
386
+ [enums_1.Bundles.MainnetIds.MORPHO_BLUE_BOOST_ON_PRICE]: {
387
+ strategyOrBundleId: enums_1.Bundles.MainnetIds.MORPHO_BLUE_BOOST_ON_PRICE,
388
+ strategyId: enums_1.Strategies.Identifiers.BoostOnPrice,
389
+ protocol: exports.PROTOCOLS.MorphoBlue,
390
+ },
391
+ [enums_1.Bundles.MainnetIds.FLUID_T1_REPAY]: {
392
+ strategyOrBundleId: enums_1.Bundles.MainnetIds.FLUID_T1_REPAY,
393
+ strategyId: enums_1.Strategies.Identifiers.Repay,
394
+ protocol: exports.PROTOCOLS.FluidT1,
395
+ },
396
+ [enums_1.Bundles.MainnetIds.FLUID_T1_BOOST]: {
397
+ strategyOrBundleId: enums_1.Bundles.MainnetIds.FLUID_T1_BOOST,
398
+ strategyId: enums_1.Strategies.Identifiers.Boost,
399
+ protocol: exports.PROTOCOLS.FluidT1,
400
+ },
356
401
  };
357
402
  exports.OPTIMISM_BUNDLES_INFO = {
358
403
  [enums_1.Bundles.OptimismIds.AAVE_V3_REPAY]: {
@@ -437,6 +482,21 @@ exports.BASE_BUNDLES_INFO = {
437
482
  strategyId: enums_1.Strategies.Identifiers.RepayOnPrice,
438
483
  protocol: exports.PROTOCOLS.AaveV3,
439
484
  },
485
+ [enums_1.Bundles.BaseIds.MORPHO_BLUE_BOOST_ON_PRICE]: {
486
+ strategyOrBundleId: enums_1.Bundles.BaseIds.MORPHO_BLUE_BOOST_ON_PRICE,
487
+ strategyId: enums_1.Strategies.Identifiers.BoostOnPrice,
488
+ protocol: exports.PROTOCOLS.MorphoBlue,
489
+ },
490
+ [enums_1.Bundles.BaseIds.FLUID_T1_REPAY]: {
491
+ strategyOrBundleId: enums_1.Bundles.BaseIds.FLUID_T1_REPAY,
492
+ strategyId: enums_1.Strategies.Identifiers.Repay,
493
+ protocol: exports.PROTOCOLS.FluidT1,
494
+ },
495
+ [enums_1.Bundles.BaseIds.FLUID_T1_BOOST]: {
496
+ strategyOrBundleId: enums_1.Bundles.BaseIds.FLUID_T1_BOOST,
497
+ strategyId: enums_1.Strategies.Identifiers.Boost,
498
+ protocol: exports.PROTOCOLS.FluidT1,
499
+ },
440
500
  };
441
501
  exports.ARBITRUM_BUNDLES_INFO = {
442
502
  [enums_1.Bundles.ArbitrumIds.AAVE_V3_REPAY]: {
@@ -479,6 +539,16 @@ exports.ARBITRUM_BUNDLES_INFO = {
479
539
  strategyId: enums_1.Strategies.Identifiers.RepayOnPrice,
480
540
  protocol: exports.PROTOCOLS.AaveV3,
481
541
  },
542
+ [enums_1.Bundles.ArbitrumIds.FLUID_T1_REPAY]: {
543
+ strategyOrBundleId: enums_1.Bundles.ArbitrumIds.FLUID_T1_REPAY,
544
+ strategyId: enums_1.Strategies.Identifiers.Repay,
545
+ protocol: exports.PROTOCOLS.FluidT1,
546
+ },
547
+ [enums_1.Bundles.ArbitrumIds.FLUID_T1_BOOST]: {
548
+ strategyOrBundleId: enums_1.Bundles.ArbitrumIds.FLUID_T1_BOOST,
549
+ strategyId: enums_1.Strategies.Identifiers.Boost,
550
+ protocol: exports.PROTOCOLS.FluidT1,
551
+ },
482
552
  };
483
553
  exports.BUNDLES_INFO = {
484
554
  [enums_1.ChainId.Ethereum]: exports.MAINNET_BUNDLES_INFO,
@@ -22,15 +22,20 @@ var __importStar = (this && this.__importStar) || function (mod) {
22
22
  __setModuleDefault(result, mod);
23
23
  return result;
24
24
  };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
25
28
  Object.defineProperty(exports, "__esModule", { value: true });
26
29
  exports.parseStrategiesAutomatedPosition = void 0;
27
30
  const tokens_1 = require("@defisaver/tokens");
28
31
  const lodash_1 = require("lodash");
32
+ const web3_1 = __importDefault(require("web3"));
29
33
  const constants_1 = require("../constants");
30
34
  const enums_1 = require("../types/enums");
31
35
  const utils_1 = require("./utils");
32
36
  const subDataService = __importStar(require("./subDataService"));
33
37
  const triggerService = __importStar(require("./triggerService"));
38
+ const web3 = new web3_1.default();
34
39
  const SPARK_MARKET_ADDRESSES = {
35
40
  [enums_1.ChainId.Ethereum]: '0x02C3eA4e34C0cBd694D2adFa2c690EECbC1793eE',
36
41
  };
@@ -429,6 +434,39 @@ function parseLiquityLeverageManagement(position, parseData) {
429
434
  _position.strategy.strategyId = enums_1.Strategies.IdOverrides.LeverageManagement;
430
435
  return _position;
431
436
  }
437
+ function parseLiquityV2LeverageManagement(position, parseData) {
438
+ const _position = (0, lodash_1.cloneDeep)(position);
439
+ const { subStruct, subId, subHash } = parseData.subscriptionEventData;
440
+ const { isEnabled } = parseData.strategiesSubsData;
441
+ const triggerData = triggerService.liquityV2RatioTrigger.decode(subStruct.triggerData);
442
+ const subData = subDataService.liquityV2LeverageManagementSubData.decode(subStruct.subData);
443
+ _position.strategyData.decoded.triggerData = triggerData;
444
+ _position.strategyData.decoded.subData = subData;
445
+ _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner, triggerData.troveId, triggerData.market);
446
+ const isRepay = _position.strategy.strategyId === enums_1.Strategies.Identifiers.Repay;
447
+ if (isRepay) {
448
+ _position.specific = {
449
+ triggerRepayRatio: triggerData.ratio,
450
+ targetRepayRatio: subData.targetRatio,
451
+ repayEnabled: isEnabled,
452
+ subId1: Number(subId),
453
+ subHashRepay: subHash,
454
+ mergeWithId: enums_1.Strategies.Identifiers.Boost,
455
+ };
456
+ }
457
+ else {
458
+ _position.specific = {
459
+ triggerBoostRatio: triggerData.ratio,
460
+ targetBoostRatio: subData.targetRatio,
461
+ boostEnabled: isEnabled,
462
+ subId2: Number(subId),
463
+ subHashBoost: subHash,
464
+ mergeId: enums_1.Strategies.Identifiers.Boost,
465
+ };
466
+ }
467
+ _position.strategy.strategyId = enums_1.Strategies.IdOverrides.LeverageManagement;
468
+ return _position;
469
+ }
432
470
  function parseSparkLeverageManagement(position, parseData) {
433
471
  const _position = (0, lodash_1.cloneDeep)(position);
434
472
  const { subStruct, subId } = parseData.subscriptionEventData;
@@ -590,6 +628,32 @@ function parseMorphoBlueLeverageManagement(position, parseData) {
590
628
  _position.strategy.strategyId = isEOA ? enums_1.Strategies.IdOverrides.EoaLeverageManagement : enums_1.Strategies.IdOverrides.LeverageManagement;
591
629
  return _position;
592
630
  }
631
+ function parseMorphoBlueLeverageManagementOnPrice(position, parseData) {
632
+ const _position = (0, lodash_1.cloneDeep)(position);
633
+ const { subStruct } = parseData.subscriptionEventData;
634
+ const triggerData = triggerService.morphoBluePriceTrigger.decode(subStruct.triggerData);
635
+ const subData = subDataService.morphoBlueLeverageManagementOnPriceSubData.decode(subStruct.subData);
636
+ _position.strategyData.decoded.triggerData = triggerData;
637
+ _position.strategyData.decoded.subData = subData;
638
+ _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner, Math.random());
639
+ const marketIdEncodedData = web3.eth.abi.encodeParameters(['address', 'address', 'address', 'address', 'uint256'], [
640
+ subData.loanToken,
641
+ subData.collToken,
642
+ subData.oracle,
643
+ subData.irm,
644
+ subData.lltv,
645
+ ]);
646
+ const marketId = web3.utils.keccak256(marketIdEncodedData);
647
+ _position.specific = {
648
+ subHash: _position.subHash,
649
+ marketId,
650
+ collAsset: subData.collToken,
651
+ debtAsset: subData.loanToken,
652
+ price: triggerData.price,
653
+ ratio: subData.targetRatio,
654
+ };
655
+ return _position;
656
+ }
593
657
  function parseAaveV3LeverageManagementOnPrice(position, parseData) {
594
658
  const _position = (0, lodash_1.cloneDeep)(position);
595
659
  const { subStruct } = parseData.subscriptionEventData;
@@ -611,6 +675,103 @@ function parseAaveV3LeverageManagementOnPrice(position, parseData) {
611
675
  };
612
676
  return _position;
613
677
  }
678
+ function parseLiquityV2CloseOnPrice(position, parseData) {
679
+ const _position = (0, lodash_1.cloneDeep)(position);
680
+ const { subStruct } = parseData.subscriptionEventData;
681
+ const triggerData = triggerService.closePriceTrigger.decode(subStruct.triggerData);
682
+ const subData = subDataService.liquityV2CloseSubData.decode(subStruct.subData);
683
+ _position.strategyData.decoded.triggerData = triggerData;
684
+ _position.strategyData.decoded.subData = subData;
685
+ _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner, subData.troveId, subData.market);
686
+ const { takeProfitType, stopLossType } = (0, utils_1.getStopLossAndTakeProfitTypeByCloseStrategyType)(+subData.closeType);
687
+ // User can have:
688
+ // - Only TakeProfit
689
+ // - Only StopLoss
690
+ // - Both
691
+ // TODO: see on frontend what specific data we need here because stop-loss and take-profit is one bundle now
692
+ _position.strategy.strategyId = enums_1.Strategies.Identifiers.CloseOnPrice;
693
+ _position.specific = {
694
+ market: subData.market,
695
+ troveId: subData.troveId,
696
+ stopLossPrice: triggerData.lowerPrice,
697
+ takeProfitPrice: triggerData.upperPrice,
698
+ closeToAssetAddr: triggerData.tokenAddr,
699
+ takeProfitType,
700
+ stopLossType,
701
+ };
702
+ return _position;
703
+ }
704
+ function parseLiquityV2LeverageManagementOnPrice(position, parseData) {
705
+ const _position = (0, lodash_1.cloneDeep)(position);
706
+ const { subStruct } = parseData.subscriptionEventData;
707
+ const triggerData = triggerService.liquityV2QuotePriceTrigger.decode(subStruct.triggerData);
708
+ const subData = subDataService.liquityV2LeverageManagementOnPriceSubData.decode(subStruct.subData);
709
+ _position.strategyData.decoded.triggerData = triggerData;
710
+ _position.strategyData.decoded.subData = subData;
711
+ _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner, Math.random());
712
+ _position.specific = {
713
+ subHash: _position.subHash,
714
+ market: subData.market,
715
+ troveId: subData.troveId,
716
+ collAsset: subData.collToken,
717
+ debtAsset: subData.boldToken,
718
+ price: triggerData.price,
719
+ ratio: subData.targetRatio,
720
+ ratioState: triggerData.ratioState,
721
+ };
722
+ return _position;
723
+ }
724
+ function parseLiquityV2Payback(position, parseData) {
725
+ const _position = (0, lodash_1.cloneDeep)(position);
726
+ const { subStruct } = parseData.subscriptionEventData;
727
+ const triggerData = triggerService.liquityV2RatioTrigger.decode(subStruct.triggerData);
728
+ const subData = subDataService.liquityV2PaybackSubData.decode(subStruct.subData);
729
+ _position.strategyData.decoded.triggerData = triggerData;
730
+ _position.strategyData.decoded.subData = subData;
731
+ _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner, triggerData.troveId, triggerData.market);
732
+ _position.strategy.strategyId = enums_1.Strategies.Identifiers.Payback;
733
+ _position.specific = {
734
+ subHash: _position.subHash,
735
+ market: subData.market,
736
+ troveId: subData.troveId,
737
+ targetRatio: subData.targetRatio,
738
+ triggerRatio: triggerData.ratio,
739
+ };
740
+ return _position;
741
+ }
742
+ function parseFluidT1LeverageManagement(position, parseData) {
743
+ const _position = (0, lodash_1.cloneDeep)(position);
744
+ const { subStruct, subId, subHash } = parseData.subscriptionEventData;
745
+ const { isEnabled } = parseData.strategiesSubsData;
746
+ const triggerData = triggerService.fluidRatioTrigger.decode(subStruct.triggerData);
747
+ const subData = subDataService.fluidLeverageManagementSubData.decode(subStruct.subData);
748
+ _position.strategyData.decoded.triggerData = triggerData;
749
+ _position.strategyData.decoded.subData = subData;
750
+ _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner, triggerData.nftId, subData.vault);
751
+ const isRepay = _position.strategy.strategyId === enums_1.Strategies.Identifiers.Repay;
752
+ if (isRepay) {
753
+ _position.specific = {
754
+ triggerRepayRatio: triggerData.ratio,
755
+ targetRepayRatio: subData.targetRatio,
756
+ repayEnabled: isEnabled,
757
+ subId1: Number(subId),
758
+ subHashRepay: subHash,
759
+ mergeWithId: enums_1.Strategies.Identifiers.Boost,
760
+ };
761
+ }
762
+ else {
763
+ _position.specific = {
764
+ triggerBoostRatio: triggerData.ratio,
765
+ targetBoostRatio: subData.targetRatio,
766
+ boostEnabled: isEnabled,
767
+ subId2: Number(subId),
768
+ subHashBoost: subHash,
769
+ mergeId: enums_1.Strategies.Identifiers.Boost,
770
+ };
771
+ }
772
+ _position.strategy.strategyId = enums_1.Strategies.IdOverrides.LeverageManagement;
773
+ return _position;
774
+ }
614
775
  const parsingMethodsMapping = {
615
776
  [enums_1.ProtocolIdentifiers.StrategiesAutomation.MakerDAO]: {
616
777
  [enums_1.Strategies.Identifiers.SavingsLiqProtection]: parseMakerSavingsLiqProtection,
@@ -631,6 +792,14 @@ const parsingMethodsMapping = {
631
792
  [enums_1.Strategies.Identifiers.SavingsDsrSupply]: parseLiquitySavingsLiqProtection,
632
793
  [enums_1.Strategies.Identifiers.DebtInFrontRepay]: parseLiquityDebtInFrontRepay,
633
794
  },
795
+ [enums_1.ProtocolIdentifiers.StrategiesAutomation.LiquityV2]: {
796
+ [enums_1.Strategies.Identifiers.Repay]: parseLiquityV2LeverageManagement,
797
+ [enums_1.Strategies.Identifiers.Boost]: parseLiquityV2LeverageManagement,
798
+ [enums_1.Strategies.Identifiers.CloseOnPrice]: parseLiquityV2CloseOnPrice,
799
+ [enums_1.Strategies.Identifiers.BoostOnPrice]: parseLiquityV2LeverageManagementOnPrice,
800
+ [enums_1.Strategies.Identifiers.RepayOnPrice]: parseLiquityV2LeverageManagementOnPrice,
801
+ [enums_1.Strategies.Identifiers.Payback]: parseLiquityV2Payback,
802
+ },
634
803
  [enums_1.ProtocolIdentifiers.StrategiesAutomation.AaveV2]: {
635
804
  [enums_1.Strategies.Identifiers.Repay]: parseAaveV2LeverageManagement,
636
805
  [enums_1.Strategies.Identifiers.Boost]: parseAaveV2LeverageManagement,
@@ -682,6 +851,11 @@ const parsingMethodsMapping = {
682
851
  [enums_1.Strategies.Identifiers.Boost]: parseMorphoBlueLeverageManagement,
683
852
  [enums_1.Strategies.Identifiers.EoaRepay]: parseMorphoBlueLeverageManagement,
684
853
  [enums_1.Strategies.Identifiers.EoaBoost]: parseMorphoBlueLeverageManagement,
854
+ [enums_1.Strategies.Identifiers.BoostOnPrice]: parseMorphoBlueLeverageManagementOnPrice,
855
+ },
856
+ [enums_1.ProtocolIdentifiers.StrategiesAutomation.FluidT1]: {
857
+ [enums_1.Strategies.Identifiers.Repay]: parseFluidT1LeverageManagement,
858
+ [enums_1.Strategies.Identifiers.Boost]: parseFluidT1LeverageManagement,
685
859
  },
686
860
  };
687
861
  function getParsingMethod(id, strategy) {
@@ -1,5 +1,5 @@
1
1
  import type { OrderType } from '../types/enums';
2
- import { Bundles, ChainId, RatioState, Strategies } from '../types/enums';
2
+ import { CloseToAssetType, Bundles, ChainId, RatioState, Strategies } from '../types/enums';
3
3
  import type { EthereumAddress, StrategyOrBundleIds } from '../types';
4
4
  export declare const makerEncode: {
5
5
  repayFromSavings(bundleId: StrategyOrBundleIds, vaultId: number, triggerRepayRatio: number, targetRepayRatio: number, isBundle?: boolean, chainId?: ChainId, daiAddr?: EthereumAddress, mcdCdpManagerAddr?: EthereumAddress): (boolean | string[] | Strategies.MainnetIds | Strategies.OptimismIds | Strategies.ArbitrumIds | Strategies.BaseIds | Bundles.MainnetIds | Bundles.OptimismIds | Bundles.ArbitrumIds | Bundles.BaseIds)[];
@@ -97,4 +97,14 @@ export declare const crvUSDEncode: {
97
97
  };
98
98
  export declare const morphoBlueEncode: {
99
99
  leverageManagement(marketId: string, loanToken: EthereumAddress, collToken: EthereumAddress, oracle: EthereumAddress, irm: EthereumAddress, lltv: string, ratioState: RatioState, targetRatio: number, triggerRatio: number, user: EthereumAddress, isEOA: boolean, network: ChainId): (boolean | string[] | Bundles.MainnetIds)[] | (boolean | string[] | Bundles.BaseIds)[];
100
+ leverageManagementOnPrice(strategyOrBundleId: number, isBundle: boolean | undefined, loanToken: EthereumAddress, collToken: EthereumAddress, oracle: EthereumAddress, irm: EthereumAddress, lltv: string, user: EthereumAddress, targetRatio: number, price: number, priceState: RatioState): (number | boolean | string[])[];
101
+ };
102
+ export declare const liquityV2Encode: {
103
+ leverageManagement(market: EthereumAddress, troveId: string, collToken: EthereumAddress, boldToken: EthereumAddress, ratioState: RatioState, targetRatio: number, triggerRatio: number, strategyOrBundleId: number): (number | boolean | string[])[];
104
+ closeOnPrice(strategyOrBundleId: number, market: EthereumAddress, troveId: string, collToken: EthereumAddress, boldToken: EthereumAddress, stopLossPrice?: number, stopLossType?: CloseToAssetType, takeProfitPrice?: number, takeProfitType?: CloseToAssetType): (number | boolean | string[])[];
105
+ leverageManagementOnPrice(strategyOrBundleId: number, market: EthereumAddress, price: number, state: RatioState, troveId: string, collToken: EthereumAddress, boldToken: EthereumAddress, targetRatio: number, isRepayOnPrice: boolean): (number | boolean | string[])[];
106
+ payback(market: EthereumAddress, troveId: string, boldToken: EthereumAddress, targetRatio: number, ratioState: RatioState, triggerRatio: number): (boolean | string[] | Strategies.MainnetIds)[];
107
+ };
108
+ export declare const fluidEncode: {
109
+ leverageManagement(nftId: string, vault: EthereumAddress, ratioState: RatioState, targetRatio: number, triggerRatio: number, strategyOrBundleId: number): (number | boolean | string[])[];
100
110
  };
@@ -26,7 +26,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
26
26
  return (mod && mod.__esModule) ? mod : { "default": mod };
27
27
  };
28
28
  Object.defineProperty(exports, "__esModule", { value: true });
29
- exports.morphoBlueEncode = exports.crvUSDEncode = exports.sparkEncode = exports.exchangeEncode = exports.morphoAaveV2Encode = exports.compoundV3L2Encode = exports.compoundV3Encode = exports.compoundV2Encode = exports.aaveV3Encode = exports.aaveV2Encode = exports.chickenBondsEncode = exports.liquityEncode = exports.makerEncode = void 0;
29
+ exports.fluidEncode = exports.liquityV2Encode = exports.morphoBlueEncode = exports.crvUSDEncode = exports.sparkEncode = exports.exchangeEncode = exports.morphoAaveV2Encode = exports.compoundV3L2Encode = exports.compoundV3Encode = exports.compoundV2Encode = exports.aaveV3Encode = exports.aaveV2Encode = exports.chickenBondsEncode = exports.liquityEncode = exports.makerEncode = void 0;
30
30
  const decimal_js_1 = __importDefault(require("decimal.js"));
31
31
  const tokens_1 = require("@defisaver/tokens");
32
32
  const enums_1 = require("../types/enums");
@@ -264,4 +264,45 @@ exports.morphoBlueEncode = {
264
264
  const isBundle = true;
265
265
  return [strategyOrBundleId, isBundle, triggerData, subData];
266
266
  },
267
+ leverageManagementOnPrice(strategyOrBundleId, isBundle = true, loanToken, collToken, oracle, irm, lltv, user, targetRatio, price, priceState) {
268
+ const subData = subDataService.morphoBlueLeverageManagementOnPriceSubData.encode(loanToken, collToken, oracle, irm, lltv, targetRatio, user);
269
+ const triggerData = triggerService.morphoBluePriceTrigger.encode(oracle, collToken, loanToken, price, priceState);
270
+ return [strategyOrBundleId, isBundle, triggerData, subData];
271
+ },
272
+ };
273
+ exports.liquityV2Encode = {
274
+ leverageManagement(market, troveId, collToken, boldToken, ratioState, targetRatio, triggerRatio, strategyOrBundleId) {
275
+ const isBundle = true;
276
+ const subData = subDataService.liquityV2LeverageManagementSubData.encode(market, troveId, collToken, boldToken, ratioState, targetRatio);
277
+ const triggerData = triggerService.liquityV2RatioTrigger.encode(market, troveId, triggerRatio, ratioState);
278
+ return [strategyOrBundleId, isBundle, triggerData, subData];
279
+ },
280
+ closeOnPrice(strategyOrBundleId, market, troveId, collToken, boldToken, stopLossPrice = 0, stopLossType = enums_1.CloseToAssetType.DEBT, takeProfitPrice = 0, takeProfitType = enums_1.CloseToAssetType.COLLATERAL) {
281
+ const isBundle = true;
282
+ const closeType = (0, utils_1.getCloseStrategyType)(stopLossPrice, stopLossType, takeProfitPrice, takeProfitType);
283
+ const subData = subDataService.liquityV2CloseSubData.encode(market, troveId, collToken, boldToken, closeType);
284
+ const triggerData = triggerService.closePriceTrigger.encode(collToken, stopLossPrice, takeProfitPrice);
285
+ return [strategyOrBundleId, isBundle, triggerData, subData];
286
+ },
287
+ leverageManagementOnPrice(strategyOrBundleId, market, price, state, troveId, collToken, boldToken, targetRatio, isRepayOnPrice) {
288
+ const subDataEncoded = subDataService.liquityV2LeverageManagementOnPriceSubData.encode(market, troveId, collToken, boldToken, targetRatio, isRepayOnPrice);
289
+ const triggerDataEncoded = triggerService.liquityV2QuotePriceTrigger.encode(market, price, state);
290
+ const isBundle = true;
291
+ return [strategyOrBundleId, isBundle, triggerDataEncoded, subDataEncoded];
292
+ },
293
+ payback(market, troveId, boldToken, targetRatio, ratioState, triggerRatio) {
294
+ const strategyId = enums_1.Strategies.MainnetIds.LIQUITY_V2_PAYBACK;
295
+ const isBundle = false;
296
+ const subData = subDataService.liquityV2PaybackSubData.encode(market, troveId, boldToken, targetRatio, ratioState);
297
+ const triggerData = triggerService.liquityV2RatioTrigger.encode(market, troveId, triggerRatio, ratioState);
298
+ return [strategyId, isBundle, triggerData, subData];
299
+ },
300
+ };
301
+ exports.fluidEncode = {
302
+ leverageManagement(nftId, vault, ratioState, targetRatio, triggerRatio, strategyOrBundleId) {
303
+ const isBundle = true;
304
+ const subData = subDataService.fluidLeverageManagementSubData.encode(nftId, vault, ratioState, targetRatio);
305
+ const triggerData = triggerService.fluidRatioTrigger.encode(nftId, triggerRatio, ratioState);
306
+ return [strategyOrBundleId, isBundle, triggerData, subData];
307
+ },
267
308
  };
@@ -1,5 +1,5 @@
1
1
  import type { EthereumAddress } from '../types';
2
- import type { OrderType } from '../types/enums';
2
+ import type { CloseStrategyType, OrderType } from '../types/enums';
3
3
  import { ChainId, RatioState } from '../types/enums';
4
4
  export declare const makerRepayFromSavingsSubData: {
5
5
  encode(vaultId: number, targetRatioPercentage: number, chainId: ChainId, daiAddr?: EthereumAddress, mcdCdpManagerAddr?: EthereumAddress): string[];
@@ -190,3 +190,65 @@ export declare const aaveV3LeverageManagementOnPriceSubData: {
190
190
  targetRatio: number;
191
191
  };
192
192
  };
193
+ export declare const liquityV2LeverageManagementSubData: {
194
+ encode: (market: EthereumAddress, troveId: string, collToken: EthereumAddress, boldToken: EthereumAddress, ratioState: RatioState, targetRatio: number) => string[];
195
+ decode: (subData: string[]) => {
196
+ market: string;
197
+ troveId: string;
198
+ collToken: string;
199
+ boldToken: string;
200
+ ratioState: RatioState;
201
+ targetRatio: number;
202
+ };
203
+ };
204
+ export declare const liquityV2CloseSubData: {
205
+ encode(market: EthereumAddress, troveId: string, collToken: EthereumAddress, boldToken: EthereumAddress, closeType: CloseStrategyType): string[];
206
+ decode(subData: string[]): {
207
+ market: EthereumAddress;
208
+ troveId: string;
209
+ collToken: EthereumAddress;
210
+ boldToken: EthereumAddress;
211
+ closeType: CloseStrategyType;
212
+ };
213
+ };
214
+ export declare const liquityV2LeverageManagementOnPriceSubData: {
215
+ encode(market: EthereumAddress, troveId: string, collToken: EthereumAddress, boldToken: EthereumAddress, targetRatio: number, isRepayOnPrice: boolean): string[];
216
+ decode(subData: string[]): {
217
+ market: EthereumAddress;
218
+ troveId: string;
219
+ collToken: EthereumAddress;
220
+ boldToken: EthereumAddress;
221
+ targetRatio: number;
222
+ };
223
+ };
224
+ export declare const morphoBlueLeverageManagementOnPriceSubData: {
225
+ encode(loanToken: EthereumAddress, collToken: EthereumAddress, oracle: EthereumAddress, irm: EthereumAddress, lltv: string, targetRatio: number, user: EthereumAddress): string[];
226
+ decode(subData: string[]): {
227
+ loanToken: string;
228
+ collToken: string;
229
+ oracle: string;
230
+ irm: string;
231
+ lltv: string;
232
+ targetRatio: number;
233
+ user: string;
234
+ };
235
+ };
236
+ export declare const liquityV2PaybackSubData: {
237
+ encode: (market: EthereumAddress, troveId: string, boldToken: EthereumAddress, targetRatio: number, ratioState: RatioState) => string[];
238
+ decode: (subData: string[]) => {
239
+ market: string;
240
+ troveId: string;
241
+ boldToken: string;
242
+ ratioState: RatioState;
243
+ targetRatio: number;
244
+ };
245
+ };
246
+ export declare const fluidLeverageManagementSubData: {
247
+ encode: (nftId: string, vault: EthereumAddress, ratioState: RatioState, targetRatio: number) => string[];
248
+ decode: (subData: string[]) => {
249
+ nftId: string;
250
+ vault: string;
251
+ ratioState: RatioState;
252
+ targetRatio: number;
253
+ };
254
+ };