@haven-fi/solauto-sdk 1.0.176 → 1.0.178

Sign up to get free protection for your applications and to get access to all the features.
Files changed (42) hide show
  1. package/dist/constants/generalAccounts.d.ts.map +1 -1
  2. package/dist/constants/generalAccounts.js +0 -1
  3. package/dist/constants/solautoConstants.d.ts +0 -1
  4. package/dist/constants/solautoConstants.d.ts.map +1 -1
  5. package/dist/constants/solautoConstants.js +3 -3
  6. package/dist/generated/errors/solauto.d.ts +8 -26
  7. package/dist/generated/errors/solauto.d.ts.map +1 -1
  8. package/dist/generated/errors/solauto.js +26 -59
  9. package/dist/index.js +2 -0
  10. package/dist/jupiter-sdk/errors/index.d.ts +9 -0
  11. package/dist/jupiter-sdk/errors/index.d.ts.map +1 -0
  12. package/dist/jupiter-sdk/errors/index.js +24 -0
  13. package/dist/jupiter-sdk/errors/jupiter.d.ts +127 -0
  14. package/dist/jupiter-sdk/errors/jupiter.d.ts.map +1 -0
  15. package/dist/jupiter-sdk/errors/jupiter.js +229 -0
  16. package/dist/jupiter-sdk/index.d.ts +10 -0
  17. package/dist/jupiter-sdk/index.d.ts.map +1 -0
  18. package/dist/jupiter-sdk/index.js +25 -0
  19. package/dist/jupiter-sdk/programs/index.d.ts +9 -0
  20. package/dist/jupiter-sdk/programs/index.d.ts.map +1 -0
  21. package/dist/jupiter-sdk/programs/index.js +24 -0
  22. package/dist/jupiter-sdk/programs/jupiter.d.ts +13 -0
  23. package/dist/jupiter-sdk/programs/jupiter.d.ts.map +1 -0
  24. package/dist/jupiter-sdk/programs/jupiter.js +36 -0
  25. package/dist/transactions/transactionUtils.d.ts +5 -0
  26. package/dist/transactions/transactionUtils.d.ts.map +1 -1
  27. package/dist/transactions/transactionUtils.js +46 -4
  28. package/dist/transactions/transactionsManager.d.ts +2 -1
  29. package/dist/transactions/transactionsManager.d.ts.map +1 -1
  30. package/dist/transactions/transactionsManager.js +12 -20
  31. package/package.json +1 -1
  32. package/src/constants/generalAccounts.ts +0 -3
  33. package/src/constants/solautoConstants.ts +1 -2
  34. package/src/generated/errors/solauto.ts +30 -88
  35. package/src/index.ts +3 -1
  36. package/src/jupiter-sdk/errors/index.ts +9 -0
  37. package/src/jupiter-sdk/errors/jupiter.ts +282 -0
  38. package/src/jupiter-sdk/index.ts +10 -0
  39. package/src/jupiter-sdk/programs/index.ts +9 -0
  40. package/src/jupiter-sdk/programs/jupiter.ts +52 -0
  41. package/src/transactions/transactionUtils.ts +72 -5
  42. package/src/transactions/transactionsManager.ts +26 -29
