mirror of
https://github.com/fluencelabs/js-libp2p
synced 2025-04-01 07:11:04 +00:00
Instead of making the `.dht` and `.pubsub` properties optional, use dummy implementations that throw exceptions if they are not configured. This way we don't have to null guard everywhere they are accessed.
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()
|
|
])
|
|
})();
|