js-libp2p-webrtc-star
libp2p WebRTC transport that includes a discovery mechanism provided by the signalling-star
Lead Maintainer
Vasco Santos.
Description
libp2p-webrtc-star
is one of the WebRTC transports available for libp2p. libp2p-webrtc-star
incorporates both a transport and a discovery service that is facilitated by the signalling server, also part of this module.
Usage
Install
> npm install libp2p-webrtc-star
Usage
Using this module in Node.js (read: not in the browser)
To use this module in Node.js, you have to BYOI of WebRTC, there are multiple options out there, unfortunately, none of them are 100% solid. The ones we recommend are: wrtc and electron-webrtc.
Instead of just creating the WebRTCStar instance without arguments, you need to pass an options object with the WebRTC implementation:
const wrtc = require('wrtc')
const electronWebRTC = require('electron-webrtc')
const WStar = require('libp2p-webrtc-star')
const ws1 = new WStar({ wrtc: wrtc })
const ws2 = new WStar({ wrtc: electronWebRTC() })
Using this module in the Browser
const WStar = require('libp2p-webrtc-star')
const multiaddr = require('multiaddr')
const pipe = require('it-pipe')
const { collect } = require('streaming-iterables')
const addr = multiaddr('/ip4/188.166.203.82/tcp/20000/wss/p2p-webrtc-star/p2p/QmcgpsyWgH8Y8ajJz1Cu72KnS5uo2Aa2LpzU7kinSooo2a')
const ws = new WStar({ upgrader })
const listener = ws.createListener((socket) => {
console.log('new connection opened')
pipe(
['hello'],
socket
)
})
await listener.listen(addr)
console.log('listening')
const socket = await ws.dial(addr)
const values = await pipe(
socket,
collect
)
console.log(`Value: ${values.toString()}`)
await listener.close()
API
Transport
Connection
Peer Discovery - ws.discovery
Rendezvous server (aka Signaling server)
Nodes using libp2p-webrtc-star
will connect to a known point in the network, a rendezvous point where they can learn about other nodes (Discovery) and exchange their SDP offers (signaling data).
libp2p-webrtc-star
comes with its own signaling server, used for peers to handshake their signaling data and establish a connection. You can install it in your machine by installing the module globally:
> npm install --global libp2p-webrtc-star
This will expose a webrtc-star
cli tool. To spawn a server do:
> star-signal --port=13579 --host=127.0.0.1
Defaults:
port
- 9090host
- '0.0.0.0'
Hosted Rendezvous Server
We host signaling servers at wrtc-star1.par.dwebops.pub
and wrtc-star2.sjc.dwebops.pub
, that can be used for practical demos and experimentation, it should not be used for apps in production. Check Deployment.md for how to deploy your own server.
A libp2p-webrtc-star address, using the signaling server we provide, looks like:
/dns4/wrtc-star1.par.dwebops.pub/tcp/443/wss/p2p-webrtc-star/p2p/<your-peer-id>
Note: The address above indicates WebSockets Secure, which can be accessed from both http and https.