diff --git a/package.json b/package.json index 4ee93ca4..b4d3f363 100644 --- a/package.json +++ b/package.json @@ -104,7 +104,7 @@ "it-pipe": "^1.1.0", "it-take": "1.0.0", "libp2p-crypto": "^0.19.0", - "libp2p-interfaces": "^0.10.3", + "libp2p-interfaces": "libp2p/js-libp2p-interfaces#fix/event-emitter-with-local-types", "libp2p-utils": "^0.3.1", "mafmt": "^9.0.0", "merge-options": "^3.0.4", diff --git a/src/address-manager/index.js b/src/address-manager/index.js index bc4024c4..2ee830a5 100644 --- a/src/address-manager/index.js +++ b/src/address-manager/index.js @@ -1,5 +1,7 @@ 'use strict' +/** @typedef {import('../types').EventEmitterFactory} Events */ +/** @type Events */ const EventEmitter = require('events') const { Multiaddr } = require('multiaddr') const PeerId = require('peer-id') diff --git a/src/circuit/listener.js b/src/circuit/listener.js index a3f11dc7..3208395f 100644 --- a/src/circuit/listener.js +++ b/src/circuit/listener.js @@ -1,5 +1,7 @@ 'use strict' +/** @typedef {import('../types').EventEmitterFactory} Events */ +/** @type Events */ const { EventEmitter } = require('events') const { Multiaddr } = require('multiaddr') diff --git a/src/connection-manager/index.js b/src/connection-manager/index.js index 985d26f1..7cff6a02 100644 --- a/src/connection-manager/index.js +++ b/src/connection-manager/index.js @@ -11,6 +11,8 @@ const LatencyMonitor = require('./latency-monitor') // @ts-ignore retimer does not have types const retimer = require('retimer') +/** @typedef {import('../types').EventEmitterFactory} Events */ +/** @type Events */ const EventEmitter = require('events') const PeerId = require('peer-id') diff --git a/src/connection-manager/latency-monitor.js b/src/connection-manager/latency-monitor.js index 5253c2ae..a8f4af81 100644 --- a/src/connection-manager/latency-monitor.js +++ b/src/connection-manager/latency-monitor.js @@ -5,6 +5,8 @@ * This code is based on `latency-monitor` (https://github.com/mlucool/latency-monitor) by `mlucool` (https://github.com/mlucool), available under Apache License 2.0 (https://github.com/mlucool/latency-monitor/blob/master/LICENSE) */ +/** @typedef {import('../types').EventEmitterFactory} Events */ +/** @type Events */ const EventEmitter = require('events') const VisibilityChangeEmitter = require('./visibility-change-emitter') const debug = require('debug')('latency-monitor:LatencyMonitor') diff --git a/src/connection-manager/visibility-change-emitter.js b/src/connection-manager/visibility-change-emitter.js index 9efb6ffb..bf7da71b 100644 --- a/src/connection-manager/visibility-change-emitter.js +++ b/src/connection-manager/visibility-change-emitter.js @@ -6,6 +6,8 @@ */ 'use strict' +/** @typedef {import('../types').EventEmitterFactory} Events */ +/** @type Events */ const EventEmitter = require('events') const debug = require('debug')('latency-monitor:VisibilityChangeEmitter') diff --git a/src/index.js b/src/index.js index deccf80a..d8eb517d 100644 --- a/src/index.js +++ b/src/index.js @@ -4,6 +4,8 @@ const debug = require('debug') const log = Object.assign(debug('libp2p'), { error: debug('libp2p:err') }) +/** @typedef {import('./types').EventEmitterFactory} Events */ +/** @type Events */ const EventEmitter = require('events') const errCode = require('err-code') diff --git a/src/metrics/stats.js b/src/metrics/stats.js index 8d761400..c6fbf29f 100644 --- a/src/metrics/stats.js +++ b/src/metrics/stats.js @@ -1,6 +1,8 @@ // @ts-nocheck 'use strict' +/** @typedef {import('../types').EventEmitterFactory} Events */ +/** @type Events */ const EventEmitter = require('events') const { BigNumber: Big } = require('bignumber.js') const MovingAverage = require('moving-average') diff --git a/src/peer-store/index.js b/src/peer-store/index.js index 0f2f989f..07412290 100644 --- a/src/peer-store/index.js +++ b/src/peer-store/index.js @@ -2,6 +2,8 @@ const errcode = require('err-code') +/** @typedef {import('../types').EventEmitterFactory} Events */ +/** @type Events */ const EventEmitter = require('events') const PeerId = require('peer-id') diff --git a/src/types.d.ts b/src/types.d.ts new file mode 100644 index 00000000..2bfc0461 --- /dev/null +++ b/src/types.d.ts @@ -0,0 +1,18 @@ +export interface EventEmitterFactory { + new(): EventEmitter; +} + +export interface EventEmitter { + addListener(event: string | symbol, listener: (...args: any[]) => void): EventEmitter; + on(event: string | symbol, listener: (...args: any[]) => void): EventEmitter; + once(event: string | symbol, listener: (...args: any[]) => void): EventEmitter; + removeListener(event: string | symbol, listener: (...args: any[]) => void): EventEmitter; + off(event: string | symbol, listener: (...args: any[]) => void): EventEmitter; + removeAllListeners(event?: string | symbol): EventEmitter; + setMaxListeners(n: number): EventEmitter; + getMaxListeners(): number; + listeners(event: string | symbol): Function[]; // eslint-disable-line @typescript-eslint/ban-types + rawListeners(event: string | symbol): Function[]; // eslint-disable-line @typescript-eslint/ban-types + emit(event: string | symbol, ...args: any[]): boolean; + listenerCount(event: string | symbol): number; +} diff --git a/src/upgrader.js b/src/upgrader.js index cdf4706c..8ee6c654 100644 --- a/src/upgrader.js +++ b/src/upgrader.js @@ -137,7 +137,12 @@ class Upgrader { * @returns {Promise} */ async upgradeOutbound (maConn) { - const remotePeerId = PeerId.createFromB58String(maConn.remoteAddr.getPeerId()) + const idStr = maConn.remoteAddr.getPeerId() + if (!idStr) { + throw errCode(new Error('outbound connection must have a peer id'), codes.ERR_INVALID_MULTIADDR) + } + + const remotePeerId = PeerId.createFromB58String(idStr) let encryptedConn let remotePeer