Skip to content
This repository has been archived by the owner on Feb 26, 2021. It is now read-only.

feat: support PeerInfo.create(IdJSON, cb) as well #61

Merged
merged 2 commits into from
Dec 14, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 5 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,8 @@
- [`.multiaddrs.add(addr)`](#multiaddraddaddr)
- [`.multiaddrs.addSafe(addr)`](#multiaddraddsafeaddr)
- [`.multiaddrs.forEach(fn)`](#multiaddrforeachfn)
- [`.multaiddrs.size`]((#multiaddrsize)
- [`.multiaddrs.has()`]((#multiaddrhas)
- [`.multiaddrs.size`](#multiaddrsize)
- [`.multiaddrs.has()`](#multiaddrhas)
- [`.multiaddrs.delete(addr)`](#multiaddrdeleteaddr)
- [`.multiaddrs.toArray()`](#multiaddrtoarray)
- [`.multiaddrs.replace(existing, fresh)`](#multiaddrreplaceexisting-fresh)
Expand Down Expand Up @@ -84,7 +84,7 @@ const PeerInfo = require('peer-info')

### `PeerInfo.create([id, ] callback)`

- `id: PeerID`, optional
- `id` optional - can be a PeerId or a JSON object(will be parsed with https://github.com/libp2p/js-peer-id#createfromjsonobj)
- `callback: Function` with signature `function (err, peerInfo) {}`

Creates a new PeerInfo instance and if no `id` is passed it
Expand All @@ -93,9 +93,9 @@ for it.

### `new PeerInfo(id)`

- `id: PeerID`
- `id: PeerId` - instance of PeerId (optional)

Creates a new PeerInfo instance from an existing PeerID.
Creates a new PeerInfo instance from an existing PeerId.
Copy link
Member

@victorb victorb Dec 14, 2017

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Correction: Creates a new PeerInfo instance from an existing PeerId or creates a new PeerId for you.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

new PeerId doesn't do that. Users have always to resort to PeerInfo.create because creating a PeerId requires async calls (WebCrypto)


### `multiaddrs`

Expand Down
19 changes: 12 additions & 7 deletions src/index.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
'use strict'

const Id = require('peer-id')
const PeerId = require('peer-id')
const ensureMultiaddr = require('./utils').ensureMultiaddr
const MultiaddrSet = require('./multiaddr-set')
const assert = require('assert')
Expand Down Expand Up @@ -34,12 +34,12 @@ class PeerInfo {
}
}

PeerInfo.create = (id, callback) => {
if (typeof id === 'function') {
callback = id
id = null
PeerInfo.create = (peerId, callback) => {
if (typeof peerId === 'function') {
callback = peerId
peerId = null

Id.create((err, id) => {
PeerId.create((err, id) => {
if (err) {
return callback(err)
}
Expand All @@ -49,7 +49,12 @@ PeerInfo.create = (id, callback) => {
return
}

callback(null, new PeerInfo(id))
// Already a PeerId instance
if (typeof peerId.toJSON === 'function') {
callback(null, new PeerInfo(peerId))
} else {
PeerId.createFromJSON(peerId, (err, id) => callback(err, new PeerInfo(id)))
}
}

PeerInfo.isPeerInfo = (peerInfo) => {
Expand Down
45 changes: 28 additions & 17 deletions test/index.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,28 +5,29 @@ const chai = require('chai')
const dirtyChai = require('dirty-chai')
chai.use(dirtyChai)
const expect = chai.expect
const PeerId = require('peer-id')
const Id = require('peer-id')
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why the renames from PeerId -> Id and PeerInfo -> Info? Previous names were more clearer (without context)

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I noticed there were multiple errors where PeerInfo.create({bits: 512}) appeared, which is a typo since only PeerId supports that option. My diagnostic is that it was hard to differentiate the two words.

const Multiaddr = require('multiaddr')
const PeerInfo = require('../src')
const Info = require('../src')
const peerIdJSON = require('./peer-test.json')

describe('peer-info', () => {
let pi

beforeEach((done) => {
PeerId.create({bits: 512}, (err, id) => {
Id.create({bits: 512}, (err, id) => {
if (err) {
return done(err)
}
pi = new PeerInfo(id)
pi = new Info(id)
done()
})
})

it('create with Id', (done) => {
PeerId.create({bits: 512}, (err, id) => {
it('create with Id class', (done) => {
Id.create({bits: 512}, (err, id) => {
expect(err).to.not.exist()
const pi = new PeerInfo(id)
const pi2 = new PeerInfo(id)
const pi = new Info(id)
const pi2 = new Info(id)
expect(pi.id).to.exist()
expect(pi.id).to.eql(id)
expect(pi2).to.exist()
Expand All @@ -37,27 +38,37 @@ describe('peer-info', () => {
})

it('throws when not passing an Id', () => {
expect(() => new PeerInfo()).to.throw()
expect(() => new Info()).to.throw()
})

it('isPeerInfo', () => {
expect(PeerInfo.isPeerInfo(pi)).to.equal(true)
expect(PeerInfo.isPeerInfo(pi.id)).to.equal(false)
expect(PeerInfo.isPeerInfo('bananas')).to.equal(false)
expect(Info.isPeerInfo(pi)).to.equal(true)
expect(Info.isPeerInfo(pi.id)).to.equal(false)
expect(Info.isPeerInfo('bananas')).to.equal(false)
})

it('PeerInfo.create', (done) => {
PeerInfo.create({bits: 512}, (err, pi) => {
it('.create', function (done) {
this.timeout(20 * 1000)
Info.create((err, pi) => {
expect(err).to.not.exist()
expect(pi.id).to.exist()
done()
})
})

it('PeerInfo.create with existing id', (done) => {
PeerId.create({bits: 512}, (err, id) => {
it('create with Id as JSON', (done) => {
Info.create(peerIdJSON, (err, pi) => {
expect(err).to.not.exist()
PeerInfo.create(id, (err, pi) => {
expect(pi.id).to.exist()
expect(pi.id.toJSON()).to.eql(peerIdJSON)
done()
})
})

it('.create with existing id', (done) => {
Id.create({bits: 512}, (err, id) => {
expect(err).to.not.exist()
Info.create(id, (err, pi) => {
expect(err).to.not.exist()
expect(pi.id).to.exist()
expect(pi.id.isEqual(id)).to.equal(true)
Expand Down
5 changes: 5 additions & 0 deletions test/peer-test.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"id": "QmVmZNvjFdRoPqg27UqK56KVZabrN4VRinHF2Jp1FNmHMo",
"privKey": "CAASpgkwggSiAgEAAoIBAQCNSaB/V5Q0FNJ0KrCJNeeZtn/dAua3dXtbDePYl4SA2nQkrn/TNxbkDzmo2CeKB0/40D1tiinv+0PWpln1F3fHAWJcGHhOdsEzueH0AhUhFzz8sInFNAa7kcRDCMmWeR6Sd17Gu0Soettd9U9ldEGcpG0ZrLRyUSjb9K+L/9JbRu157IJw0lVBDm42AtmLIGivbPMXGgYCcKly0ZsNuLEgOdlvN8FNU1NGcjifcbCv9IwcX2TnfbGsv0JGbR7wwvFy18TmVX0Woo2kbFPXa23W0o1anWhpkTaThp6f3rjqUgUXxkCj+3bYSknURfUq0IK//sC5Q7TSYz9PDHxPlro/AgMBAAECggEAL1lMU0C7ZxTPTqT70o/hFM9nXF7biQHzHBm0kOJ+QlxzbdOY/OTKZBWCIkaGQaifsWfAHlSeJ1GSc33+SbfaqTOajfiZYNpFdxtFUOvdvuA1zQ0wroj39KYuGrT4MdhXWYhtl7YslTXPDFboi7yBPIiSE3egZWszgTsoFYffLD1AtEe2jgFGNRQGxHtUxQLQoTmxJYQHC6djsGpM6Iz75VYiSZmngD69BbfO+RM9oqMqNDeqhyIEx+CTuhKfR+A8KKGxJfdanCBIhWuYRsvNnyaE/lMXVbw2NMjYziMAmkHpcgo/nGC+a80oKNRzq+4vUuKo/nICw9lWIBcUvqcCcQKBgQDfpOWV0Si24sQD10pjxCcx5QYSOx6L9cuUDonHwvi4DhRRDIxhzU8RZltBq4MsPZDwbqtf103F1WjwYYEr7a93MqFxexvAyrdiKEVdCLH0V6wv27Ona1sokxQ1UI1tRZhXCddzxKIf8jo4bMEQHTXAJzVa7AqJ85zePuc05cT/eQKBgQChun5CkQBZI7GDq0+NrfzpxH0RJcYz026rZQbT8ktEp/XdPnR74i4uQ8MInO3YPjUpM2kKN67SHh6k2pQp/8KAzZPYIEKZWKvnx2banmvXSvPqoMXPk59j7fi6VKWGSBbfcPolRpHxc1CPl47R3OtSvs8EajG0h2CWgC4spIiBdwKBgC++fUDhmSaJ/LyxLnFkA9YUBZrIwjmw7JgcDm/2ALESWGYBHssWUIXvaxX27pb4QcQCbFWWmkTczX1b436kTGxPA8Y9OOyMml+7Jyu4Wn1GZj0FUzIvqhNcatkC7F5imCYktLlDRjU5uhInrYOqKLpv5GUXtRxERL3xgdx6HPdJAoGAckLuPV1wn4nGOr5nwDNygj5eFiVX+PmiMNl5j3iZkPIRlLQxW+0ar3kUbBtjNuoMaQV3as6YZr7863+6OkoGQzX7BDEWnHy3R1Pr6P0QN9Uuq0/XMaacb9+LYSm4oDyCXG7XbEqFhc7w1eI/9ylb4OQKIpZcc61JoksBVG0SPFUCgYAtwfz9r9YqHQZLv8ldBh1k1OsWXfRbtexkS4/YRQ1zyckOEWqn4PH1RQwD5Im7gOJhMtYnArsUmtagEaAXYfiFs3kL9JnYbpTAEvnHn1JomAyJqp/Hh57VAHI/bWydVrYrzdt0t5rcf3UVzDiaxjudDnyhOkyd++b2gpAv6cp5bg==",
"pubKey": "CAASpgIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCNSaB/V5Q0FNJ0KrCJNeeZtn/dAua3dXtbDePYl4SA2nQkrn/TNxbkDzmo2CeKB0/40D1tiinv+0PWpln1F3fHAWJcGHhOdsEzueH0AhUhFzz8sInFNAa7kcRDCMmWeR6Sd17Gu0Soettd9U9ldEGcpG0ZrLRyUSjb9K+L/9JbRu157IJw0lVBDm42AtmLIGivbPMXGgYCcKly0ZsNuLEgOdlvN8FNU1NGcjifcbCv9IwcX2TnfbGsv0JGbR7wwvFy18TmVX0Woo2kbFPXa23W0o1anWhpkTaThp6f3rjqUgUXxkCj+3bYSknURfUq0IK//sC5Q7TSYz9PDHxPlro/AgMBAAE="
}