cross-seed 5.9.2 → 6.0.0-1

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 (63) hide show
  1. package/README.md +7 -1
  2. package/dist/Result.js +2 -0
  3. package/dist/Result.js.map +1 -1
  4. package/dist/action.js +127 -62
  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 +104 -51
  9. package/dist/clients/Deluge.js.map +1 -1
  10. package/dist/clients/QBittorrent.js +205 -122
  11. package/dist/clients/QBittorrent.js.map +1 -1
  12. package/dist/clients/RTorrent.js +57 -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 +17 -9
  16. package/dist/clients/Transmission.js.map +1 -1
  17. package/dist/cmd.js +89 -77
  18. package/dist/cmd.js.map +1 -1
  19. package/dist/config.template.cjs +237 -144
  20. package/dist/config.template.cjs.map +1 -1
  21. package/dist/configSchema.js +177 -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 +28 -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 +118 -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/searchee.js +8 -1
  51. package/dist/searchee.js.map +1 -1
  52. package/dist/server.js.map +1 -1
  53. package/dist/startup.js +62 -23
  54. package/dist/startup.js.map +1 -1
  55. package/dist/torrent.js +14 -29
  56. package/dist/torrent.js.map +1 -1
  57. package/dist/torznab.js +56 -32
  58. package/dist/torznab.js.map +1 -1
  59. package/dist/utils.js +42 -5
  60. package/dist/utils.js.map +1 -1
  61. package/package.json +12 -12
  62. package/dist/config.template.docker.cjs +0 -236
  63. package/dist/config.template.docker.cjs.map +0 -1
@@ -1,14 +1,15 @@
1
- import { promises as fs } from "fs";
1
+ import { stat, unlink, writeFile } from "fs/promises";
2
2
  import { dirname, join, resolve, sep } from "path";
3
3
  import { inspect } from "util";
4
4
  import xmlrpc from "xmlrpc";
5
- import { InjectionResult } from "../constants.js";
5
+ import { InjectionResult, TORRENT_TAG } from "../constants.js";
6
6
  import { CrossSeedError } from "../errors.js";
7
7
  import { Label, logger } from "../logger.js";
8
8
  import { Metafile } from "../parseTorrent.js";
9
9
  import { resultOf, resultOfErr } from "../Result.js";
10
10
  import { getRuntimeConfig } from "../runtimeConfig.js";
