diff --git a/packages/rpc-provider/src/http/index.ts b/packages/rpc-provider/src/http/index.ts index 10d54ccfde..02a603c1e5 100644 --- a/packages/rpc-provider/src/http/index.ts +++ b/packages/rpc-provider/src/http/index.ts @@ -84,8 +84,11 @@ export default class HttpProvider implements ProviderInterface { * @description HTTP Provider does not have 'on' emitters. WebSockets should be used instead. */ // eslint-disable-next-line @typescript-eslint/no-unused-vars - public on (type: ProviderInterfaceEmitted, sub: ProviderInterfaceEmitCb): void { + public on (type: ProviderInterfaceEmitted, sub: ProviderInterfaceEmitCb): () => void { l.error('HTTP Provider does not have \'on\' emitters, use WebSockets instead'); + return (): void => { + // noop + }; } /** diff --git a/packages/rpc-provider/src/mock/index.ts b/packages/rpc-provider/src/mock/index.ts index 080c6749f4..d80f65d8f3 100644 --- a/packages/rpc-provider/src/mock/index.ts +++ b/packages/rpc-provider/src/mock/index.ts @@ -104,8 +104,11 @@ export default class Mock implements ProviderInterface { return true; } - public on (type: ProviderInterfaceEmitted, sub: ProviderInterfaceEmitCb): void { + public on (type: ProviderInterfaceEmitted, sub: ProviderInterfaceEmitCb): () => void { this.emitter.on(type, sub); + return (): void => { + this.emitter.removeListener(type, sub); + }; } // eslint-disable-next-line @typescript-eslint/require-await diff --git a/packages/rpc-provider/src/types.ts b/packages/rpc-provider/src/types.ts index 96559ce626..aa9dcb499e 100644 --- a/packages/rpc-provider/src/types.ts +++ b/packages/rpc-provider/src/types.ts @@ -47,7 +47,7 @@ export interface ProviderInterface { clone (): ProviderInterface; disconnect (): void; isConnected (): boolean; - on (type: ProviderInterfaceEmitted, sub: ProviderInterfaceEmitCb): void; + on (type: ProviderInterfaceEmitted, sub: ProviderInterfaceEmitCb): () => void; send (method: string, params: any[]): Promise; subscribe (type: string, method: string, params: any[], cb: ProviderInterfaceCallback): Promise; unsubscribe (type: string, method: string, id: number): Promise; diff --git a/packages/rpc-provider/src/ws/Provider.ts b/packages/rpc-provider/src/ws/Provider.ts index 2f5a24312c..1352e941c5 100644 --- a/packages/rpc-provider/src/ws/Provider.ts +++ b/packages/rpc-provider/src/ws/Provider.ts @@ -167,9 +167,13 @@ export default class WsProvider implements WSProviderInterface { * @summary Listens on events after having subscribed using the [[subscribe]] function. * @param {ProviderInterfaceEmitted} type Event * @param {ProviderInterfaceEmitCb} sub Callback + * @return unsubscribe function */ - public on (type: ProviderInterfaceEmitted, sub: ProviderInterfaceEmitCb): void { + public on (type: ProviderInterfaceEmitted, sub: ProviderInterfaceEmitCb): () => void { this._eventemitter.on(type, sub); + return (): void => { + this._eventemitter.removeListener(type, sub); + }; } /**