cross-seed 6.13.6 → 7.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 (147) hide show
  1. package/README.md +12 -13
  2. package/dist/webui/assets/FieldInfo-Bxj_j8SJ.js +1 -0
  3. package/dist/webui/assets/Page-C3rteCZt.js +1 -0
  4. package/dist/webui/assets/array-field-DVSC6nHP.js +1 -0
  5. package/dist/webui/assets/badge-DTZMtS0e.js +1 -0
  6. package/dist/webui/assets/check-Bu3ldi63.js +1 -0
  7. package/dist/webui/assets/chevron-down-CRy8M0kJ.js +1 -0
  8. package/dist/webui/assets/clients-CW8oEZoQ.js +1 -0
  9. package/dist/webui/assets/connect-YBNsnjWT.js +1 -0
  10. package/dist/webui/assets/debug-mz8-WYZj.js +1 -0
  11. package/dist/webui/assets/directories-BSK28RgR.js +1 -0
  12. package/dist/webui/assets/duration-field-C6xoSlJg.js +1 -0
  13. package/dist/webui/assets/general-lJJxZhH7.js +1 -0
  14. package/dist/webui/assets/health-CXbsVrie.js +1 -0
  15. package/dist/webui/assets/index-Bi48hI2z.js +54 -0
  16. package/dist/webui/assets/index-C-Ul7GNg.css +1 -0
  17. package/dist/webui/assets/index-C2cH1Gst.js +1 -0
  18. package/dist/webui/assets/index-Cc5bDmJr.js +1 -0
  19. package/dist/webui/assets/jobs-CxmNab9w.js +1 -0
  20. package/dist/webui/assets/library-vaj2W8sE.js +1 -0
  21. package/dist/webui/assets/loader-circle-M0gu1gZ-.js +1 -0
  22. package/dist/webui/assets/logs-Cu9RyKS0.js +1 -0
  23. package/dist/webui/assets/search-2R5sIdT8.js +1 -0
  24. package/dist/webui/assets/select-field-BCqNLDrJ.js +1 -0
  25. package/dist/webui/assets/select-zHgqMzLj.js +1 -0
  26. package/dist/webui/assets/settings-CMYjpTbZ.js +1 -0
  27. package/dist/webui/assets/submit-button-BtcnyggQ.js +1 -0
  28. package/dist/webui/assets/switch-G0W3uJVN.js +1 -0
  29. package/dist/webui/assets/switch-field-IBd9ORNq.js +1 -0
  30. package/dist/webui/assets/table-DvgJU7Gh.js +1 -0
  31. package/dist/webui/assets/test-tube-BIwmoM45.js +1 -0
  32. package/dist/webui/assets/text-field-DruSbGhy.js +1 -0
  33. package/dist/webui/assets/time-BSMZjmyW.js +1 -0
  34. package/dist/webui/assets/trackers-D-OpAe63.js +7 -0
  35. package/dist/webui/assets/use-form-validation-context-BkAfWAh0.js +1 -0
  36. package/dist/webui/assets/use-settings-form-submit-CDRh-E9U.js +2 -0
  37. package/dist/webui/assets/useQuery-A4Hv_4uX.js +1 -0
  38. package/dist/webui/index.html +13 -0
  39. package/node_modules/@cross-seed/shared/dist/configSchema.d.ts +261 -0
  40. package/node_modules/@cross-seed/shared/dist/configSchema.d.ts.map +1 -0
  41. package/node_modules/@cross-seed/shared/dist/configSchema.js +53 -0
  42. package/node_modules/@cross-seed/shared/dist/configSchema.js.map +1 -0
  43. package/node_modules/@cross-seed/shared/dist/constants.d.ts +122 -0
  44. package/node_modules/@cross-seed/shared/dist/constants.d.ts.map +1 -0
  45. package/node_modules/@cross-seed/shared/dist/constants.js +127 -0
  46. package/node_modules/@cross-seed/shared/dist/constants.js.map +1 -0
  47. package/node_modules/@cross-seed/shared/dist/tsconfig.tsbuildinfo +1 -0
  48. package/node_modules/@cross-seed/shared/dist/utils.d.ts +6 -0
  49. package/node_modules/@cross-seed/shared/dist/utils.d.ts.map +1 -0
  50. package/node_modules/@cross-seed/shared/dist/utils.js +9 -0
  51. package/node_modules/@cross-seed/shared/dist/utils.js.map +1 -0
  52. package/node_modules/@cross-seed/shared/package.json +22 -0
  53. package/package.json +35 -11
  54. package/dist/Result.js +0 -64
  55. package/dist/Result.js.map +0 -1
  56. package/dist/action.js +0 -693
  57. package/dist/action.js.map +0 -1
  58. package/dist/arr.js +0 -199
  59. package/dist/arr.js.map +0 -1
  60. package/dist/auth.js +0 -25
  61. package/dist/auth.js.map +0 -1
  62. package/dist/clients/Deluge.js +0 -698
  63. package/dist/clients/Deluge.js.map +0 -1
  64. package/dist/clients/QBittorrent.js +0 -785
  65. package/dist/clients/QBittorrent.js.map +0 -1
  66. package/dist/clients/RTorrent.js +0 -654
  67. package/dist/clients/RTorrent.js.map +0 -1
  68. package/dist/clients/TorrentClient.js +0 -272
  69. package/dist/clients/TorrentClient.js.map +0 -1
  70. package/dist/clients/Transmission.js +0 -404
  71. package/dist/clients/Transmission.js.map +0 -1
  72. package/dist/cmd.js +0 -196
  73. package/dist/cmd.js.map +0 -1
  74. package/dist/config.template.cjs +0 -353
  75. package/dist/config.template.cjs.map +0 -1
  76. package/dist/configSchema.js +0 -667
  77. package/dist/configSchema.js.map +0 -1
  78. package/dist/configuration.js +0 -82
  79. package/dist/configuration.js.map +0 -1
  80. package/dist/constants.js +0 -281
  81. package/dist/constants.js.map +0 -1
  82. package/dist/dataFiles.js +0 -208
  83. package/dist/dataFiles.js.map +0 -1
  84. package/dist/db.js +0 -216
  85. package/dist/db.js.map +0 -1
  86. package/dist/decide.js +0 -553
  87. package/dist/decide.js.map +0 -1
  88. package/dist/diff.js +0 -24
  89. package/dist/diff.js.map +0 -1
  90. package/dist/errors.js +0 -16
  91. package/dist/errors.js.map +0 -1
  92. package/dist/indexers.js +0 -180
  93. package/dist/indexers.js.map +0 -1
  94. package/dist/inject.js +0 -594
  95. package/dist/inject.js.map +0 -1
  96. package/dist/jobs.js +0 -146
  97. package/dist/jobs.js.map +0 -1
  98. package/dist/logger.js +0 -143
  99. package/dist/logger.js.map +0 -1
  100. package/dist/migrations/00-initialSchema.js +0 -30
  101. package/dist/migrations/00-initialSchema.js.map +0 -1
  102. package/dist/migrations/01-jobs.js +0 -12
  103. package/dist/migrations/01-jobs.js.map +0 -1
  104. package/dist/migrations/02-timestamps.js +0 -21
  105. package/dist/migrations/02-timestamps.js.map +0 -1
  106. package/dist/migrations/03-rateLimits.js +0 -14
  107. package/dist/migrations/03-rateLimits.js.map +0 -1
  108. package/dist/migrations/04-auth.js +0 -13
  109. package/dist/migrations/04-auth.js.map +0 -1
  110. package/dist/migrations/05-caps.js +0 -16
  111. package/dist/migrations/05-caps.js.map +0 -1
  112. package/dist/migrations/06-uniqueDecisions.js +0 -29
  113. package/dist/migrations/06-uniqueDecisions.js.map +0 -1
  114. package/dist/migrations/07-limits.js +0 -12
  115. package/dist/migrations/07-limits.js.map +0 -1
  116. package/dist/migrations/08-rss.js +0 -15
  117. package/dist/migrations/08-rss.js.map +0 -1
  118. package/dist/migrations/09-clientAndDataSearchees.js +0 -34
  119. package/dist/migrations/09-clientAndDataSearchees.js.map +0 -1
  120. package/dist/migrations/10-indexerNameAudioBookCaps.js +0 -18
  121. package/dist/migrations/10-indexerNameAudioBookCaps.js.map +0 -1
  122. package/dist/migrations/11-trackers.js +0 -38
  123. package/dist/migrations/11-trackers.js.map +0 -1
  124. package/dist/migrations/migrations.js +0 -31
  125. package/dist/migrations/migrations.js.map +0 -1
  126. package/dist/parseTorrent.js +0 -128
  127. package/dist/parseTorrent.js.map +0 -1
  128. package/dist/pipeline.js +0 -527
  129. package/dist/pipeline.js.map +0 -1
  130. package/dist/preFilter.js +0 -250
  131. package/dist/preFilter.js.map +0 -1
  132. package/dist/pushNotifier.js +0 -137
  133. package/dist/pushNotifier.js.map +0 -1
  134. package/dist/runtimeConfig.js +0 -11
  135. package/dist/runtimeConfig.js.map +0 -1
  136. package/dist/searchee.js +0 -658
  137. package/dist/searchee.js.map +0 -1
  138. package/dist/server.js +0 -456
  139. package/dist/server.js.map +0 -1
  140. package/dist/startup.js +0 -203
  141. package/dist/startup.js.map +0 -1
  142. package/dist/torrent.js +0 -637
  143. package/dist/torrent.js.map +0 -1
  144. package/dist/torznab.js +0 -786
  145. package/dist/torznab.js.map +0 -1
  146. package/dist/utils.js +0 -637
  147. package/dist/utils.js.map +0 -1
