cross-seed 5.9.2 → 6.0.0-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.
Files changed (64) hide show
  1. package/README.md +1 -1
  2. package/dist/Result.js +2 -0
  3. package/dist/Result.js.map +1 -1
  4. package/dist/action.js +117 -57
  5. package/dist/action.js.map +1 -1
  6. package/dist/auth.js +5 -5
  7. package/dist/auth.js.map +1 -1
  8. package/dist/clients/Deluge.js +68 -36
  9. package/dist/clients/Deluge.js.map +1 -1
  10. package/dist/clients/QBittorrent.js +40 -30
  11. package/dist/clients/QBittorrent.js.map +1 -1
  12. package/dist/clients/RTorrent.js +61 -23
  13. package/dist/clients/RTorrent.js.map +1 -1
  14. package/dist/clients/TorrentClient.js.map +1 -1
  15. package/dist/clients/Transmission.js +18 -8
  16. package/dist/clients/Transmission.js.map +1 -1
  17. package/dist/cmd.js +76 -75
  18. package/dist/cmd.js.map +1 -1
  19. package/dist/config.template.cjs +226 -142
  20. package/dist/config.template.cjs.map +1 -1
  21. package/dist/configSchema.js +184 -0
  22. package/dist/configSchema.js.map +1 -0
  23. package/dist/configuration.js +35 -9
  24. package/dist/configuration.js.map +1 -1
  25. package/dist/constants.js +26 -12
  26. package/dist/constants.js.map +1 -1
  27. package/dist/dataFiles.js +17 -8
  28. package/dist/dataFiles.js.map +1 -1
  29. package/dist/decide.js +91 -28
  30. package/dist/decide.js.map +1 -1
  31. package/dist/diff.js.map +1 -1
  32. package/dist/errors.js.map +1 -1
  33. package/dist/indexers.js +3 -3
  34. package/dist/indexers.js.map +1 -1
  35. package/dist/jobs.js +15 -7
  36. package/dist/jobs.js.map +1 -1
  37. package/dist/logger.js +9 -9
  38. package/dist/logger.js.map +1 -1
  39. package/dist/migrations/00-initialSchema.js.map +1 -1
  40. package/dist/migrations/02-timestamps.js +3 -1
  41. package/dist/migrations/02-timestamps.js.map +1 -1
  42. package/dist/parseTorrent.js +11 -2
  43. package/dist/parseTorrent.js.map +1 -1
  44. package/dist/pipeline.js +34 -25
  45. package/dist/pipeline.js.map +1 -1
  46. package/dist/preFilter.js +17 -6
  47. package/dist/preFilter.js.map +1 -1
  48. package/dist/pushNotifier.js +29 -10
  49. package/dist/pushNotifier.js.map +1 -1
  50. package/dist/runtimeConfig.js.map +1 -1
  51. package/dist/searchee.js +8 -1
  52. package/dist/searchee.js.map +1 -1
  53. package/dist/server.js.map +1 -1
  54. package/dist/startup.js +62 -23
  55. package/dist/startup.js.map +1 -1
  56. package/dist/torrent.js +14 -29
  57. package/dist/torrent.js.map +1 -1
  58. package/dist/torznab.js +56 -32
  59. package/dist/torznab.js.map +1 -1
  60. package/dist/utils.js +32 -5
  61. package/dist/utils.js.map +1 -1
  62. package/package.json +23 -13
  63. package/dist/config.template.docker.cjs +0 -236
  64. package/dist/config.template.docker.cjs.map +0 -1
@@ -1,25 +1,44 @@
1
1
  import chalk from "chalk";
2
- import { copyFileSync, existsSync, mkdirSync } from "fs";
2
+ import { accessSync, copyFileSync, existsSync, mkdirSync, constants } from "fs";
3
3
  import { createRequire } from "module";
4
4
  import path from "path";
5
5
  import { pathToFileURL } from "url";
6
+ import { CrossSeedError } from "./errors.js";
6
7
  const require = createRequire(import.meta.url);
7
8
  const packageDotJson = require("../package.json");
9
+ export const UNPARSABLE_CONFIG_MESSAGE = `
10
+ Your config file is improperly formatted. The location of the error is above, \
11
+ but you may have to look backwards to see the root cause.
12
+ Make sure that
13
+ - strings (words, URLs, etc) are wrapped in "quotation marks"
14
+ - any arrays (lists of things, even one thing) are wrapped in [square brackets]
15
+ - every entry has a comma after it, including inside arrays
16
+ `.trim();
8
17
  export function appDir() {
9
- return (process.env.CONFIG_DIR ||
18
+ const appDir = process.env.CONFIG_DIR ||
10
19
  (process.platform === "win32"
11
20
  ? path.resolve(process.env.LOCALAPPDATA, packageDotJson.name)
12
- : path.resolve(process.env.HOME, `.${packageDotJson.name}`)));
21
+ : path.resolve(process.env.HOME, `.${packageDotJson.name}`));
22
+ try {
23
+ accessSync(appDir, constants.R_OK | constants.W_OK);
24
+ }
25
+ catch (e) {
26
+ const dockerMessage = process.env.DOCKER_ENV === "true"
27
+ ? ` Use chown to set the owner to ${process.getuid()}:${process.getgid()}`
28
+ : "";
29
+ throw new CrossSeedError(`cross-seed does not have R/W permissions on your config directory.${dockerMessage}`);
30
+ }
31
+ return appDir;
13
32
  }
14
33
  export function createAppDir() {
15
34
  mkdirSync(path.join(appDir(), "torrent_cache"), { recursive: true });
16
35
  mkdirSync(path.join(appDir(), "logs"), { recursive: true });
17
36
  }
