Important: This documentation covers Yarn 1 (Classic).
For Yarn 2+ docs and migration guide, see yarnpkg.com.

Package detail

rutorrent-promise

ctessier41MIT2.0.0

An API client for ruTorrent using promises

torrents, rutorrent, api

readme

⬇️ node-rutorrent-promise

version dependencies size downloads license

Interact with ruTorrent via promises 👌

This was inspired by Grant's transmission library. It provides methods to communicate with ruTorrent client using promises. It works thanks to the HTTPRPC plugin.

Installation

npm i rutorrent-promise --save
const RuTorrent = require('rutorrent-promise');

const rutorrent = new RuTorrent({
  host: 'localhost', // default: localhost
  port: 80,          // default: 80
  path: '',          // default: /rutorrent
  ssl: true,         // default: false
  username: '',      // default: none
  password: '',      // default: none
});

Available fields

An array of fields can be passed to the get and addFile methods in order to retrieve specific values from the torrents. The list is taken from the available properties provided by the HTTPRPC ruTorrent plugin. Here it is:

  • d.is_open
  • d.is_hash_checking
  • d.is_hash_checked
  • d.get_state
  • d.get_name
  • d.get_size_bytes
  • d.get_completed_chunks
  • d.get_size_chunks
  • d.get_bytes_done
  • d.get_up_total
  • d.get_ratio
  • d.get_up_rate
  • d.get_down_rate
  • d.get_chunk_size
  • d.get_custom1
  • d.get_peers_accounted
  • d.get_peers_not_connected
  • d.get_peers_connected
  • d.get_peers_complete
  • d.get_left_bytes
  • d.get_priority
  • d.get_state_changed
  • d.get_skip_total
  • d.get_hashing
  • d.get_chunks_hashed
  • d.get_base_path
  • d.get_creation_date
  • d.get_tracker_focus
  • d.is_active
  • d.get_message
  • d.get_custom2
  • d.get_free_diskspace
  • d.is_private
  • d.is_multi_file

Methods

get(fields = [])

List all the torrents.

rutorrent
  .get(['d.get_name', 'd.get_custom1', 'd.get_size_bytes'])
    .then((data) => {
      console.log(data);
      // [
      //   {
      //     hashString: '286D2E5B4F8369855328336AC1263AE02A7A60D5',
      //     'd.get_name': 'ubuntu-18.04.4-desktop-amd64.iso',
      //     'd.get_custom1': 'linux-distro',
      //     'd.get_size_bytes': '2126544896'
      //   },
      //   {
      //     hashString: 'EE55335F2ACDE309FA645FAB11C04750D7E45FA1',
      //     'd.get_name': 'ubuntu-16.04.6-desktop-amd64.iso',
      //     'd.get_custom1': 'linux-distro',
      //     'd.get_size_bytes': '1664614400'
      //   }
      // ]
    })
    .catch((err) => {
      // something happened...
    });

addFile(file, options = {})

Add a new torrent from a file.

rutorrent
  .addFile(fs.readFileSync('/path/to/ubuntu-18.04.4-desktop-amd64.iso.torrent'), {
    label: 'linux-distro',
    destination: '/downloads',
  })
    .then(() => {
      // torrent was added!
    })
    .catch((err) => {
      // something happenned...
    });

addUrl(url, options = {})

Add a new torrent from an url.

rutorrent
  .addUrl('http://releases.ubuntu.com/18.04/ubuntu-18.04.4-desktop-amd64.iso.torrent', {
    label: 'linux-distro',
    destination: '/downloads',
  })
    .then(() => {
      // torrent was added!
    })
    .catch((err) => {
      // something happenned...
    });

delete(hash, deleteTiedFiles = true)

Delete a torrent.

rutorrent
  .delete('286D2E5B4F8369855328336AC1263AE02A7A60D5')
    .then(() => {
      // torent has been deleted!
    })
    .catch((err) => {
      // something happened...
    });

Contributing

👨‍💻👩‍💻

Feel free to contribute and help me add more methods to interact with ruTorrent.

To run the unit tests, create an .env file in the test directory and fill it in with your client host and credentials:

$ cp test/.env.sample test/.env
$ cat test/.env
HOST=YOUR_CLIENT_HOST
PORT=YOUR_CLIENT_PORT
PREFIX_PATH=YOUR_CLIENT_PREFIX_PATH # (default is /rutorrent)
SSL=true                            # (https or http)
LOGIN=YOUR_CLIENT_LOGIN
PASSWORD=YOUR_CLIENT_PASSWORD

$ npm i && npm t

changelog

Release Notes

v2.0.0

Released 2020/03/29

:warning: This release introduces breaking changes from 1.3.0.

Breaking changes

The methods to add a torrent no longer return details on the added torrent. This feature was time consuming as it required two requests. It was also not working as expected when adding a torrent that already existed. Check the documentation for more details.

If you still wish to get details on a torrent file or magnet, have a look at the webtorrent/parse-torrent library.

Changed

  • Improvement was made on the library weight. axios has been replaced by node-fetch which drastically reduces the size of the package.

v1.3.0

Released 2020/03/20

Added

  • Possibility to add a torrent via an URL (#13)

Fixed

  • Conflict with USERNAME environment variable on Linux (#14)

v1.2.0

Released 2020/03/15

Added

  • Possibility to delete a torrent (#8)
  • Upgrade Axios version to 0.19.2 (#10)

Fixed

  • Conflict with PATH environment variable (#9)

v1.1.1

Released 2020/02/19

Fixed

  • fix option property for providing a custom path (Thanks @ShaunLWM #5)

v1.1.0

Released 2019/11/02

Breaking changes

  • totalBytes, bytesDone and label are no longer returned from the get method. You must now specified a list of fields to retrieve (see documentation)

Added

  • possibility to specify wanted fields when retrieving torrents (#1)

v1.0.0

Released 2019/11/01