mirror of
https://github.com/fluencelabs/js-libp2p
synced 2025-04-22 00:52:14 +00:00
feat: add createLibp2p to generate a PeerInfo instance (#367)
createLibp2p is a new exported helper function that allows users to create a libp2p instance without worrying about creating a PeerInfo instance first.
This commit is contained in:
parent
b06ca1b3c7
commit
04faf1806c
35
src/index.js
35
src/index.js
@ -10,8 +10,10 @@ const errCode = require('err-code')
|
|||||||
const each = require('async/each')
|
const each = require('async/each')
|
||||||
const series = require('async/series')
|
const series = require('async/series')
|
||||||
const parallel = require('async/parallel')
|
const parallel = require('async/parallel')
|
||||||
|
const nextTick = require('async/nextTick')
|
||||||
|
|
||||||
const PeerBook = require('peer-book')
|
const PeerBook = require('peer-book')
|
||||||
|
const PeerInfo = require('peer-info')
|
||||||
const Switch = require('libp2p-switch')
|
const Switch = require('libp2p-switch')
|
||||||
const Ping = require('libp2p-ping')
|
const Ping = require('libp2p-ping')
|
||||||
const WebSockets = require('libp2p-websockets')
|
const WebSockets = require('libp2p-websockets')
|
||||||
@ -34,14 +36,14 @@ const notStarted = (action, state) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @fires Node#error Emitted when an error occurs
|
* @fires Libp2p#error Emitted when an error occurs
|
||||||
* @fires Node#peer:connect Emitted when a peer is connected to this node
|
* @fires Libp2p#peer:connect Emitted when a peer is connected to this node
|
||||||
* @fires Node#peer:disconnect Emitted when a peer disconnects from this node
|
* @fires Libp2p#peer:disconnect Emitted when a peer disconnects from this node
|
||||||
* @fires Node#peer:discovery Emitted when a peer is discovered
|
* @fires Libp2p#peer:discovery Emitted when a peer is discovered
|
||||||
* @fires Node#start Emitted when the node and its services has started
|
* @fires Libp2p#start Emitted when the node and its services has started
|
||||||
* @fires Node#stop Emitted when the node and its services has stopped
|
* @fires Libp2p#stop Emitted when the node and its services has stopped
|
||||||
*/
|
*/
|
||||||
class Node extends EventEmitter {
|
class Libp2p extends EventEmitter {
|
||||||
constructor (_options) {
|
constructor (_options) {
|
||||||
super()
|
super()
|
||||||
// validateConfig will ensure the config is correct,
|
// validateConfig will ensure the config is correct,
|
||||||
@ -547,4 +549,21 @@ class Node extends EventEmitter {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = Node
|
module.exports = Libp2p
|
||||||
|
/**
|
||||||
|
* Like `new Libp2p(options)` except it will create a `PeerInfo`
|
||||||
|
* instance if one is not provided in options.
|
||||||
|
* @param {object} options Libp2p configuration options
|
||||||
|
* @param {function(Error, Libp2p)} callback
|
||||||
|
* @returns {void}
|
||||||
|
*/
|
||||||
|
module.exports.createLibp2p = (options, callback) => {
|
||||||
|
if (options.peerInfo) {
|
||||||
|
return nextTick(callback, null, new Libp2p(options))
|
||||||
|
}
|
||||||
|
PeerInfo.create((err, peerInfo) => {
|
||||||
|
if (err) return callback(err)
|
||||||
|
options.peerInfo = peerInfo
|
||||||
|
callback(null, new Libp2p(options))
|
||||||
|
})
|
||||||
|
}
|
||||||
|
@ -7,8 +7,15 @@ const expect = chai.expect
|
|||||||
const series = require('async/series')
|
const series = require('async/series')
|
||||||
const createNode = require('./utils/create-node')
|
const createNode = require('./utils/create-node')
|
||||||
const sinon = require('sinon')
|
const sinon = require('sinon')
|
||||||
|
const { createLibp2p } = require('../src')
|
||||||
|
const WS = require('libp2p-websockets')
|
||||||
|
const PeerInfo = require('peer-info')
|
||||||
|
|
||||||
describe('libp2p creation', () => {
|
describe('libp2p creation', () => {
|
||||||
|
afterEach(() => {
|
||||||
|
sinon.restore()
|
||||||
|
})
|
||||||
|
|
||||||
it('should be able to start and stop successfully', (done) => {
|
it('should be able to start and stop successfully', (done) => {
|
||||||
createNode([], {
|
createNode([], {
|
||||||
config: {
|
config: {
|
||||||
@ -101,4 +108,34 @@ describe('libp2p creation', () => {
|
|||||||
node._switch.emit('error', error)
|
node._switch.emit('error', error)
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
it('createLibp2p should create a peerInfo instance', (done) => {
|
||||||
|
createLibp2p({
|
||||||
|
modules: {
|
||||||
|
transport: [ WS ]
|
||||||
|
}
|
||||||
|
}, (err, libp2p) => {
|
||||||
|
expect(err).to.not.exist()
|
||||||
|
expect(libp2p).to.exist()
|
||||||
|
done()
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
it('createLibp2p should allow for a provided peerInfo instance', (done) => {
|
||||||
|
PeerInfo.create((err, peerInfo) => {
|
||||||
|
expect(err).to.not.exist()
|
||||||
|
sinon.spy(PeerInfo, 'create')
|
||||||
|
createLibp2p({
|
||||||
|
peerInfo,
|
||||||
|
modules: {
|
||||||
|
transport: [ WS ]
|
||||||
|
}
|
||||||
|
}, (err, libp2p) => {
|
||||||
|
expect(err).to.not.exist()
|
||||||
|
expect(libp2p).to.exist()
|
||||||
|
expect(PeerInfo.create.callCount).to.eql(0)
|
||||||
|
done()
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
Loading…
x
Reference in New Issue
Block a user