tor-dl 1.0.1 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (119) hide show
  1. package/AGENTS.md +6 -6
  2. package/dist/bin/{tordl.js → tor-dl.js} +2 -3
  3. package/dist/cli/display.d.ts.map +1 -1
  4. package/dist/cli/display.js +9 -7
  5. package/dist/cli/display.js.map +1 -1
  6. package/dist/src/cli/display.d.ts +7 -0
  7. package/dist/src/cli/display.d.ts.map +1 -0
  8. package/dist/src/cli/display.js +59 -0
  9. package/dist/src/cli/display.js.map +1 -0
  10. package/dist/src/cli/parser.d.ts +5 -0
  11. package/dist/src/cli/parser.d.ts.map +1 -0
  12. package/dist/src/cli/parser.js +122 -0
  13. package/dist/src/cli/parser.js.map +1 -0
  14. package/dist/src/cli/progress.d.ts +15 -0
  15. package/dist/src/cli/progress.d.ts.map +1 -0
  16. package/dist/src/cli/progress.js +76 -0
  17. package/dist/src/cli/progress.js.map +1 -0
  18. package/dist/src/commands/download.d.ts +2 -0
  19. package/dist/src/commands/download.d.ts.map +1 -0
  20. package/dist/src/commands/download.js +70 -0
  21. package/dist/src/commands/download.js.map +1 -0
  22. package/dist/src/commands/search.d.ts +3 -0
  23. package/dist/src/commands/search.d.ts.map +1 -0
  24. package/dist/src/commands/search.js +46 -0
  25. package/dist/src/commands/search.js.map +1 -0
  26. package/dist/src/commands/update.d.ts +2 -0
  27. package/dist/src/commands/update.d.ts.map +1 -0
  28. package/dist/src/commands/update.js +32 -0
  29. package/dist/src/commands/update.js.map +1 -0
  30. package/dist/src/download/engine.d.ts +6 -0
  31. package/dist/src/download/engine.d.ts.map +1 -0
  32. package/dist/src/download/engine.js +163 -0
  33. package/dist/src/download/engine.js.map +1 -0
  34. package/dist/src/filters/category.d.ts +3 -0
  35. package/dist/src/filters/category.d.ts.map +1 -0
  36. package/dist/src/filters/category.js +24 -0
  37. package/dist/src/filters/category.js.map +1 -0
  38. package/dist/src/filters/index.d.ts +5 -0
  39. package/dist/src/filters/index.d.ts.map +1 -0
  40. package/dist/src/filters/index.js +13 -0
  41. package/dist/src/filters/index.js.map +1 -0
  42. package/dist/src/filters/seeds.d.ts +3 -0
  43. package/dist/src/filters/seeds.d.ts.map +1 -0
  44. package/dist/src/filters/seeds.js +7 -0
  45. package/dist/src/filters/seeds.js.map +1 -0
  46. package/dist/src/filters/size.d.ts +4 -0
  47. package/dist/src/filters/size.d.ts.map +1 -0
  48. package/dist/src/filters/size.js +36 -0
  49. package/dist/src/filters/size.js.map +1 -0
  50. package/dist/src/filters/sort.d.ts +5 -0
  51. package/dist/src/filters/sort.d.ts.map +1 -0
  52. package/dist/src/filters/sort.js +25 -0
  53. package/dist/src/filters/sort.js.map +1 -0
  54. package/dist/src/index.d.ts +11 -0
  55. package/dist/src/index.d.ts.map +1 -0
  56. package/dist/src/index.js +30 -0
  57. package/dist/src/index.js.map +1 -0
  58. package/dist/src/sources/1337x.d.ts +11 -0
  59. package/dist/src/sources/1337x.d.ts.map +1 -0
  60. package/dist/src/sources/1337x.js +121 -0
  61. package/dist/src/sources/1337x.js.map +1 -0
  62. package/dist/src/sources/eztv.d.ts +11 -0
  63. package/dist/src/sources/eztv.d.ts.map +1 -0
  64. package/dist/src/sources/eztv.js +104 -0
  65. package/dist/src/sources/eztv.js.map +1 -0
  66. package/dist/src/sources/httpClient.d.ts +24 -0
  67. package/dist/src/sources/httpClient.d.ts.map +1 -0
  68. package/dist/src/sources/httpClient.js +42 -0
  69. package/dist/src/sources/httpClient.js.map +1 -0
  70. package/dist/src/sources/limetorrent.d.ts +11 -0
  71. package/dist/src/sources/limetorrent.d.ts.map +1 -0
  72. package/dist/src/sources/limetorrent.js +113 -0
  73. package/dist/src/sources/limetorrent.js.map +1 -0
  74. package/dist/src/sources/nyaa.d.ts +11 -0
  75. package/dist/src/sources/nyaa.d.ts.map +1 -0
  76. package/dist/src/sources/nyaa.js +119 -0
  77. package/dist/src/sources/nyaa.js.map +1 -0
  78. package/dist/src/sources/rarbg.d.ts +11 -0
  79. package/dist/src/sources/rarbg.d.ts.map +1 -0
  80. package/dist/src/sources/rarbg.js +122 -0
  81. package/dist/src/sources/rarbg.js.map +1 -0
  82. package/dist/src/sources/registry.d.ts +9 -0
  83. package/dist/src/sources/registry.d.ts.map +1 -0
  84. package/dist/src/sources/registry.js +70 -0
  85. package/dist/src/sources/registry.js.map +1 -0
  86. package/dist/src/sources/solidtorrents.d.ts +11 -0
  87. package/dist/src/sources/solidtorrents.d.ts.map +1 -0
  88. package/dist/src/sources/solidtorrents.js +105 -0
  89. package/dist/src/sources/solidtorrents.js.map +1 -0
  90. package/dist/src/sources/thepiratebay.d.ts +11 -0
  91. package/dist/src/sources/thepiratebay.d.ts.map +1 -0
  92. package/dist/src/sources/thepiratebay.js +67 -0
  93. package/dist/src/sources/thepiratebay.js.map +1 -0
  94. package/dist/src/sources/torlock.d.ts +11 -0
  95. package/dist/src/sources/torlock.d.ts.map +1 -0
  96. package/dist/src/sources/torlock.js +116 -0
  97. package/dist/src/sources/torlock.js.map +1 -0
  98. package/dist/src/sources/torrentproject.d.ts +11 -0
  99. package/dist/src/sources/torrentproject.d.ts.map +1 -0
  100. package/dist/src/sources/torrentproject.js +105 -0
  101. package/dist/src/sources/torrentproject.js.map +1 -0
  102. package/dist/src/sources/torrentscsv.d.ts +11 -0
  103. package/dist/src/sources/torrentscsv.d.ts.map +1 -0
  104. package/dist/src/sources/torrentscsv.js +62 -0
  105. package/dist/src/sources/torrentscsv.js.map +1 -0
  106. package/dist/src/sources/yts.d.ts +12 -0
  107. package/dist/src/sources/yts.d.ts.map +1 -0
  108. package/dist/src/sources/yts.js +88 -0
  109. package/dist/src/sources/yts.js.map +1 -0
  110. package/dist/src/types.d.ts +60 -0
  111. package/dist/src/types.d.ts.map +1 -0
  112. package/dist/src/types.js +3 -0
  113. package/dist/src/types.js.map +1 -0
  114. package/output.txt +0 -0
  115. package/package.json +6 -7
  116. package/scripts/build.js +9 -0
  117. package/src/cli/display.ts +60 -57
  118. package/bin/tordl.js +0 -5
  119. package/dist/bin/torrent-cli.js +0 -5
