@defisaver/automation-sdk 3.3.18 → 3.3.19-sub-fetching.1-dev

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/cjs/automation/private/StrategiesAutomation.d.ts +5 -1
  2. package/cjs/automation/private/StrategiesAutomation.js +29 -2
  3. package/cjs/automation/private/StrategiesAutomation.test.js +66 -0
  4. package/cjs/constants/index.js +35 -0
  5. package/cjs/services/apiSubscriptionsService.d.ts +7 -0
  6. package/cjs/services/apiSubscriptionsService.js +33 -0
  7. package/cjs/services/apiSubscriptionsService.test.d.ts +1 -0
  8. package/cjs/services/apiSubscriptionsService.test.js +69 -0
  9. package/cjs/services/ethereumService.test.js +4 -7
  10. package/cjs/services/strategiesService.js +40 -9
  11. package/cjs/services/strategiesService.test.js +0 -1
  12. package/cjs/services/strategySubService.d.ts +4 -0
  13. package/cjs/services/strategySubService.js +24 -0
  14. package/cjs/services/strategySubService.test.js +295 -0
  15. package/cjs/services/subDataService.d.ts +38 -0
  16. package/cjs/services/subDataService.js +76 -2
  17. package/cjs/services/subDataService.test.js +494 -4
  18. package/cjs/types/enums.d.ts +15 -2
  19. package/cjs/types/enums.js +15 -1
  20. package/cjs/types/index.d.ts +32 -3
  21. package/esm/automation/private/StrategiesAutomation.d.ts +5 -1
  22. package/esm/automation/private/StrategiesAutomation.js +29 -2
  23. package/esm/automation/private/StrategiesAutomation.test.js +67 -1
  24. package/esm/constants/index.js +35 -0
  25. package/esm/services/apiSubscriptionsService.d.ts +7 -0
  26. package/esm/services/apiSubscriptionsService.js +29 -0
  27. package/esm/services/apiSubscriptionsService.test.d.ts +1 -0
  28. package/esm/services/apiSubscriptionsService.test.js +67 -0
  29. package/esm/services/ethereumService.test.js +4 -7
  30. package/esm/services/strategiesService.js +40 -9
  31. package/esm/services/strategiesService.test.js +0 -1
  32. package/esm/services/strategySubService.d.ts +4 -0
  33. package/esm/services/strategySubService.js +24 -0
  34. package/esm/services/strategySubService.test.js +295 -0
  35. package/esm/services/subDataService.d.ts +38 -0
  36. package/esm/services/subDataService.js +74 -0
  37. package/esm/services/subDataService.test.js +494 -4
  38. package/esm/types/enums.d.ts +15 -2
  39. package/esm/types/enums.js +14 -0
  40. package/esm/types/index.d.ts +32 -3
  41. package/package.json +1 -1
  42. package/src/automation/private/StrategiesAutomation.test.ts +84 -1
  43. package/src/automation/private/StrategiesAutomation.ts +33 -0
  44. package/src/constants/index.ts +35 -0
  45. package/src/services/apiSubscriptionsService.test.ts +75 -0
  46. package/src/services/apiSubscriptionsService.ts +33 -0
  47. package/src/services/ethereumService.test.ts +5 -8
  48. package/src/services/strategiesService.test.ts +0 -1
  49. package/src/services/strategiesService.ts +43 -10
  50. package/src/services/strategySubService.test.ts +382 -0
  51. package/src/services/strategySubService.ts +87 -0
  52. package/src/services/subDataService.test.ts +608 -4
  53. package/src/services/subDataService.ts +107 -0
  54. package/src/types/enums.ts +14 -0
  55. package/src/types/index.ts +34 -2
