diff --git a/CHANGELOG.md b/CHANGELOG.md index 83842bb3e3..902496b988 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ Changes: - Expose additional camelCase `method` on `AbiMessage` (maps to decorated name) - Added explicit double-byte ss58 `AccountId` encoding test - Add known upgrade block for Polkadot v30 +- Cleanup WebSocket handlers when close event has been received - Update to latest Substrate metadata diff --git a/packages/rpc-provider/src/ws/index.ts b/packages/rpc-provider/src/ws/index.ts index 1fe897a66b..462cabf468 100644 --- a/packages/rpc-provider/src/ws/index.ts +++ b/packages/rpc-provider/src/ws/index.ts @@ -225,7 +225,6 @@ export class WsProvider implements ProviderInterface { // 1000 - Normal closure; the connection successfully completed this.#websocket.close(1000); - this.#websocket = null; } catch (error) { l.error(error); @@ -351,11 +350,19 @@ export class WsProvider implements ProviderInterface { } this.#isConnected = false; - this.#websocket = null; + + if (this.#websocket) { + this.#websocket.onclose = null; + this.#websocket.onerror = null; + this.#websocket.onmessage = null; + this.#websocket.onopen = null; + this.#websocket = null; + } + this.#emit('disconnected'); // reject all hanging requests - eraseRecord(this.#handlers, (handler) => handler.callback(error, undefined)); + eraseRecord(this.#handlers, (h) => h.callback(error, undefined)); eraseRecord(this.#waitingForId); if (this.#autoConnectMs > 0) {