From 627b8bf87c775762dd6a9de69b77852e48ebcf26 Mon Sep 17 00:00:00 2001 From: Alex Potsides Date: Sun, 17 Jul 2022 08:25:21 +0000 Subject: [PATCH] fix: MaxListenersExceeded warning (#1297) Where we create signals that are passed down the stack, increase the max listeners to prevent warnings in the console. --- src/circuit/transport.ts | 6 +++++ src/connection-manager/dialer/auto-dialer.ts | 6 +++++ src/connection-manager/index.ts | 10 +++++++++ src/fetch/index.ts | 6 +++++ src/identify/index.ts | 23 +++++++++++++++++++- src/ping/index.ts | 6 +++++ src/upgrader.ts | 11 ++++++++++ 7 files changed, 67 insertions(+), 1 deletion(-) diff --git a/src/circuit/transport.ts b/src/circuit/transport.ts index 295ef81410..5c87bd2e3a 100644 --- a/src/circuit/transport.ts +++ b/src/circuit/transport.ts @@ -20,6 +20,7 @@ import type { Connection } from '@libp2p/interface-connection' import type { RelayConfig } from '../index.js' import { abortableDuplex } from 'abortable-iterator' import { TimeoutController } from 'timeout-abort-controller' +import { setMaxListeners } from 'events' const log = logger('libp2p:circuit') @@ -64,6 +65,11 @@ export class Circuit implements Transport, Initializable { const { connection, stream } = data const controller = new TimeoutController(this._init.hop.timeout) + try { + // fails on node < 15.4 + setMaxListeners?.(Infinity, controller.signal) + } catch {} + try { const source = abortableDuplex(stream, controller.signal) const streamHandler = new StreamHandler({ diff --git a/src/connection-manager/dialer/auto-dialer.ts b/src/connection-manager/dialer/auto-dialer.ts index ab63ec2888..0c572647ca 100644 --- a/src/connection-manager/dialer/auto-dialer.ts +++ b/src/connection-manager/dialer/auto-dialer.ts @@ -2,6 +2,7 @@ import type { PeerInfo } from '@libp2p/interface-peer-info' import { logger } from '@libp2p/logger' import type { Components } from '@libp2p/components' import { TimeoutController } from 'timeout-abort-controller' +import { setMaxListeners } from 'events' const log = logger('libp2p:dialer:auto-dialer') @@ -44,6 +45,11 @@ export class AutoDialer { const controller = new TimeoutController(this.dialTimeout) + try { + // fails on node < 15.4 + setMaxListeners?.(Infinity, controller.signal) + } catch {} + void this.components.getConnectionManager().openConnection(peer.id, { signal: controller.signal }) diff --git a/src/connection-manager/index.ts b/src/connection-manager/index.ts index ff63583977..54acae3b99 100644 --- a/src/connection-manager/index.ts +++ b/src/connection-manager/index.ts @@ -331,6 +331,11 @@ export class DefaultConnectionManager extends EventEmitter { await this.openConnection(peer, { @@ -510,6 +515,11 @@ export class DefaultConnectionManager extends EventEmitter { - const timeoutController = new TimeoutController(this.init.timeout) let stream: Stream | undefined + const timeoutController = new TimeoutController(this.init.timeout) + + try { + // fails on node < 15.4 + setMaxListeners?.(Infinity, timeoutController.signal) + } catch {} try { stream = await connection.newStream([this.identifyPushProtocolStr], { @@ -234,6 +240,11 @@ export class IdentifyService implements Startable { if (signal == null) { timeoutController = new TimeoutController(this.init.timeout) signal = timeoutController.signal + + try { + // fails on node < 15.4 + setMaxListeners?.(Infinity, timeoutController.signal) + } catch {} } try { @@ -374,6 +385,11 @@ export class IdentifyService implements Startable { const { connection, stream } = data const timeoutController = new TimeoutController(this.init.timeout) + try { + // fails on node < 15.4 + setMaxListeners?.(Infinity, timeoutController.signal) + } catch {} + try { const publicKey = this.components.getPeerId().publicKey ?? new Uint8Array(0) const peerData = await this.components.getPeerStore().get(this.components.getPeerId()) @@ -425,6 +441,11 @@ export class IdentifyService implements Startable { const { connection, stream } = data const timeoutController = new TimeoutController(this.init.timeout) + try { + // fails on node < 15.4 + setMaxListeners?.(Infinity, timeoutController.signal) + } catch {} + let message: Identify | undefined try { // make stream abortable diff --git a/src/ping/index.ts b/src/ping/index.ts index 98c249093a..8eb83fb121 100644 --- a/src/ping/index.ts +++ b/src/ping/index.ts @@ -14,6 +14,7 @@ import type { AbortOptions } from '@libp2p/interfaces' import { abortableDuplex } from 'abortable-iterator' import { TimeoutController } from 'timeout-abort-controller' import type { Stream } from '@libp2p/interface-connection' +import { setMaxListeners } from 'events' const log = logger('libp2p:ping') @@ -90,6 +91,11 @@ export class PingService implements Startable { if (signal == null) { timeoutController = new TimeoutController(this.init.timeout) signal = timeoutController.signal + + try { + // fails on node < 15.4 + setMaxListeners?.(Infinity, timeoutController.signal) + } catch {} } try { diff --git a/src/upgrader.ts b/src/upgrader.ts index 80cb742f17..e659d3ae7c 100644 --- a/src/upgrader.ts +++ b/src/upgrader.ts @@ -20,6 +20,7 @@ import type { Registrar } from '@libp2p/interface-registrar' import { DEFAULT_MAX_INBOUND_STREAMS, DEFAULT_MAX_OUTBOUND_STREAMS } from './registrar.js' import { TimeoutController } from 'timeout-abort-controller' import { abortableDuplex } from 'abortable-iterator' +import { setMaxListeners } from 'events' const log = logger('libp2p:upgrader') @@ -133,6 +134,11 @@ export class DefaultUpgrader extends EventEmitter implements Upg const timeoutController = new TimeoutController(this.inboundUpgradeTimeout) + try { + // fails on node < 15.4 + setMaxListeners?.(Infinity, timeoutController.signal) + } catch {} + try { const abortableStream = abortableDuplex(maConn, timeoutController.signal) maConn.source = abortableStream.source @@ -407,6 +413,11 @@ export class DefaultUpgrader extends EventEmitter implements Upg controller = new TimeoutController(30000) options.signal = controller.signal + + try { + // fails on node < 15.4 + setMaxListeners?.(Infinity, controller.signal) + } catch {} } let { stream, protocol } = await mss.select(protocols, options)