Skip to content
This repository has been archived by the owner on Dec 16, 2019. It is now read-only.

🔆 Simple, robust, WebTorrent tracker server implementation

License

Notifications You must be signed in to change notification settings

DiegoRBaquero/uWebTorrentTracker

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

uwt npm downloads js-standard-style npm

Greenkeeper badge

µWT (µWebTorrentTracker) is a simple, robust and lightweight WebTorrent tracker server implementation

travis bitHound Overall Score

tracker

Node.js implementation of a BitTorrent tracker for WebTorrent clients.

A BitTorrent tracker is a web service which responds to requests from BitTorrent clients. The requests include metrics from clients that help the tracker keep overall statistics about the torrent. The response includes a peer list that helps the client participate in the torrent swarm.

This module is used by βTorrent Tracker, the first community operated WebTorrent tracker.

Features

  • Fast & lightweight server implementation
  • Supports ipv4 & ipv6
  • Supports tracker "scrape" extension
  • Robust and well-tested
  • Comprehensive test suite (runs entirely offline, so it's reliable)
  • Tracker statistics available via web interface at /stats or JSON data at /stats.json

Requires NodeJS 6+

Install

npm install uwt

Usage

To start a WebTorrent tracker server to track swarms of peers:

const Server = require('uwt')

const server = new Server({
  stats: true, // enable web-based statistics? [default=true]
  filter: function (infoHash, params, cb) {
    // Blacklist/whitelist function for allowing/disallowing torrents. If this option is
    // omitted, all torrents are allowed. It is possible to interface with a database or
    // external system before deciding to allow/deny, because this function is async.

    // It is possible to block by peer id (whitelisting torrent clients) or by secret
    // key (private trackers). Full access to the original HTTP/UDP request parameters
    // are available in `params`.

    // This example only allows one torrent.

    const allowed = (infoHash === 'aaa67059ed6bd08362da625b3ae77f6f4a075aaa')
    if (allowed) {
      cb(null)
    } else {
      cb(new Error('disallowed torrent'))
    }

    // In addition to returning a boolean (`true` for allowed, `false` for disallowed),
    // you can return an `Error` object to disallow and provide a custom reason.
  }
})

// Internal websocket and http servers exposed as public properties.
server.ws
server.http

server.on('error', function (err) {
  // fatal server error!
  console.log(err.message)
})

server.on('warning', function (err) {
  // client sent bad data. probably not a problem, just a buggy client.
  console.log(err.message)
})

server.on('listening', function () {
  // fired when server is listening
  console.log('listening on http port:' + server.http.address().port)
})

// start tracker server listening! Use 0 to listen on a random free port.
server.listen(port, onlistening)

// listen for individual tracker messages from peers:

server.on('start', function (addr) {
  console.log('got start message from ' + addr)
})

server.on('complete', function (addr) {})
server.on('update', function (addr) {})
server.on('stop', function (addr) {})

// get info hashes for all torrents in the tracker server
Object.keys(server.torrents)

// get the number of seeders for a particular torrent
server.torrents[infoHash].complete

// get the number of leechers for a particular torrent
server.torrents[infoHash].incomplete

// get the peers who are in a particular torrent swarm
server.torrents[infoHash].peers

CLI

Install uwt globally

$ npm install -g uwt

Easily start a tracker server:

$ webtorrent-tracker
Tracker: ws://localhost:8000
Tracker stats: http://localhost:8000/stats

Lots of options:

$ webtorrent-tracker --help
  webtorrent-tracker - Start a webtorrent tracker server

  Usage:
    webtorrent-tracker [OPTIONS]

  Options:
    -p, --port [number]  change the port [default: 8000]
        --trust-proxy    trust 'x-forwarded-for' header from reverse proxy
        --interval       client announce interval (ms) [default: 120000]
        --stats                   enable web-based statistics (default: true)
    -q, --quiet          only show error output
    -s, --silent         show no output
    -v, --version        print the current version

  Please report bugs!  https://github.com/DiegoRBaquero/uwt/issues

License

MIT

Copyright (c) Diego RodrĂ­guez Baquero (uwt)

Copyright (c) Feross Aboukhadijeh (bittorrent-tracker)