cross-seed 2.9.3 → 3.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 (86) hide show
  1. package/dist/{src/clients → clients}/QBittorrent.js +31 -37
  2. package/dist/clients/QBittorrent.js.map +1 -0
  3. package/dist/{src/clients → clients}/RTorrent.js +42 -48
  4. package/dist/clients/RTorrent.js.map +1 -0
  5. package/dist/clients/TorrentClient.js +20 -0
  6. package/dist/clients/TorrentClient.js.map +1 -0
  7. package/dist/{src/cmd.js → cmd.js} +54 -57
  8. package/dist/cmd.js.map +1 -0
  9. package/dist/{src/config.template.js → config.template.cjs} +1 -2
  10. package/dist/config.template.cjs.map +1 -0
  11. package/dist/{src/config.template.docker.js → config.template.docker.cjs} +1 -3
  12. package/dist/config.template.docker.cjs.map +1 -0
  13. package/dist/configuration.js +39 -0
  14. package/dist/configuration.js.map +1 -0
  15. package/dist/constants.js +33 -0
  16. package/dist/constants.js.map +1 -0
  17. package/dist/db.js +28 -0
  18. package/dist/db.js.map +1 -0
  19. package/dist/decide.js +132 -0
  20. package/dist/decide.js.map +1 -0
  21. package/dist/errors.js +11 -0
  22. package/dist/errors.js.map +1 -0
  23. package/dist/jackett.js +68 -0
  24. package/dist/jackett.js.map +1 -0
  25. package/dist/{src/logger.js → logger.js} +22 -25
  26. package/dist/logger.js.map +1 -0
  27. package/dist/pipeline.js +134 -0
  28. package/dist/pipeline.js.map +1 -0
  29. package/dist/preFilter.js +66 -0
  30. package/dist/preFilter.js.map +1 -0
  31. package/dist/pushNotifier.js +27 -0
  32. package/dist/pushNotifier.js.map +1 -0
  33. package/dist/runtimeConfig.js +12 -0
  34. package/dist/runtimeConfig.js.map +1 -0
  35. package/dist/searchee.js +49 -0
  36. package/dist/searchee.js.map +1 -0
  37. package/dist/{src/server.js → server.js} +23 -30
  38. package/dist/server.js.map +1 -0
  39. package/dist/{src/signalHandlers.js → signalHandlers.js} +0 -0
  40. package/dist/signalHandlers.js.map +1 -0
  41. package/dist/startup.js +24 -0
  42. package/dist/startup.js.map +1 -0
  43. package/dist/torrent.js +128 -0
  44. package/dist/torrent.js.map +1 -0
  45. package/dist/utils.js +28 -0
  46. package/dist/utils.js.map +1 -0
  47. package/package.json +21 -25
  48. package/dist/package.json +0 -68
  49. package/dist/src/clients/QBittorrent.js.map +0 -1
  50. package/dist/src/clients/RTorrent.js.map +0 -1
  51. package/dist/src/clients/TorrentClient.js +0 -27
  52. package/dist/src/clients/TorrentClient.js.map +0 -1
  53. package/dist/src/cmd.js.map +0 -1
  54. package/dist/src/config.template.docker.js.map +0 -1
  55. package/dist/src/config.template.js.map +0 -1
  56. package/dist/src/configuration.js +0 -66
  57. package/dist/src/configuration.js.map +0 -1
  58. package/dist/src/constants.js +0 -39
  59. package/dist/src/constants.js.map +0 -1
  60. package/dist/src/db.js +0 -34
  61. package/dist/src/db.js.map +0 -1
  62. package/dist/src/decide.js +0 -143
  63. package/dist/src/decide.js.map +0 -1
  64. package/dist/src/errors.js +0 -15
  65. package/dist/src/errors.js.map +0 -1
  66. package/dist/src/jackett.js +0 -76
  67. package/dist/src/jackett.js.map +0 -1
  68. package/dist/src/logger.js.map +0 -1
  69. package/dist/src/pipeline.js +0 -140
  70. package/dist/src/pipeline.js.map +0 -1
  71. package/dist/src/preFilter.js +0 -77
  72. package/dist/src/preFilter.js.map +0 -1
  73. package/dist/src/pushNotifier.js +0 -35
  74. package/dist/src/pushNotifier.js.map +0 -1
  75. package/dist/src/runtimeConfig.js +0 -17
  76. package/dist/src/runtimeConfig.js.map +0 -1
  77. package/dist/src/searchee.js +0 -72
  78. package/dist/src/searchee.js.map +0 -1
  79. package/dist/src/server.js.map +0 -1
  80. package/dist/src/signalHandlers.js.map +0 -1
  81. package/dist/src/startup.js +0 -28
  82. package/dist/src/startup.js.map +0 -1
  83. package/dist/src/torrent.js +0 -169
  84. package/dist/src/torrent.js.map +0 -1
  85. package/dist/src/utils.js +0 -39
  86. package/dist/src/utils.js.map +0 -1
