diff --git a/src/circuit/auto-relay.js b/src/circuit/auto-relay.js index 613c473e..20174e99 100644 --- a/src/circuit/auto-relay.js +++ b/src/circuit/auto-relay.js @@ -31,6 +31,7 @@ const { * * @typedef {Object} AutoRelayOptions * @property {number} [maxListeners = 1] - maximum number of relays to listen. + * @property {(error: Error, msg?: string) => {}} [onError] */ class AutoRelay { @@ -40,7 +41,7 @@ class AutoRelay { * @class * @param {AutoRelayProperties & AutoRelayOptions} props */ - constructor ({ libp2p, maxListeners = 1 }) { + constructor ({ libp2p, maxListeners = 1, onError }) { this._libp2p = libp2p this._peerId = libp2p.peerId this._peerStore = libp2p.peerStore @@ -60,6 +61,15 @@ class AutoRelay { this._peerStore.on('change:protocols', this._onProtocolChange) this._connectionManager.on('peer:disconnect', this._onPeerDisconnected) + + /** + * @param {Error} error + * @param {string} [msg] + */ + this._onError = (error, msg) => { + log.error(msg || error) + onError && onError(error, msg) + } } /** @@ -107,7 +117,7 @@ class AutoRelay { await this._addListenRelay(connection, id) } } catch (err) { - log.error(err) + this._onError(err) } } @@ -160,7 +170,7 @@ class AutoRelay { await this._transportManager.listen([new Multiaddr(listenAddr)]) // Announce multiaddrs will update on listen success by TransportManager event being triggered } catch (err) { - log.error(err) + this._onError(err) this._listenRelays.delete(id) } } @@ -258,7 +268,7 @@ class AutoRelay { } } } catch (err) { - log.error(err) + this._onError(err) } } @@ -270,7 +280,7 @@ class AutoRelay { const connection = await this._libp2p.dial(peerId) await this._addListenRelay(connection, peerId.toB58String()) } catch (err) { - log.error(`could not connect and listen on known hop relay ${peerId.toB58String()}`) + this._onError(err, `could not connect and listen on known hop relay ${peerId.toB58String()}`) } } } diff --git a/src/peer-store/address-book.js b/src/peer-store/address-book.js index 8b94acc5..f04ea453 100644 --- a/src/peer-store/address-book.js +++ b/src/peer-store/address-book.js @@ -229,7 +229,7 @@ class AddressBook extends Book { const addresses = this._toAddresses(multiaddrs) const id = peerId.toB58String() - // Not add unavailable addresses + // No addresses to be added if (!addresses.length) { return this } diff --git a/test/relay/auto-relay.node.js b/test/relay/auto-relay.node.js index 4f0aa05c..3b0481a3 100644 --- a/test/relay/auto-relay.node.js +++ b/test/relay/auto-relay.node.js @@ -359,6 +359,7 @@ describe('auto-relay', () => { expect(relayLibp2p1.connectionManager.size).to.equal(1) // Spy on dial + sinon.spy(autoRelay1, '_tryToListenOnRelay') sinon.spy(relayLibp2p1, 'dial') // Remove peer used as relay from peerStore and disconnect it @@ -369,6 +370,7 @@ describe('auto-relay', () => { // Wait for other peer connected to be added as listen addr await pWaitFor(() => relayLibp2p1.transportManager.listen.callCount === 2) + expect(autoRelay1._tryToListenOnRelay.callCount).to.equal(1) expect(autoRelay1._listenRelays.size).to.equal(1) expect(relayLibp2p1.connectionManager.size).to.eql(1) })