@egeria/powersteer
v2.1.1
Published
A Transmission RPC client
Downloads
8
Maintainers
Readme
Powersteer
About
Powersteer lets you communicate with Transmission.
It provides access to the entire Transmission API and performs checks on arguments before sending anything to transmission-daemon.
Creating a new client
Require Powersteer and create a new client:
var Powersteer = require('powersteer');
var rpc = new Powersteer({
url: 'http://my.box.ip:9091/transmission/rpc',
username: 'mysides',
password: 'theyaregone'
});
The constructor accepts an object with the following fields:
url
(mandatory)
Self-explanatory enough, but make sure you don't simply give the ip and port of your box; Transmission listens for RPC calls on a specific HTTP address. If we assume the Transmission instance to be installed locally, the default address is 'http://127.0.0.1:9091/transmission/rpc'.
username
(optional)
If you ave secured your Transmission daemon, put your username here.
password
(optional)
If you have provided a username, the password becomes mandatory. The constructor will throw if you don't provide one.
If you set one of the fields username
and password
to any value that isn't null
, the other field becomes mandatory.
Using a client
I tried to follow Transmission's docs as closely as possible.
These are the methods available in Powersteer with the respective Transmission procedures:
|Powersteer|Transmission| |---|---| |torrentStart | 'torrent-start'| |torrentStartNow | 'torrent-start-now'| |torrentStop | 'torrent-stop'| |torrentVerify | 'torrent-verify'| |torrentReannounce | 'torrent-reannounce'| |torrentSet | 'torrent-set'| |torrentGet | 'torrent-get'| |torrentAdd | 'torrent-add'| |torrentRemove | 'torrent-remove'| |torrentSetLocation | 'torrent-set-location'| |torrentRenamePath | 'torrent-rename-path'| |sessionSet | 'session-set'| |sessionGet | 'session-get'| |sessionStats | 'session-stats'| |blocklistUpdate | 'blocklist-update'| |portTest | 'port-test'| |sessionClose | 'session-close'| |queueMoveTop | 'queue-move-top'| |queueMoveUp | 'queue-move-up'| |queueMoveDown | 'queue-move-down'| |queueMoveBottom | 'queue-move-bottom'| |freeSpace | 'free-space'|
torrentStart
, torrentStartNow
, torrentStop
, torrentVerify
, torrentReannounce
Arguments: a list of torrent ids in the form:
{
ids: [1, 2, 3, ...]
}
torrentSet
Arguments:
|Field|Type|Description| |---|---|---| |bandwidthPriority | Number | this torrent's bandwidth tr_priority_t| |downloadLimit | Number | maximum download speed (KBps)| |downloadLimited | Boolean | true if downloadLimit is honored| |files-wanted | Array | indices of file(s) to download| |files-unwanted | Array | indices of file(s) to not download| |honorsSessionLimits | Boolean | true if session upload limits are honored| |ids | Array | list of torrent ids; if empty, it means "all torrents"| |location | String | new location of the torrent's content| |peer-limit | Number | maximum number of peers| |priority-high | Array | indices of high-priority file(s)| |priority-low | Array | indices of low-priority file(s)| |priority-normal | Array | indices of normal-priority file(s)| |queuePosition | Number | position of this torrent in its queue [0...n)| |seedIdleLimit | Number | torrent-level number of minutes of seeding inactivity| |seedIdleMode | Number | which seeding inactivity to use. See tr_idlelimit| |seedRatioLimit | Number | torrent-level seeding ratio| |seedRatioMode | Number | which ratio to use. See tr_ratiolimit| |trackerAdd | Array | strings of announce URLs to add| |trackerRemove | Array | ids of trackers to remove| |trackerReplace | Array | pairs of <trackerId/new announce URLs>| |uploadLimit | Number | maximum upload speed (KBps)| |uploadLimited | Boolean | true if uploadLimit is honored|
You must specify at least one.
torrentGet
Arguments: a list of fields to retrieve in the form:
{
fields: ['field1', 'field2', 'field3', ...]
}
You must be precise. The correct name of every available field is in the docs, section "3.3".
torrentAdd
Arguments:
|Field | Type | Description| |---|---|---| |cookies | String | pointer to a string of one or more cookies.| |download-dir | String | path to download the torrent to| |filename | String | filename or URL of the .torrent file| |metainfo | String | base64-encoded .torrent content| |paused | Boolean | if true, don't start the torrent| |peer-limit | Number | maximum number of peers| |bandwidthPriority | Number | torrent's bandwidth tr_priority_t| |files-wanted | Array | indices of file(s) to download| |files-unwanted | Array | indices of file(s) to not download| |priority-high | Array | indices of high-priority file(s)| |priority-low | Array | indices of low-priority file(s)| |priority-normal | Array | indices of normal-priority file(s)|
torrentRemove
Arguments: a list of torrent ids and a Boolean delete-local-data
field (when true, delete all downloaded files belonging to the removed torrents).
torrentSetLocation
Arguments:
|Field|Type|Description| |---|---|---| |ids | Array | torrent list |location | String | the new download location |move | Boolean | if true, move from previous location. otherwise, search "location" for files (default: false)
torrentRenamePath
See the docs, section "3.7".
TODO (available but undocumented)
sessionSet, sessionGet, sessionStats, blocklistUpdate, portTest, sessionClose, queueMoveTop, queueMoveUp, queueMoveDown, queueMoveBottom, freeSpace
See the docs
Example
var Powersteer = require('powersteer');
var trace = (x) => {console.log('TRACE: ', x); return x;};
var rpc = new Powersteer({url: 'http://my.box.ip:9091/transmission/rpc'});
rpc.torrentGet({fields: ['id', 'name', 'percentDone']}).then(trace).catch(trace);
rpc.torrentAdd({filename: 'http://cdimage.debian.org/debian-cd/8.2.0/amd64/bt-cd/debian-8.2.0-amd64-CD-1.iso.torrent', paused: true}).then(trace).catch(trace);