@@ -6,26 +6,26 @@ import {
66 ErrorHandler ,
77 PanicErrorHandler ,
88 RevertErrorHandler ,
9+ RpcErrorHandler ,
10+ UserRejectionHandler ,
911} from './errors/handlers'
10- import { rpcErrorResult , unknownErrorResult , userRejectErrorResult } from './errors/results'
12+ import { unknownErrorResult } from './errors/results'
1113
1214export class ErrorDecoder {
13- private readonly errorHandlers : {
14- predicate : ( data : string ) => boolean
15- handler : ErrorHandler [ 'handle' ]
16- } [ ] = [ ]
15+ private readonly errorHandlers : ErrorHandler [ ] = [ ]
1716
1817 private constructor (
1918 handlers : ErrorHandler [ ] ,
2019 public readonly errorInterface : Interface | undefined ,
2120 ) {
2221 this . errorHandlers = handlers . map ( ( handler ) => ( {
2322 predicate : handler . predicate ,
24- handler : handler . handle ,
23+ handle : handler . handle ,
2524 } ) )
2625 }
2726
2827 private async getContractOrTransactionError ( error : Error ) : Promise < Error > {
28+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
2929 const errorReceipt = ( error as any ) . receipt as TransactionReceipt
3030
3131 if ( ! errorReceipt ) return error
@@ -56,12 +56,12 @@ export class ErrorDecoder {
5656 }
5757 }
5858
59- private getDataFromError ( error : Error ) : string {
59+ private getDataFromError ( error : Error ) : string | undefined {
6060 // eslint-disable-next-line @typescript-eslint/no-explicit-any
6161 const errorData = ( error as any ) . data ?? ( error as any ) . error ?. data
6262
6363 if ( errorData === undefined ) {
64- throw error
64+ return undefined
6565 }
6666
6767 let returnData = typeof errorData === 'string' ? errorData : errorData . data
@@ -71,7 +71,7 @@ export class ErrorDecoder {
7171 }
7272
7373 if ( returnData === undefined || typeof returnData !== 'string' ) {
74- throw error
74+ return undefined
7575 }
7676
7777 return returnData
@@ -82,39 +82,25 @@ export class ErrorDecoder {
8282 return unknownErrorResult ( {
8383 data : undefined ,
8484 // eslint-disable-next-line @typescript-eslint/no-explicit-any
85- reason : ( error as any ) . message ?? 'Unexpected error' ,
85+ reason : ( error as any ) . message ?? 'Invalid error' ,
8686 } )
8787 }
8888
89- try {
90- const targetError = await this . getContractOrTransactionError ( error )
91- const returnData = this . getDataFromError ( targetError )
89+ const targetError = await this . getContractOrTransactionError ( error )
90+ const returnData = this . getDataFromError ( targetError )
9291
93- for ( const { predicate, handler } of this . errorHandlers ) {
94- if ( predicate ( returnData ) ) {
95- return handler ( returnData , this . errorInterface )
96- }
92+ for ( const { predicate, handle } of this . errorHandlers ) {
93+ if ( predicate ( returnData , targetError ) ) {
94+ return handle ( returnData , { errorInterface : this . errorInterface , error : targetError } )
9795 }
98-
99- return unknownErrorResult ( {
100- data : returnData ,
101- // eslint-disable-next-line @typescript-eslint/no-explicit-any
102- reason : ( error as any ) . message ?? 'Unrecognised error' ,
103- } )
104- } catch ( e ) {
105- if ( error . message ) {
106- if ( error . message . includes ( 'rejected transaction' ) ) {
107- return userRejectErrorResult ( { data : null , reason : error . message } )
108- }
109- // eslint-disable-next-line @typescript-eslint/no-explicit-any
110- const rpcError = error as any
111- if ( rpcError . code !== undefined ) {
112- return rpcErrorResult ( { data : null , name : rpcError . code , reason : error . message } )
113- }
114- return unknownErrorResult ( { data : null , reason : error . message } )
115- }
116- return unknownErrorResult ( { data : null } )
11796 }
97+
98+ return unknownErrorResult ( {
99+ data : returnData ,
100+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
101+ reason : ( targetError as any ) ?. message ?? 'Unexpected error' ,
102+ name : targetError ?. name ,
103+ } )
118104 }
119105
120106 public static create (
@@ -142,6 +128,8 @@ export class ErrorDecoder {
142128 new RevertErrorHandler ( ) ,
143129 new PanicErrorHandler ( ) ,
144130 new CustomErrorHandler ( ) ,
131+ new UserRejectionHandler ( ) ,
132+ new RpcErrorHandler ( ) ,
145133 ...( additionalErrorHandlers ?? [ ] ) ,
146134 ]
147135 return new ErrorDecoder ( handlers , errorInterface )
0 commit comments