cross-seed 3.4.2 → 4.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 (53) hide show
  1. package/README.md +14 -93
  2. package/dist/action.js +48 -0
  3. package/dist/action.js.map +1 -0
  4. package/dist/cache.js +13 -0
  5. package/dist/cache.js.map +1 -0
  6. package/dist/cmd.js +34 -23
  7. package/dist/cmd.js.map +1 -1
  8. package/dist/config.template.cjs +38 -21
  9. package/dist/config.template.cjs.map +1 -1
  10. package/dist/config.template.docker.cjs +41 -23
  11. package/dist/config.template.docker.cjs.map +1 -1
  12. package/dist/configuration.js.map +1 -1
  13. package/dist/constants.js +4 -0
  14. package/dist/constants.js.map +1 -1
  15. package/dist/db.js +11 -28
  16. package/dist/db.js.map +1 -1
  17. package/dist/decide.js +37 -21
  18. package/dist/decide.js.map +1 -1
  19. package/dist/errors.js +8 -0
  20. package/dist/errors.js.map +1 -1
  21. package/dist/jobs.js +73 -0
  22. package/dist/jobs.js.map +1 -0
  23. package/dist/logger.js +6 -2
  24. package/dist/logger.js.map +1 -1
  25. package/dist/migrations/00-initialSchema.js +75 -0
  26. package/dist/migrations/00-initialSchema.js.map +1 -0
  27. package/dist/migrations/01-jobs.js +17 -0
  28. package/dist/migrations/01-jobs.js.map +1 -0
  29. package/dist/migrations/migrations.js +9 -0
  30. package/dist/migrations/migrations.js.map +1 -0
  31. package/dist/pipeline.js +76 -95
  32. package/dist/pipeline.js.map +1 -1
  33. package/dist/preFilter.js +20 -18
  34. package/dist/preFilter.js.map +1 -1
  35. package/dist/pushNotifier.js +37 -0
  36. package/dist/pushNotifier.js.map +1 -1
  37. package/dist/runtimeConfig.js +0 -1
  38. package/dist/runtimeConfig.js.map +1 -1
  39. package/dist/server.js +5 -4
  40. package/dist/server.js.map +1 -1
  41. package/dist/signalHandlers.js +7 -2
  42. package/dist/signalHandlers.js.map +1 -1
  43. package/dist/startup.js +0 -2
  44. package/dist/startup.js.map +1 -1
  45. package/dist/torrent.js +26 -13
  46. package/dist/torrent.js.map +1 -1
  47. package/dist/torznab.js +2 -2
  48. package/dist/torznab.js.map +1 -1
  49. package/dist/utils.js +16 -4
  50. package/dist/utils.js.map +1 -1
  51. package/package.json +5 -3
  52. package/dist/jackett.js +0 -64
  53. package/dist/jackett.js.map +0 -1
package/dist/db.js CHANGED
@@ -1,29 +1,12 @@
1
- var _a;
2
- import { unlinkSync } from "fs";
3
- import { JSONFileSync, LowSync } from "lowdb";
4
- import path from "path";
5
- import rimraf from "rimraf";
6
- import { appDir, createAppDir } from "./configuration.js";
7
- createAppDir();
8
- const emptyDatabase = {
9
- searchees: {},
10
- decisions: {},
11
- indexedTorrents: [],
12
- dbVersion: 3,
13
- };
14
- const db = new LowSync(new JSONFileSync(path.join(appDir(), "cache.json")));
15
- db.read();
16
- (_a = db.data) !== null && _a !== void 0 ? _a : (db.data = emptyDatabase);
17
- const dbVersion = db.data.dbVersion;
18
- if (!dbVersion || dbVersion < emptyDatabase.dbVersion) {
19
- db.data = emptyDatabase;
20
- }
21
- db.write();
22
- export function dropDatabase() {
23
- db.data = emptyDatabase;
24
- db.write();
25
- unlinkSync(path.join(appDir(), "cache.json"));
26
- rimraf.sync(path.join(appDir(), "torrent_cache"));
27
- }
28
- export default db;
1
+ import Knex from "knex";
2
+ import { join } from "path";
3
+ import { appDir } from "./configuration.js";
4
+ import { migrations } from "./migrations/migrations.js";
5
+ export const db = Knex.knex({
6
+ client: "better-sqlite3",
7
+ connection: { filename: join(appDir(), "cross-seed.db") },
8
+ migrations: { migrationSource: migrations, disableTransactions: true },
9
+ useNullAsDefault: true,
10
+ acquireConnectionTimeout: 5000,
11
+ });
29
12
  //# sourceMappingURL=db.js.map
