diff --git a/package.json b/package.json index 0533d36a..072b3711 100644 --- a/package.json +++ b/package.json @@ -62,4 +62,4 @@ "greenkeeper[bot] ", "npm-to-cdn-bot (by Forbes Lindesay) " ] -} \ No newline at end of file +} diff --git a/src/index.js b/src/index.js index 43ab5d15..e777f29b 100644 --- a/src/index.js +++ b/src/index.js @@ -106,7 +106,7 @@ Multiaddr.prototype.inspect = function inspect () { Multiaddr.prototype.protos = function protos () { return map(this.protoCodes(), function (code) { return extend(protocols(code)) - // copy to prevent users from modifying the internal objs. + // copy to prevent users from modifying the internal objs. }) } @@ -235,27 +235,28 @@ Multiaddr.prototype.decapsulate = function decapsulate (addr) { /** * Extract the peerId if the multiaddr contains one * - * @return {String} peerId - The id of the peer + * @return {String|null} peerId - The id of the peer or null if invalid or missing from the ma * @example * const mh1 = Multiaddr('/ip4/8.8.8.8/tcp/1080/ipfs/QmValidBase58string') * // * - * const peerId - * - * try { - * peerId = mh1.getPeerId() - * } catch (err) { - * // not a valid base58 address - * } + * // should return QmValidBase58string or null if the id is missing or invalid + * const peerId = mh1.getPeerId() */ Multiaddr.prototype.getPeerId = function getPeerId () { - let b58str = this.stringTuples().filter((tuple) => { - if (tuple[0] === protocols.names['ipfs'].code) { - return true - } - })[0][1] + let b58str = null + try { + b58str = this.stringTuples().filter((tuple) => { + if (tuple[0] === protocols.names['ipfs'].code) { + return true + } + })[0][1] + + bs58.decode(b58str) + } catch (e) { + b58str = null + } - bs58.decode(b58str) return b58str } diff --git a/test/index.spec.js b/test/index.spec.js index df4ad994..23f414d2 100644 --- a/test/index.spec.js +++ b/test/index.spec.js @@ -535,6 +535,22 @@ describe('helpers', () => { }) }) + describe('.getPeerId should parse id from multiaddr', () => { + it('parses extracts the peer Id from a multiaddr', () => { + expect( + multiaddr('/p2p-circuit/ipfs/QmcgpsyWgH8Y8ajJz1Cu72KnS5uo2Aa2LpzU7kinSupNKC').getPeerId() + ).to.equal('QmcgpsyWgH8Y8ajJz1Cu72KnS5uo2Aa2LpzU7kinSupNKC') + }) + }) + + describe('.getPeerId should return null on missing peer id in multiaddr', () => { + it('parses extracts the peer Id from a multiaddr', () => { + expect( + multiaddr('/ip4/0.0.0.0/tcp/1234/utp').getPeerId() + ).to.be.null() + }) + }) + describe('multiaddr.isMultiaddr', () => { it('handles different inputs', () => { expect(multiaddr.isMultiaddr(multiaddr('/'))).to.be.eql(true)