tor-dl 1.0.4 → 1.0.6
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.
- package/README.md +22 -5
- package/dist/cli/display.d.ts.map +1 -1
- package/dist/cli/display.js +4 -3
- package/dist/cli/display.js.map +1 -1
- package/dist/cli/parser.d.ts.map +1 -1
- package/dist/cli/parser.js +6 -7
- package/dist/cli/parser.js.map +1 -1
- package/dist/commands/search.d.ts.map +1 -1
- package/dist/commands/search.js +10 -0
- package/dist/commands/search.js.map +1 -1
- package/dist/download/engine.d.ts.map +1 -1
- package/dist/download/engine.js +2 -1
- package/dist/download/engine.js.map +1 -1
- package/dist/sources/torrentscsv.d.ts.map +1 -1
- package/dist/sources/torrentscsv.js +1 -1
- package/dist/sources/torrentscsv.js.map +1 -1
- package/package.json +1 -1
- package/sources.json +1 -1
- package/src/cli/display.ts +5 -3
- package/src/cli/parser.ts +116 -117
- package/src/commands/search.ts +13 -0
- package/src/download/engine.ts +2 -1
- package/src/sources/torrentscsv.ts +1 -1
- package/help.txt +0 -30
- package/output.txt +0 -0
package/README.md
CHANGED
|
@@ -5,7 +5,11 @@ A CLI torrent search tool. Search across multiple sources, open .torrent in brow
|
|
|
5
5
|
## Quick Start
|
|
6
6
|
|
|
7
7
|
```bash
|
|
8
|
-
#
|
|
8
|
+
# Run without installation (requires Node.js)
|
|
9
|
+
npx tor-dl search "movie title"
|
|
10
|
+
|
|
11
|
+
# Install globally for easy use
|
|
12
|
+
npm install -g tor-dl
|
|
9
13
|
tor-dl search "movie title"
|
|
10
14
|
|
|
11
15
|
# Copy magnet link to clipboard
|
|
@@ -36,7 +40,7 @@ tor-dl search <query> [options]
|
|
|
36
40
|
| `-o, --sort <field>` | Sort results by field | `seeds`, `size`, `date` |
|
|
37
41
|
| `--order <order>` | Sort order | `asc` (low to high), `desc` (high to low) |
|
|
38
42
|
| `-l, --limit <number>` | Maximum results to return | `10`, `50`, `100` |
|
|
39
|
-
|
|
|
43
|
+
| `-S, --sources <sources>` | Sources to search (comma-separated) | `yts,thepiratebay,nyaa` |
|
|
40
44
|
|
|
41
45
|
**Available Categories:**
|
|
42
46
|
- `all` - Search all categories
|
|
@@ -49,7 +53,6 @@ tor-dl search <query> [options]
|
|
|
49
53
|
|
|
50
54
|
**Available Sources:**
|
|
51
55
|
- `yts` - YTS (Movies only)
|
|
52
|
-
- `eztv` - EZTV (TV shows)
|
|
53
56
|
- `thepiratebay` - The Pirate Bay (All categories)
|
|
54
57
|
- `nyaa` - Nyaa.si (Anime, Software)
|
|
55
58
|
|
|
@@ -66,7 +69,7 @@ tor-dl search "movie" --cat movie --min-seeds 100
|
|
|
66
69
|
tor-dl search "linux" --min-size 500MB --max-size 2GB
|
|
67
70
|
|
|
68
71
|
# Search specific sources only
|
|
69
|
-
tor-dl search "game"
|
|
72
|
+
tor-dl search "game" -S yts,thepiratebay
|
|
70
73
|
|
|
71
74
|
# Sort by size (smallest first)
|
|
72
75
|
tor-dl search "documentary" --sort size --order asc
|
|
@@ -113,7 +116,6 @@ tor-dl open <number>
|
|
|
113
116
|
| YTS | movie | Movie torrents with direct .torrent download |
|
|
114
117
|
| The Pirate Bay | all | General torrent search |
|
|
115
118
|
| Nyaa | anime, tv | Anime and Japanese media |
|
|
116
|
-
| EZTV | tv | TV show torrents |
|
|
117
119
|
|
|
118
120
|
## Size Format
|
|
119
121
|
|
|
@@ -129,6 +131,7 @@ Examples: `500MB`, `1.5GB`, `2GB`
|
|
|
129
131
|
|
|
130
132
|
- Node.js >= 18.0.0
|
|
131
133
|
- npm
|
|
134
|
+
- Transmission (optional, for Windows)
|
|
132
135
|
|
|
133
136
|
## Local Installation
|
|
134
137
|
|
|
@@ -139,6 +142,20 @@ npm install
|
|
|
139
142
|
npm run build
|
|
140
143
|
```
|
|
141
144
|
|
|
145
|
+
## Install Transmission (Windows)
|
|
146
|
+
|
|
147
|
+
For Windows users, you can install Transmission client using winget:
|
|
148
|
+
|
|
149
|
+
```bash
|
|
150
|
+
winget install Transmission.Transmission
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
After installation, you can open magnet links directly in Transmission.
|
|
154
|
+
|
|
155
|
+
## Author
|
|
156
|
+
|
|
157
|
+
Sedat ERGOZ [@eaeoz](https://github.com/eaeoz)
|
|
158
|
+
|
|
142
159
|
## License
|
|
143
160
|
|
|
144
161
|
MIT License
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"display.d.ts","sourceRoot":"","sources":["../../src/cli/display.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAQzC,wBAAgB,cAAc,CAAC,OAAO,EAAE,aAAa,EAAE,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"display.d.ts","sourceRoot":"","sources":["../../src/cli/display.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAQzC,wBAAgB,cAAc,CAAC,OAAO,EAAE,aAAa,EAAE,GAAG,IAAI,CAmC7D;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAYhE;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAElD;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAEpD;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAEjD"}
|
package/dist/cli/display.js
CHANGED
|
@@ -31,15 +31,16 @@ function displayResults(results) {
|
|
|
31
31
|
const peers = r.peers > 50 ? chalk_1.default.cyan(r.peers.toString().padStart(5)) : r.peers.toString().padStart(5);
|
|
32
32
|
const source = (r.source || 'unknown').slice(0, 6).padEnd(6);
|
|
33
33
|
const num = chalk_1.default.cyan(r.num.toString().padStart(3));
|
|
34
|
-
const link = r.torrentUrl || r.magnet ? chalk_1.default.green('✓') : ' ';
|
|
35
34
|
const url = r.torrentUrl || r.magnet || '';
|
|
35
|
+
const pageUrl = r.url || '';
|
|
36
36
|
const clickableName = url ? makeClickable(url, name.padEnd(38)) : name.padEnd(38);
|
|
37
|
-
|
|
37
|
+
const clickableLink = pageUrl ? makeClickable(pageUrl, chalk_1.default.green('✓')) : chalk_1.default.gray(' ');
|
|
38
|
+
out(`│ ${num} │ ${clickableLink} │ ${clickableName} │ ${size} │ ${seeds} │ ${peers} │ ${source} │`);
|
|
38
39
|
}
|
|
39
40
|
out('├─────┼───┼────────────────────────────────────────┼────────┼───────┼───────┼────────┤');
|
|
40
41
|
out('└─────┴───┴────────────────────────────────────────┴────────┴───────┴───────┴────────┘');
|
|
41
42
|
out('');
|
|
42
|
-
out(chalk_1.default.gray('
|
|
43
|
+
out(chalk_1.default.gray('Click name = open magnet/torrent | Click ✓ = open source page'));
|
|
43
44
|
}
|
|
44
45
|
function displayResultDetails(result) {
|
|
45
46
|
console.log(chalk_1.default.bold('\n--- Torrent Details ---'));
|
package/dist/cli/display.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"display.js","sourceRoot":"","sources":["../../src/cli/display.ts"],"names":[],"mappings":";;;;;AASA,
|
|
1
|
+
{"version":3,"file":"display.js","sourceRoot":"","sources":["../../src/cli/display.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/parser.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../src/cli/parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,OAAO,EAAE,YAAY,EAAiB,MAAM,UAAU,CAAC;AAWvD,wBAAgB,WAAW,IAAI,YAAY,CAc1C;AAED,wBAAgB,YAAY,IAAI,OAAO,
|
|
1
|
+
{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../src/cli/parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,OAAO,EAAE,YAAY,EAAiB,MAAM,UAAU,CAAC;AAWvD,wBAAgB,WAAW,IAAI,YAAY,CAc1C;AAED,wBAAgB,YAAY,IAAI,OAAO,CAsFtC"}
|
package/dist/cli/parser.js
CHANGED
|
@@ -65,10 +65,10 @@ function loadFilters() {
|
|
|
65
65
|
function createParser() {
|
|
66
66
|
const program = new commander_1.Command();
|
|
67
67
|
const filters = loadFilters();
|
|
68
|
-
const mainHelp = `
|
|
69
|
-
Categories: all, movie, tv, anime, music, games, apps
|
|
70
|
-
Sources:
|
|
71
|
-
yts - YTS (Movies) |
|
|
68
|
+
const mainHelp = `
|
|
69
|
+
Categories: all, movie, tv, anime, music, games, apps
|
|
70
|
+
Sources:
|
|
71
|
+
yts - YTS (Movies) | thepiratebay - The Pirate Bay | nyaa - Nyaa.si (Anime)`;
|
|
72
72
|
program
|
|
73
73
|
.name('tor-dl')
|
|
74
74
|
.description('CLI torrent search tool - search, open in browser, copy magnet links' + mainHelp)
|
|
@@ -86,7 +86,7 @@ Sources:
|
|
|
86
86
|
.option('-o, --sort <sortBy>', 'Sort by (seeds|size|date)')
|
|
87
87
|
.option('--order <order>', 'Order (asc|desc)')
|
|
88
88
|
.option('-l, --limit <number>', 'Max results (default: 50)', parseInt)
|
|
89
|
-
.option('--sources <sources>', 'Sources (yts,
|
|
89
|
+
.option('-S, --sources <sources>', 'Sources (yts,thepiratebay,nyaa)')
|
|
90
90
|
.option('-h, --help', 'Show help with examples')
|
|
91
91
|
.allowUnknownOption()
|
|
92
92
|
.hook('preAction', (thisCommand) => {
|
|
@@ -96,13 +96,12 @@ Sources:
|
|
|
96
96
|
console.log('Categories: all, movie, tv, anime, music, games, apps');
|
|
97
97
|
console.log('Sources:');
|
|
98
98
|
console.log(' yts - YTS (Movies)');
|
|
99
|
-
console.log(' eztv - EZTV (TV)');
|
|
100
99
|
console.log(' thepiratebay - The Pirate Bay');
|
|
101
100
|
console.log(' nyaa - Nyaa.si (Anime)');
|
|
102
101
|
console.log('');
|
|
103
102
|
console.log('Examples:');
|
|
104
103
|
console.log(' tor-dl search "movie" -c movie -s 100');
|
|
105
|
-
console.log(' tor-dl search "anime"
|
|
104
|
+
console.log(' tor-dl search "anime" -S nyaa --max-size 2GB');
|
|
106
105
|
console.log(' tor-dl search "linux" --min-size 500MB -l 10');
|
|
107
106
|
process.exit(0);
|
|
108
107
|
}
|
package/dist/cli/parser.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/cli/parser.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAcA,kCAcC;AAED,
|
|
1
|
+
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/cli/parser.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAcA,kCAcC;AAED,oCAsFC;AApHD,yCAAoC;AACpC,2BAA8C;AAC9C,+BAA4B;AAG5B,SAAS,UAAU;IACjB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAA,iBAAY,EAAC,IAAA,WAAI,EAAC,SAAS,EAAE,oBAAoB,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;QACrF,OAAO,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,OAAO,CAAC;IACjB,CAAC;AACH,CAAC;AAED,SAAgB,WAAW;IACzB,MAAM,WAAW,GAAG,IAAA,WAAI,EAAC,OAAO,CAAC,GAAG,EAAE,EAAE,cAAc,CAAC,CAAC;IACxD,IAAI,IAAA,eAAU,EAAC,WAAW,CAAC,EAAE,CAAC;QAC5B,OAAO,IAAI,CAAC,KAAK,CAAC,IAAA,iBAAY,EAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC;IACxD,CAAC;IACD,OAAO;QACL,QAAQ,EAAE,KAAK;QACf,QAAQ,EAAE,CAAC;QACX,OAAO,EAAE,GAAG;QACZ,OAAO,EAAE,MAAM;QACf,MAAM,EAAE,OAAO;QACf,KAAK,EAAE,MAAM;QACb,KAAK,EAAE,EAAE;KACV,CAAC;AACJ,CAAC;AAED,SAAgB,YAAY;IAC1B,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;IAC9B,MAAM,OAAO,GAAG,WAAW,EAAE,CAAC;IAE9B,MAAM,QAAQ,GAAG;;;8EAG2D,CAAC;IAE7E,OAAO;SACJ,IAAI,CAAC,QAAQ,CAAC;SACd,WAAW,CAAC,sEAAsE,GAAG,QAAQ,CAAC;SAC9F,OAAO,CAAC,UAAU,EAAE,EAAE,eAAe,CAAC;SACtC,kBAAkB,EAAE;SACpB,wBAAwB,EAAE,CAAC;IAE9B,OAAO;SACJ,OAAO,CAAC,gBAAgB,CAAC;SACzB,WAAW,CAAC,sFAAsF,CAAC;SACnG,MAAM,CAAC,sBAAsB,EAAE,gDAAgD,CAAC;SAChF,MAAM,CAAC,0BAA0B,EAAE,iBAAiB,EAAE,QAAQ,CAAC;SAC/D,MAAM,CAAC,sBAAsB,EAAE,iBAAiB,EAAE,QAAQ,CAAC;SAC3D,MAAM,CAAC,mBAAmB,EAAE,4BAA4B,CAAC;SACzD,MAAM,CAAC,mBAAmB,EAAE,qBAAqB,CAAC;SAClD,MAAM,CAAC,qBAAqB,EAAE,2BAA2B,CAAC;SAC1D,MAAM,CAAC,iBAAiB,EAAE,kBAAkB,CAAC;SAC7C,MAAM,CAAC,sBAAsB,EAAE,2BAA2B,EAAE,QAAQ,CAAC;SACrE,MAAM,CAAC,yBAAyB,EAAE,iCAAiC,CAAC;SACpE,MAAM,CAAC,YAAY,EAAE,yBAAyB,CAAC;SAC/C,kBAAkB,EAAE;SACpB,IAAI,CAAC,WAAW,EAAE,CAAC,WAAW,EAAE,EAAE;QACjC,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC;QAChC,IAAI,IAAI,CAAC,IAAI,IAAI,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YACjD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,uDAAuD,CAAC,CAAC;YACrE,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YACxB,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;YAC3C,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;YAC/C,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;YAC9C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;YACzB,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC;YACvD,OAAO,CAAC,GAAG,CAAC,gDAAgD,CAAC,CAAC;YAC9D,OAAO,CAAC,GAAG,CAAC,gDAAgD,CAAC,CAAC;YAC9D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC;SACD,MAAM,CAAC,KAAK,EAAE,KAAa,EAAE,OAAO,EAAE,EAAE;QAEvC,MAAM,aAAa,GAAkB;YACnC,KAAK;YACL,QAAQ,EAAE,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,QAAQ;YACzC,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ;YAC9C,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO;YAC3C,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO;YAC3C,MAAM,EAAG,OAAO,CAAC,IAAkC,IAAI,OAAO,CAAC,MAAM;YACrE,KAAK,EAAG,OAAO,CAAC,KAAwB,IAAI,OAAO,CAAC,KAAK;YACzD,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK;YACrC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS;SAClE,CAAC;QAEF,MAAM,EAAE,aAAa,EAAE,GAAG,wDAAa,oBAAoB,GAAC,CAAC;QAC7D,MAAM,aAAa,CAAC,aAAa,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEL,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IACnE,OAAO,CAAC,WAAW,CAAC,sDAAsD,CAAC,CAAC;IAC5E,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,MAAc,EAAE,EAAE;QACtC,MAAM,EAAE,aAAa,EAAE,GAAG,wDAAa,sBAAsB,GAAC,CAAC;QAC/D,MAAM,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IAC3C,IAAI,CAAC,WAAW,CAAC,sDAAsD,CAAC,CAAC;IACzE,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,MAAc,EAAE,EAAE;QACnC,MAAM,EAAE,aAAa,EAAE,GAAG,wDAAa,sBAAsB,GAAC,CAAC;QAC/D,MAAM,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,EAAE,CAAC,WAAW,EAAE,GAAG,EAAE;QAC3B,OAAO,CAAC,KAAK,CAAC,mEAAmE,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QACpG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;IAEH,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/commands/search.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAiB,MAAM,UAAU,CAAC;AAoCxD,wBAAsB,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/commands/search.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAiB,MAAM,UAAU,CAAC;AAoCxD,wBAAsB,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CA2DzE"}
|
package/dist/commands/search.js
CHANGED
|
@@ -39,9 +39,19 @@ function displaySearchInfo(options, sources) {
|
|
|
39
39
|
async function searchCommand(options) {
|
|
40
40
|
const spinner = (0, ora_1.default)('Searching torrent sources...').start();
|
|
41
41
|
let sources = (0, registry_1.getEnabledSources)();
|
|
42
|
+
const validSourceNames = sources.map(s => s.name.toLowerCase());
|
|
42
43
|
if (options.sources && options.sources.length > 0) {
|
|
43
44
|
const requested = options.sources.map(s => s.toLowerCase());
|
|
45
|
+
const unknownSources = requested.filter(s => !validSourceNames.includes(s));
|
|
46
|
+
if (unknownSources.length > 0) {
|
|
47
|
+
spinner.warn(chalk_1.default.yellow(`Unknown sources: ${unknownSources.join(', ')}. Available: ${validSourceNames.join(', ')}`));
|
|
48
|
+
}
|
|
44
49
|
sources = sources.filter(s => requested.includes(s.name.toLowerCase()));
|
|
50
|
+
if (sources.length === 0) {
|
|
51
|
+
spinner.fail('No valid sources selected. Use --sources with valid names.');
|
|
52
|
+
console.log(chalk_1.default.cyan('\nAvailable sources:'), validSourceNames.join(', '));
|
|
53
|
+
process.exit(1);
|
|
54
|
+
}
|
|
45
55
|
}
|
|
46
56
|
const allResults = [];
|
|
47
57
|
for (const source of sources) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/commands/search.ts"],"names":[],"mappings":";;;;;AAsCA,
|
|
1
|
+
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/commands/search.ts"],"names":[],"mappings":";;;;;AAsCA,sCA2DC;AAjGD,8CAAsB;AACtB,kDAA0B;AAE1B,kDAAwD;AACxD,wCAAwF;AACxF,4CAAgD;AAChD,+CAAkD;AAElD,SAAS,iBAAiB,CAAC,OAAsB,EAAE,OAAc;IAC/D,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC,CAAC;IAEvD,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,eAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;IACjE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,eAAK,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;IAEnE,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;QACrB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,eAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IACxE,CAAC;IACD,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;QACrB,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,QAAQ,MAAM,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,QAAQ,GAAG,CAAC;QACtG,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,eAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAC7D,CAAC;IACD,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,eAAK,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;IACvE,CAAC;IACD,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,eAAK,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;IACvE,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,eAAK,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,MAAM,KAAK,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;IAC9F,CAAC;IACD,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QAClB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,eAAK,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IAChF,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC,CAAC;AACxD,CAAC;AAEM,KAAK,UAAU,aAAa,CAAC,OAAsB;IACxD,MAAM,OAAO,GAAG,IAAA,aAAG,EAAC,8BAA8B,CAAC,CAAC,KAAK,EAAE,CAAC;IAE5D,IAAI,OAAO,GAAG,IAAA,4BAAiB,GAAE,CAAC;IAClC,MAAM,gBAAgB,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;IAEhE,IAAI,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClD,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;QAC5D,MAAM,cAAc,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QAE5E,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9B,OAAO,CAAC,IAAI,CAAC,eAAK,CAAC,MAAM,CAAC,oBAAoB,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QACzH,CAAC;QAED,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;QAExE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,CAAC,IAAI,CAAC,4DAA4D,CAAC,CAAC;YAC3E,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,EAAE,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YAC7E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAED,MAAM,UAAU,GAAoB,EAAE,CAAC;IAEvC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,IAAI,CAAC;YACH,OAAO,CAAC,IAAI,GAAG,aAAa,MAAM,CAAC,IAAI,KAAK,CAAC;YAC7C,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;YACrE,UAAU,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC;QAC9B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,oBAAoB,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QAClD,CAAC;IACH,CAAC;IAED,OAAO,CAAC,OAAO,CAAC,0BAA0B,UAAU,CAAC,MAAM,WAAW,CAAC,CAAC;IAExE,IAAI,QAAQ,GAAG,IAAA,0BAAgB,EAAC,UAAU,EAAE,OAAO,CAAC,QAAQ,IAAI,KAAK,CAAC,CAAC;IAEvE,IAAI,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC;QAC7C,QAAQ,GAAG,IAAA,uBAAa,EAAC,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;IACzE,CAAC;IAED,IAAI,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QACvC,QAAQ,GAAG,IAAA,sBAAY,EAAC,QAAQ,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IACtE,CAAC;IAED,QAAQ,GAAG,IAAA,qBAAW,EAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,IAAI,OAAO,EAAE,OAAO,CAAC,KAAK,IAAI,MAAM,CAAC,CAAC;IAErF,IAAI,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;QACvC,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IAC9C,CAAC;IAED,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IAE1D,IAAA,qBAAY,EAAC,QAAQ,CAAC,CAAC;IAEvB,iBAAiB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACpC,IAAA,wBAAc,EAAC,QAAQ,CAAC,CAAC;AAC3B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../src/download/engine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../src/download/engine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAwBzC,wBAAgB,YAAY,CAAC,OAAO,EAAE,aAAa,EAAE,GAAG,IAAI,CAG3D;AAED,wBAAgB,gBAAgB,IAAI,aAAa,EAAE,CAKlD"}
|
package/dist/download/engine.js
CHANGED
|
@@ -4,7 +4,8 @@ exports.cacheResults = cacheResults;
|
|
|
4
4
|
exports.getCachedResults = getCachedResults;
|
|
5
5
|
const fs_1 = require("fs");
|
|
6
6
|
const path_1 = require("path");
|
|
7
|
-
const
|
|
7
|
+
const os_1 = require("os");
|
|
8
|
+
const CACHE_FILE = (0, path_1.join)((0, os_1.tmpdir)(), 'tor-dl-cache.json');
|
|
8
9
|
function saveCache(results) {
|
|
9
10
|
try {
|
|
10
11
|
(0, fs_1.writeFileSync)(CACHE_FILE, JSON.stringify(results, null, 2));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../../src/download/engine.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../../src/download/engine.ts"],"names":[],"mappings":";;AAwBA,oCAGC;AAED,4CAKC;AAjCD,2BAA6D;AAC7D,+BAA4B;AAC5B,2BAA4B;AAE5B,MAAM,UAAU,GAAG,IAAA,WAAI,EAAC,IAAA,WAAM,GAAE,EAAE,mBAAmB,CAAC,CAAC;AAEvD,SAAS,SAAS,CAAC,OAAwB;IACzC,IAAI,CAAC;QACH,IAAA,kBAAa,EAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC9D,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC,CAAC,YAAY,CAAC,CAAC;AAC9B,CAAC;AAED,SAAS,SAAS;IAChB,IAAI,CAAC;QACH,IAAI,IAAA,eAAU,EAAC,UAAU,CAAC,EAAE,CAAC;YAC3B,OAAO,IAAI,CAAC,KAAK,CAAC,IAAA,iBAAY,EAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;QACvD,CAAC;IACH,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC,CAAC,YAAY,CAAC,CAAC;IAC5B,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,IAAI,aAAa,GAAoB,EAAE,CAAC;AAExC,SAAgB,YAAY,CAAC,OAAwB;IACnD,aAAa,GAAG,OAAO,CAAC;IACxB,SAAS,CAAC,OAAO,CAAC,CAAC;AACrB,CAAC;AAED,SAAgB,gBAAgB;IAC9B,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/B,aAAa,GAAG,SAAS,EAAE,CAAC;IAC9B,CAAC;IACD,OAAO,aAAa,CAAC;AACvB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"torrentscsv.d.ts","sourceRoot":"","sources":["../../src/sources/torrentscsv.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAGxD,qBAAa,kBAAmB,YAAW,aAAa;IACtD,IAAI,
|
|
1
|
+
{"version":3,"file":"torrentscsv.d.ts","sourceRoot":"","sources":["../../src/sources/torrentscsv.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAGxD,qBAAa,kBAAmB,YAAW,aAAa;IACtD,IAAI,SAAiB;IAEf,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAkClE,aAAa,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC;IAIrD,SAAS,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC;IAIvD,OAAO,CAAC,UAAU;CAMnB;;AAED,wBAAwC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"torrentscsv.js","sourceRoot":"","sources":["../../src/sources/torrentscsv.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAE1B,6CAAwD;AAExD,MAAa,kBAAkB;IAA/B;QACE,SAAI,GAAG,
|
|
1
|
+
{"version":3,"file":"torrentscsv.js","sourceRoot":"","sources":["../../src/sources/torrentscsv.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/sources.json
CHANGED
package/src/cli/display.ts
CHANGED
|
@@ -28,18 +28,20 @@ export function displayResults(results: TorrentResult[]): void {
|
|
|
28
28
|
const peers = r.peers > 50 ? chalk.cyan(r.peers.toString().padStart(5)) : r.peers.toString().padStart(5);
|
|
29
29
|
const source = (r.source || 'unknown').slice(0, 6).padEnd(6);
|
|
30
30
|
const num = chalk.cyan(r.num.toString().padStart(3));
|
|
31
|
-
const link = r.torrentUrl || r.magnet ? chalk.green('✓') : ' ';
|
|
32
31
|
|
|
33
32
|
const url = r.torrentUrl || r.magnet || '';
|
|
33
|
+
const pageUrl = r.url || '';
|
|
34
|
+
|
|
34
35
|
const clickableName = url ? makeClickable(url, name.padEnd(38)) : name.padEnd(38);
|
|
36
|
+
const clickableLink = pageUrl ? makeClickable(pageUrl, chalk.green('✓')) : chalk.gray(' ');
|
|
35
37
|
|
|
36
|
-
out(`│ ${num} │ ${
|
|
38
|
+
out(`│ ${num} │ ${clickableLink} │ ${clickableName} │ ${size} │ ${seeds} │ ${peers} │ ${source} │`);
|
|
37
39
|
}
|
|
38
40
|
|
|
39
41
|
out('├─────┼───┼────────────────────────────────────────┼────────┼───────┼───────┼────────┤');
|
|
40
42
|
out('└─────┴───┴────────────────────────────────────────┴────────┴───────┴───────┴────────┘');
|
|
41
43
|
out('');
|
|
42
|
-
out(chalk.gray('
|
|
44
|
+
out(chalk.gray('Click name = open magnet/torrent | Click ✓ = open source page'));
|
|
43
45
|
}
|
|
44
46
|
|
|
45
47
|
export function displayResultDetails(result: TorrentResult): void {
|
package/src/cli/parser.ts
CHANGED
|
@@ -1,118 +1,117 @@
|
|
|
1
|
-
import { Command } from 'commander';
|
|
2
|
-
import { readFileSync, existsSync } from 'fs';
|
|
3
|
-
import { join } from 'path';
|
|
4
|
-
import { FilterConfig, SearchOptions } from '../types';
|
|
5
|
-
|
|
6
|
-
function getVersion(): string {
|
|
7
|
-
try {
|
|
8
|
-
const pkg = JSON.parse(readFileSync(join(__dirname, '../../package.json'), 'utf-8'));
|
|
9
|
-
return pkg.version || '1.0.0';
|
|
10
|
-
} catch {
|
|
11
|
-
return '1.0.0';
|
|
12
|
-
}
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
export function loadFilters(): FilterConfig {
|
|
16
|
-
const filtersPath = join(process.cwd(), 'filters.json');
|
|
17
|
-
if (existsSync(filtersPath)) {
|
|
18
|
-
return JSON.parse(readFileSync(filtersPath, 'utf-8'));
|
|
19
|
-
}
|
|
20
|
-
return {
|
|
21
|
-
category: 'all',
|
|
22
|
-
minSeeds: 0,
|
|
23
|
-
minSize: '0',
|
|
24
|
-
maxSize: '50GB',
|
|
25
|
-
sortBy: 'seeds',
|
|
26
|
-
order: 'desc',
|
|
27
|
-
limit: 50
|
|
28
|
-
};
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
export function createParser(): Command {
|
|
32
|
-
const program = new Command();
|
|
33
|
-
const filters = loadFilters();
|
|
34
|
-
|
|
35
|
-
const mainHelp = `
|
|
36
|
-
Categories: all, movie, tv, anime, music, games, apps
|
|
37
|
-
Sources:
|
|
38
|
-
yts - YTS (Movies) |
|
|
39
|
-
|
|
40
|
-
program
|
|
41
|
-
.name('tor-dl')
|
|
42
|
-
.description('CLI torrent search tool - search, open in browser, copy magnet links' + mainHelp)
|
|
43
|
-
.version(getVersion(), '-v, --version')
|
|
44
|
-
.showHelpAfterError()
|
|
45
|
-
.showSuggestionAfterError();
|
|
46
|
-
|
|
47
|
-
program
|
|
48
|
-
.command('search <query>')
|
|
49
|
-
.description('Search for torrents. Use -h after search term for examples: tor-dl search "movie" -h')
|
|
50
|
-
.option('-c, --cat <category>', 'Category (all|movie|tv|anime|music|games|apps)')
|
|
51
|
-
.option('-s, --min-seeds <number>', 'Minimum seeders', parseInt)
|
|
52
|
-
.option('--max-seeds <number>', 'Maximum seeders', parseInt)
|
|
53
|
-
.option('--min-size <size>', 'Min size (e.g. 500MB, 1GB)')
|
|
54
|
-
.option('--max-size <size>', 'Max size (e.g. 5GB)')
|
|
55
|
-
.option('-o, --sort <sortBy>', 'Sort by (seeds|size|date)')
|
|
56
|
-
.option('--order <order>', 'Order (asc|desc)')
|
|
57
|
-
.option('-l, --limit <number>', 'Max results (default: 50)', parseInt)
|
|
58
|
-
.option('--sources <sources>', 'Sources (yts,
|
|
59
|
-
.option('-h, --help', 'Show help with examples')
|
|
60
|
-
.allowUnknownOption()
|
|
61
|
-
.hook('preAction', (thisCommand) => {
|
|
62
|
-
const opts = thisCommand.opts();
|
|
63
|
-
if (opts.help || thisCommand.args.includes('-h')) {
|
|
64
|
-
console.log('');
|
|
65
|
-
console.log('Categories: all, movie, tv, anime, music, games, apps');
|
|
66
|
-
console.log('Sources:');
|
|
67
|
-
console.log(' yts - YTS (Movies)');
|
|
68
|
-
console.log('
|
|
69
|
-
console.log('
|
|
70
|
-
console.log('
|
|
71
|
-
console.log('');
|
|
72
|
-
console.log('
|
|
73
|
-
console.log(' tor-dl search "
|
|
74
|
-
console.log(' tor-dl search "
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
openCmd.
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
oCmd.
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
return program;
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import { readFileSync, existsSync } from 'fs';
|
|
3
|
+
import { join } from 'path';
|
|
4
|
+
import { FilterConfig, SearchOptions } from '../types';
|
|
5
|
+
|
|
6
|
+
function getVersion(): string {
|
|
7
|
+
try {
|
|
8
|
+
const pkg = JSON.parse(readFileSync(join(__dirname, '../../package.json'), 'utf-8'));
|
|
9
|
+
return pkg.version || '1.0.0';
|
|
10
|
+
} catch {
|
|
11
|
+
return '1.0.0';
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export function loadFilters(): FilterConfig {
|
|
16
|
+
const filtersPath = join(process.cwd(), 'filters.json');
|
|
17
|
+
if (existsSync(filtersPath)) {
|
|
18
|
+
return JSON.parse(readFileSync(filtersPath, 'utf-8'));
|
|
19
|
+
}
|
|
20
|
+
return {
|
|
21
|
+
category: 'all',
|
|
22
|
+
minSeeds: 0,
|
|
23
|
+
minSize: '0',
|
|
24
|
+
maxSize: '50GB',
|
|
25
|
+
sortBy: 'seeds',
|
|
26
|
+
order: 'desc',
|
|
27
|
+
limit: 50
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export function createParser(): Command {
|
|
32
|
+
const program = new Command();
|
|
33
|
+
const filters = loadFilters();
|
|
34
|
+
|
|
35
|
+
const mainHelp = `
|
|
36
|
+
Categories: all, movie, tv, anime, music, games, apps
|
|
37
|
+
Sources:
|
|
38
|
+
yts - YTS (Movies) | thepiratebay - The Pirate Bay | nyaa - Nyaa.si (Anime)`;
|
|
39
|
+
|
|
40
|
+
program
|
|
41
|
+
.name('tor-dl')
|
|
42
|
+
.description('CLI torrent search tool - search, open in browser, copy magnet links' + mainHelp)
|
|
43
|
+
.version(getVersion(), '-v, --version')
|
|
44
|
+
.showHelpAfterError()
|
|
45
|
+
.showSuggestionAfterError();
|
|
46
|
+
|
|
47
|
+
program
|
|
48
|
+
.command('search <query>')
|
|
49
|
+
.description('Search for torrents. Use -h after search term for examples: tor-dl search "movie" -h')
|
|
50
|
+
.option('-c, --cat <category>', 'Category (all|movie|tv|anime|music|games|apps)')
|
|
51
|
+
.option('-s, --min-seeds <number>', 'Minimum seeders', parseInt)
|
|
52
|
+
.option('--max-seeds <number>', 'Maximum seeders', parseInt)
|
|
53
|
+
.option('--min-size <size>', 'Min size (e.g. 500MB, 1GB)')
|
|
54
|
+
.option('--max-size <size>', 'Max size (e.g. 5GB)')
|
|
55
|
+
.option('-o, --sort <sortBy>', 'Sort by (seeds|size|date)')
|
|
56
|
+
.option('--order <order>', 'Order (asc|desc)')
|
|
57
|
+
.option('-l, --limit <number>', 'Max results (default: 50)', parseInt)
|
|
58
|
+
.option('-S, --sources <sources>', 'Sources (yts,thepiratebay,nyaa)')
|
|
59
|
+
.option('-h, --help', 'Show help with examples')
|
|
60
|
+
.allowUnknownOption()
|
|
61
|
+
.hook('preAction', (thisCommand) => {
|
|
62
|
+
const opts = thisCommand.opts();
|
|
63
|
+
if (opts.help || thisCommand.args.includes('-h')) {
|
|
64
|
+
console.log('');
|
|
65
|
+
console.log('Categories: all, movie, tv, anime, music, games, apps');
|
|
66
|
+
console.log('Sources:');
|
|
67
|
+
console.log(' yts - YTS (Movies)');
|
|
68
|
+
console.log(' thepiratebay - The Pirate Bay');
|
|
69
|
+
console.log(' nyaa - Nyaa.si (Anime)');
|
|
70
|
+
console.log('');
|
|
71
|
+
console.log('Examples:');
|
|
72
|
+
console.log(' tor-dl search "movie" -c movie -s 100');
|
|
73
|
+
console.log(' tor-dl search "anime" -S nyaa --max-size 2GB');
|
|
74
|
+
console.log(' tor-dl search "linux" --min-size 500MB -l 10');
|
|
75
|
+
process.exit(0);
|
|
76
|
+
}
|
|
77
|
+
})
|
|
78
|
+
.action(async (query: string, options) => {
|
|
79
|
+
|
|
80
|
+
const searchOptions: SearchOptions = {
|
|
81
|
+
query,
|
|
82
|
+
category: options.cat || filters.category,
|
|
83
|
+
minSeeds: options.minSeeds ?? filters.minSeeds,
|
|
84
|
+
maxSeeds: options.maxSeeds,
|
|
85
|
+
minSize: options.minSize || filters.minSize,
|
|
86
|
+
maxSize: options.maxSize || filters.maxSize,
|
|
87
|
+
sortBy: (options.sort as 'seeds' | 'size' | 'date') || filters.sortBy,
|
|
88
|
+
order: (options.order as 'asc' | 'desc') || filters.order,
|
|
89
|
+
limit: options.limit || filters.limit,
|
|
90
|
+
sources: options.sources ? options.sources.split(',') : undefined
|
|
91
|
+
};
|
|
92
|
+
|
|
93
|
+
const { searchCommand } = await import('../commands/search');
|
|
94
|
+
await searchCommand(searchOptions);
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
const openCmd = program.command('open <number>', { hidden: true });
|
|
98
|
+
openCmd.description('Open .torrent in browser or copy magnet to clipboard');
|
|
99
|
+
openCmd.action(async (number: string) => {
|
|
100
|
+
const { openInBrowser } = await import('../commands/download');
|
|
101
|
+
await openInBrowser(parseInt(number));
|
|
102
|
+
});
|
|
103
|
+
|
|
104
|
+
const oCmd = program.command('o <number>');
|
|
105
|
+
oCmd.description('Open .torrent in browser or copy magnet to clipboard');
|
|
106
|
+
oCmd.action(async (number: string) => {
|
|
107
|
+
const { openInBrowser } = await import('../commands/download');
|
|
108
|
+
await openInBrowser(parseInt(number));
|
|
109
|
+
});
|
|
110
|
+
|
|
111
|
+
program.on('command:*', () => {
|
|
112
|
+
console.error('Invalid command: %s\nSee --help for a list of available commands.', program.args[0]);
|
|
113
|
+
process.exit(1);
|
|
114
|
+
});
|
|
115
|
+
|
|
116
|
+
return program;
|
|
118
117
|
}
|
package/src/commands/search.ts
CHANGED
|
@@ -40,10 +40,23 @@ export async function searchCommand(options: SearchOptions): Promise<void> {
|
|
|
40
40
|
const spinner = ora('Searching torrent sources...').start();
|
|
41
41
|
|
|
42
42
|
let sources = getEnabledSources();
|
|
43
|
+
const validSourceNames = sources.map(s => s.name.toLowerCase());
|
|
43
44
|
|
|
44
45
|
if (options.sources && options.sources.length > 0) {
|
|
45
46
|
const requested = options.sources.map(s => s.toLowerCase());
|
|
47
|
+
const unknownSources = requested.filter(s => !validSourceNames.includes(s));
|
|
48
|
+
|
|
49
|
+
if (unknownSources.length > 0) {
|
|
50
|
+
spinner.warn(chalk.yellow(`Unknown sources: ${unknownSources.join(', ')}. Available: ${validSourceNames.join(', ')}`));
|
|
51
|
+
}
|
|
52
|
+
|
|
46
53
|
sources = sources.filter(s => requested.includes(s.name.toLowerCase()));
|
|
54
|
+
|
|
55
|
+
if (sources.length === 0) {
|
|
56
|
+
spinner.fail('No valid sources selected. Use --sources with valid names.');
|
|
57
|
+
console.log(chalk.cyan('\nAvailable sources:'), validSourceNames.join(', '));
|
|
58
|
+
process.exit(1);
|
|
59
|
+
}
|
|
47
60
|
}
|
|
48
61
|
|
|
49
62
|
const allResults: TorrentResult[] = [];
|
package/src/download/engine.ts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { TorrentResult } from '../types';
|
|
2
2
|
import { writeFileSync, readFileSync, existsSync } from 'fs';
|
|
3
3
|
import { join } from 'path';
|
|
4
|
+
import { tmpdir } from 'os';
|
|
4
5
|
|
|
5
|
-
const CACHE_FILE = join(
|
|
6
|
+
const CACHE_FILE = join(tmpdir(), 'tor-dl-cache.json');
|
|
6
7
|
|
|
7
8
|
function saveCache(results: TorrentResult[]): void {
|
|
8
9
|
try {
|
|
@@ -3,7 +3,7 @@ import { TorrentResult, SourceScraper } from '../types';
|
|
|
3
3
|
import { DEFAULT_HEADERS, TIMEOUT } from './httpClient';
|
|
4
4
|
|
|
5
5
|
export class TorrentsCsvScraper implements SourceScraper {
|
|
6
|
-
name = '
|
|
6
|
+
name = 'torrentscsv';
|
|
7
7
|
|
|
8
8
|
async search(query: string, category?: string): Promise<TorrentResult[]> {
|
|
9
9
|
try {
|
package/help.txt
DELETED
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
Usage: tor-dl search [options] <query>
|
|
2
|
-
|
|
3
|
-
Search for torrents across multiple sources
|
|
4
|
-
|
|
5
|
-
Options:
|
|
6
|
-
-c, --cat <category> Category: all, movie, tv, anime, music, games, apps
|
|
7
|
-
-s, --min-seeds <number> Minimum seeders (e.g., 100)
|
|
8
|
-
--max-seeds <number> Maximum seeders (e.g., 1000)
|
|
9
|
-
--min-size <size> Minimum size (e.g., 500MB, 1GB, 2GB)
|
|
10
|
-
--max-size <size> Maximum size (e.g., 5GB, 10GB)
|
|
11
|
-
-o, --sort <sortBy> Sort by: seeds, size, date
|
|
12
|
-
--order <order> Sort order: asc (low to high), desc (high to low)
|
|
13
|
-
-l, --limit <number> Maximum results to return (default: 50)
|
|
14
|
-
--sources <sources> Sources: yts, eztv, thepiratebay, nyaa
|
|
15
|
-
(comma-separated)
|
|
16
|
-
-h, --help display help for command
|
|
17
|
-
|
|
18
|
-
Available Categories:
|
|
19
|
-
all, movie, tv, anime, music, games, apps
|
|
20
|
-
|
|
21
|
-
Available Sources:
|
|
22
|
-
yts - YTS (Movies only)
|
|
23
|
-
eztv - EZTV (TV shows)
|
|
24
|
-
thepiratebay - The Pirate Bay (All categories)
|
|
25
|
-
nyaa - Nyaa.si (Anime, Japanese media)
|
|
26
|
-
|
|
27
|
-
Examples:
|
|
28
|
-
tor-dl search "movie" --cat movie --min-seeds 100
|
|
29
|
-
tor-dl search "anime" --sources nyaa --max-size 2GB
|
|
30
|
-
tor-dl search "linux" --min-size 500MB --max-size 2GB -l 10
|
package/output.txt
DELETED
|
Binary file
|