cross-seed 3.0.1 → 3.1.0
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 +10 -9
- package/dist/clients/RTorrent.js +4 -1
- package/dist/clients/RTorrent.js.map +1 -1
- package/dist/cmd.js +5 -5
- package/dist/cmd.js.map +1 -1
- package/dist/config.template.cjs +70 -30
- package/dist/config.template.cjs.map +1 -1
- package/dist/config.template.docker.cjs +74 -35
- package/dist/config.template.docker.cjs.map +1 -1
- package/dist/configuration.js +2 -1
- package/dist/configuration.js.map +1 -1
- package/dist/constants.js +0 -6
- package/dist/constants.js.map +1 -1
- package/dist/decide.js +47 -39
- package/dist/decide.js.map +1 -1
- package/dist/jackett.js +18 -22
- package/dist/jackett.js.map +1 -1
- package/dist/logger.js +2 -0
- package/dist/logger.js.map +1 -1
- package/dist/pipeline.js +48 -37
- package/dist/pipeline.js.map +1 -1
- package/dist/runtimeConfig.js +1 -0
- package/dist/runtimeConfig.js.map +1 -1
- package/dist/startup.js +2 -0
- package/dist/startup.js.map +1 -1
- package/dist/torznab.js +94 -0
- package/dist/torznab.js.map +1 -0
- package/dist/utils.js +11 -0
- package/dist/utils.js.map +1 -1
- package/package.json +3 -1
package/README.md
CHANGED
@@ -20,7 +20,8 @@ delivery into your client.
|
|
20
20
|
## Requirements
|
21
21
|
|
22
22
|
- [Node 14+](https://nodejs.org/en/download)
|
23
|
-
-
|
23
|
+
- Any number of indexers that support Torznab (use Jackett or Prowlarr to
|
24
|
+
help)
|
24
25
|
|
25
26
|
It will work on Mac and on Linux; I haven't tested it on Windows but it should
|
26
27
|
work there too.
|
@@ -37,13 +38,12 @@ Here's an example invocation:
|
|
37
38
|
|
38
39
|
```shell script
|
39
40
|
npx cross-seed search \
|
40
|
-
--
|
41
|
-
--jackett-api-key JACKETT_API_KEY \
|
41
|
+
--torznab http://localhost:9696/prowlarr/1/api?apikey=a1b2c3d4e5f6 \
|
42
42
|
--torrent-dir /home/rtorrent/.session \
|
43
43
|
--output-dir /tmp/torrents
|
44
44
|
```
|
45
45
|
|
46
|
-
You either need to give it a
|
46
|
+
You either need to give it a few command-line arguments or create a
|
47
47
|
[configuration file](https://github.com/mmgoodnow/cross-seed/wiki/Configuration-file).
|
48
48
|
|
49
49
|
```text
|
@@ -53,9 +53,10 @@ Search for cross-seeds
|
|
53
53
|
|
54
54
|
|
55
55
|
Options:
|
56
|
-
-u, --jackett-server-url <url> Your Jackett server url
|
57
|
-
-k, --jackett-api-key <key> Your Jackett API key
|
58
|
-
-t, --trackers <tracker1>,<tracker2> Comma-separated list of Jackett tracker ids to search (Tracker ids can be found in their Torznab feed paths)
|
56
|
+
-u, --jackett-server-url <url> DEPRECATED: Your Jackett server url
|
57
|
+
-k, --jackett-api-key <key> DEPRECATED: Your Jackett API key
|
58
|
+
-t, --trackers <tracker1>,<tracker2> DEPRECATED: Comma-separated list of Jackett tracker ids to search (Tracker ids can be found in their Torznab feed paths)
|
59
|
+
-T, --torznab <urls...> Torznab urls with apikey included (separated by spaces)
|
59
60
|
-i, --torrent-dir <dir> Directory with torrent files
|
60
61
|
-s, --output-dir <dir> Directory to save results in
|
61
62
|
-a, --search-all Search for all torrents regardless of their contents (default: false)
|
@@ -99,14 +100,14 @@ npm uninstall -g cross-seed
|
|
99
100
|
npm install -g cross-seed
|
100
101
|
```
|
101
102
|
|
102
|
-
## Daemon mode (
|
103
|
+
## Daemon mode (Docker recommended)
|
103
104
|
|
104
105
|
`cross-seed` supports a daemon mode, wherein the app is always running, and you
|
105
106
|
can trigger an HTTP request to search for cross-seeds of a specific torrent. See
|
106
107
|
more info in the
|
107
108
|
[wiki page](https://github.com/mmgoodnow/cross-seed/wiki/Daemon-Mode).
|
108
109
|
|
109
|
-
## Direct client injection
|
110
|
+
## Direct client injection
|
110
111
|
|
111
112
|
As mentioned above, `cross-seed` can inject the torrents it finds directly into
|
112
113
|
your torrent client. See more info in the
|
package/dist/clients/RTorrent.js
CHANGED
@@ -68,7 +68,10 @@ export default class RTorrent {
|
|
68
68
|
async methodCallP(method, args) {
|
69
69
|
logger.verbose({
|
70
70
|
label: Label.RTORRENT,
|
71
|
-
message: `Calling method ${method} with params ${inspect(args
|
71
|
+
message: `Calling method ${method} with params ${inspect(args, {
|
72
|
+
depth: null,
|
73
|
+
compact: true,
|
74
|
+
})}`,
|
72
75
|
});
|
73
76
|
return new Promise((resolve, reject) => {
|
74
77
|
this.client.methodCall(method, args, (err, data) => {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"RTorrent.js","sourceRoot":"","sources":["../../src/clients/RTorrent.ts"],"names":[],"mappings":"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
|
1
|
+
{"version":3,"file":"RTorrent.js","sourceRoot":"","sources":["../../src/clients/RTorrent.ts"],"names":[],"mappings":"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"}
|
package/dist/cmd.js
CHANGED
@@ -37,9 +37,10 @@ function createCommandWithSharedOptions(name, description) {
|
|
37
37
|
return program
|
38
38
|
.command(name)
|
39
39
|
.description(description)
|
40
|
-
.
|
41
|
-
.
|
42
|
-
.
|
40
|
+
.option("-u, --jackett-server-url <url>", "DEPRECATED: Your Jackett server url", fileConfig.jackettServerUrl)
|
41
|
+
.option("-k, --jackett-api-key <key>", "DEPRECATED: Your Jackett API key", fileConfig.jackettApiKey)
|
42
|
+
.option("-t, --trackers <tracker1>,<tracker2>", "DEPRECATED: Comma-separated list of Jackett tracker ids to search (Tracker ids can be found in their Torznab feed paths)", fallback((_a = fileConfig.trackers) === null || _a === void 0 ? void 0 : _a.join(","), ""))
|
43
|
+
.option("-T, --torznab <urls...>", "Torznab urls with apikey included (separated by spaces)", fallback(fileConfig.torznab))
|
43
44
|
.requiredOption("-i, --torrent-dir <dir>", "Directory with torrent files", fileConfig.torrentDir)
|
44
45
|
.requiredOption("-s, --output-dir <dir>", "Directory to save results in", fileConfig.outputDir)
|
45
46
|
.requiredOption("-a, --search-all", "Search for all torrents regardless of their contents", fallback(fileConfig.searchAll, false))
|
@@ -74,8 +75,7 @@ program
|
|
74
75
|
.description("Send a test notification")
|
75
76
|
.requiredOption("--notification-webhook-url <url>", "cross-seed will send POST requests to this url with a JSON payload of { title, body }", fileConfig.notificationWebhookUrl)
|
76
77
|
.action((options) => {
|
77
|
-
|
78
|
-
setRuntimeConfig(runtimeConfig);
|
78
|
+
setRuntimeConfig(options);
|
79
79
|
initializeLogger();
|
80
80
|
initializePushNotifier();
|
81
81
|
sendTestNotification();
|
package/dist/cmd.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"cmd.js","sourceRoot":"","sources":["../src/cmd.ts"],"names":[],"mappings":";AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnE,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC9D,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,OAAO,EACN,sBAAsB,EACtB,oBAAoB,GACpB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,0BAA0B,EAAE,MAAM,eAAe,CAAC;AAC3D,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,qBAAqB,CAAC;AAC7B,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAC;AAExD,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,cAAc,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAElD,SAAS,QAAQ,CAAC,GAAG,IAAI;IACxB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;QACvB,IAAI,GAAG,KAAK,SAAS;YAAE,OAAO,GAAG,CAAC;KAClC;IACD,OAAO,SAAS,CAAC;AAClB,CAAC;AAED,SAAS,cAAc,CAAC,OAAO;;IAC9B,OAAO,CAAC,QAAQ,GAAG,MAAA,OAAO,CAAC,QAAQ,0CAAE,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;IACxE,OAAO,OAAO,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,GAAG,MAAM,aAAa,EAAE,CAAC;AAEzC,SAAS,8BAA8B,CAAC,IAAI,EAAE,WAAW;;IACxD,OAAO,OAAO;SACZ,OAAO,CAAC,IAAI,CAAC;SACb,WAAW,CAAC,WAAW,CAAC;SACxB,
|
1
|
+
{"version":3,"file":"cmd.js","sourceRoot":"","sources":["../src/cmd.ts"],"names":[],"mappings":"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"}
|
package/dist/config.template.cjs
CHANGED
@@ -1,50 +1,90 @@
|
|
1
1
|
// If you find yourself always using the same command-line flag, you can set
|
2
2
|
// it here as a default.
|
3
3
|
module.exports = {
|
4
|
+
/**
|
5
|
+
* @deprecated use torznab instead
|
6
|
+
*/
|
4
7
|
jackettServerUrl: "http://localhost:9117/jackett",
|
8
|
+
/**
|
9
|
+
* @deprecated use torznab instead
|
10
|
+
*/
|
5
11
|
jackettApiKey: "YOUR_JACKETT_API_KEY_HERE",
|
6
|
-
|
7
|
-
|
12
|
+
/**
|
13
|
+
* Pause at least this much in between each Jackett search. Higher is safer.
|
14
|
+
* It is not recommended to set this to less than 2 seconds.
|
15
|
+
*/
|
8
16
|
delay: 10,
|
9
|
-
|
10
|
-
|
11
|
-
|
17
|
+
/**
|
18
|
+
* @deprecated use torznab instead
|
19
|
+
* Trackers to search
|
20
|
+
* Set to [] if you want to search all trackers.
|
21
|
+
* Tracker ids can be found in their Torznab feed paths
|
22
|
+
*/
|
12
23
|
trackers: ["oink", "tehconnection"],
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
24
|
+
/**
|
25
|
+
* List of Torznab urls.
|
26
|
+
* The path should end in /api
|
27
|
+
* For Jackett, click "Copy RSS feed"
|
28
|
+
* For Prowlarr, click (i) and copy the Torznab Url, then append "?apikey=YOUR_PROWLARR_API_KEY"
|
29
|
+
*/
|
30
|
+
torznab: [],
|
31
|
+
/**
|
32
|
+
* directory containing torrent files.
|
33
|
+
* For rtorrent, this is your session directory
|
34
|
+
* as configured in your .rtorrent.rc file.
|
35
|
+
* For deluge, this is ~/.config/deluge/state.
|
36
|
+
*/
|
17
37
|
torrentDir: "/path/to/torrent/file/dir",
|
18
|
-
|
38
|
+
/**
|
39
|
+
* where to put the torrent files that cross-seed finds for you.
|
40
|
+
*/
|
19
41
|
outputDir: ".",
|
20
|
-
|
42
|
+
/**
|
43
|
+
* Whether to search for single episode torrents
|
44
|
+
*/
|
21
45
|
includeEpisodes: false,
|
22
|
-
|
23
|
-
|
46
|
+
/**
|
47
|
+
* search for all torrents, regardless of their contents
|
48
|
+
* this option overrides includeEpisodes.
|
49
|
+
*/
|
24
50
|
searchAll: false,
|
25
|
-
|
26
|
-
|
51
|
+
/**
|
52
|
+
* fuzzy size match threshold
|
53
|
+
* decimal value (0.02 = 2%)
|
54
|
+
*/
|
27
55
|
fuzzySizeThreshold: 0.02,
|
28
|
-
|
56
|
+
/**
|
57
|
+
* Exclude torrents first seen more than n minutes ago.
|
58
|
+
*/
|
29
59
|
excludeOlder: undefined,
|
30
|
-
|
31
|
-
|
60
|
+
/**
|
61
|
+
* Exclude torrents which have been searched
|
62
|
+
* more recently than n minutes ago.
|
63
|
+
*/
|
32
64
|
excludeRecentSearch: undefined,
|
33
|
-
|
34
|
-
|
65
|
+
/**
|
66
|
+
* can be either "save" or "inject".
|
67
|
+
* With "inject" you need to set up one of the below clients.
|
68
|
+
*/
|
35
69
|
action: "save",
|
36
|
-
|
37
|
-
|
38
|
-
|
70
|
+
/**
|
71
|
+
* The url of your rtorrent XMLRPC interface.
|
72
|
+
* Only relevant with action: "inject".
|
73
|
+
* Could be something like "http://username:password@localhost:1234/RPC2
|
74
|
+
*/
|
39
75
|
rtorrentRpcUrl: undefined,
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
76
|
+
/**
|
77
|
+
* The url of your qBittorrent webui.
|
78
|
+
* Only relevant with action: "inject".
|
79
|
+
* Supply your username and password inside the url like so:
|
80
|
+
* "http://username:password@localhost:8080"
|
81
|
+
*/
|
44
82
|
qbittorrentUrl: undefined,
|
45
|
-
|
46
|
-
|
47
|
-
|
83
|
+
/**
|
84
|
+
* cross-seed will send POST requests to this url
|
85
|
+
* with a JSON payload of { title, body }.
|
86
|
+
* Conforms to the caronc/apprise REST API.
|
87
|
+
*/
|
48
88
|
notificationWebhookUrl: undefined,
|
49
89
|
};
|
50
90
|
//# sourceMappingURL=config.template.cjs.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"config.template.cjs","sourceRoot":"","sources":["../src/config.template.cjs"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,wBAAwB;AAExB,MAAM,CAAC,OAAO,GAAG;IAChB,gBAAgB,EAAE,+BAA+B;
|
1
|
+
{"version":3,"file":"config.template.cjs","sourceRoot":"","sources":["../src/config.template.cjs"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,wBAAwB;AAExB,MAAM,CAAC,OAAO,GAAG;IAChB;;OAEG;IACH,gBAAgB,EAAE,+BAA+B;IAEjD;;OAEG;IACH,aAAa,EAAE,2BAA2B;IAE1C;;;OAGG;IACH,KAAK,EAAE,EAAE;IAET;;;;;OAKG;IACH,QAAQ,EAAE,CAAC,MAAM,EAAE,eAAe,CAAC;IAEnC;;;;;OAKG;IACH,OAAO,EAAE,EAAE;IAEX;;;;;OAKG;IACH,UAAU,EAAE,2BAA2B;IAEvC;;OAEG;IACH,SAAS,EAAE,GAAG;IAEd;;OAEG;IACH,eAAe,EAAE,KAAK;IAEtB;;;OAGG;IACH,SAAS,EAAE,KAAK;IAEhB;;;OAGG;IACH,kBAAkB,EAAE,IAAI;IAExB;;OAEG;IACH,YAAY,EAAE,SAAS;IAEvB;;;OAGG;IACH,mBAAmB,EAAE,SAAS;IAE9B;;;OAGI;IACJ,MAAM,EAAE,MAAM;IAEd;;;;OAIG;IACH,cAAc,EAAE,SAAS;IAEzB;;;;;OAKG;IACH,cAAc,EAAE,SAAS;IAEzB;;;;OAIG;IACH,sBAAsB,EAAE,SAAS;CACjC,CAAC"}
|
@@ -1,54 +1,93 @@
|
|
1
1
|
// If you find yourself always using the same command-line flag, you can set
|
2
2
|
// it here as a default.
|
3
3
|
module.exports = {
|
4
|
-
|
4
|
+
/**
|
5
|
+
* @deprecated use torznab instead
|
6
|
+
*/
|
7
|
+
jackettServerUrl: "http://localhost:9117/jackett",
|
8
|
+
/**
|
9
|
+
* @deprecated use torznab instead
|
10
|
+
*/
|
5
11
|
jackettApiKey: "YOUR_JACKETT_API_KEY_HERE",
|
6
|
-
|
7
|
-
|
12
|
+
/**
|
13
|
+
* Pause at least this much in between each Jackett search. Higher is safer.
|
14
|
+
* It is not recommended to set this to less than 2 seconds.
|
15
|
+
*/
|
8
16
|
delay: 10,
|
9
|
-
|
10
|
-
|
11
|
-
|
17
|
+
/**
|
18
|
+
* @deprecated use torznab instead
|
19
|
+
* Trackers to search
|
20
|
+
* Set to [] if you want to search all trackers.
|
21
|
+
* Tracker ids can be found in their Torznab feed paths
|
22
|
+
*/
|
12
23
|
trackers: ["oink", "tehconnection"],
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
24
|
+
/**
|
25
|
+
* List of Torznab urls.
|
26
|
+
* For Jackett, click "Copy RSS feed"
|
27
|
+
* For Prowlarr, click (i) and copy the Torznab Url, then append "?apikey=YOUR_PROWLARR_API_KEY"
|
28
|
+
*/
|
29
|
+
torznab: [],
|
30
|
+
/**
|
31
|
+
* directory containing torrent files.
|
32
|
+
* For rtorrent, this is your session directory
|
33
|
+
* as configured in your .rtorrent.rc file.
|
34
|
+
* For deluge, this is ~/.config/deluge/state.
|
35
|
+
* Don't change this for Docker.
|
36
|
+
* Instead set the volume mapping on your docker container.
|
37
|
+
*/
|
19
38
|
torrentDir: "/torrents",
|
20
|
-
|
21
|
-
|
22
|
-
|
39
|
+
/**
|
40
|
+
* where to put the torrent files that cross-seed finds for you.
|
41
|
+
* Don't change this for Docker.
|
42
|
+
* Instead set the volume mapping on your docker container.
|
43
|
+
*/
|
23
44
|
outputDir: "/cross-seeds",
|
24
|
-
|
45
|
+
/**
|
46
|
+
* Whether to search for single episode torrents
|
47
|
+
*/
|
25
48
|
includeEpisodes: false,
|
26
|
-
|
27
|
-
|
49
|
+
/**
|
50
|
+
* search for all torrents, regardless of their contents
|
51
|
+
* this option overrides includeEpisodes.
|
52
|
+
*/
|
28
53
|
searchAll: false,
|
29
|
-
|
30
|
-
|
54
|
+
/**
|
55
|
+
* fuzzy size match threshold
|
56
|
+
* decimal value (0.02 = 2%)
|
57
|
+
*/
|
31
58
|
fuzzySizeThreshold: 0.02,
|
32
|
-
|
59
|
+
/**
|
60
|
+
* Exclude torrents first seen more than n minutes ago.
|
61
|
+
*/
|
33
62
|
excludeOlder: undefined,
|
34
|
-
|
35
|
-
|
63
|
+
/**
|
64
|
+
* Exclude torrents which have been searched
|
65
|
+
* more recently than n minutes ago.
|
66
|
+
*/
|
36
67
|
excludeRecentSearch: undefined,
|
37
|
-
|
38
|
-
|
68
|
+
/**
|
69
|
+
* can be either "save" or "inject".
|
70
|
+
* With "inject" you need to set up one of the below clients.
|
71
|
+
*/
|
39
72
|
action: "save",
|
40
|
-
|
41
|
-
|
42
|
-
|
73
|
+
/**
|
74
|
+
* The url of your rtorrent XMLRPC interface.
|
75
|
+
* Only relevant with action: "inject".
|
76
|
+
* Could be something like "http://username:password@localhost:1234/RPC2
|
77
|
+
*/
|
43
78
|
rtorrentRpcUrl: undefined,
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
79
|
+
/**
|
80
|
+
* The url of your qBittorrent webui.
|
81
|
+
* Only relevant with action: "inject".
|
82
|
+
* Supply your username and password inside the url like so:
|
83
|
+
* "http://username:password@localhost:8080"
|
84
|
+
*/
|
48
85
|
qbittorrentUrl: undefined,
|
49
|
-
|
50
|
-
|
51
|
-
|
86
|
+
/**
|
87
|
+
* cross-seed will send POST requests to this url
|
88
|
+
* with a JSON payload of { title, body }.
|
89
|
+
* Conforms to the caronc/apprise REST API.
|
90
|
+
*/
|
52
91
|
notificationWebhookUrl: undefined,
|
53
92
|
};
|
54
93
|
//# sourceMappingURL=config.template.docker.cjs.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"config.template.docker.cjs","sourceRoot":"","sources":["../src/config.template.docker.cjs"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,wBAAwB;AAExB,MAAM,CAAC,OAAO,GAAG;IAChB,gBAAgB,EAAE
|
1
|
+
{"version":3,"file":"config.template.docker.cjs","sourceRoot":"","sources":["../src/config.template.docker.cjs"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,wBAAwB;AAExB,MAAM,CAAC,OAAO,GAAG;IAChB;;OAEG;IACH,gBAAgB,EAAE,+BAA+B;IAEjD;;OAEG;IACH,aAAa,EAAE,2BAA2B;IAE1C;;;OAGG;IACH,KAAK,EAAE,EAAE;IAET;;;;;OAKG;IACH,QAAQ,EAAE,CAAC,MAAM,EAAE,eAAe,CAAC;IAEnC;;;;OAIG;IACH,OAAO,EAAE,EAAE;IAEX;;;;;;;OAOG;IACH,UAAU,EAAE,WAAW;IAEvB;;;;OAIG;IACH,SAAS,EAAE,cAAc;IAEzB;;OAEG;IACH,eAAe,EAAE,KAAK;IAEtB;;;OAGG;IACH,SAAS,EAAE,KAAK;IAEhB;;;OAGG;IACH,kBAAkB,EAAE,IAAI;IAExB;;OAEG;IACH,YAAY,EAAE,SAAS;IAEvB;;;OAGG;IACH,mBAAmB,EAAE,SAAS;IAE9B;;;OAGG;IACH,MAAM,EAAE,MAAM;IAEd;;;;OAIG;IACH,cAAc,EAAE,SAAS;IAEzB;;;;;OAKG;IACH,cAAc,EAAE,SAAS;IAEzB;;;;OAII;IACJ,sBAAsB,EAAE,SAAS;CACjC,CAAC"}
|
package/dist/configuration.js
CHANGED
@@ -2,6 +2,7 @@ import chalk from "chalk";
|
|
2
2
|
import { copyFileSync, existsSync, mkdirSync } from "fs";
|
3
3
|
import { createRequire } from "module";
|
4
4
|
import path from "path";
|
5
|
+
import { pathToFileURL } from "url";
|
5
6
|
const require = createRequire(import.meta.url);
|
6
7
|
const packageDotJson = require("../package.json");
|
7
8
|
export function appDir() {
|
@@ -28,7 +29,7 @@ export function generateConfig({ force = false, docker = false, }) {
|
|
28
29
|
export async function getFileConfig() {
|
29
30
|
const configPath = path.join(appDir(), "config.js");
|
30
31
|
try {
|
31
|
-
return (await import(configPath)).default;
|
32
|
+
return (await import(pathToFileURL(configPath).toString())).default;
|
32
33
|
}
|
33
34
|
catch (e) {
|
34
35
|
if (e.code !== "ERR_MODULE_NOT_FOUND")
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"configuration.js","sourceRoot":"","sources":["../src/configuration.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,IAAI,MAAM,MAAM,CAAC;
|
1
|
+
{"version":3,"file":"configuration.js","sourceRoot":"","sources":["../src/configuration.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAGpC,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,cAAc,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;AA2BlD,MAAM,UAAU,MAAM;IACrB,OAAO,CACN,OAAO,CAAC,GAAG,CAAC,UAAU;QACtB,CAAC,OAAO,CAAC,QAAQ,KAAK,OAAO;YAC5B,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,cAAc,CAAC,IAAI,CAAC;YAC7D,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC,CAC7D,CAAC;AACH,CAAC;AAED,MAAM,UAAU,YAAY;IAC3B,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,eAAe,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACrE,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AAC7D,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,EAC9B,KAAK,GAAG,KAAK,EACb,MAAM,GAAG,KAAK,GACQ;IACtB,YAAY,EAAE,CAAC;IACf,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,WAAW,CAAC,CAAC;IAC9C,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAC7B,oBAAoB,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,CACjD,CAAC;IACF,IAAI,CAAC,KAAK,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE;QAC/B,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;QAClD,OAAO;KACP;IACD,YAAY,CAAC,IAAI,GAAG,CAAC,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;IAC3D,OAAO,CAAC,GAAG,CAAC,+BAA+B,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACvE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa;IAClC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,WAAW,CAAC,CAAC;IAEpD,IAAI;QACH,OAAO,CAAC,MAAM,MAAM,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;KACpE;IAAC,OAAO,CAAC,EAAE;QACX,IAAI,CAAC,CAAC,IAAI,KAAK,sBAAsB;YAAE,MAAM,CAAC,CAAC;QAC/C,OAAO,EAAE,CAAC;KACV;AACF,CAAC"}
|
package/dist/constants.js
CHANGED
@@ -2,7 +2,6 @@ export const EP_REGEX = /^(?<title>.+)[. ](?<season>S\d+)(?<episode>E\d+)/i;
|
|
2
2
|
export const SEASON_REGEX = /^(?<title>.+)[. ](?<season>S\d+)(?:\s?-\s?(?<seasonmax>S?\d+))?(?!E\d+)/i;
|
3
3
|
export const MOVIE_REGEX = /^(?<title>.+)[. ][[(]?(?<year>\d{4})[)\]]?(?![pi])/i;
|
4
4
|
export const EXTENSIONS = ["mkv", "mp4", "avi"];
|
5
|
-
export const CONFIG_TEMPLATE_URL = "https://github.com/mmgoodnow/cross-seed/blob/master/src/config.template.js";
|
6
5
|
export const TORRENT_CACHE_FOLDER = "torrent_cache";
|
7
6
|
export var Action;
|
8
7
|
(function (Action) {
|
@@ -25,9 +24,4 @@ export var Decision;
|
|
25
24
|
Decision["INFO_HASH_ALREADY_EXISTS"] = "INFO_HASH_ALREADY_EXISTS";
|
26
25
|
Decision["FILE_TREE_MISMATCH"] = "FILE_TREE_MISMATCH";
|
27
26
|
})(Decision = Decision || (Decision = {}));
|
28
|
-
export const PermanentDecisions = [
|
29
|
-
Decision.SIZE_MISMATCH,
|
30
|
-
Decision.NO_DOWNLOAD_LINK,
|
31
|
-
Decision.FILE_TREE_MISMATCH,
|
32
|
-
];
|
33
27
|
//# sourceMappingURL=constants.js.map
|
package/dist/constants.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,QAAQ,GAAG,mDAAmD,CAAC;AAC5E,MAAM,CAAC,MAAM,YAAY,GACxB,0EAA0E,CAAC;AAC5E,MAAM,CAAC,MAAM,WAAW,GACvB,qDAAqD,CAAC;AAEvD,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;AAEhD,MAAM,CAAC,MAAM,
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,QAAQ,GAAG,mDAAmD,CAAC;AAC5E,MAAM,CAAC,MAAM,YAAY,GACxB,0EAA0E,CAAC;AAC5E,MAAM,CAAC,MAAM,WAAW,GACvB,qDAAqD,CAAC;AAEvD,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;AAEhD,MAAM,CAAC,MAAM,oBAAoB,GAAG,eAAe,CAAC;AAEpD,MAAM,CAAN,IAAY,MAGX;AAHD,WAAY,MAAM;IACjB,uBAAa,CAAA;IACb,2BAAiB,CAAA;AAClB,CAAC,EAHW,MAAM,GAAN,MAAM,KAAN,MAAM,QAGjB;AAED,MAAM,CAAN,IAAY,eAKX;AALD,WAAY,eAAe;IAC1B,2DAAO,CAAA;IACP,2DAAO,CAAA;IACP,yEAAc,CAAA;IACd,qFAAoB,CAAA;AACrB,CAAC,EALW,eAAe,GAAf,eAAe,KAAf,eAAe,QAK1B;AAED,MAAM,CAAN,IAAY,QAOX;AAPD,WAAY,QAAQ;IACnB,2BAAe,CAAA;IACf,2CAA+B,CAAA;IAC/B,iDAAqC,CAAA;IACrC,+CAAmC,CAAA;IACnC,iEAAqD,CAAA;IACrD,qDAAyC,CAAA;AAC1C,CAAC,EAPW,QAAQ,GAAR,QAAQ,KAAR,QAAQ,QAOnB"}
|
package/dist/decide.js
CHANGED
@@ -5,8 +5,8 @@ import { appDir } from "./configuration.js";
|
|
5
5
|
import { Decision, TORRENT_CACHE_FOLDER } from "./constants.js";
|
6
6
|
import db from "./db.js";
|
7
7
|
import { Label, logger } from "./logger.js";
|
8
|
-
import { parseTorrentFromFilename, parseTorrentFromURL } from "./torrent.js";
|
9
8
|
import { getRuntimeConfig } from "./runtimeConfig.js";
|
9
|
+
import { parseTorrentFromFilename, parseTorrentFromURL } from "./torrent.js";
|
10
10
|
const createReasonLogger = (Title, tracker, name) => (decision, cached) => {
|
11
11
|
function logReason(reason) {
|
12
12
|
logger.verbose({
|
@@ -57,13 +57,13 @@ function sizeDoesMatch(resultSize, searchee) {
|
|
57
57
|
const upperBound = length + fuzzySizeThreshold * length;
|
58
58
|
return resultSize >= lowerBound && resultSize <= upperBound;
|
59
59
|
}
|
60
|
-
async function assessResultHelper({
|
61
|
-
if (!sizeDoesMatch(
|
60
|
+
async function assessResultHelper({ link, size }, searchee, hashesToExclude) {
|
61
|
+
if (!sizeDoesMatch(size, searchee)) {
|
62
62
|
return { decision: Decision.SIZE_MISMATCH };
|
63
63
|
}
|
64
|
-
if (!
|
64
|
+
if (!link)
|
65
65
|
return { decision: Decision.NO_DOWNLOAD_LINK };
|
66
|
-
const info = await parseTorrentFromURL(
|
66
|
+
const info = await parseTorrentFromURL(link);
|
67
67
|
if (!info)
|
68
68
|
return { decision: Decision.DOWNLOAD_FAILED };
|
69
69
|
if (hashesToExclude.includes(info.infoHash)) {
|
@@ -83,50 +83,58 @@ async function getCachedTorrentFile(infoHash) {
|
|
83
83
|
function cacheTorrentFile(meta) {
|
84
84
|
writeFileSync(path.join(appDir(), TORRENT_CACHE_FOLDER, `${meta.infoHash}.cached.torrent`), parseTorrent.toTorrentFile(meta));
|
85
85
|
}
|
86
|
+
async function assessAndSaveResults(result, searchee, Guid, infoHashesToExclude) {
|
87
|
+
const assessment = await assessResultHelper(result, searchee, infoHashesToExclude);
|
88
|
+
db.data.decisions[searchee.name][Guid] = {
|
89
|
+
decision: assessment.decision,
|
90
|
+
lastSeen: Date.now(),
|
91
|
+
firstSeen: Date.now(),
|
92
|
+
};
|
93
|
+
if (assessment.decision === Decision.MATCH) {
|
94
|
+
db.data.decisions[searchee.name][Guid].infoHash =
|
95
|
+
assessment.info.infoHash;
|
96
|
+
cacheTorrentFile(assessment.info);
|
97
|
+
}
|
98
|
+
return assessment;
|
99
|
+
}
|
86
100
|
async function assessResultCaching(result, searchee, infoHashesToExclude) {
|
87
101
|
var _a;
|
88
102
|
var _b, _c;
|
89
|
-
const {
|
90
|
-
const logReason = createReasonLogger(
|
103
|
+
const { guid, title, tracker } = result;
|
104
|
+
const logReason = createReasonLogger(title, tracker, searchee.name);
|
91
105
|
(_a = (_b = db.data.decisions)[_c = searchee.name]) !== null && _a !== void 0 ? _a : (_b[_c] = {});
|
92
|
-
const cacheEntry = db.data.decisions[searchee.name][
|
106
|
+
const cacheEntry = db.data.decisions[searchee.name][guid];
|
93
107
|
let assessment;
|
94
|
-
if (cacheEntry
|
95
|
-
|
96
|
-
assessment =
|
97
|
-
logReason(
|
108
|
+
if (!(cacheEntry === null || cacheEntry === void 0 ? void 0 : cacheEntry.decision) ||
|
109
|
+
cacheEntry.decision === Decision.DOWNLOAD_FAILED) {
|
110
|
+
assessment = await assessAndSaveResults(result, searchee, guid, infoHashesToExclude);
|
111
|
+
logReason(assessment.decision, false);
|
98
112
|
}
|
99
|
-
else if (cacheEntry
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
assessment.decision;
|
106
|
-
}
|
107
|
-
else {
|
108
|
-
assessment = {
|
109
|
-
decision: cacheEntry.decision,
|
110
|
-
info: await getCachedTorrentFile(cacheEntry.infoHash),
|
111
|
-
};
|
112
|
-
}
|
113
|
+
else if (cacheEntry.decision === Decision.MATCH &&
|
114
|
+
infoHashesToExclude.includes(cacheEntry.infoHash)) {
|
115
|
+
// has been added since the last run
|
116
|
+
assessment = { decision: Decision.INFO_HASH_ALREADY_EXISTS };
|
117
|
+
db.data.decisions[searchee.name][guid].decision =
|
118
|
+
Decision.INFO_HASH_ALREADY_EXISTS;
|
113
119
|
}
|
114
|
-
else
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
decision:
|
119
|
-
|
120
|
-
firstSeen: Date.now(),
|
120
|
+
else if (cacheEntry.decision === Decision.MATCH &&
|
121
|
+
existsInTorrentCache(cacheEntry.infoHash)) {
|
122
|
+
// cached match
|
123
|
+
assessment = {
|
124
|
+
decision: cacheEntry.decision,
|
125
|
+
info: await getCachedTorrentFile(cacheEntry.infoHash),
|
121
126
|
};
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
cacheTorrentFile(assessment.info);
|
126
|
-
}
|
127
|
+
}
|
128
|
+
else if (cacheEntry.decision === Decision.MATCH) {
|
129
|
+
assessment = await assessAndSaveResults(result, searchee, guid, infoHashesToExclude);
|
127
130
|
logReason(assessment.decision, false);
|
128
131
|
}
|
129
|
-
|
132
|
+
else {
|
133
|
+
// cached rejection
|
134
|
+
assessment = { decision: cacheEntry.decision };
|
135
|
+
logReason(cacheEntry.decision, true);
|
136
|
+
}
|
137
|
+
db.data.decisions[searchee.name][guid].lastSeen = Date.now();
|
130
138
|
db.write();
|
131
139
|
return assessment;
|
132
140
|
}
|
package/dist/decide.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"decide.js","sourceRoot":"","sources":["../src/decide.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AAC/C,OAAO,YAA0B,MAAM,eAAe,CAAC;AACvD,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAChE,OAAO,EAAqB,MAAM,SAAS,CAAC;AAE5C,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;
|
1
|
+
{"version":3,"file":"decide.js","sourceRoot":"","sources":["../src/decide.ts"],"names":[],"mappings":"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"}
|
package/dist/jackett.js
CHANGED
@@ -1,45 +1,41 @@
|
|
1
1
|
import querystring from "querystring";
|
2
2
|
import get from "simple-get";
|
3
|
-
import { EP_REGEX, MOVIE_REGEX, SEASON_REGEX } from "./constants.js";
|
4
3
|
import { CrossSeedError } from "./errors.js";
|
5
4
|
import { Label, logger } from "./logger.js";
|
6
5
|
import { EmptyNonceOptions, getRuntimeConfig, } from "./runtimeConfig.js";
|
7
|
-
|
8
|
-
const seasonMatch = name.match(SEASON_REGEX);
|
9
|
-
const movieMatch = name.match(MOVIE_REGEX);
|
10
|
-
const episodeMatch = name.match(EP_REGEX);
|
11
|
-
const fullMatch = episodeMatch
|
12
|
-
? episodeMatch[0]
|
13
|
-
: seasonMatch
|
14
|
-
? seasonMatch[0]
|
15
|
-
: movieMatch
|
16
|
-
? movieMatch[0]
|
17
|
-
: name;
|
18
|
-
return fullMatch
|
19
|
-
.replace(/[.()[\]]/g, " ")
|
20
|
-
.replace(/\s+/g, " ")
|
21
|
-
.trim();
|
22
|
-
}
|
6
|
+
import { reformatTitleForSearching } from "./utils.js";
|
23
7
|
function fullJackettUrl(jackettServerUrl, params) {
|
24
8
|
const jackettPath = `/api/v2.0/indexers/all/results`;
|
25
9
|
return `${jackettServerUrl}${jackettPath}?${querystring.encode(params)}`;
|
26
10
|
}
|
27
11
|
export async function validateJackettApi() {
|
28
|
-
const { jackettServerUrl, jackettApiKey: apikey } = getRuntimeConfig();
|
12
|
+
const { jackettServerUrl, jackettApiKey: apikey, torznab, } = getRuntimeConfig();
|
13
|
+
if (torznab)
|
14
|
+
return;
|
15
|
+
logger.warn("Jackett-only mode is deprecated and will be removed in a future release. Please specify your trackers using Torznab urls.");
|
29
16
|
if (/\/$/.test(jackettServerUrl)) {
|
30
|
-
logger.warn("
|
17
|
+
logger.warn("Jackett server url should not end with '/'");
|
31
18
|
}
|
32
19
|
// search for gibberish so the results will be empty
|
33
20
|
const gibberish = "bscdjpstabgdspjdasmomdsenqciadsnocdpsikncaodsnimcdqsanc";
|
34
21
|
try {
|
35
|
-
await
|
22
|
+
await searchJackett(gibberish);
|
36
23
|
}
|
37
24
|
catch (e) {
|
38
25
|
const dummyUrl = fullJackettUrl(jackettServerUrl, { apikey });
|
39
26
|
throw new CrossSeedError(`Could not reach Jackett at ${dummyUrl}`);
|
40
27
|
}
|
41
28
|
}
|
42
|
-
|
29
|
+
function parseResponse(response) {
|
30
|
+
return response.Results.map((result) => ({
|
31
|
+
guid: result.Guid,
|
32
|
+
link: result.Link,
|
33
|
+
size: result.Size,
|
34
|
+
title: result.Title,
|
35
|
+
tracker: result.TrackerId,
|
36
|
+
}));
|
37
|
+
}
|
38
|
+
export function searchJackett(name, nonceOptions = EmptyNonceOptions) {
|
43
39
|
const { jackettApiKey, trackers: runtimeConfigTrackers, jackettServerUrl, } = getRuntimeConfig();
|
44
40
|
const { trackers = runtimeConfigTrackers } = nonceOptions;
|
45
41
|
const params = {
|
@@ -63,6 +59,6 @@ export function makeJackettRequest(name, nonceOptions = EmptyNonceOptions) {
|
|
63
59
|
else
|
64
60
|
resolve(data);
|
65
61
|
});
|
66
|
-
});
|
62
|
+
}).then(parseResponse);
|
67
63
|
}
|
68
64
|
//# sourceMappingURL=jackett.js.map
|
package/dist/jackett.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"jackett.js","sourceRoot":"","sources":["../src/jackett.ts"],"names":[],"mappings":"AAAA,OAAO,WAAW,MAAM,aAAa,CAAC;AACtC,OAAO,GAAG,MAAM,YAAY,CAAC;AAC7B,OAAO,EAAE,
|
1
|
+
{"version":3,"file":"jackett.js","sourceRoot":"","sources":["../src/jackett.ts"],"names":[],"mappings":"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"}
|
package/dist/logger.js
CHANGED
@@ -11,6 +11,7 @@ export var Label;
|
|
11
11
|
Label["PREFILTER"] = "prefilter";
|
12
12
|
Label["CONFIGDUMP"] = "configdump";
|
13
13
|
Label["JACKETT"] = "jackett";
|
14
|
+
Label["TORZNAB"] = "torznab";
|
14
15
|
Label["SERVER"] = "server";
|
15
16
|
Label["STARTUP"] = "startup";
|
16
17
|
})(Label = Label || (Label = {}));
|
@@ -36,6 +37,7 @@ function redactUrlPassword(message, urlStr) {
|
|
36
37
|
function redactMessage(message) {
|
37
38
|
const runtimeConfig = getRuntimeConfig();
|
38
39
|
message = message.split(runtimeConfig.jackettApiKey).join(redactionMsg);
|
40
|
+
message = message.replace(/apikey=[a-zA-Z0-9]+/g, `apikey=${redactionMsg}`);
|
39
41
|
for (const [key, urlStr] of Object.entries(runtimeConfig)) {
|
40
42
|
if (key.endsWith("Url") && urlStr) {
|
41
43
|
message = redactUrlPassword(message, urlStr);
|
package/dist/logger.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,eAAe,MAAM,2BAA2B,CAAC;AAExD,MAAM,CAAN,IAAY,
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"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"}
|
package/dist/pipeline.js
CHANGED
@@ -4,30 +4,67 @@ import { getClient } from "./clients/TorrentClient.js";
|
|
4
4
|
import { Action, Decision, InjectionResult } from "./constants.js";
|
5
5
|
import db from "./db.js";
|
6
6
|
import { assessResult } from "./decide.js";
|
7
|
-
import {
|
7
|
+
import { searchJackett } from "./jackett.js";
|
8
8
|
import { logger } from "./logger.js";
|
9
9
|
import { filterByContent, filterDupes, filterTimestamps } from "./preFilter.js";
|
10
10
|
import { pushNotifier } from "./pushNotifier.js";
|
11
11
|
import { EmptyNonceOptions, getRuntimeConfig, } from "./runtimeConfig.js";
|
12
12
|
import { getInfoHashesToExclude, getTorrentByCriteria, loadTorrentDirLight, saveTorrentFile, } from "./torrent.js";
|
13
|
+
import { searchTorznab } from "./torznab.js";
|
13
14
|
import { getTag, stripExtension } from "./utils.js";
|
14
|
-
async function
|
15
|
+
async function performAction(meta, searchee, tracker, nonceOptions, tag) {
|
15
16
|
const { action } = getRuntimeConfig();
|
17
|
+
let isTorrentIncomplete;
|
18
|
+
const styledName = chalk.green.bold(meta.name);
|
19
|
+
const styledTracker = chalk.bold(tracker);
|
20
|
+
if (action === Action.INJECT) {
|
21
|
+
const result = await getClient().inject(meta, searchee, nonceOptions);
|
22
|
+
switch (result) {
|
23
|
+
case InjectionResult.SUCCESS:
|
24
|
+
logger.info(`Found ${styledName} on ${styledTracker} - injected`);
|
25
|
+
break;
|
26
|
+
case InjectionResult.ALREADY_EXISTS:
|
27
|
+
logger.info(`Found ${styledName} on ${styledTracker} - exists`);
|
28
|
+
break;
|
29
|
+
case InjectionResult.TORRENT_NOT_COMPLETE:
|
30
|
+
logger.warn(`Found ${styledName} on ${styledTracker} - skipping incomplete torrent`);
|
31
|
+
isTorrentIncomplete = true;
|
32
|
+
break;
|
33
|
+
case InjectionResult.FAILURE:
|
34
|
+
default:
|
35
|
+
logger.error(`Found ${styledName} on ${styledTracker} - failed to inject, saving instead`);
|
36
|
+
saveTorrentFile(tracker, tag, meta, nonceOptions);
|
37
|
+
break;
|
38
|
+
}
|
39
|
+
}
|
40
|
+
else {
|
41
|
+
saveTorrentFile(tracker, tag, meta, nonceOptions);
|
42
|
+
logger.info(`Found ${styledName} on ${styledTracker}`);
|
43
|
+
}
|
44
|
+
return { isTorrentIncomplete };
|
45
|
+
}
|
46
|
+
async function searchJackettOrTorznab(name, nonceOptions) {
|
47
|
+
const { torznab } = getRuntimeConfig();
|
48
|
+
return torznab
|
49
|
+
? searchTorznab(name, nonceOptions)
|
50
|
+
: searchJackett(name, nonceOptions);
|
51
|
+
}
|
52
|
+
async function findOnOtherSites(searchee, hashesToExclude, nonceOptions = EmptyNonceOptions) {
|
16
53
|
const assessEach = async (result) => ({
|
17
54
|
assessment: await assessResult(result, searchee, hashesToExclude),
|
18
|
-
tracker: result.
|
55
|
+
tracker: result.tracker,
|
19
56
|
});
|
20
57
|
const tag = getTag(searchee.name);
|
21
58
|
const query = stripExtension(searchee.name);
|
22
59
|
let response;
|
23
60
|
try {
|
24
|
-
response = await
|
61
|
+
response = await searchJackettOrTorznab(query, nonceOptions);
|
25
62
|
}
|
26
63
|
catch (e) {
|
27
|
-
logger.error(`error
|
64
|
+
logger.error(`error searching for ${query}`);
|
28
65
|
return 0;
|
29
66
|
}
|
30
|
-
const results = response
|
67
|
+
const results = response;
|
31
68
|
const loaded = await Promise.all(results.map(assessEach));
|
32
69
|
const successful = loaded.filter((e) => e.assessment.decision === Decision.MATCH);
|
33
70
|
pushNotifier.notify({
|
@@ -42,38 +79,12 @@ async function findOnOtherSites(searchee, hashesToExclude, nonceOptions = EmptyN
|
|
42
79
|
trackers: successful.map((s) => s.tracker),
|
43
80
|
},
|
44
81
|
});
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
if (action === Action.INJECT) {
|
50
|
-
const result = await getClient().inject(newInfo, searchee, nonceOptions);
|
51
|
-
switch (result) {
|
52
|
-
case InjectionResult.SUCCESS:
|
53
|
-
logger.info(`Found ${styledName} on ${styledTracker} - injected`);
|
54
|
-
break;
|
55
|
-
case InjectionResult.ALREADY_EXISTS:
|
56
|
-
logger.info(`Found ${styledName} on ${styledTracker} - exists`);
|
57
|
-
break;
|
58
|
-
case InjectionResult.TORRENT_NOT_COMPLETE:
|
59
|
-
logger.warn(`Found ${styledName} on ${styledTracker} - skipping incomplete torrent`);
|
60
|
-
isTorrentIncomplete = true;
|
61
|
-
break;
|
62
|
-
case InjectionResult.FAILURE:
|
63
|
-
default:
|
64
|
-
logger.error(`Found ${styledName} on ${styledTracker} - failed to inject, saving instead`);
|
65
|
-
saveTorrentFile(tracker, tag, newInfo, nonceOptions);
|
66
|
-
break;
|
67
|
-
}
|
68
|
-
}
|
69
|
-
else {
|
70
|
-
saveTorrentFile(tracker, tag, newInfo, nonceOptions);
|
71
|
-
logger.info(`Found ${styledName} on ${styledTracker}`);
|
72
|
-
}
|
73
|
-
}
|
74
|
-
if (!isTorrentIncomplete) {
|
75
|
-
updateSearchTimestamps(searchee.name);
|
82
|
+
for (const { tracker, assessment: { info: meta }, } of successful) {
|
83
|
+
const { isTorrentIncomplete } = await performAction(meta, searchee, tracker, nonceOptions, tag);
|
84
|
+
if (isTorrentIncomplete)
|
85
|
+
return successful.length;
|
76
86
|
}
|
87
|
+
updateSearchTimestamps(searchee.name);
|
77
88
|
return successful.length;
|
78
89
|
}
|
79
90
|
function updateSearchTimestamps(name) {
|
package/dist/pipeline.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../src/pipeline.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,IAAI,CAAC;
|
1
|
+
{"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../src/pipeline.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AACvD,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACnE,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,YAAY,EAAoB,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAS,MAAM,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAChF,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EACN,iBAAiB,EACjB,gBAAgB,GAEhB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACN,sBAAsB,EACtB,oBAAoB,EACpB,mBAAmB,EACnB,eAAe,GAEf,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAepD,KAAK,UAAU,aAAa,CAC3B,IAAc,EACd,QAAkB,EAClB,OAAe,EACf,YAA0B,EAC1B,GAAW;IAEX,MAAM,EAAE,MAAM,EAAE,GAAG,gBAAgB,EAAE,CAAC;IAEtC,IAAI,mBAAmB,CAAC;IACxB,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/C,MAAM,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC1C,IAAI,MAAM,KAAK,MAAM,CAAC,MAAM,EAAE;QAC7B,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC;QACtE,QAAQ,MAAM,EAAE;YACf,KAAK,eAAe,CAAC,OAAO;gBAC3B,MAAM,CAAC,IAAI,CACV,SAAS,UAAU,OAAO,aAAa,aAAa,CACpD,CAAC;gBACF,MAAM;YACP,KAAK,eAAe,CAAC,cAAc;gBAClC,MAAM,CAAC,IAAI,CAAC,SAAS,UAAU,OAAO,aAAa,WAAW,CAAC,CAAC;gBAChE,MAAM;YACP,KAAK,eAAe,CAAC,oBAAoB;gBACxC,MAAM,CAAC,IAAI,CACV,SAAS,UAAU,OAAO,aAAa,gCAAgC,CACvE,CAAC;gBACF,mBAAmB,GAAG,IAAI,CAAC;gBAC3B,MAAM;YACP,KAAK,eAAe,CAAC,OAAO,CAAC;YAC7B;gBACC,MAAM,CAAC,KAAK,CACX,SAAS,UAAU,OAAO,aAAa,qCAAqC,CAC5E,CAAC;gBACF,eAAe,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;gBAClD,MAAM;SACP;KACD;SAAM;QACN,eAAe,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;QAClD,MAAM,CAAC,IAAI,CAAC,SAAS,UAAU,OAAO,aAAa,EAAE,CAAC,CAAC;KACvD;IACD,OAAO,EAAE,mBAAmB,EAAE,CAAC;AAChC,CAAC;AAED,KAAK,UAAU,sBAAsB,CACpC,IAAY,EACZ,YAA0B;IAE1B,MAAM,EAAE,OAAO,EAAE,GAAG,gBAAgB,EAAE,CAAC;IACvC,OAAO,OAAO;QACb,CAAC,CAAC,aAAa,CAAC,IAAI,EAAE,YAAY,CAAC;QACnC,CAAC,CAAC,aAAa,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;AACtC,CAAC;AAED,KAAK,UAAU,gBAAgB,CAC9B,QAAkB,EAClB,eAAyB,EACzB,eAA6B,iBAAiB;IAE9C,MAAM,UAAU,GAAG,KAAK,EACvB,MAAoB,EACa,EAAE,CAAC,CAAC;QACrC,UAAU,EAAE,MAAM,YAAY,CAAC,MAAM,EAAE,QAAQ,EAAE,eAAe,CAAC;QACjE,OAAO,EAAE,MAAM,CAAC,OAAO;KACvB,CAAC,CAAC;IAEH,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAClC,MAAM,KAAK,GAAG,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC5C,IAAI,QAAwB,CAAC;IAC7B,IAAI;QACH,QAAQ,GAAG,MAAM,sBAAsB,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;KAC7D;IAAC,OAAO,CAAC,EAAE;QACX,MAAM,CAAC,KAAK,CAAC,uBAAuB,KAAK,EAAE,CAAC,CAAC;QAC7C,OAAO,CAAC,CAAC;KACT;IACD,MAAM,OAAO,GAAG,QAAQ,CAAC;IAEzB,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,CAC/B,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CACvB,CAAC;IACF,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAC/B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,KAAK,QAAQ,CAAC,KAAK,CAC/C,CAAC;IAEF,YAAY,CAAC,MAAM,CAAC;QACnB,IAAI,EAAE,SAAS,QAAQ,CAAC,IAAI,OAAO,UAAU,CAAC,MAAM,YACnD,UAAU,CAAC,MAAM;YACjB,wDAAwD;YACxD,KAAK,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;gBAC9B,KAAK,EAAE,MAAM;gBACb,IAAI,EAAE,aAAa;aACnB,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAC5C,EAAE;QACF,KAAK,EAAE;YACN,UAAU,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC;YAC7D,QAAQ,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;SAC1C;KACD,CAAC,CAAC;IAEH,KAAK,MAAM,EACV,OAAO,EACP,UAAU,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,GAC1B,IAAI,UAAU,EAAE;QAChB,MAAM,EAAE,mBAAmB,EAAE,GAAG,MAAM,aAAa,CAClD,IAAI,EACJ,QAAQ,EACR,OAAO,EACP,YAAY,EACZ,GAAG,CACH,CAAC;QACF,IAAI,mBAAmB;YAAE,OAAO,UAAU,CAAC,MAAM,CAAC;KAClD;IAED,sBAAsB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACtC,OAAO,UAAU,CAAC,MAAM,CAAC;AAC1B,CAAC;AAED,SAAS,sBAAsB,CAAC,IAAY;IAC3C,IAAI,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;QAC5B,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;KAClD;SAAM;QACN,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG;YACzB,aAAa,EAAE,IAAI,CAAC,GAAG,EAAE;YACzB,YAAY,EAAE,IAAI,CAAC,GAAG,EAAE;SACxB,CAAC;KACF;IACD,EAAE,CAAC,KAAK,EAAE,CAAC;AACZ,CAAC;AAED,KAAK,UAAU,gBAAgB,CAC9B,OAAmB,EACnB,eAAyB;IAEzB,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,gBAAgB,EAAE,CAAC;IAE7C,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,KAAK,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,EAAE;QAC5C,MAAM,KAAK,GAAG,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC;QAE9D,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAC1B,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,IAAI,OAAO,CAAC,MAAM,GAAG,MAAM,GAAG,CAChD,CAAC;QACF,MAAM,IAAI,GAAG,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACzC,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,EAAE,KAAK,CAAC,GAAG,CAAC,eAAe,CAAC,EAAE,IAAI,CAAC,CAAC;QAEpE,MAAM,eAAe,GAAG,gBAAgB,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;QAClE,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC,CAAC;QAC/D,UAAU,IAAI,QAAQ,CAAC;KACvB;IACD,OAAO,UAAU,CAAC;AACnB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,+BAA+B,CACpD,QAAwB,EACxB,YAA0B;IAE1B,MAAM,IAAI,GAAG,MAAM,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IAClD,MAAM,eAAe,GAAG,sBAAsB,EAAE,CAAC;IACjD,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACxC,OAAO,gBAAgB,CAAC,IAAI,EAAE,eAAe,EAAE,YAAY,CAAC,CAAC;AAC9D,CAAC;AAED,KAAK,UAAU,sBAAsB;IACpC,MAAM,EAAE,MAAM,EAAE,GAAG,gBAAgB,EAAE,CAAC;IACtC,MAAM,cAAc,GAAe,MAAM,mBAAmB,EAAE,CAAC;IAC/D,MAAM,eAAe,GAAG,cAAc;SACpC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;SACtB,MAAM,CAAC,OAAO,CAAC,CAAC;IAClB,MAAM,gBAAgB,GAAG,WAAW,CAAC,cAAc,CAAC;SAClD,MAAM,CAAC,eAAe,CAAC;SACvB,MAAM,CAAC,gBAAgB,CAAC,CAAC;IAC3B,MAAM,OAAO,GAAG,gBAAgB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAE/C,MAAM,CAAC,IAAI,CACV,sDAAsD,EACtD,cAAc,CAAC,MAAM,EACrB,gBAAgB,CAAC,MAAM,CACvB,CAAC;IAEF,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC;AACrC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,IAAI;IACzB,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,gBAAgB,EAAE,CAAC;IACjD,MAAM,EAAE,OAAO,EAAE,eAAe,EAAE,GAAG,MAAM,sBAAsB,EAAE,CAAC;IAEpE,IAAI,MAAM,GAAG,CAAC;QAAE,MAAM,CAAC,IAAI,CAAC,sBAAsB,MAAM,EAAE,CAAC,CAAC;IAE5D,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7C,MAAM,UAAU,GAAG,MAAM,gBAAgB,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;IAEpE,MAAM,CAAC,IAAI,CACV,KAAK,CAAC,IAAI,CAAC,sDAAsD,CAAC,EAClE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,EAC5B,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAChC,CAAC;AACH,CAAC"}
|
package/dist/runtimeConfig.js
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"runtimeConfig.js","sourceRoot":"","sources":["../src/runtimeConfig.ts"],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"runtimeConfig.js","sourceRoot":"","sources":["../src/runtimeConfig.ts"],"names":[],"mappings":"AA4BA,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAChC,QAAQ,EAAE,SAAS;IACnB,OAAO,EAAE,SAAS;IAClB,SAAS,EAAE,SAAS;CACpB,CAAC;AAEF,IAAI,aAA4B,CAAC;AAEjC,MAAM,UAAU,gBAAgB,CAAC,SAAwB;IACxD,aAAa,GAAG,SAAS,CAAC;AAC3B,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC/B,OAAO,aAAa,CAAC;AACtB,CAAC"}
|
package/dist/startup.js
CHANGED
@@ -4,6 +4,7 @@ import { validateJackettApi } from "./jackett.js";
|
|
4
4
|
import { logger } from "./logger.js";
|
5
5
|
import { getRuntimeConfig } from "./runtimeConfig.js";
|
6
6
|
import { validateTorrentDir } from "./torrent.js";
|
7
|
+
import { validateTorznabUrls } from "./torznab.js";
|
7
8
|
function validateOptions() {
|
8
9
|
const { action, rtorrentRpcUrl, qbittorrentUrl } = getRuntimeConfig();
|
9
10
|
if (action === "inject" && !(rtorrentRpcUrl || qbittorrentUrl)) {
|
@@ -16,6 +17,7 @@ export async function doStartupValidation() {
|
|
16
17
|
const downloadClient = getClient();
|
17
18
|
await Promise.all([
|
18
19
|
validateJackettApi(),
|
20
|
+
validateTorznabUrls(),
|
19
21
|
downloadClient === null || downloadClient === void 0 ? void 0 : downloadClient.validateConfig(),
|
20
22
|
validateTorrentDir(),
|
21
23
|
].filter(Boolean));
|
package/dist/startup.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"startup.js","sourceRoot":"","sources":["../src/startup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;
|
1
|
+
{"version":3,"file":"startup.js","sourceRoot":"","sources":["../src/startup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAEnD,SAAS,eAAe;IACvB,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,cAAc,EAAE,GAAG,gBAAgB,EAAE,CAAC;IACtE,IAAI,MAAM,KAAK,QAAQ,IAAI,CAAC,CAAC,cAAc,IAAI,cAAc,CAAC,EAAE;QAC/D,MAAM,IAAI,cAAc,CACvB,qFAAqF,CACrF,CAAC;KACF;AACF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB;IACxC,MAAM,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;IAChD,eAAe,EAAE,CAAC;IAClB,MAAM,cAAc,GAAG,SAAS,EAAE,CAAC;IACnC,MAAM,OAAO,CAAC,GAAG,CAChB;QACC,kBAAkB,EAAE;QACpB,mBAAmB,EAAE;QACrB,cAAc,aAAd,cAAc,uBAAd,cAAc,CAAE,cAAc,EAAE;QAChC,kBAAkB,EAAE;KACpB,CAAC,MAAM,CAAC,OAAO,CAAC,CACjB,CAAC;IACF,MAAM,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;AAC7C,CAAC"}
|
package/dist/torznab.js
ADDED
@@ -0,0 +1,94 @@
|
|
1
|
+
import { zip } from "lodash-es";
|
2
|
+
import fetch from "node-fetch";
|
3
|
+
import xml2js from "xml2js";
|
4
|
+
import { CrossSeedError } from "./errors.js";
|
5
|
+
import { Label, logger } from "./logger.js";
|
6
|
+
import { getRuntimeConfig } from "./runtimeConfig.js";
|
7
|
+
import { reformatTitleForSearching } from "./utils.js";
|
8
|
+
export function assembleUrl(srcUrl, params) {
|
9
|
+
const url = new URL(srcUrl);
|
10
|
+
const apikey = url.searchParams.get("apikey");
|
11
|
+
const searchParams = new URLSearchParams();
|
12
|
+
searchParams.set("apikey", apikey);
|
13
|
+
for (const [key, value] of Object.entries(params)) {
|
14
|
+
if (value != null)
|
15
|
+
searchParams.set(key, value);
|
16
|
+
}
|
17
|
+
url.search = searchParams.toString();
|
18
|
+
return url.toString();
|
19
|
+
}
|
20
|
+
export async function validateTorznabUrls() {
|
21
|
+
const { torznab } = getRuntimeConfig();
|
22
|
+
if (!torznab)
|
23
|
+
return;
|
24
|
+
const urls = torznab.map((str) => new URL(str));
|
25
|
+
for (const url of urls) {
|
26
|
+
if (!url.pathname.endsWith("/api")) {
|
27
|
+
throw new CrossSeedError(`Torznab url ${url} must have a path ending in /api`);
|
28
|
+
}
|
29
|
+
if (!url.searchParams.has("apikey")) {
|
30
|
+
throw new CrossSeedError(`Torznab url ${url} does not specify an apikey`);
|
31
|
+
}
|
32
|
+
}
|
33
|
+
const responses = await Promise.allSettled(urls.map((url) => fetchCaps(url)));
|
34
|
+
const zipped = zip(urls, responses);
|
35
|
+
const unsupported = zipped.filter(([, response]) => {
|
36
|
+
var _a, _b, _c, _d, _e, _f, _g;
|
37
|
+
return ((_g = (_f = (_e = (_d = (_c = (_b = (_a = response.value) === null || _a === void 0 ? void 0 : _a.caps) === null || _b === void 0 ? void 0 : _b.searching) === null || _c === void 0 ? void 0 : _c[0]) === null || _d === void 0 ? void 0 : _d.search) === null || _e === void 0 ? void 0 : _e[0]) === null || _f === void 0 ? void 0 : _f.$) === null || _g === void 0 ? void 0 : _g.available) !==
|
38
|
+
"yes";
|
39
|
+
});
|
40
|
+
unsupported
|
41
|
+
.map(([url]) => `${url} is either down or doesn't support searching`)
|
42
|
+
.forEach(logger.warn);
|
43
|
+
if (unsupported.length > 0 && unsupported.length === responses.length) {
|
44
|
+
throw new CrossSeedError("no working indexers available");
|
45
|
+
}
|
46
|
+
}
|
47
|
+
export async function fetchCaps(url) {
|
48
|
+
return fetch(assembleUrl(url, { t: "caps" }))
|
49
|
+
.then((r) => r.text())
|
50
|
+
.then(xml2js.parseStringPromise);
|
51
|
+
}
|
52
|
+
async function parse(text) {
|
53
|
+
var _a, _b, _c;
|
54
|
+
const jsified = await xml2js.parseStringPromise(text);
|
55
|
+
const items = (_c = (_b = (_a = jsified === null || jsified === void 0 ? void 0 : jsified.rss) === null || _a === void 0 ? void 0 : _a.channel) === null || _b === void 0 ? void 0 : _b[0]) === null || _c === void 0 ? void 0 : _c.item;
|
56
|
+
if (!items || !Array.isArray(items)) {
|
57
|
+
return [];
|
58
|
+
}
|
59
|
+
return items.map((item) => {
|
60
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j;
|
61
|
+
return ({
|
62
|
+
guid: item.guid[0],
|
63
|
+
title: item.title[0],
|
64
|
+
tracker: (_j = (_f = (_c = (_b = (_a = item === null || item === void 0 ? void 0 : item.prowlarrindexer) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b._) !== null && _c !== void 0 ? _c : (_e = (_d = item === null || item === void 0 ? void 0 : item.jackettindexer) === null || _d === void 0 ? void 0 : _d[0]) === null || _e === void 0 ? void 0 : _e._) !== null && _f !== void 0 ? _f : (_h = (_g = item === null || item === void 0 ? void 0 : item.indexer) === null || _g === void 0 ? void 0 : _g[0]) === null || _h === void 0 ? void 0 : _h._) !== null && _j !== void 0 ? _j : "Unknown tracker",
|
65
|
+
link: item.link[0],
|
66
|
+
size: Number(item.size[0]),
|
67
|
+
});
|
68
|
+
});
|
69
|
+
}
|
70
|
+
function isFulfilled(outcome) {
|
71
|
+
return outcome.status === "fulfilled";
|
72
|
+
}
|
73
|
+
export async function searchTorznab(name, nonceOptions) {
|
74
|
+
const { torznab } = getRuntimeConfig();
|
75
|
+
const searchUrls = torznab.map((url) => assembleUrl(url, {
|
76
|
+
t: "search",
|
77
|
+
q: encodeURIComponent(reformatTitleForSearching(name))
|
78
|
+
.split("%20")
|
79
|
+
.join(" "),
|
80
|
+
}));
|
81
|
+
searchUrls.forEach((message) => void logger.verbose({ label: Label.TORZNAB, message }));
|
82
|
+
const outcomes = await Promise.allSettled(searchUrls.map((url) => fetch(url)
|
83
|
+
.then((r) => r.text())
|
84
|
+
.then(parse)));
|
85
|
+
const rejected = zip(torznab, outcomes).filter(([, outcome]) => outcome.status === "rejected");
|
86
|
+
rejected
|
87
|
+
.map(([url, outcome]) => `Failed searching ${url} for ${name} with reason: ${outcome.reason}`)
|
88
|
+
.forEach(logger.warn);
|
89
|
+
const fulfilled = outcomes
|
90
|
+
.filter(isFulfilled)
|
91
|
+
.map((outcome) => outcome.value);
|
92
|
+
return [].concat(...fulfilled);
|
93
|
+
}
|
94
|
+
//# sourceMappingURL=torznab.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"torznab.js","sourceRoot":"","sources":["../src/torznab.ts"],"names":[],"mappings":"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"}
|
package/dist/utils.js
CHANGED
@@ -25,4 +25,15 @@ export function getTag(name) {
|
|
25
25
|
: "unknown";
|
26
26
|
}
|
27
27
|
export const ok = (r) => !(r instanceof Error);
|
28
|
+
export function reformatTitleForSearching(name) {
|
29
|
+
var _a, _b, _c;
|
30
|
+
const seasonMatch = name.match(SEASON_REGEX);
|
31
|
+
const movieMatch = name.match(MOVIE_REGEX);
|
32
|
+
const episodeMatch = name.match(EP_REGEX);
|
33
|
+
const fullMatch = (_c = (_b = (_a = episodeMatch === null || episodeMatch === void 0 ? void 0 : episodeMatch[0]) !== null && _a !== void 0 ? _a : seasonMatch === null || seasonMatch === void 0 ? void 0 : seasonMatch[0]) !== null && _b !== void 0 ? _b : movieMatch === null || movieMatch === void 0 ? void 0 : movieMatch[0]) !== null && _c !== void 0 ? _c : name;
|
34
|
+
return fullMatch
|
35
|
+
.replace(/[.()[\]]/g, " ")
|
36
|
+
.replace(/\s+/g, " ")
|
37
|
+
.trim();
|
38
|
+
}
|
28
39
|
//# sourceMappingURL=utils.js.map
|
package/dist/utils.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,QAAQ,EACR,UAAU,EACV,WAAW,EACX,YAAY,GACZ,MAAM,gBAAgB,CAAC;AAExB,MAAM,UAAU,cAAc,CAAC,QAAgB;IAC9C,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE;QAC7B,MAAM,EAAE,GAAG,IAAI,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC;QACpC,IAAI,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC;YAAE,OAAO,QAAQ,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;KACvD;IACD,OAAO,QAAQ,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,CAAS;IACpC,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;IACxB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC,CAAC;IACvC,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;AACvB,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,CAAS;IAC7B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;AACzD,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,IAAY;IAClC,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;QACzB,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;YACzB,CAAC,CAAC,MAAM;YACR,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;gBACxB,CAAC,CAAC,OAAO;gBACT,CAAC,CAAC,SAAS,CAAC;AACd,CAAC;AAID,MAAM,CAAC,MAAM,EAAE,GAAG,CAAI,CAAY,EAAU,EAAE,CAAC,CAAC,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC"}
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,QAAQ,EACR,UAAU,EACV,WAAW,EACX,YAAY,GACZ,MAAM,gBAAgB,CAAC;AAExB,MAAM,UAAU,cAAc,CAAC,QAAgB;IAC9C,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE;QAC7B,MAAM,EAAE,GAAG,IAAI,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC;QACpC,IAAI,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC;YAAE,OAAO,QAAQ,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;KACvD;IACD,OAAO,QAAQ,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,CAAS;IACpC,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;IACxB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC,CAAC;IACvC,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;AACvB,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,CAAS;IAC7B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;AACzD,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,IAAY;IAClC,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;QACzB,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;YACzB,CAAC,CAAC,MAAM;YACR,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;gBACxB,CAAC,CAAC,OAAO;gBACT,CAAC,CAAC,SAAS,CAAC;AACd,CAAC;AAID,MAAM,CAAC,MAAM,EAAE,GAAG,CAAI,CAAY,EAAU,EAAE,CAAC,CAAC,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC;AAErE,MAAM,UAAU,yBAAyB,CAAC,IAAY;;IACrD,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IAC7C,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IAC3C,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC1C,MAAM,SAAS,GACd,MAAA,MAAA,MAAA,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAG,CAAC,CAAC,mCAAI,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAG,CAAC,CAAC,mCAAI,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAG,CAAC,CAAC,mCAAI,IAAI,CAAC;IAClE,OAAO,SAAS;SACd,OAAO,CAAC,WAAW,EAAE,GAAG,CAAC;SACzB,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;SACpB,IAAI,EAAE,CAAC;AACV,CAAC"}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "cross-seed",
|
3
|
-
"version": "3.0
|
3
|
+
"version": "3.1.0",
|
4
4
|
"description": "Query Jackett for cross-seedable torrents",
|
5
5
|
"scripts": {
|
6
6
|
"test": "true",
|
@@ -36,11 +36,13 @@
|
|
36
36
|
"simple-get": "^4.0.0",
|
37
37
|
"winston": "^3.3.3",
|
38
38
|
"winston-daily-rotate-file": "^4.5.5",
|
39
|
+
"xml2js": "^0.4.23",
|
39
40
|
"xmlrpc": "^1.3.2"
|
40
41
|
},
|
41
42
|
"devDependencies": {
|
42
43
|
"@types/bencode": "^2.0.1",
|
43
44
|
"@types/lowdb": "^1.0.9",
|
45
|
+
"@types/xml2js": "^0.4.9",
|
44
46
|
"@types/xmlrpc": "^1.3.6",
|
45
47
|
"@typescript-eslint/eslint-plugin": "^5.8.1",
|
46
48
|
"@typescript-eslint/parser": "^5.8.1",
|