diff --git a/src/main/services/open-web-torrent.ts b/src/main/services/open-web-torrent.ts new file mode 100644 index 00000000..f546ea56 --- /dev/null +++ b/src/main/services/open-web-torrent.ts @@ -0,0 +1,50 @@ +import axios, { AxiosResponse } from "axios"; +import { Agent } from "https"; + +type OpenWebTorrentResponse = + | { + seeds: number; + peers: number; + } + | { + error: { + code: number; + message: string; + }; + }; + +const httpsAgent = new Agent({ + rejectUnauthorized: false, +}); +const axiosRef = axios.create({ + baseURL: "https://checker.openwebtorrent.com", + httpsAgent +}); + +export const openWebTorrent = { + transformResponseError(response: AxiosResponse) { + if ("error" in response.data) { + throw new Error(response.data.error.message); + } + + return response.data; + }, + async getSeedersAndPeers(magnet: string) { + const endpoint = "/check"; + const params = new URLSearchParams(); + params.append("magnet", magnet); + + try { + const response = await axiosRef.get(endpoint, { params }); + const { seeds, peers } = this.transformResponseError(response); + + return { + seeders: seeds, + peers: peers, + }; + } catch (e) { + const error = e as Error; + throw new Error(error.message); + } + }, +};