11
- import { extractCredentialsFromUrl, wait } from "../utils.js";
11
+ import { shouldRecheck, extractCredentialsFromUrl, wait } from "../utils.js";
12
+ const COULD_NOT_FIND_INFO_HASH = "Could not find info-hash.";
12
13
  async function createLibTorrentResumeTree(meta, basePath) {
13
14
  async function getFileResumeData(file) {
14
15
  const filePathWithoutFirstSegment = file.path
@@ -16,9 +17,7 @@ async function createLibTorrentResumeTree(meta, basePath) {
16
17
  .slice(1)
17
18
  .join(sep);
18
19
  const resolvedFilePath = resolve(basePath, filePathWithoutFirstSegment);
19
- const fileStat = await fs
20
- .stat(resolvedFilePath)
21
- .catch(() => ({ isFile: () => false }));
20
+ const fileStat = await stat(resolvedFilePath).catch(() => ({ isFile: () => false }));
22
21
  if (!fileStat.isFile() || fileStat.size !== file.length) {
23
22
  logger.debug({
24
23
  label: Label.RTORRENT,
@@ -46,9 +45,10 @@ async function saveWithLibTorrentResume(meta, savePath, basePath) {
46
45
  ...meta.raw,
47
46
  libtorrent_resume: await createLibTorrentResumeTree(meta, basePath),
48
47
  };
49
- await fs.writeFile(savePath, new Metafile(rawWithLibtorrentResume).encode());
48
+ await writeFile(savePath, new Metafile(rawWithLibtorrentResume).encode());
50
49
  }
51
50
  export default class RTorrent {
51
+ client;
52
52
  constructor() {
53
53
  const { rtorrentRpcUrl } = getRuntimeConfig();
54
54
  const { href, username, password } = extractCredentialsFromUrl(rtorrentRpcUrl).unwrapOrThrow(new CrossSeedError("rTorrent url must be percent-encoded"));
@@ -85,9 +85,9 @@ export default class RTorrent {
85
85
  }
86
86
  async checkOriginalTorrent(searchee) {
87
87
  const infoHash = searchee.infoHash.toUpperCase();
88
- let result;
88
+ let response;
89
89
  try {
90
- result = await this.methodCallP("system.multicall", [
90
+ response = await this.methodCallP("system.multicall", [
91
91
  [
92
92
  {
93
93
  methodName: "d.directory",
@@ -97,27 +97,44 @@ export default class RTorrent {
97
97
  methodName: "d.complete",
98
98
  params: [infoHash],
99
99
  },
100
+ {
101
+ methodName: "d.is_multi_file",
102
+ params: [infoHash],
103
+ },
100
104
  ],
101
105
  ]);
102
106
  }
103
107
  catch (e) {
104
108
  logger.debug(e);
105
- return resultOfErr(InjectionResult.FAILURE);
109
+ return resultOfErr("FAILURE");
110
+ }
111
+ function isFault(response) {
112
+ return "faultString" in response[0];
106
113
  }
107
- // temp diag for #154
108
114
  try {
109
- const [[directoryBase], [isCompleteStr]] = result;
115
+ if (isFault(response)) {
116
+ if (response[0].faultString === COULD_NOT_FIND_INFO_HASH) {
117
+ return resultOfErr("NOT_FOUND");
118
+ }
119
+ else {
120
+ throw new Error("Unknown rTorrent fault while checking original torrent");
121
+ }
122
+ }
123
+ const [[directoryBase], [isCompleteStr], [isMultiFileStr]] = response;
110
124
  const isComplete = Boolean(Number(isCompleteStr));
111
125
  if (!isComplete) {
112
- return resultOfErr(InjectionResult.TORRENT_NOT_COMPLETE);
126
+ return resultOfErr("TORRENT_NOT_COMPLETE");
113
127
  }
114
- return resultOf({ directoryBase });
128
+ return resultOf({
129
+ directoryBase,
130
+ isMultiFile: Boolean(Number(isMultiFileStr)),
131
+ });
115
132
  }
116
133
  catch (e) {
117
134
  logger.error(e);
118
135
  logger.debug("Failure caused by server response below:");
119
- logger.debug(inspect(result));
120
- return resultOfErr(InjectionResult.FAILURE);
136
+ logger.debug(inspect(response));
137
+ return resultOfErr("FAILURE");
121
138
  }
122
139
  }
123
140
  async getDownloadLocation(meta, searchee, path) {
@@ -152,24 +169,41 @@ export default class RTorrent {
152
169
  throw new CrossSeedError(`Failed to reach rTorrent at ${rtorrentRpcUrl}`);
153
170
  }
154
171
  }
155
- async inject(meta, searchee, path) {
172
+ async getDownloadDir(searchee) {
173
+ const result = await this.checkOriginalTorrent(searchee);
174
+ return result
175
+ .mapOk(({ directoryBase, isMultiFile }) => {
176
+ return isMultiFile ? dirname(directoryBase) : directoryBase;
177
+ })
178
+ .mapErr((error) => (error === "FAILURE" ? "UNKNOWN_ERROR" : error));
179
+ }
180
+ async inject(meta, searchee, decision, path) {
156
181
  const { outputDir } = getRuntimeConfig();
157
182
  if (await this.checkForInfoHashInClient(meta.infoHash)) {
158
183
  return InjectionResult.ALREADY_EXISTS;
159
184
  }
160
185
  const result = await this.getDownloadLocation(meta, searchee, path);
161
- if (result.isErr())
162
- return result.unwrapErrOrThrow();
186
+ if (result.isErr()) {
187
+ switch (result.unwrapErrOrThrow()) {
188
+ case "NOT_FOUND":
189
+ return InjectionResult.FAILURE;
190
+ case "TORRENT_NOT_COMPLETE":
191
+ return InjectionResult.TORRENT_NOT_COMPLETE;
192
+ case "FAILURE":
193
+ return InjectionResult.FAILURE;
194
+ }
195
+ }
163
196
  const { directoryBase, basePath } = result.unwrapOrThrow();
164
197
  const torrentFilePath = resolve(outputDir, `${meta.name}.tmp.${Date.now()}.torrent`);
165
198
  await saveWithLibTorrentResume(meta, torrentFilePath, basePath);
199
+ const loadType = shouldRecheck(decision) ? "load" : "load.start";
166
200
  for (let i = 0; i < 5; i++) {
167
201
  try {
168
- await this.methodCallP("load.start", [
202
+ await this.methodCallP(loadType, [
169
203
  "",
170
204
  torrentFilePath,
171
205
  `d.directory_base.set="${directoryBase}"`,
172
- `d.custom1.set="cross-seed"`,
206
+ `d.custom1.set="${TORRENT_TAG}"`,
173
207
  `d.custom.set=addtime,${Math.round(Date.now() / 1000)}`,
174
208
  ]);
175
209
  break;
@@ -180,12 +214,12 @@ export default class RTorrent {
180
214
  }
181
215
  for (let i = 0; i < 5; i++) {
182
216
  if (await this.checkForInfoHashInClient(meta.infoHash)) {
183
- setTimeout(() => fs.unlink(torrentFilePath), 1000);
217
+ setTimeout(() => unlink(torrentFilePath), 1000);
184
218
  return InjectionResult.SUCCESS;
185
219
  }
186
220
  await wait(100 * Math.pow(2, i));
187
221
  }
188
- setTimeout(() => fs.unlink(torrentFilePath), 1000);
222
+ setTimeout(() => unlink(torrentFilePath), 1000);
189
223
  return InjectionResult.FAILURE;
190
224
  }
191
225
  }
@@ -1 +1 @@
1
- {"version":3,"file":"RTorrent.js","sourceRoot":"","sources":["../../src/clients/RTorrent.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"RTorrent.js","sourceRoot":"","sources":["../../src/clients/RTorrent.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"TorrentClient.js","sourceRoot":"","sources":["../../src/clients/TorrentClient.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvD,OAAO,WAAW,MAAM,kBAAkB,CAAC;AAC3C,OAAO,QAAQ,MAAM,eAAe,CAAC;AACrC,OAAO,YAAY,MAAM,mBAAmB,CAAC;AAC7C,OAAO,MAAM,MAAM,aAAa,CAAC;AAEjC,IAAI,YAA2B,CAAC;AAWhC,SAAS,yBAAyB;IACjC,MAAM,EAAE,cAAc,EAAE,cAAc,EAAE,kBAAkB,EAAE,YAAY,EAAE,GACzE,gBAAgB,EAAE,CAAC;IACpB,IAAI,cAAc,EAAE;QACnB,YAAY,GAAG,IAAI,QAAQ,EAAE,CAAC;KAC9B;SAAM,IAAI,cAAc,EAAE;QAC1B,YAAY,GAAG,IAAI,WAAW,EAAE,CAAC;KACjC;SAAM,IAAI,kBAAkB,EAAE;QAC9B,YAAY,GAAG,IAAI,YAAY,EAAE,CAAC;KAClC;SAAM,IAAI,YAAY,EAAE;QACxB,YAAY,GAAG,IAAI,MAAM,EAAE,CAAC;KAC5B;AACF,CAAC;AAED,MAAM,UAAU,SAAS;IACxB,IAAI,CAAC,YAAY,EAAE;QAClB,yBAAyB,EAAE,CAAC;KAC5B;IACD,OAAO,YAAY,CAAC;AACrB,CAAC"}
1
+ {"version":3,"file":"TorrentClient.js","sourceRoot":"","sources":["../../src/clients/TorrentClient.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvD,OAAO,WAAW,MAAM,kBAAkB,CAAC;AAC3C,OAAO,QAAQ,MAAM,eAAe,CAAC;AACrC,OAAO,YAAY,MAAM,mBAAmB,CAAC;AAC7C,OAAO,MAAM,MAAM,aAAa,CAAC;AAGjC,IAAI,YAA2B,CAAC;AAoBhC,SAAS,yBAAyB;IACjC,MAAM,EAAE,cAAc,EAAE,cAAc,EAAE,kBAAkB,EAAE,YAAY,EAAE,GACzE,gBAAgB,EAAE,CAAC;IACpB,IAAI,cAAc,EAAE,CAAC;QACpB,YAAY,GAAG,IAAI,QAAQ,EAAE,CAAC;IAC/B,CAAC;SAAM,IAAI,cAAc,EAAE,CAAC;QAC3B,YAAY,GAAG,IAAI,WAAW,EAAE,CAAC;IAClC,CAAC;SAAM,IAAI,kBAAkB,EAAE,CAAC;QAC/B,YAAY,GAAG,IAAI,YAAY,EAAE,CAAC;IACnC,CAAC;SAAM,IAAI,YAAY,EAAE,CAAC;QACzB,YAAY,GAAG,IAAI,MAAM,EAAE,CAAC;IAC7B,CAAC;AACF,CAAC;AAED,MAAM,UAAU,SAAS;IACxB,IAAI,CAAC,YAAY,EAAE,CAAC;QACnB,yBAAyB,EAAE,CAAC;IAC7B,CAAC;IACD,OAAO,YAAY,CAAC;AACrB,CAAC"}
@@ -1,15 +1,15 @@
1
- import fetch, { Headers } from "node-fetch";
2
- import { InjectionResult } from "../constants.js";
1
+ import { InjectionResult, TORRENT_TAG } from "../constants.js";
3
2
  import { CrossSeedError } from "../errors.js";
4
3
  import { Label, logger } from "../logger.js";
5
4
  import { resultOf, resultOfErr } from "../Result.js";
6
5
  import { getRuntimeConfig } from "../runtimeConfig.js";
7
- import { extractCredentialsFromUrl } from "../utils.js";
6
+ import { shouldRecheck, extractCredentialsFromUrl } from "../utils.js";
8
7
  const XTransmissionSessionId = "X-Transmission-Session-Id";
9
8
  function doesAlreadyExist(args) {
10
9
  return "torrent-duplicate" in args;
11
10
  }
12
11
  export default class Transmission {
12
+ xTransmissionSessionId;
13
13
  async request(method, args = {}, retries = 1) {
14
14
  const { transmissionRpcUrl } = getRuntimeConfig();
15
15
  const { username, password, href } = extractCredentialsFromUrl(transmissionRpcUrl).unwrapOrThrow(new CrossSeedError("Transmission rpc url must be percent-encoded"));
@@ -92,25 +92,33 @@ export default class Transmission {
92
92
  }
93
93
  return resultOf({ downloadDir });
94
94
  }
95
- async inject(newTorrent, searchee, path) {
95
+ async getDownloadDir(searchee) {
96
+ const result = await this.checkOriginalTorrent(searchee);
97
+ return result
98
+ .mapOk((r) => r.downloadDir)
99
+ .mapErr((err) => (err === "FAILURE" ? "UNKNOWN_ERROR" : err));
100
+ }
101
+ async inject(newTorrent, searchee, decision, path) {
96
102
  let downloadDir;
97
103
  if (path) {
98
104
  downloadDir = path;
99
105
  }
100
106
  else {
101
- const result = await this.checkOriginalTorrent(searchee);
107
+ const result = await this.getDownloadDir(searchee);
102
108
  if (result.isErr()) {
103
- return result.unwrapErrOrThrow();
109
+ return InjectionResult.FAILURE;
110
+ }
111
+ else {
112
+ downloadDir = result.unwrapOrThrow();
104
113
  }
105
- downloadDir = result.unwrapOrThrow().downloadDir;
106
114
  }
107
115
  let addResponse;
108
116
  try {
109
117
  addResponse = await this.request("torrent-add", {
110
118
  "download-dir": downloadDir,
111
119
  metainfo: newTorrent.encode().toString("base64"),
112
- paused: false,
113
- labels: ["cross-seed"],
120
+ paused: shouldRecheck(decision),
121
+ labels: [TORRENT_TAG],
114
122
  });
115
123
  }
116
124
  catch (e) {
@@ -1 +1 @@
1
- {"version":3,"file":"Transmission.js","sourceRoot":"","sources":["../../src/clients/Transmission.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Transmission.js","sourceRoot":"","sources":["../../src/clients/Transmission.ts"],"names":[],"mappings":"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"}
package/dist/cmd.js CHANGED
@@ -1,16 +1,15 @@
1
1
  #!/usr/bin/env node
2
2
  import chalk from "chalk";
3
3
  import { Option, program } from "commander";
4
- import ms from "ms";
5
- import { inspect } from "util";
6
- import { getApiKeyFromDatabase, resetApiKey } from "./auth.js";
4
+ import { getApiKey, resetApiKey } from "./auth.js";
5
+ import { VALIDATION_SCHEMA, customizeErrorMessage } from "./configSchema.js";
7
6
  import { generateConfig, getFileConfig } from "./configuration.js";
8
7
  import { Action, LinkType, MatchMode, PROGRAM_NAME, PROGRAM_VERSION, } from "./constants.js";
9
8
  import { db } from "./db.js";
10
9
  import { diffCmd } from "./diff.js";
11
- import { exitOnCrossSeedErrors } from "./errors.js";
10
+ import { CrossSeedError, exitOnCrossSeedErrors } from "./errors.js";
12
11
  import { jobsLoop } from "./jobs.js";
13
- import { initializeLogger, Label, logger } from "./logger.js";
12
+ import { Label, initializeLogger, logger } from "./logger.js";
14
13
  import { main, scanRssFeeds } from "./pipeline.js";
15
14
  import { initializePushNotifier, sendTestNotification, } from "./pushNotifier.js";
16
15
  import { setRuntimeConfig } from "./runtimeConfig.js";
@@ -20,32 +19,54 @@ import "./signalHandlers.js";
20
19
  import { doStartupValidation } from "./startup.js";
21
20
  import { parseTorrentFromFilename } from "./torrent.js";
22
21
  import { fallback } from "./utils.js";
23
- function processOptions(options) {
24
- if (options.rssCadence) {
25
- options.rssCadence = Math.max(ms(options.rssCadence), ms("10 minutes"));
26
- }
27
- if (options.searchCadence) {
28
- options.searchCadence = ms(options.searchCadence);
29
- // Set a minimum cadence of once a day if excludeRecentSearch hasn't been set to avoid flooding requests
30
- if (!options.excludeRecentSearch) {
31
- options.searchCadence = Math.max(options.searchCadence, ms("1 day"));
32
- }
33
- }
34
- if (options.excludeOlder) {
35
- options.excludeOlder = ms(options.excludeOlder);
36
- }
37
- if (options.excludeRecentSearch) {
38
- options.excludeRecentSearch = ms(options.excludeRecentSearch);
22
+ import { inspect } from "util";
23
+ let fileConfig;
24
+ try {
25
+ fileConfig = await getFileConfig();
26
+ }
27
+ catch (e) {
28
+ if (e instanceof CrossSeedError) {
29
+ console.error(e.message);
30
+ process.exit(1);
39
31
  }
40
- if (options.snatchTimeout) {
41
- options.snatchTimeout = ms(options.snatchTimeout);
32
+ throw e;
33
+ }
34
+ const apiKeyOption = new Option("--api-key <key>", "Provide your own API key to override the autogenerated one.").default(fileConfig.apiKey);
35
+ /**
36
+ * validates and sets RuntimeConfig
37
+ * @return (the number of errors Zod encountered in the configuration)
38
+ */
39
+ export async function validateAndSetRuntimeConfig(options) {
40
+ initializeLogger(options);
41
+ logger.info(`${PROGRAM_NAME} v${PROGRAM_VERSION}`);
42
+ logger.info("Validating your configuration...");
43
+ try {
44
+ options = VALIDATION_SCHEMA.parse(options, {
45
+ errorMap: customizeErrorMessage,
46
+ });
42
47
  }
43
- if (options.searchTimeout) {
44
- options.searchTimeout = ms(options.searchTimeout);
48
+ catch ({ errors }) {
49
+ logger.verbose({
50
+ label: Label.CONFIGDUMP,
51
+ message: inspect(options),
52
+ });
53
+ errors?.forEach(({ path, message }) => {
54
+ const urlPath = path[0];
55
+ const optionLine = path.length === 2
56
+ ? `${path[0]} (position #${path[1] + 1})`
57
+ : path;
58
+ logger.error(`${path.length > 0 ? `Option: ${optionLine}` : "Configuration:"}\n\t\t\t\t${message}\n\t\t\t\t(https://www.cross-seed.org/docs/basics/options${urlPath ? `#${urlPath.toLowerCase()}` : ""})\n`);
59
+ });
60
+ if (errors?.length > 0) {
61
+ throw new CrossSeedError(`Your configuration is invalid, please see the ${errors.length > 1 ? "errors" : "error"} above for details.`);
62
+ }
45
63
  }
46
- return options;
64
+ setRuntimeConfig(options);
65
+ initializePushNotifier();
47
66
  }
48
- const fileConfig = await getFileConfig();
67
+ /**
68
+ * parsing and processing of CLI and config file
69
+ */
49
70
  function createCommandWithSharedOptions(name, description) {
50
71
  return program
51
72
  .command(name)
@@ -56,54 +77,54 @@ function createCommandWithSharedOptions(name, description) {
56
77
  .option("--data-dirs <dirs...>", "Directories to use if searching by data instead of torrents (separated by spaces)",
57
78
  // @ts-expect-error commander supports non-string defaults
58
79
  fallback(fileConfig.dataDirs))
59
- .addOption(new Option("--match-mode <mode>", "Safe will only download torrents with perfect matches. Risky will allow for renames and more matches, but might cause false positives")
80
+ .addOption(new Option("--match-mode <mode>", "Safe will only download torrents with perfect matches. Risky will allow for renames and more matches, but might cause false positives. Partial is like risky but it ignores small files like .nfo/.srt if missing.")
60
81
  .default(fallback(fileConfig.matchMode, MatchMode.SAFE))
61
82
  .choices(Object.values(MatchMode))
62
83
  .makeOptionMandatory())
63
- .option("--data-category <cat>", "Category to assign torrents from data-based matching", fallback(fileConfig.dataCategory, "cross-seed-data"))
84
+ .option("--link-category <cat>", "Torrent client category to set on linked torrents", fallback(fileConfig.linkCategory, "cross-seed-link"))
64
85
  .option("--link-dir <dir>", "Directory to output data-matched hardlinks to", fileConfig.linkDir)
86
+ .option("--flat-linking", "Use flat linking directory structure (without individual tracker folders)", fallback(fileConfig.flatLinking, false))
65
87
  .addOption(new Option("--link-type <type>", "Use links of this type to inject data-based matches into your client")
66
88
  .default(fallback(fileConfig.linkType, LinkType.SYMLINK))
67
89
  .choices(Object.values(LinkType))
68
90
  .makeOptionMandatory())
69
- .option("--skip-recheck", "Skips torrent recheck upon adding to QBittorrent", fallback(fileConfig.skipRecheck, false))
70
- .requiredOption("--max-data-depth <depth>", "Max depth to look for searchees in dataDirs", (n) => parseInt(n), fallback(fileConfig.maxDataDepth, 2))
71
- .requiredOption("-i, --torrent-dir <dir>", "Directory with torrent files", fileConfig.torrentDir)
72
- .requiredOption("-s, --output-dir <dir>", "Directory to save results in", fileConfig.outputDir)
73
- .requiredOption("--include-non-videos", "Include torrents which contain non-video files", fallback(fileConfig.includeNonVideos, false))
91
+ .option("--max-data-depth <depth>", "Max depth to look for searchees in dataDirs", (n) => parseInt(n), fallback(fileConfig.maxDataDepth, 2))
92
+ .option("-i, --torrent-dir <dir>", "Directory with torrent files", fileConfig.torrentDir)
93
+ .option("-s, --output-dir <dir>", "Directory to save results in", fileConfig.outputDir)
94
+ .option("--include-non-videos", "Include torrents which contain non-video files", fallback(fileConfig.includeNonVideos, false))
74
95
  .option("-e, --include-episodes", "Include all episode torrents in the search (including from season packs)", fallback(fileConfig.includeEpisodes, false))
75
96
  .option("--include-single-episodes", "Include single episode torrents in the search", fallback(fileConfig.includeSingleEpisodes, false))
76
97
  .option("--no-include-non-videos", "Don't include torrents which contain non-videos")
77
98
  .option("--no-include-episodes", "Don't include episode torrents")
78
- .requiredOption("--fuzzy-size-threshold <decimal>", "The size difference allowed to be considered a match.", parseFloat, fallback(fileConfig.fuzzySizeThreshold, 0.02))
99
+ .option("--fuzzy-size-threshold <decimal>", "The size difference allowed to be considered a match.", parseFloat, fallback(fileConfig.fuzzySizeThreshold, 0.02))
79
100
  .option("-x, --exclude-older <cutoff>", "Exclude torrents first seen more than n minutes ago. Bypasses the -a flag.", fileConfig.excludeOlder)
80
101
  .option("-r, --exclude-recent-search <cutoff>", "Exclude torrents which have been searched more recently than n minutes ago. Bypasses the -a flag.", fileConfig.excludeRecentSearch)
81
- .requiredOption("-v, --verbose", "Log verbose output", false)
102
+ .option("-v, --verbose", "Log verbose output", false)
82
103
  .addOption(new Option("-A, --action <action>", "If set to 'inject', cross-seed will attempt to add the found torrents to your torrent client.")
83
104
  .default(fallback(fileConfig.action, Action.SAVE))
84
- .choices(Object.values(Action))
85
- .makeOptionMandatory())
105
+ .choices(Object.values(Action)))
86
106
  .option("--rtorrent-rpc-url <url>", "The url of your rtorrent XMLRPC interface. Requires '-A inject'. See the docs for more information.", fileConfig.rtorrentRpcUrl)
87
107
  .option("--qbittorrent-url <url>", "The url of your qBittorrent webui. Requires '-A inject'. See the docs for more information.", fileConfig.qbittorrentUrl)
88
108
  .option("--transmission-rpc-url <url>", "The url of your Transmission RPC interface. Requires '-A inject'. See the docs for more information.", fileConfig.transmissionRpcUrl)
89
109
  .option("--deluge-rpc-url <url>", "The url of your Deluge JSON-RPC interface. Requires '-A inject'. See the docs for more information.", fileConfig.delugeRpcUrl)
90
- .option("--duplicate-categories", "Create and inject using categories with the same save paths as your normal categories", fileConfig.duplicateCategories)
110
+ .option("--duplicate-categories", "Create and inject using categories with the same save paths as your normal categories", fallback(fileConfig.duplicateCategories, false))
91
111
  .option("--notification-webhook-url <url>", "cross-seed will send POST requests to this url with a JSON payload of { title, body }", fileConfig.notificationWebhookUrl)
92
- .requiredOption("-d, --delay <delay>", "Pause duration (seconds) between searches", parseFloat, fallback(fileConfig.delay, 10))
93
- .requiredOption("--snatch-timeout <timeout>", "Timeout for unresponsive snatches", fallback(fileConfig.snatchTimeout, "30 seconds"))
94
- .requiredOption("--search-timeout <timeout>", "Timeout for unresponsive searches", fallback(fileConfig.searchTimeout, "30 seconds"))
95
- .option("--search-limit <number>", "The number of searches before stops", parseInt, fallback(fileConfig.searchLimit, 0));
112
+ .option("-d, --delay <delay>", "Pause duration (seconds) between searches", parseFloat, fallback(fileConfig.delay, 10))
113
+ .option("--snatch-timeout <timeout>", "Timeout for unresponsive snatches", fallback(fileConfig.snatchTimeout, "30 seconds"))
114
+ .option("--search-timeout <timeout>", "Timeout for unresponsive searches", fallback(fileConfig.searchTimeout, "30 seconds"))
115
+ .option("--search-limit <number>", "The number of searches before stops", parseInt, fallback(fileConfig.searchLimit, 0))
116
+ .option("--block-list <strings>", "The infohashes and/or strings in torrent name to block from cross-seed",
117
+ // @ts-expect-error commander supports non-string defaults
118
+ fallback(fileConfig.blockList, []));
96
119
  }
97
120
  program.name(PROGRAM_NAME);
98
- program.description(chalk.yellow.bold("cross-seed"));
121
+ program.description(chalk.yellow.bold(`${PROGRAM_NAME} v${PROGRAM_VERSION}`));
99
122
  program.version(PROGRAM_VERSION, "-V, --version", "output the current version");
100
123
  program
101
124
  .command("gen-config")
102
125
  .description("Generate a config file")
103
126
  .option("-d, --docker", "Generate the docker config instead of the normal one")
104
- .action((options) => {
105
- generateConfig(options);
106
- });
127
+ .action(() => void generateConfig());
107
128
  program
108
129
  .command("clear-cache")
109
130
  .description("Clear the cache of downloaded-and-rejected torrents")
@@ -118,13 +139,25 @@ program
118
139
  });
119
140
  await db.destroy();
120
141
  });
142
+ program
143
+ .command("clear-indexer-failures")
144
+ .description("Clear the cached details of indexers (failures and caps)")
145
+ .action(async () => {
146
+ console.log("If you've received a '429' (rate-limiting), continuing to hammer", "your indexers may result in negative consequences.");
147
+ console.log("If you have to do this more than once in a short", "period of time, you have bigger issues that need to be addressed.");
148
+ await db("indexer").update({
149
+ status: null,
150
+ retry_after: null,
151
+ });
152
+ await db.destroy();
153
+ });
121
154
  program
122
155
  .command("test-notification")
123
156
  .description("Send a test notification")
124
157
  .requiredOption("--notification-webhook-url <url>", "cross-seed will send POST requests to this url with a JSON payload of { title, body }", fileConfig.notificationWebhookUrl)
125
158
  .action((options) => {
126
159
  setRuntimeConfig(options);
127
- initializeLogger();
160
+ initializeLogger(options);
128
161
  initializePushNotifier();
129
162
  sendTestNotification();
130
163
  });
@@ -144,9 +177,11 @@ program
144
177
  program
145
178
  .command("api-key")
146
179
  .description("Show the api key")
147
- .action(async () => {
180
+ .addOption(apiKeyOption)
181
+ .action(async (options) => {
182
+ setRuntimeConfig(options);
148
183
  await db.migrate.latest();
149
- console.log(await getApiKeyFromDatabase());
184
+ console.log(await getApiKey());
150
185
  await db.destroy();
151
186
  });
152
187
  program
@@ -160,22 +195,13 @@ program
160
195
  createCommandWithSharedOptions("daemon", "Start the cross-seed daemon")
161
196
  .option("-p, --port <port>", "Listen on a custom port", (n) => parseInt(n), fallback(fileConfig.port, 2468))
162
197
  .option("--host <host>", "Bind to a specific IP address", fileConfig.host)
163
- .option("--api-auth", "Require API auth via API key", fallback(fileConfig.apiAuth, false))
164
- .option("--no-api-auth", "Don't require API auth")
165
198
  .option("--no-port", "Do not listen on any port")
166
199
  .option("--search-cadence <cadence>", "Run searches on a schedule. Format: https://github.com/vercel/ms", fileConfig.searchCadence)
167
200
  .option("--rss-cadence <cadence>", "Run an rss scan on a schedule. Format: https://github.com/vercel/ms", fileConfig.rssCadence)
201
+ .addOption(apiKeyOption)
168
202
  .action(async (options) => {
169
203
  try {
170
- const runtimeConfig = processOptions(options);
171
- setRuntimeConfig(runtimeConfig);
172
- initializeLogger();
173
- initializePushNotifier();
174
- logger.info(`${PROGRAM_NAME} v${PROGRAM_VERSION}`);
175
- logger.verbose({
176
- label: Label.CONFIGDUMP,
177
- message: inspect(runtimeConfig),
178
- });
204
+ await validateAndSetRuntimeConfig(options);
179
205
  await db.migrate.latest();
180
206
  await doStartupValidation();
181
207
  serve(options.port, options.host);
@@ -188,14 +214,7 @@ createCommandWithSharedOptions("daemon", "Start the cross-seed daemon")
188
214
  });
189
215
  createCommandWithSharedOptions("rss", "Run an rss scan").action(async (options) => {
190
216
  try {
191
- const runtimeConfig = processOptions(options);
192
- setRuntimeConfig(runtimeConfig);
193
- initializeLogger();
194
- initializePushNotifier();
195
- logger.verbose({
196
- label: Label.CONFIGDUMP,
197
- message: inspect(runtimeConfig),
198
- });
217
+ await validateAndSetRuntimeConfig(options);
199
218
  await db.migrate.latest();
200
219
  await doStartupValidation();
201
220
  await scanRssFeeds();
@@ -210,14 +229,7 @@ createCommandWithSharedOptions("search", "Search for cross-seeds")
210
229
  .addOption(new Option("--torrents <torrents...>", "torrent files separated by spaces").hideHelp())
211
230
  .action(async (options) => {
212
231
  try {
213
- const runtimeConfig = processOptions(options);
214
- setRuntimeConfig(runtimeConfig);
215
- initializeLogger();
216
- initializePushNotifier();
217
- logger.verbose({
218
- label: Label.CONFIGDUMP,
219
- message: inspect(runtimeConfig),
220
- });
232
+ await validateAndSetRuntimeConfig(options);
221
233
  await db.migrate.latest();
222
234
  await doStartupValidation();
223
235
  await main();
package/dist/cmd.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cmd.js","sourceRoot":"","sources":["../src/cmd.ts"],"names":[],"mappings":";AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,EAAE,qBAAqB,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnE,OAAO,EACN,MAAM,EACN,QAAQ,EACR,SAAS,EACT,YAAY,EACZ,eAAe,GACf,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAC7B,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC9D,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EACN,sBAAsB,EACtB,oBAAoB,GACpB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAiB,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACrE,OAAO,EAAE,0BAA0B,EAAE,MAAM,eAAe,CAAC;AAC3D,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,qBAAqB,CAAC;AAC7B,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,SAAS,cAAc,CAAC,OAAO;IAC9B,IAAI,OAAO,CAAC,UAAU,EAAE;QACvB,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC;KACxE;IACD,IAAI,OAAO,CAAC,aAAa,EAAE;QAC1B,OAAO,CAAC,aAAa,GAAG,EAAE,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;QAElD,wGAAwG;QACxG,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE;YACjC,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,GAAG,CAC/B,OAAO,CAAC,aAAa,EACrB,EAAE,CAAC,OAAO,CAAC,CACX,CAAC;SACF;KACD;IAED,IAAI,OAAO,CAAC,YAAY,EAAE;QACzB,OAAO,CAAC,YAAY,GAAG,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;KAChD;IACD,IAAI,OAAO,CAAC,mBAAmB,EAAE;QAChC,OAAO,CAAC,mBAAmB,GAAG,EAAE,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;KAC9D;IACD,IAAI,OAAO,CAAC,aAAa,EAAE;QAC1B,OAAO,CAAC,aAAa,GAAG,EAAE,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;KAClD;IACD,IAAI,OAAO,CAAC,aAAa,EAAE;QAC1B,OAAO,CAAC,aAAa,GAAG,EAAE,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;KAClD;IACD,OAAO,OAAO,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,GAAG,MAAM,aAAa,EAAE,CAAC;AAEzC,SAAS,8BAA8B,CAAC,IAAI,EAAE,WAAW;IACxD,OAAO,OAAO;SACZ,OAAO,CAAC,IAAI,CAAC;SACb,WAAW,CAAC,WAAW,CAAC;SACxB,MAAM,CACN,yBAAyB,EACzB,yDAAyD;IACzD,0DAA0D;IAC1D,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,CAC5B;SACA,MAAM,CACN,uBAAuB,EACvB,mFAAmF;IACnF,0DAA0D;IAC1D,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,CAC7B;SACA,SAAS,CACT,IAAI,MAAM,CACT,qBAAqB,EACrB,uIAAuI,CACvI;SACC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,SAAS,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;SACvD,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;SACjC,mBAAmB,EAAE,CACvB;SACA,MAAM,CACN,uBAAuB,EACvB,sDAAsD,EACtD,QAAQ,CAAC,UAAU,CAAC,YAAY,EAAE,iBAAiB,CAAC,CACpD;SACA,MAAM,CACN,kBAAkB,EAClB,+CAA+C,EAC/C,UAAU,CAAC,OAAO,CAClB;SACA,SAAS,CACT,IAAI,MAAM,CACT,oBAAoB,EACpB,sEAAsE,CACtE;SACC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;SACxD,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;SAChC,mBAAmB,EAAE,CACvB;SACA,MAAM,CACN,gBAAgB,EAChB,kDAAkD,EAClD,QAAQ,CAAC,UAAU,CAAC,WAAW,EAAE,KAAK,CAAC,CACvC;SACA,cAAc,CACd,0BAA0B,EAC1B,6CAA6C,EAC7C,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,EAClB,QAAQ,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC,CAAC,CACpC;SACA,cAAc,CACd,yBAAyB,EACzB,8BAA8B,EAC9B,UAAU,CAAC,UAAU,CACrB;SACA,cAAc,CACd,wBAAwB,EACxB,8BAA8B,EAC9B,UAAU,CAAC,SAAS,CACpB;SACA,cAAc,CACd,sBAAsB,EACtB,gDAAgD,EAChD,QAAQ,CAAC,UAAU,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAC5C;SACA,MAAM,CACN,wBAAwB,EACxB,0EAA0E,EAC1E,QAAQ,CAAC,UAAU,CAAC,eAAe,EAAE,KAAK,CAAC,CAC3C;SACA,MAAM,CACN,2BAA2B,EAC3B,+CAA+C,EAC/C,QAAQ,CAAC,UAAU,CAAC,qBAAqB,EAAE,KAAK,CAAC,CACjD;SACA,MAAM,CACN,yBAAyB,EACzB,iDAAiD,CACjD;SACA,MAAM,CAAC,uBAAuB,EAAE,gCAAgC,CAAC;SACjE,cAAc,CACd,kCAAkC,EAClC,uDAAuD,EACvD,UAAU,EACV,QAAQ,CAAC,UAAU,CAAC,kBAAkB,EAAE,IAAI,CAAC,CAC7C;SACA,MAAM,CACN,8BAA8B,EAC9B,4EAA4E,EAC5E,UAAU,CAAC,YAAY,CACvB;SACA,MAAM,CACN,sCAAsC,EACtC,mGAAmG,EACnG,UAAU,CAAC,mBAAmB,CAC9B;SACA,cAAc,CAAC,eAAe,EAAE,oBAAoB,EAAE,KAAK,CAAC;SAC5D,SAAS,CACT,IAAI,MAAM,CACT,uBAAuB,EACvB,+FAA+F,CAC/F;SACC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;SACjD,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;SAC9B,mBAAmB,EAAE,CACvB;SACA,MAAM,CACN,0BAA0B,EAC1B,qGAAqG,EACrG,UAAU,CAAC,cAAc,CACzB;SACA,MAAM,CACN,yBAAyB,EACzB,6FAA6F,EAC7F,UAAU,CAAC,cAAc,CACzB;SACA,MAAM,CACN,8BAA8B,EAC9B,sGAAsG,EACtG,UAAU,CAAC,kBAAkB,CAC7B;SACA,MAAM,CACN,wBAAwB,EACxB,qGAAqG,EACrG,UAAU,CAAC,YAAY,CACvB;SACA,MAAM,CACN,wBAAwB,EACxB,uFAAuF,EACvF,UAAU,CAAC,mBAAmB,CAC9B;SACA,MAAM,CACN,kCAAkC,EAClC,uFAAuF,EACvF,UAAU,CAAC,sBAAsB,CACjC;SACA,cAAc,CACd,qBAAqB,EACrB,2CAA2C,EAC3C,UAAU,EACV,QAAQ,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,CAAC,CAC9B;SACA,cAAc,CACd,4BAA4B,EAC5B,mCAAmC,EACnC,QAAQ,CAAC,UAAU,CAAC,aAAa,EAAE,YAAY,CAAC,CAChD;SACA,cAAc,CACd,4BAA4B,EAC5B,mCAAmC,EACnC,QAAQ,CAAC,UAAU,CAAC,aAAa,EAAE,YAAY,CAAC,CAChD;SACA,MAAM,CACN,yBAAyB,EACzB,qCAAqC,EACrC,QAAQ,EACR,QAAQ,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC,CACnC,CAAC;AACJ,CAAC;AAED,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AAC3B,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;AACrD,OAAO,CAAC,OAAO,CAAC,eAAe,EAAE,eAAe,EAAE,4BAA4B,CAAC,CAAC;AAEhF,OAAO;KACL,OAAO,CAAC,YAAY,CAAC;KACrB,WAAW,CAAC,wBAAwB,CAAC;KACrC,MAAM,CACN,cAAc,EACd,sDAAsD,CACtD;KACA,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE;IACnB,cAAc,CAAC,OAAO,CAAC,CAAC;AACzB,CAAC,CAAC,CAAC;AAEJ,OAAO;KACL,OAAO,CAAC,aAAa,CAAC;KACtB,WAAW,CAAC,qDAAqD,CAAC;KAClE,MAAM,CAAC,KAAK,IAAI,EAAE;IAClB,MAAM,EAAE,CAAC,UAAU,CAAC,CAAC,GAAG,EAAE,CAAC;IAC3B,MAAM,EAAE,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC;QAC1B,MAAM,EAAE,IAAI;QACZ,WAAW,EAAE,IAAI;QACjB,UAAU,EAAE,IAAI;QAChB,aAAa,EAAE,IAAI;QACnB,gBAAgB,EAAE,IAAI;KACtB,CAAC,CAAC;IACH,MAAM,EAAE,CAAC,OAAO,EAAE,CAAC;AACpB,CAAC,CAAC,CAAC;AAEJ,OAAO;KACL,OAAO,CAAC,mBAAmB,CAAC;KAC5B,WAAW,CAAC,0BAA0B,CAAC;KACvC,cAAc,CACd,kCAAkC,EAClC,uFAAuF,EACvF,UAAU,CAAC,sBAAsB,CACjC;KACA,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE;IACnB,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAC1B,gBAAgB,EAAE,CAAC;IACnB,sBAAsB,EAAE,CAAC;IACzB,oBAAoB,EAAE,CAAC;AACxB,CAAC,CAAC,CAAC;AAEJ,OAAO;KACL,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,wDAAwD,CAAC;KACrE,QAAQ,CAAC,UAAU,CAAC;KACpB,QAAQ,CAAC,WAAW,CAAC;KACrB,MAAM,CAAC,OAAO,CAAC,CAAC;AAElB,OAAO;KACL,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,6BAA6B,CAAC;KAC1C,QAAQ,CAAC,SAAS,CAAC;KACnB,MAAM,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE;IACpB,OAAO,CAAC,GAAG,CACV,0BAA0B,CAAC,MAAM,wBAAwB,CAAC,EAAE,CAAC,CAAC,CAC9D,CAAC;AACH,CAAC,CAAC,CAAC;AAEJ,OAAO;KACL,OAAO,CAAC,SAAS,CAAC;KAClB,WAAW,CAAC,kBAAkB,CAAC;KAC/B,MAAM,CAAC,KAAK,IAAI,EAAE;IAClB,MAAM,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;IAC1B,OAAO,CAAC,GAAG,CAAC,MAAM,qBAAqB,EAAE,CAAC,CAAC;IAC3C,MAAM,EAAE,CAAC,OAAO,EAAE,CAAC;AACpB,CAAC,CAAC,CAAC;AAEJ,OAAO;KACL,OAAO,CAAC,eAAe,CAAC;KACxB,WAAW,CAAC,mBAAmB,CAAC;KAChC,MAAM,CAAC,KAAK,IAAI,EAAE;IAClB,MAAM,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;IAC1B,OAAO,CAAC,GAAG,CAAC,MAAM,WAAW,EAAE,CAAC,CAAC;IACjC,MAAM,EAAE,CAAC,OAAO,EAAE,CAAC;AACpB,CAAC,CAAC,CAAC;AAEJ,8BAA8B,CAAC,QAAQ,EAAE,6BAA6B,CAAC;KACrE,MAAM,CACN,mBAAmB,EACnB,yBAAyB,EACzB,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,EAClB,QAAQ,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,CAC/B;KACA,MAAM,CAAC,eAAe,EAAE,+BAA+B,EAAE,UAAU,CAAC,IAAI,CAAC;KACzE,MAAM,CACN,YAAY,EACZ,8BAA8B,EAC9B,QAAQ,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CACnC;KACA,MAAM,CAAC,eAAe,EAAE,wBAAwB,CAAC;KACjD,MAAM,CAAC,WAAW,EAAE,2BAA2B,CAAC;KAChD,MAAM,CACN,4BAA4B,EAC5B,kEAAkE,EAClE,UAAU,CAAC,aAAa,CACxB;KACA,MAAM,CACN,yBAAyB,EACzB,qEAAqE,EACrE,UAAU,CAAC,UAAU,CACrB;KACA,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACzB,IAAI;QACH,MAAM,aAAa,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;QAC9C,gBAAgB,CAAC,aAAa,CAAC,CAAC;QAChC,gBAAgB,EAAE,CAAC;QACnB,sBAAsB,EAAE,CAAC;QACzB,MAAM,CAAC,IAAI,CAAC,GAAG,YAAY,KAAK,eAAe,EAAE,CAAC,CAAC;QACnD,MAAM,CAAC,OAAO,CAAC;YACd,KAAK,EAAE,KAAK,CAAC,UAAU;YACvB,OAAO,EAAE,OAAO,CAAC,aAAa,CAAC;SAC/B,CAAC,CAAC;QACH,MAAM,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QAC1B,MAAM,mBAAmB,EAAE,CAAC;QAC5B,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QAClC,QAAQ,EAAE,CAAC;KACX;IAAC,OAAO,CAAC,EAAE;QACX,qBAAqB,CAAC,CAAC,CAAC,CAAC;QACzB,MAAM,EAAE,CAAC,OAAO,EAAE,CAAC;KACnB;AACF,CAAC,CAAC,CAAC;AAEJ,8BAA8B,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC,MAAM,CAC9D,KAAK,EAAE,OAAO,EAAE,EAAE;IACjB,IAAI;QACH,MAAM,aAAa,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;QAC9C,gBAAgB,CAAC,aAAa,CAAC,CAAC;QAChC,gBAAgB,EAAE,CAAC;QACnB,sBAAsB,EAAE,CAAC;QACzB,MAAM,CAAC,OAAO,CAAC;YACd,KAAK,EAAE,KAAK,CAAC,UAAU;YACvB,OAAO,EAAE,OAAO,CAAC,aAAa,CAAC;SAC/B,CAAC,CAAC;QAEH,MAAM,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QAC1B,MAAM,mBAAmB,EAAE,CAAC;QAC5B,MAAM,YAAY,EAAE,CAAC;QACrB,MAAM,EAAE,CAAC,OAAO,EAAE,CAAC;KACnB;IAAC,OAAO,CAAC,EAAE;QACX,qBAAqB,CAAC,CAAC,CAAC,CAAC;QACzB,MAAM,EAAE,CAAC,OAAO,EAAE,CAAC;KACnB;AACF,CAAC,CACD,CAAC;AAEF,8BAA8B,CAAC,QAAQ,EAAE,wBAAwB,CAAC;KAChE,SAAS,CACT,IAAI,MAAM,CACT,0BAA0B,EAC1B,mCAAmC,CACnC,CAAC,QAAQ,EAAE,CACZ;KACA,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACzB,IAAI;QACH,MAAM,aAAa,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;QAC9C,gBAAgB,CAAC,aAAa,CAAC,CAAC;QAChC,gBAAgB,EAAE,CAAC;QACnB,sBAAsB,EAAE,CAAC;QACzB,MAAM,CAAC,OAAO,CAAC;YACd,KAAK,EAAE,KAAK,CAAC,UAAU;YACvB,OAAO,EAAE,OAAO,CAAC,aAAa,CAAC;SAC/B,CAAC,CAAC;QACH,MAAM,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QAC1B,MAAM,mBAAmB,EAAE,CAAC;QAC5B,MAAM,IAAI,EAAE,CAAC;QACb,MAAM,EAAE,CAAC,OAAO,EAAE,CAAC;KACnB;IAAC,OAAO,CAAC,EAAE;QACX,qBAAqB,CAAC,CAAC,CAAC,CAAC;QACzB,MAAM,EAAE,CAAC,OAAO,EAAE,CAAC;KACnB;AACF,CAAC,CAAC,CAAC;AAEJ,OAAO,CAAC,kBAAkB,CAAC,yCAAyC,CAAC,CAAC;AAEtE,MAAM,OAAO,CAAC,UAAU,EAAE,CAAC"}
1
+ {"version":3,"file":"cmd.js","sourceRoot":"","sources":["../src/cmd.ts"],"names":[],"mappings":"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"}