@rango-dev/queue-manager-rango-preset 0.1.10-next.98 → 0.1.11-next.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/dist/actions/checkStatus.d.ts.map +1 -1
  2. package/dist/actions/createTransaction.d.ts.map +1 -1
  3. package/dist/actions/scheduleNextStep.d.ts.map +1 -1
  4. package/dist/constants.d.ts +1 -1
  5. package/dist/constants.d.ts.map +1 -1
  6. package/dist/helpers.d.ts +41 -13
  7. package/dist/helpers.d.ts.map +1 -1
  8. package/dist/hooks.d.ts.map +1 -1
  9. package/dist/index.d.ts +4 -11
  10. package/dist/index.d.ts.map +1 -1
  11. package/dist/numbers.d.ts +3 -0
  12. package/dist/numbers.d.ts.map +1 -0
  13. package/dist/queue-manager-rango-preset.cjs.development.js +511 -300
  14. package/dist/queue-manager-rango-preset.cjs.development.js.map +1 -1
  15. package/dist/queue-manager-rango-preset.cjs.production.min.js +1 -1
  16. package/dist/queue-manager-rango-preset.cjs.production.min.js.map +1 -1
  17. package/dist/queue-manager-rango-preset.esm.js +488 -286
  18. package/dist/queue-manager-rango-preset.esm.js.map +1 -1
  19. package/dist/shared-errors.d.ts +5 -37
  20. package/dist/shared-errors.d.ts.map +1 -1
  21. package/dist/shared-sentry.d.ts +1 -1
  22. package/dist/shared-sentry.d.ts.map +1 -1
  23. package/dist/shared.d.ts +35 -21
  24. package/dist/shared.d.ts.map +1 -1
  25. package/dist/types.d.ts +1 -0
  26. package/dist/types.d.ts.map +1 -1
  27. package/package.json +2 -2
  28. package/readme.md +1 -9
  29. package/src/actions/checkStatus.ts +54 -3
  30. package/src/actions/createTransaction.ts +2 -3
  31. package/src/actions/executeTransaction.ts +3 -3
  32. package/src/actions/scheduleNextStep.ts +1 -0
  33. package/src/constants.ts +1 -1
  34. package/src/helpers.ts +202 -172
  35. package/src/hooks.ts +2 -1
  36. package/src/index.ts +19 -44
  37. package/src/numbers.ts +68 -0
  38. package/src/shared-errors.ts +53 -76
  39. package/src/shared-sentry.ts +1 -1
  40. package/src/shared.ts +187 -58
  41. package/src/types.ts +1 -0
package/src/hooks.ts CHANGED
@@ -54,8 +54,9 @@ function useQueueManager(params: UseQueueManagerParams): void {
54
54
  evmChains: params.evmChains,
55
55
  wallet_network: params.lastConnectedWallet,
56
56
  manager,
57
+ notifier: params.notifier,
57
58
  });
58
- retryOn(params.lastConnectedWallet, manager);
59
+ retryOn(params.lastConnectedWallet, params.notifier, manager);
59
60
  }
60
61
  }, [params.lastConnectedWallet]);
61
62
 