package/dist/db.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"db.js","sourceRoot":"","sources":["../src/db.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAC9C,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAG1D,YAAY,EAAE,CAAC;AA4Bf,MAAM,aAAa,GAAG;IACrB,SAAS,EAAE,EAAE;IACb,SAAS,EAAE,EAAE;IACb,eAAe,EAAE,EAAE;IACnB,SAAS,EAAE,CAAC;CACZ,CAAC;AAEF,MAAM,EAAE,GAAG,IAAI,OAAO,CACrB,IAAI,YAAY,CAAS,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,YAAY,CAAC,CAAC,CAC3D,CAAC;AAEF,EAAE,CAAC,IAAI,EAAE,CAAC;AAEV,MAAA,EAAE,CAAC,IAAI,oCAAP,EAAE,CAAC,IAAI,GAAK,aAAa,EAAC;AAE1B,MAAM,SAAS,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC;AAEpC,IAAI,CAAC,SAAS,IAAI,SAAS,GAAG,aAAa,CAAC,SAAS,EAAE;IACtD,EAAE,CAAC,IAAI,GAAG,aAAa,CAAC;CACxB;AAED,EAAE,CAAC,KAAK,EAAE,CAAC;AAEX,MAAM,UAAU,YAAY;IAC3B,EAAE,CAAC,IAAI,GAAG,aAAa,CAAC;IACxB,EAAE,CAAC,KAAK,EAAE,CAAC;IACX,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,YAAY,CAAC,CAAC,CAAC;IAC9C,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,eAAe,CAAC,CAAC,CAAC;AACnD,CAAC;AAED,eAAe,EAAE,CAAC"}
1
+ {"version":3,"file":"db.js","sourceRoot":"","sources":["../src/db.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAExD,MAAM,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC;IAC3B,MAAM,EAAE,gBAAgB;IACxB,UAAU,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,eAAe,CAAC,EAAE;IACzD,UAAU,EAAE,EAAE,eAAe,EAAE,UAAU,EAAE,mBAAmB,EAAE,IAAI,EAAE;IACtE,gBAAgB,EAAE,IAAI;IACtB,wBAAwB,EAAE,IAAI;CAC9B,CAAC,CAAC"}
package/dist/decide.js CHANGED
@@ -3,9 +3,9 @@ import parseTorrent from "parse-torrent";
3
3
  import path from "path";
4
4
  import { appDir } from "./configuration.js";
5
5
  import { Decision, TORRENT_CACHE_FOLDER } from "./constants.js";
6
- import db from "./db.js";
7
6
  import { Label, logger } from "./logger.js";
8
7
  import { getRuntimeConfig } from "./runtimeConfig.js";
8
+ import { db } from "./db.js";
9
9
  import { parseTorrentFromFilename, parseTorrentFromURL } from "./torrent.js";
10
10
  const createReasonLogger = (Title, tracker, name) => (decision, cached) => {
11
11
  function logReason(reason) {
@@ -72,7 +72,7 @@ async function assessCandidateHelper({ link, size }, searchee, hashesToExclude)
72
72
  if (!compareFileTrees(info, searchee)) {
73
73
  return { decision: Decision.FILE_TREE_MISMATCH };
74
74
  }
75
- return { decision: Decision.MATCH, info };
75
+ return { decision: Decision.MATCH, metafile: info };
76
76
  }
77
77
  function existsInTorrentCache(infoHash) {
78
78
  return existsSync(path.join(appDir(), TORRENT_CACHE_FOLDER, `${infoHash}.cached.torrent`));
@@ -83,27 +83,38 @@ async function getCachedTorrentFile(infoHash) {
83
83
  function cacheTorrentFile(meta) {
84
84
  writeFileSync(path.join(appDir(), TORRENT_CACHE_FOLDER, `${meta.infoHash}.cached.torrent`), parseTorrent.toTorrentFile(meta));
85
85
  }
86
- async function assessAndSaveResults(result, searchee, Guid, infoHashesToExclude) {
86
+ async function assessAndSaveResults(result, searchee, guid, infoHashesToExclude) {
87
87
  const assessment = await assessCandidateHelper(result, searchee, infoHashesToExclude);
88
- db.data.decisions[searchee.name][Guid] = {
89
- decision: assessment.decision,
90
- lastSeen: Date.now(),
91
- firstSeen: Date.now(),
92
- };
93
88
  if (assessment.decision === Decision.MATCH) {
94
- db.data.decisions[searchee.name][Guid].infoHash =
95
- assessment.info.infoHash;
96
- cacheTorrentFile(assessment.info);
89
+ cacheTorrentFile(assessment.metafile);
97
90
  }
91
+ await db.transaction(async (trx) => {
92
+ const now = Date.now();
93
+ const { id } = await trx("searchee")
94
+ .select("id")
95
+ .where({ name: searchee.name })
96
+ .first();
97
+ await trx("decision").insert({
98
+ searchee_id: id,
99
+ guid: guid,
100
+ decision: assessment.decision,
101
+ info_hash: assessment.decision === Decision.MATCH
102
+ ? assessment.metafile.infoHash
103
+ : null,
104
+ last_seen: now,
105
+ first_seen: now,
106
+ });
107
+ });
98
108
  return assessment;
99
109
  }
100
110
  async function assessCandidateCaching(candidate, searchee, infoHashesToExclude) {
101
- var _a;
102
- var _b, _c;
103
111
  const { guid, name, tracker } = candidate;
104
112
  const logReason = createReasonLogger(name, tracker, searchee.name);
105
- (_a = (_b = db.data.decisions)[_c = searchee.name]) !== null && _a !== void 0 ? _a : (_b[_c] = {});
106
- const cacheEntry = db.data.decisions[searchee.name][guid];
113
+ const cacheEntry = await db("decision")
114
+ .select("decision.*")
115
+ .join("searchee", "decision.searchee_id", "searchee.id")
116
+ .where({ name: searchee.name, guid })
117
+ .first();
107
118
  let assessment;
108
119
  if (!(cacheEntry === null || cacheEntry === void 0 ? void 0 : cacheEntry.decision) ||
109
120
  cacheEntry.decision === Decision.DOWNLOAD_FAILED) {
@@ -114,15 +125,16 @@ async function assessCandidateCaching(candidate, searchee, infoHashesToExclude)
114
125
  infoHashesToExclude.includes(cacheEntry.infoHash)) {
115
126
  // has been added since the last run
116
127
  assessment = { decision: Decision.INFO_HASH_ALREADY_EXISTS };
117
- db.data.decisions[searchee.name][guid].decision =
118
- Decision.INFO_HASH_ALREADY_EXISTS;
128
+ await db("decision")
129
+ .where({ id: cacheEntry.id })
130
+ .update({ decision: Decision.INFO_HASH_ALREADY_EXISTS });
119
131
  }
120
132
  else if (cacheEntry.decision === Decision.MATCH &&
121
- existsInTorrentCache(cacheEntry.infoHash)) {
133
+ existsInTorrentCache(cacheEntry.info_hash)) {
122
134
  // cached match
123
135
  assessment = {
124
136
  decision: cacheEntry.decision,
125
- info: await getCachedTorrentFile(cacheEntry.infoHash),
137
+ metafile: await getCachedTorrentFile(cacheEntry.info_hash),
126
138
  };
127
139
  }
128
140
  else if (cacheEntry.decision === Decision.MATCH) {
@@ -134,8 +146,12 @@ async function assessCandidateCaching(candidate, searchee, infoHashesToExclude)
134
146
  assessment = { decision: cacheEntry.decision };
135
147
  logReason(cacheEntry.decision, true);
136
148
  }
137
- db.data.decisions[searchee.name][guid].lastSeen = Date.now();
138
- db.write();
149
+ // if previously known
150
+ if (cacheEntry) {
151
+ await db("decision")
152
+ .where({ id: cacheEntry.id })
153
+ .update({ last_seen: Date.now() });
154
+ }
139
155
  return assessment;
140
156
  }
141
157
  export { assessCandidateCaching as assessCandidate };
@@ -1 +1 @@
1
- {"version":3,"file":"decide.js","sourceRoot":"","sources":["../src/decide.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"decide.js","sourceRoot":"","sources":["../src/decide.ts"],"names":[],"mappings":"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"}
package/dist/errors.js CHANGED
@@ -8,4 +8,12 @@ export class CrossSeedError extends Error {
8
8
  logger.error(this.message);
9
9
  }
10
10
  }
11
+ export function exitOnCrossSeedErrors(e) {
12
+ if (e instanceof CrossSeedError) {
13
+ e.print();
14
+ process.exitCode = 1;
15
+ return;
16
+ }
17
+ throw e;
18
+ }
11
19
  //# sourceMappingURL=errors.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,MAAM,OAAO,cAAe,SAAQ,KAAK;IACxC,YAAY,OAAe;QAC1B,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,OAAO,IAAI,CAAC,KAAK,CAAC;IACnB,CAAC;IAED,KAAK;QACJ,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC5B,CAAC;CACD"}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,MAAM,OAAO,cAAe,SAAQ,KAAK;IACxC,YAAY,OAAe;QAC1B,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,OAAO,IAAI,CAAC,KAAK,CAAC;IACnB,CAAC;IAED,KAAK;QACJ,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC5B,CAAC;CACD;AAED,MAAM,UAAU,qBAAqB,CAAC,CAAC;IACtC,IAAI,CAAC,YAAY,cAAc,EAAE;QAChC,CAAC,CAAC,KAAK,EAAE,CAAC;QACV,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;KACP;IACD,MAAM,CAAC,CAAC;AACT,CAAC"}
package/dist/jobs.js ADDED
@@ -0,0 +1,73 @@
1
+ import ms from "ms";
2
+ import { db } from "./db.js";
3
+ import { main, scanRssFeeds } from "./pipeline.js";
4
+ import { exitOnCrossSeedErrors } from "./errors.js";
5
+ import { Label, logger } from "./logger.js";
6
+ import { getRuntimeConfig } from "./runtimeConfig.js";
7
+ class Job {
8
+ constructor(name, cadence, exec) {
9
+ this.name = name;
10
+ this.cadence = cadence;
11
+ this.exec = exec;
12
+ this.isActive = false;
13
+ }
14
+ async run() {
15
+ if (!this.isActive) {
16
+ this.isActive = true;
17
+ try {
18
+ logger.info({
19
+ label: Label.SCHEDULER,
20
+ message: `starting job: ${this.name}`,
21
+ });
22
+ await this.exec();
23
+ }
24
+ finally {
25
+ this.isActive = false;
26
+ }
27
+ }
28
+ }
29
+ }
30
+ const getJobs = () => {
31
+ const { rssCadence, searchCadence } = getRuntimeConfig();
32
+ return [
33
+ rssCadence && new Job("rss", rssCadence, scanRssFeeds),
34
+ searchCadence && new Job("search", searchCadence, main),
35
+ ].filter(Boolean);
36
+ };
37
+ export async function jobsLoop() {
38
+ const jobs = getJobs();
39
+ async function loop() {
40
+ var _a;
41
+ const now = Date.now();
42
+ for (const job of jobs) {
43
+ const lastRun = (_a = (await db("job_log")
44
+ .select("last_run")
45
+ .where({ name: job.name })
46
+ .first())) === null || _a === void 0 ? void 0 : _a.last_run;
47
+ // if it's never been run, you are eligible immediately
48
+ const eligibilityTs = lastRun ? lastRun + job.cadence : now;
49
+ const lastRunStr = lastRun ? `${ms(now - lastRun)} ago` : "never";
50
+ const nextRunStr = ms(eligibilityTs - now);
51
+ logger.verbose({
52
+ label: Label.SCHEDULER,
53
+ message: `${job.name}: last run ${lastRunStr}, next run in ${nextRunStr}`,
54
+ });
55
+ if (now >= eligibilityTs) {
56
+ job.run()
57
+ .then(async () => {
58
+ // upon success, update the log
59
+ await db("job_log")
60
+ .insert({ name: job.name, last_run: now })
61
+ .onConflict("name")
62
+ .merge();
63
+ })
64
+ .catch(exitOnCrossSeedErrors)
65
+ .catch((e) => void logger.error(e));
66
+ }
67
+ }
68
+ }
69
+ const interval = setInterval(loop, ms("1 minute"));
70
+ loop();
71
+ return () => clearInterval(interval);
72
+ }
73
+ //# sourceMappingURL=jobs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jobs.js","sourceRoot":"","sources":["../src/jobs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAC7B,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD,MAAM,GAAG;IAKR,YAAY,IAAI,EAAE,OAAO,EAAE,IAAI;QAC9B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,GAAG;QACR,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YACnB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;YACrB,IAAI;gBACH,MAAM,CAAC,IAAI,CAAC;oBACX,KAAK,EAAE,KAAK,CAAC,SAAS;oBACtB,OAAO,EAAE,iBAAiB,IAAI,CAAC,IAAI,EAAE;iBACrC,CAAC,CAAC;gBACH,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;aAClB;oBAAS;gBACT,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;aACtB;SACD;IACF,CAAC;CACD;AAED,MAAM,OAAO,GAAG,GAAG,EAAE;IACpB,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE,GAAG,gBAAgB,EAAE,CAAC;IACzD,OAAO;QACN,UAAU,IAAI,IAAI,GAAG,CAAC,KAAK,EAAE,UAAU,EAAE,YAAY,CAAC;QACtD,aAAa,IAAI,IAAI,GAAG,CAAC,QAAQ,EAAE,aAAa,EAAE,IAAI,CAAC;KACvD,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AACnB,CAAC,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,QAAQ;IAC7B,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IAEvB,KAAK,UAAU,IAAI;;QAClB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;YACvB,MAAM,OAAO,GAAG,MAAA,CACf,MAAM,EAAE,CAAC,SAAS,CAAC;iBACjB,MAAM,CAAC,UAAU,CAAC;iBAClB,KAAK,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC;iBACzB,KAAK,EAAE,CACT,0CAAE,QAAQ,CAAC;YAEZ,uDAAuD;YACvD,MAAM,aAAa,GAAG,OAAO,CAAC,CAAC,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;YAC5D,MAAM,UAAU,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;YAClE,MAAM,UAAU,GAAG,EAAE,CAAC,aAAa,GAAG,GAAG,CAAC,CAAC;YAC3C,MAAM,CAAC,OAAO,CAAC;gBACd,KAAK,EAAE,KAAK,CAAC,SAAS;gBACtB,OAAO,EAAE,GAAG,GAAG,CAAC,IAAI,cAAc,UAAU,iBAAiB,UAAU,EAAE;aACzE,CAAC,CAAC;YAEH,IAAI,GAAG,IAAI,aAAa,EAAE;gBACzB,GAAG,CAAC,GAAG,EAAE;qBACP,IAAI,CAAC,KAAK,IAAI,EAAE;oBAChB,+BAA+B;oBAC/B,MAAM,EAAE,CAAC,SAAS,CAAC;yBACjB,MAAM,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;yBACzC,UAAU,CAAC,MAAM,CAAC;yBAClB,KAAK,EAAE,CAAC;gBACX,CAAC,CAAC;qBACD,KAAK,CAAC,qBAAqB,CAAC;qBAC5B,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;aACrC;SACD;IACF,CAAC;IAED,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;IACnD,IAAI,EAAE,CAAC;IACP,OAAO,GAAG,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;AACtC,CAAC"}
package/dist/logger.js CHANGED
@@ -10,10 +10,14 @@ export var Label;
10
10
  Label["DECIDE"] = "decide";
11
11
  Label["PREFILTER"] = "prefilter";
12
12
  Label["CONFIGDUMP"] = "configdump";
13
- Label["JACKETT"] = "jackett";
14
13
  Label["TORZNAB"] = "torznab";
15
14
  Label["SERVER"] = "server";
16
15
  Label["STARTUP"] = "startup";
16
+ Label["SCHEDULER"] = "scheduler";
17
+ Label["SEARCH"] = "search";
18
+ Label["RSS"] = "rss";
19
+ Label["PERF"] = "perf";
20
+ Label["REVERSE_LOOKUP"] = "reverselookup";
17
21
  })(Label = Label || (Label = {}));
18
22
  export let logger;
19
23
  const redactionMsg = "[REDACTED]";
@@ -36,7 +40,7 @@ function redactUrlPassword(message, urlStr) {
36
40
  }
37
41
  function redactMessage(message) {
38
42
  const runtimeConfig = getRuntimeConfig();
39
- message = message.split(runtimeConfig.jackettApiKey).join(redactionMsg);
43
+ // redact torznab api keys
40
44
  message = message.replace(/apikey=[a-zA-Z0-9]+/g, `apikey=${redactionMsg}`);
41
45
  for (const [key, urlStr] of Object.entries(runtimeConfig)) {
42
46
  if (key.endsWith("Url") && urlStr) {
@@ -1 +1 @@
1
- {"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,75 @@
1
+ import { uniqBy } from "lodash-es";
2
+ import { getCacheFileData, renameCacheFile } from "../cache.js";
3
+ async function up(knex) {
4
+ await knex.schema.createTable("searchee", (table) => {
5
+ table.increments("id").primary();
6
+ table.string("name").unique();
7
+ table.integer("first_searched");
8
+ table.integer("last_searched");
9
+ });
10
+ await knex.schema.createTable("decision", (table) => {
11
+ table.increments("id").primary();
12
+ table.integer("searchee_id").references("id").inTable("searchee");
13
+ table.string("guid");
14
+ table.string("info_hash");
15
+ table.string("decision");
16
+ table.integer("first_seen");
17
+ table.integer("last_seen");
18
+ });
19
+ await knex.schema.createTable("torrent", (table) => {
20
+ table.increments("id").primary();
21
+ table.string("info_hash");
22
+ table.string("name");
23
+ table.string("file_path").unique();
24
+ });
25
+ const cacheData = await getCacheFileData();
26
+ if (!cacheData)
27
+ return;
28
+ await knex.transaction(async (trx) => {
29
+ const chunkSize = 100;
30
+ const searcheeRows = Object.entries(cacheData.searchees).map(([name, { firstSearched, lastSearched }]) => ({
31
+ name,
32
+ first_searched: firstSearched,
33
+ last_searched: lastSearched,
34
+ }));
35
+ await trx.batchInsert("searchee", searcheeRows, chunkSize);
36
+ const dbSearchees = await trx.select("*").from("searchee");
37
+ const normalizedDecisions = Object.entries(cacheData.decisions).flatMap(([searcheeName, results]) => Object.entries(results).flatMap(([guid, decisionEntry]) => {
38
+ // searchee may not exist if cache contains decisions
39
+ // from early versions of the cache
40
+ const searchee = dbSearchees.find((searchee) => searchee.name === searcheeName);
41
+ return searchee
42
+ ? [
43
+ {
44
+ searchee_id: searchee.id,
45
+ guid,
46
+ decision: decisionEntry.decision,
47
+ last_seen: decisionEntry.lastSeen,
48
+ first_seen: decisionEntry.firstSeen,
49
+ info_hash: decisionEntry.infoHash,
50
+ },
51
+ ]
52
+ : [];
53
+ }));
54
+ const torrentRows = uniqBy(cacheData.indexedTorrents, "file_path").map((e) => ({
55
+ info_hash: e.infoHash,
56
+ name: e.name,
57
+ file_path: e.filepath,
58
+ }));
59
+ await trx.batchInsert("decision", normalizedDecisions, chunkSize);
60
+ await trx.batchInsert("torrent", torrentRows, chunkSize);
61
+ });
62
+ await renameCacheFile();
63
+ }
64
+ async function down(knex) {
65
+ await knex.schema.dropTable("searchee");
66
+ await knex.schema.dropTable("decision");
67
+ await knex.schema.dropTable("torrent");
68
+ }
69
+ export default {
70
+ name: "00-initialSchema",
71
+ up,
72
+ down,
73
+ config: { transaction: true },
74
+ };
75
+ //# sourceMappingURL=00-initialSchema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"00-initialSchema.js","sourceRoot":"","sources":["../../src/migrations/00-initialSchema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import { join } from "path";
2
+ import { appDir } from "../configuration.js";
3
+ async function up(knex) {
4
+ const connection = await knex.client.acquireConnection();
5
+ await connection.backup(join(appDir(), "cross-seed.pre-jobs.backup.db"));
6
+ await knex.client.releaseConnection(connection);
7
+ await knex.schema.createTable("job_log", (table) => {
8
+ table.increments("id").primary();
9
+ table.string("name").unique();
10
+ table.integer("last_run");
11
+ });
12
+ }
13
+ async function down(knex) {
14
+ await knex.schema.dropTable("job_log");
15
+ }
16
+ export default { name: "01-jobs", up, down };
17
+ //# sourceMappingURL=01-jobs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"01-jobs.js","sourceRoot":"","sources":["../../src/migrations/01-jobs.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAE7C,KAAK,UAAU,EAAE,CAAC,IAAe;IAChC,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE,CAAC;IACzD,MAAM,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,+BAA+B,CAAC,CAAC,CAAC;IACzE,MAAM,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;IAEhD,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE;QAClD,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;QACjC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,CAAC;QAC9B,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAC3B,CAAC,CAAC,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,IAAI,CAAC,IAAe;IAClC,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;AACxC,CAAC;AAED,eAAe,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC"}
@@ -0,0 +1,9 @@
1
+ import initialSchema from "./00-initialSchema.js";
2
+ import jobs from "./01-jobs.js";
3
+ // The first step of any migration should be to back up the database.
4
+ export const migrations = {
5
+ getMigrations: () => Promise.resolve([initialSchema, jobs]),
6
+ getMigrationName: (migration) => migration.name,
7
+ getMigration: (migration) => migration,
8
+ };
9
+ //# sourceMappingURL=migrations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrations.js","sourceRoot":"","sources":["../../src/migrations/migrations.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,MAAM,uBAAuB,CAAC;AAClD,OAAO,IAAI,MAAM,cAAc,CAAC;AAEhC,qEAAqE;AAErE,MAAM,CAAC,MAAM,UAAU,GAAG;IACzB,aAAa,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;IAC3D,gBAAgB,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI;IAC/C,YAAY,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS;CACtC,CAAC"}