JSPM

  • Created
  • Published
  • Downloads 920
  • Score
    100M100P100Q126169F
  • License MIT

libp2p WebRTC transport that includes a discovery mechanism provided by the signalling-star

Package Exports

  • libp2p-webrtc-star
  • libp2p-webrtc-star/src/sig-server

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (libp2p-webrtc-star) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

js-libp2p-webrtc-star

Discourse posts Dependency Status js-standard-style

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')

// Using wrtc
const ws1 = new WStar({ wrtc: wrtc })

// Using electron-webrtc
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/ipfs/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()}`)

// Close connection after reading
await listener.close()

API

Transport

Connection

Peer Discovery - ws.discovery

Rendezvous server (aka Signalling 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 (signalling data).

libp2p-webrtc-star comes with its own signalling server, used for peers to handshake their signalling 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=9090 --host=127.0.0.1

Defaults:

  • port - 13579
  • host - '0.0.0.0'

Hosted Rendezvous Server

We host a signalling server at star-signal.cloud.ipfs.team that can be used for practical demos and experimentation, it should not be used for apps in production. A libp2p-webrtc-star address, using the signalling server we provide, looks like:

/dns4/star-signal.cloud.ipfs.team/wss/p2p-webrtc-star/ipfs/<your-peer-id>

Note: The address above indicates WebSockets Secure, which can be accessed from both http and https.