
Research
/Security News
GlassWASM: WebAssembly Malware Found in Trojanized Open VSX Extensions
The trojanized extensions use TinyGo-compiled WebAssembly and Solana transaction memos to resolve command-and-control infrastructure.
@ctrl/rtorrent
Advanced tools
TypeScript API wrapper for rTorrent XML-RPC interface
DOCS: https://rtorrent.ep.workers.dev
npm install @ctrl/rtorrent
import { RTorrent } from '@ctrl/rtorrent';
const rtorrent = new RTorrent({
baseUrl: 'http://localhost:8080',
path: '/RPC2',
username: 'admin',
password: 'admin',
timeout: 5000,
useSsl: false,
});
// Get all torrents (normalized format)
const torrents = await rtorrent.getAllData();
// Get all torrents (raw rTorrent format)
const rawTorrents = await rtorrent.getAllTorrents();
// Get specific torrent by hash
const torrent = await rtorrent.getTorrent('abc123...');
// Add from magnet URL
await rtorrent.addMagnet('magnet:?xt=urn:btih:...', {
rtorrent: {
label: 'movies',
priority: RTorrentPriority.High,
directory: '/downloads/movies',
start: true,
},
});
// Add from torrent file
const fileContent = new Uint8Array(/* torrent file bytes */);
await rtorrent.addTorrentFromFile(fileContent, {
label: 'tv-shows',
priority: RTorrentPriority.Normal,
directory: '/downloads/tv',
});
// Add using normalized interface
const normalizedTorrent = await rtorrent.normalizedAddTorrent('magnet:?xt=urn:btih:...', {
startPaused: false,
label: 'movies',
});
// Start/stop torrents
await rtorrent.startTorrent('abc123...');
await rtorrent.stopTorrent('abc123...');
// Set priority
await rtorrent.setTorrentPriority('abc123...', RTorrentPriority.High);
// Set label/category
await rtorrent.setTorrentLabel('abc123...', 'completed');
// Remove torrent
await rtorrent.removeTorrent('abc123...', false); // false = don't delete files
// Get torrent files
const files = await rtorrent.getTorrentFiles('abc123...');
// Get torrent trackers
const trackers = await rtorrent.getTorrentTrackers('abc123...');
// Get torrent peers
const peers = await rtorrent.getTorrentPeers('abc123...');
// Get system information
const systemInfo = await rtorrent.getSystemInfo();
const version = await rtorrent.getVersion();
// Set download/upload rate limits (bytes per second)
await rtorrent.setDownloadRateLimit('abc123...', 1024 * 1024); // 1 MB/s
await rtorrent.setUploadRateLimit('abc123...', 512 * 1024); // 512 KB/s
// Get current limits
const downloadLimit = await rtorrent.getDownloadRateLimit('abc123...');
const uploadLimit = await rtorrent.getUploadRateLimit('abc123...');
// Get available views
const views = await rtorrent.getViews();
// Add torrent to view
await rtorrent.addTorrentToView('abc123...', 'completed');
// Remove torrent from view
await rtorrent.removeTorrentFromView('abc123...', 'completed');
// Export client state for persistence
const state = rtorrent.exportState();
// Restore client from state
const restoredClient = RTorrent.createFromState(config, state);
interface RTorrentConfig {
baseUrl: string; // rTorrent XML-RPC endpoint URL
path?: string; // XML-RPC path (default: '/RPC2')
username?: string; // Username for HTTP Basic Authentication
password?: string; // Password for HTTP Basic Authentication
timeout?: number; // Request timeout in ms (default: 5000)
useSsl?: boolean; // Use HTTPS (default: false)
}
enum RTorrentPriority {
DoNotDownload = 0,
Low = 1,
Normal = 2,
High = 3,
}
enum RTorrentTorrentState {
Stopped = 0,
Started = 1,
Checking = 2,
Starting = 3,
Stopping = 4,
}
Start a test rTorrent container:
docker run -d \
--name=rutorrent \
-e PUID=1000 \
-e PGID=1000 \
-e TZ=Etc/UTC \
-p 8080:80 \
-p 49164:49164 \
-p 49164:49164/udp \
--restart unless-stopped \
lscr.io/linuxserver/rutorrent:latest
The XML-RPC endpoint will be available at http://localhost:8080/RPC2.
This library communicates with rTorrent using its XML-RPC interface. Key methods used:
d.multicall2 - Get torrent informationload.start / load.normal - Add torrents from URLload.raw_start / load.raw - Add torrents from filed.erase - Remove torrentsd.start / d.stop - Control torrent statesystem.client_version - Get version informationFor complete API documentation, see the rTorrent XML-RPC wiki.
MIT
FAQs
TypeScript api wrapper for rtorrent
The npm package @ctrl/rtorrent receives a total of 2 weekly downloads. As such, @ctrl/rtorrent popularity was classified as not popular.
We found that @ctrl/rtorrent demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Research
/Security News
The trojanized extensions use TinyGo-compiled WebAssembly and Solana transaction memos to resolve command-and-control infrastructure.

Security News
Anthropic says the directive cited national security concerns over a narrow jailbreak, but offered no specific technical details.

Security News
A network of 152 Chrome live wallpaper extensions hid ad tracking and made extension-driven traffic look like Google search clicks.