@@ -1,77 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.filterTimestamps = exports.filterDupes = exports.filterByContent = void 0;
7
- const lodash_1 = require("lodash");
8
- const path_1 = __importDefault(require("path"));
9
- const constants_1 = require("./constants");
10
- const db_1 = __importDefault(require("./db"));
11
- const logger_1 = require("./logger");
12
- const runtimeConfig_1 = require("./runtimeConfig");
13
- const utils_1 = require("./utils");
14
- const extensionsWithDots = constants_1.EXTENSIONS.map((e) => `.${e}`);
15
- function filterByContent(searchee) {
16
- const { includeEpisodes, searchAll } = runtimeConfig_1.getRuntimeConfig();
17
- if (searchAll)
18
- return true;
19
- function logReason(reason) {
20
- logger_1.logger.verbose({
21
- label: logger_1.Label.PREFILTER,
22
- message: `Torrent ${searchee.name} was not selected for searching because ${reason}`,
23
- });
24
- }
25
- if (!includeEpisodes &&
26
- searchee.files.length === 1 &&
27
- constants_1.EP_REGEX.test(searchee.files[0].name)) {
28
- logReason("it is a single episode");
29
- return false;
30
- }
31
- const allVideos = searchee.files.every((file) => extensionsWithDots.includes(path_1.default.extname(file.name)));
32
- if (!allVideos) {
33
- logReason("not all files are videos");
34
- return false;
35
- }
36
- return true;
37
- }
38
- exports.filterByContent = filterByContent;
39
- function filterDupes(searchees) {
40
- const filtered = lodash_1.uniqBy(searchees, "name");
41
- const numDupes = searchees.length - filtered.length;
42
- if (numDupes > 0) {
43
- logger_1.logger.verbose({
44
- label: logger_1.Label.PREFILTER,
45
- message: `${numDupes} duplicates not selected for searching`,
46
- });
47
- }
48
- return filtered;
49
- }
50
- exports.filterDupes = filterDupes;
51
- function filterTimestamps(searchee) {
52
- const { excludeOlder, excludeRecentSearch } = runtimeConfig_1.getRuntimeConfig();
53
- const timestampData = db_1.default
54
- .get([constants_1.SEARCHEES, searchee.name])
55
- .value();
56
- if (!timestampData)
57
- return true;
58
- const { firstSearched, lastSearched } = timestampData;
59
- function logReason(reason) {
60
- logger_1.logger.verbose({
61
- label: logger_1.Label.PREFILTER,
62
- message: `Torrent ${searchee.name} was not selected for searching because ${reason}`,
63
- });
64
- }
65
- if (excludeOlder && firstSearched < utils_1.nMinutesAgo(excludeOlder)) {
66
- logReason(`its first search timestamp ${firstSearched} is older than ${excludeOlder} minutes ago`);
67
- return false;
68
- }
69
- if (excludeRecentSearch &&
70
- lastSearched > utils_1.nMinutesAgo(excludeRecentSearch)) {
71
- logReason(`its last search timestamp ${lastSearched} is newer than ${excludeRecentSearch} minutes ago`);
72
- return false;
73
- }
74
- return true;
75
- }
76
- exports.filterTimestamps = filterTimestamps;
77
- //# sourceMappingURL=preFilter.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"preFilter.js","sourceRoot":"","sources":["../../src/preFilter.ts"],"names":[],"mappings":"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"}
@@ -1,35 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.sendTestNotification = exports.initializePushNotifier = exports.PushNotifier = exports.pushNotifier = void 0;
7
- const node_fetch_1 = __importDefault(require("node-fetch"));
8
- const logger_1 = require("./logger");
9
- const runtimeConfig_1 = require("./runtimeConfig");
10
- class PushNotifier {
11
- constructor(url) {
12
- this.url = url;
13
- }
14
- notify({ title = "cross-seed", body, ...rest }) {
15
- if (this.url) {
16
- node_fetch_1.default(this.url, {
17
- method: "POST",
18
- headers: { "Content-Type": "application/json" },
19
- body: JSON.stringify({ title, body, ...rest }),
20
- });
21
- }
22
- }
23
- }
24
- exports.PushNotifier = PushNotifier;
25
- function initializePushNotifier() {
26
- const { notificationWebhookUrl } = runtimeConfig_1.getRuntimeConfig();
27
- exports.pushNotifier = new PushNotifier(notificationWebhookUrl);
28
- }
29
- exports.initializePushNotifier = initializePushNotifier;
30
- function sendTestNotification() {
31
- exports.pushNotifier.notify({ body: "Test" });
32
- logger_1.logger.info("Sent test notification");
33
- }
34
- exports.sendTestNotification = sendTestNotification;
35
- //# sourceMappingURL=pushNotifier.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"pushNotifier.js","sourceRoot":"","sources":["../../src/pushNotifier.ts"],"names":[],"mappings":";;;;;;AAAA,4DAA+B;AAC/B,qCAAkC;AAClC,mDAAmD;AAUnD,MAAa,YAAY;IAExB,YAAY,GAAW;QACtB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;IAChB,CAAC;IAED,MAAM,CAAC,EAAE,KAAK,GAAG,YAAY,EAAE,IAAI,EAAE,GAAG,IAAI,EAAoB;QAC/D,IAAI,IAAI,CAAC,GAAG,EAAE;YACb,oBAAK,CAAC,IAAI,CAAC,GAAG,EAAE;gBACf,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;gBAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,CAAC;aAC9C,CAAC,CAAC;SACH;IACF,CAAC;CACD;AAfD,oCAeC;AAED,SAAgB,sBAAsB;IACrC,MAAM,EAAE,sBAAsB,EAAE,GAAG,gCAAgB,EAAE,CAAC;IACtD,oBAAY,GAAG,IAAI,YAAY,CAAC,sBAAsB,CAAC,CAAC;AACzD,CAAC;AAHD,wDAGC;AAED,SAAgB,oBAAoB;IACnC,oBAAY,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IACtC,eAAM,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;AACvC,CAAC;AAHD,oDAGC"}
@@ -1,17 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getRuntimeConfig = exports.setRuntimeConfig = exports.EmptyNonceOptions = void 0;
4
- exports.EmptyNonceOptions = {
5
- trackers: undefined,
6
- outputDir: undefined,
7
- };
8
- let runtimeConfig;
9
- function setRuntimeConfig(configObj) {
10
- runtimeConfig = configObj;
11
- }
12
- exports.setRuntimeConfig = setRuntimeConfig;
13
- function getRuntimeConfig() {
14
- return runtimeConfig;
15
- }
16
- exports.getRuntimeConfig = getRuntimeConfig;
17
- //# sourceMappingURL=runtimeConfig.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"runtimeConfig.js","sourceRoot":"","sources":["../../src/runtimeConfig.ts"],"names":[],"mappings":";;;AAyBa,QAAA,iBAAiB,GAAG;IAChC,QAAQ,EAAE,SAAS;IACnB,SAAS,EAAE,SAAS;CACpB,CAAC;AAEF,IAAI,aAA4B,CAAC;AAEjC,SAAgB,gBAAgB,CAAC,SAAwB;IACxD,aAAa,GAAG,SAAS,CAAC;AAC3B,CAAC;AAFD,4CAEC;AAED,SAAgB,gBAAgB;IAC/B,OAAO,aAAa,CAAC;AACtB,CAAC;AAFD,4CAEC"}
@@ -1,72 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
- }) : (function(o, m, k, k2) {
6
- if (k2 === undefined) k2 = k;
7
- o[k2] = m[k];
8
- }));
9
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
10
- Object.defineProperty(o, "default", { enumerable: true, value: v });
11
- }) : function(o, v) {
12
- o["default"] = v;
13
- });
14
- var __importStar = (this && this.__importStar) || function (mod) {
15
- if (mod && mod.__esModule) return mod;
16
- var result = {};
17
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
- __setModuleDefault(result, mod);
19
- return result;
20
- };
21
- Object.defineProperty(exports, "__esModule", { value: true });
22
- exports.createSearcheeFromTorrentFile = void 0;
23
- const lodash_1 = require("lodash");
24
- const path_1 = __importStar(require("path"));
25
- const runtimeConfig_1 = require("./runtimeConfig");
26
- const torrent_1 = require("./torrent");
27
- const logger_1 = require("./logger");
28
- function getFilesFromTorrent(meta) {
29
- if (!meta.info.files) {
30
- return [
31
- {
32
- name: meta.name,
33
- path: meta.name,
34
- length: meta.length,
35
- },
36
- ];
37
- }
38
- const unsortedFiles = meta.info.files.map((file) => {
39
- const rawPathSegments = file["path.utf-8"] || file.path;
40
- const pathSegments = rawPathSegments.map((s) => s.toString());
41
- return {
42
- name: pathSegments[pathSegments.length - 1],
43
- length: file.length,
44
- // Note that we don't use path.join here because of
45
- // https://github.com/mmgoodnow/cross-seed/issues/46.
46
- // path.join ignores zero-length path segments,
47
- // which we do not want.
48
- path: [meta.name, ...pathSegments].join(path_1.default.sep),
49
- };
50
- });
51
- return lodash_1.sortBy(unsortedFiles, "path");
52
- }
53
- async function createSearcheeFromTorrentFile(filename) {
54
- const { torrentDir } = runtimeConfig_1.getRuntimeConfig();
55
- const fullPath = path_1.join(torrentDir, filename);
56
- try {
57
- const meta = await torrent_1.parseTorrentFromFilename(fullPath);
58
- return {
59
- files: getFilesFromTorrent(meta),
60
- infoHash: meta.infoHash,
61
- name: meta.name,
62
- length: meta.length,
63
- };
64
- }
65
- catch (e) {
66
- logger_1.logger.error(`Failed to parse ${filename}`);
67
- logger_1.logger.debug(e);
68
- return e;
69
- }
70
- }
71
- exports.createSearcheeFromTorrentFile = createSearcheeFromTorrentFile;
72
- //# sourceMappingURL=searchee.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"searchee.js","sourceRoot":"","sources":["../../src/searchee.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAAA,mCAAgC;AAEhC,6CAAkC;AAClC,mDAAmD;AACnD,uCAAqD;AAErD,qCAAkC;AAelC,SAAS,mBAAmB,CAAC,IAAc;IAC1C,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;QACrB,OAAO;YACN;gBACC,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,MAAM,EAAE,IAAI,CAAC,MAAM;aACnB;SACD,CAAC;KACF;IAED,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QAClD,MAAM,eAAe,GAAa,IAAI,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC;QAClE,MAAM,YAAY,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC9D,OAAO;YACN,IAAI,EAAE,YAAY,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;YAC3C,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,mDAAmD;YACnD,qDAAqD;YACrD,+CAA+C;YAC/C,wBAAwB;YACxB,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,YAAY,CAAC,CAAC,IAAI,CAAC,cAAI,CAAC,GAAG,CAAC;SACjD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,eAAM,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;AACtC,CAAC;AAEM,KAAK,UAAU,6BAA6B,CAClD,QAAgB;IAEhB,MAAM,EAAE,UAAU,EAAE,GAAG,gCAAgB,EAAE,CAAC;IAC1C,MAAM,QAAQ,GAAG,WAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IAC5C,IAAI;QACH,MAAM,IAAI,GAAG,MAAM,kCAAwB,CAAC,QAAQ,CAAC,CAAC;QACtD,OAAO;YACN,KAAK,EAAE,mBAAmB,CAAC,IAAI,CAAC;YAChC,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,MAAM,EAAE,IAAI,CAAC,MAAM;SACnB,CAAC;KACF;IAAC,OAAO,CAAC,EAAE;QACX,eAAM,CAAC,KAAK,CAAC,mBAAmB,QAAQ,EAAE,CAAC,CAAC;QAC5C,eAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAChB,OAAO,CAAC,CAAC;KACT;AACF,CAAC;AAlBD,sEAkBC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/server.ts"],"names":[],"mappings":";;;;;;AAAA,gDAAwB;AACxB,mCAA8B;AAC9B,6CAA+C;AAC/C,+BAA+B;AAC/B,qCAAyC;AACzC,yCAA6D;AAI7D,SAAS,OAAO,CAAC,GAAG;IACnB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC9B,MAAM,MAAM,GAAG,EAAE,CAAC;QAClB,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;YACxB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC/B,CAAC,CAAC,CAAC;QACH,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,IAAI,EAAE;YACxB,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QAC1B,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,SAAS,CAAC,IAAI;IACtB,IAAI,MAAM,CAAC;IACX,IAAI;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;KAC1B;IAAC,OAAO,CAAC,EAAE;QACX,MAAM,GAAG,mBAAO,CAAC,IAAI,CAAC,CAAC;KACvB;IAED,kBAAkB;IAClB;QACC,IAAI,UAAU,IAAI,MAAM,EAAE;YACzB,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;SAChD;QACD,IAAI,UAAU,IAAI,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE;YAC5D,MAAM,CAAC,QAAQ,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;SACpC;KACD;IAED,IAAI,MAAM,IAAI,MAAM,IAAI,UAAU,IAAI,MAAM,EAAE;QAC7C,OAAO,MAAM,CAAC;KACd;IAED,MAAM,IAAI,KAAK,CAAC,kCAAkC,IAAI,GAAG,CAAC,CAAC;AAC5D,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,GAAG,EAAE,GAAG;IACpC,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,EAAE;QAC1B,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QACnB,GAAG,CAAC,GAAG,EAAE,CAAC;QACV,OAAO;KACP;IACD,IAAI,GAAG,CAAC,GAAG,KAAK,cAAc,EAAE;QAC/B,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QACnB,GAAG,CAAC,GAAG,EAAE,CAAC;QACV,OAAO;KACP;IACD,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC;IACnC,MAAM,IAAI,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;IAChC,MAAM,QAAQ,GAAmB,aAAI,CAAC,IAAI,EAAE,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;IAClE,MAAM,YAAY,GAAiB,aAAI,CAAC,IAAI,EAAE,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC;IAEzE,IAAI,CAAC,QAAQ,EAAE;QACd,eAAM,CAAC,KAAK,CAAC;YACZ,KAAK,EAAE,cAAK,CAAC,MAAM;YACnB,OAAO,EAAE,sCAAsC;SAC/C,CAAC,CAAC;QACH,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QACnB,GAAG,CAAC,GAAG,EAAE,CAAC;KACV;IAED,MAAM,WAAW,GAAG,cAAO,CAAC,QAAQ,CAAC,CAAC;IAEtC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IACnB,GAAG,CAAC,GAAG,EAAE,CAAC;IAEV,eAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,cAAK,CAAC,MAAM,EAAE,OAAO,EAAE,aAAa,WAAW,EAAE,EAAE,CAAC,CAAC;IAE1E,IAAI;QACH,IAAI,QAAQ,GAAG,IAAI,CAAC;QACpB,IAAI,QAAQ,EAAE;YACb,QAAQ,GAAG,MAAM,0CAA+B,CAC/C,QAAQ,EACR,YAAY,CACZ,CAAC;SACF;QAED,IAAI,QAAQ,KAAK,IAAI,EAAE;YACtB,eAAM,CAAC,IAAI,CAAC;gBACX,KAAK,EAAE,cAAK,CAAC,MAAM;gBACnB,OAAO,EAAE,sBAAsB,WAAW,EAAE;aAC5C,CAAC,CAAC;SACH;aAAM;YACN,eAAM,CAAC,IAAI,CAAC;gBACX,KAAK,EAAE,cAAK,CAAC,MAAM;gBACnB,OAAO,EAAE,SAAS,QAAQ,iBAAiB,WAAW,EAAE;aACxD,CAAC,CAAC;SACH;KACD;IAAC,OAAO,CAAC,EAAE;QACX,eAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;KAChB;AACF,CAAC;AAEM,KAAK,UAAU,KAAK;IAC1B,MAAM,MAAM,GAAG,cAAI,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC;IAChD,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACpB,eAAM,CAAC,IAAI,CAAC;QACX,KAAK,EAAE,cAAK,CAAC,MAAM;QACnB,OAAO,EAAE,6CAA6C;KACtD,CAAC,CAAC;AACJ,CAAC;AAPD,sBAOC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"signalHandlers.js","sourceRoot":"","sources":["../../src/signalHandlers.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;AACnC,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC"}
@@ -1,28 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.doStartupValidation = void 0;
4
- const TorrentClient_1 = require("./clients/TorrentClient");
5
- const errors_1 = require("./errors");
6
- const jackett_1 = require("./jackett");
7
- const logger_1 = require("./logger");
8
- const runtimeConfig_1 = require("./runtimeConfig");
9
- const torrent_1 = require("./torrent");
10
- function validateOptions() {
11
- const { action, rtorrentRpcUrl, qbittorrentUrl } = runtimeConfig_1.getRuntimeConfig();
12
- if (action === "inject" && !(rtorrentRpcUrl || qbittorrentUrl)) {
13
- throw new errors_1.CrossSeedError("You need to specify --rtorrent-rpc-url or --qbittorrent-url when using '-A inject'.");
14
- }
15
- }
16
- async function doStartupValidation() {
17
- logger_1.logger.info("Validating your configuration...");
18
- validateOptions();
19
- const downloadClient = TorrentClient_1.getClient();
20
- await Promise.all([
21
- jackett_1.validateJackettApi(),
22
- downloadClient === null || downloadClient === void 0 ? void 0 : downloadClient.validateConfig(),
23
- torrent_1.validateTorrentDir(),
24
- ].filter(Boolean));
25
- logger_1.logger.info("Your configuration is valid!");
26
- }
27
- exports.doStartupValidation = doStartupValidation;
28
- //# sourceMappingURL=startup.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"startup.js","sourceRoot":"","sources":["../../src/startup.ts"],"names":[],"mappings":";;;AAAA,2DAAoD;AACpD,qCAA0C;AAC1C,uCAA+C;AAC/C,qCAAkC;AAClC,mDAAmD;AACnD,uCAA+C;AAE/C,SAAS,eAAe;IACvB,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,cAAc,EAAE,GAAG,gCAAgB,EAAE,CAAC;IACtE,IAAI,MAAM,KAAK,QAAQ,IAAI,CAAC,CAAC,cAAc,IAAI,cAAc,CAAC,EAAE;QAC/D,MAAM,IAAI,uBAAc,CACvB,qFAAqF,CACrF,CAAC;KACF;AACF,CAAC;AAEM,KAAK,UAAU,mBAAmB;IACxC,eAAM,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;IAChD,eAAe,EAAE,CAAC;IAClB,MAAM,cAAc,GAAG,yBAAS,EAAE,CAAC;IACnC,MAAM,OAAO,CAAC,GAAG,CAChB;QACC,4BAAkB,EAAE;QACpB,cAAc,aAAd,cAAc,uBAAd,cAAc,CAAE,cAAc,EAAE;QAChC,4BAAkB,EAAE;KACpB,CAAC,MAAM,CAAC,OAAO,CAAC,CACjB,CAAC;IACF,eAAM,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;AAC7C,CAAC;AAZD,kDAYC"}
@@ -1,169 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
- }) : (function(o, m, k, k2) {
6
- if (k2 === undefined) k2 = k;
7
- o[k2] = m[k];
8
- }));
9
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
10
- Object.defineProperty(o, "default", { enumerable: true, value: v });
11
- }) : function(o, v) {
12
- o["default"] = v;
13
- });
14
- var __importStar = (this && this.__importStar) || function (mod) {
15
- if (mod && mod.__esModule) return mod;
16
- var result = {};
17
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
- __setModuleDefault(result, mod);
19
- return result;
20
- };
21
- var __importDefault = (this && this.__importDefault) || function (mod) {
22
- return (mod && mod.__esModule) ? mod : { "default": mod };
23
- };
24
- Object.defineProperty(exports, "__esModule", { value: true });
25
- exports.getTorrentByCriteria = exports.loadTorrentDirLight = exports.validateTorrentDir = exports.getInfoHashesToExclude = exports.indexNewTorrents = exports.findAllTorrentFilesInDir = exports.saveTorrentFile = exports.parseTorrentFromURL = exports.parseTorrentFromFilename = void 0;
26
- const fs_1 = __importStar(require("fs"));
27
- const parse_torrent_1 = __importDefault(require("parse-torrent"));
28
- const path_1 = __importDefault(require("path"));
29
- const simple_get_1 = require("simple-get");
30
- const util_1 = require("util");
31
- const constants_1 = require("./constants");
32
- const db_1 = __importDefault(require("./db"));
33
- const errors_1 = require("./errors");
34
- const logger_1 = require("./logger");
35
- const runtimeConfig_1 = require("./runtimeConfig");
36
- const searchee_1 = require("./searchee");
37
- const utils_1 = require("./utils");
38
- async function parseTorrentFromFilename(filename) {
39
- const data = await fs_1.promises.readFile(filename);
40
- return parse_torrent_1.default(data);
41
- }
42
- exports.parseTorrentFromFilename = parseTorrentFromFilename;
43
- async function parseTorrentFromURL(url) {
44
- var _a;
45
- let response;
46
- try {
47
- response = await new Promise((resolve, reject) => {
48
- simple_get_1.concat({ url, followRedirects: false }, (err, res, data) => {
49
- if (err)
50
- return reject(err);
51
- res.data = data;
52
- return resolve(res);
53
- });
54
- });
55
- }
56
- catch (e) {
57
- logger_1.logger.error(`failed to access ${url}`);
58
- logger_1.logger.debug(e);
59
- return null;
60
- }
61
- if (response.statusCode < 200 || response.statusCode >= 300) {
62
- if (response.statusCode >= 300 &&
63
- response.statusCode < 400 &&
64
- ((_a = response.headers.location) === null || _a === void 0 ? void 0 : _a.startsWith("magnet:"))) {
65
- logger_1.logger.error(`Unsupported: magnet link detected at ${url}`);
66
- return null;
67
- }
68
- else {
69
- logger_1.logger.error(`error downloading torrent at ${url}: ${response.statusCode} ${response.statusMessage}`);
70
- logger_1.logger.debug("response: %s", response.data);
71
- logger_1.logger.debug("headers: %s", response.headers);
72
- return null;
73
- }
74
- }
75
- try {
76
- return parse_torrent_1.default(response.data);
77
- }
78
- catch (e) {
79
- logger_1.logger.error(`invalid torrent contents at ${url}`);
80
- logger_1.logger.debug(e);
81
- return null;
82
- }
83
- }
84
- exports.parseTorrentFromURL = parseTorrentFromURL;
85
- function saveTorrentFile(tracker, tag = "", info, nonceOptions) {
86
- const { outputDir: runtimeConfigOutputDir } = runtimeConfig_1.getRuntimeConfig();
87
- const { outputDir = runtimeConfigOutputDir } = nonceOptions;
88
- const buf = parse_torrent_1.default.toTorrentFile(info);
89
- const name = utils_1.stripExtension(info.name);
90
- const filename = `[${tag}][${tracker}]${name}.torrent`;
91
- fs_1.default.writeFileSync(path_1.default.join(outputDir, filename), buf, { mode: 0o644 });
92
- }
93
- exports.saveTorrentFile = saveTorrentFile;
94
- async function findAllTorrentFilesInDir(torrentDir) {
95
- return (await fs_1.promises.readdir(torrentDir))
96
- .filter((fn) => path_1.default.extname(fn) === ".torrent")
97
- .sort()
98
- .map((fn) => path_1.default.resolve(path_1.default.join(torrentDir, fn)));
99
- }
100
- exports.findAllTorrentFilesInDir = findAllTorrentFilesInDir;
101
- async function indexNewTorrents() {
102
- const { torrentDir } = runtimeConfig_1.getRuntimeConfig();
103
- const dirContents = await findAllTorrentFilesInDir(torrentDir);
104
- for (const filepath of dirContents) {
105
- const doesAlreadyExist = db_1.default
106
- .get(constants_1.INDEXED_TORRENTS)
107
- .find((indexEntry) => indexEntry.filepath === filepath)
108
- .value();
109
- if (!doesAlreadyExist) {
110
- let meta;
111
- try {
112
- meta = await parseTorrentFromFilename(filepath);
113
- }
114
- catch (e) {
115
- logger_1.logger.error(`Failed to parse ${filepath}`);
116
- logger_1.logger.debug(e);
117
- continue;
118
- }
119
- db_1.default.get(constants_1.INDEXED_TORRENTS).value().push({
120
- filepath,
121
- infoHash: meta.infoHash,
122
- name: meta.name,
123
- });
124
- }
125
- }
126
- db_1.default.set(constants_1.INDEXED_TORRENTS, db_1.default
127
- .get(constants_1.INDEXED_TORRENTS)
128
- .value()
129
- .filter((e) => dirContents.includes(e.filepath))).value();
130
- db_1.default.write();
131
- }
132
- exports.indexNewTorrents = indexNewTorrents;
133
- function getInfoHashesToExclude() {
134
- return db_1.default
135
- .get(constants_1.INDEXED_TORRENTS)
136
- .value()
137
- .map((t) => t.infoHash);
138
- }
139
- exports.getInfoHashesToExclude = getInfoHashesToExclude;
140
- async function validateTorrentDir() {
141
- const { torrentDir } = runtimeConfig_1.getRuntimeConfig();
142
- try {
143
- await fs_1.promises.readdir(torrentDir);
144
- }
145
- catch (e) {
146
- throw new errors_1.CrossSeedError(`Torrent dir ${torrentDir} is invalid`);
147
- }
148
- }
149
- exports.validateTorrentDir = validateTorrentDir;
150
- async function loadTorrentDirLight() {
151
- const { torrentDir } = runtimeConfig_1.getRuntimeConfig();
152
- return Promise.all(fs_1.default
153
- .readdirSync(torrentDir)
154
- .filter((fn) => path_1.default.extname(fn) === ".torrent")
155
- .sort()
156
- .map(searchee_1.createSearcheeFromTorrentFile)).then((searcheeResults) => searcheeResults.filter(utils_1.ok));
157
- }
158
- exports.loadTorrentDirLight = loadTorrentDirLight;
159
- async function getTorrentByCriteria(criteria) {
160
- await indexNewTorrents();
161
- const findResult = db_1.default.get(constants_1.INDEXED_TORRENTS).find(criteria).value();
162
- if (findResult === undefined) {
163
- const message = `could not find a torrent with the criteria ${util_1.inspect(criteria)}`;
164
- throw new Error(message);
165
- }
166
- return parseTorrentFromFilename(findResult.filepath);
167
- }
168
- exports.getTorrentByCriteria = getTorrentByCriteria;
169
- //# sourceMappingURL=torrent.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"torrent.js","sourceRoot":"","sources":["../../src/torrent.ts"],"names":[],"mappings":"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"}
package/dist/src/utils.js DELETED
@@ -1,39 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ok = exports.getTag = exports.wait = exports.nMinutesAgo = exports.partial = exports.stripExtension = void 0;
4
- const constants_1 = require("./constants");
5
- function stripExtension(filename) {
6
- for (const ext of constants_1.EXTENSIONS) {
7
- const re = new RegExp(`\\.${ext}$`);
8
- if (re.test(filename))
9
- return filename.replace(re, "");
10
- }
11
- return filename;
12
- }
13
- exports.stripExtension = stripExtension;
14
- // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
15
- const partial = (func, ...presets) => (...args) => func(...presets, ...args);
16
- exports.partial = partial;
17
- function nMinutesAgo(n) {
18
- const date = new Date();
19
- date.setMinutes(date.getMinutes() - n);
20
- return date.getTime();
21
- }
22
- exports.nMinutesAgo = nMinutesAgo;
23
- function wait(n) {
24
- return new Promise((resolve) => setTimeout(resolve, n));
25
- }
26
- exports.wait = wait;
27
- function getTag(name) {
28
- return constants_1.EP_REGEX.test(name)
29
- ? "episode"
30
- : constants_1.SEASON_REGEX.test(name)
31
- ? "pack"
32
- : constants_1.MOVIE_REGEX.test(name)
33
- ? "movie"
34
- : "unknown";
35
- }
36
- exports.getTag = getTag;
37
- const ok = (r) => !(r instanceof Error);
38
- exports.ok = ok;
39
- //# sourceMappingURL=utils.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":";;;AAAA,2CAA8E;AAE9E,SAAgB,cAAc,CAAC,QAAgB;IAC9C,KAAK,MAAM,GAAG,IAAI,sBAAU,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;AAND,wCAMC;AAED,6EAA6E;AACtE,MAAM,OAAO,GAAG,CAAC,IAAI,EAAE,GAAG,OAAO,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,EAAE,CACxD,IAAI,CAAC,GAAG,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;AADd,QAAA,OAAO,WACO;AAE3B,SAAgB,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;AAJD,kCAIC;AAED,SAAgB,IAAI,CAAC,CAAS;IAC7B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;AACzD,CAAC;AAFD,oBAEC;AAED,SAAgB,MAAM,CAAC,IAAY;IAClC,OAAO,oBAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;QACzB,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,wBAAY,CAAC,IAAI,CAAC,IAAI,CAAC;YACzB,CAAC,CAAC,MAAM;YACR,CAAC,CAAC,uBAAW,CAAC,IAAI,CAAC,IAAI,CAAC;gBACxB,CAAC,CAAC,OAAO;gBACT,CAAC,CAAC,SAAS,CAAC;AACd,CAAC;AARD,wBAQC;AAIM,MAAM,EAAE,GAAG,CAAI,CAAY,EAAU,EAAE,CAAC,CAAC,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC;AAAxD,QAAA,EAAE,MAAsD"}