cross-seed 7.0.0-1 → 7.0.0-2

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 (229) hide show
  1. package/dist/Result.d.ts +27 -0
  2. package/dist/Result.js +64 -0
  3. package/dist/Result.js.map +1 -0
  4. package/dist/action.d.ts +34 -0
  5. package/dist/action.js +694 -0
  6. package/dist/action.js.map +1 -0
  7. package/dist/arr.d.ts +31 -0
  8. package/dist/arr.js +267 -0
  9. package/dist/arr.js.map +1 -0
  10. package/dist/auth.d.ts +3 -0
  11. package/dist/auth.js +28 -0
  12. package/dist/auth.js.map +1 -0
  13. package/dist/clients/Deluge.d.ts +153 -0
  14. package/dist/clients/Deluge.js +698 -0
  15. package/dist/clients/Deluge.js.map +1 -0
  16. package/dist/clients/QBittorrent.d.ts +218 -0
  17. package/dist/clients/QBittorrent.js +785 -0
  18. package/dist/clients/QBittorrent.js.map +1 -0
  19. package/dist/clients/RTorrent.d.ts +43 -0
  20. package/dist/clients/RTorrent.js +657 -0
  21. package/dist/clients/RTorrent.js.map +1 -0
  22. package/dist/clients/TorrentClient.d.ts +108 -0
  23. package/dist/clients/TorrentClient.js +341 -0
  24. package/dist/clients/TorrentClient.js.map +1 -0
  25. package/dist/clients/Transmission.d.ts +43 -0
  26. package/dist/clients/Transmission.js +404 -0
  27. package/dist/clients/Transmission.js.map +1 -0
  28. package/dist/cmd.d.ts +2 -0
  29. package/dist/cmd.js +128 -0
  30. package/dist/cmd.js.map +1 -0
  31. package/dist/configSchema.d.ts +1 -0
  32. package/dist/configSchema.js +2 -0
  33. package/dist/configSchema.js.map +1 -0
  34. package/dist/configuration.d.ts +63 -0
  35. package/dist/configuration.js +321 -0
  36. package/dist/configuration.js.map +1 -0
  37. package/dist/constants.d.ts +108 -0
  38. package/dist/constants.js +251 -0
  39. package/dist/constants.js.map +1 -0
  40. package/dist/dataFiles.d.ts +8 -0
  41. package/dist/dataFiles.js +223 -0
  42. package/dist/dataFiles.js.map +1 -0
  43. package/dist/db.d.ts +3 -0
  44. package/dist/db.js +216 -0
  45. package/dist/db.js.map +1 -0
  46. package/dist/dbConfig.d.ts +4 -0
  47. package/dist/dbConfig.js +67 -0
  48. package/dist/dbConfig.js.map +1 -0
  49. package/dist/decide.d.ts +25 -0
  50. package/dist/decide.js +553 -0
  51. package/dist/decide.js.map +1 -0
  52. package/dist/diff.d.ts +1 -0
  53. package/dist/diff.js +24 -0
  54. package/dist/diff.js.map +1 -0
  55. package/dist/errors.d.ts +3 -0
  56. package/dist/errors.js +7 -0
  57. package/dist/errors.js.map +1 -0
  58. package/dist/indexers.d.ts +105 -0
  59. package/dist/indexers.js +248 -0
  60. package/dist/indexers.js.map +1 -0
  61. package/dist/inject.d.ts +2 -0
  62. package/dist/inject.js +594 -0
  63. package/dist/inject.js.map +1 -0
  64. package/dist/jobs.d.ts +29 -0
  65. package/dist/jobs.js +151 -0
  66. package/dist/jobs.js.map +1 -0
  67. package/dist/logger.d.ts +29 -0
  68. package/dist/logger.js +157 -0
  69. package/dist/logger.js.map +1 -0
  70. package/dist/migrations/00-initialSchema.d.ts +9 -0
  71. package/dist/migrations/00-initialSchema.js +30 -0
  72. package/dist/migrations/00-initialSchema.js.map +1 -0
  73. package/dist/migrations/01-jobs.d.ts +9 -0
  74. package/dist/migrations/01-jobs.js +12 -0
  75. package/dist/migrations/01-jobs.js.map +1 -0
  76. package/dist/migrations/02-timestamps.d.ts +9 -0
  77. package/dist/migrations/02-timestamps.js +21 -0
  78. package/dist/migrations/02-timestamps.js.map +1 -0
  79. package/dist/migrations/03-rateLimits.d.ts +9 -0
  80. package/dist/migrations/03-rateLimits.js +14 -0
  81. package/dist/migrations/03-rateLimits.js.map +1 -0
  82. package/dist/migrations/04-auth.d.ts +9 -0
  83. package/dist/migrations/04-auth.js +13 -0
  84. package/dist/migrations/04-auth.js.map +1 -0
  85. package/dist/migrations/05-caps.d.ts +9 -0
  86. package/dist/migrations/05-caps.js +16 -0
  87. package/dist/migrations/05-caps.js.map +1 -0
  88. package/dist/migrations/06-uniqueDecisions.d.ts +9 -0
  89. package/dist/migrations/06-uniqueDecisions.js +29 -0
  90. package/dist/migrations/06-uniqueDecisions.js.map +1 -0
  91. package/dist/migrations/07-limits.d.ts +9 -0
  92. package/dist/migrations/07-limits.js +12 -0
  93. package/dist/migrations/07-limits.js.map +1 -0
  94. package/dist/migrations/08-rss.d.ts +9 -0
  95. package/dist/migrations/08-rss.js +15 -0
  96. package/dist/migrations/08-rss.js.map +1 -0
  97. package/dist/migrations/09-clientAndDataSearchees.d.ts +9 -0
  98. package/dist/migrations/09-clientAndDataSearchees.js +34 -0
  99. package/dist/migrations/09-clientAndDataSearchees.js.map +1 -0
  100. package/dist/migrations/10-indexerNameAudioBookCaps.d.ts +9 -0
  101. package/dist/migrations/10-indexerNameAudioBookCaps.js +18 -0
  102. package/dist/migrations/10-indexerNameAudioBookCaps.js.map +1 -0
  103. package/dist/migrations/11-trackers.d.ts +9 -0
  104. package/dist/migrations/11-trackers.js +38 -0
  105. package/dist/migrations/11-trackers.js.map +1 -0
  106. package/dist/migrations/12-user-auth.d.ts +9 -0
  107. package/dist/migrations/12-user-auth.js +22 -0
  108. package/dist/migrations/12-user-auth.js.map +1 -0
  109. package/dist/migrations/13-settings.d.ts +9 -0
  110. package/dist/migrations/13-settings.js +23 -0
  111. package/dist/migrations/13-settings.js.map +1 -0
  112. package/dist/migrations/14-indexer-enabled-flag.d.ts +9 -0
  113. package/dist/migrations/14-indexer-enabled-flag.js +12 -0
  114. package/dist/migrations/14-indexer-enabled-flag.js.map +1 -0
  115. package/dist/migrations/15-remove-url-unique-constraint.d.ts +9 -0
  116. package/dist/migrations/15-remove-url-unique-constraint.js +14 -0
  117. package/dist/migrations/15-remove-url-unique-constraint.js.map +1 -0
  118. package/dist/migrations/16-prune-inactive-indexers.d.ts +9 -0
  119. package/dist/migrations/16-prune-inactive-indexers.js +17 -0
  120. package/dist/migrations/16-prune-inactive-indexers.js.map +1 -0
  121. package/dist/migrations/migrations.d.ts +13 -0
  122. package/dist/migrations/migrations.js +41 -0
  123. package/dist/migrations/migrations.js.map +1 -0
  124. package/dist/parseTorrent.d.ts +53 -0
  125. package/dist/parseTorrent.js +128 -0
  126. package/dist/parseTorrent.js.map +1 -0
  127. package/dist/pipeline.d.ts +41 -0
  128. package/dist/pipeline.js +574 -0
  129. package/dist/pipeline.js.map +1 -0
  130. package/dist/preFilter.d.ts +25 -0
  131. package/dist/preFilter.js +250 -0
  132. package/dist/preFilter.js.map +1 -0
  133. package/dist/problems/linking.d.ts +2 -0
  134. package/dist/problems/linking.js +80 -0
  135. package/dist/problems/linking.js.map +1 -0
  136. package/dist/problems/path.d.ts +22 -0
  137. package/dist/problems/path.js +96 -0
  138. package/dist/problems/path.js.map +1 -0
  139. package/dist/problems.d.ts +13 -0
  140. package/dist/problems.js +48 -0
  141. package/dist/problems.js.map +1 -0
  142. package/dist/pushNotifier.d.ts +19 -0
  143. package/dist/pushNotifier.js +137 -0
  144. package/dist/pushNotifier.js.map +1 -0
  145. package/dist/routes/baseApi.d.ts +2 -0
  146. package/dist/routes/baseApi.js +354 -0
  147. package/dist/routes/baseApi.js.map +1 -0
  148. package/dist/routes/indexerApi.d.ts +6 -0
  149. package/dist/routes/indexerApi.js +165 -0
  150. package/dist/routes/indexerApi.js.map +1 -0
  151. package/dist/routes/staticFrontendPlugin.d.ts +4 -0
  152. package/dist/routes/staticFrontendPlugin.js +61 -0
  153. package/dist/routes/staticFrontendPlugin.js.map +1 -0
  154. package/dist/runtimeConfig.d.ts +6 -0
  155. package/dist/runtimeConfig.js +27 -0
  156. package/dist/runtimeConfig.js.map +1 -0
  157. package/dist/searchee.d.ts +108 -0
  158. package/dist/searchee.js +689 -0
  159. package/dist/searchee.js.map +1 -0
  160. package/dist/server.d.ts +4 -0
  161. package/dist/server.js +65 -0
  162. package/dist/server.js.map +1 -0
  163. package/dist/services/indexerService.d.ts +96 -0
  164. package/dist/services/indexerService.js +287 -0
  165. package/dist/services/indexerService.js.map +1 -0
  166. package/dist/sessionCookies.d.ts +5 -0
  167. package/dist/sessionCookies.js +27 -0
  168. package/dist/sessionCookies.js.map +1 -0
  169. package/dist/startup.d.ts +25 -0
  170. package/dist/startup.js +157 -0
  171. package/dist/startup.js.map +1 -0
  172. package/dist/torrent.d.ts +69 -0
  173. package/dist/torrent.js +641 -0
  174. package/dist/torrent.js.map +1 -0
  175. package/dist/torznab.d.ts +60 -0
  176. package/dist/torznab.js +711 -0
  177. package/dist/torznab.js.map +1 -0
  178. package/dist/trpc/fastifyAdapter.d.ts +2 -0
  179. package/dist/trpc/fastifyAdapter.js +9 -0
  180. package/dist/trpc/fastifyAdapter.js.map +1 -0
  181. package/dist/trpc/index.d.ts +49 -0
  182. package/dist/trpc/index.js +53 -0
  183. package/dist/trpc/index.js.map +1 -0
  184. package/dist/trpc/routers/auth.d.ts +43 -0
  185. package/dist/trpc/routers/auth.js +116 -0
  186. package/dist/trpc/routers/auth.js.map +1 -0
  187. package/dist/trpc/routers/clients.d.ts +21 -0
  188. package/dist/trpc/routers/clients.js +65 -0
  189. package/dist/trpc/routers/clients.js.map +1 -0
  190. package/dist/trpc/routers/health.d.ts +14 -0
  191. package/dist/trpc/routers/health.js +20 -0
  192. package/dist/trpc/routers/health.js.map +1 -0
  193. package/dist/trpc/routers/index.d.ts +391 -0
  194. package/dist/trpc/routers/index.js +23 -0
  195. package/dist/trpc/routers/index.js.map +1 -0
  196. package/dist/trpc/routers/indexers.d.ts +75 -0
  197. package/dist/trpc/routers/indexers.js +79 -0
  198. package/dist/trpc/routers/indexers.js.map +1 -0
  199. package/dist/trpc/routers/jobs.d.ts +33 -0
  200. package/dist/trpc/routers/jobs.js +84 -0
  201. package/dist/trpc/routers/jobs.js.map +1 -0
  202. package/dist/trpc/routers/logs.d.ts +27 -0
  203. package/dist/trpc/routers/logs.js +91 -0
  204. package/dist/trpc/routers/logs.js.map +1 -0
  205. package/dist/trpc/routers/searchees.d.ts +51 -0
  206. package/dist/trpc/routers/searchees.js +156 -0
  207. package/dist/trpc/routers/searchees.js.map +1 -0
  208. package/dist/trpc/routers/settings.d.ts +83 -0
  209. package/dist/trpc/routers/settings.js +92 -0
  210. package/dist/trpc/routers/settings.js.map +1 -0
  211. package/dist/trpc/routers/stats.d.ts +42 -0
  212. package/dist/trpc/routers/stats.js +102 -0
  213. package/dist/trpc/routers/stats.js.map +1 -0
  214. package/dist/userAuth.d.ts +21 -0
  215. package/dist/userAuth.js +86 -0
  216. package/dist/userAuth.js.map +1 -0
  217. package/dist/utils/authUtils.d.ts +10 -0
  218. package/dist/utils/authUtils.js +24 -0
  219. package/dist/utils/authUtils.js.map +1 -0
  220. package/dist/utils/logWatcher.d.ts +28 -0
  221. package/dist/utils/logWatcher.js +218 -0
  222. package/dist/utils/logWatcher.js.map +1 -0
  223. package/dist/utils/object.d.ts +1 -0
  224. package/dist/utils/object.js +4 -0
  225. package/dist/utils/object.js.map +1 -0
  226. package/dist/utils.d.ts +175 -0
  227. package/dist/utils.js +660 -0
  228. package/dist/utils.js.map +1 -0
  229. package/package.json +2 -2
