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.
Files changed (67) hide show
  1. package/dist/Result.js +17 -11
  2. package/dist/Result.js.map +1 -1
  3. package/dist/action.js +158 -47
  4. package/dist/action.js.map +1 -1
  5. package/dist/arr.js +200 -0
  6. package/dist/arr.js.map +1 -0
  7. package/dist/clients/Deluge.js +129 -71
  8. package/dist/clients/Deluge.js.map +1 -1
  9. package/dist/clients/QBittorrent.js +74 -58
  10. package/dist/clients/QBittorrent.js.map +1 -1
  11. package/dist/clients/RTorrent.js +12 -10
  12. package/dist/clients/RTorrent.js.map +1 -1
  13. package/dist/clients/TorrentClient.js.map +1 -1
  14. package/dist/clients/Transmission.js +10 -10
  15. package/dist/clients/Transmission.js.map +1 -1
  16. package/dist/cmd.js +16 -16
  17. package/dist/cmd.js.map +1 -1
  18. package/dist/config.template.cjs +83 -46
  19. package/dist/config.template.cjs.map +1 -1
  20. package/dist/configSchema.js +97 -13
  21. package/dist/configSchema.js.map +1 -1
  22. package/dist/configuration.js +3 -0
  23. package/dist/configuration.js.map +1 -1
  24. package/dist/constants.js +100 -6
  25. package/dist/constants.js.map +1 -1
  26. package/dist/dataFiles.js +4 -5
  27. package/dist/dataFiles.js.map +1 -1
  28. package/dist/decide.js +263 -158
  29. package/dist/decide.js.map +1 -1
  30. package/dist/diff.js +12 -2
  31. package/dist/diff.js.map +1 -1
  32. package/dist/errors.js +5 -2
  33. package/dist/errors.js.map +1 -1
  34. package/dist/indexers.js +31 -4
  35. package/dist/indexers.js.map +1 -1
  36. package/dist/jobs.js +2 -0
  37. package/dist/jobs.js.map +1 -1
  38. package/dist/logger.js +19 -5
  39. package/dist/logger.js.map +1 -1
  40. package/dist/migrations/05-caps.js +16 -0
  41. package/dist/migrations/05-caps.js.map +1 -0
  42. package/dist/migrations/06-uniqueDecisions.js +29 -0
  43. package/dist/migrations/06-uniqueDecisions.js.map +1 -0
  44. package/dist/migrations/migrations.js +11 -1
  45. package/dist/migrations/migrations.js.map +1 -1
  46. package/dist/parseTorrent.js +5 -0
  47. package/dist/parseTorrent.js.map +1 -1
  48. package/dist/pipeline.js +181 -85
  49. package/dist/pipeline.js.map +1 -1
  50. package/dist/preFilter.js +130 -52
  51. package/dist/preFilter.js.map +1 -1
  52. package/dist/pushNotifier.js +4 -2
  53. package/dist/pushNotifier.js.map +1 -1
  54. package/dist/runtimeConfig.js.map +1 -1
  55. package/dist/searchee.js +203 -13
  56. package/dist/searchee.js.map +1 -1
  57. package/dist/server.js +22 -15
  58. package/dist/server.js.map +1 -1
  59. package/dist/startup.js +2 -0
  60. package/dist/startup.js.map +1 -1
  61. package/dist/torrent.js +84 -39
  62. package/dist/torrent.js.map +1 -1
  63. package/dist/torznab.js +285 -95
  64. package/dist/torznab.js.map +1 -1
  65. package/dist/utils.js +155 -31
  66. package/dist/utils.js.map +1 -1
  67. package/package.json +3 -1
package/dist/utils.js CHANGED
@@ -1,21 +1,26 @@
1
- import path, { basename } from "path";
2
- import { EP_REGEX, MOVIE_REGEX, SEASON_REGEX, ANIME_REGEX, VIDEO_EXTENSIONS, Decision, } from "./constants.js";
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 VIDEO_EXTENSIONS) {
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 getTag(name, isVideo) {
37
- return EP_REGEX.test(name)
38
- ? MediaType.EPISODE
39
- : SEASON_REGEX.test(name)
40
- ? MediaType.SEASON
41
- : MOVIE_REGEX.test(name)
42
- ? MediaType.MOVIE
43
- : isVideo && ANIME_REGEX.test(name)
44
- ? MediaType.ANIME
45
- : MediaType.OTHER;
46
- }
47
- export function shouldRecheck(decision) {
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 getTag returns anime as it's conditional on a few factors
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(cleanseSeparators(`${title} ${release}`));
162
+ animeQueries.push(cleanTitle(`${title} ${release}`));
79
163
  }
80
164
  if (altTitle) {
81
- animeQueries.push(cleanseSeparators(`${altTitle} ${release}`));
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":"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"}
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",
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",