package/src/index.ts CHANGED
@@ -1,53 +1,28 @@
1
- import { BlockReason, SwapActionTypes, SwapQueueDef } from './types';
2
- import { checkStatus } from './actions/checkStatus';
3
- import { createTransaction } from './actions/createTransaction';
4
- import { executeTransaction } from './actions/executeTransaction';
5
- import { scheduleNextStep } from './actions/scheduleNextStep';
6
- import { start } from './actions/start';
7
- import {
8
- onBlockForChangeNetwork,
9
- onBlockForConnectWallet,
10
- onDependsOnOtherQueues,
11
- } from './helpers';
12
-
13
- /**
14
- *
15
- * The idea behind this queue is to be able dynamically add some steps.
16
- * After running a swap, it can be blocked (like on waiting for switch netwrok)
17
- * or waits for something happend (like checking status of a transaction from server)
18
- *
19
- */
20
- export const swapQueueDef: SwapQueueDef = {
21
- name: 'swap',
22
- actions: {
23
- [SwapActionTypes.START]: start,
24
- [SwapActionTypes.SCHEDULE_NEXT_STEP]: scheduleNextStep,
25
- [SwapActionTypes.CREATE_TRANSACTION]: createTransaction,
26
- [SwapActionTypes.EXECUTE_TRANSACTION]: executeTransaction,
27
- [SwapActionTypes.CHECK_TRANSACTION_STATUS]: checkStatus,
28
- },
29
- run: [SwapActionTypes.START],
30
- whenTaskBlocked: (event: any, meta: any) => {
31
- if (event.reason.reason === BlockReason.WAIT_FOR_CONNECT_WALLET) {
32
- onBlockForConnectWallet(event, meta);
33
- } else if (event.reason.reason === BlockReason.WAIT_FOR_NETWORK_CHANGE) {
34
- onBlockForChangeNetwork(event, meta);
35
- } else if (event.reason.reason === BlockReason.DEPENDS_ON_OTHER_QUEUES) {
36
- onDependsOnOtherQueues(event, meta);
37
- }
38
- },
39
- };
40
-
1
+ export { PrettyError, prettifyErrorMessage } from './shared-errors';
41
2
  export { SwapQueueContext, SwapStorage } from './types';
42
- export { PendingSwapWithQueueID } from './shared';
43
-
44
- // TODO: This is for our frontend, some of them can be removed.
3
+ export {
4
+ PendingSwapWithQueueID,
5
+ getCurrentBlockchainOfOrNull,
6
+ getRelatedWalletOrNull,
7
+ getRelatedWallet,
8
+ MessageSeverity,
9
+ PendingSwapStep,
10
+ PendingSwapNetworkStatus,
11
+ PendingSwap,
12
+ EventType,
13
+ SwapProgressNotification,
14
+ calculatePendingSwap,
15
+ } from './shared';
45
16
  export {
46
17
  updateSwapStatus,
47
18
  checkWaitingForNetworkChange,
48
19
  getCurrentStep,
49
20
  getEvmProvider,
50
- getRelatedWallet,
51
21
  cancelSwap,
22
+ getRequiredWallet,
23
+ getRunningSwaps,
24
+ splitWalletNetwork,
25
+ resetRunningSwapNotifsOnPageLoad,
52
26
  } from './helpers';
27
+ export { swapQueueDef } from './queueDef';
53
28
  export { useMigration, useQueueManager } from './hooks';
package/src/numbers.ts ADDED
@@ -0,0 +1,68 @@
1
+ import BigNumber from 'bignumber.js';
2
+
3
+ export const numberToString = (
4
+ number: BigNumber | string | null,
5
+ minDecimals: number | null = null,
6
+ maxDecimals: number | null = null
7
+ ): string => {
8
+ if (number === null) return '';
9
+ if (number === '') return '';
10
+ const n = new BigNumber(number);
11
+ const roundingMode = 1;
12
+ let maxI = 1000;
13
+ for (let i = 0; i < 60; i++) {
14
+ if (new BigNumber(n.toFixed(i, roundingMode)).eq(n)) {
15
+ maxI = i;
16
+ break;
17
+ }
18
+ }
19
+
20
+ if (n.gte(10000)) return n.toFormat(0, roundingMode);
21
+ if (n.gte(1000))
22
+ return n.toFormat(
23
+ Math.min(
24
+ maxI,
25
+ Math.min(maxDecimals || 100, Math.max(minDecimals || 0, 1))
26
+ ),
27
+ roundingMode
28
+ );
29
+ if (n.gte(100))
30
+ return n.toFormat(
31
+ Math.min(
32
+ maxI,
33
+ Math.min(maxDecimals || 100, Math.max(minDecimals || 0, 1))
34
+ ),
35
+ roundingMode
36
+ );
37
+ if (n.gte(1))
38
+ return n.toFormat(
39
+ Math.min(
40
+ maxI,
41
+ Math.min(maxDecimals || 100, Math.max(minDecimals || 0, 2))
42
+ ),
43
+ roundingMode
44
+ );
45
+ if (n.gte(0.01))
46
+ return n.toFormat(
47
+ Math.min(
48
+ maxI,
49
+ Math.min(maxDecimals || 100, Math.max(minDecimals || 0, 4))
50
+ ),
51
+ roundingMode
52
+ );
53
+ for (let i = minDecimals || 4; i < 17; i++)
54
+ if (n.gte(Math.pow(10, -i)))
55
+ return n.toFormat(
56
+ Math.min(
57
+ maxI,
58
+ Math.min(maxDecimals || 100, Math.max(minDecimals || 0, i))
59
+ ),
60
+ roundingMode
61
+ );
62
+ if (n.isEqualTo(0)) return '0';
63
+
64
+ return n.toFormat(
65
+ Math.min(maxI, Math.min(maxDecimals || 100, Math.max(minDecimals || 0, 8))),
66
+ roundingMode
67
+ );
68
+ };
@@ -1,61 +1,20 @@
1
- import { WalletType } from '@rango-dev/wallets-shared';
2
- import { SignerErrorCode, isSignerErrorCode } from 'rango-types';
1
+ import {
2
+ APIErrorCode,
3
+ SignerError,
4
+ SignerErrorCode,
5
+ isAPIErrorCode,
6
+ isSignerErrorCode,
7
+ } from 'rango-types';
3
8
 
