JSPM

@web4/bitswarm-web

1.0.1
  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • 0
  • Score
    100M100P100Q29144F
  • License MIT

Implementation of the bitswarm API for use in web browsers

Package Exports

  • @web4/bitswarm-web
  • @web4/bitswarm-web/index.js

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 (@web4/bitswarm-web) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

bitswarm-web

Implementation of the bitswarm API for use in web browsers

Using in an application

npm i -s @web4/bitswarm-web
// Based on example in bitswarm repo
// Try running the regular bitswarm demo with node
const bitswarm = require('@web4/bitswarm-web')
const crypto = require('crypto')

const swarm = bitswarm({
  // Specify a server list of BitswarmServer instances
  bootstrap: ['ws://yourbitswarmserver.com'],
  // You can also specify proxy and signal servers separated
  wsProxy: [
    'ws://proxy1.com',
    'ws://proxy2.com'
  ],
  webrtcBootstrap: [
    'ws://signal1.com',
    'ws://signal2.com'
  ],
  // The configuration passed to the SimplePeer constructor
  // See https://github.com/feross/simple-peer#peer--new-peeropts
  // for more options
  simplePeer: {
    // The configuration passed to the RTCPeerConnection constructor, for more details see
    // https://developer.mozilla.org/en-US/docs/Web/API/RTCPeerConnection/RTCPeerConnection#RTCConfiguration_dictionary
    config: {
      // List of STUN and TURN servers to connect
      // Without the connection is limited to local peers
      iceServers: require('./ice-servers.json')
    }
  },
  // Maximum number of peers (optional)
  // Used in both webrtc (default 5) and ws proxy config (default 24)
  maxPeers: 10,
  // Websocket reconnect delay in milliseconds (optional) (default 1000)
  wsReconnectDelay: 5000
})

// look for peers listed under this topic
const topic = crypto.createHash('sha256')
  .update('my-bitswarm-topic')
  .digest()

swarm.join(topic)

swarm.on('connection', (socket, details) => {
  console.log('new connection!', details)

  // you can now use the socket as a stream, eg:
  // socket.pipe(unichain.replicate()).pipe(socket)
})

swarm.on('disconnection', (socket, details) => {
  console.log(details.peer.host, 'disconnected!')
  console.log('now we have', swarm.peers.length, 'peers!')
})

Build it with Browserify to get it running on the web.

You could also compile an existing codebase relying on bitswarm to run on the web by adding a browser field set to {"bitswarm": "bitswarm-web"} to have Browserify alias it when compiling dependencies.

Setting up a proxy server

BitswarmServer provides two services:

  • BitswarmProxyWS: to proxy bitswarm connections over websockets. Path: ws://yourserver/proxy
  • SignalServer: for P2P WebRTC signaling connections. Path: ws://yourserver/signal

Running a BitswarmServer will allows you to use both services in one single process.

npm i -g @web4/bitswarm-web

# Run it! Default port is 4977 (HYPR on a phone pad)
bitswarm-web

# Run it with a custom port
bitswarm-web --port 42069

Running as a Linux service with SystemD

sudo cat << EOF > /etc/systemd/system/bitswarm-web.service
[Unit]
Description=Bitswarm proxy server which webpages can connect to.

[Service]
Type=simple
# Check that bitswarm-web is present at this location
# If it's not, replace the path with its location
# You can get the location with 'whereis bitswarm-web'
# Optionally add a --port parameter if you don't want 4977
ExecStart=/usr/local/bin/bitswarm-web
Restart=always

[Install]
WantedBy=multi-user.target
EOF

sudo chmod 644 /etc/systemd/system/bitswarm-web.service

sudo systemctl daemon-reload
sudo systemctl enable bitswarm-web
sudo systemctl start bitswarm-web

sudo systemctl status bitswarm-web