mirror of
https://github.com/fluencelabs/js-libp2p
synced 2025-03-22 10:30:50 +00:00
BREAKING CHANGE: all API methods with peer-info parameters or return values were changed. You can check the API.md document, in order to check the new values to use
69 lines
2.1 KiB
JavaScript
69 lines
2.1 KiB
JavaScript
'use strict'
|
|
|
|
const pTimes = require('p-times')
|
|
|
|
const multiaddr = require('multiaddr')
|
|
const PeerId = require('peer-id')
|
|
|
|
const Libp2p = require('../../../src')
|
|
const Peers = require('../../fixtures/peers')
|
|
const defaultOptions = require('../base-options.browser')
|
|
|
|
const listenAddr = multiaddr('/ip4/127.0.0.1/tcp/0')
|
|
|
|
/**
|
|
* Create libp2p nodes.
|
|
* @param {Object} [properties]
|
|
* @param {Object} [properties.config]
|
|
* @param {number} [properties.number] number of peers (default: 1).
|
|
* @param {boolean} [properties.fixture] use fixture for peer-id generation (default: true)
|
|
* @param {boolean} [properties.started] nodes should start (default: true)
|
|
* @param {boolean} [properties.populateAddressBooks] nodes addressBooks should be populated with other peers (default: true)
|
|
* @return {Promise<Array<Libp2p>>}
|
|
*/
|
|
async function createPeer ({ number = 1, fixture = true, started = true, populateAddressBooks = true, config = defaultOptions } = {}) {
|
|
const peerIds = await createPeerId({ number, fixture })
|
|
|
|
const addresses = started ? { listen: [listenAddr] } : {}
|
|
const peers = await pTimes(number, (i) => Libp2p.create({
|
|
peerId: peerIds[i],
|
|
addresses,
|
|
...config
|
|
}))
|
|
|
|
if (started) {
|
|
await Promise.all(peers.map((p) => p.start()))
|
|
|
|
populateAddressBooks && _populateAddressBooks(peers)
|
|
}
|
|
|
|
return peers
|
|
}
|
|
|
|
function _populateAddressBooks (peers) {
|
|
for (let i = 0; i < peers.length; i++) {
|
|
for (let j = 0; j < peers.length; j++) {
|
|
if (i !== j) {
|
|
peers[i].peerStore.addressBook.set(peers[j].peerId, peers[j].addresses.listen)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Create Peer-ids.
|
|
* @param {Object} [properties]
|
|
* @param {number} [properties.number] number of peers (default: 1).
|
|
* @param {boolean} [properties.fixture] use fixture for peer-id generation (default: true)
|
|
* @return {Promise<Array<PeerId>>}
|
|
*/
|
|
function createPeerId ({ number = 1, fixture = true } = {}) {
|
|
return pTimes(number, (i) => fixture
|
|
? PeerId.createFromJSON(Peers[i])
|
|
: PeerId.create()
|
|
)
|
|
}
|
|
|
|
module.exports.createPeer = createPeer
|
|
module.exports.createPeerId = createPeerId
|