@egeria/powersteer
v2.1.1
Published
A Transmission RPC client
Downloads
11
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);