cross-seed 2.9.3 → 3.0.3

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 (91) hide show
  1. package/README.md +2 -1
  2. package/dist/{src/clients → clients}/QBittorrent.js +31 -37
  3. package/dist/clients/QBittorrent.js.map +1 -0
  4. package/dist/{src/clients → clients}/RTorrent.js +45 -48
  5. package/dist/clients/RTorrent.js.map +1 -0
  6. package/dist/clients/TorrentClient.js +20 -0
  7. package/dist/clients/TorrentClient.js.map +1 -0
  8. package/dist/cmd.js +148 -0
  9. package/dist/cmd.js.map +1 -0
  10. package/dist/{src/config.template.js → config.template.cjs} +4 -2
  11. package/dist/config.template.cjs.map +1 -0
  12. package/dist/{src/config.template.docker.js → config.template.docker.cjs} +4 -3
  13. package/dist/config.template.docker.cjs.map +1 -0
  14. package/dist/configuration.js +39 -0
  15. package/dist/configuration.js.map +1 -0
  16. package/dist/constants.js +33 -0
  17. package/dist/constants.js.map +1 -0
  18. package/dist/db.js +29 -0
  19. package/dist/db.js.map +1 -0
  20. package/dist/decide.js +142 -0
  21. package/dist/decide.js.map +1 -0
  22. package/dist/diff.js +23 -0
  23. package/dist/diff.js.map +1 -0
  24. package/dist/errors.js +11 -0
  25. package/dist/errors.js.map +1 -0
  26. package/dist/jackett.js +68 -0
  27. package/dist/jackett.js.map +1 -0
  28. package/dist/logger.js +88 -0
  29. package/dist/logger.js.map +1 -0
  30. package/dist/pipeline.js +134 -0
  31. package/dist/pipeline.js.map +1 -0
  32. package/dist/preFilter.js +66 -0
  33. package/dist/preFilter.js.map +1 -0
  34. package/dist/pushNotifier.js +27 -0
  35. package/dist/pushNotifier.js.map +1 -0
  36. package/dist/runtimeConfig.js +12 -0
  37. package/dist/runtimeConfig.js.map +1 -0
  38. package/dist/searchee.js +52 -0
  39. package/dist/searchee.js.map +1 -0
  40. package/dist/{src/server.js → server.js} +23 -30
  41. package/dist/server.js.map +1 -0
  42. package/dist/{src/signalHandlers.js → signalHandlers.js} +0 -0
  43. package/dist/signalHandlers.js.map +1 -0
  44. package/dist/startup.js +24 -0
  45. package/dist/startup.js.map +1 -0
  46. package/dist/torrent.js +128 -0
  47. package/dist/torrent.js.map +1 -0
  48. package/dist/utils.js +28 -0
  49. package/dist/utils.js.map +1 -0
  50. package/package.json +22 -25
  51. package/dist/package.json +0 -68
  52. package/dist/src/clients/QBittorrent.js.map +0 -1
  53. package/dist/src/clients/RTorrent.js.map +0 -1
  54. package/dist/src/clients/TorrentClient.js +0 -27
  55. package/dist/src/clients/TorrentClient.js.map +0 -1
  56. package/dist/src/cmd.js +0 -137
  57. package/dist/src/cmd.js.map +0 -1
  58. package/dist/src/config.template.docker.js.map +0 -1
  59. package/dist/src/config.template.js.map +0 -1
  60. package/dist/src/configuration.js +0 -66
  61. package/dist/src/configuration.js.map +0 -1
  62. package/dist/src/constants.js +0 -39
  63. package/dist/src/constants.js.map +0 -1
  64. package/dist/src/db.js +0 -34
  65. package/dist/src/db.js.map +0 -1
  66. package/dist/src/decide.js +0 -143
  67. package/dist/src/decide.js.map +0 -1
  68. package/dist/src/errors.js +0 -15
  69. package/dist/src/errors.js.map +0 -1
  70. package/dist/src/jackett.js +0 -76
  71. package/dist/src/jackett.js.map +0 -1
  72. package/dist/src/logger.js +0 -78
  73. package/dist/src/logger.js.map +0 -1
  74. package/dist/src/pipeline.js +0 -140
  75. package/dist/src/pipeline.js.map +0 -1
  76. package/dist/src/preFilter.js +0 -77
  77. package/dist/src/preFilter.js.map +0 -1
  78. package/dist/src/pushNotifier.js +0 -35
  79. package/dist/src/pushNotifier.js.map +0 -1
  80. package/dist/src/runtimeConfig.js +0 -17
  81. package/dist/src/runtimeConfig.js.map +0 -1
  82. package/dist/src/searchee.js +0 -72
  83. package/dist/src/searchee.js.map +0 -1
  84. package/dist/src/server.js.map +0 -1
  85. package/dist/src/signalHandlers.js.map +0 -1
  86. package/dist/src/startup.js +0 -28
  87. package/dist/src/startup.js.map +0 -1
  88. package/dist/src/torrent.js +0 -169
  89. package/dist/src/torrent.js.map +0 -1
  90. package/dist/src/utils.js +0 -39
  91. package/dist/src/utils.js.map +0 -1
