@ctrl/utorrent
    Preparing search index...

    @ctrl/utorrent

    utorrent

    npm coverage

    TypeScript api wrapper for utorrent using ofetch

    npm install @ctrl/utorrent
    
    import { Utorrent } from '@ctrl/utorrent';

    const client = new Utorrent({
    baseUrl: 'http://localhost:44822/',
    path: '/gui/',
    password: 'admin',
    });

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

    You can persist the authenticated session between runs to avoid logging in every time. Use exportState() to serialize, and Utorrent.createFromState() to restore.

    import { Utorrent } from '@ctrl/utorrent';

    // First run: create client, it will authenticate on first request
    const client = new Utorrent({
    baseUrl: 'http://localhost:44822/',
    path: '/gui/',
    password: 'admin',
    });

    // After doing some work, save state (persist somewhere, e.g., file/db)
    const stateJson = client.exportState();
    // Example: write to disk
    // await fs.promises.writeFile('utorrent-state.json', JSON.stringify(stateJson));

    // Next run: restore from saved state
    // const saved = JSON.parse(await fs.promises.readFile('utorrent-state.json', 'utf8'));
    const restored = Utorrent.createFromState(
    {
    baseUrl: 'http://localhost:44822/',
    path: '/gui/',
    password: 'admin',
    },
    stateJson,
    );

    // Use the restored client; it will reuse cookie/token until expiry
    const data = await restored.getAllData();
    console.log(data.torrents.length);

    DOCS: https://utorrent.vercel.app utorrent webui: https://github.com/bittorrent/webui/blob/master/webui.js
    another webui link: https://github.com/bittorrent/webui/wiki/Web-UI-API

    These functions have been normalized between torrent clients. Can easily support 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 hash id

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

    Pause or resume a torrent

    const paused = await client.pauseTorrent('torrent-hash');
    console.log(paused);
    const resumed = await client.resumeTorrent('torrent-hash');
    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);

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

    docker run                                            \
    --name utorrent \
    -v ~/Documents/utorrentt:/data \
    -p 8080:8080 \
    -p 6881:6881 \
    -p 6881:6881/udp \
    ekho/utorrent:latest