cross-seed 6.0.0-1 → 6.0.0-11

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 (54) hide show
  1. package/dist/Result.js +17 -11
  2. package/dist/Result.js.map +1 -1
  3. package/dist/action.js +109 -44
  4. package/dist/action.js.map +1 -1
  5. package/dist/arr.js +187 -0
  6. package/dist/arr.js.map +1 -0
  7. package/dist/clients/Deluge.js +123 -61
  8. package/dist/clients/Deluge.js.map +1 -1
  9. package/dist/clients/QBittorrent.js +21 -18
  10. package/dist/clients/QBittorrent.js.map +1 -1
  11. package/dist/clients/RTorrent.js +3 -3
  12. package/dist/clients/RTorrent.js.map +1 -1
  13. package/dist/clients/TorrentClient.js.map +1 -1
  14. package/dist/clients/Transmission.js +3 -3
  15. package/dist/clients/Transmission.js.map +1 -1
  16. package/dist/cmd.js +9 -3
  17. package/dist/cmd.js.map +1 -1
  18. package/dist/config.template.cjs +43 -3
  19. package/dist/config.template.cjs.map +1 -1
  20. package/dist/configSchema.js +43 -27
  21. package/dist/configSchema.js.map +1 -1
  22. package/dist/configuration.js.map +1 -1
  23. package/dist/constants.js +64 -5
  24. package/dist/constants.js.map +1 -1
  25. package/dist/decide.js +128 -90
  26. package/dist/decide.js.map +1 -1
  27. package/dist/errors.js +5 -2
  28. package/dist/errors.js.map +1 -1
  29. package/dist/indexers.js +31 -4
  30. package/dist/indexers.js.map +1 -1
  31. package/dist/jobs.js +2 -0
  32. package/dist/jobs.js.map +1 -1
  33. package/dist/logger.js +16 -4
  34. package/dist/logger.js.map +1 -1
  35. package/dist/migrations/05-caps.js +16 -0
  36. package/dist/migrations/05-caps.js.map +1 -0
  37. package/dist/migrations/migrations.js +9 -1
  38. package/dist/migrations/migrations.js.map +1 -1
  39. package/dist/pipeline.js +22 -36
  40. package/dist/pipeline.js.map +1 -1
  41. package/dist/preFilter.js +14 -3
  42. package/dist/preFilter.js.map +1 -1
  43. package/dist/runtimeConfig.js.map +1 -1
  44. package/dist/searchee.js +7 -7
  45. package/dist/searchee.js.map +1 -1
  46. package/dist/startup.js +8 -0
  47. package/dist/startup.js.map +1 -1
  48. package/dist/torrent.js +25 -17
  49. package/dist/torrent.js.map +1 -1
  50. package/dist/torznab.js +188 -88
  51. package/dist/torznab.js.map +1 -1
  52. package/dist/utils.js +80 -20
  53. package/dist/utils.js.map +1 -1
  54. package/package.json +2 -1