@@ -0,0 +1,163 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.cacheResults = cacheResults;
7
+ exports.getCachedResults = getCachedResults;
8
+ exports.downloadTorrent = downloadTorrent;
9
+ exports.downloadByNumber = downloadByNumber;
10
+ const webtorrent_1 = __importDefault(require("webtorrent"));
11
+ const progress_1 = require("../cli/progress");
12
+ const axios_1 = __importDefault(require("axios"));
13
+ const fs_1 = require("fs");
14
+ const path_1 = require("path");
15
+ const CACHE_FILE = (0, path_1.join)(process.cwd(), '.torrent-cache.json');
16
+ function saveCache(results) {
17
+ try {
18
+ (0, fs_1.writeFileSync)(CACHE_FILE, JSON.stringify(results, null, 2));
19
+ }
20
+ catch (e) { /* ignore */ }
21
+ }
22
+ function loadCache() {
23
+ try {
24
+ if ((0, fs_1.existsSync)(CACHE_FILE)) {
25
+ return JSON.parse((0, fs_1.readFileSync)(CACHE_FILE, 'utf-8'));
26
+ }
27
+ }
28
+ catch (e) { /* ignore */ }
29
+ return [];
30
+ }
31
+ let cachedResults = [];
32
+ function cacheResults(results) {
33
+ cachedResults = results;
34
+ saveCache(results);
35
+ }
36
+ function getCachedResults() {
37
+ if (cachedResults.length === 0) {
38
+ cachedResults = loadCache();
39
+ }
40
+ return cachedResults;
41
+ }
42
+ async function downloadTorrent(result, options = {}) {
43
+ const client = new webtorrent_1.default();
44
+ const progress = new progress_1.DownloadProgress();
45
+ const savePath = options.savePath || process.cwd();
46
+ let torrentId;
47
+ if (result.magnet && result.magnet.startsWith('magnet:')) {
48
+ torrentId = result.magnet;
49
+ }
50
+ else if (result.url && result.url.includes('magnet:')) {
51
+ torrentId = result.url;
52
+ }
53
+ else if (result.url && result.url.includes('nyaa.si')) {
54
+ console.log('Fetching magnet link from Nyaa...');
55
+ const magnet = await getMagnetFromResult(result);
56
+ if (magnet) {
57
+ torrentId = magnet;
58
+ }
59
+ else {
60
+ throw new Error('Could not get magnet link from Nyaa page');
61
+ }
62
+ }
63
+ else {
64
+ console.log('Fetching torrent file...');
65
+ const torrentUrl = await getTorrentUrl(result);
66
+ if (torrentUrl) {
67
+ const response = await axios_1.default.get(torrentUrl, { responseType: 'arraybuffer' });
68
+ const tempFile = (0, path_1.join)(savePath, 'temp.torrent');
69
+ (0, fs_1.writeFileSync)(tempFile, response.data);
70
+ torrentId = tempFile;
71
+ }
72
+ else {
73
+ throw new Error('Could not get torrent URL');
74
+ }
75
+ }
76
+ console.log(`\nDownloading: ${result.name}`);
77
+ console.log(`Saving to: ${savePath}\n`);
78
+ return new Promise((resolve, reject) => {
79
+ console.log('Adding torrent to client...');
80
+ console.log('Torrent ID:', torrentId.substring(0, 60) + '...');
81
+ const torrent = client.add(torrentId, {
82
+ path: savePath
83
+ });
84
+ torrent.on('warning', (warn) => {
85
+ console.log('Torrent warning:', warn.message);
86
+ });
87
+ torrent.on('peer', (peer) => {
88
+ console.log('New peer connected:', peer);
89
+ });
90
+ console.log('Torrent added, waiting for ready...');
91
+ torrent.on('ready', () => {
92
+ const total = torrent.length;
93
+ console.log(`✓ Torrent ready! Total size: ${(total / (1024 * 1024)).toFixed(2)} MB`);
94
+ console.log(` Files: ${torrent.files.map(f => f.name).join(', ')}`);
95
+ console.log(` Info hash: ${torrent.infoHash}`);
96
+ progress.start(total);
97
+ torrent.on('download', (bytes) => {
98
+ const percent = ((torrent.downloaded / total) * 100).toFixed(1);
99
+ process.stdout.write(`\rDownloading: ${percent}% (${(torrent.downloaded / 1024 / 1024).toFixed(1)} MB / ${(total / 1024 / 1024).toFixed(1)} MB) - ${torrent.peers.length} peers `);
100
+ progress.update(torrent.downloaded, total);
101
+ });
102
+ torrent.on('done', () => {
103
+ progress.stop();
104
+ console.log('\n\n✓ Download complete!');
105
+ console.log(`Downloaded to: ${savePath}`);
106
+ client.destroy();
107
+ resolve();
108
+ });
109
+ });
110
+ torrent.on('error', (err) => {
111
+ console.error('\nDownload error:', err.message);
112
+ client.destroy();
113
+ reject(err);
114
+ });
115
+ setTimeout(() => {
116
+ console.log('\n\nDebug:');
117
+ console.log(' Downloaded:', torrent.downloaded);
118
+ console.log(' Length:', torrent.length);
119
+ console.log(' Peers:', torrent.peers?.length || 0);
120
+ console.log(' Done:', torrent.done);
121
+ if (torrent.downloaded > 0) {
122
+ console.log('\nDownload in progress but taking long...');
123
+ console.log(`Progress: ${(torrent.downloaded / torrent.length * 100).toFixed(1)}%`);
124
+ }
125
+ else {
126
+ console.log('\nNo progress after 60s - may be stuck or no peers');
127
+ }
128
+ }, 60000);
129
+ });
130
+ }
131
+ async function getTorrentUrl(result) {
132
+ if (result.magnet && result.magnet.startsWith('magnet:')) {
133
+ return result.magnet;
134
+ }
135
+ return result.url;
136
+ }
137
+ async function getMagnetFromResult(result) {
138
+ if (result.magnet)
139
+ return result.magnet;
140
+ if (!result.url)
141
+ return '';
142
+ try {
143
+ const { data } = await axios_1.default.get(result.url, { timeout: 15000 });
144
+ const cheerio = require('cheerio');
145
+ const $ = cheerio.load(data);
146
+ return $('a[href^="magnet:"]').attr('href') || '';
147
+ }
148
+ catch {
149
+ return '';
150
+ }
151
+ }
152
+ async function downloadByNumber(number, savePath) {
153
+ const results = getCachedResults();
154
+ if (results.length === 0) {
155
+ throw new Error('No search results. Run "tor-dl search" first.');
156
+ }
157
+ if (number < 1 || number > results.length) {
158
+ throw new Error(`Invalid number. Choose between 1 and ${results.length}`);
159
+ }
160
+ const result = results[number - 1];
161
+ await downloadTorrent(result, { savePath });
162
+ }
163
+ //# sourceMappingURL=engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.js","sourceRoot":"","sources":["../../../src/download/engine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { TorrentResult } from '../types';
2
+ export declare function filterByCategory(results: TorrentResult[], category: string): TorrentResult[];
3
+ //# sourceMappingURL=category.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"category.d.ts","sourceRoot":"","sources":["../../../src/filters/category.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,aAAa,EAAE,EAAE,QAAQ,EAAE,MAAM,GAAG,aAAa,EAAE,CAuB5F"}
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.filterByCategory = filterByCategory;
4
+ function filterByCategory(results, category) {
5
+ if (!category || category === 'all') {
6
+ return results;
7
+ }
8
+ return results.filter(r => {
9
+ const name = r.name.toLowerCase();
10
+ const cat = category.toLowerCase();
11
+ if (cat === 'movie') {
12
+ return name.includes('movie') || name.includes('720p') || name.includes('1080p') ||
13
+ name.includes('2160p') || name.includes('bluray') || name.includes('brrip') ||
14
+ name.includes('webrip') || name.includes('web-dl') || name.includes('dvdrip');
15
+ }
16
+ if (cat === 'tv') {
17
+ return name.includes('s01') || name.includes('s02') || name.includes('episode') ||
18
+ name.includes('season') || name.includes('tv') || name.includes('hdtv') ||
19
+ name.includes('webrip') || name.includes('web-dl');
20
+ }
21
+ return true;
22
+ });
23
+ }
24
+ //# sourceMappingURL=category.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"category.js","sourceRoot":"","sources":["../../../src/filters/category.ts"],"names":[],"mappings":";;AAEA,4CAuBC;AAvBD,SAAgB,gBAAgB,CAAC,OAAwB,EAAE,QAAgB;IACzE,IAAI,CAAC,QAAQ,IAAI,QAAQ,KAAK,KAAK,EAAE,CAAC;QACpC,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;QACxB,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QAClC,MAAM,GAAG,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;QAEnC,IAAI,GAAG,KAAK,OAAO,EAAE,CAAC;YACpB,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;gBACzE,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;gBAC3E,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACvF,CAAC;QAED,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YACjB,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;gBACxE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;gBACvE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC5D,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,5 @@
1
+ export { filterByCategory } from './category';
2
+ export { filterBySize, parseSize } from './size';
3
+ export { filterBySeeds } from './seeds';
4
+ export { sortResults, SortField, SortOrder } from './sort';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/filters/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC"}
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.sortResults = exports.filterBySeeds = exports.parseSize = exports.filterBySize = exports.filterByCategory = void 0;
4
+ var category_1 = require("./category");
5
+ Object.defineProperty(exports, "filterByCategory", { enumerable: true, get: function () { return category_1.filterByCategory; } });
6
+ var size_1 = require("./size");
7
+ Object.defineProperty(exports, "filterBySize", { enumerable: true, get: function () { return size_1.filterBySize; } });
8
+ Object.defineProperty(exports, "parseSize", { enumerable: true, get: function () { return size_1.parseSize; } });
9
+ var seeds_1 = require("./seeds");
10
+ Object.defineProperty(exports, "filterBySeeds", { enumerable: true, get: function () { return seeds_1.filterBySeeds; } });
11
+ var sort_1 = require("./sort");
12
+ Object.defineProperty(exports, "sortResults", { enumerable: true, get: function () { return sort_1.sortResults; } });
13
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/filters/index.ts"],"names":[],"mappings":";;;AAAA,uCAA8C;AAArC,4GAAA,gBAAgB,OAAA;AACzB,+BAAiD;AAAxC,oGAAA,YAAY,OAAA;AAAE,iGAAA,SAAS,OAAA;AAChC,iCAAwC;AAA/B,sGAAA,aAAa,OAAA;AACtB,+BAA2D;AAAlD,mGAAA,WAAW,OAAA"}
@@ -0,0 +1,3 @@
1
+ import { TorrentResult } from '../types';
2
+ export declare function filterBySeeds(results: TorrentResult[], minSeeds?: number): TorrentResult[];
3
+ //# sourceMappingURL=seeds.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seeds.d.ts","sourceRoot":"","sources":["../../../src/filters/seeds.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,wBAAgB,aAAa,CAAC,OAAO,EAAE,aAAa,EAAE,EAAE,QAAQ,GAAE,MAAU,GAAG,aAAa,EAAE,CAE7F"}
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.filterBySeeds = filterBySeeds;
4
+ function filterBySeeds(results, minSeeds = 0) {
5
+ return results.filter(r => r.seeds >= minSeeds);
6
+ }
7
+ //# sourceMappingURL=seeds.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seeds.js","sourceRoot":"","sources":["../../../src/filters/seeds.ts"],"names":[],"mappings":";;AAEA,sCAEC;AAFD,SAAgB,aAAa,CAAC,OAAwB,EAAE,WAAmB,CAAC;IAC1E,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,QAAQ,CAAC,CAAC;AAClD,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { TorrentResult } from '../types';
2
+ export declare function parseSize(size: string): number;
3
+ export declare function filterBySize(results: TorrentResult[], minSize?: string, maxSize?: string): TorrentResult[];
4
+ //# sourceMappingURL=size.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"size.d.ts","sourceRoot":"","sources":["../../../src/filters/size.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAkB9C;AAED,wBAAgB,YAAY,CAC1B,OAAO,EAAE,aAAa,EAAE,EACxB,OAAO,CAAC,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,MAAM,GACf,aAAa,EAAE,CAejB"}
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseSize = parseSize;
4
+ exports.filterBySize = filterBySize;
5
+ function parseSize(size) {
6
+ if (!size || size === 'Unknown' || size === 'N/A')
7
+ return 0;
8
+ const match = size.toString().match(/([\d.]+)\s*(GB|MB|TB|KB|B)/i);
9
+ if (!match)
10
+ return 0;
11
+ const value = parseFloat(match[1]);
12
+ const unit = match[2].toUpperCase();
13
+ const multipliers = {
14
+ 'B': 1,
15
+ 'KB': 1024,
16
+ 'MB': 1024 ** 2,
17
+ 'GB': 1024 ** 3,
18
+ 'TB': 1024 ** 4
19
+ };
20
+ return value * (multipliers[unit] || 1);
21
+ }
22
+ function filterBySize(results, minSize, maxSize) {
23
+ if (!minSize && !maxSize) {
24
+ return results;
25
+ }
26
+ const minBytes = minSize ? parseSize(minSize) : 0;
27
+ const maxBytes = maxSize && maxSize !== '0' ? parseSize(maxSize) : Number.MAX_SAFE_INTEGER;
28
+ return results.filter(r => {
29
+ const sizeBytes = r.sizeBytes;
30
+ if (typeof sizeBytes !== 'number' || isNaN(sizeBytes)) {
31
+ return true;
32
+ }
33
+ return sizeBytes >= minBytes && sizeBytes <= maxBytes;
34
+ });
35
+ }
36
+ //# sourceMappingURL=size.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"size.js","sourceRoot":"","sources":["../../../src/filters/size.ts"],"names":[],"mappings":";;AAEA,8BAkBC;AAED,oCAmBC;AAvCD,SAAgB,SAAS,CAAC,IAAY;IACpC,IAAI,CAAC,IAAI,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,KAAK;QAAE,OAAO,CAAC,CAAC;IAE5D,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;IACnE,IAAI,CAAC,KAAK;QAAE,OAAO,CAAC,CAAC;IAErB,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACnC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IAEpC,MAAM,WAAW,GAA2B;QAC1C,GAAG,EAAE,CAAC;QACN,IAAI,EAAE,IAAI;QACV,IAAI,EAAE,IAAI,IAAI,CAAC;QACf,IAAI,EAAE,IAAI,IAAI,CAAC;QACf,IAAI,EAAE,IAAI,IAAI,CAAC;KAChB,CAAC;IAEF,OAAO,KAAK,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAC1C,CAAC;AAED,SAAgB,YAAY,CAC1B,OAAwB,EACxB,OAAgB,EAChB,OAAgB;IAEhB,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;QACzB,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,MAAM,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAClD,MAAM,QAAQ,GAAG,OAAO,IAAI,OAAO,KAAK,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,gBAAgB,CAAC;IAE3F,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;QACxB,MAAM,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC;QAC9B,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;YACtD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,SAAS,IAAI,QAAQ,IAAI,SAAS,IAAI,QAAQ,CAAC;IACxD,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { TorrentResult } from '../types';
2
+ export type SortField = 'seeds' | 'size' | 'date';
3
+ export type SortOrder = 'asc' | 'desc';
4
+ export declare function sortResults(results: TorrentResult[], sortBy?: SortField, order?: SortOrder): TorrentResult[];
5
+ //# sourceMappingURL=sort.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sort.d.ts","sourceRoot":"","sources":["../../../src/filters/sort.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;AAClD,MAAM,MAAM,SAAS,GAAG,KAAK,GAAG,MAAM,CAAC;AAEvC,wBAAgB,WAAW,CACzB,OAAO,EAAE,aAAa,EAAE,EACxB,MAAM,GAAE,SAAmB,EAC3B,KAAK,GAAE,SAAkB,GACxB,aAAa,EAAE,CAwBjB"}
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.sortResults = sortResults;
4
+ function sortResults(results, sortBy = 'seeds', order = 'desc') {
5
+ const sorted = [...results];
6
+ sorted.sort((a, b) => {
7
+ let comparison = 0;
8
+ switch (sortBy) {
9
+ case 'seeds':
10
+ comparison = a.seeds - b.seeds;
11
+ break;
12
+ case 'size':
13
+ comparison = (a.sizeBytes || 0) - (b.sizeBytes || 0);
14
+ break;
15
+ case 'date':
16
+ comparison = (a.date || '').localeCompare(b.date || '');
17
+ break;
18
+ default:
19
+ comparison = a.seeds - b.seeds;
20
+ }
21
+ return order === 'desc' ? -comparison : comparison;
22
+ });
23
+ return sorted;
24
+ }
25
+ //# sourceMappingURL=sort.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sort.js","sourceRoot":"","sources":["../../../src/filters/sort.ts"],"names":[],"mappings":";;AAKA,kCA4BC;AA5BD,SAAgB,WAAW,CACzB,OAAwB,EACxB,SAAoB,OAAO,EAC3B,QAAmB,MAAM;IAEzB,MAAM,MAAM,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC;IAE5B,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACnB,IAAI,UAAU,GAAG,CAAC,CAAC;QAEnB,QAAQ,MAAM,EAAE,CAAC;YACf,KAAK,OAAO;gBACV,UAAU,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;gBAC/B,MAAM;YACR,KAAK,MAAM;gBACT,UAAU,GAAG,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC;gBACrD,MAAM;YACR,KAAK,MAAM;gBACT,UAAU,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;gBACxD,MAAM;YACR;gBACE,UAAU,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;QACnC,CAAC;QAED,OAAO,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,11 @@
1
+ export * from './types';
2
+ export { createParser, loadFilters } from './cli/parser';
3
+ export * from './cli/display';
4
+ export * from './cli/progress';
5
+ export * from './sources/registry';
6
+ export * from './filters';
7
+ export * from './download/engine';
8
+ export * from './commands/search';
9
+ export * from './commands/download';
10
+ export * from './commands/update';
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AACzD,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,WAAW,CAAC;AAC1B,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC"}
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.loadFilters = exports.createParser = void 0;
18
+ __exportStar(require("./types"), exports);
19
+ var parser_1 = require("./cli/parser");
20
+ Object.defineProperty(exports, "createParser", { enumerable: true, get: function () { return parser_1.createParser; } });
21
+ Object.defineProperty(exports, "loadFilters", { enumerable: true, get: function () { return parser_1.loadFilters; } });
22
+ __exportStar(require("./cli/display"), exports);
23
+ __exportStar(require("./cli/progress"), exports);
24
+ __exportStar(require("./sources/registry"), exports);
25
+ __exportStar(require("./filters"), exports);
26
+ __exportStar(require("./download/engine"), exports);
27
+ __exportStar(require("./commands/search"), exports);
28
+ __exportStar(require("./commands/download"), exports);
29
+ __exportStar(require("./commands/update"), exports);
30
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,0CAAwB;AACxB,uCAAyD;AAAhD,sGAAA,YAAY,OAAA;AAAE,qGAAA,WAAW,OAAA;AAClC,gDAA8B;AAC9B,iDAA+B;AAC/B,qDAAmC;AACnC,4CAA0B;AAC1B,oDAAkC;AAClC,oDAAkC;AAClC,sDAAoC;AACpC,oDAAkC"}
@@ -0,0 +1,11 @@
1
+ import { TorrentResult, SourceScraper } from '../types';
2
+ export declare class _1337xScraper implements SourceScraper {
3
+ name: string;
4
+ search(query: string, category?: string): Promise<TorrentResult[]>;
5
+ getTorrentUrl(result: TorrentResult): Promise<string>;
6
+ getMagnet(result: TorrentResult): Promise<string>;
7
+ private parseSize;
8
+ }
9
+ declare const _default: _1337xScraper;
10
+ export default _default;
11
+ //# sourceMappingURL=1337x.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"1337x.d.ts","sourceRoot":"","sources":["../../../src/sources/1337x.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAGxD,qBAAa,aAAc,YAAW,aAAa;IACjD,IAAI,SAAW;IAET,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IA4ClE,aAAa,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC;IAWrD,SAAS,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC;IAUvD,OAAO,CAAC,SAAS;CASlB;;AAED,wBAAmC"}
@@ -0,0 +1,121 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports._1337xScraper = void 0;
40
+ const axios_1 = __importDefault(require("axios"));
41
+ const cheerio = __importStar(require("cheerio"));
42
+ const httpClient_1 = require("./httpClient");
43
+ class _1337xScraper {
44
+ constructor() {
45
+ this.name = '1337x';
46
+ }
47
+ async search(query, category) {
48
+ try {
49
+ const catMap = { movie: 'Movies', tv: 'TV', music: 'Music', games: 'Games', apps: 'Applications' };
50
+ const catParam = category && catMap[category] ? `/category-${catMap[category]}` : '';
51
+ const url = `https://1337x.to${catParam}/search/${encodeURIComponent(query)}/1/`;
52
+ const { data } = await axios_1.default.get(url, {
53
+ headers: httpClient_1.DEFAULT_HEADERS,
54
+ timeout: httpClient_1.TIMEOUT
55
+ });
56
+ const $ = cheerio.load(data);
57
+ const results = [];
58
+ $('table.table-list tbody tr').each((i, el) => {
59
+ const title = $(el).find('td.coll-1 a').last().text().trim() || $(el).find('td.coll-1').text().trim();
60
+ const size = $(el).find('td.coll-4').text().trim();
61
+ const seeds = parseInt($(el).find('td.coll-2').text().trim()) || 0;
62
+ const peers = parseInt($(el).find('td.coll-3').text().trim()) || 0;
63
+ const link = 'https://1337x.to' + ($(el).find('td.coll-1 a').last().attr('href') || '');
64
+ if (title) {
65
+ results.push({
66
+ num: results.length + 1,
67
+ name: title,
68
+ size: size || 'Unknown',
69
+ sizeBytes: this.parseSize(size),
70
+ seeds,
71
+ peers,
72
+ source: '1337x',
73
+ url: link,
74
+ magnet: ''
75
+ });
76
+ }
77
+ });
78
+ return results;
79
+ }
80
+ catch (error) {
81
+ const message = error instanceof Error ? error.message : 'Unknown error';
82
+ console.error(`1337x search error: ${message}`);
83
+ return [];
84
+ }
85
+ }
86
+ async getTorrentUrl(result) {
87
+ try {
88
+ const { data } = await axios_1.default.get(result.url, { headers: httpClient_1.DEFAULT_HEADERS, timeout: httpClient_1.TIMEOUT });
89
+ const $ = cheerio.load(data);
90
+ const torrentUrl = $('a[href$=".torrent"]').attr('href') || '';
91
+ return torrentUrl || result.url;
92
+ }
93
+ catch {
94
+ return result.url;
95
+ }
96
+ }
97
+ async getMagnet(result) {
98
+ try {
99
+ const { data } = await axios_1.default.get(result.url, { headers: httpClient_1.DEFAULT_HEADERS, timeout: httpClient_1.TIMEOUT });
100
+ const $ = cheerio.load(data);
101
+ return $('a[href^="magnet:"]').attr('href') || '';
102
+ }
103
+ catch {
104
+ return '';
105
+ }
106
+ }
107
+ parseSize(size) {
108
+ if (!size)
109
+ return 0;
110
+ const match = size.toString().match(/([\d.]+)\s*(GB|MB|TB|KB)/i);
111
+ if (!match)
112
+ return 0;
113
+ const value = parseFloat(match[1]);
114
+ const unit = match[2].toUpperCase();
115
+ const multipliers = { 'KB': 1024, 'MB': 1024 ** 2, 'GB': 1024 ** 3, 'TB': 1024 ** 4 };
116
+ return value * (multipliers[unit] || 1);
117
+ }
118
+ }
119
+ exports._1337xScraper = _1337xScraper;
120
+ exports.default = new _1337xScraper();
121
+ //# sourceMappingURL=1337x.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"1337x.js","sourceRoot":"","sources":["../../../src/sources/1337x.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { TorrentResult, SourceScraper } from '../types';
2
+ export declare class EZTvScraper implements SourceScraper {
3
+ name: string;
4
+ search(query: string, category?: string): Promise<TorrentResult[]>;
5
+ getTorrentUrl(result: TorrentResult): Promise<string>;
6
+ getMagnet(result: TorrentResult): Promise<string>;
7
+ private parseSize;
8
+ }
9
+ declare const _default: EZTvScraper;
10
+ export default _default;
11
+ //# sourceMappingURL=eztv.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eztv.d.ts","sourceRoot":"","sources":["../../../src/sources/eztv.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAGxD,qBAAa,WAAY,YAAW,aAAa;IAC/C,IAAI,SAAU;IAER,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IA2ClE,aAAa,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC;IAIrD,SAAS,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC;IAIvD,OAAO,CAAC,SAAS;CAQlB;;AAED,wBAAiC"}