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!