4
9
  export type ErrorDetail = {
5
10
  extraMessage: string;
6
11
  extraMessageDetail?: string | null | undefined;
7
- extraMessageErrorCode: string | null;
12
+ extraMessageErrorCode: SignerErrorCode | APIErrorCode | null;
8
13
  };
9
14
 
10
- export enum APIErrorCode {
11
- TX_FAIL = 'TX_FAIL',
12
- FETCH_TX_FAILED = 'FETCH_TX_FAILED',
13
- USER_REJECT = 'USER_REJECT',
14
- CALL_WALLET_FAILED = 'CALL_WALLET_FAILED',
15
- SEND_TX_FAILED = 'SEND_TX_FAILED',
16
- CALL_OR_SEND_FAILED = 'CALL_OR_SEND_FAILED',
17
- USER_CANCEL = 'USER_CANCEL',
18
- CLIENT_UNEXPECTED_BEHAVIOUR = 'CLIENT_UNEXPECTED_BEHAVIOUR',
19
- }
20
-
21
- export enum ApiMethodName {
22
- RequestingSwapTransaction = 'Requesting Swap Transaction',
23
- CreatingSwap = 'Creating Swap',
24
- CheckingTransactionStatus = 'Checking transaction status',
25
- CreateTransaction = 'Create Transaction',
26
- CheckApproval = 'Check TX Approval',
27
- GettingSwapDetail = 'Getting Swap Detail',
28
- GettingUserLimits = 'Getting user limits',
29
- }
30
-
31
- export enum TransactionName {
32
- GenericTransaction = 'transaction',
33
- SendingOneInchTransaction = '1inch transaction',
34
- Approval = 'approve transaction',
35
- }
36
-
37
- export const ERROR_ASSERTION_FAILED = 'Assertion failed (Unexpected behaviour)';
38
-
39
- export const ERROR_COMMUNICATING_WITH_API = (
40
- apiMethodName: ApiMethodName
41
- ): string => `Unexpected response from API (${apiMethodName})`;
42
-
43
- export const ERROR_DESCRIPTION_UNSUPPORTED_TRANSACTION = (
44
- method: string,
45
- walletType: WalletType
46
- ): string => `method: ${method} call is unsupported for wallet ${walletType}`;
47
-
48
- export const ERROR_SIGNING_TRANSACTION = (
49
- transactionName: TransactionName
50
- ): string => `Error sending ${transactionName}`;
51
- export const ERROR_REJECTING_TRANSACTION = 'User rejected the message signing';
52
-
53
- export const ERROR_CREATE_TRANSACTION =
54
- 'Create transaction failed in Rango Server';
55
- export const ERROR_INPUT_WALLET_NOT_FOUND = 'Input wallet not found';
56
-
57
- export const DEFAULT_WALLET_INJECTION_ERROR =
58
- 'Failed to connect to wallet, if you have turned injection off (disable default wallet for xDefi), turn it on and refresh the page';
15
+ const ERROR_ASSERTION_FAILED = 'Assertion failed (Unexpected behaviour)';
16
+ const ERROR_CREATE_TRANSACTION = 'Create transaction failed in Rango Server';
17
+ const ERROR_INPUT_WALLET_NOT_FOUND = 'Input wallet not found';
59
18
 
