import { IpcClientService } from "@autoplex/ipc"; import { Microservice } from "@autoplex/microservice"; import { SOCKET_PATH } from "./constants"; import { ISerializedTorrent, ITorrent } from "./schema"; export class IpcClient extends IpcClientService { /** * The name of the service */ public readonly NAME = "Torrent"; /** * The path to the socket file */ protected readonly SOCKET_PATH = SOCKET_PATH; /** * Add a torrent to the client * @param torrent Magnet URI or file buffer */ public async add(torrent: string | Buffer, downloadPath?: string) { let response = await this.request("add", { torrent, downloadPath }); if (response.error) { throw new Error("Failed to add torrent"); } return response.data; } /** * Remove a torrent from the client * @param torrent Torrent info hash */ public async remove(torrentId: string, withData: boolean = false) { let response = await this.request("remove", { torrentId, withData }); if (response.error) { throw new Error("Failed to remove torrent"); } } /** * Get a list of all torrents in the client */ public async list() { let response = await this.request("list"); if (response.error) { console.error(response.error); throw new Error("Failed to obtain torrent list"); } return response.data; } /** * Check if the torrent client has the given torrent */ public async has(torrentId: string) { let response = await this.request("has", torrentId); if (response.error) { console.error(response.error); throw new Error("Failed to check if a torrent exists"); } return response.data; } /** * Get full details of each of the provided torrents */ public async details(torrentIds: string[] = []) { let response = await this.request("details", torrentIds); if (response.error) { console.error(response.error); throw new Error("Failed to retrieve torrent details"); } return response.data; } }