Skip to content

Commit

Permalink
feat: Add option to disable retries for specific methods
Browse files Browse the repository at this point in the history
  • Loading branch information
KABBOUCHI committed Nov 24, 2023
1 parent f7a9281 commit 06cb187
Showing 1 changed file with 40 additions and 4 deletions.
44 changes: 40 additions & 4 deletions src/providers/retry-provider.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,9 @@ export class JsonRpcRetryProvider extends JsonRpcProvider {
urlIndex: number = 0
timeouts: number[] = [10_000, 15_000, 20_000]
delay: number = 300
disableRetriesForMethods: string[] = ['eth_sendRawTransaction', 'eth_signTransaction', 'txn_broadcast']

constructor (urls: string | string[], options?: { timeouts?: number[], delay?: number }) {
constructor (urls: string | string[], options?: { timeouts?: number[], delay?: number, disableRetriesForMethods?: string[] }) {
urls = Array.isArray(urls) ? urls : [urls]

super(urls[0])
Expand All @@ -23,10 +24,18 @@ export class JsonRpcRetryProvider extends JsonRpcProvider {
this.delay = options.delay
}

if (options && options.disableRetriesForMethods) {
this.disableRetriesForMethods = options.disableRetriesForMethods
}

Object.setPrototypeOf(this, JsonRpcRetryProvider.prototype)
}

public send (method: string, params: Array<any>): Promise<any> {
if (this.disableRetriesForMethods.includes(method)) {
return super.send(method, params)
}

const operation = () => super.send(method, params)

return retry(operation, {
Expand All @@ -45,8 +54,9 @@ export class JsonRpcRetryBatchProvider extends JsonRpcBatchProvider {
urlIndex: number = 0
timeouts: number[] = [10_000, 15_000, 20_000]
delay: number = 300
disableRetriesForMethods: string[] = ['eth_sendRawTransaction', 'eth_signTransaction', 'txn_broadcast']

constructor (urls: string | string[], options?: { timeouts?: number[], delay?: number }) {
constructor (urls: string | string[], options?: { timeouts?: number[], delay?: number, disableRetriesForMethods?: string[] }) {
urls = Array.isArray(urls) ? urls : [urls]

super(urls[0])
Expand All @@ -62,10 +72,18 @@ export class JsonRpcRetryBatchProvider extends JsonRpcBatchProvider {
this.delay = options.delay
}

if (options && options.disableRetriesForMethods) {
this.disableRetriesForMethods = options.disableRetriesForMethods
}

Object.setPrototypeOf(this, JsonRpcRetryProvider.prototype)
}

public send (method: string, params: Array<any>): Promise<any> {
if (this.disableRetriesForMethods.includes(method)) {
return super.send(method, params)
}

const operation = () => super.send(method, params)

return retry(operation, {
Expand All @@ -84,8 +102,9 @@ export class StaticJsonRpcRetryProvider extends StaticJsonRpcProvider {
urlIndex: number = 0
timeouts: number[] = [10_000, 15_000, 20_000]
delay: number = 300
disableRetriesForMethods: string[] = ['eth_sendRawTransaction', 'eth_signTransaction', 'txn_broadcast']

constructor (urls: string | string[], options?: { timeouts?: number[], delay?: number }) {
constructor (urls: string | string[], options?: { timeouts?: number[], delay?: number, disableRetriesForMethods?: string[] }) {
urls = Array.isArray(urls) ? urls : [urls]

super(urls[0])
Expand All @@ -101,10 +120,18 @@ export class StaticJsonRpcRetryProvider extends StaticJsonRpcProvider {
this.delay = options.delay
}

if (options && options.disableRetriesForMethods) {
this.disableRetriesForMethods = options.disableRetriesForMethods
}

Object.setPrototypeOf(this, StaticJsonRpcRetryProvider.prototype)
}

public send (method: string, params: Array<any>): Promise<any> {
if (this.disableRetriesForMethods.includes(method)) {
return super.send(method, params)
}

const operation = () => super.send(method, params)

return retry(operation, {
Expand All @@ -123,8 +150,9 @@ export class StaticJsonRpcRetryBatchProvider extends StaticJsonRpcBatchProvider
urlIndex: number = 0
timeouts: number[] = [10_000, 15_000, 20_000]
delay: number = 300
disableRetriesForMethods: string[] = ['eth_sendRawTransaction', 'eth_signTransaction', 'txn_broadcast']

constructor (urls: string | string[], options?: { timeouts?: number[], delay?: number }) {
constructor (urls: string | string[], options?: { timeouts?: number[], delay?: number, disableRetriesForMethods?: string[] }) {
urls = Array.isArray(urls) ? urls : [urls]

super(urls[0])
Expand All @@ -140,10 +168,18 @@ export class StaticJsonRpcRetryBatchProvider extends StaticJsonRpcBatchProvider
this.delay = options.delay
}

if (options && options.disableRetriesForMethods) {
this.disableRetriesForMethods = options.disableRetriesForMethods
}

Object.setPrototypeOf(this, StaticJsonRpcRetryProvider.prototype)
}

public send (method: string, params: Array<any>): Promise<any> {
if (this.disableRetriesForMethods.includes(method)) {
return super.send(method, params)
}

const operation = () => super.send(method, params)

return retry(operation, {
Expand Down

0 comments on commit 06cb187

Please sign in to comment.