Trouble with URL encoding torrent's infoHash using JS

27 Views Asked by At

I tinker with JS and I want to learn how to "announce" to a torrent tracker.

I came up with the following code:

   const payload: iAnnounceRequest= {
    headers: {
        "Accept-Encoding": "gzip",
        "User-Agent": client.userAgent,
    },
    params: {
        info_hash: torrent.infoHash.toString(),
        peer_id: client.peerId+client.randId,
        port: client.port.toString(),
        uploaded: torrent.uploaded.toString(),
        downloaded: torrent.downloaded.toString(),
        left: (torrent.size - torrent.downloaded).toString(),
        compact: "1",
        numwant: "200",
        supportcrypto: "1",
        no_peer_id: "1",
    }
};


if (announcementType === "completed" || announcementType === "started"){
    payload.params.event = announcementType;
}
const url = new URL(torrent.announceUrl);
url.searchParams.append("info_hash", payload.params.info_hash);
url.searchParams.append("peer_id", payload.params.peer_id);
url.searchParams.append("port", payload.params.port);
url.searchParams.append("uploaded", payload.params.uploaded);
url.searchParams.append("downloaded", payload.params.downloaded);
url.searchParams.append("left", payload.params.left);
url.searchParams.append("compact", payload.params.compact);
url.searchParams.append("numwant", payload.params.numwant);
url.searchParams.append("supportcrypto", payload.params.supportcrypto);
url.searchParams.append("no_peer_id", payload.params.no_peer_id);
const result = await fetch(url, {
    method: "GET",
    headers: payload.headers,
    
    });

However, I am hitting a wall whenever I try to announce, as I always get a 404 Not Found error.

I am 100% sure that this happens because of the way I enocde my info_hash: it is of type Buffer, and therefore I must URL Encode it somehow. I made sure that my infoHash is correct (I compared its hex value to the one on my qbittorent client and it's the same),

and I also tried to URIEncodeComponent it, send it as hex instead of utf-8 (the default), but to no avail - I always get a 404 error.

Did someone encouter the same issue? how can it be solved?

Thanks to anyone willing to help!

0

There are 0 best solutions below