@@ -1,5 +1,6 @@
1
1
  import {
2
2
  Instruction,
3
+ ProgramError,
3
4
  TransactionBuilder,
4
5
  Umi,
5
6
  publicKey,
@@ -12,6 +13,7 @@ import {
12
13
  NATIVE_MINT,
13
14
  } from "@solana/spl-token";
14
15
  import {
16
+ InvalidRebalanceConditionError,
15
17
  LendingPlatform,
16
18
  ReferralState,
17
19
  SOLAUTO_PROGRAM_ID,
@@ -19,8 +21,10 @@ import {
19
21
  SolautoRebalanceType,
20
22
  TokenType,
21
23
  convertReferralFees,
24
+ createSolautoProgram,
22
25
  getMarginfiProtocolInteractionInstructionDataSerializer,
23
26
  getMarginfiRebalanceInstructionDataSerializer,
27
+ getSolautoErrorFromCode,
24
28
  isSolautoAction,
25
29
  solautoAction,
26
30
  } from "../generated";
@@ -50,12 +54,20 @@ import {
50
54
  import { eligibleForRebalance } from "../utils/solauto/generalUtils";
51
55
  import { getTokenAccount, getTokenAccountData } from "../utils/accountUtils";
52
56
  import {
57
+ createMarginfiProgram,
53
58
  getLendingAccountBorrowInstructionDataSerializer,
54
59
  getLendingAccountDepositInstructionDataSerializer,
55
60
  getLendingAccountRepayInstructionDataSerializer,
56
61
  getLendingAccountWithdrawInstructionDataSerializer,
62
+ getMarginfiErrorFromName,
57
63
  MARGINFI_PROGRAM_ID,
58
64
  } from "../marginfi-sdk";
65
+ import { TxHandler } from "../clients";
66
+ import {
67
+ createJupiterProgram,
68
+ getJupiterErrorFromName,
69
+ JUPITER_PROGRAM_ID,
70
+ } from "../jupiter-sdk";
59
71
 
60
72
  interface wSolTokenUsage {
61
73
  wSolTokenAccount: PublicKey;
@@ -577,17 +589,28 @@ export function requiresRefreshBeforeRebalance(client: SolautoClient) {
577
589
  ) {
578
590
  return true;
579
591
  } else if (client.solautoPositionData && !client.selfManaged) {
580
- if (client.livePositionUpdates.supplyAdjustment > BigInt(0) || client.livePositionUpdates.debtAdjustment > BigInt(0)) {
592
+ if (
593
+ client.livePositionUpdates.supplyAdjustment > BigInt(0) ||
594
+ client.livePositionUpdates.debtAdjustment > BigInt(0)
595
+ ) {
581
596
  return false;
582
597
  }
583
598
 
584
- const oldSupply = client.solautoPositionData.state.supply.amountUsed.baseUnit;
599
+ const oldSupply =
600
+ client.solautoPositionData.state.supply.amountUsed.baseUnit;
585
601
  const oldDebt = client.solautoPositionData.state.debt.amountUsed.baseUnit;
586
602
 
587
- const supplyDiff = (client.solautoPositionState?.supply.amountUsed.baseUnit ?? BigInt(0)) - oldSupply;
588
- const debtDiff = (client.solautoPositionState?.debt.amountUsed.baseUnit ?? BigInt(0)) - oldDebt;
603
+ const supplyDiff =
604
+ (client.solautoPositionState?.supply.amountUsed.baseUnit ?? BigInt(0)) -
605
+ oldSupply;
606
+ const debtDiff =
607
+ (client.solautoPositionState?.debt.amountUsed.baseUnit ?? BigInt(0)) -
608
+ oldDebt;
589
609
 
590
- if (Math.abs(Number(supplyDiff)) / Number(oldSupply) >= 0.01 || Math.abs(Number(debtDiff)) / Number(oldDebt) >= 0.01) {
610
+ if (
611
+ Math.abs(Number(supplyDiff)) / Number(oldSupply) >= 0.01 ||
612
+ Math.abs(Number(debtDiff)) / Number(oldDebt) >= 0.01
613
+ ) {
591
614
  return true;
592
615
  }
593
616
  }
@@ -769,3 +792,47 @@ export async function convertReferralFeesToDestination(
769
792
 
770
793
  return [tx, lookupTableAddresses];
771
794
  }
795
+
796
+ export function getErrorInfo(tx: TransactionBuilder, error: any) {
797
+ let canBeIgnored = false;
798
+ let errorName: string | undefined = undefined;
799
+ let errorInfo: string | undefined = undefined;
800
+
801
+ try {
802
+ let programError: ProgramError | null = null;
803
+
804
+ if (typeof error === "object" && (error as any)["InstructionError"]) {
805
+ const err = (error as any)["InstructionError"];
806
+ const errIx = tx.getInstructions()[Math.max(0, err[0] - 2)];
807
+ const errCode = err[1]["Custom"];
808
+
809
+ if (errIx.programId === SOLAUTO_PROGRAM_ID) {
810
+ programError = getSolautoErrorFromCode(errCode, createSolautoProgram());
811
+ if (
812
+ programError?.name ===
813
+ new InvalidRebalanceConditionError(createSolautoProgram()).name
814
+ ) {
815
+ canBeIgnored = true;
816
+ }
817
+ } else if (errIx.programId === MARGINFI_PROGRAM_ID) {
818
+ programError = getMarginfiErrorFromName(
819
+ errCode,
820
+ createMarginfiProgram()
821
+ );
822
+ } else if (errIx.programId === JUPITER_PROGRAM_ID) {
823
+ programError = getJupiterErrorFromName(errCode, createJupiterProgram());
824
+ }
825
+ }
826
+
827
+ if (programError) {
828
+ errorName = programError?.name;
829
+ errorName = programError?.message;
830
+ }
831
+ } catch {}
832
+
833
+ return {
834
+ errorName: errorName ?? "Unknown error",
835
+ errorInfo: errorInfo ?? "Unknown error",
836
+ canBeIgnored,
837
+ };
838
+ }
@@ -14,7 +14,7 @@ import {
14
14
  ErrorsToThrow,
15
15
  retryWithExponentialBackoff,
16
16
  } from "../utils/generalUtils";
17
- import { getTransactionChores } from "./transactionUtils";
17
+ import { getErrorInfo, getTransactionChores } from "./transactionUtils";
18
18
  import { PriorityFeeSetting, TransactionRunType } from "../types";
19
19
  import { ReferralStateManager, TxHandler } from "../clients";
20
20
  import {
@@ -183,10 +183,11 @@ export enum TransactionStatus {
183
183
 
184
184
  export type TransactionManagerStatuses = {
185
185
  name: string;
186
+ attemptNum: number;
186
187
  status: TransactionStatus;
188
+ moreInfo?: string;
187
189
  simulationSuccessful?: boolean;
188
190
  txSig?: string;
189
- attemptNum: number;
190
191
  }[];
191
192
 
192
193
  export class TransactionsManager {
@@ -253,7 +254,8 @@ export class TransactionsManager {
253
254
  status: TransactionStatus,
254
255
  attemptNum: number,
255
256
  txSig?: string,
256
- simulationSuccessful?: boolean
257
+ simulationSuccessful?: boolean,
258
+ moreInfo?: string
257
259
  ) {
258
260
  if (!this.statuses.filter((x) => x.name === name)) {
259
261
  this.statuses.push({
@@ -262,6 +264,7 @@ export class TransactionsManager {
262
264
  txSig,
263
265
  attemptNum,
264
266
  simulationSuccessful,
267
+ moreInfo,
265
268
  });
266
269
  } else {
267
270
  const idx = this.statuses.findIndex(
@@ -273,6 +276,9 @@ export class TransactionsManager {
273
276
  if (simulationSuccessful) {
274
277
  this.statuses[idx].simulationSuccessful = simulationSuccessful;
275
278
  }
279
+ if (moreInfo) {
280
+ this.statuses[idx].moreInfo = moreInfo;
281
+ }
276
282
  } else {
277
283
  this.statuses.push({
278
284
  name,
@@ -280,6 +286,7 @@ export class TransactionsManager {
280
286
  txSig,
281
287
  attemptNum,
282
288
  simulationSuccessful,
289
+ moreInfo,
283
290
  });
284
291
  }
285
292
  }
@@ -524,33 +531,23 @@ export class TransactionsManager {
524
531
  attemptNum,
525
532
  txSig ? bs58.encode(txSig) : undefined
526
533
  );
527
- } catch (e) {
528
- try {
529
- if (typeof e === "object" && (e as any)["InstructionError"]) {
530
- const err = (e as any)["InstructionError"];
531
- const errIx = err[0];
532
- const errCode = err[1]["Custom"];
533
-
534
- const solautoProgram =
535
- this.txHandler.umi.programs.get(SOLAUTO_PROGRAM_ID);
536
- const invalidRebalanceError = new InvalidRebalanceConditionError(
537
- solautoProgram
538
- );
539
-
540
- if (
541
- tx.getInstructions()[Math.max(0, errIx - 2)].programId ===
542
- SOLAUTO_PROGRAM_ID &&
543
- solautoProgram.getErrorFromCode(errCode)?.name ===
544
- invalidRebalanceError.name
545
- ) {
546
- this.updateStatus(txName, TransactionStatus.Skipped, attemptNum);
547
- return;
548
- }
549
- }
550
- } catch {}
534
+ } catch (e: any) {
535
+ const errorDetails = getErrorInfo(tx, e);
536
+
537
+ this.updateStatus(
538
+ txName,
539
+ errorDetails.canBeIgnored
540
+ ? TransactionStatus.Skipped
541
+ : TransactionStatus.Failed,
542
+ attemptNum,
543
+ undefined,
544
+ undefined,
545
+ errorDetails.errorInfo
546
+ );
551
547
 
552
- this.updateStatus(txName, TransactionStatus.Failed, attemptNum);
553
- throw e;
548
+ if (!errorDetails.canBeIgnored) {
549
+ throw e;
550
+ }
554
551
  }
555
552
  }
556
553
  }