@defisaver/automation-sdk 3.3.17 → 3.3.18

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 +1 -1
  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
@@ -1,22 +1,25 @@
1
- import Dec from 'decimal.js';
2
1
  import { getAssetInfo } from '@defisaver/tokens';
2
+ import Dec from 'decimal.js';
3
3
 
4
- import type { OrderType } from '../types/enums';
4
+ import { STRATEGY_IDS } from '../constants';
5
5
  import {
6
- CloseToAssetType,
7
6
  Bundles,
8
7
  ChainId,
8
+ CloseToAssetType,
9
9
  RatioState,
10
10
  Strategies,
11
11
  } from '../types/enums';
12
12
  import type { EthereumAddress, StrategyOrBundleIds } from '../types';
13
13
 
14
- import { STRATEGY_IDS } from '../constants';
14
+ import type { OrderType } from '../types/enums';
15
15
 
16
16
  import * as subDataService from './subDataService';
17
17
  import * as triggerService from './triggerService';
18
18
  import {
19
- compareAddresses, getCloseStrategyType, requireAddress, requireAddresses,
19
+ compareAddresses,
20
+ getCloseStrategyType,
21
+ requireAddress,
22
+ requireAddresses,
20
23
  } from './utils';
21
24
 
22
25
  export const makerEncode = {
@@ -81,7 +84,7 @@ export const makerEncode = {
81
84
 
82
85
  return [strategyOrBundleId, isBundle, triggerData, subData];
83
86
  },
84
- leverageManagementWithoutSubProxy(
87
+ leverageManagement(
85
88
  vaultId: number,
86
89
  triggerRatio: number,
87
90
  targetRatio: number,
@@ -93,7 +96,27 @@ export const makerEncode = {
93
96
 
94
97
  const triggerData = triggerService.makerRatioTrigger.encode(vaultId, triggerRatio, ratioState);
95
98
 
96
- const subData = subDataService.makerLeverageManagementWithoutSubProxy.encode(vaultId, targetRatio, daiAddr);
99
+ const subData = subDataService.makerLeverageManagementSubData.encode(vaultId, targetRatio, daiAddr);
100
+
101
+ return [
102
+ bundleId,
103
+ true,
104
+ triggerData,
105
+ subData,
106
+ ];
107
+ },
108
+
109
+ liquidationProtection(
110
+ vaultId: number,
111
+ triggerRatio: number,
112
+ targetRatio: number,
113
+ ratioState: RatioState,
114
+ daiAddr?: EthereumAddress,
115
+ ) {
116
+ const bundleId = Bundles.MainnetIds.MAKER_SW_LIQUIDATION_PROTECTION;
117
+
118
+ const triggerData = triggerService.makerRatioTrigger.encode(vaultId, triggerRatio, ratioState);
119
+ const subData = subDataService.makerLiquidationProtectionSubData.encode(vaultId, targetRatio, daiAddr);
97
120
 
98
121
  return [
99
122
  bundleId,
@@ -162,7 +185,7 @@ export const liquityEncode = {
162
185
 
163
186
  return [strategyId, isBundle, triggerData, subData];
164
187
  },
165
- leverageManagementWithoutSubProxy(
188
+ leverageManagement(
166
189
  strategyOrBundleId: number,
167
190
  user: EthereumAddress,
168
191
  ratioState: RatioState,
@@ -171,7 +194,7 @@ export const liquityEncode = {
171
194
  ) {
172
195
  const isBundle = true;
173
196
 
174
- const subData = subDataService.liquityLeverageManagementSubDataWithoutSubProxy.encode(targetRatio, ratioState);
197
+ const subData = subDataService.liquityLeverageManagementSubData.encode(targetRatio, ratioState);
175
198
  const triggerData = triggerService.liquityRatioTrigger.encode(user, triggerRatio, ratioState);
176
199
 
177
200
  return [strategyOrBundleId, isBundle, triggerData, subData];
@@ -223,14 +246,8 @@ export const liquityEncode = {
223
246
  },
224
247
  };
225
248
 
226
- export const chickenBondsEncode = {
227
- rebond(bondId: number) {
228
- return subDataService.cBondsRebondSubData.encode(bondId);
229
- },
230
- };
231
-
232
249
  export const aaveV2Encode = {
233
- leverageManagementWithoutSubProxy(
250
+ leverageManagement(
234
251
  strategyOrBundleId: number,
235
252
  market: EthereumAddress,
236
253
  user: EthereumAddress,
@@ -240,7 +257,7 @@ export const aaveV2Encode = {
240
257
  ) {
241
258
  const isBundle = true;
242
259
 
243
- const subData = subDataService.aaveV2LeverageManagementSubDataWithoutSubProxy.encode(market, targetRatio, ratioState);
260
+ const subData = subDataService.aaveV2LeverageManagementSubData.encode(market, targetRatio, ratioState);
244
261
  const triggerData = triggerService.aaveV2RatioTrigger.encode(user, market, triggerRatio, ratioState);
245
262
 
246
263
  return [strategyOrBundleId, isBundle, triggerData, subData];
@@ -314,7 +331,7 @@ export const aaveV3Encode = {
314
331
 
315
332
  return [strategyOrBundleId, isBundle, triggerDataEncoded, subDataEncoded];
316
333
  },
317
- leverageManagementWithoutSubProxy(
334
+ leverageManagement(
318
335
  strategyOrBundleId: number,
319
336
  market: EthereumAddress,
320
337
  user: EthereumAddress,
@@ -325,7 +342,7 @@ export const aaveV3Encode = {
325
342
  ) {
326
343
  const isBundle = true;
327
344
 
328
- const subData = subDataService.aaveV3LeverageManagementSubDataWithoutSubProxy.encode(
345
+ const subData = subDataService.aaveV3LeverageManagementSubData.encode(
329
346
  targetRatio,
330
347
  ratioState,
331
348
  market,
@@ -337,6 +354,28 @@ export const aaveV3Encode = {
337
354
  return [strategyOrBundleId, isBundle, triggerData, subData];
338
355
  },
339
356
 
357
+ liquidationProtection(
358
+ strategyOrBundleId: number,
359
+ market: EthereumAddress,
360
+ user: EthereumAddress,
361
+ ratioState: RatioState,
362
+ targetRatio: number,
363
+ triggerRatio: number,
364
+ ) {
365
+ const isBundle = true;
366
+
367
+ const subData = subDataService.aaveV3LiquidationProtectionSubData.encode(
368
+ targetRatio,
369
+ ratioState,
370
+ market,
371
+ user,
372
+ true, // isGeneric
373
+ );
374
+ const triggerData = triggerService.aaveV3RatioTrigger.encode(user, market, triggerRatio, ratioState);
375
+
376
+ return [strategyOrBundleId, isBundle, triggerData, subData];
377
+ },
378
+
340
379
  leverageManagementOnPriceGeneric(
341
380
  strategyOrBundleId: number,
342
381
  price: number,
@@ -408,7 +447,7 @@ export const aaveV3Encode = {
408
447
  };
409
448
 
410
449
  export const compoundV2Encode = {
411
- leverageManagementWithoutSubProxy(
450
+ leverageManagement(
412
451
  strategyOrBundleId: number,
413
452
  user: EthereumAddress,
414
453
  ratioState: RatioState,
@@ -417,7 +456,7 @@ export const compoundV2Encode = {
417
456
  ) {
418
457
  const isBundle = true;
419
458
 
420
- const subData = subDataService.compoundV2LeverageManagementSubDataWithoutSubProxy.encode(targetRatio, ratioState);
459
+ const subData = subDataService.compoundV2LeverageManagementSubData.encode(targetRatio, ratioState);
421
460
  const triggerData = triggerService.compoundV2RatioTrigger.encode(user, triggerRatio, ratioState);
422
461
 
423
462
  return [strategyOrBundleId, isBundle, triggerData, subData];
@@ -425,7 +464,24 @@ export const compoundV2Encode = {
425
464
  };
426
465
 
427
466
  export const compoundV3Encode = {
428
- leverageManagementWithoutSubProxy(
467
+ leverageManagement(
468
+ strategyOrBundleId: number,
469
+ market: EthereumAddress,
470
+ baseToken: EthereumAddress,
471
+ user: EthereumAddress,
472
+ ratioState: RatioState,
473
+ targetRatio: number,
474
+ triggerRatio: number,
475
+ ) {
476
+ const isBundle = true;
477
+
478
+ const subData = subDataService.compoundV3LeverageManagementSubData.encode(market, baseToken, targetRatio, ratioState);
479
+ const triggerData = triggerService.compoundV3RatioTrigger.encode(user, market, triggerRatio, ratioState);
480
+
481
+ return [strategyOrBundleId, isBundle, triggerData, subData];
482
+ },
483
+
484
+ liquidationProtection(
429
485
  strategyOrBundleId: number,
430
486
  market: EthereumAddress,
431
487
  baseToken: EthereumAddress,
@@ -436,11 +492,12 @@ export const compoundV3Encode = {
436
492
  ) {
437
493
  const isBundle = true;
438
494
 
439
- const subData = subDataService.compoundV3LeverageManagementSubDataWithoutSubProxy.encode(market, baseToken, targetRatio, ratioState);
495
+ const subData = subDataService.compoundV3LiquidationProtectionSubData.encode(market, baseToken, targetRatio, ratioState);
440
496
  const triggerData = triggerService.compoundV3RatioTrigger.encode(user, market, triggerRatio, ratioState);
441
497
 
442
498
  return [strategyOrBundleId, isBundle, triggerData, subData];
443
499
  },
500
+
444
501
  leverageManagementOnPrice(
445
502
  strategyOrBundleId: number,
446
503
  market: EthereumAddress,
@@ -479,18 +536,6 @@ export const compoundV3Encode = {
479
536
  },
480
537
  };
481
538
 
482
- export const morphoAaveV2Encode = {
483
- leverageManagement(
484
- triggerRepayRatio: number,
485
- triggerBoostRatio: number,
486
- targetBoostRatio: number,
487
- targetRepayRatio: number,
488
- boostEnabled: boolean,
489
- ) {
490
- return subDataService.morphoAaveV2LeverageManagementSubData.encode(triggerRepayRatio, triggerBoostRatio, targetBoostRatio, targetRepayRatio, boostEnabled);
491
- },
492
- };
493
-
494
539
  export const exchangeEncode = {
495
540
  dca(
496
541
  fromToken: EthereumAddress,
@@ -508,7 +553,7 @@ export const exchangeEncode = {
508
553
 
509
554
  return [strategyId, false, triggerData, subData];
510
555
  },
511
- limitOrderWithoutSubProxy(
556
+ limitOrder(
512
557
  fromToken: EthereumAddress,
513
558
  toToken: EthereumAddress,
514
559
  amount: string,
@@ -520,7 +565,7 @@ export const exchangeEncode = {
520
565
  network: ChainId,
521
566
  ) {
522
567
  requireAddresses([fromToken, toToken]);
523
- const subData = subDataService.exchangeLimitOrderSubDataWithoutSubProxy.encode(fromToken, toToken, amount);
568
+ const subData = subDataService.exchangeLimitOrderSubData.encode(fromToken, toToken, amount);
524
569
  const triggerData = triggerService.exchangeOffchainPriceTrigger.encode(targetPrice, Number(goodUntil), orderType, fromTokenDecimals, toTokenDecimals);
525
570
 
526
571
  const strategyId = STRATEGY_IDS[network].EXCHANGE_LIMIT_ORDER;
@@ -573,7 +618,26 @@ export const sparkEncode = {
573
618
 
574
619
  return [strategyOrBundleId, isBundle, triggerDataEncoded, subDataEncoded];
575
620
  },
576
- leverageManagementWithoutSubProxy(
621
+ leverageManagement(
622
+ strategyOrBundleId: number,
623
+ market: EthereumAddress,
624
+ user: EthereumAddress,
625
+ ratioState: RatioState,
626
+ targetRatio: number,
627
+ triggerRatio: number,
628
+ ) {
629
+ const isBundle = true;
630
+
631
+ const subData = subDataService.sparkLeverageManagementSubData.encode(
632
+ targetRatio,
633
+ ratioState,
634
+ );
635
+ const triggerData = triggerService.sparkRatioTrigger.encode(user, market, triggerRatio, ratioState);
636
+
637
+ return [strategyOrBundleId, isBundle, triggerData, subData];
638
+ },
639
+
640
+ liquidationProtection(
577
641
  strategyOrBundleId: number,
578
642
  market: EthereumAddress,
579
643
  user: EthereumAddress,
@@ -583,7 +647,7 @@ export const sparkEncode = {
583
647
  ) {
584
648
  const isBundle = true;
585
649
 
586
- const subData = subDataService.sparkLeverageManagementSubDataWithoutSubProxy.encode(
650
+ const subData = subDataService.sparkLiquidationProtectionSubData.encode(
587
651
  targetRatio,
588
652
  ratioState,
589
653
  );
@@ -591,6 +655,7 @@ export const sparkEncode = {
591
655
 
592
656
  return [strategyOrBundleId, isBundle, triggerData, subData];
593
657
  },
658
+
594
659
  collateralSwitch(
595
660
  strategyOrBundleId: number,
596
661
  fromAsset: EthereumAddress,
@@ -652,7 +717,7 @@ export const crvUSDEncode = {
652
717
  },
653
718
  };
654
719
 
655
- export type MorphoBlueBundleStrategy = 'repay' | 'boost' | 'repayOnPrice' | 'boostOnPrice' | 'close';
720
+ export type MorphoBlueBundleStrategy = 'repay' | 'boost' | 'repayOnPrice' | 'boostOnPrice' | 'close' | 'liquidationProtection';
656
721
 
657
722
  function getMorphoBlueBundlesIds(network: ChainId) {
658
723
  switch (network) {
@@ -685,6 +750,8 @@ export function getMorphoBlueBundleId(
685
750
  return isEOA ? bundlesIds.MORPHO_BLUE_EOA_BOOST_ON_PRICE : bundlesIds.MORPHO_BLUE_BOOST_ON_PRICE;
686
751
  case 'close':
687
752
  return isEOA ? bundlesIds.MORPHO_BLUE_EOA_CLOSE : bundlesIds.MORPHO_BLUE_CLOSE;
753
+ case 'liquidationProtection':
754
+ return isEOA ? bundlesIds.MORPHO_BLUE_EOA_LIQUIDATION_PROTECTION : bundlesIds.MORPHO_BLUE_SW_LIQUIDATION_PROTECTION;
688
755
  default:
689
756
  throw new Error(`Unknown Morpho Blue strategy: ${strategy}`);
690
757
  }
@@ -716,6 +783,31 @@ export const morphoBlueEncode = {
716
783
 
717
784
  return [bundleId, isBundle, triggerData, subData];
718
785
  },
786
+
787
+ liquidationProtection(
788
+ marketId: string,
789
+ loanToken: EthereumAddress,
790
+ collToken: EthereumAddress,
791
+ oracle: EthereumAddress,
792
+ irm: EthereumAddress,
793
+ lltv: string,
794
+ ratioState: RatioState,
795
+ targetRatio: number,
796
+ triggerRatio: number,
797
+ user: EthereumAddress,
798
+ isEOA: boolean,
799
+ network: ChainId,
800
+ ) {
801
+ const subData = subDataService.morphoBlueLiquidationProtectionSubData.encode(loanToken, collToken, oracle, irm, lltv, ratioState, targetRatio, user, isEOA);
802
+
803
+ const triggerData = triggerService.morphoBlueRatioTrigger.encode(marketId, user, triggerRatio, ratioState);
804
+
805
+ const bundleId = getMorphoBlueBundleId(network, 'liquidationProtection', isEOA);
806
+ const isBundle = true;
807
+
808
+ return [bundleId, isBundle, triggerData, subData];
809
+ },
810
+
719
811
  leverageManagementOnPrice(
720
812
  strategyOrBundleId: number,
721
813
  isBundle: boolean = true,
@@ -890,6 +982,22 @@ export const fluidEncode = {
890
982
 
891
983
  return [strategyOrBundleId, isBundle, triggerData, subData];
892
984
  },
985
+
986
+ liquidationProtection(
987
+ nftId: string,
988
+ vault: EthereumAddress,
989
+ ratioState: RatioState,
990
+ targetRatio: number,
991
+ triggerRatio: number,
992
+ strategyOrBundleId: number,
993
+ ) {
994
+ const isBundle = true;
995
+ const subData = subDataService.fluidLiquidationProtectionSubData.encode(nftId, vault, ratioState, targetRatio);
996
+ const triggerData = triggerService.fluidRatioTrigger.encode(nftId, triggerRatio, ratioState);
997
+
998
+ return [strategyOrBundleId, isBundle, triggerData, subData];
999
+ },
1000
+
893
1001
  };
894
1002
 
895
1003
  export const aaveV4Encode = {
@@ -907,6 +1015,22 @@ export const aaveV4Encode = {
907
1015
 
908
1016
  return [strategyOrBundleId, isBundle, triggerData, subData];
909
1017
  },
1018
+
1019
+ liquidationProtection(
1020
+ strategyOrBundleId: number,
1021
+ owner: EthereumAddress,
1022
+ spoke: EthereumAddress,
1023
+ ratioState: RatioState,
1024
+ targetRatio: number,
1025
+ triggerRatio: number,
1026
+ ) {
1027
+ const isBundle = true;
1028
+ const subData = subDataService.aaveV4LiquidationProtectionSubData.encode(spoke, owner, ratioState, targetRatio);
1029
+ const triggerData = triggerService.aaveV4RatioTrigger.encode(owner, spoke, triggerRatio, ratioState);
1030
+
1031
+ return [strategyOrBundleId, isBundle, triggerData, subData];
1032
+ },
1033
+
910
1034
  leverageManagementOnPrice(
911
1035
  strategyOrBundleId: number,
912
1036
  owner: EthereumAddress,