Parse a torrent identifier (magnet uri, .torrent file, info hash)
npm install parse-torrent[ci-image]: https://img.shields.io/github/actions/workflow/status/webtorrent/parse-torrent/ci.yml
[ci-url]: https://github.com/webtorrent/parse-torrent/actions
[npm-image]: https://img.shields.io/npm/v/parse-torrent.svg
[npm-url]: https://npmjs.org/package/parse-torrent
[downloads-image]: https://img.shields.io/npm/dm/parse-torrent.svg
[downloads-url]: https://npmjs.org/package/parse-torrent
[standard-image]: https://img.shields.io/badge/code_style-standard-brightgreen.svg
[standard-url]: https://standardjs.com
Works in node and the browser (with browserify). This module is used by WebTorrent!
```
npm install parse-torrent
The return value of parseTorrent will contain as much info as possible about theinfoHash
torrent. The only property that is guaranteed to be present is .
`js
import parseTorrent from 'parse-torrent'
import fs from 'fs'
// info hash (as a hex string)
parseTorrent('d2474e86c95b19b8bcfdb92bc12c9d44667cfa36')
// { infoHash: 'd2474e86c95b19b8bcfdb92bc12c9d44667cfa36' }
// info hash (as a Buffer)
parseTorrent(new Buffer('d2474e86c95b19b8bcfdb92bc12c9d44667cfa36', 'hex'))
// { infoHash: 'd2474e86c95b19b8bcfdb92bc12c9d44667cfa36' }
// magnet uri (as a utf8 string)
parseTorrent('magnet:?xt=urn:btih:d2474e86c95b19b8bcfdb92bc12c9d44667cfa36')
// { xt: 'urn:btih:d2474e86c95b19b8bcfdb92bc12c9d44667cfa36',
// infoHash: 'd2474e86c95b19b8bcfdb92bc12c9d44667cfa36' }
// magnet uri with torrent name
parseTorrent('magnet:?xt=urn:btih:d2474e86c95b19b8bcfdb92bc12c9d44667cfa36&dn=Leaves%20of%20Grass%20by%20Walt%20Whitman.epub')
// { xt: 'urn:btih:d2474e86c95b19b8bcfdb92bc12c9d44667cfa36',
// dn: 'Leaves of Grass by Walt Whitman.epub',
// infoHash: 'd2474e86c95b19b8bcfdb92bc12c9d44667cfa36',
// name: 'Leaves of Grass by Walt Whitman.epub' }
// magnet uri with trackers
parseTorrent('magnet:?xt=urn:btih:d2474e86c95b19b8bcfdb92bc12c9d44667cfa36&tr=http%3A%2F%2Ftracker.example.com%2Fannounce')
// { xt: 'urn:btih:d2474e86c95b19b8bcfdb92bc12c9d44667cfa36',
// tr: 'http://tracker.example.com/announce',
// infoHash: 'd2474e86c95b19b8bcfdb92bc12c9d44667cfa36',
// announce: [ 'http://tracker.example.com/announce' ] }
// .torrent file (as a Buffer)
parseTorrent(fs.readFileSync(__dirname + '/torrents/leaves.torrent'))
// { info:
// { length: 362017,
// name:
// 'piece length': 16384,
// pieces:
// infoBuffer:
// infoHash: 'd2474e86c95b19b8bcfdb92bc12c9d44667cfa36',
// name: 'Leaves of Grass by Walt Whitman.epub',
// private: false,
// created: Thu Aug 01 2013 06:27:46 GMT-0700 (PDT),
// comment: 'Downloaded from http://TheTorrent.org',
// announce:
// [ 'http://tracker.example.com/announce' ],
// urlList: [],
// files:
// [ { path: 'Leaves of Grass by Walt Whitman.epub',
// name: 'Leaves of Grass by Walt Whitman.epub',
// length: 362017,
// offset: 0 } ],
// length: 362017,
// pieceLength: 16384,
// lastPieceLength: 1569,
// pieces:
// [ '1f9c3f59beec079715ec53324bde8569e4a0b4eb',
// 'ec42307d4ce5557b5d3964c5ef55d354cf4a6ecc',
// '7bf1bcaf79d11fa5e0be06593c8faafc0c2ba2cf',
// '76d71c5b01526b23007f9e9929beafc5151e6511',
// '0931a1b44c21bf1e68b9138f90495e690dbc55f5',
// '72e4c2944cbacf26e6b3ae8a7229d88aafa05f61',
// 'eaae6abf3f07cb6db9677cc6aded4dd3985e4586',
// '27567fa7639f065f71b18954304aca6366729e0b',
// '4773d77ae80caa96a524804dfe4b9bd3deaef999',
// 'c9dd51027467519d5eb2561ae2cc01467de5f643',
// '0a60bcba24797692efa8770d23df0a830d91cb35',
// 'b3407a88baa0590dc8c9aa6a120f274367dcd867',
// 'e88e8338c572a06e3c801b29f519df532b3e76f6',
// '70cf6aee53107f3d39378483f69cf80fa568b1ea',
// 'c53b506159e988d8bc16922d125d77d803d652c3',
// 'ca3070c16eed9172ab506d20e522ea3f1ab674b3',
// 'f923d76fe8f44ff32e372c3b376564c6fb5f0dbe',
// '52164f03629fd1322636babb2c014b7dae582da4',
// '1363965261e6ce12b43701f0a8c9ed1520a70eba',
// '004400a267765f6d3dd5c7beb5bd3c75f3df2a54',
// '560a61801147fa4ec7cf568e703acb04e5610a4d',
// '56dcc242d03293e9446cf5e457d8eb3d9588fd90',
// 'c698de9b0dad92980906c026d8c1408fa08fe4ec' ] }
`
The reverse works too. To convert an object of keys/value to a magnet uri or .torrent file
buffer, use toMagnetURI and toTorrentFile.
`js
import { toMagnetURI, toTorrentFile } from 'parse-torrent'
const uri = toMagnetURI({
infoHash: 'd2474e86c95b19b8bcfdb92bc12c9d44667cfa36'
})
console.log(uri) // 'magnet:?xt=urn:btih:d2474e86c95b19b8bcfdb92bc12c9d44667cfa36'
const buf = toTorrentFile({
info: {
/ ... /
}
})
console.log(buf)
`
To support remote torrent identifiers (i.e. http/https links to .torrent files, or
filesystem paths), as well as Blobs use the parseTorrent.remote function. It takes
a callback since these torrent types require async operations:
`js`
import { remote } from 'parse-torrent'
remote(torrentId, (err, parsedTorrent) => {
if (err) throw err
console.log(parsedTorrent)
})
If the torrentId is an http/https link to the .torrent file, then the request to the filesimple-get
can be modified by passing params. For example:
`js`
import { remote } from 'parse-torrent'
remote(torrentId, { timeout: 60 * 1000 }, (err, parsedTorrent) => {
if (err) throw err
console.log(parsedTorrent)
})
This package also includes a command line program.
``
Usage: parse-torrent /path/to/torrent
parse-torrent magnet_uri
parse-torrent --stdin
To install it, run:
```
npm install parse-torrent -g
MIT. Copyright (c) Feross Aboukhadijeh and WebTorrent, LLC.