@@ -1,78 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.initializeLogger = exports.logger = exports.Label = void 0;
4
- const path_1 = require("path");
5
- const winston_1 = require("winston");
6
- const configuration_1 = require("./configuration");
7
- const runtimeConfig_1 = require("./runtimeConfig");
8
- var Label;
9
- (function (Label) {
10
- Label["QBITTORRENT"] = "qbittorrent";
11
- Label["RTORRENT"] = "rtorrent";
12
- Label["DECIDE"] = "decide";
13
- Label["PREFILTER"] = "prefilter";
14
- Label["CONFIGDUMP"] = "configdump";
15
- Label["JACKETT"] = "jackett";
16
- Label["SERVER"] = "server";
17
- Label["STARTUP"] = "startup";
18
- })(Label = exports.Label || (exports.Label = {}));
19
- const redactionMsg = "[REDACTED]";
20
- function redactUrlPassword(message, urlStr) {
21
- let url;
22
- try {
23
- url = new URL(urlStr);
24
- if (url.password) {
25
- const urlDecodedPassword = decodeURIComponent(url.password);
26
- const urlEncodedPassword = encodeURIComponent(url.password);
27
- message = message.split(url.password).join(redactionMsg);
28
- message = message.split(urlDecodedPassword).join(redactionMsg);
29
- message = message.split(urlEncodedPassword).join(redactionMsg);
30
- }
31
- }
32
- catch (e) {
33
- // do nothing
34
- }
35
- return message;
36
- }
37
- function redactMessage(message) {
38
- const runtimeConfig = runtimeConfig_1.getRuntimeConfig();
39
- message = message.split(runtimeConfig.jackettApiKey).join(redactionMsg);
40
- for (const [key, urlStr] of Object.entries(runtimeConfig)) {
41
- if (key.endsWith("Url") && urlStr) {
42
- message = redactUrlPassword(message, urlStr);
43
- }
44
- }
45
- return message;
46
- }
47
- function initializeLogger() {
48
- configuration_1.createAppDir();
49
- exports.logger = winston_1.createLogger({
50
- level: "info",
51
- format: winston_1.format.combine(winston_1.format.timestamp({
52
- format: "YYYY-MM-DD HH:mm:ss",
53
- }), winston_1.format.errors({ stack: true }), winston_1.format.splat(), winston_1.format.colorize(), winston_1.format.printf(({ level, message, label, timestamp }) => {
54
- return `${timestamp} ${level}: ${label ? `[${label}] ` : ""}${redactMessage(message)}`;
55
- })),
56
- transports: [
57
- new winston_1.transports.File({
58
- filename: path_1.join(configuration_1.appDir(), "logs", "error.log"),
59
- level: "error",
60
- }),
61
- new winston_1.transports.File({
62
- filename: path_1.join(configuration_1.appDir(), "logs", "info.log"),
63
- }),
64
- new winston_1.transports.File({
65
- filename: path_1.join(configuration_1.appDir(), "logs", "verbose.log"),
66
- level: "silly",
67
- }),
68
- new winston_1.transports.Console({
69
- level: runtimeConfig_1.getRuntimeConfig().verbose ? "silly" : "info",
70
- format: winston_1.format.combine(winston_1.format.errors({ stack: true }), winston_1.format.splat(), winston_1.format.colorize(), winston_1.format.printf(({ level, message, label }) => {
71
- return `${level}: ${label ? `[${label}] ` : ""}${redactMessage(message)}`;
72
- })),
73
- }),
74
- ],
75
- });
76
- }
77
- exports.initializeLogger = initializeLogger;
78
- //# sourceMappingURL=logger.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/logger.ts"],"names":[],"mappings":"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"}
@@ -1,140 +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.main = exports.searchForLocalTorrentByCriteria = void 0;
7
- const chalk_1 = __importDefault(require("chalk"));
8
- const fs_1 = __importDefault(require("fs"));
9
- const TorrentClient_1 = require("./clients/TorrentClient");
10
- const constants_1 = require("./constants");
11
- const db_1 = __importDefault(require("./db"));
12
- const decide_1 = require("./decide");
13
- const jackett_1 = require("./jackett");
14
- const logger_1 = require("./logger");
15
- const preFilter_1 = require("./preFilter");
16
- const pushNotifier_1 = require("./pushNotifier");
17
- const runtimeConfig_1 = require("./runtimeConfig");
18
- const torrent_1 = require("./torrent");
19
- const utils_1 = require("./utils");
20
- async function findOnOtherSites(searchee, hashesToExclude, nonceOptions = runtimeConfig_1.EmptyNonceOptions) {
21
- const { action } = runtimeConfig_1.getRuntimeConfig();
22
- const assessEach = async (result) => ({
23
- assessment: await decide_1.assessResult(result, searchee, hashesToExclude),
24
- tracker: result.TrackerId,
25
- });
26
- const tag = utils_1.getTag(searchee.name);
27
- const query = utils_1.stripExtension(searchee.name);
28
- let response;
29
- try {
30
- response = await jackett_1.makeJackettRequest(query, nonceOptions);
31
- }
32
- catch (e) {
33
- logger_1.logger.error(`error querying Jackett for ${query}`);
34
- return 0;
35
- }
36
- const results = response.Results;
37
- const loaded = await Promise.all(results.map(assessEach));
38
- const successful = loaded.filter((e) => e.assessment.decision === constants_1.Decision.MATCH);
39
- pushNotifier_1.pushNotifier.notify({
40
- body: `Found ${searchee.name} on ${successful.length} trackers${successful.length &&
41
- // @ts-expect-error ListFormat totally exists in node 12
42
- `: ${new Intl.ListFormat("en", {
43
- style: "long",
44
- type: "conjunction",
45
- }).format(successful.map((s) => s.tracker))}`}`,
46
- extra: {
47
- infoHashes: successful.map((s) => s.assessment.info.infoHash),
48
- trackers: successful.map((s) => s.tracker),
49
- },
50
- });
51
- let isTorrentIncomplete;
52
- for (const { tracker, assessment: { info: newInfo }, } of successful) {
53
- const styledName = chalk_1.default.green.bold(newInfo.name);
54
- const styledTracker = chalk_1.default.bold(tracker);
55
- if (action === constants_1.Action.INJECT) {
56
- const result = await TorrentClient_1.getClient().inject(newInfo, searchee, nonceOptions);
57
- switch (result) {
58
- case constants_1.InjectionResult.SUCCESS:
59
- logger_1.logger.info(`Found ${styledName} on ${styledTracker} - injected`);
60
- break;
61
- case constants_1.InjectionResult.ALREADY_EXISTS:
62
- logger_1.logger.info(`Found ${styledName} on ${styledTracker} - exists`);
63
- break;
64
- case constants_1.InjectionResult.TORRENT_NOT_COMPLETE:
65
- logger_1.logger.warn(`Found ${styledName} on ${styledTracker} - skipping incomplete torrent`);
66
- isTorrentIncomplete = true;
67
- break;
68
- case constants_1.InjectionResult.FAILURE:
69
- default:
70
- logger_1.logger.error(`Found ${styledName} on ${styledTracker} - failed to inject, saving instead`);
71
- torrent_1.saveTorrentFile(tracker, tag, newInfo, nonceOptions);
72
- break;
73
- }
74
- }
75
- else {
76
- torrent_1.saveTorrentFile(tracker, tag, newInfo, nonceOptions);
77
- logger_1.logger.info(`Found ${styledName} on ${styledTracker}`);
78
- }
79
- }
80
- if (!isTorrentIncomplete) {
81
- updateSearchTimestamps(searchee.name);
82
- }
83
- return successful.length;
84
- }
85
- function updateSearchTimestamps(name) {
86
- db_1.default.get(constants_1.SEARCHEES)
87
- .defaultsDeep({
88
- [name]: {
89
- firstSearched: Date.now(),
90
- },
91
- })
92
- .set([name, "lastSearched"], Date.now())
93
- .write();
94
- }
95
- async function findMatchesBatch(samples, hashesToExclude) {
96
- const { delay, offset } = runtimeConfig_1.getRuntimeConfig();
97
- let totalFound = 0;
98
- for (const [i, sample] of samples.entries()) {
99
- const sleep = new Promise((r) => setTimeout(r, delay * 1000));
100
- const progress = chalk_1.default.blue(`[${i + 1 + offset}/${samples.length + offset}]`);
101
- const name = utils_1.stripExtension(sample.name);
102
- logger_1.logger.info("%s %s %s", progress, chalk_1.default.dim("Searching for"), name);
103
- const numFoundPromise = findOnOtherSites(sample, hashesToExclude);
104
- const [numFound] = await Promise.all([numFoundPromise, sleep]);
105
- totalFound += numFound;
106
- }
107
- return totalFound;
108
- }
109
- async function searchForLocalTorrentByCriteria(criteria, nonceOptions) {
110
- const meta = await torrent_1.getTorrentByCriteria(criteria);
111
- const hashesToExclude = torrent_1.getInfoHashesToExclude();
112
- if (!preFilter_1.filterByContent(meta))
113
- return null;
114
- return findOnOtherSites(meta, hashesToExclude, nonceOptions);
115
- }
116
- exports.searchForLocalTorrentByCriteria = searchForLocalTorrentByCriteria;
117
- async function findSearchableTorrents() {
118
- const { offset } = runtimeConfig_1.getRuntimeConfig();
119
- const parsedTorrents = await torrent_1.loadTorrentDirLight();
120
- const hashesToExclude = parsedTorrents
121
- .map((t) => t.infoHash)
122
- .filter(Boolean);
123
- const filteredTorrents = preFilter_1.filterDupes(parsedTorrents)
124
- .filter(preFilter_1.filterByContent)
125
- .filter(preFilter_1.filterTimestamps);
126
- const samples = filteredTorrents.slice(offset);
127
- logger_1.logger.info("Found %d torrents, %d suitable to search for matches", parsedTorrents.length, filteredTorrents.length);
128
- return { samples, hashesToExclude };
129
- }
130
- async function main() {
131
- const { offset, outputDir } = runtimeConfig_1.getRuntimeConfig();
132
- const { samples, hashesToExclude } = await findSearchableTorrents();
133
- if (offset > 0)
134
- logger_1.logger.info(`Starting at offset ${offset}`);
135
- fs_1.default.mkdirSync(outputDir, { recursive: true });
136
- const totalFound = await findMatchesBatch(samples, hashesToExclude);
137
- logger_1.logger.info(chalk_1.default.cyan("Done! Found %s cross seeds from %s original torrents"), chalk_1.default.bold.white(totalFound), chalk_1.default.bold.white(samples.length));
138
- }
139
- exports.main = main;
140
- //# sourceMappingURL=pipeline.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../../src/pipeline.ts"],"names":[],"mappings":"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"}
@@ -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":"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"}
@@ -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"}