@@ -17,16 +17,19 @@ along with web3.js. If not, see <http://www.gnu.org/licenses/>.
1717
1818import HttpProvider from "web3-providers-http" ;
1919import WebSocketProvider from "web3-providers-ws" ;
20+ import { isNullish } from "web3-validator" ;
2021import {
2122 EthExecutionAPI , JsonRpcResult , ProviderConnectInfo , ProviderMessage ,
2223 ProviderRpcError , Web3APIMethod , Web3APIPayload , Web3APIReturnType , Web3APISpec , Web3BaseProvider ,
2324 Web3Eip1193ProviderEventCallback ,
2425 Web3ProviderEventCallback ,
2526 Web3ProviderMessageEventCallback ,
26- Web3ProviderStatus
27+ Web3ProviderStatus ,
28+ JsonRpcResponseWithResult ,
2729} from "web3-types" ;
2830import { Eip1193Provider } from "web3-utils" ;
2931import { Transport , Network } from "./types.js" ;
32+ import { QuickNodeRateLimitError } from './errors.js' ;
3033
3134/*
3235This class can be used to create new providers only when there is custom logic required in each Request method like
@@ -68,13 +71,20 @@ API extends Web3APISpec = EthExecutionAPI,
6871 > (
6972 payload : Web3APIPayload < EthExecutionAPI , Method > ,
7073 requestOptions ?: RequestInit ,
71- ) : Promise < ResultType > {
74+ ) : Promise < JsonRpcResponseWithResult < ResultType > > {
7275
7376 if ( this . transport === Transport . HTTPS ) {
74- return ( ( this . provider as HttpProvider ) . request ( payload , requestOptions ) ) as unknown as Promise < ResultType > ;
75- }
77+ const res = await ( ( this . provider as HttpProvider ) . request ( payload , requestOptions ) ) as unknown as JsonRpcResponseWithResult < ResultType > ;
78+
79+ if ( typeof res === 'object' && ! isNullish ( res ) && 'error' in res && ! isNullish ( res . error ) && 'code' in res . error && ( res . error as { code : number } ) . code === 429 ) {
80+ // rate limiting error by quicknode;
81+ throw new QuickNodeRateLimitError ( ) ;
82+
83+ }
84+ return res ;
85+ }
7686
77- return ( ( this . provider as WebSocketProvider ) . request ( payload ) ) as unknown as Promise < ResultType > ;
87+ return ( this . provider as WebSocketProvider ) . request ( payload ) ;
7888
7989 }
8090
0 commit comments