• Stars
    star
    216
  • Rank 183,179 (Top 4 %)
  • Language
    JavaScript
  • License
    MIT License
  • Created over 10 years ago
  • Updated 4 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Discover BitTorrent and WebTorrent peers

torrent-discovery ci npm downloads javascript style guide

Discover BitTorrent and WebTorrent peers

This module bundles bittorrent-tracker, bittorrent-dht, and bittorrent-lsd clients and exposes a single API for discovering BitTorrent peers.

features

  • simple API
  • find peers from trackers, DHT, and LSD
  • automatically announces, so other peers can discover us
  • can start finding peers with just an info hash, before full metadata is available

This module also works in the browser with browserify. In that context, it discovers WebTorrent (WebRTC) peers.

install

npm install torrent-discovery

api

discovery = new Discovery(opts)

Create a new peer discovery instance. Required options are:

{
  infoHash: '', // as hex string or Buffer
  peerId: '',   // as hex string or Buffer
  port: 0       // torrent client port (only required in node)
}

Optional options are:

{
  announce: [],  // force list of announce urls to use (from magnet uri)
  dht: true,     // use dht? optionally, this can be an `opts` object, or a DHT instance to use (can be reused for multiple torrents)
  dhtPort: 0,    // custom listen port for the DHT instance (not used if DHT instance is given via `opts.dht`)
  userAgent: '', // User-Agent header for http requests
  tracker: true, // use trackers? optionally, this can be an `opts` object
  lsd: true      // use lsd?
}

See the documentation for bittorrent-tracker, bittorrent-dht, and bittorrant-lsd for information on what options are available via the opts object.

This module automatically handles announcing on intervals, for maximum peer discovery.

discovery.updatePort(port)

When the port that the torrent client is listening on changes, call this method to reannounce to the tracker and DHT with the new port.

discovery.complete([opts])

Announce that download has completed (and the client is now a seeder). This is only used by trackers, for statistical purposes. If trackers are not in use, then this method is a no-op.

Optional opts object with the following options:

{number=} opts.uploaded
{number=} opts.downloaded
{number=} opts.numwant
{number=} opts.left (if not set, calculated automatically)

discovery.destroy()

Destroy and cleanup the tracker, DHT, and LSD instances.

events

discovery.on('peer', (peer, source) => {})

Emitted whenever a new peer is discovered. Source is either 'tracker', 'dht', or 'lsd' based on peer source.

In node, peer is a string in the form ip:port, e.g. 12.34.56.78:4000.

In the browser, peer is an instance of simple-peer, a small wrapper around a WebRTC peer connection.

discovery.on('dhtAnnounce', () => {})

Emitted whenever an announce message has been sent to the DHT.

discovery.on('warning', err => {})

Emitted when there is a non-fatal tracker, DHT, or LSD error. For example, an inaccessible tracker server would be considered a warning. Useful for logging.

discovery.on('error', err => {})

Emitted when there is a fatal tracker, DHT, or LSD error. This is unrecoverable and the discovery object will be destroyed if this event is emitted.

license

MIT. Copyright (c) Feross Aboukhadijeh and WebTorrent, LLC.

More Repositories

1

webtorrent

⚡️ Streaming torrent client for the web
JavaScript
29,385
star
2

webtorrent-desktop

❤️ Streaming torrent app for Mac, Windows, and Linux
JavaScript
9,659
star
3

instant.io

🚀 Streaming file transfer over WebTorrent (torrents on the web)
JavaScript
3,423
star
4

bittorrent-tracker

🌊 Simple, robust, BitTorrent tracker (client & server) implementation
JavaScript
1,744
star
5

bittorrent-dht

🕸 Simple, robust, BitTorrent DHT implementation
JavaScript
1,216
star
6

webtorrent-cli

WebTorrent, the streaming torrent client. For the command line.
JavaScript
1,154
star
7

webtorrent-hybrid

WebTorrent (with WebRTC support in Node.js)
JavaScript
518
star
8

parse-torrent

Parse a torrent identifier (magnet uri, .torrent file, info hash)
JavaScript
438
star
9

create-torrent

Create .torrent files
JavaScript
342
star
10

bittorrent-protocol

Simple, robust, BitTorrent peer wire protocol implementation
JavaScript
342
star
11

magnet-uri

Parse a magnet URI and return an object of keys/values
JavaScript
221
star
12

node-bencode

bencode de/encoder for nodejs
JavaScript
165
star
13

webtorrent.io

The code that runs the WebTorrent website
JavaScript
125
star
14

ut_metadata

BitTorrent Extension for Peers to Send Metadata Files (BEP 9)
JavaScript
110
star
15

bittorrent-peerid

Map a BitTorrent peer ID to a human-readable client name and version
JavaScript
65
star
16

parse-torrent-file

DEPRECATED: Parse a .torrent file and return an object of keys/values
JavaScript
63
star
17

ut_pex

Implementation of ut_pex bittorrent protocol (PEX) for webtorrent
JavaScript
58
star
18

workshop

Learn WebTorrent and WebRTC in a guided workshop!
48
star
19

bittorrent-lsd

Local Service Discovery (BEP14) implementation
JavaScript
35
star
20

fs-chunk-store

Filesystem (fs) chunk store that is abstract-chunk-store compliant
JavaScript
33
star
21

torrent-piece

Torrent piece abstraction
JavaScript
23
star
22

webtorrent-fixtures

Sample torrent files for the WebTorrent test suite
JavaScript
22
star
23

load-ip-set

download and parse ip-set (blocklist) files
JavaScript
22
star
24

lt_donthave

The BitTorrent lt_donthave extension (BEP 54)
JavaScript
11
star
25

addr-to-ip-port

Convert an "address:port" string to an array [address:string, port:number]
JavaScript
10
star
26

bep53-range

Parse and compose Magnet URI extension (BEP53) ranges
JavaScript
9
star
27

string2compact

Convert 'hostname:port' strings to BitTorrent's compact ip/host binary returned by Trackers
JavaScript
9
star
28

renovate-config

Renovate's config
1
star
29

semantic-release-config

JavaScript
1
star
30

.github

1
star