package/dist/startup.js DELETED
@@ -1,203 +0,0 @@
1
- import { constants, mkdir, stat } from "fs/promises";
2
- import ms from "ms";
3
- import { inspect } from "util";
4
- import { testLinking } from "./action.js";
5
- import { validateUArrLs } from "./arr.js";
6
- import { getClients, instantiateDownloadClients, } from "./clients/TorrentClient.js";
7
- import { customizeErrorMessage, VALIDATION_SCHEMA } from "./configSchema.js";
8
- import { NEWLINE_INDENT, PROGRAM_NAME, PROGRAM_VERSION } from "./constants.js";
9
- import { db } from "./db.js";
10
- import { CrossSeedError, exitOnCrossSeedErrors } from "./errors.js";
11
- import { initializeLogger, Label, logger } from "./logger.js";
12
- import { initializePushNotifier } from "./pushNotifier.js";
13
- import { getRuntimeConfig, setRuntimeConfig, } from "./runtimeConfig.js";
14
- import { validateTorznabUrls } from "./torznab.js";
15
- import { mapAsync, notExists, verifyDir, wait } from "./utils.js";
16
- export async function exitGracefully() {
17
- await db.destroy();
18
- process.exit();
19
- }
20
- process.on("SIGINT", exitGracefully);
21
- process.on("SIGTERM", exitGracefully);
22
- /**
23
- * verifies the config paths provided against the filesystem
24
- * @returns true (if paths are valid)
25
- */
26
- async function checkConfigPaths() {
27
- const { dataDirs, injectDir, linkDirs, outputDir, torrentDir } = getRuntimeConfig();
28
- const READ_ONLY = constants.R_OK;
29
- const READ_AND_WRITE = constants.R_OK | constants.W_OK;
30
- let pathFailure = 0;
31
- const linkDev = [];
32
- const dataDev = [];
33
- if (torrentDir && !(await verifyDir(torrentDir, "torrentDir", READ_ONLY))) {
34
- pathFailure++;
35
- }
36
- if (await notExists(outputDir)) {
37
- logger.info(`Creating outputDir: ${outputDir}`);
38
- await mkdir(outputDir, { recursive: true });
39
- }
40
- if (!(await verifyDir(outputDir, "outputDir", READ_AND_WRITE))) {
41
- pathFailure++;
42
- }
43
- for (const [index, linkDir] of linkDirs.entries()) {
44
- const linkDirName = `linkDir${index}`;
45
- if (await notExists(linkDir)) {
46
- logger.info(`Creating ${linkDirName}: ${linkDir}`);
47
- await mkdir(linkDir, { recursive: true });
48
- }
49
- if (await verifyDir(linkDir, linkDirName, READ_AND_WRITE)) {
50
- linkDev.push({ path: linkDir, dev: (await stat(linkDir)).dev });
51
- }
52
- else {
53
- pathFailure++;
54
- }
55
- }
56
- if (linkDev.length) {
57
- logger.verbose(`Storage device for each linkDir: ${inspect(linkDev)}`);
58
- }
59
- for (const [index, dataDir] of dataDirs.entries()) {
60
- const dataDirName = `dataDir${index}`;
61
- if (await verifyDir(dataDir, dataDirName, READ_ONLY)) {
62
- dataDev.push({ path: dataDir, dev: (await stat(dataDir)).dev });
63
- }
64
- else {
65
- pathFailure++;
66
- }
67
- }
68
- if (dataDev.length) {
69
- logger.verbose(`Storage device for each dataDir: ${inspect(dataDev)}`);
70
- }
71
- if (injectDir) {
72
- if (!(await verifyDir(injectDir, "injectDir", READ_AND_WRITE))) {
73
- pathFailure++;
74
- }
75
- }
76
- if (linkDirs.length) {
77
- for (const [index, dataDir] of dataDirs.entries()) {
78
- const dataDirName = `dataDir${index}`;
79
- try {
80
- const res = await testLinking(dataDir, `${dataDirName}Src.cross-seed`, `${dataDirName}Dest.cross-seed`);
81
- if (!res) {
82
- logger.error("Failed to link from dataDirs to linkDirs.");
83
- }
84
- }
85
- catch (e) {
86
- logger.error(e);
87
- logger.error("Failed to link from dataDirs to linkDirs.");
88
- pathFailure++;
89
- }
90
- }
91
- }
92
- if (pathFailure) {
93
- throw new CrossSeedError(`\tYour configuration is invalid, please see the ${pathFailure > 1 ? "errors" : "error"} above for details.`);
94
- }
95
- }
96
- async function retry(cb, numRetries, delayMs) {
97
- const retries = Math.max(numRetries, 0);
98
- let lastError = new Error("Retry failed");
99
- for (let i = 0; i <= retries; i++) {
100
- try {
101
- return await cb();
102
- }
103
- catch (e) {
104
- const retryMsg = i < retries ? `, retrying in ${delayMs / 1000}s` : "";
105
- logger.error(`Attempt ${i + 1}/${retries + 1} failed${retryMsg}: ${e.message}`);
106
- logger.debug(e);
107
- lastError = e;
108
- if (i >= retries)
109
- break;
110
- await wait(delayMs);
111
- }
112
- }
113
- throw lastError;
114
- }
115
- export async function doStartupValidation() {
116
- await checkConfigPaths(); // ensure paths are valid first
117
- instantiateDownloadClients();
118
- const validateClientConfig = () => mapAsync(getClients(), (client) => client.validateConfig());
119
- const errors = (await Promise.allSettled([
120
- retry(validateTorznabUrls, 5, ms("1 minute")),
121
- retry(validateUArrLs, 5, ms("1 minute")),
122
- retry(validateClientConfig, 5, ms("1 minute")),
123
- ])).filter((p) => p.status === "rejected");
124
- if (errors.length) {
125
- throw new CrossSeedError(`\tYour configuration is invalid, please see the ${errors.length > 1 ? "errors" : "error"} above for details.`);
126
- }
127
- logger.verbose({
128
- label: Label.CONFIGDUMP,
129
- message: inspect(getRuntimeConfig()),
130
- });
131
- logger.info("Your configuration is valid!");
132
- }
133
- /**
134
- * validates and sets RuntimeConfig
135
- * @return (the number of errors Zod encountered in the configuration)
136
- */
137
- export function parseRuntimeConfigAndLogErrors(options) {
138
- logger.info(`${PROGRAM_NAME} v${PROGRAM_VERSION}`);
139
- logger.info("Validating your configuration...");
140
- let parsedOptions;
141
- try {
142
- parsedOptions = VALIDATION_SCHEMA.parse(options, {
143
- errorMap: customizeErrorMessage,
144
- });
145
- }
146
- catch (error) {
147
- logger.verbose({
148
- label: Label.CONFIGDUMP,
149
- message: inspect(options),
150
- });
151
- if ("errors" in error && Array.isArray(error.errors)) {
152
- error.errors.forEach(({ path, message }) => {
153
- const urlPath = path[0];
154
- const optionLine = path.length === 2
155
- ? `${path[0]} (position #${path[1] + 1})`
156
- : path;
157
- logger.error(`${path.length > 0
158
- ? `Option: ${optionLine}`
159
- : "Configuration:"}${NEWLINE_INDENT}${message}${NEWLINE_INDENT}(https://www.cross-seed.org/docs/basics/options${urlPath ? `#${urlPath.toLowerCase()}` : ""})\n`);
160
- });
161
- if (error.errors.length > 0) {
162
- throw new CrossSeedError(`Your configuration is invalid, please see the ${error.errors.length > 1 ? "errors" : "error"} above for details.`);
163
- }
164
- }
165
- throw error;
166
- }
167
- return parsedOptions;
168
- }
169
- /**
170
- * Initializes only the database, runs the callback, then cleans up
171
- */
172
- export function withMinimalRuntime(entrypoint, { migrate = true } = {}) {
173
- return async (...args) => {
174
- try {
175
- if (migrate)
176
- await db.migrate.latest();
177
- const output = await entrypoint(...args);
178
- if (output)
179
- console.log(output);
180
- }
181
- catch (e) {
182
- exitOnCrossSeedErrors(e);
183
- }
184
- finally {
185
- await exitGracefully();
186
- }
187
- };
188
- }
189
- /**
190
- * Initializes the full runtime, runs the callback, then cleans up
191
- * @param entrypoint
192
- */
193
- export function withFullRuntime(entrypoint) {
194
- return withMinimalRuntime(async (options) => {
195
- initializeLogger(options);
196
- const runtimeConfig = parseRuntimeConfigAndLogErrors(options);
197
- setRuntimeConfig(runtimeConfig);
198
- initializePushNotifier();
199
- await doStartupValidation();
200
- await entrypoint(runtimeConfig);
201
- });
202
- }
203
- //# sourceMappingURL=startup.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"startup.js","sourceRoot":"","sources":["../src/startup.ts"],"names":[],"mappings":"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"}