package/dist/Result.js CHANGED
@@ -12,16 +12,17 @@ class OkResult {
12
12
  mapOk(mapper) {
13
13
  return new OkResult(mapper(this.contents));
14
14
  }
15
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
16
- mapErr(mapper) {
15
+ mapErr() {
17
16
  return this;
18
17
  }
19
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
20
- unwrapOrThrow(errToThrow) {
18
+ unwrap() {
21
19
  return this.contents;
22
20
  }
23
- unwrapErrOrThrow() {
24
- throw new Error("Tried to unwrap an OkResult's error");
21
+ unwrapOrThrow() {
22
+ return this.contents;
23
+ }
24
+ orElse() {
25
+ return this.contents;
25
26
  }
26
27
  }
27
28
  class ErrResult {
@@ -35,18 +36,20 @@ class ErrResult {
35
36
  isErr() {
36
37
  return true;
37
38
  }
38
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
39
- mapOk(mapper) {
39
+ mapOk() {
40
40
  return this;
41
41
  }
42
42
  mapErr(mapper) {
43
43
  return new ErrResult(mapper(this.contents));
44
44
  }
45
+ unwrapErr() {
46
+ return this.contents;
47
+ }
45
48
  unwrapOrThrow(errToThrow) {
46
- throw errToThrow ?? new Error("Tried to unwrap an ErrResult's error");
49
+ throw errToThrow;
47
50
  }
48
- unwrapErrOrThrow() {
49
- return this.contents;
51
+ orElse(t) {
52
+ return t;
50
53
  }
51
54
  }
52
55
  export function resultOf(value) {
@@ -55,4 +58,7 @@ export function resultOf(value) {
55
58
  export function resultOfErr(value) {
56
59
  return new ErrResult(value);
57
60
  }
61
+ export function isOk(result) {
62
+ return result.isOk();
63
+ }
58
64
  //# sourceMappingURL=Result.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Result.js","sourceRoot":"","sources":["../src/Result.ts"],"names":[],"mappings":"AASA,MAAM,QAAQ;IACI,QAAQ,CAAI;IAE7B,YAAY,QAAW;QACtB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC1B,CAAC;IAED,IAAI;QACH,OAAO,IAAI,CAAC;IACb,CAAC;IAED,KAAK;QACJ,OAAO,KAAK,CAAC;IACd,CAAC;IAED,KAAK,CAAI,MAAmB;QAC3B,OAAO,IAAI,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC5C,CAAC;IAED,6DAA6D;IAC7D,MAAM,CAAI,MAAmB;QAC5B,OAAO,IAA+B,CAAC;IACxC,CAAC;IAED,6DAA6D;IAC7D,aAAa,CAAC,UAAkB;QAC/B,OAAO,IAAI,CAAC,QAAQ,CAAC;IACtB,CAAC;IAED,gBAAgB;QACf,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;IACxD,CAAC;CACD;AAED,MAAM,SAAS;IACG,QAAQ,CAAI;IAE7B,YAAY,QAAW;QACtB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC1B,CAAC;IAED,IAAI;QACH,OAAO,KAAK,CAAC;IACd,CAAC;IAED,KAAK;QACJ,OAAO,IAAI,CAAC;IACb,CAAC;IAED,6DAA6D;IAC7D,KAAK,CAAI,MAAmB;QAC3B,OAAO,IAA+B,CAAC;IACxC,CAAC;IAED,MAAM,CAAI,MAAmB;QAC5B,OAAO,IAAI,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC7C,CAAC;IAED,aAAa,CAAC,UAAkB;QAC/B,MAAM,UAAU,IAAI,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;IACvE,CAAC;IAED,gBAAgB;QACf,OAAO,IAAI,CAAC,QAAQ,CAAC;IACtB,CAAC;CACD;AAED,MAAM,UAAU,QAAQ,CAAO,KAAQ;IACtC,OAAO,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,WAAW,CAAO,KAAQ;IACzC,OAAO,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC;AAC7B,CAAC"}
1
+ {"version":3,"file":"Result.js","sourceRoot":"","sources":["../src/Result.ts"],"names":[],"mappings":"AAAA,MAAM,QAAQ;IACI,QAAQ,CAAI;IAE7B,YAAY,QAAW;QACtB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC1B,CAAC;IAED,IAAI;QACH,OAAO,IAAI,CAAC;IACb,CAAC;IAED,KAAK;QACJ,OAAO,KAAK,CAAC;IACd,CAAC;IAED,KAAK,CAAI,MAAmB;QAC3B,OAAO,IAAI,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC5C,CAAC;IAED,MAAM;QACL,OAAO,IAAI,CAAC;IACb,CAAC;IAED,MAAM;QACL,OAAO,IAAI,CAAC,QAAQ,CAAC;IACtB,CAAC;IAED,aAAa;QACZ,OAAO,IAAI,CAAC,QAAQ,CAAC;IACtB,CAAC;IAED,MAAM;QACL,OAAO,IAAI,CAAC,QAAQ,CAAC;IACtB,CAAC;CACD;AAED,MAAM,SAAS;IACG,QAAQ,CAAI;IAE7B,YAAY,QAAW;QACtB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC1B,CAAC;IAED,IAAI;QACH,OAAO,KAAK,CAAC;IACd,CAAC;IAED,KAAK;QACJ,OAAO,IAAI,CAAC;IACb,CAAC;IAED,KAAK;QACJ,OAAO,IAAI,CAAC;IACb,CAAC;IAED,MAAM,CAAI,MAAmB;QAC5B,OAAO,IAAI,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC7C,CAAC;IAED,SAAS;QACR,OAAO,IAAI,CAAC,QAAQ,CAAC;IACtB,CAAC;IAED,aAAa,CAAC,UAAiB;QAC9B,MAAM,UAAU,CAAC;IAClB,CAAC;IAED,MAAM,CAAI,CAAI;QACb,OAAO,CAAC,CAAC;IACV,CAAC;CACD;AAID,MAAM,UAAU,QAAQ,CAAO,KAAQ;IACtC,OAAO,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,WAAW,CAAO,KAAQ;IACzC,OAAO,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,IAAI,CAAO,MAAoB;IAC9C,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;AACtB,CAAC"}
package/dist/action.js CHANGED
@@ -1,62 +1,81 @@
1
1
  import chalk from "chalk";
2
- import { existsSync, linkSync, mkdirSync, statSync, symlinkSync } from "fs";
2
+ import { existsSync, linkSync, mkdirSync, rm, statSync, symlinkSync } from "fs";
3
3
  import { dirname, join, resolve } from "path";
4
4
  import { getClient } from "./clients/TorrentClient.js";
5
- import { Action, Decision, InjectionResult, LinkType, SaveResult, } from "./constants.js";
5
+ import { Action, Decision, InjectionResult, LinkType, SaveResult, SearcheeSource, } from "./constants.js";
6
6
  import { logger } from "./logger.js";
7
7
  import { resultOf, resultOfErr } from "./Result.js";
8
8
  import { getRuntimeConfig } from "./runtimeConfig.js";
9
- import { hasVideo } from "./searchee.js";
9
+ import { createSearcheeFromPath } from "./searchee.js";
10
10
  import { saveTorrentFile } from "./torrent.js";
11
- import { getTag } from "./utils.js";
12
- function logInjectionResult(result, tracker, name, decision) {
13
- const styledName = chalk.green.bold(name);
14
- const styledTracker = chalk.bold(tracker);
11
+ import { getLogString, getMediaType } from "./utils.js";
12
+ function logActionResult(result, newMeta, searchee, tracker, decision) {
13
+ const metaLog = getLogString(newMeta, chalk.green.bold);
14
+ const searcheeLog = getLogString(searchee, chalk.magenta.bold);
15
+ const source = searchee.infoHash
16
+ ? `${SearcheeSource.TORRENT} (${searcheeLog})`
17
+ : searchee.path
18
+ ? `${SearcheeSource.DATA} (${searcheeLog})`
19
+ : `${SearcheeSource.VIRTUAL} (${searcheeLog})`;
20
+ const foundBy = `Found ${metaLog} on ${chalk.bold(tracker)} by`;
15
21
  switch (result) {
22
+ case SaveResult.SAVED:
23
+ logger.info(`${foundBy} ${chalk.green.bold(decision)} from ${source} - saved`);
24
+ break;
16
25
  case InjectionResult.SUCCESS:
17
- logger.info(`Found ${styledName} on ${styledTracker} by ${decision} - injected`);
26
+ logger.info(`${foundBy} ${chalk.green.bold(decision)} from ${source} - injected`);
18
27
  break;
19
28
  case InjectionResult.ALREADY_EXISTS:
20
- logger.info(`Found ${styledName} on ${styledTracker} by ${decision} - exists`);
29
+ logger.info(`${foundBy} ${chalk.yellow(decision)} from ${source} - exists`);
21
30
  break;
22
31
  case InjectionResult.TORRENT_NOT_COMPLETE:
23
- logger.warn(`Found ${styledName} on ${styledTracker} by ${decision} - skipping incomplete torrent`);
32
+ logger.warn(`${foundBy} ${chalk.yellow(decision)} from ${source} - incomplete torrent, saving...`);
24
33
  break;
25
34
  case InjectionResult.FAILURE:
26
35
  default:
27
- logger.error(`Found ${styledName} on ${styledTracker} by ${decision} - failed to inject, saving instead`);
36
+ logger.error(`${foundBy} ${chalk.red(decision)} from ${source} - failed to inject, saving...`);
28
37
  break;
29
38
  }
30
39
  }
31
40
  /**
32
41
  * @return the root of linked files.
33
42
  */
34
- function linkExactTree(newMeta, destinationDir, sourceRoot) {
35
- if (newMeta.files.length === 1) {
36
- return fuzzyLinkOneFile(newMeta, destinationDir, sourceRoot);
43
+ function linkExactTree(searchee, newMeta, destinationDir, sourceRoot) {
44
+ if (searchee.files.length === 1) {
45
+ return fuzzyLinkOneFile(searchee, newMeta, destinationDir, sourceRoot);
37
46
  }
47
+ let alreadyExisted = false;
38
48
  for (const newFile of newMeta.files) {
39
49
  const srcFilePath = join(dirname(sourceRoot), newFile.path);
40
50
  const destFilePath = join(destinationDir, newFile.path);
51
+ if (existsSync(destFilePath)) {
52
+ alreadyExisted = true;
53
+ continue;
54
+ }
41
55
  mkdirSync(dirname(destFilePath), { recursive: true });
42
56
  linkFile(srcFilePath, destFilePath);
43
57
  }
44
- return join(destinationDir, newMeta.name);
58
+ const contentPath = join(destinationDir, newMeta.name);
59
+ return { contentPath, alreadyExisted };
45
60
  }
46
61
  /**
47
62
  * @return the root of linked file.
48
63
  */
49
- function fuzzyLinkOneFile(newMeta, destinationDir, sourceRoot) {
50
- const srcFilePath = sourceRoot;
64
+ function fuzzyLinkOneFile(searchee, newMeta, destinationDir, sourceRoot) {
65
+ const srcFilePath = statSync(sourceRoot).isFile()
66
+ ? sourceRoot
67
+ : join(dirname(sourceRoot), searchee.files[0].path);
51
68
  const destFilePath = join(destinationDir, newMeta.files[0].path);
52
69
  mkdirSync(dirname(destFilePath), { recursive: true });
53
70
  linkFile(srcFilePath, destFilePath);
54
- return join(destinationDir, newMeta.name);
71
+ const contentPath = join(destinationDir, newMeta.name);
72
+ return { contentPath, alreadyExisted: existsSync(destFilePath) };
55
73
  }
56
74
  /**
57
75
  * @return the root of linked files.
58
76
  */
59
- function fuzzyLinkPartial(searchee, newMeta, destinationDir, sourceRoot) {
77
+ function linkFuzzyTree(searchee, newMeta, destinationDir, sourceRoot) {
78
+ let alreadyExisted = false;
60
79
  for (const newFile of newMeta.files) {
61
80
  let matchedSearcheeFiles = searchee.files.filter((searcheeFile) => searcheeFile.length === newFile.length);
62
81
  if (matchedSearcheeFiles.length > 1) {
@@ -67,69 +86,106 @@ function fuzzyLinkPartial(searchee, newMeta, destinationDir, sourceRoot) {
67
86
  ? sourceRoot
68
87
  : join(dirname(sourceRoot), matchedSearcheeFiles[0].path);
69
88
  const destFilePath = join(destinationDir, newFile.path);
89
+ if (existsSync(destFilePath)) {
90
+ alreadyExisted = true;
91
+ continue;
92
+ }
70
93
  mkdirSync(dirname(destFilePath), { recursive: true });
71
94
  linkFile(srcFilePath, destFilePath);
72
95
  }
73
96
  }
74
- return join(destinationDir, newMeta.name);
97
+ const contentPath = join(destinationDir, newMeta.name);
98
+ return { contentPath, alreadyExisted };
99
+ }
100
+ function unlinkMetafile(meta, destinationDir) {
101
+ const file = meta.files[0];
102
+ let rootFolder = file.path;
103
+ let parent = dirname(rootFolder);
104
+ while (parent !== ".") {
105
+ rootFolder = parent;
106
+ parent = dirname(rootFolder);
107
+ }
108
+ const fullPath = join(destinationDir, rootFolder);
109
+ if (!existsSync(fullPath))
110
+ return;
111
+ if (resolve(fullPath) === resolve(destinationDir))
112
+ return;
113
+ logger.verbose(`Unlinking ${fullPath}`);
114
+ rm(fullPath, { recursive: true }, () => { });
75
115
  }
76
116
  async function linkAllFilesInMetafile(searchee, newMeta, tracker, decision) {
77
117
  const { linkDir, flatLinking } = getRuntimeConfig();
78
118
  const fullLinkDir = flatLinking ? linkDir : join(linkDir, tracker);
79
119
  let sourceRoot;
80
120
  if (searchee.path) {
121
+ if (!existsSync(searchee.path)) {
122
+ logger.error(`Linking failed, ${searchee.path} not found. Make sure Docker volume mounts are set up properly.`);
123
+ return resultOfErr("MISSING_DATA");
124
+ }
125
+ const result = await createSearcheeFromPath(searchee.path);
126
+ if (result.isErr()) {
127
+ return resultOfErr("TORRENT_NOT_FOUND");
128
+ }
129
+ const refreshedSearchee = result.unwrap();
130
+ if (searchee.length !== refreshedSearchee.length) {
131
+ return resultOfErr("TORRENT_NOT_COMPLETE");
132
+ }
81
133
  sourceRoot = searchee.path;
82
134
  }
83
135
  else {
84
136
  const downloadDirResult = await getClient().getDownloadDir(searchee);
85
137
  if (downloadDirResult.isErr()) {
86
- return downloadDirResult.mapErr((e) => e === "NOT_FOUND" ? "TORRENT_NOT_FOUND" : e);
138
+ return downloadDirResult.mapErr((e) => e === "NOT_FOUND" || e === "UNKNOWN_ERROR"
139
+ ? "TORRENT_NOT_FOUND"
140
+ : e);
87
141
  }
88
- sourceRoot = join(downloadDirResult.unwrapOrThrow(), searchee.files.length === 1
142
+ sourceRoot = join(downloadDirResult.unwrap(), searchee.files.length === 1
89
143
  ? searchee.files[0].path
90
144
  : searchee.name);
91
- }
92
- if (!existsSync(sourceRoot)) {
93
- logger.error(`Linking failed, ${sourceRoot} not found. Make sure Docker volume mounts are set up properly.`);
94
- return resultOfErr("MISSING_DATA");
145
+ if (!existsSync(sourceRoot)) {
146
+ logger.error(`Linking failed, ${sourceRoot} not found. Make sure Docker volume mounts are set up properly.`);
147
+ return resultOfErr("MISSING_DATA");
148
+ }
95
149
  }
96
150
  if (decision === Decision.MATCH) {
97
- return resultOf(linkExactTree(newMeta, fullLinkDir, sourceRoot));
98
- }
99
- else if (decision === Decision.MATCH_SIZE_ONLY) {
100
- return resultOf(fuzzyLinkOneFile(newMeta, fullLinkDir, sourceRoot));
151
+ return resultOf(linkExactTree(searchee, newMeta, fullLinkDir, sourceRoot));
101
152
  }
102
153
  else {
103
- return resultOf(fuzzyLinkPartial(searchee, newMeta, fullLinkDir, sourceRoot));
154
+ return resultOf(linkFuzzyTree(searchee, newMeta, fullLinkDir, sourceRoot));
104
155
  }
105
156
  }
106
157
  export async function performAction(newMeta, decision, searchee, tracker) {
107
158
  const { action, linkDir } = getRuntimeConfig();
108
- const isVideo = hasVideo(searchee);
109
159
  if (action === Action.SAVE) {
110
- await saveTorrentFile(tracker, getTag(searchee.name, isVideo), newMeta);
111
- const styledName = chalk.green.bold(newMeta.name);
112
- const styledTracker = chalk.bold(tracker);
113
- logger.info(`Found ${styledName} on ${styledTracker} by ${decision} - saved`);
160
+ await saveTorrentFile(tracker, getMediaType(searchee), newMeta);
161
+ logActionResult(SaveResult.SAVED, newMeta, searchee, tracker, decision);
114
162
  return SaveResult.SAVED;
115
163
  }
116
164
  let destinationDir;
165
+ let unlinkOk = false;
117
166
  if (linkDir) {
118
167
  const linkedFilesRootResult = await linkAllFilesInMetafile(searchee, newMeta, tracker, decision);
119
168
  if (linkedFilesRootResult.isOk()) {
120
- destinationDir = dirname(linkedFilesRootResult.unwrapOrThrow());
169
+ const linkResult = linkedFilesRootResult.unwrap();
170
+ destinationDir = dirname(linkResult.contentPath);
171
+ unlinkOk = !linkResult.alreadyExisted;
121
172
  }
122
173
  else if (decision === Decision.MATCH &&
123
- linkedFilesRootResult.unwrapErrOrThrow() === "MISSING_DATA") {
174
+ linkedFilesRootResult.unwrapErr() === "MISSING_DATA") {
124
175
  logger.warn("Falling back to non-linking.");
125
176
  if (searchee.path) {
126
177
  destinationDir = dirname(searchee.path);
127
178
  }
128
179
  }
129
180
  else {
130
- logInjectionResult(InjectionResult.FAILURE, tracker, newMeta.name, decision);
131
- await saveTorrentFile(tracker, getTag(searchee.name, isVideo), newMeta);
132
- return InjectionResult.FAILURE;
181
+ const result = linkedFilesRootResult.unwrapErr();
182
+ logger.error(`Failed to link files for ${newMeta.name}: ${result}`);
183
+ const injectionResult = result === "TORRENT_NOT_COMPLETE"
184
+ ? InjectionResult.TORRENT_NOT_COMPLETE
185
+ : InjectionResult.FAILURE;
186
+ logActionResult(injectionResult, newMeta, searchee, tracker, decision);
187
+ await saveTorrentFile(tracker, getMediaType(searchee), newMeta);
188
+ return injectionResult;
133
189
  }
134
190
  }
135
191
  else if (searchee.path) {
@@ -137,9 +193,18 @@ export async function performAction(newMeta, decision, searchee, tracker) {
137
193
  destinationDir = dirname(searchee.path);
138
194
  }
139
195
  const result = await getClient().inject(newMeta, searchee, decision, destinationDir);
140
- logInjectionResult(result, tracker, newMeta.name, decision);
141
- if (result === InjectionResult.FAILURE) {
142
- await saveTorrentFile(tracker, getTag(searchee.name, isVideo), newMeta);
196
+ logActionResult(result, newMeta, searchee, tracker, decision);
197
+ if (result === InjectionResult.ALREADY_EXISTS) {
198
+ if (unlinkOk && destinationDir) {
199
+ unlinkMetafile(newMeta, destinationDir);
200
+ }
201
+ }
202
+ else if (result === InjectionResult.FAILURE ||
203
+ result === InjectionResult.TORRENT_NOT_COMPLETE) {
204
+ await saveTorrentFile(tracker, getMediaType(searchee), newMeta);
205
+ if (unlinkOk && destinationDir) {
206
+ unlinkMetafile(newMeta, destinationDir);
207
+ }
143
208
  }
144
209
  return result;
145
210
  }
@@ -1 +1 @@
1
- {"version":3,"file":"action.js","sourceRoot":"","sources":["../src/action.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"action.js","sourceRoot":"","sources":["../src/action.ts"],"names":[],"mappings":"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"}
package/dist/arr.js ADDED
@@ -0,0 +1,187 @@
1
+ import chalk from "chalk";
2
+ import ms from "ms";
3
+ import { join as posixJoin } from "node:path/posix";
4
+ import { URLSearchParams } from "node:url";
5
+ import { CrossSeedError } from "./errors.js";
6
+ import { Label, logger } from "./logger.js";
7
+ import { resultOf, resultOfErr } from "./Result.js";
8
+ import { getRuntimeConfig } from "./runtimeConfig.js";
9
+ import { cleanseSeparators, getApikey, isTruthy, MediaType, sanitizeUrl, stripExtension, } from "./utils.js";
10
+ import { RELEASE_GROUP_REGEX, REPACK_PROPER_REGEX, RESOLUTION_REGEX, } from "./constants.js";
11
+ export async function validateUArrLs() {
12
+ const { sonarr, radarr } = getRuntimeConfig();
13
+ if (sonarr) {
14
+ const urls = sonarr.map((str) => new URL(str));
15
+ for (const url of urls) {
16
+ if (!url.searchParams.has("apikey")) {
17
+ throw new CrossSeedError(`Sonarr url ${url} does not specify an apikey`);
18
+ }
19
+ await checkArrIsActive(url.href, "Sonarr");
20
+ }
21
+ }
22
+ if (radarr) {
23
+ const urls = radarr.map((str) => new URL(str));
24
+ for (const url of urls) {
25
+ if (!url.searchParams.has("apikey")) {
26
+ throw new CrossSeedError(`Radarr url ${url} does not specify an apikey`);
27
+ }
28
+ await checkArrIsActive(url.href, "Radarr");
29
+ }
30
+ }
31
+ }
32
+ async function checkArrIsActive(uArrL, arrInstance) {
33
+ const arrPingCheck = await makeArrApiCall(uArrL, "/api");
34
+ if (arrPingCheck.isOk()) {
35
+ const arrPingResponse = arrPingCheck.unwrap();
36
+ if (!arrPingResponse?.current) {
37
+ throw new CrossSeedError(`Failed to establish a connection to ${arrInstance} URL: ${uArrL}`);
38
+ }
39
+ }
40
+ else {
41
+ const error = arrPingCheck.unwrapErr();
42
+ throw new CrossSeedError(`Could not contact ${arrInstance} at ${uArrL}`, {
43
+ cause: error.message.includes("fetch failed") && error.cause
44
+ ? error.cause
45
+ : error,
46
+ });
47
+ }
48
+ }
49
+ function getBodySampleMessage(text) {
50
+ const first1000Chars = text.substring(0, 1000);
51
+ if (first1000Chars) {
52
+ return `first 1000 characters: ${first1000Chars}`;
53
+ }
54
+ else {
55
+ return "";
56
+ }
57
+ }
58
+ async function makeArrApiCall(uArrL, resourcePath, params = new URLSearchParams()) {
59
+ const apikey = getApikey(uArrL);
60
+ const url = new URL(sanitizeUrl(uArrL));
61
+ url.pathname = posixJoin(url.pathname, resourcePath);
62
+ for (const [name, value] of params) {
63
+ url.searchParams.set(name, value);
64
+ }
65
+ let response;
66
+ try {
67
+ response = await fetch(url, {
68
+ signal: AbortSignal.timeout(ms("30 seconds")),
69
+ headers: { "X-Api-Key": apikey },
70
+ });
71
+ }
72
+ catch (networkError) {
73
+ if (networkError.name === "AbortError") {
74
+ return resultOfErr(new Error("connection timeout"));
75
+ }
76
+ return resultOfErr(networkError);
77
+ }
78
+ if (!response.ok) {
79
+ const responseText = await response.text();
80
+ const bodySampleMessage = getBodySampleMessage(responseText);
81
+ return resultOfErr(new Error(`${response.status} ${response.statusText} ${bodySampleMessage}`));
82
+ }
83
+ try {
84
+ const responseBody = await response.clone().json();
85
+ return resultOf(responseBody);
86
+ }
87
+ catch (e) {
88
+ const responseText = await response.text();
89
+ return resultOfErr(new Error(`Arr response was non-JSON. ${getBodySampleMessage(responseText)}`));
90
+ }
91
+ }
92
+ async function getMediaFromArr(uArrL, title) {
93
+ return await makeArrApiCall(uArrL, "/api/v3/parse", new URLSearchParams({ title }));
94
+ }
95
+ export function formatFoundIds(foundIds) {
96
+ return Object.entries(foundIds)
97
+ .filter(([idName]) => ["imdbid", "tmdbid", "tvdbid"].includes(idName.toLowerCase()))
98
+ .map(([idName, idValue]) => {
99
+ const name = idName.toUpperCase().replace("ID", "");
100
+ const val = idValue ?? "N/A";
101
+ return `${chalk.yellow(name)}=${chalk.white(val)}`;
102
+ })
103
+ .join(" ");
104
+ }
105
+ function logArrQueryResult(externalIds, searchTerm, label, error) {
106
+ if (error) {
107
+ if (!Object.values(externalIds).some(isTruthy)) {
108
+ logger.verbose({
109
+ label: label,
110
+ message: `Lookup failed for ${chalk.yellow(searchTerm)} - ${chalk.red(error.message)} - make sure the item is added to an Arr instance.`,
111
+ });
112
+ return;
113
+ }
114
+ logger.debug({
115
+ label: label,
116
+ message: `Failed to lookup IDs for ${chalk.yellow(searchTerm)} - (${chalk.red(String(error).split(":").slice(1)[0].trim())})`,
117
+ });
118
+ logger.debug(error);
119
+ }
120
+ else {
121
+ const foundIdsStr = formatFoundIds(externalIds);
122
+ logger.verbose({
123
+ label: label,
124
+ message: `Found media for ${chalk.green.bold(searchTerm)} -> ${foundIdsStr}`,
125
+ });
126
+ }
127
+ }
128
+ function getRelevantArrInstances(mediaType) {
129
+ const { sonarr, radarr } = getRuntimeConfig();
130
+ switch (mediaType) {
131
+ case MediaType.SEASON:
132
+ case MediaType.EPISODE:
133
+ return sonarr;
134
+ case MediaType.MOVIE:
135
+ return radarr;
136
+ case MediaType.ANIME:
137
+ case MediaType.OTHER:
138
+ return [...sonarr, ...radarr];
139
+ default:
140
+ return [];
141
+ }
142
+ }
143
+ export async function scanAllArrsForMedia(searchee, mediaType) {
144
+ const uArrLs = getRelevantArrInstances(mediaType);
145
+ if (uArrLs.length === 0) {
146
+ return resultOfErr(false);
147
+ }
148
+ const title = mediaType === MediaType.OTHER
149
+ ? cleanseSeparators(stripExtension(searchee.name)
150
+ .replace(RELEASE_GROUP_REGEX, "")
151
+ .replace(RESOLUTION_REGEX, "")
152
+ .replace(REPACK_PROPER_REGEX, ""))
153
+ : searchee.name;
154
+ let error = new Error(`No ids found for ${title} | MediaType: ${mediaType.toUpperCase()}`);
155
+ for (const uArrL of uArrLs) {
156
+ const name = mediaType === MediaType.OTHER &&
157
+ getRuntimeConfig().sonarr?.includes(uArrL)
158
+ ? `${title} S00E00` // Sonarr needs season or episode
159
+ : title;
160
+ const result = await getMediaFromArr(uArrL, name);
161
+ if (result.isErr()) {
162
+ error = result.unwrapErr();
163
+ continue;
164
+ }
165
+ const response = result.unwrap();
166
+ const ids = response.movie ?? response.series ?? {};
167
+ if (Object.values(ids).some(isTruthy)) {
168
+ const label = response.movie ? Label.RADARR : Label.SONARR;
169
+ logArrQueryResult(ids, name, label);
170
+ return resultOf(response);
171
+ }
172
+ }
173
+ logArrQueryResult({}, searchee.name, Label.ARRS, error);
174
+ return resultOfErr(false);
175
+ }
176
+ export async function getRelevantArrIds(caps, parsedMedia) {
177
+ const idSearchCaps = parsedMedia.movie
178
+ ? caps.movieIdSearch
179
+ : caps.tvIdSearch;
180
+ const ids = parsedMedia.movie ?? parsedMedia.series;
181
+ return {
182
+ tvdbid: idSearchCaps.tvdbId ? ids.tvdbId : undefined,
183
+ tmdbid: idSearchCaps.tmdbId ? ids.tmdbId : undefined,
184
+ imdbid: idSearchCaps.imdbId ? ids.imdbId : undefined,
185
+ };
186
+ }
187
+ //# sourceMappingURL=arr.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"arr.js","sourceRoot":"","sources":["../src/arr.ts"],"names":[],"mappings":"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"}