@@ -0,0 +1,321 @@
1
+ import { accessSync, constants, mkdirSync } from "fs";
2
+ import { createRequire } from "module";
3
+ import ms from "ms";
4
+ import { isDeepStrictEqual } from "node:util";
5
+ import path from "path";
6
+ import { pathToFileURL } from "url";
7
+ import { Action, LinkType, LOGS_FOLDER, MatchMode, TORRENT_CACHE_FOLDER, } from "./constants.js";
8
+ import { CrossSeedError } from "./errors.js";
9
+ import { omitUndefined } from "./utils/object.js";
10
+ const require = createRequire(import.meta.url);
11
+ const packageDotJson = require("../package.json");
12
+ export const UNPARSABLE_CONFIG_MESSAGE = `
13
+ Your config file is improperly formatted. The location of the error is above, \
14
+ but you may have to look backwards to see the root cause.
15
+ Make sure that
16
+ - strings (words, URLs, etc) are wrapped in "quotation marks"
17
+ - any arrays (lists of things, even one thing) are wrapped in [square brackets]
18
+ - every entry has a comma after it, including inside arrays
19
+ `.trim();
20
+ /**
21
+ * Returns the appDir relevant to the OS/Environment. Due to initialization of
22
+ * the SQLiteDB during read of db.ts - will need to create appDir in this function if
23
+ * it does not exist (ENOENT)
24
+ *
25
+ * @return a string representing the absolute path to cross-seed config directory
26
+ */
27
+ export function appDir() {
28
+ const appDir = process.env.CONFIG_DIR ||
29
+ (process.platform === "win32"
30
+ ? path.resolve(process.env.LOCALAPPDATA, packageDotJson.name)
31
+ : path.resolve(process.env.HOME, `.${packageDotJson.name}`));
32
+ try {
33
+ accessSync(appDir, constants.R_OK | constants.W_OK);
34
+ }
35
+ catch (e) {
36
+ if (e.code === "ENOENT") {
37
+ mkdirSync(appDir, { recursive: true });
38
+ return appDir;
39
+ }
40
+ const dockerMessage = process.env.DOCKER_ENV === "true"
41
+ ? ` Use chown to set the owner to ${process.getuid()}:${process.getgid()}`
42
+ : "";
43
+ throw new CrossSeedError(`cross-seed does not have R/W permissions on your config directory.${dockerMessage}`);
44
+ }
45
+ return appDir;
46
+ }
47
+ export function createAppDirHierarchy() {
48
+ const appDirPath = appDir();
49
+ mkdirSync(path.join(appDirPath, TORRENT_CACHE_FOLDER), { recursive: true });
50
+ mkdirSync(path.join(appDirPath, LOGS_FOLDER), { recursive: true });
51
+ }
52
+ export function getDefaultRuntimeConfig() {
53
+ return {
54
+ delay: 30,
55
+ torznab: [],
56
+ useClientTorrents: true,
57
+ dataDirs: [],
58
+ matchMode: MatchMode.FLEXIBLE,
59
+ skipRecheck: true,
60
+ autoResumeMaxDownload: 52_428_800,
61
+ ignoreNonRelevantFilesToResume: false,
62
+ linkDirs: [],
63
+ linkType: LinkType.HARDLINK,
64
+ flatLinking: false,
65
+ maxDataDepth: 2,
66
+ linkCategory: "cross-seed-link",
67
+ outputDir: path.join(appDir(), "cross-seeds"),
68
+ ignoreTitles: false,
69
+ includeSingleEpisodes: false,
70
+ verbose: false,
71
+ includeNonVideos: false,
72
+ seasonFromEpisodes: 1,
73
+ fuzzySizeThreshold: 0.02,
74
+ excludeOlder: ms("2 weeks"),
75
+ excludeRecentSearch: ms("3 days"),
76
+ action: Action.INJECT,
77
+ torrentClients: [],
78
+ duplicateCategories: false,
79
+ notificationWebhookUrls: [],
80
+ torrents: [],
81
+ port: 2468,
82
+ host: "0.0.0.0",
83
+ basePath: "",
84
+ searchCadence: ms("1 day"),
85
+ rssCadence: ms("30 minutes"),
86
+ snatchTimeout: ms("30 seconds"),
87
+ searchTimeout: ms("2 minutes"),
88
+ searchLimit: 400,
89
+ blockList: [],
90
+ sonarr: [],
91
+ radarr: [],
92
+ };
93
+ }
94
+ export function stripDefaults(config) {
95
+ const defaults = getDefaultRuntimeConfig();
96
+ const overrides = {};
97
+ const overridesWritable = overrides;
98
+ for (const [key, value] of Object.entries(config)) {
99
+ if (value === undefined)
100
+ continue;
101
+ if (!(key in defaults) || !isDeepStrictEqual(value, defaults[key])) {
102
+ overridesWritable[key] = structuredClone(value);
103
+ }
104
+ }
105
+ return overrides;
106
+ }
107
+ export function transformFileConfig(fileConfig) {
108
+ const result = {};
109
+ if (typeof fileConfig.delay === "number") {
110
+ result.delay = fileConfig.delay;
111
+ }
112
+ if (isStringArray(fileConfig.torznab)) {
113
+ result.torznab = fileConfig.torznab;
114
+ }
115
+ if (typeof fileConfig.useClientTorrents === "boolean") {
116
+ result.useClientTorrents = fileConfig.useClientTorrents;
117
+ }
118
+ if (isStringArray(fileConfig.dataDirs)) {
119
+ result.dataDirs = fileConfig.dataDirs;
120
+ }
121
+ if (fileConfig.matchMode === MatchMode.STRICT ||
122
+ fileConfig.matchMode === MatchMode.FLEXIBLE ||
123
+ fileConfig.matchMode === MatchMode.PARTIAL) {
124
+ result.matchMode = fileConfig.matchMode;
125
+ }
126
+ else if (fileConfig.matchMode === "risky") {
127
+ result.matchMode = MatchMode.FLEXIBLE;
128
+ }
129
+ if (typeof fileConfig.skipRecheck === "boolean") {
130
+ result.skipRecheck = fileConfig.skipRecheck;
131
+ }
132
+ if (typeof fileConfig.autoResumeMaxDownload === "number") {
133
+ result.autoResumeMaxDownload = fileConfig.autoResumeMaxDownload;
134
+ }
135
+ if (typeof fileConfig.ignoreNonRelevantFilesToResume === "boolean") {
136
+ result.ignoreNonRelevantFilesToResume =
137
+ fileConfig.ignoreNonRelevantFilesToResume;
138
+ }
139
+ const linkDirs = resolveLinkDirs(fileConfig);
140
+ if (linkDirs) {
141
+ result.linkDirs = linkDirs;
142
+ }
143
+ if (fileConfig.linkType === LinkType.SYMLINK ||
144
+ fileConfig.linkType === LinkType.HARDLINK ||
145
+ fileConfig.linkType === LinkType.REFLINK ||
146
+ fileConfig.linkType === LinkType.REFLINK_OR_COPY) {
147
+ result.linkType = fileConfig.linkType;
148
+ }
149
+ else if (fileConfig.linkType === undefined && linkDirs?.length) {
150
+ result.linkType = LinkType.SYMLINK;
151
+ }
152
+ if (typeof fileConfig.flatLinking === "boolean") {
153
+ result.flatLinking = fileConfig.flatLinking;
154
+ }
155
+ if (typeof fileConfig.maxDataDepth === "number") {
156
+ result.maxDataDepth = fileConfig.maxDataDepth;
157
+ }
158
+ if (typeof fileConfig.linkCategory === "string") {
159
+ result.linkCategory = fileConfig.linkCategory;
160
+ }
161
+ if (typeof fileConfig.torrentDir === "string") {
162
+ result.torrentDir = fileConfig.torrentDir;
163
+ }
164
+ if (typeof fileConfig.outputDir === "string") {
165
+ result.outputDir = fileConfig.outputDir;
166
+ }
167
+ if (typeof fileConfig.injectDir === "string") {
168
+ result.injectDir = fileConfig.injectDir;
169
+ }
170
+ if (typeof fileConfig.ignoreTitles === "boolean") {
171
+ result.ignoreTitles = fileConfig.ignoreTitles;
172
+ }
173
+ if (typeof fileConfig.includeSingleEpisodes === "boolean") {
174
+ result.includeSingleEpisodes = fileConfig.includeSingleEpisodes;
175
+ }
176
+ if (typeof fileConfig.includeNonVideos === "boolean") {
177
+ result.includeNonVideos = fileConfig.includeNonVideos;
178
+ }
179
+ const seasonFromEpisodes = normalizeSeasonFromEpisodes(fileConfig.seasonFromEpisodes);
180
+ if (seasonFromEpisodes !== undefined) {
181
+ result.seasonFromEpisodes = seasonFromEpisodes;
182
+ }
183
+ if (typeof fileConfig.fuzzySizeThreshold === "number") {
184
+ result.fuzzySizeThreshold = fileConfig.fuzzySizeThreshold;
185
+ }
186
+ const excludeOlder = parseDurationValue(fileConfig.excludeOlder);
187
+ if (excludeOlder !== undefined) {
188
+ result.excludeOlder = excludeOlder;
189
+ }
190
+ const excludeRecentSearch = parseDurationValue(fileConfig.excludeRecentSearch);
191
+ if (excludeRecentSearch !== undefined) {
192
+ result.excludeRecentSearch = excludeRecentSearch;
193
+ }
194
+ if (fileConfig.action === Action.SAVE ||
195
+ fileConfig.action === Action.INJECT) {
196
+ result.action = fileConfig.action;
197
+ }
198
+ const torrentClients = collectTorrentClients(fileConfig);
199
+ if (torrentClients) {
200
+ result.torrentClients = torrentClients;
201
+ }
202
+ if (typeof fileConfig.duplicateCategories === "boolean") {
203
+ result.duplicateCategories = fileConfig.duplicateCategories;
204
+ }
205
+ const webhookUrls = collectWebhookUrls(fileConfig);
206
+ if (webhookUrls) {
207
+ result.notificationWebhookUrls = webhookUrls;
208
+ }
209
+ if (typeof fileConfig.port === "number") {
210
+ result.port = fileConfig.port;
211
+ }
212
+ if (typeof fileConfig.host === "string") {
213
+ result.host = fileConfig.host;
214
+ }
215
+ const searchCadence = parseDurationValue(fileConfig.searchCadence);
216
+ if (searchCadence !== undefined) {
217
+ result.searchCadence = searchCadence;
218
+ }
219
+ const rssCadence = parseDurationValue(fileConfig.rssCadence);
220
+ if (rssCadence !== undefined) {
221
+ result.rssCadence = rssCadence;
222
+ }
223
+ const snatchTimeout = parseDurationValue(fileConfig.snatchTimeout);
224
+ if (snatchTimeout !== undefined) {
225
+ result.snatchTimeout = snatchTimeout;
226
+ }
227
+ const searchTimeout = parseDurationValue(fileConfig.searchTimeout);
228
+ if (searchTimeout !== undefined) {
229
+ result.searchTimeout = searchTimeout;
230
+ }
231
+ if (typeof fileConfig.searchLimit === "number") {
232
+ result.searchLimit = fileConfig.searchLimit;
233
+ }
234
+ if (isStringArray(fileConfig.blockList)) {
235
+ result.blockList = fileConfig.blockList;
236
+ }
237
+ if (typeof fileConfig.apiKey === "string") {
238
+ result.apiKey = fileConfig.apiKey;
239
+ }
240
+ if (isStringArray(fileConfig.sonarr)) {
241
+ result.sonarr = fileConfig.sonarr;
242
+ }
243
+ if (isStringArray(fileConfig.radarr)) {
244
+ result.radarr = fileConfig.radarr;
245
+ }
246
+ return omitUndefined(result);
247
+ }
248
+ function isStringArray(value) {
249
+ return (Array.isArray(value) && value.every((item) => typeof item === "string"));
250
+ }
251
+ function normalizeSeasonFromEpisodes(value) {
252
+ if (value === null || value === false)
253
+ return 0;
254
+ if (typeof value === "number" && Number.isFinite(value))
255
+ return value;
256
+ return undefined;
257
+ }
258
+ function parseDurationValue(value) {
259
+ if (value === null)
260
+ return 0;
261
+ if (typeof value === "number" && Number.isFinite(value))
262
+ return value;
263
+ if (typeof value === "string") {
264
+ const parsed = ms(value);
265
+ if (typeof parsed === "number" && Number.isFinite(parsed)) {
266
+ return parsed;
267
+ }
268
+ }
269
+ return undefined;
270
+ }
271
+ function resolveLinkDirs(fileConfig) {
272
+ if (isStringArray(fileConfig.linkDirs) && fileConfig.linkDirs.length) {
273
+ return fileConfig.linkDirs;
274
+ }
275
+ if (typeof fileConfig.linkDir === "string") {
276
+ return [fileConfig.linkDir];
277
+ }
278
+ return undefined;
279
+ }
280
+ function collectTorrentClients(fileConfig) {
281
+ const clients = new Set();
282
+ if (isStringArray(fileConfig.torrentClients)) {
283
+ fileConfig.torrentClients.forEach((client) => clients.add(client));
284
+ }
285
+ addClient(clients, "qbittorrent", fileConfig.qbittorrentUrl);
286
+ addClient(clients, "rtorrent", fileConfig.rtorrentRpcUrl);
287
+ addClient(clients, "transmission", fileConfig.transmissionRpcUrl);
288
+ addClient(clients, "deluge", fileConfig.delugeRpcUrl);
289
+ return clients.size ? Array.from(clients) : undefined;
290
+ }
291
+ function addClient(clients, prefix, url) {
292
+ if (typeof url === "string") {
293
+ clients.add(`${prefix}:${url}`);
294
+ }
295
+ }
296
+ function collectWebhookUrls(fileConfig) {
297
+ const urls = new Set();
298
+ if (isStringArray(fileConfig.notificationWebhookUrls)) {
299
+ fileConfig.notificationWebhookUrls.forEach((url) => {
300
+ if (typeof url === "string")
301
+ urls.add(url);
302
+ });
303
+ }
304
+ if (typeof fileConfig.notificationWebhookUrl === "string") {
305
+ urls.add(fileConfig.notificationWebhookUrl);
306
+ }
307
+ return urls.size ? Array.from(urls) : undefined;
308
+ }
309
+ export async function getFileConfig() {
310
+ const configPath = path.join(appDir(), "config.js");
311
+ try {
312
+ return (await import(pathToFileURL(configPath).toString())).default;
313
+ }
314
+ catch (e) {
315
+ if (e.code === "ERR_MODULE_NOT_FOUND") {
316
+ return undefined;
317
+ }
318
+ throw e;
319
+ }
320
+ }
321
+ //# sourceMappingURL=configuration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configuration.js","sourceRoot":"","sources":["../src/configuration.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,108 @@
1
+ import { Action, BlocklistType, LinkType, MatchMode } from "@cross-seed/shared/constants";
2
+ export { Action, BlocklistType, LinkType, MatchMode };
3
+ export declare const PROGRAM_NAME: any;
4
+ export declare const PROGRAM_VERSION: any;
5
+ export declare const USER_AGENT: string;
6
+ export declare const TORRENT_TAG = "cross-seed";
7
+ export declare const TORRENT_CATEGORY_SUFFIX = ".cross-seed";
8
+ export declare const NEWLINE_INDENT = "\n\t\t\t\t";
9
+ export declare const EP_REGEX: RegExp;
10
+ export declare const BAD_EP_REGEX: RegExp;
11
+ export declare const IS_MULTI_EP_REGEX: RegExp;
12
+ export declare const SEASON_REGEX: RegExp;
13
+ export declare const BAD_SEASON_REGEX: RegExp;
14
+ export declare const MOVIE_REGEX: RegExp;
15
+ export declare const ANIME_REGEX: RegExp;
16
+ export declare const RELEASE_GROUP_REGEX: RegExp;
17
+ export declare const ANIME_GROUP_REGEX: RegExp;
18
+ export declare const RESOLUTION_REGEX: RegExp;
19
+ export declare const RES_STRICT_REGEX: RegExp;
20
+ export declare const YEARS_REGEX: RegExp;
21
+ export declare const REPACK_PROPER_REGEX: RegExp;
22
+ export declare const ARR_PROPER_REGEX: RegExp;
23
+ export declare const SCENE_TITLE_REGEX: RegExp;
24
+ export declare const ARR_DIR_REGEX: RegExp;
25
+ export declare const SONARR_SUBFOLDERS_REGEX: RegExp;
26
+ export declare const NON_UNICODE_ALPHANUM_REGEX: RegExp;
27
+ export declare const CALIBRE_INDEXNUM_REGEX: RegExp;
28
+ export declare const INFO_HASH_REGEX: RegExp;
29
+ export declare const SAVED_TORRENTS_INFO_REGEX: RegExp;
30
+ export declare const BAD_GROUP_PARSE_REGEX: RegExp;
31
+ export declare const JSON_VALUES_REGEX: RegExp;
32
+ export declare const ABS_WIN_PATH_REGEX: RegExp;
33
+ export declare const AKA_REGEX: RegExp;
34
+ export declare const ALL_SPACES_REGEX: RegExp;
35
+ export declare const ALL_SQUARE_BRACKETS_REGEX: RegExp;
36
+ export declare const ALL_PARENTHESES_REGEX: RegExp;
37
+ export declare function parseSource(title: string): string | null;
38
+ export declare function sourceRegexRemove(title: string): string;
39
+ export declare const VIDEO_EXTENSIONS: string[];
40
+ export declare const VIDEO_DISC_EXTENSIONS: string[];
41
+ export declare const AUDIO_EXTENSIONS: string[];
42
+ export declare const BOOK_EXTENSIONS: string[];
43
+ export declare const ALL_EXTENSIONS: string[];
44
+ export declare const TORRENT_CACHE_FOLDER = "torrent_cache";
45
+ export declare const LOGS_FOLDER = "logs";
46
+ export declare const UNKNOWN_TRACKER = "UnknownTracker";
47
+ export declare const MAX_PATH_BYTES = 255;
48
+ export declare const LEVENSHTEIN_DIVISOR = 3;
49
+ export declare const MIN_VIDEO_QUERY_LENGTH = 3;
50
+ export declare enum MediaType {
51
+ EPISODE = "episode",
52
+ SEASON = "pack",
53
+ MOVIE = "movie",
54
+ ANIME = "anime",
55
+ VIDEO = "video",
56
+ AUDIO = "audio",
57
+ BOOK = "book",
58
+ OTHER = "unknown"
59
+ }
60
+ export declare enum InjectionResult {
61
+ SUCCESS = "INJECTED",
62
+ FAILURE = "FAILURE",
63
+ ALREADY_EXISTS = "ALREADY_EXISTS",
64
+ TORRENT_NOT_COMPLETE = "TORRENT_NOT_COMPLETE"
65
+ }
66
+ export declare enum SaveResult {
67
+ SAVED = "SAVED"
68
+ }
69
+ export type ActionResult = InjectionResult | SaveResult;
70
+ export declare enum Decision {
71
+ MATCH = "MATCH",
72
+ MATCH_SIZE_ONLY = "MATCH_SIZE_ONLY",
73
+ MATCH_PARTIAL = "MATCH_PARTIAL",
74
+ FUZZY_SIZE_MISMATCH = "FUZZY_SIZE_MISMATCH",
75
+ SIZE_MISMATCH = "SIZE_MISMATCH",
76
+ PARTIAL_SIZE_MISMATCH = "PARTIAL_SIZE_MISMATCH",
77
+ NO_DOWNLOAD_LINK = "NO_DOWNLOAD_LINK",
78
+ DOWNLOAD_FAILED = "DOWNLOAD_FAILED",
79
+ MAGNET_LINK = "MAGNET_LINK",
80
+ RATE_LIMITED = "RATE_LIMITED",
81
+ /**
82
+ * Searchee and Candidate infoHash matches. Usually happens with public
83
+ * torrents and torrents added by radarr/sonarr before cross-seed on announces.
84
+ * Useful for the inject job as we ignore INFO_HASH_ALREADY_EXISTS and
85
+ * for reporting a 204 announce status code instead of 200 from exists.
86
+ */
87
+ SAME_INFO_HASH = "SAME_INFO_HASH",
88
+ /**
89
+ * Checked after SAME_INFO_HASH.
90
+ */
91
+ INFO_HASH_ALREADY_EXISTS = "INFO_HASH_ALREADY_EXISTS",
92
+ FILE_TREE_MISMATCH = "FILE_TREE_MISMATCH",
93
+ RELEASE_GROUP_MISMATCH = "RELEASE_GROUP_MISMATCH",
94
+ BLOCKED_RELEASE = "BLOCKED_RELEASE",
95
+ PROPER_REPACK_MISMATCH = "PROPER_REPACK_MISMATCH",
96
+ RESOLUTION_MISMATCH = "RESOLUTION_MISMATCH",
97
+ SOURCE_MISMATCH = "SOURCE_MISMATCH"
98
+ }
99
+ export type DecisionAnyMatch = Decision.MATCH | Decision.MATCH_SIZE_ONLY | Decision.MATCH_PARTIAL;
100
+ export declare function isAnyMatchedDecision(decision: Decision): decision is DecisionAnyMatch;
101
+ export declare function isStaticDecision(decision: Decision): boolean;
102
+ export declare function parseBlocklistEntry(blocklistEntry: string): {
103
+ blocklistType: BlocklistType;
104
+ blocklistValue: string;
105
+ };
106
+ export declare const IGNORED_FOLDERS_SUBSTRINGS: string[];
107
+ export declare const RESUME_EXCLUDED_KEYWORDS: string[];
108
+ export declare const RESUME_EXCLUDED_EXTS: string[];