From d5cc2eba1405bd69acd5bce283d4509f02297c2b Mon Sep 17 00:00:00 2001 From: Danut Date: Sun, 26 Jan 2025 13:38:21 +0200 Subject: [PATCH] Added transaction and message cancel signing handle --- .../providers/DappProvider/DappProvider.ts | 36 ++++++++++++------- .../signMessage/handleSignMessageError.ts | 22 ++++++++++++ .../handleSignTransactionError.ts | 25 +++++++++++++ 3 files changed, 71 insertions(+), 12 deletions(-) create mode 100644 src/core/providers/DappProvider/helpers/signMessage/handleSignMessageError.ts create mode 100644 src/core/providers/DappProvider/helpers/signTransactions/handleSignTransactionError.ts diff --git a/src/core/providers/DappProvider/DappProvider.ts b/src/core/providers/DappProvider/DappProvider.ts index 803851b3..a09d7780 100644 --- a/src/core/providers/DappProvider/DappProvider.ts +++ b/src/core/providers/DappProvider/DappProvider.ts @@ -3,11 +3,13 @@ import { Transaction } from '@multiversx/sdk-core/out/transaction'; import { IProvider } from '../types/providerFactory.types'; import { login } from './helpers/login/login'; import { logout } from './helpers/logout/logout'; +import { handleSignMessageError } from './helpers/signMessage/handleSignMessageError'; import { signMessage } from './helpers/signMessage/signMessage'; import { verifyMessage, VerifyMessageReturnType } from './helpers/signMessage/verifyMessage'; +import { handleSignTransactionError } from './helpers/signTransactions/handleSignTransactionError'; import { signTransactionsWithProvider, SignTransactionsOptionsType @@ -53,12 +55,17 @@ export class DappProvider { transactions: Transaction[], options?: SignTransactionsOptionsType ): Promise { - const signedTransactions = await signTransactionsWithProvider({ - provider: this.provider, - transactions, - options - }); - return signedTransactions; + try { + const signedTransactions = await signTransactionsWithProvider({ + provider: this.provider, + transactions, + options + }); + return signedTransactions; + } catch (error) { + const errorMessage = handleSignTransactionError(error); + throw new Error(errorMessage); + } } async signMessage( @@ -67,12 +74,17 @@ export class DappProvider { hasConsentPopup?: boolean; } ): Promise { - const signedMessage = await signMessage({ - provider: this.provider, - message, - options - }); - return signedMessage; + try { + const signedMessage = await signMessage({ + provider: this.provider, + message, + options + }); + return signedMessage; + } catch (error) { + const errorMessage = handleSignMessageError(error); + throw new Error(errorMessage); + } } verifyMessage(signedMessage: string): VerifyMessageReturnType { diff --git a/src/core/providers/DappProvider/helpers/signMessage/handleSignMessageError.ts b/src/core/providers/DappProvider/helpers/signMessage/handleSignMessageError.ts new file mode 100644 index 00000000..6ca34806 --- /dev/null +++ b/src/core/providers/DappProvider/helpers/signMessage/handleSignMessageError.ts @@ -0,0 +1,22 @@ +import { ERROR_SIGNING } from 'constants/errorMessages.constants'; +import { + CANCEL_TRANSACTION_TOAST_DEFAULT_DURATION, + CANCEL_TRANSACTION_TOAST_ID +} from 'constants/transactions.constants'; +import { createCustomToast } from 'store/actions'; + +export function handleSignMessageError(error?: unknown) { + const errorMessage = + (error as Error)?.message || (error as string) || ERROR_SIGNING; + console.error(errorMessage); + + createCustomToast({ + toastId: `${CANCEL_TRANSACTION_TOAST_ID}-${Date.now()}`, + duration: CANCEL_TRANSACTION_TOAST_DEFAULT_DURATION, + icon: 'warning', + iconClassName: 'warning', + message: ERROR_SIGNING + }); + + return errorMessage; +} diff --git a/src/core/providers/DappProvider/helpers/signTransactions/handleSignTransactionError.ts b/src/core/providers/DappProvider/helpers/signTransactions/handleSignTransactionError.ts new file mode 100644 index 00000000..161f8c40 --- /dev/null +++ b/src/core/providers/DappProvider/helpers/signTransactions/handleSignTransactionError.ts @@ -0,0 +1,25 @@ +import { + ERROR_SIGNING, + TRANSACTION_CANCELLED +} from 'constants/errorMessages.constants'; +import { + CANCEL_TRANSACTION_TOAST_DEFAULT_DURATION, + CANCEL_TRANSACTION_TOAST_ID +} from 'constants/transactions.constants'; +import { createCustomToast } from 'store/actions'; + +export function handleSignTransactionError(error?: unknown) { + const errorMessage = (error as Error)?.message || ERROR_SIGNING; + const isTxCancelled = errorMessage.includes(TRANSACTION_CANCELLED); + if (isTxCancelled) { + createCustomToast({ + toastId: `${CANCEL_TRANSACTION_TOAST_ID}-${Date.now()}`, + duration: CANCEL_TRANSACTION_TOAST_DEFAULT_DURATION, + icon: 'warning', + iconClassName: 'warning', + message: TRANSACTION_CANCELLED + }); + } + + return errorMessage; +}