@@ -1249,6 +1249,27 @@ export const sparkLeverageManagementSubData = {
1249
1249
 
1250
1250
  export const sparkLiquidationProtectionSubData = sparkLeverageManagementSubData;
1251
1251
 
1252
+ export const sparkGenericLeverageManagementSubData = {
1253
+ encode(
1254
+ targetRatio: number,
1255
+ ratioState: RatioState,
1256
+ market: EthereumAddress,
1257
+ user: EthereumAddress,
1258
+ ): SubData {
1259
+ const encodedTargetRatio = AbiCoder.encodeParameter('uint256', ratioPercentageToWei(targetRatio));
1260
+ const encodedRatioState = AbiCoder.encodeParameter('uint8', ratioState);
1261
+ const encodedMarket = AbiCoder.encodeParameter('address', market);
1262
+ const encodedUser = AbiCoder.encodeParameter('address', user);
1263
+ return [encodedTargetRatio, encodedRatioState, encodedMarket, encodedUser];
1264
+ },
1265
+ decode(subData: SubData): { targetRatio: number, ratioState: RatioState } {
1266
+ const targetRatio = weiToRatioPercentage(String(AbiCoder.decodeParameter('uint256', subData[0])));
1267
+ const ratioState = Number(AbiCoder.decodeParameter('uint8', subData[1])) as RatioState;
1268
+ return { targetRatio, ratioState };
1269
+ },
1270
+ };
1271
+
1272
+ export const sparkGenericLiquidationProtectionSubData = sparkGenericLeverageManagementSubData;
1252
1273
 
1253
1274
  export const sparkCloseGenericSubData = {
1254
1275
  encode(
@@ -1339,6 +1360,41 @@ export const sparkLeverageManagementOnPriceSubData = {
1339
1360
  };
1340
1361
  },
1341
1362
  };
1363
+ export const sparkLeverageManagementOnPriceGenericSubData = {
1364
+ encode(
1365
+ collAsset: EthereumAddress,
1366
+ collAssetId: number,
1367
+ debtAsset: EthereumAddress,
1368
+ debtAssetId: number,
1369
+ marketAddr: EthereumAddress,
1370
+ targetRatio: number,
1371
+ user: EthereumAddress,
1372
+ ): SubData {
1373
+ const encodedColl = AbiCoder.encodeParameter('address', collAsset);
1374
+ const encodedCollId = AbiCoder.encodeParameter('uint16', collAssetId);
1375
+ const encodedDebt = AbiCoder.encodeParameter('address', debtAsset);
1376
+ const encodedDebtId = AbiCoder.encodeParameter('uint16', debtAssetId);
1377
+ const encodedMarket = AbiCoder.encodeParameter('address', marketAddr);
1378
+ const encodedTargetRatio = AbiCoder.encodeParameter('uint256', ratioPercentageToWei(targetRatio));
1379
+ const encodedUser = AbiCoder.encodeParameter('address', user);
1380
+ return [
1381
+ encodedColl, encodedCollId, encodedDebt, encodedDebtId,
1382
+ encodedMarket, encodedTargetRatio, encodedUser,
1383
+ ];
1384
+ },
1385
+ decode(subData: SubData) {
1386
+ const collAsset = AbiCoder.decodeParameter('address', subData[0]) as any as EthereumAddress;
1387
+ const collAssetId = Number(AbiCoder.decodeParameter('uint16', subData[1]));
1388
+ const debtAsset = AbiCoder.decodeParameter('address', subData[2]) as any as EthereumAddress;
1389
+ const debtAssetId = Number(AbiCoder.decodeParameter('uint16', subData[3]));
1390
+ const marketAddr = AbiCoder.decodeParameter('address', subData[4]) as any as EthereumAddress;
1391
+ const targetRatio = weiToRatioPercentage(String(AbiCoder.decodeParameter('uint256', subData[5])));
1392
+ const user = AbiCoder.decodeParameter('address', subData[6]) as any as EthereumAddress;
1393
+ return {
1394
+ collAsset, collAssetId, debtAsset, debtAssetId, marketAddr, targetRatio, user,
1395
+ };
1396
+ },
1397
+ };
1342
1398
  export const sparkCollateralSwitchSubData = {
1343
1399
  encode(
1344
1400
  fromAsset: EthereumAddress,
@@ -1388,6 +1444,57 @@ export const sparkCollateralSwitchSubData = {
1388
1444
  },
1389
1445
  };
1390
1446
 
1447
+ export const sparkGenericFLCollateralSwitchSubData = {
1448
+ encode(
1449
+ fromAsset: EthereumAddress,
1450
+ fromAssetId: number,
1451
+ toAsset: EthereumAddress,
1452
+ toAssetId: number,
1453
+ marketAddr: EthereumAddress,
1454
+ amountToSwitch: string,
1455
+ user: EthereumAddress,
1456
+ ): SubData {
1457
+ const encodedFromAsset = AbiCoder.encodeParameter('address', fromAsset);
1458
+ const encodedFromAssetId = AbiCoder.encodeParameter('uint16', fromAssetId);
1459
+ const encodedToAsset = AbiCoder.encodeParameter('address', toAsset);
1460
+ const encodedToAssetId = AbiCoder.encodeParameter('uint16', toAssetId);
1461
+ const encodedMarketAddr = AbiCoder.encodeParameter('address', marketAddr);
1462
+ const encodedAmountToSwitch = AbiCoder.encodeParameter('uint256', amountToSwitch);
1463
+ const encodedUser = AbiCoder.encodeParameter('address', user);
1464
+
1465
+ return [
1466
+ encodedFromAsset,
1467
+ encodedFromAssetId,
1468
+ encodedToAsset,
1469
+ encodedToAssetId,
1470
+ encodedMarketAddr,
1471
+ encodedAmountToSwitch,
1472
+ encodedUser,
1473
+ ];
1474
+ },
1475
+ decode(subData: SubData): {
1476
+ fromAsset: EthereumAddress,
1477
+ fromAssetId: number,
1478
+ toAsset: EthereumAddress,
1479
+ toAssetId: number,
1480
+ marketAddr: EthereumAddress,
1481
+ amountToSwitch: string,
1482
+ user: EthereumAddress,
1483
+ } {
1484
+ const fromAsset = AbiCoder.decodeParameter('address', subData[0]) as unknown as EthereumAddress;
1485
+ const fromAssetId = Number(AbiCoder.decodeParameter('uint16', subData[1]));
1486
+ const toAsset = AbiCoder.decodeParameter('address', subData[2]) as unknown as EthereumAddress;
1487
+ const toAssetId = Number(AbiCoder.decodeParameter('uint16', subData[3]));
1488
+ const marketAddr = AbiCoder.decodeParameter('address', subData[4]) as unknown as EthereumAddress;
1489
+ const amountToSwitch = AbiCoder.decodeParameter('uint256', subData[5]) as unknown as string;
1490
+ const user = AbiCoder.decodeParameter('address', subData[6]) as unknown as EthereumAddress;
1491
+
1492
+ return {
1493
+ fromAsset, fromAssetId, toAsset, toAssetId, marketAddr, amountToSwitch, user,
1494
+ };
1495
+ },
1496
+ };
1497
+
1391
1498
 
1392
1499
  /**
1393
1500
  ______ .______ ____ ____ __ __ _______. _______
@@ -5,6 +5,13 @@ export enum ChainId {
5
5
  Base = 8453,
6
6
  }
7
7
 
8
+ export enum SubscriptionStatus {
9
+ Active = 'active',
10
+ Disabled = 'disabled',
11
+ Finished = 'finished',
12
+ Invalid = 'invalid',
13
+ }
14
+
8
15
  export enum RatioState {
9
16
  OVER = 0,
10
17
  UNDER = 1,
@@ -101,6 +108,7 @@ export namespace Strategies {
101
108
  AAVE_V4_COLLATERAL_SWITCH = 154,
102
109
  AAVE_V4_COLLATERAL_SWITCH_EOA = 155,
103
110
  SPARK_COLLATERAL_SWITCH = 156,
111
+ SPARK_GENERIC_FL_COLLATERAL_SWITCH = 167,
104
112
  }
105
113
 
106
114
  export enum OptimismIds {
@@ -259,6 +267,12 @@ export namespace Bundles {
259
267
  MORPHO_BLUE_EOA_BOOST_ON_PRICE = 85,
260
268
  MORPHO_BLUE_EOA_REPAY_ON_PRICE = 86,
261
269
  MORPHO_BLUE_EOA_CLOSE = 87,
270
+ SPARK_EOA_REPAY = 88,
271
+ SPARK_EOA_BOOST = 89,
272
+ SPARK_EOA_REPAY_ON_PRICE = 90,
273
+ SPARK_EOA_BOOST_ON_PRICE = 91,
274
+ SPARK_EOA_CLOSE = 92,
275
+ SPARK_EOA_LIQUIDATION_PROTECTION = 93,
262
276
  }
263
277
 
264
278
  export enum OptimismIds {
@@ -1,11 +1,12 @@
1
1
  import type Web3 from 'web3';
2
2
  import type { AbiItem } from 'web3-utils';
3
3
  import type { BaseContract, BlockType } from './contracts/generated/types';
4
- import type { Subscribe, StrategyModel } from './contracts/generated/SubStorage';
4
+ import type { StrategyModel } from './contracts/generated/SubStorage';
5
5
  import type {
6
6
  ChainId, Strategies, Bundles, ProtocolIdentifiers,
7
7
  RatioState,
8
8
  CloseToAssetType,
9
+ SubscriptionStatus,
9
10
  } from './enums';
10
11
 
11
12
  export type PlaceholderType = any; // TODO - fix any types
@@ -72,6 +73,24 @@ interface _SubscriptionOptions {
72
73
 
73
74
  export type SubscriptionOptions = Partial<_SubscriptionOptions>;
74
75
 
76
+ /** Subscription record as returned by the automation API (GET /v1/subscriptions) */
77
+ export interface ApiSubscriptionRecord {
78
+ id: number,
79
+ wallet: EthereumAddress,
80
+ wallet_type: string,
81
+ is_enabled: boolean,
82
+ invalid: boolean,
83
+ status: SubscriptionStatus,
84
+ is_bundle: boolean,
85
+ strategy_or_bundle_id: number,
86
+ strategy_ids: number[],
87
+ sub_data_hash: string,
88
+ trigger_data: string[],
89
+ sub_data: string[],
90
+ block_number: number,
91
+ additional_triggers: string[] | null,
92
+ }
93
+
75
94
  export declare namespace Interfaces {
76
95
  interface ProtocolBase {
77
96
  id: ProtocolIdentifiers.StrategiesAutomation | ProtocolIdentifiers.LegacyAutomation,
@@ -131,6 +150,9 @@ export declare namespace Position {
131
150
  triggerBoostRatio?: number,
132
151
  targetBoostRatio?: number,
133
152
  boostEnabled?: boolean,
153
+ /** Set only for subscriptions parsed from the automation API: the backend marked that half invalid */
154
+ repayInvalid?: boolean,
155
+ boostInvalid?: boolean,
134
156
  }
135
157
  interface CloseOnPrice extends Base {
136
158
  price: string,
@@ -301,6 +323,8 @@ export declare namespace Position {
301
323
  subId: number,
302
324
  subIds?: number[],
303
325
  isEnabled?: boolean,
326
+ /** Set only for subscriptions parsed from the automation API: the backend will not execute this subscription */
327
+ invalid?: boolean,
304
328
  subHash: string,
305
329
  blockNumber: BlockNumber,
306
330
  protocol: Interfaces.Protocol,
@@ -369,10 +393,18 @@ export type StrategyOrBundleIds =
369
393
  | typeof Bundles.ArbitrumIds[keyof typeof Bundles.ArbitrumIds]
370
394
  | typeof Bundles.BaseIds[keyof typeof Bundles.BaseIds];
371
395
 
396
+ /** Fields of the Subscribe event that parsing relies on */
397
+ export interface SubscriptionEventData {
398
+ subId: string,
399
+ proxy: EthereumAddress,
400
+ subHash: string,
401
+ subStruct: StrategyModel.StrategySubStructOutputStruct,
402
+ }
403
+
372
404
  export interface ParseData {
373
405
  chainId: ChainId,
374
406
  blockNumber: BlockNumber,
375
- subscriptionEventData: Subscribe['returnValues']
407
+ subscriptionEventData: SubscriptionEventData,
376
408
  strategiesSubsData: StrategyModel.StoredSubDataStructOutputStruct,
377
409
  }
378
410