const torrentStream = require('torrent-stream'); const cheerio = require('cheerio'); const needle = require('needle'); const parseTorrent = require('parse-torrent'); const Tracker = require("peer-search/tracker"); const MAX_PEER_CONNECTIONS = process.env.MAX_PEER_CONNECTIONS || 20; const EXTENSIONS = ["3g2", "3gp", "avi", "flv", "mkv", "mov", "mp2", "mp4", "mpe", "mpeg", "mpg", "mpv", "webm", "wmv"]; let TRACKERS = []; module.exports.init = async function() { TRACKERS = await getTrackerList(); }; module.exports.torrentFiles = function(torrent) { return filesFromTorrentFile(torrent) .catch(() => filesFromKat(torrent.infoHash)) .catch(() => filesFromTorrentStream(torrent)) .then((files) => files.filter((file) => isVideo(file))); }; module.exports.currentSeeders = function (torrent) { if (!torrent.infoHash) { return Promise.reject(new Error("no infoHash")); } return new Promise((resolve) => Promise.all(TRACKERS.map((tracker) => new Promise((resolve) => { const t = new Tracker(tracker, { }, torrent.infoHash); t.run(); t.on("info", (inf) => resolve([inf.seeders, inf.leechers])); setTimeout(() => resolve([0, 0]), 1000); })) ).then((results) => resolve(results.reduce((seeders, next) => seeders + next[0], 0))) ); }; // async function filesFromBtSeeds(infoHash) { // const url = `https://www.btseed.net/show/${infoHash}`; // return needle('get', url, { open_timeout: 2000 }) // .then((response) => response.body) // .then((body) => body.match(/