torrent-discovery
Version:
Discover BitTorrent and WebTorrent peers
105 lines (68 loc) • 3.48 kB
Markdown
[]: https://img.shields.io/travis/feross/torrent-discovery/master.svg?style=flat
[]: https://travis-ci.org/feross/torrent-discovery
[]: https://img.shields.io/npm/v/torrent-discovery.svg?style=flat
[]: https://npmjs.org/package/torrent-discovery
[]: https://img.shields.io/npm/dm/torrent-discovery.svg?style=flat
[]: https://npmjs.org/package/torrent-discovery
This module bundles [bittorrent-dht](https://github.com/feross/bittorrent-dht) and
[](https://github.com/feross/bittorrent-tracker) clients and exposes a
single API for discovering BitTorrent peers via both discovery methods.
- simple API
- find peers from trackers and the DHT
- 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](http://browserify.org). In
that context, it discovers [WebTorrent](http://webtorrent.io) (WebRTC) peers.
```
npm install torrent-discovery
```
Create a new peer discovery instance. Required options are:
```
{
peerId: '', // as utf8 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? also, can optionally pass in global DHT instance to use
tracker: true, // use trackers?
rtcConfig: {}, // RTCPeerConnection config object (only used in browser)
wrtc: {} // custom webrtc implementation, mainly useful in node to specify in the [wrtc](https://npmjs.com/package/wrtc) package
}
```
**This module automatically handles announcing to the DHT, for maximum peer discovery.**
When you learn the infoHash (hex string) of the torrent, call this method to begin
searching for peers.
Later, when you get the full torrent metadata (parsed via [parse-torrent](https://github.com/feross/parse-torrent)), call this method again to ensure more accurate tracker stats
(because we now know the torrent length).
#### `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.stop()`
Destroy and cleanup the DHT and tracker instances.
### events
#### `discovery.on('peer', function (peer) {})`
Emitted whenever a new peer is discovered.
**In node**, `peer` is a string in the form `12:34:56:78:4000`.
**In the browser**, `peer` is an instance of
[`simple-peer`](https://github.com/feross/simple-peer), a small wrapper around a WebRTC
peer connection.
Emitted whenever an `announce` message has been sent to the DHT.
Emitted when there is a non-fatal DHT or tracker error, like an inaccessible tracker
server. Useful for logging. This is non-fatal.
Emitted when there is a fatal, unrecoverable DHT or tracker error.
MIT. Copyright (c) [Feross Aboukhadijeh](http://feross.org).