60
19
  type ErrorRoot = string | Record<string, string> | null;
61
20
 
@@ -63,6 +22,7 @@ export class PrettyError extends Error {
63
22
  private readonly detail?: string;
64
23
  private readonly root?: ErrorRoot;
65
24
  private readonly code?: APIErrorCode;
25
+ public _isPrettyError = true;
66
26
 
67
27
  constructor(
68
28
  code: APIErrorCode,
@@ -72,11 +32,19 @@ export class PrettyError extends Error {
72
32
  ) {
73
33
  super(m);
74
34
  Object.setPrototypeOf(this, PrettyError.prototype);
35
+ PrettyError.prototype._isPrettyError = true;
75
36
  this.code = code;
76
37
  this.detail = detail;
77
38
  this.root = root;
78
39
  }
79
40
 
41
+ static isPrettyError(obj: unknown): obj is PrettyError {
42
+ return (
43
+ obj instanceof PrettyError ||
44
+ Object.prototype.hasOwnProperty('_isPrettyError')
45
+ );
46
+ }
47
+
80
48
  getErrorDetail(): ErrorDetail {
81
49
  const rawMessage =
82
50
  typeof this.root === 'object' && this.root && this.root.error
@@ -97,7 +65,7 @@ export class PrettyError extends Error {
97
65
 
98
66
  static AssertionFailed(m: string): PrettyError {
99
67
  return new PrettyError(
100
- APIErrorCode.CLIENT_UNEXPECTED_BEHAVIOUR,
68
+ 'CLIENT_UNEXPECTED_BEHAVIOUR',
101
69
  ERROR_ASSERTION_FAILED,
102
70
  m
103
71
  );
@@ -108,7 +76,7 @@ export class PrettyError extends Error {
108
76
  statusCode: number | string
109
77
  ): PrettyError {
110
78
  return new PrettyError(
111
- APIErrorCode.TX_FAIL,
79
+ 'TX_FAIL',
112
80
  message,
113
81
  null,
114
82
  `status code = ${statusCode}`
@@ -117,7 +85,7 @@ export class PrettyError extends Error {
117
85
 
118
86
  static CreateTransaction(detail: string): PrettyError {
119
87
  return new PrettyError(
120
- APIErrorCode.FETCH_TX_FAILED,
88
+ 'FETCH_TX_FAILED',
121
89
  ERROR_CREATE_TRANSACTION,
122
90
  null,
123
91
  detail
@@ -126,7 +94,7 @@ export class PrettyError extends Error {
126
94
 
127
95
  static WalletMissing(): PrettyError {
128
96
  return new PrettyError(
129
- APIErrorCode.CLIENT_UNEXPECTED_BEHAVIOUR,
97
+ 'CLIENT_UNEXPECTED_BEHAVIOUR',
130
98
  ERROR_INPUT_WALLET_NOT_FOUND,
131
99
  null,
132
100
  'Server requested for a blockchain or address not selected by user'
@@ -135,7 +103,7 @@ export class PrettyError extends Error {
135
103
 
136
104
  static BlockchainMissing(): PrettyError {
137
105
  return new PrettyError(
138
- APIErrorCode.CLIENT_UNEXPECTED_BEHAVIOUR,
106
+ 'CLIENT_UNEXPECTED_BEHAVIOUR',
139
107
  ERROR_INPUT_WALLET_NOT_FOUND,
140
108
  null,
141
109
  'Server requested for a blockchain or address not selected by user'
@@ -143,33 +111,18 @@ export class PrettyError extends Error {
143
111
  }
144
112
  }
145
113
 
146
- export const ERROR_GETTING_BEST_ROUTE = (status: number | string): string =>
147
- `Failed to get best route (status: ${status}), please try again.`;
148
-
149
- export const ERROR_CONFIRM_SWAP = (status?: number | string): string =>
150
- `Failed to confirm swap (${!!status ? 'status' : 'route'}: ${
151
- status || null
152
- }), please try again.`;
153
-
154
- export const WARNING_STARKNET_FOUND =
155
- 'StarknNet blockchain is still an ALPHA version. As such, delays may occur, and catastrophic bugs may lurk.';
156
-
157
- function isAPIErrorCode(value: string): value is APIErrorCode {
158
- return (Object.values(APIErrorCode) as string[]).includes(value);
159
- }
160
-
161
114
  export function mapAppErrorCodesToAPIErrorCode(
162
115
  errorCode: string | null
163
116
  ): APIErrorCode {
164
- const defaultErrorCode = APIErrorCode.CLIENT_UNEXPECTED_BEHAVIOUR;
117
+ const defaultErrorCode = 'CLIENT_UNEXPECTED_BEHAVIOUR';
165
118
  try {
166
119
  if (!errorCode) return defaultErrorCode;
167
120
  if (isAPIErrorCode(errorCode)) return errorCode;
168
121
  if (isSignerErrorCode(errorCode)) {
169
122
  const t: { [key in SignerErrorCode]: APIErrorCode } = {
170
- [SignerErrorCode.REJECTED_BY_USER]: APIErrorCode.USER_REJECT,
171
- [SignerErrorCode.SIGN_TX_ERROR]: APIErrorCode.CALL_WALLET_FAILED,
172
- [SignerErrorCode.SEND_TX_ERROR]: APIErrorCode.SEND_TX_FAILED,
123
+ [SignerErrorCode.REJECTED_BY_USER]: 'USER_REJECT',
124
+ [SignerErrorCode.SIGN_TX_ERROR]: 'CALL_WALLET_FAILED',
125
+ [SignerErrorCode.SEND_TX_ERROR]: 'SEND_TX_FAILED',
173
126
  [SignerErrorCode.NOT_IMPLEMENTED]: defaultErrorCode,
174
127
  [SignerErrorCode.OPERATION_UNSUPPORTED]: defaultErrorCode,
175
128
  [SignerErrorCode.UNEXPECTED_BEHAVIOUR]: defaultErrorCode,
@@ -181,3 +134,27 @@ export function mapAppErrorCodesToAPIErrorCode(
181
134
  return defaultErrorCode;
182
135
  }
183
136
  }
137
+
138
+ export const prettifyErrorMessage = (obj: unknown): ErrorDetail => {
139
+ if (!obj) return { extraMessage: '', extraMessageErrorCode: null };
140
+ if (PrettyError.isPrettyError(obj)) return obj.getErrorDetail();
141
+ if (SignerError.isSignerError(obj)) {
142
+ const t = obj.getErrorDetail();
143
+ return {
144
+ extraMessage: t.message,
145
+ extraMessageDetail: t.detail,
146
+ extraMessageErrorCode: t.code,
147
+ };
148
+ }
149
+ if (obj instanceof Error)
150
+ return {
151
+ extraMessage: obj.toString(),
152
+ extraMessageErrorCode: null,
153
+ };
154
+ if (typeof obj !== 'string')
155
+ return {
156
+ extraMessage: JSON.stringify(obj),
157
+ extraMessageErrorCode: null,
158
+ };
159
+ return { extraMessage: obj, extraMessageErrorCode: null };
160
+ };
@@ -1,6 +1,6 @@
1
- import { WalletType } from '@rango-dev/wallets-shared';
2
1
  import * as Sentry from '@sentry/browser';
3
2
  import { PendingSwap, PendingSwapStep } from './shared';
3
+ import { WalletType } from '@rango-dev/wallets-shared';
4
4
 
5
5
  export function logRPCError(
6
6
  error: unknown,