18
- export function generateConfig({ force = false, docker = false, }) {
37
+ export function generateConfig() {
19
38
  createAppDir();
20
39
  const dest = path.join(appDir(), "config.js");
21
- const templatePath = path.join(`./config.template${docker ? ".docker" : ""}.cjs`);
22
- if (!force && existsSync(dest)) {
40
+ const templatePath = path.join("./config.template.cjs");
41
+ if (existsSync(dest)) {
23
42
  console.log("Configuration file already exists.");
24
43
  return;
25
44
  }
@@ -28,16 +47,23 @@ export function generateConfig({ force = false, docker = false, }) {
28
47
  }
29
48
  export async function getFileConfig() {
30
49
  if (process.env.DOCKER_ENV === "true") {
31
- generateConfig({ docker: true });
50
+ generateConfig();
32
51
  }
33
52
  const configPath = path.join(appDir(), "config.js");
34
53
  try {
35
54
  return (await import(pathToFileURL(configPath).toString())).default;
36
55
  }
37
56
  catch (e) {
38
- if (e.code !== "ERR_MODULE_NOT_FOUND")
57
+ if (e.code === "ERR_MODULE_NOT_FOUND") {
58
+ return {};
59
+ }
60
+ else if (e instanceof SyntaxError) {
61
+ const location = e.stack.split("\n").slice(0, 3).join("\n");
62
+ throw new CrossSeedError(`\n${chalk.red(location)}\n\n${UNPARSABLE_CONFIG_MESSAGE}`);
63
+ }
64
+ else {
39
65
  throw e;
40
- return {};
66
+ }
41
67
  }
42
68
  }
43
69
  //# sourceMappingURL=configuration.js.map
@@ -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;AA2ClD,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,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,KAAK,MAAM,EAAE;QACtC,cAAc,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;KACjC;IAED,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"}
1
+ {"version":3,"file":"configuration.js","sourceRoot":"","sources":["../src/configuration.ts"],"names":[],"mappings":"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"}
package/dist/constants.js CHANGED
@@ -4,33 +4,37 @@ const packageDotJson = require("../package.json");
4
4
  export const PROGRAM_NAME = packageDotJson.name;
5
5
  export const PROGRAM_VERSION = packageDotJson.version;
6
6
  export const USER_AGENT = `CrossSeed/${PROGRAM_VERSION}`;
7
- export const EP_REGEX = /^(?<title>.+?)[_.\s-]+(?:(?<season>S\d+)?[_.\s]?(?<episode>E\d+(?:[\s-]?E?\d+)?(?![ip]))(?!\d+[ip])|(?<date>(?<year>\d{4})[_.\s-](?<month>\d{2})[_.\s-](?<day>\d{2})))/i;
8
- export const SEASON_REGEX = /^(?<title>.+?)[_.\s-]+(?<season>S\d+)(?:[_.\s-]*?(?<seasonmax>S?\d+))?(?=[_.\s](?!E\d+))/i;
9
- export const MOVIE_REGEX = /^(?<title>.+?)[_.\s][[(]?(?<year>\d{4})[)\]]?(?![pi])/i;
10
- export const RELEASE_GROUP_REGEX = /(?<=-)[\w ]+(?=(?:\.\w{1,5})?$)/i;
11
- export const VIDEO_EXTENSIONS = [".mkv", ".mp4", ".avi"];
12
- export const DATA_EXTENSIONS = [".mkv", ".avi", ".mp4", ".ts", ".flac", ".mp3"];
7
+ export const TORRENT_TAG = "cross-seed";
8
+ export const TORRENT_CATEGORY_SUFFIX = `.cross-seed`;
9
+ export const EP_REGEX = /^(?<title>.+?)[_.\s-]+(?:(?<season>S\d+)?[_.\s-]{0,3}(?<episode>(?:E|(?<=S\d+[_.\s-]{1,3}))\d+(?:[\s-]?E?\d+)?(?![pix]))(?!\d+[pix])|(?<date>(?<year>(?:19|20)\d{2})[_.\s-](?<month>\d{2})[_.\s-](?<day>\d{2})))/i;
10
+ export const SEASON_REGEX = /^(?<title>.+?)[_.\s-]+(?<season>S\d+)(?:[_.\s~-]*?(?<seasonmax>S?\d+))?(?=[_.\s](?!E\d+))/i;
11
+ export const MOVIE_REGEX = /^(?<title>.+?)-?[_.\s][[(]?(?<year>(?:18|19|20)\d{2})[)\]]?(?![pix])/i;
12
+ export const ANIME_REGEX = /^(?:\[(?<group>.*?)\][_.\s-]?)?(?:\[?(?<title>.+?)[_.\s-]?(?:\(?(?:\d{1,2}(?:st|nd|rd|th))?\s?Season)?[_.\s-]?\]?)(?:[([~/|-]\s?(?!\d{4})(?<altTitle>.+?)[)\]~-]?\s?)?[_.\s-]?(?:\(?(?<year>(?:19|20)\d{2})\)?)?[[_.\s-](?:S\d{1,2})?[_.\s-]{0,3}(?:#|EP?|(?:SP))?[_.\s-]{0,3}(?<release>\d{1,4})(?:v\d)?[\])_.\s-]/i;
13
+ export const RELEASE_GROUP_REGEX = /(?<=-)(?:\W|\b)(?!(?:\d{3,4}[ip]))(?!\d+\b)(?:\W|\b)(?<group>[\w ]+?)(?:\[.+\])?(?:\))?(?=(?:\.\w{1,5})?$)/i;
14
+ export const VIDEO_EXTENSIONS = [".mkv", ".mp4", ".avi", ".ts"];
15
+ export const IGNORED_FOLDERS_REGEX = /^(S(eason )?\d{1,4}|((CD|DVD|DISC)\d{1,2}))$/i;
13
16
  export const TORRENT_CACHE_FOLDER = "torrent_cache";
14
17
  export var Action;
15
18
  (function (Action) {
16
19
  Action["SAVE"] = "save";
17
20
  Action["INJECT"] = "inject";
18
- })(Action = Action || (Action = {}));
21
+ })(Action || (Action = {}));
19
22
  export var InjectionResult;
20
23
  (function (InjectionResult) {
21
24
  InjectionResult["SUCCESS"] = "INJECTED";
22
25
  InjectionResult["FAILURE"] = "FAILURE";
23
26
  InjectionResult["ALREADY_EXISTS"] = "ALREADY_EXISTS";
24
27
  InjectionResult["TORRENT_NOT_COMPLETE"] = "TORRENT_NOT_COMPLETE";
25
- })(InjectionResult = InjectionResult || (InjectionResult = {}));
28
+ })(InjectionResult || (InjectionResult = {}));
26
29
  export var SaveResult;
27
30
  (function (SaveResult) {
28
31
  SaveResult["SAVED"] = "SAVED";
29
- })(SaveResult = SaveResult || (SaveResult = {}));
32
+ })(SaveResult || (SaveResult = {}));
30
33
  export var Decision;
31
34
  (function (Decision) {
32
35
  Decision["MATCH"] = "MATCH";
33
36
  Decision["MATCH_SIZE_ONLY"] = "MATCH_SIZE_ONLY";
37
+ Decision["MATCH_PARTIAL"] = "MATCH_PARTIAL";
34
38
  Decision["SIZE_MISMATCH"] = "SIZE_MISMATCH";
35
39
  Decision["NO_DOWNLOAD_LINK"] = "NO_DOWNLOAD_LINK";
36
40
  Decision["DOWNLOAD_FAILED"] = "DOWNLOAD_FAILED";
@@ -38,15 +42,25 @@ export var Decision;
38
42
  Decision["INFO_HASH_ALREADY_EXISTS"] = "INFO_HASH_ALREADY_EXISTS";
39
43
  Decision["FILE_TREE_MISMATCH"] = "FILE_TREE_MISMATCH";
40
44
  Decision["RELEASE_GROUP_MISMATCH"] = "RELEASE_GROUP_MISMATCH";
41
- })(Decision = Decision || (Decision = {}));
45
+ Decision["BLOCKED_RELEASE"] = "BLOCKED_RELEASE";
46
+ })(Decision || (Decision = {}));
42
47
  export var MatchMode;
