@ctrl/qbittorrent
    Preparing search index...

    @ctrl/qbittorrent

    qBittorrent npm coverage

    TypeScript api wrapper for qBittorrent using ofetch

    npm install @ctrl/qbittorrent
    
    import { QBittorrent } from '@ctrl/qbittorrent';

    const client = new QBittorrent({
    baseUrl: 'http://localhost:8080/',
    username: 'admin',
    password: 'adminadmin',
    });

    async function main() {
    const res = await client.getAllData();
    console.log(res);
    }

    Docs: https://qbittorrent.vercel.app
    qBittorrent Api Docs: https://github.com/qbittorrent/qBittorrent/wiki/WebUI-API-(qBittorrent-4.1)

    These functions have been normalized between torrent clients to easily support switching between multiple torrent clients. See below for alternative supported torrent clients

    Returns all torrent data and an array of label objects. Data has been normalized and does not match the output of native listTorrents().

    const data = await client.getAllData();
    console.log(data.torrents);

    Returns one torrent data from torrent hash

    const data = await client.getTorrent('torrent-hash');
    console.log(data);

    Pause or resume a torrent

    const paused = await client.pauseTorrent();
    console.log(paused);
    const resumed = await client.resumeTorrent();
    console.log(resumed);

    Remove a torrent. Does not remove data on disk by default.

    // does not remove data on disk
    const result = await client.removeTorrent('torrent_id', false);
    console.log(result);

    // remove data on disk
    const res = await client.removeTorrent('torrent_id', true);
    console.log(res);

    Add a torrent, has client specific options. Also see normalizedAddTorrent

    const result = await client.addTorrent(fs.readFileSync(torrentFile));
    console.log(result);

    Add a torrent and return normalized torrent data, can start a torrent paused and add label

    const result = await client.normalizedAddTorrent(fs.readFileSync(torrentFile), {
    startPaused: false;
    label: 'linux';
    });
    console.log(result);

    If you're shutting down the server often (serverless?) you can export the state

    const state = client.exportState()
    const client = QBittorrent.createFromState(config, state);

    All of the following npm modules provide the same normalized functions along with supporting the unique apis for each client.

    deluge - https://github.com/scttcper/deluge
    transmission - https://github.com/scttcper/transmission
    utorrent - https://github.com/scttcper/utorrent

    docker run -d \
    --name=qbittorrent \
    -e PUID=1000 \
    -e PGID=1000 \
    -e TZ=Etc/UTC \
    -e WEBUI_PORT=8080 \
    -p 8080:8080 \
    -p 6881:6881 \
    -p 6881:6881/udp \
    --restart unless-stopped \
    lscr.io/linuxserver/qbittorrent:latest