mirror of
https://github.com/fluencelabs/js-libp2p
synced 2025-04-01 15:21:04 +00:00
Co-authored-by: achingbrain <alex@achingbrain.net>- fixed tests that were passing even though the example isn't working - added timeouts to avoid infinite wait Fixes #1229
81 lines
2.1 KiB
JavaScript
81 lines
2.1 KiB
JavaScript
/* eslint-disable no-console */
|
|
|
|
import { createLibp2p } from 'libp2p'
|
|
import { TCP } from '@libp2p/tcp'
|
|
import { Mplex } from '@libp2p/mplex'
|
|
import { Noise } from '@chainsafe/libp2p-noise'
|
|
import { FloodSub } from '@libp2p/floodsub'
|
|
import { Bootstrap } from '@libp2p/bootstrap'
|
|
import { PubSubPeerDiscovery } from '@libp2p/pubsub-peer-discovery'
|
|
|
|
const createNode = async (bootstrappers) => {
|
|
const node = await createLibp2p({
|
|
addresses: {
|
|
listen: ['/ip4/0.0.0.0/tcp/0']
|
|
},
|
|
transports: [new TCP()],
|
|
streamMuxers: [new Mplex()],
|
|
connectionEncryption: [new Noise()],
|
|
pubsub: new FloodSub(),
|
|
peerDiscovery: [
|
|
new Bootstrap({
|
|
list: bootstrappers
|
|
}),
|
|
new PubSubPeerDiscovery({
|
|
interval: 1000
|
|
})
|
|
]
|
|
})
|
|
|
|
return node
|
|
}
|
|
|
|
;(async () => {
|
|
const relay = await createLibp2p({
|
|
addresses: {
|
|
listen: [
|
|
'/ip4/0.0.0.0/tcp/0'
|
|
]
|
|
},
|
|
transports: [new TCP()],
|
|
streamMuxers: [new Mplex()],
|
|
connectionEncryption: [new Noise()],
|
|
pubsub: new FloodSub(),
|
|
peerDiscovery: [
|
|
new PubSubPeerDiscovery({
|
|
interval: 1000
|
|
})
|
|
],
|
|
relay: {
|
|
enabled: true, // Allows you to dial and accept relayed connections. Does not make you a relay.
|
|
hop: {
|
|
enabled: true // Allows you to be a relay for other peers
|
|
}
|
|
}
|
|
})
|
|
console.log(`libp2p relay starting with id: ${relay.peerId.toString()}`)
|
|
await relay.start()
|
|
|
|
const relayMultiaddrs = relay.getMultiaddrs().map((m) => m.toString())
|
|
|
|
const [node1, node2] = await Promise.all([
|
|
createNode(relayMultiaddrs),
|
|
createNode(relayMultiaddrs)
|
|
])
|
|
|
|
node1.addEventListener('peer:discovery', (evt) => {
|
|
const peer = evt.detail
|
|
console.log(`Peer ${node1.peerId.toString()} discovered: ${peer.id.toString()}`)
|
|
})
|
|
node2.addEventListener('peer:discovery', (evt) => {
|
|
const peer = evt.detail
|
|
console.log(`Peer ${node2.peerId.toString()} discovered: ${peer.id.toString()}`)
|
|
})
|
|
|
|
;[node1, node2].forEach((node, index) => console.log(`Node ${index} starting with id: ${node.peerId.toString()}`))
|
|
await Promise.all([
|
|
node1.start(),
|
|
node2.start()
|
|
])
|
|
})()
|