43
48
  (function (MatchMode) {
44
49
  MatchMode["SAFE"] = "safe";
45
50
  MatchMode["RISKY"] = "risky";
46
- })(MatchMode = MatchMode || (MatchMode = {}));
51
+ MatchMode["PARTIAL"] = "partial";
52
+ })(MatchMode || (MatchMode = {}));
47
53
  export var LinkType;
48
54
  (function (LinkType) {
49
55
  LinkType["SYMLINK"] = "symlink";
50
56
  LinkType["HARDLINK"] = "hardlink";
51
- })(LinkType = LinkType || (LinkType = {}));
57
+ })(LinkType || (LinkType = {}));
58
+ export const IGNORED_FOLDERS_SUBSTRINGS = [
59
+ "sample",
60
+ "proof",
61
+ "bdmv",
62
+ "bdrom",
63
+ "certificate",
64
+ "video_ts",
65
+ ];
52
66
  //# sourceMappingURL=constants.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AACvC,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,cAAc,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAElD,MAAM,CAAC,MAAM,YAAY,GAAG,cAAc,CAAC,IAAI,CAAC;AAChD,MAAM,CAAC,MAAM,eAAe,GAAG,cAAc,CAAC,OAAO,CAAC;AACtD,MAAM,CAAC,MAAM,UAAU,GAAG,aAAa,eAAe,EAAE,CAAC;AAEzD,MAAM,CAAC,MAAM,QAAQ,GACpB,yKAAyK,CAAC;AAC3K,MAAM,CAAC,MAAM,YAAY,GACxB,2FAA2F,CAAC;AAC7F,MAAM,CAAC,MAAM,WAAW,GACvB,wDAAwD,CAAC;AAC1D,MAAM,CAAC,MAAM,mBAAmB,GAAG,kCAAkC,CAAC;AAEtE,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAEzD,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;AAEhF,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,uCAAoB,CAAA;IACpB,sCAAmB,CAAA;IACnB,oDAAiC,CAAA;IACjC,gEAA6C,CAAA;AAC9C,CAAC,EALW,eAAe,GAAf,eAAe,KAAf,eAAe,QAK1B;AAED,MAAM,CAAN,IAAY,UAEX;AAFD,WAAY,UAAU;IACrB,6BAAe,CAAA;AAChB,CAAC,EAFW,UAAU,GAAV,UAAU,KAAV,UAAU,QAErB;AAID,MAAM,CAAN,IAAY,QAUX;AAVD,WAAY,QAAQ;IACnB,2BAAe,CAAA;IACf,+CAAmC,CAAA;IACnC,2CAA+B,CAAA;IAC/B,iDAAqC,CAAA;IACrC,+CAAmC,CAAA;IACnC,yCAA6B,CAAA;IAC7B,iEAAqD,CAAA;IACrD,qDAAyC,CAAA;IACzC,6DAAiD,CAAA;AAClD,CAAC,EAVW,QAAQ,GAAR,QAAQ,KAAR,QAAQ,QAUnB;AAED,MAAM,CAAN,IAAY,SAGX;AAHD,WAAY,SAAS;IACpB,0BAAa,CAAA;IACb,4BAAe,CAAA;AAChB,CAAC,EAHW,SAAS,GAAT,SAAS,KAAT,SAAS,QAGpB;AAED,MAAM,CAAN,IAAY,QAGX;AAHD,WAAY,QAAQ;IACnB,+BAAmB,CAAA;IACnB,iCAAqB,CAAA;AACtB,CAAC,EAHW,QAAQ,GAAR,QAAQ,KAAR,QAAQ,QAGnB"}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AACvC,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,cAAc,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAElD,MAAM,CAAC,MAAM,YAAY,GAAG,cAAc,CAAC,IAAI,CAAC;AAChD,MAAM,CAAC,MAAM,eAAe,GAAG,cAAc,CAAC,OAAO,CAAC;AACtD,MAAM,CAAC,MAAM,UAAU,GAAG,aAAa,eAAe,EAAE,CAAC;AACzD,MAAM,CAAC,MAAM,WAAW,GAAG,YAAY,CAAC;AACxC,MAAM,CAAC,MAAM,uBAAuB,GAAG,aAAa,CAAC;AAErD,MAAM,CAAC,MAAM,QAAQ,GACpB,mNAAmN,CAAC;AACrN,MAAM,CAAC,MAAM,YAAY,GACxB,4FAA4F,CAAC;AAC9F,MAAM,CAAC,MAAM,WAAW,GACvB,uEAAuE,CAAC;AACzE,MAAM,CAAC,MAAM,WAAW,GACvB,sTAAsT,CAAC;AACxT,MAAM,CAAC,MAAM,mBAAmB,GAC/B,6GAA6G,CAAC;AAE/G,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;AAEhE,MAAM,CAAC,MAAM,qBAAqB,GACjC,+CAA+C,CAAC;AAEjD,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,KAAN,MAAM,QAGjB;AAED,MAAM,CAAN,IAAY,eAKX;AALD,WAAY,eAAe;IAC1B,uCAAoB,CAAA;IACpB,sCAAmB,CAAA;IACnB,oDAAiC,CAAA;IACjC,gEAA6C,CAAA;AAC9C,CAAC,EALW,eAAe,KAAf,eAAe,QAK1B;AAED,MAAM,CAAN,IAAY,UAEX;AAFD,WAAY,UAAU;IACrB,6BAAe,CAAA;AAChB,CAAC,EAFW,UAAU,KAAV,UAAU,QAErB;AAID,MAAM,CAAN,IAAY,QAYX;AAZD,WAAY,QAAQ;IACnB,2BAAe,CAAA;IACf,+CAAmC,CAAA;IACnC,2CAA+B,CAAA;IAC/B,2CAA+B,CAAA;IAC/B,iDAAqC,CAAA;IACrC,+CAAmC,CAAA;IACnC,yCAA6B,CAAA;IAC7B,iEAAqD,CAAA;IACrD,qDAAyC,CAAA;IACzC,6DAAiD,CAAA;IACjD,+CAAmC,CAAA;AACpC,CAAC,EAZW,QAAQ,KAAR,QAAQ,QAYnB;AAED,MAAM,CAAN,IAAY,SAIX;AAJD,WAAY,SAAS;IACpB,0BAAa,CAAA;IACb,4BAAe,CAAA;IACf,gCAAmB,CAAA;AACpB,CAAC,EAJW,SAAS,KAAT,SAAS,QAIpB;AAED,MAAM,CAAN,IAAY,QAGX;AAHD,WAAY,QAAQ;IACnB,+BAAmB,CAAA;IACnB,iCAAqB,CAAA;AACtB,CAAC,EAHW,QAAQ,KAAR,QAAQ,QAGnB;AAED,MAAM,CAAC,MAAM,0BAA0B,GAAG;IACzC,QAAQ;IACR,OAAO;IACP,MAAM;IACN,OAAO;IACP,aAAa;IACb,UAAU;CACV,CAAC"}
