cross-seed 3.0.4 → 3.3.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 +11 -10
- package/dist/cmd.js +6 -6
- 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.map +1 -1
- package/dist/constants.js +0 -6
- package/dist/constants.js.map +1 -1
- package/dist/decide.js +11 -11
- 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 +3 -0
- package/dist/startup.js.map +1 -1
- package/dist/torznab.js +159 -0
- package/dist/torznab.js.map +1 -0
- package/dist/utils.js +25 -4
- 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,12 +53,14 @@ 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)
|
63
|
+
-e, --include-episodes Include single-episode torrents in the search (default: false)
|
62
64
|
--fuzzy-size-threshold <decimal> The size difference allowed to be considered a match. (default: 0.02)
|
63
65
|
-v, --verbose Log verbose output (default: false)
|
64
66
|
-A, --action <action> If set to 'inject', cross-seed will attempt to add the found torrents to your torrent client. (choices: "save", "inject", default: "save")
|
@@ -66,7 +68,6 @@ Options:
|
|
66
68
|
--qbittorrent-url <url> The url of your qBittorrent webui. Requires '-A inject'. See the docs for more information.
|
67
69
|
-o, --offset <offset> Offset to start from
|
68
70
|
-d, --delay <delay> Pause duration (seconds) between searches (default: 10)
|
69
|
-
-e, --include-episodes Include single-episode torrents in the search (default: false)
|
70
71
|
-x, --exclude-older <cutoff> Exclude torrents first seen more than x minutes ago. Overrides the -a flag.
|
71
72
|
-r, --exclude-recent-search <cutoff> Exclude torrents which have been searched more recently than x minutes ago. Overrides the -a flag.
|
72
73
|
-h, --help display help for command
|
@@ -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/cmd.js
CHANGED
@@ -37,12 +37,14 @@ 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))
|
47
|
+
.option("-e, --include-episodes", "Include single-episode torrents in the search", fallback(fileConfig.includeEpisodes, false))
|
46
48
|
.requiredOption("--fuzzy-size-threshold <decimal>", "The size difference allowed to be considered a match.", fallback(fileConfig.fuzzySizeThreshold, 0.02))
|
47
49
|
.option("-x, --exclude-older <cutoff>", "Exclude torrents first seen more than n minutes ago. Bypasses the -a flag.", (n) => parseInt(n), fileConfig.excludeOlder)
|
48
50
|
.option("-r, --exclude-recent-search <cutoff>", "Exclude torrents which have been searched more recently than n minutes ago. Bypasses the -a flag.", (n) => parseInt(n), fileConfig.excludeRecentSearch)
|
@@ -74,8 +76,7 @@ program
|
|
74
76
|
.description("Send a test notification")
|
75
77
|
.requiredOption("--notification-webhook-url <url>", "cross-seed will send POST requests to this url with a JSON payload of { title, body }", fileConfig.notificationWebhookUrl)
|
76
78
|
.action((options) => {
|
77
|
-
|
78
|
-
setRuntimeConfig(runtimeConfig);
|
79
|
+
setRuntimeConfig(options);
|
79
80
|
initializeLogger();
|
80
81
|
initializePushNotifier();
|
81
82
|
sendTestNotification();
|
@@ -121,7 +122,6 @@ createCommandWithSharedOptions("daemon", "Start the cross-seed daemon").action(a
|
|
121
122
|
createCommandWithSharedOptions("search", "Search for cross-seeds")
|
122
123
|
.requiredOption("-o, --offset <offset>", "Offset to start from", (n) => parseInt(n), 0)
|
123
124
|
.requiredOption("-d, --delay <delay>", "Pause duration (seconds) between searches", parseFloat, fallback(fileConfig.delay, 10))
|
124
|
-
.option("-e, --include-episodes", "Include single-episode torrents in the search", fallback(fileConfig.includeEpisodes, false))
|
125
125
|
.action(async (options) => {
|
126
126
|
try {
|
127
127
|
const runtimeConfig = processOptions(options);
|
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"}
|
@@ -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;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;
|
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
@@ -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)) {
|
@@ -100,21 +100,21 @@ async function assessAndSaveResults(result, searchee, Guid, infoHashesToExclude)
|
|
100
100
|
async function assessResultCaching(result, searchee, infoHashesToExclude) {
|
101
101
|
var _a;
|
102
102
|
var _b, _c;
|
103
|
-
const {
|
104
|
-
const logReason = createReasonLogger(
|
103
|
+
const { guid, title, tracker } = result;
|
104
|
+
const logReason = createReasonLogger(title, tracker, searchee.name);
|
105
105
|
(_a = (_b = db.data.decisions)[_c = searchee.name]) !== null && _a !== void 0 ? _a : (_b[_c] = {});
|
106
|
-
const cacheEntry = db.data.decisions[searchee.name][
|
106
|
+
const cacheEntry = db.data.decisions[searchee.name][guid];
|
107
107
|
let assessment;
|
108
108
|
if (!(cacheEntry === null || cacheEntry === void 0 ? void 0 : cacheEntry.decision) ||
|
109
109
|
cacheEntry.decision === Decision.DOWNLOAD_FAILED) {
|
110
|
-
assessment = await assessAndSaveResults(result, searchee,
|
110
|
+
assessment = await assessAndSaveResults(result, searchee, guid, infoHashesToExclude);
|
111
111
|
logReason(assessment.decision, false);
|
112
112
|
}
|
113
113
|
else if (cacheEntry.decision === Decision.MATCH &&
|
114
114
|
infoHashesToExclude.includes(cacheEntry.infoHash)) {
|
115
115
|
// has been added since the last run
|
116
116
|
assessment = { decision: Decision.INFO_HASH_ALREADY_EXISTS };
|
117
|
-
db.data.decisions[searchee.name][
|
117
|
+
db.data.decisions[searchee.name][guid].decision =
|
118
118
|
Decision.INFO_HASH_ALREADY_EXISTS;
|
119
119
|
}
|
120
120
|
else if (cacheEntry.decision === Decision.MATCH &&
|
@@ -126,7 +126,7 @@ async function assessResultCaching(result, searchee, infoHashesToExclude) {
|
|
126
126
|
};
|
127
127
|
}
|
128
128
|
else if (cacheEntry.decision === Decision.MATCH) {
|
129
|
-
assessment = await assessAndSaveResults(result, searchee,
|
129
|
+
assessment = await assessAndSaveResults(result, searchee, guid, infoHashesToExclude);
|
130
130
|
logReason(assessment.decision, false);
|
131
131
|
}
|
132
132
|
else {
|
@@ -134,7 +134,7 @@ async function assessResultCaching(result, searchee, infoHashesToExclude) {
|
|
134
134
|
assessment = { decision: cacheEntry.decision };
|
135
135
|
logReason(cacheEntry.decision, true);
|
136
136
|
}
|
137
|
-
db.data.decisions[searchee.name][
|
137
|
+
db.data.decisions[searchee.name][guid].lastSeen = Date.now();
|
138
138
|
db.write();
|
139
139
|
return assessment;
|
140
140
|
}
|
package/dist/decide.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"decide.js","sourceRoot":"","sources":["../src/decide.ts"],"names":[],"mappings":"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
|
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 { getTorznabManager } 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
|
+
? getTorznabManager().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":"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"}
|
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 { getTorznabManager } from "./torznab.js";
|
7
8
|
function validateOptions() {
|
8
9
|
const { action, rtorrentRpcUrl, qbittorrentUrl } = getRuntimeConfig();
|
9
10
|
if (action === "inject" && !(rtorrentRpcUrl || qbittorrentUrl)) {
|
@@ -14,8 +15,10 @@ export async function doStartupValidation() {
|
|
14
15
|
logger.info("Validating your configuration...");
|
15
16
|
validateOptions();
|
16
17
|
const downloadClient = getClient();
|
18
|
+
const torznabManager = getTorznabManager();
|
17
19
|
await Promise.all([
|
18
20
|
validateJackettApi(),
|
21
|
+
torznabManager.validateTorznabUrls(),
|
19
22
|
downloadClient === null || downloadClient === void 0 ? void 0 : downloadClient.validateConfig(),
|
20
23
|
validateTorrentDir(),
|
21
24
|
].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,iBAAiB,EAAkB,MAAM,cAAc,CAAC;AAEjE,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,cAAc,GAAG,iBAAiB,EAAE,CAAC;IAC3C,MAAM,OAAO,CAAC,GAAG,CAChB;QACC,kBAAkB,EAAE;QACpB,cAAc,CAAC,mBAAmB,EAAE;QACpC,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,159 @@
|
|
1
|
+
import { zip } from "lodash-es";
|
2
|
+
import fetch from "node-fetch";
|
3
|
+
import xml2js from "xml2js";
|
4
|
+
import { EP_REGEX, SEASON_REGEX } from "./constants.js";
|
5
|
+
import { CrossSeedError } from "./errors.js";
|
6
|
+
import { Label, logger } from "./logger.js";
|
7
|
+
import { getRuntimeConfig } from "./runtimeConfig.js";
|
8
|
+
import { cleanseSeparators, getTag, MediaType, reformatTitleForSearching, } from "./utils.js";
|
9
|
+
let activeTorznabManager;
|
10
|
+
export class TorznabManager {
|
11
|
+
constructor() {
|
12
|
+
this.capsMap = new Map();
|
13
|
+
}
|
14
|
+
/**
|
15
|
+
* Generates a Torznab query URL, given the srcUrl (user config)
|
16
|
+
* and the torznab param configuration.
|
17
|
+
* @param srcUrl
|
18
|
+
* @param params
|
19
|
+
*/
|
20
|
+
assembleUrl(srcUrl, params) {
|
21
|
+
const url = new URL(srcUrl);
|
22
|
+
const apikey = url.searchParams.get("apikey");
|
23
|
+
const searchParams = new URLSearchParams();
|
24
|
+
searchParams.set("apikey", apikey);
|
25
|
+
for (const [key, value] of Object.entries(params)) {
|
26
|
+
if (value != null)
|
27
|
+
searchParams.set(key, value);
|
28
|
+
}
|
29
|
+
url.search = searchParams.toString();
|
30
|
+
return url.toString();
|
31
|
+
}
|
32
|
+
async validateTorznabUrls() {
|
33
|
+
const { torznab } = getRuntimeConfig();
|
34
|
+
if (!torznab)
|
35
|
+
return;
|
36
|
+
const urls = torznab.map((str) => new URL(str));
|
37
|
+
for (const url of urls) {
|
38
|
+
if (!url.pathname.endsWith("/api")) {
|
39
|
+
throw new CrossSeedError(`Torznab url ${url} must have a path ending in /api`);
|
40
|
+
}
|
41
|
+
if (!url.searchParams.has("apikey")) {
|
42
|
+
throw new CrossSeedError(`Torznab url ${url} does not specify an apikey`);
|
43
|
+
}
|
44
|
+
}
|
45
|
+
const outcomes = await Promise.allSettled(urls.map((url) => this.fetchCaps(url)));
|
46
|
+
const zipped = zip(urls, outcomes);
|
47
|
+
// handle promise rejections
|
48
|
+
const rejected = zipped.filter((bundle) => bundle[1].status === "rejected");
|
49
|
+
for (const [url, outcome] of rejected) {
|
50
|
+
logger.warn(`Failed to reach ${url}`);
|
51
|
+
logger.debug(outcome.reason);
|
52
|
+
}
|
53
|
+
const fulfilled = zipped
|
54
|
+
.filter((bundle) => bundle[1].status === "fulfilled")
|
55
|
+
.map(([url, outcome]) => [url, outcome.value]);
|
56
|
+
// handle trackers that can't search
|
57
|
+
const trackersWithoutSearchingCaps = fulfilled.filter(([, caps]) => !caps.search);
|
58
|
+
trackersWithoutSearchingCaps
|
59
|
+
.map(([url]) => `Ignoring indexer that doesn't support searching: ${url}`)
|
60
|
+
.forEach(logger.warn);
|
61
|
+
// store caps of usable trackers
|
62
|
+
const trackersWithSearchingCaps = fulfilled.filter(([, caps]) => caps.search);
|
63
|
+
for (const [url, caps] of trackersWithSearchingCaps) {
|
64
|
+
this.capsMap.set(url, caps);
|
65
|
+
}
|
66
|
+
if (trackersWithSearchingCaps.length === 0) {
|
67
|
+
throw new CrossSeedError("no working indexers available");
|
68
|
+
}
|
69
|
+
}
|
70
|
+
async fetchCaps(url) {
|
71
|
+
return fetch(this.assembleUrl(url, { t: "caps" }))
|
72
|
+
.then((r) => r.text())
|
73
|
+
.then(xml2js.parseStringPromise)
|
74
|
+
.then(this.parseCaps);
|
75
|
+
}
|
76
|
+
parseCaps(xml) {
|
77
|
+
var _a, _b;
|
78
|
+
const capsSection = (_b = (_a = xml === null || xml === void 0 ? void 0 : xml.caps) === null || _a === void 0 ? void 0 : _a.searching) === null || _b === void 0 ? void 0 : _b[0];
|
79
|
+
const isAvailable = (searchTechnique) => { var _a, _b; return ((_b = (_a = searchTechnique === null || searchTechnique === void 0 ? void 0 : searchTechnique[0]) === null || _a === void 0 ? void 0 : _a.$) === null || _b === void 0 ? void 0 : _b.available) === "yes"; };
|
80
|
+
return {
|
81
|
+
search: isAvailable(capsSection === null || capsSection === void 0 ? void 0 : capsSection.search),
|
82
|
+
tvSearch: isAvailable(capsSection === null || capsSection === void 0 ? void 0 : capsSection["tv-search"]),
|
83
|
+
movieSearch: isAvailable(capsSection === null || capsSection === void 0 ? void 0 : capsSection["movie-search"]),
|
84
|
+
};
|
85
|
+
}
|
86
|
+
async parseResults(text) {
|
87
|
+
var _a, _b, _c;
|
88
|
+
const jsified = await xml2js.parseStringPromise(text);
|
89
|
+
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;
|
90
|
+
if (!items || !Array.isArray(items)) {
|
91
|
+
return [];
|
92
|
+
}
|
93
|
+
return items.map((item) => {
|
94
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j;
|
95
|
+
return ({
|
96
|
+
guid: item.guid[0],
|
97
|
+
title: item.title[0],
|
98
|
+
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",
|
99
|
+
link: item.link[0],
|
100
|
+
size: Number(item.size[0]),
|
101
|
+
});
|
102
|
+
});
|
103
|
+
}
|
104
|
+
getBestSearchTechnique(name, caps) {
|
105
|
+
const extractNumber = (str) => parseInt(str.match(/\d+/)[0]);
|
106
|
+
const encode = (str) => encodeURIComponent(str).split("%20").join(" ");
|
107
|
+
const mediaType = getTag(name);
|
108
|
+
if (mediaType === MediaType.EPISODE && caps.tvSearch) {
|
109
|
+
const match = name.match(EP_REGEX);
|
110
|
+
return {
|
111
|
+
t: "tvsearch",
|
112
|
+
q: encode(cleanseSeparators(match.groups.title)),
|
113
|
+
season: extractNumber(match.groups.season),
|
114
|
+
ep: extractNumber(match.groups.episode),
|
115
|
+
};
|
116
|
+
}
|
117
|
+
else if (mediaType === MediaType.SEASON && caps.tvSearch) {
|
118
|
+
const match = name.match(SEASON_REGEX);
|
119
|
+
return {
|
120
|
+
t: "tvsearch",
|
121
|
+
q: encode(cleanseSeparators(match.groups.title)),
|
122
|
+
season: extractNumber(match.groups.season),
|
123
|
+
};
|
124
|
+
}
|
125
|
+
else {
|
126
|
+
return {
|
127
|
+
t: "search",
|
128
|
+
q: encode(reformatTitleForSearching(name)),
|
129
|
+
};
|
130
|
+
}
|
131
|
+
}
|
132
|
+
async searchTorznab(name, nonceOptions) {
|
133
|
+
const searchUrls = Array.from(this.capsMap).map(([url, caps]) => {
|
134
|
+
return this.assembleUrl(url, this.getBestSearchTechnique(name, caps));
|
135
|
+
});
|
136
|
+
searchUrls.forEach((message) => void logger.verbose({ label: Label.TORZNAB, message }));
|
137
|
+
const outcomes = await Promise.allSettled(searchUrls.map((url) => fetch(url)
|
138
|
+
.then((r) => r.text())
|
139
|
+
.then(this.parseResults)));
|
140
|
+
const rejected = zip(Array.from(this.capsMap.keys()), outcomes).filter(([, outcome]) => outcome.status === "rejected");
|
141
|
+
rejected
|
142
|
+
.map(([url, outcome]) => `Failed searching ${url} for ${name} with reason: ${outcome.reason}`)
|
143
|
+
.forEach(logger.warn);
|
144
|
+
const fulfilled = outcomes
|
145
|
+
.filter((outcome) => outcome.status === "fulfilled")
|
146
|
+
.map((outcome) => outcome.value);
|
147
|
+
return [].concat(...fulfilled);
|
148
|
+
}
|
149
|
+
}
|
150
|
+
function instantiateTorznabManager() {
|
151
|
+
activeTorznabManager = new TorznabManager();
|
152
|
+
}
|
153
|
+
export function getTorznabManager() {
|
154
|
+
if (!activeTorznabManager) {
|
155
|
+
instantiateTorznabManager();
|
156
|
+
}
|
157
|
+
return activeTorznabManager;
|
158
|
+
}
|
159
|
+
//# 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
@@ -1,4 +1,11 @@
|
|
1
1
|
import { EP_REGEX, EXTENSIONS, MOVIE_REGEX, SEASON_REGEX, } from "./constants.js";
|
2
|
+
export var MediaType;
|
3
|
+
(function (MediaType) {
|
4
|
+
MediaType["EPISODE"] = "episode";
|
5
|
+
MediaType["SEASON"] = "pack";
|
6
|
+
MediaType["MOVIE"] = "movie";
|
7
|
+
MediaType["OTHER"] = "unknown";
|
8
|
+
})(MediaType = MediaType || (MediaType = {}));
|
2
9
|
export function stripExtension(filename) {
|
3
10
|
for (const ext of EXTENSIONS) {
|
4
11
|
const re = new RegExp(`\\.${ext}$`);
|
@@ -17,12 +24,26 @@ export function wait(n) {
|
|
17
24
|
}
|
18
25
|
export function getTag(name) {
|
19
26
|
return EP_REGEX.test(name)
|
20
|
-
?
|
27
|
+
? MediaType.EPISODE
|
21
28
|
: SEASON_REGEX.test(name)
|
22
|
-
?
|
29
|
+
? MediaType.SEASON
|
23
30
|
: MOVIE_REGEX.test(name)
|
24
|
-
?
|
25
|
-
:
|
31
|
+
? MediaType.MOVIE
|
32
|
+
: MediaType.OTHER;
|
26
33
|
}
|
27
34
|
export const ok = (r) => !(r instanceof Error);
|
35
|
+
export function cleanseSeparators(str) {
|
36
|
+
return str
|
37
|
+
.replace(/[._()[\]]/g, " ")
|
38
|
+
.replace(/\s+/g, " ")
|
39
|
+
.trim();
|
40
|
+
}
|
41
|
+
export function reformatTitleForSearching(name) {
|
42
|
+
var _a, _b, _c;
|
43
|
+
const seasonMatch = name.match(SEASON_REGEX);
|
44
|
+
const movieMatch = name.match(MOVIE_REGEX);
|
45
|
+
const episodeMatch = name.match(EP_REGEX);
|
46
|
+
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;
|
47
|
+
return cleanseSeparators(fullMatch);
|
48
|
+
}
|
28
49
|
//# 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;
|
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,CAAN,IAAY,SAKX;AALD,WAAY,SAAS;IACpB,gCAAmB,CAAA;IACnB,4BAAe,CAAA;IACf,4BAAe,CAAA;IACf,8BAAiB,CAAA;AAClB,CAAC,EALW,SAAS,GAAT,SAAS,KAAT,SAAS,QAKpB;AAED,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,CAAC,OAAO;QACnB,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;YACzB,CAAC,CAAC,SAAS,CAAC,MAAM;YAClB,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;gBACxB,CAAC,CAAC,SAAS,CAAC,KAAK;gBACjB,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC;AACpB,CAAC;AAID,MAAM,CAAC,MAAM,EAAE,GAAG,CAAI,CAAY,EAAU,EAAE,CAAC,CAAC,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC;AAErE,MAAM,UAAU,iBAAiB,CAAC,GAAW;IAC5C,OAAO,GAAG;SACR,OAAO,CAAC,YAAY,EAAE,GAAG,CAAC;SAC1B,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;SACpB,IAAI,EAAE,CAAC;AACV,CAAC;AAED,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,iBAAiB,CAAC,SAAS,CAAC,CAAC;AACrC,CAAC"}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "cross-seed",
|
3
|
-
"version": "3.0
|
3
|
+
"version": "3.3.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",
|