npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

webtorrent-remote

v2.1.0

Published

Run WebTorrent in one process, control it from another process or even another machine

Downloads

20

Readme

webtorrent-remote npm downloads javascript style guide

run WebTorrent in one process, control it from another process or even another machine.

plain Javascript, no es6

server process

var WebTorrentRemoteServer = require('webtorrent-remote/server')

var opts = null
var server = new WebTorrentRemoteServer(send, opts)

function send (message) {
  // Send `message` to the correct client. It's JSON serializable.
  // Use TCP, some kind of IPC, whatever.
  // If there are multiple clients, look at message.clientKey
}

// When messages come back from the IPC channel, call:
server.receive(message)

server options

opts.heartbeatTimeout

remove clients if we don't hear a heartbeat for this many milliseconds. default 30000 (30 seconds). set to 0 to disable the heartbeat check. once a torrent has no remaining clients, it will be removed. once there are no remaining torrents, the whole webtorrent instance will be destroyed. the webtorrent instance is created lazily the first time a client calls add().

opts.updateInterval

send progress updates every x milliseconds to all clients of all torrents. default 1000 (1 second). set to 0 to disable progress updates.

other options

all WebTorrent options. the options object is passed to the constructor for the underlying WebTorrent instance.

debugging

This package uses debug for debug logging. Set the environment variable DEBUG=webtorrent-remote for detailed debug logs.

client process(es)

var WebTorrentRemoteClient = require('webtorrent-remote/client')

var opts = null
var client = new WebTorrentRemoteClient(send, opts)

function send (message) {
  // Same as above, except send the message to the server process
}

// When messages come back from the server, call:
client.receive(message)

// Now `client` is a drop-in replacement for the normal WebTorrent object!
var torrentId = 'magnet:?xt=urn:btih:6a9759bffd5c0af65319979fb7832189f4f3c35d'
client.add(torrentId, function (err, torrent) {
  torrent.on('metadata', function () {
    console.log(JSON.stringify(torrent.files))
    // Prints [{name:'sintel.mp4'}]
  })

  var server = torrent.createServer()
  server.listen(function () {
    console.log('http://localhost:' + server.address().port)
    // Paste that into your browser to stream Sintel!
  })
})

client options

opts.heartbeat

send a heartbeat once every x milliseconds. default 5000 (5 seconds). set to 0 to disable heartbeats.

client methods

client.add(torrentID, [options], callback)

like WebTorrent.add, but only async. calls back with (err, torrent). The torrent is a torrent object (see below for methods).

client.get(torrentID, callback)

like WebTorrent.get, but async. calls back with (err, torrent). if the torrentId is not yet in the client, err.name will be 'TorrentMissingError'.

client.destroy()

like WebTorrent.destroy, but destroys only this client. if a given torrent has no clients left, it will be destroyed too. if all torrents are gone, the whole WebTorrent instance will be destroyed on the server side.

client events, from webtorrent

  • client.on('error', () => {...})
  • client.on('warning', () => {...})

torrent methods

the client gives you a torrent object in the callback to get or add. this supports a subset of the WebTorrent API, forwarding commands to the WebTorrentRemoteServer and emitting events:

torrent.createServer()

create a local torrent-to-HTTP streaming server.

torrent events, unique to webtorrent-remote, not in webtorrent

  • torrent.on('update', () => {...}): fires periodically, see updateInterval

torrent events, from webtorrent

  • torrent.on('infohash', () => {...})
  • torrent.on('metadata', () => {...})
  • torrent.on('download', () => {...})
  • torrent.on('upload', () => {...})
  • torrent.on('done', () => {...})
  • torrent.on('error', () => {...})
  • torrent.on('warning', () => {...})

torrent props unique to webtorrent-remote, not in webtorrent

  • torrent.client: the WebTorrentRemoteClient
  • torrent.key: the clientKey used for messaging

torrent props, from webtorrent (updated once on infohash or metadata)

  • torrent.infoHash
  • torrent.name
  • torrent.length
  • torrent.files

torrent props, from webtorrent (updated on every progress event)

  • torrent.progress
  • torrent.downloaded
  • torrent.uploaded
  • torrent.downloadSpeed
  • torrent.uploadSpeed
  • torrent.numPeers
  • torrent.progress
  • torrent.timeRemaining

server methods

server.address()

gets an address object like { address: '::', family: 'IPv6', port: 52505 } that shows what host and port the server is listening on.

server.listen(onlistening)

tells the server to start listening. the onlistening function is called when the server starts listening.

server events

  • server.on('listening', () => {...})