package/dist/dataFiles.js CHANGED
@@ -1,21 +1,30 @@
1
1
  import { readdirSync, statSync } from "fs";
2
- import { extname, join } from "path";
3
- import { DATA_EXTENSIONS } from "./constants.js";
2
+ import { basename, extname, join } from "path";
3
+ import { IGNORED_FOLDERS_SUBSTRINGS, IGNORED_FOLDERS_REGEX, VIDEO_EXTENSIONS, } from "./constants.js";
4
4
  import { getRuntimeConfig } from "./runtimeConfig.js";
5
+ function shouldIgnorePathHeuristically(root, isDir) {
6
+ const folderBaseName = basename(root);
7
+ if (isDir) {
8
+ return (IGNORED_FOLDERS_SUBSTRINGS.includes(folderBaseName.toLowerCase()) ||
9
+ IGNORED_FOLDERS_REGEX.test(folderBaseName));
10
+ }
11
+ else {
12
+ return !VIDEO_EXTENSIONS.includes(extname(folderBaseName));
13
+ }
14
+ }
5
15
  export function findPotentialNestedRoots(root, depth, isDirHint) {
6
16
  const isDir = isDirHint !== undefined ? isDirHint : statSync(root).isDirectory();
17
+ if (depth <= 0 || shouldIgnorePathHeuristically(root, isDir)) {
18
+ return [];
19
+ }
7
20
  // if depth is 0, don't look at children
8
- if (depth > 0 && isDir) {
21
+ else if (depth > 0 && isDir) {
9
22
  const directChildren = readdirSync(root, { withFileTypes: true });
10
23
  const allDescendants = directChildren.flatMap((dirent) => findPotentialNestedRoots(join(root, dirent.name), depth - 1, dirent.isDirectory()));
11
24
  return [root, ...allDescendants];
12
25
  }
13
- else if (DATA_EXTENSIONS.includes(extname(root)) &&
14
- !root.includes("sample")) {
15
- return [root];
16
- }
17
26
  else {
18
- return [];
27
+ return [root];
19
28
  }
20
29
  }
21
30
  export function findSearcheesFromAllDataDirs() {
@@ -1 +1 @@
1
- {"version":3,"file":"dataFiles.js","sourceRoot":"","sources":["../src/dataFiles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD,MAAM,UAAU,wBAAwB,CACvC,IAAY,EACZ,KAAa,EACb,SAAmB;IAEnB,MAAM,KAAK,GACV,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;IAEpE,wCAAwC;IACxC,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,EAAE;QACvB,MAAM,cAAc,GAAG,WAAW,CAAC,IAAI,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAClE,MAAM,cAAc,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CACxD,wBAAwB,CACvB,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,EACvB,KAAK,GAAG,CAAC,EACT,MAAM,CAAC,WAAW,EAAE,CACpB,CACD,CAAC;QACF,OAAO,CAAC,IAAI,EAAE,GAAG,cAAc,CAAC,CAAC;KACjC;SAAM,IACN,eAAe,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACvC,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EACvB;QACD,OAAO,CAAC,IAAI,CAAC,CAAC;KACd;SAAM;QACN,OAAO,EAAE,CAAC;KACV;AACF,CAAC;AAED,MAAM,UAAU,4BAA4B;IAC3C,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,gBAAgB,EAAE,CAAC;IACtD,OAAO,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CACnC,WAAW,CAAC,OAAO,CAAC;SAClB,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;SACtC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,wBAAwB,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC,CACjE,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"dataFiles.js","sourceRoot":"","sources":["../src/dataFiles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC/C,OAAO,EACN,0BAA0B,EAC1B,qBAAqB,EACrB,gBAAgB,GAChB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD,SAAS,6BAA6B,CAAC,IAAY,EAAE,KAAc;IAClE,MAAM,cAAc,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IACtC,IAAI,KAAK,EAAE,CAAC;QACX,OAAO,CACN,0BAA0B,CAAC,QAAQ,CAAC,cAAc,CAAC,WAAW,EAAE,CAAC;YACjE,qBAAqB,CAAC,IAAI,CAAC,cAAc,CAAC,CAC1C,CAAC;IACH,CAAC;SAAM,CAAC;QACP,OAAO,CAAC,gBAAgB,CAAC,QAAQ,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC;IAC5D,CAAC;AACF,CAAC;AACD,MAAM,UAAU,wBAAwB,CACvC,IAAY,EACZ,KAAa,EACb,SAAmB;IAEnB,MAAM,KAAK,GACV,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;IACpE,IAAI,KAAK,IAAI,CAAC,IAAI,6BAA6B,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC;QAC9D,OAAO,EAAE,CAAC;IACX,CAAC;IACD,wCAAwC;SACnC,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,EAAE,CAAC;QAC7B,MAAM,cAAc,GAAG,WAAW,CAAC,IAAI,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAClE,MAAM,cAAc,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CACxD,wBAAwB,CACvB,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,EACvB,KAAK,GAAG,CAAC,EACT,MAAM,CAAC,WAAW,EAAE,CACpB,CACD,CAAC;QACF,OAAO,CAAC,IAAI,EAAE,GAAG,cAAc,CAAC,CAAC;IAClC,CAAC;SAAM,CAAC;QACP,OAAO,CAAC,IAAI,CAAC,CAAC;IACf,CAAC;AACF,CAAC;AAED,MAAM,UAAU,4BAA4B;IAC3C,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,gBAAgB,EAAE,CAAC;IACtD,OAAO,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CACnC,WAAW,CAAC,OAAO,CAAC;SAClB,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;SACtC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,wBAAwB,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC,CACjE,CAAC;AACH,CAAC"}
package/dist/decide.js CHANGED
@@ -1,12 +1,14 @@
1
- import { existsSync, statSync, writeFileSync } from "fs";
1
+ import { existsSync, writeFileSync } from "fs";
2
2
  import path from "path";
3
3
  import { appDir } from "./configuration.js";
4
4
  import { Decision, MatchMode, RELEASE_GROUP_REGEX, TORRENT_CACHE_FOLDER, } from "./constants.js";
5
5
  import { db } from "./db.js";
6
6
  import { Label, logger } from "./logger.js";
7
+ import { findBlockedStringInReleaseMaybe } from "./preFilter.js";
7
8
  import { getRuntimeConfig } from "./runtimeConfig.js";
8
9
  import { parseTorrentFromFilename, parseTorrentFromURL, SnatchError, } from "./torrent.js";
9
- const createReasonLogger = (Title, tracker, name) => (decision, cached) => {
10
+ import { humanReadableSize } from "./utils.js";
11
+ const createReasonLogger = (Title, tracker, name) => (decision, cached, searchee, candidate) => {
10
12
  function logReason(reason) {
11
13
  logger.verbose({
12
14
  label: Label.DECIDE,
@@ -15,12 +17,14 @@ const createReasonLogger = (Title, tracker, name) => (decision, cached) => {
15
17
  }
16
18
  let reason;
17
19
  switch (decision) {
20
+ case Decision.MATCH_PARTIAL:
21
+ return;
18
22
  case Decision.MATCH_SIZE_ONLY:
19
23
  return;
20
24
  case Decision.MATCH:
21
25
  return;
22
26
  case Decision.SIZE_MISMATCH:
23
- reason = "its size does not match";
27
+ reason = `its size does not match - (${humanReadableSize(searchee.length)} -> ${humanReadableSize(candidate.size)})`;
24
28
  break;
25
29
  case Decision.NO_DOWNLOAD_LINK:
26
30
  reason = "it doesn't have a download link";
@@ -38,7 +42,14 @@ const createReasonLogger = (Title, tracker, name) => (decision, cached) => {
38
42
  reason = "it has a different file tree";
39
43
  break;
40
44
  case Decision.RELEASE_GROUP_MISMATCH:
41
- reason = "it has a different release group";
45
+ reason = `it has a different release group - (${searchee.name
46
+ .match(RELEASE_GROUP_REGEX)?.[0]
47
+ ?.trim()} -> ${candidate.name
48
+ .match(RELEASE_GROUP_REGEX)?.[0]
49
+ ?.trim()})`;
50
+ break;
51
+ case Decision.BLOCKED_RELEASE:
52
+ reason = `it matches the blocklist - ("${findBlockedStringInReleaseMaybe(searchee, getRuntimeConfig().blockList)}")`;
42
53
  break;
43
54
  default:
44
55
  reason = decision;
@@ -62,6 +73,33 @@ export function compareFileTreesIgnoringNames(candidate, searchee) {
62
73
  };
63
74
  return candidate.files.every((elOfA) => searchee.files.some((elOfB) => cmp(elOfA, elOfB)));
64
75
  }
76
+ export function compareFileTreesPartialIgnoringNames(candidate, searchee) {
77
+ const { fuzzySizeThreshold } = getRuntimeConfig();
78
+ let matchedSizes = 0;
79
+ for (const candidateFile of candidate.files) {
80
+ const searcheeHasFileSize = searchee.files.some((searcheeFile) => searcheeFile.length === candidateFile.length);
81
+ if (searcheeHasFileSize) {
82
+ matchedSizes += candidateFile.length;
83
+ }
84
+ }
85
+ return matchedSizes / candidate.length >= 1 - fuzzySizeThreshold;
86
+ }
87
+ export function compareFileTreesPartial(candidate, searchee) {
88
+ const { fuzzySizeThreshold } = getRuntimeConfig();
89
+ let matchedSizes = 0;
90
+ for (const candidateFile of candidate.files) {
91
+ let matchedSearcheeFiles = searchee.files.filter((searcheeFile) => searcheeFile.length === candidateFile.length);
92
+ if (matchedSearcheeFiles.length > 1) {
93
+ matchedSearcheeFiles = matchedSearcheeFiles.filter((searcheeFile) => searcheeFile.name === candidateFile.name);
94
+ }
95
+ if (matchedSearcheeFiles.length) {
96
+ matchedSizes += candidateFile.length;
97
+ }
98
+ }
99
+ const totalPieces = Math.ceil(candidate.length / candidate.pieceLength);
100
+ const availablePieces = Math.floor(matchedSizes / candidate.pieceLength);
101
+ return availablePieces / totalPieces >= 1 - fuzzySizeThreshold;
102
+ }
65
103
  function sizeDoesMatch(resultSize, searchee) {
66
104
  const { fuzzySizeThreshold } = getRuntimeConfig();
67
105
  const { length } = searchee;
@@ -70,24 +108,35 @@ function sizeDoesMatch(resultSize, searchee) {
70
108
  return resultSize >= lowerBound && resultSize <= upperBound;
71
109
  }
72
110
  function releaseGroupDoesMatch(searcheeName, candidateName, matchMode) {
73
- const searcheeMatch = searcheeName.match(RELEASE_GROUP_REGEX);
74
- const candidateMatch = candidateName.match(RELEASE_GROUP_REGEX);
75
- // if we are unsure, pass in risky mode but fail in safe mode
76
- if (!searcheeMatch || !candidateMatch) {
77
- return matchMode === MatchMode.RISKY;
111
+ const searcheeReleaseGroup = searcheeName
112
+ .match(RELEASE_GROUP_REGEX)?.[0]
113
+ ?.trim()
114
+ ?.toLowerCase();
115
+ const candidateReleaseGroup = candidateName
116
+ .match(RELEASE_GROUP_REGEX)?.[0]
117
+ ?.trim()
118
+ ?.toLowerCase();
119
+ if (searcheeReleaseGroup === candidateReleaseGroup) {
120
+ return true;
78
121
  }
79
- return searcheeMatch[0].toLowerCase() === candidateMatch[0].toLowerCase();
122
+ // if we are unsure, pass in risky or partial mode but fail in safe mode
123
+ if (!searcheeReleaseGroup || !candidateReleaseGroup) {
124
+ return matchMode !== MatchMode.SAFE;
125
+ }
126
+ return searcheeReleaseGroup.startsWith(candidateReleaseGroup);
80
127
  }
81
128
  async function assessCandidateHelper({ link, size, name }, searchee, hashesToExclude) {
82
- const { matchMode } = getRuntimeConfig();
129
+ const { matchMode, blockList } = getRuntimeConfig();
130
+ if (findBlockedStringInReleaseMaybe(searchee, blockList)) {
131
+ return { decision: Decision.BLOCKED_RELEASE };
132
+ }
83
133
  if (size && !sizeDoesMatch(size, searchee)) {
84
134
  return { decision: Decision.SIZE_MISMATCH };
85
135
  }
86
- if (!releaseGroupDoesMatch(searchee.name, name, matchMode)) {
87
- return { decision: Decision.RELEASE_GROUP_MISMATCH };
88
- }
89
136
  if (!link)
90
137
  return { decision: Decision.NO_DOWNLOAD_LINK };
138
+ if (!releaseGroupDoesMatch(searchee.name, name, matchMode))
139
+ return { decision: Decision.RELEASE_GROUP_MISMATCH };
91
140
  const result = await parseTorrentFromURL(link);
92
141
  if (result.isErr()) {
93
142
  return result.unwrapErrOrThrow() === SnatchError.RATE_LIMITED
@@ -98,18 +147,27 @@ async function assessCandidateHelper({ link, size, name }, searchee, hashesToExc
98
147
  if (hashesToExclude.includes(candidateMeta.infoHash)) {
99
148
  return { decision: Decision.INFO_HASH_ALREADY_EXISTS };
100
149
  }
150
+ const partialSizeMatch = compareFileTreesPartialIgnoringNames(candidateMeta, searchee);
151
+ if (!partialSizeMatch && matchMode === MatchMode.PARTIAL) {
152
+ return { decision: Decision.SIZE_MISMATCH };
153
+ }
154
+ const sizeMatch = compareFileTreesIgnoringNames(candidateMeta, searchee);
155
+ if (!sizeMatch && matchMode !== MatchMode.PARTIAL) {
156
+ return { decision: Decision.SIZE_MISMATCH };
157
+ }
101
158
  const perfectMatch = compareFileTrees(candidateMeta, searchee);
102
159
  if (perfectMatch) {
103
160
  return { decision: Decision.MATCH, metafile: candidateMeta };
104
161
  }
105
- if (!searchee.path) {
106
- return { decision: Decision.FILE_TREE_MISMATCH };
107
- }
108
- if (matchMode == MatchMode.RISKY &&
109
- !statSync(searchee.path).isDirectory() &&
110
- compareFileTreesIgnoringNames(candidateMeta, searchee)) {
162
+ if (sizeMatch &&
163
+ matchMode !== MatchMode.SAFE &&
164
+ searchee.files.length === 1) {
111
165
  return { decision: Decision.MATCH_SIZE_ONLY, metafile: candidateMeta };
112
166
  }
167
+ const partialMatch = compareFileTreesPartial(candidateMeta, searchee);
168
+ if (partialMatch && matchMode === MatchMode.PARTIAL) {
169
+ return { decision: Decision.MATCH_PARTIAL, metafile: candidateMeta };
170
+ }
113
171
  return { decision: Decision.FILE_TREE_MISMATCH };
114
172
  }
115
173
  function existsInTorrentCache(infoHash) {
@@ -124,7 +182,8 @@ function cacheTorrentFile(meta) {
124
182
  async function assessAndSaveResults(result, searchee, guid, infoHashesToExclude) {
125
183
  const assessment = await assessCandidateHelper(result, searchee, infoHashesToExclude);
126
184
  if (assessment.decision === Decision.MATCH ||
127
- assessment.decision === Decision.MATCH_SIZE_ONLY) {
185
+ assessment.decision === Decision.MATCH_SIZE_ONLY ||
186
+ assessment.decision === Decision.MATCH_PARTIAL) {
128
187
  cacheTorrentFile(assessment.metafile);
129
188
  }
130
189
  await db.transaction(async (trx) => {
@@ -138,7 +197,8 @@ async function assessAndSaveResults(result, searchee, guid, infoHashesToExclude)
138
197
  guid: guid,
139
198
  decision: assessment.decision,
140
199
  info_hash: assessment.decision === Decision.MATCH ||
141
- assessment.decision === Decision.MATCH_SIZE_ONLY
200
+ assessment.decision === Decision.MATCH_SIZE_ONLY ||
201
+ assessment.decision === Decision.MATCH_PARTIAL
142
202
  ? assessment.metafile.infoHash
143
203
  : null,
144
204
  last_seen: now,
@@ -164,10 +224,11 @@ async function assessCandidateCaching(candidate, searchee, infoHashesToExclude)
164
224
  cacheEntry.decision === Decision.DOWNLOAD_FAILED ||
165
225
  cacheEntry.decision === Decision.RATE_LIMITED) {
166
226
  assessment = await assessAndSaveResults(candidate, searchee, guid, infoHashesToExclude);
167
- logReason(assessment.decision, false);
227
+ logReason(assessment.decision, false, searchee, candidate);
168
228
  }
169
229
  else if ((cacheEntry.decision === Decision.MATCH ||
170
- cacheEntry.decision === Decision.MATCH_SIZE_ONLY) &&
230
+ cacheEntry.decision === Decision.MATCH_SIZE_ONLY ||
231
+ cacheEntry.decision === Decision.MATCH_PARTIAL) &&
171
232
  infoHashesToExclude.includes(cacheEntry.infoHash)) {
172
233
  // has been added since the last run
173
234
  assessment = { decision: Decision.INFO_HASH_ALREADY_EXISTS };
@@ -176,7 +237,8 @@ async function assessCandidateCaching(candidate, searchee, infoHashesToExclude)
176
237
  .update({ decision: Decision.INFO_HASH_ALREADY_EXISTS });
177
238
  }
178
239
  else if ((cacheEntry.decision === Decision.MATCH ||
179
- cacheEntry.decision === Decision.MATCH_SIZE_ONLY) &&
240
+ cacheEntry.decision === Decision.MATCH_SIZE_ONLY ||
241
+ cacheEntry.decision === Decision.MATCH_PARTIAL) &&
180
242
  existsInTorrentCache(cacheEntry.infoHash)) {
181
243
  // cached match
182
244
  assessment = {
@@ -185,14 +247,15 @@ async function assessCandidateCaching(candidate, searchee, infoHashesToExclude)
185
247
  };
186
248
  }
187
249
  else if (cacheEntry.decision === Decision.MATCH ||
188
- cacheEntry.decision === Decision.MATCH_SIZE_ONLY) {
250
+ cacheEntry.decision === Decision.MATCH_SIZE_ONLY ||
251
+ cacheEntry.decision === Decision.MATCH_PARTIAL) {
189
252
  assessment = await assessAndSaveResults(candidate, searchee, guid, infoHashesToExclude);
190
- logReason(assessment.decision, false);
253
+ logReason(assessment.decision, false, searchee, candidate);
191
254
  }
192
255
  else {
193
256
  // cached rejection
194
257
  assessment = { decision: cacheEntry.decision };
195
- logReason(cacheEntry.decision, true);
258
+ logReason(cacheEntry.decision, true, searchee, candidate);
196
259
  }
197
260
  // if previously known
198
261
  if (cacheEntry) {
@@ -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/diff.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"diff.js","sourceRoot":"","sources":["../src/diff.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,eAAe,CAAC;AAC3D,OAAO,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AAEzC,SAAS,IAAI,CAAC,MAAM,EAAE,MAAM;IAC3B,IAAI;QACH,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAChC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;KAClC;IAAC,OAAO,CAAC,EAAE;QACX,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;KACf;AACF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,KAAa,EAAE,MAAc;IAC1D,MAAM,SAAS,GAAG,MAAM,wBAAwB,CAAC,KAAK,CAAC,CAAC;IACxD,MAAM,UAAU,GAAG,MAAM,wBAAwB,CAAC,MAAM,CAAC,CAAC;IAC1D,MAAM,aAAa,GAAG,0BAA0B,CAAC,SAAS,CAAC,CAAC;IAC5D,MAAM,cAAc,GAAG,0BAA0B,CAAC,UAAU,CAAC,CAAC;IAC9D,OAAO,aAAa,CAAC,QAAQ,CAAC;IAC9B,OAAO,cAAc,CAAC,QAAQ,CAAC;IAC/B,IAAI,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC;AACrC,CAAC"}
1
+ {"version":3,"file":"diff.js","sourceRoot":"","sources":["../src/diff.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,eAAe,CAAC;AAC3D,OAAO,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AAEzC,SAAS,IAAI,CAAC,MAAM,EAAE,MAAM;IAC3B,IAAI,CAAC;QACJ,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAChC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;IACnC,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACZ,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAChB,CAAC;AACF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,KAAa,EAAE,MAAc;IAC1D,MAAM,SAAS,GAAG,MAAM,wBAAwB,CAAC,KAAK,CAAC,CAAC;IACxD,MAAM,UAAU,GAAG,MAAM,wBAAwB,CAAC,MAAM,CAAC,CAAC;IAC1D,MAAM,aAAa,GAAG,0BAA0B,CAAC,SAAS,CAAC,CAAC;IAC5D,MAAM,cAAc,GAAG,0BAA0B,CAAC,UAAU,CAAC,CAAC;IAC9D,OAAO,aAAa,CAAC,QAAQ,CAAC;IAC9B,OAAO,cAAc,CAAC,QAAQ,CAAC;IAC/B,IAAI,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC;AACrC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,MAAM,OAAO,cAAe,SAAQ,KAAK;IACxC,YAAY,OAAe;QAC1B,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,OAAO,IAAI,CAAC,KAAK,CAAC;IACnB,CAAC;IAED,KAAK;QACJ,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC5B,CAAC;CACD;AAED,MAAM,UAAU,qBAAqB,CAAC,CAAC;IACtC,IAAI,CAAC,YAAY,cAAc,EAAE;QAChC,CAAC,CAAC,KAAK,EAAE,CAAC;QACV,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;KACP;IACD,MAAM,CAAC,CAAC;AACT,CAAC"}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,MAAM,OAAO,cAAe,SAAQ,KAAK;IACxC,YAAY,OAAe;QAC1B,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,OAAO,IAAI,CAAC,KAAK,CAAC;IACnB,CAAC;IAED,KAAK;QACJ,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC5B,CAAC;CACD;AAED,MAAM,UAAU,qBAAqB,CAAC,CAAC;IACtC,IAAI,CAAC,YAAY,cAAc,EAAE,CAAC;QACjC,CAAC,CAAC,KAAK,EAAE,CAAC;QACV,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACR,CAAC;IACD,MAAM,CAAC,CAAC;AACT,CAAC"}
package/dist/indexers.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { db } from "./db.js";
2
2
  import { Label, logger } from "./logger.js";
3
- import { humanReadable } from "./utils.js";
3
+ import { humanReadableDate } from "./utils.js";
4
4
  export var IndexerStatus;
5
5
  (function (IndexerStatus) {
6
6
  /**
@@ -9,7 +9,7 @@ export var IndexerStatus;
9
9
  IndexerStatus["OK"] = "OK";
10
10
  IndexerStatus["RATE_LIMITED"] = "RATE_LIMITED";
11
11
  IndexerStatus["UNKNOWN_ERROR"] = "UNKNOWN_ERROR";
12
- })(IndexerStatus = IndexerStatus || (IndexerStatus = {}));
12
+ })(IndexerStatus || (IndexerStatus = {}));
13
13
  export async function getEnabledIndexers() {
14
14
  return db("indexer")
15
15
  .where({ active: true, search_cap: true, status: null })
@@ -33,7 +33,7 @@ export async function updateIndexerStatus(status, retryAfter, indexerIds) {
33
33
  if (indexerIds.length > 0) {
34
34
  logger.verbose({
35
35
  label: Label.TORZNAB,
36
- message: `Snoozing indexers ${indexerIds} with ${status} until ${humanReadable(retryAfter)}`,
36
+ message: `Snoozing indexers ${indexerIds} with ${status} until ${humanReadableDate(retryAfter)}`,
37
37
  });
38
38
  await db("indexer").whereIn("id", indexerIds).update({
39
39
  retry_after: retryAfter,
@@ -1 +1 @@
1
- {"version":3,"file":"indexers.js","sourceRoot":"","sources":["../src/indexers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAC7B,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE3C,MAAM,CAAN,IAAY,aAOX;AAPD,WAAY,aAAa;IACxB;;OAEG;IACH,0BAAS,CAAA;IACT,8CAA6B,CAAA;IAC7B,gDAA+B,CAAA;AAChC,CAAC,EAPW,aAAa,GAAb,aAAa,KAAb,aAAa,QAOxB;AAiBD,MAAM,CAAC,KAAK,UAAU,kBAAkB;IACvC,OAAO,EAAE,CAAC,SAAS,CAAC;SAClB,KAAK,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;SACvD,OAAO,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,EAAE,CAAC;SACrE,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CACd,CAAC;SACC,KAAK,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;SACzC,KAAK,CAAC,aAAa,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CACvC;SACA,MAAM,CAAC;QACP,EAAE,EAAE,IAAI;QACR,GAAG,EAAE,KAAK;QACV,MAAM,EAAE,QAAQ;QAChB,MAAM,EAAE,QAAQ;QAChB,MAAM,EAAE,QAAQ;QAChB,UAAU,EAAE,aAAa;QACzB,SAAS,EAAE,YAAY;QACvB,WAAW,EAAE,eAAe;QAC5B,cAAc,EAAE,kBAAkB;KAClC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACxC,MAAqB,EACrB,UAAkB,EAClB,UAAoB;IAEpB,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;QAC1B,MAAM,CAAC,OAAO,CAAC;YACd,KAAK,EAAE,KAAK,CAAC,OAAO;YACpB,OAAO,EAAE,qBAAqB,UAAU,SAAS,MAAM,UAAU,aAAa,CAC7E,UAAU,CACV,EAAE;SACH,CAAC,CAAC;QAEH,MAAM,EAAE,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,MAAM,CAAC;YACpD,WAAW,EAAE,UAAU;YACvB,MAAM;SACN,CAAC,CAAC;KACH;AACF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC3C,IAAY,EACZ,UAAoB;IAEpB,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE;QACnC,MAAM,EAAE,CAAC,WAAW,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;YAClC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACvB,MAAM,EAAE,EAAE,EAAE,WAAW,EAAE,GAAG,MAAM,GAAG,CAAC,UAAU,CAAC;iBAC/C,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC;iBACf,MAAM,CAAC,IAAI,CAAC;iBACZ,KAAK,EAAE,CAAC;YAEV,MAAM,GAAG,CAAC,WAAW,CAAC;iBACpB,MAAM,CAAC;gBACP,WAAW;gBACX,UAAU,EAAE,SAAS;gBACrB,aAAa,EAAE,GAAG;gBAClB,cAAc,EAAE,GAAG;aACnB,CAAC;iBACD,UAAU,CAAC,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;iBACzC,KAAK,CAAC,CAAC,aAAa,EAAE,YAAY,EAAE,eAAe,CAAC,CAAC,CAAC;QACzD,CAAC,CAAC,CAAC;KACH;AACF,CAAC"}
1
+ {"version":3,"file":"indexers.js","sourceRoot":"","sources":["../src/indexers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAC7B,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE/C,MAAM,CAAN,IAAY,aAOX;AAPD,WAAY,aAAa;IACxB;;OAEG;IACH,0BAAS,CAAA;IACT,8CAA6B,CAAA;IAC7B,gDAA+B,CAAA;AAChC,CAAC,EAPW,aAAa,KAAb,aAAa,QAOxB;AAiBD,MAAM,CAAC,KAAK,UAAU,kBAAkB;IACvC,OAAO,EAAE,CAAC,SAAS,CAAC;SAClB,KAAK,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;SACvD,OAAO,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,EAAE,CAAC;SACrE,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CACd,CAAC;SACC,KAAK,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;SACzC,KAAK,CAAC,aAAa,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CACvC;SACA,MAAM,CAAC;QACP,EAAE,EAAE,IAAI;QACR,GAAG,EAAE,KAAK;QACV,MAAM,EAAE,QAAQ;QAChB,MAAM,EAAE,QAAQ;QAChB,MAAM,EAAE,QAAQ;QAChB,UAAU,EAAE,aAAa;QACzB,SAAS,EAAE,YAAY;QACvB,WAAW,EAAE,eAAe;QAC5B,cAAc,EAAE,kBAAkB;KAClC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACxC,MAAqB,EACrB,UAAkB,EAClB,UAAoB;IAEpB,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,MAAM,CAAC,OAAO,CAAC;YACd,KAAK,EAAE,KAAK,CAAC,OAAO;YACpB,OAAO,EAAE,qBAAqB,UAAU,SAAS,MAAM,UAAU,iBAAiB,CACjF,UAAU,CACV,EAAE;SACH,CAAC,CAAC;QAEH,MAAM,EAAE,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,MAAM,CAAC;YACpD,WAAW,EAAE,UAAU;YACvB,MAAM;SACN,CAAC,CAAC;IACJ,CAAC;AACF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC3C,IAAY,EACZ,UAAoB;IAEpB,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACpC,MAAM,EAAE,CAAC,WAAW,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;YAClC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACvB,MAAM,EAAE,EAAE,EAAE,WAAW,EAAE,GAAG,MAAM,GAAG,CAAC,UAAU,CAAC;iBAC/C,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC;iBACf,MAAM,CAAC,IAAI,CAAC;iBACZ,KAAK,EAAE,CAAC;YAEV,MAAM,GAAG,CAAC,WAAW,CAAC;iBACpB,MAAM,CAAC;gBACP,WAAW;gBACX,UAAU,EAAE,SAAS;gBACrB,aAAa,EAAE,GAAG;gBAClB,cAAc,EAAE,GAAG;aACnB,CAAC;iBACD,UAAU,CAAC,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;iBACzC,KAAK,CAAC,CAAC,aAAa,EAAE,YAAY,EAAE,eAAe,CAAC,CAAC,CAAC;QACzD,CAAC,CAAC,CAAC;IACJ,CAAC;AACF,CAAC"}
package/dist/jobs.js CHANGED
@@ -5,6 +5,10 @@ import { exitOnCrossSeedErrors } from "./errors.js";
5
5
  import { Label, logger } from "./logger.js";
6
6
  import { getRuntimeConfig } from "./runtimeConfig.js";
7
7
  class Job {
8
+ name;
9
+ cadence;
10
+ exec;
11
+ isActive;
8
12
  constructor(name, cadence, exec) {
9
13
  this.name = name;
10
14
  this.cadence = cadence;
@@ -29,13 +33,17 @@ class Job {
29
33
  return false;
30
34
  }
31
35
  }
32
- const getJobs = () => {
33
- const { rssCadence, searchCadence } = getRuntimeConfig();
34
- return [
35
- rssCadence && new Job("rss", rssCadence, scanRssFeeds),
36
- searchCadence && new Job("search", searchCadence, main),
37
- ].filter(Boolean);
38
- };
36
+ function getJobs() {
37
+ const { rssCadence, searchCadence, torznab } = getRuntimeConfig();
38
+ const jobs = [];
39
+ if (torznab.length > 0) {
40
+ if (rssCadence)
41
+ jobs.push(new Job("rss", rssCadence, scanRssFeeds));
42
+ if (searchCadence)
43
+ jobs.push(new Job("search", searchCadence, main));
44
+ }
45
+ return jobs;
46
+ }
39
47
  function logNextRun(name, cadence, lastRun) {
40
48
  const now = Date.now();
41
49
  const eligibilityTs = lastRun ? lastRun + cadence : now;
package/dist/jobs.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"jobs.js","sourceRoot":"","sources":["../src/jobs.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"jobs.js","sourceRoot":"","sources":["../src/jobs.ts"],"names":[],"mappings":"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"}