cross-seed 6.0.0-3 → 6.0.0-30
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/dist/Result.js +17 -11
- package/dist/Result.js.map +1 -1
- package/dist/action.js +158 -47
- package/dist/action.js.map +1 -1
- package/dist/arr.js +200 -0
- package/dist/arr.js.map +1 -0
- package/dist/clients/Deluge.js +129 -71
- package/dist/clients/Deluge.js.map +1 -1
- package/dist/clients/QBittorrent.js +74 -58
- package/dist/clients/QBittorrent.js.map +1 -1
- package/dist/clients/RTorrent.js +12 -10
- package/dist/clients/RTorrent.js.map +1 -1
- package/dist/clients/TorrentClient.js.map +1 -1
- package/dist/clients/Transmission.js +10 -10
- package/dist/clients/Transmission.js.map +1 -1
- package/dist/cmd.js +16 -16
- package/dist/cmd.js.map +1 -1
- package/dist/config.template.cjs +83 -46
- package/dist/config.template.cjs.map +1 -1
- package/dist/configSchema.js +97 -13
- package/dist/configSchema.js.map +1 -1
- package/dist/configuration.js +3 -0
- package/dist/configuration.js.map +1 -1
- package/dist/constants.js +100 -6
- package/dist/constants.js.map +1 -1
- package/dist/dataFiles.js +4 -5
- package/dist/dataFiles.js.map +1 -1
- package/dist/decide.js +263 -158
- package/dist/decide.js.map +1 -1
- package/dist/diff.js +12 -2
- package/dist/diff.js.map +1 -1
- package/dist/errors.js +5 -2
- package/dist/errors.js.map +1 -1
- package/dist/indexers.js +31 -4
- package/dist/indexers.js.map +1 -1
- package/dist/jobs.js +2 -0
- package/dist/jobs.js.map +1 -1
- package/dist/logger.js +19 -5
- package/dist/logger.js.map +1 -1
- package/dist/migrations/05-caps.js +16 -0
- package/dist/migrations/05-caps.js.map +1 -0
- package/dist/migrations/06-uniqueDecisions.js +29 -0
- package/dist/migrations/06-uniqueDecisions.js.map +1 -0
- package/dist/migrations/migrations.js +11 -1
- package/dist/migrations/migrations.js.map +1 -1
- package/dist/parseTorrent.js +5 -0
- package/dist/parseTorrent.js.map +1 -1
- package/dist/pipeline.js +181 -85
- package/dist/pipeline.js.map +1 -1
- package/dist/preFilter.js +130 -52
- package/dist/preFilter.js.map +1 -1
- package/dist/pushNotifier.js +4 -2
- package/dist/pushNotifier.js.map +1 -1
- package/dist/runtimeConfig.js.map +1 -1
- package/dist/searchee.js +203 -13
- package/dist/searchee.js.map +1 -1
- package/dist/server.js +22 -15
- package/dist/server.js.map +1 -1
- package/dist/startup.js +2 -0
- package/dist/startup.js.map +1 -1
- package/dist/torrent.js +84 -39
- package/dist/torrent.js.map +1 -1
- package/dist/torznab.js +285 -95
- package/dist/torznab.js.map +1 -1
- package/dist/utils.js +155 -31
- package/dist/utils.js.map +1 -1
- package/package.json +3 -1
package/dist/utils.js
CHANGED
@@ -1,21 +1,26 @@
|
|
1
|
-
import path
|
2
|
-
import { EP_REGEX, MOVIE_REGEX, SEASON_REGEX,
|
1
|
+
import path from "path";
|
2
|
+
import { ALL_EXTENSIONS, ANIME_REGEX, AUDIO_EXTENSIONS, BOOK_EXTENSIONS, Decision, EP_REGEX, MOVIE_REGEX, NON_UNICODE_ALPHANUM_REGEX, SCENE_TITLE_REGEX, SEASON_REGEX, VIDEO_DISC_EXTENSIONS, VIDEO_EXTENSIONS, YEARS_REGEX, } from "./constants.js";
|
3
3
|
import { resultOf, resultOfErr } from "./Result.js";
|
4
|
+
import chalk from "chalk";
|
5
|
+
import { getRuntimeConfig } from "./runtimeConfig.js";
|
4
6
|
export var MediaType;
|
5
7
|
(function (MediaType) {
|
6
8
|
MediaType["EPISODE"] = "episode";
|
7
9
|
MediaType["SEASON"] = "pack";
|
8
10
|
MediaType["MOVIE"] = "movie";
|
9
11
|
MediaType["ANIME"] = "anime";
|
12
|
+
MediaType["VIDEO"] = "video";
|
13
|
+
MediaType["AUDIO"] = "audio";
|
14
|
+
MediaType["BOOK"] = "book";
|
10
15
|
MediaType["OTHER"] = "unknown";
|
11
16
|
})(MediaType || (MediaType = {}));
|
12
17
|
export function isTruthy(value) {
|
13
18
|
return Boolean(value);
|
14
19
|
}
|
15
20
|
export function stripExtension(filename) {
|
16
|
-
for (const ext of
|
21
|
+
for (const ext of ALL_EXTENSIONS) {
|
17
22
|
if (filename.endsWith(ext))
|
18
|
-
return basename(filename, ext);
|
23
|
+
return path.basename(filename, ext);
|
19
24
|
}
|
20
25
|
return filename;
|
21
26
|
}
|
@@ -29,26 +34,58 @@ export function humanReadableSize(bytes) {
|
|
29
34
|
const k = 1000;
|
30
35
|
const sizes = ["B", "kB", "MB", "GB", "TB"];
|
31
36
|
// engineering notation: (coefficient) * 1000 ^ (exponent)
|
32
|
-
const exponent = Math.floor(Math.log(bytes) / Math.log(k));
|
37
|
+
const exponent = Math.floor(Math.log(Math.abs(bytes)) / Math.log(k));
|
33
38
|
const coefficient = bytes / Math.pow(k, exponent);
|
34
39
|
return `${parseFloat(coefficient.toFixed(2))} ${sizes[exponent]}`;
|
35
40
|
}
|
36
|
-
export function
|
37
|
-
return
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
}
|
47
|
-
|
41
|
+
export function filesWithExt(files, exts) {
|
42
|
+
return files.filter((f) => exts.includes(path.extname(f.name.toLowerCase())));
|
43
|
+
}
|
44
|
+
export function hasExt(files, exts) {
|
45
|
+
return files.some((f) => exts.includes(path.extname(f.name.toLowerCase())));
|
46
|
+
}
|
47
|
+
export function getMediaType(searchee) {
|
48
|
+
function unsupportedMediaType(searchee) {
|
49
|
+
if (hasExt(searchee.files, AUDIO_EXTENSIONS)) {
|
50
|
+
return MediaType.AUDIO;
|
51
|
+
}
|
52
|
+
else if (hasExt(searchee.files, BOOK_EXTENSIONS)) {
|
53
|
+
return MediaType.BOOK;
|
54
|
+
}
|
55
|
+
else {
|
56
|
+
return MediaType.OTHER;
|
57
|
+
}
|
58
|
+
}
|
59
|
+
/* eslint-disable no-fallthrough */
|
60
|
+
switch (true) {
|
61
|
+
case EP_REGEX.test(searchee.title):
|
62
|
+
return MediaType.EPISODE;
|
63
|
+
case SEASON_REGEX.test(searchee.title):
|
64
|
+
return MediaType.SEASON;
|
65
|
+
case hasExt(searchee.files, VIDEO_EXTENSIONS):
|
66
|
+
if (MOVIE_REGEX.test(searchee.title))
|
67
|
+
return MediaType.MOVIE;
|
68
|
+
if (ANIME_REGEX.test(searchee.title))
|
69
|
+
return MediaType.ANIME;
|
70
|
+
return MediaType.VIDEO;
|
71
|
+
case hasExt(searchee.files, VIDEO_DISC_EXTENSIONS):
|
72
|
+
if (MOVIE_REGEX.test(searchee.title))
|
73
|
+
return MediaType.MOVIE;
|
74
|
+
return MediaType.VIDEO;
|
75
|
+
case hasExt(searchee.files, [".rar"]):
|
76
|
+
if (MOVIE_REGEX.test(searchee.title))
|
77
|
+
return MediaType.MOVIE;
|
78
|
+
default:
|
79
|
+
return unsupportedMediaType(searchee);
|
80
|
+
}
|
81
|
+
}
|
82
|
+
export function shouldRecheck(searchee, decision) {
|
83
|
+
if (hasExt(searchee.files, VIDEO_DISC_EXTENSIONS))
|
84
|
+
return true;
|
48
85
|
switch (decision) {
|
49
86
|
case Decision.MATCH:
|
50
|
-
return false;
|
51
87
|
case Decision.MATCH_SIZE_ONLY:
|
88
|
+
return false;
|
52
89
|
case Decision.MATCH_PARTIAL:
|
53
90
|
default:
|
54
91
|
return true;
|
@@ -63,32 +100,74 @@ export async function time(cb, times) {
|
|
63
100
|
times.push(performance.now() - before);
|
64
101
|
}
|
65
102
|
}
|
103
|
+
export function sanitizeUrl(url) {
|
104
|
+
if (typeof url === "string") {
|
105
|
+
url = new URL(url);
|
106
|
+
}
|
107
|
+
return url.origin + url.pathname;
|
108
|
+
}
|
109
|
+
/**
|
110
|
+
* This cannot be done at the log level because of too many false positives.
|
111
|
+
* The caller will need to extract the infoHash from their specific syntax.
|
112
|
+
* @param infoHash The infoHash to sanitize
|
113
|
+
*/
|
114
|
+
export function sanitizeInfoHash(infoHash) {
|
115
|
+
return `${infoHash.slice(0, 8)}...`;
|
116
|
+
}
|
117
|
+
export function getApikey(url) {
|
118
|
+
return new URL(url).searchParams.get("apikey");
|
119
|
+
}
|
66
120
|
export function cleanseSeparators(str) {
|
67
121
|
return str
|
68
|
-
.replace(/\[.*?\]|「.*?」|「.*?」|【.*?】/g, "")
|
69
|
-
.replace(/[._()[\]]/g, " ")
|
70
|
-
.replace(/\s+/g, " ")
|
122
|
+
.replace(/\[.*?\]|「.*?」|「.*?」|【.*?】/g, "") // bracketed text
|
123
|
+
.replace(/[._()[\]]/g, " ") // release delimiters (except '-')
|
124
|
+
.replace(/\s+/g, " ") // successive spaces
|
125
|
+
.replace(/^\s*-+|-+\s*$/g, "") // "trim()" hyphens
|
71
126
|
.trim();
|
72
127
|
}
|
128
|
+
export function cleanTitle(title) {
|
129
|
+
return cleanseSeparators(title).match(SCENE_TITLE_REGEX).groups.title;
|
130
|
+
}
|
131
|
+
export function reformatTitleForSearching(name) {
|
132
|
+
const seriesTitle = name.match(EP_REGEX)?.groups?.title ??
|
133
|
+
name.match(SEASON_REGEX)?.groups?.title;
|
134
|
+
if (seriesTitle) {
|
135
|
+
const title = cleanTitle(seriesTitle);
|
136
|
+
return title.length > 4
|
137
|
+
? replaceLastOccurrence(title, YEARS_REGEX, "")
|
138
|
+
.replace(/\s+/g, " ")
|
139
|
+
.trim()
|
140
|
+
: title;
|
141
|
+
}
|
142
|
+
return cleanTitle(name.match(MOVIE_REGEX)?.[0] ?? name);
|
143
|
+
}
|
144
|
+
export function createKeyTitle(title) {
|
145
|
+
const key = cleanTitle(title)
|
146
|
+
.replace(NON_UNICODE_ALPHANUM_REGEX, "")
|
147
|
+
.toLowerCase();
|
148
|
+
return key.length > 4
|
149
|
+
? replaceLastOccurrence(key, YEARS_REGEX, "")
|
150
|
+
: key.length
|
151
|
+
? key
|
152
|
+
: null;
|
153
|
+
}
|
154
|
+
export function isBadTitle(title) {
|
155
|
+
return ["season", "ep"].includes(title.toLowerCase());
|
156
|
+
}
|
73
157
|
export function getAnimeQueries(name) {
|
74
|
-
// Only use if
|
158
|
+
// Only use if getMediaType returns anime as it's conditional on a few factors
|
75
159
|
const animeQueries = [];
|
76
160
|
const { title, altTitle, release } = name.match(ANIME_REGEX)?.groups ?? {};
|
77
161
|
if (title) {
|
78
|
-
animeQueries.push(
|
162
|
+
animeQueries.push(cleanTitle(`${title} ${release}`));
|
79
163
|
}
|
80
164
|
if (altTitle) {
|
81
|
-
|
165
|
+
if (isBadTitle(altTitle))
|
166
|
+
return animeQueries;
|
167
|
+
animeQueries.push(cleanTitle(`${altTitle} ${release}`));
|
82
168
|
}
|
83
169
|
return animeQueries;
|
84
170
|
}
|
85
|
-
export function reformatTitleForSearching(name) {
|
86
|
-
const seasonMatch = name.match(SEASON_REGEX);
|
87
|
-
const movieMatch = name.match(MOVIE_REGEX);
|
88
|
-
const episodeMatch = name.match(EP_REGEX);
|
89
|
-
const fullMatch = episodeMatch?.[0] ?? seasonMatch?.[0] ?? movieMatch?.[0] ?? name;
|
90
|
-
return cleanseSeparators(fullMatch);
|
91
|
-
}
|
92
171
|
export const tap = (fn) => (value) => {
|
93
172
|
fn(value);
|
94
173
|
return value;
|
@@ -101,6 +180,20 @@ export function humanReadableDate(timestamp) {
|
|
101
180
|
// swedish conventions roughly follow the iso format!
|
102
181
|
return new Date(timestamp).toLocaleString("sv");
|
103
182
|
}
|
183
|
+
export function getLogString(searchee, color = chalk.reset) {
|
184
|
+
if (searchee.title === searchee.name) {
|
185
|
+
return searchee.infoHash
|
186
|
+
? `${color(searchee.title)} ${chalk.dim(`[${sanitizeInfoHash(searchee.infoHash)}]`)}`
|
187
|
+
: searchee.path
|
188
|
+
? color(searchee.path)
|
189
|
+
: color(searchee.title);
|
190
|
+
}
|
191
|
+
return searchee.infoHash
|
192
|
+
? `${color(searchee.title)} ${chalk.dim(`[${searchee.name} [${sanitizeInfoHash(searchee.infoHash)}]]`)}`
|
193
|
+
: searchee.path
|
194
|
+
? `${color(searchee.title)} ${chalk.dim(`[${searchee.path}]`)}`
|
195
|
+
: `${color(searchee.title)} ${chalk.dim(`[${searchee.name}]`)}`;
|
196
|
+
}
|
104
197
|
export function formatAsList(strings) {
|
105
198
|
return new Intl.ListFormat("en", {
|
106
199
|
style: "long",
|
@@ -131,4 +224,35 @@ export function extractCredentialsFromUrl(url, basePath) {
|
|
131
224
|
return resultOfErr("invalid URL");
|
132
225
|
}
|
133
226
|
}
|
227
|
+
export function capitalizeFirstLetter(string) {
|
228
|
+
return string.charAt(0).toUpperCase() + string.slice(1);
|
229
|
+
}
|
230
|
+
/**
|
231
|
+
* Replaces the last occurrence of a GLOBAL regex match in a string
|
232
|
+
* @param str The string to replace the last occurrence in
|
233
|
+
* @param globalRegExp The regex to match (must be global)
|
234
|
+
* @param newStr The string to replace the last occurrence with
|
235
|
+
*/
|
236
|
+
export function replaceLastOccurrence(str, globalRegExp, newStr) {
|
237
|
+
const matches = Array.from(str.matchAll(globalRegExp));
|
238
|
+
if (matches.length === 0)
|
239
|
+
return str;
|
240
|
+
const lastMatch = matches[matches.length - 1];
|
241
|
+
const lastMatchIndex = lastMatch.index;
|
242
|
+
const lastMatchStr = lastMatch[0];
|
243
|
+
return (str.slice(0, lastMatchIndex) +
|
244
|
+
newStr +
|
245
|
+
str.slice(lastMatchIndex + lastMatchStr.length));
|
246
|
+
}
|
247
|
+
export function extractInt(str) {
|
248
|
+
return parseInt(str.match(/\d+/)[0]);
|
249
|
+
}
|
250
|
+
export function getFuzzySizeFactor() {
|
251
|
+
const { fuzzySizeThreshold } = getRuntimeConfig();
|
252
|
+
return fuzzySizeThreshold;
|
253
|
+
}
|
254
|
+
export function getMinSizeRatio() {
|
255
|
+
const { fuzzySizeThreshold } = getRuntimeConfig();
|
256
|
+
return 1 - fuzzySizeThreshold;
|
257
|
+
}
|
134
258
|
//# 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,IAAI,
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "cross-seed",
|
3
|
-
"version": "6.0.0-
|
3
|
+
"version": "6.0.0-30",
|
4
4
|
"description": "Fully-automatic cross-seeding with Torznab",
|
5
5
|
"scripts": {
|
6
6
|
"test": "true",
|
@@ -30,7 +30,9 @@
|
|
30
30
|
"bencode": "^2.0.1",
|
31
31
|
"better-sqlite3": "^9.4.0",
|
32
32
|
"chalk": "^5.0.0",
|
33
|
+
"strip-ansi": "^7.1.0",
|
33
34
|
"commander": "^8.3.0",
|
35
|
+
"fastest-levenshtein": "^1.0.16",
|
34
36
|
"fuse.js": "^6.6.2",
|
35
37
|
"knex": "^2.4.2",
|
36
38
|
"lodash-es": "^4.17.21",
|