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.
- package/README.md +12 -13
- package/dist/webui/assets/FieldInfo-Bxj_j8SJ.js +1 -0
- package/dist/webui/assets/Page-C3rteCZt.js +1 -0
- package/dist/webui/assets/array-field-DVSC6nHP.js +1 -0
- package/dist/webui/assets/badge-DTZMtS0e.js +1 -0
- package/dist/webui/assets/check-Bu3ldi63.js +1 -0
- package/dist/webui/assets/chevron-down-CRy8M0kJ.js +1 -0
- package/dist/webui/assets/clients-CW8oEZoQ.js +1 -0
- package/dist/webui/assets/connect-YBNsnjWT.js +1 -0
- package/dist/webui/assets/debug-mz8-WYZj.js +1 -0
- package/dist/webui/assets/directories-BSK28RgR.js +1 -0
- package/dist/webui/assets/duration-field-C6xoSlJg.js +1 -0
- package/dist/webui/assets/general-lJJxZhH7.js +1 -0
- package/dist/webui/assets/health-CXbsVrie.js +1 -0
- package/dist/webui/assets/index-Bi48hI2z.js +54 -0
- package/dist/webui/assets/index-C-Ul7GNg.css +1 -0
- package/dist/webui/assets/index-C2cH1Gst.js +1 -0
- package/dist/webui/assets/index-Cc5bDmJr.js +1 -0
- package/dist/webui/assets/jobs-CxmNab9w.js +1 -0
- package/dist/webui/assets/library-vaj2W8sE.js +1 -0
- package/dist/webui/assets/loader-circle-M0gu1gZ-.js +1 -0
- package/dist/webui/assets/logs-Cu9RyKS0.js +1 -0
- package/dist/webui/assets/search-2R5sIdT8.js +1 -0
- package/dist/webui/assets/select-field-BCqNLDrJ.js +1 -0
- package/dist/webui/assets/select-zHgqMzLj.js +1 -0
- package/dist/webui/assets/settings-CMYjpTbZ.js +1 -0
- package/dist/webui/assets/submit-button-BtcnyggQ.js +1 -0
- package/dist/webui/assets/switch-G0W3uJVN.js +1 -0
- package/dist/webui/assets/switch-field-IBd9ORNq.js +1 -0
- package/dist/webui/assets/table-DvgJU7Gh.js +1 -0
- package/dist/webui/assets/test-tube-BIwmoM45.js +1 -0
- package/dist/webui/assets/text-field-DruSbGhy.js +1 -0
- package/dist/webui/assets/time-BSMZjmyW.js +1 -0
- package/dist/webui/assets/trackers-D-OpAe63.js +7 -0
- package/dist/webui/assets/use-form-validation-context-BkAfWAh0.js +1 -0
- package/dist/webui/assets/use-settings-form-submit-CDRh-E9U.js +2 -0
- package/dist/webui/assets/useQuery-A4Hv_4uX.js +1 -0
- package/dist/webui/index.html +13 -0
- package/node_modules/@cross-seed/shared/dist/configSchema.d.ts +261 -0
- package/node_modules/@cross-seed/shared/dist/configSchema.d.ts.map +1 -0
- package/node_modules/@cross-seed/shared/dist/configSchema.js +53 -0
- package/node_modules/@cross-seed/shared/dist/configSchema.js.map +1 -0
- package/node_modules/@cross-seed/shared/dist/constants.d.ts +122 -0
- package/node_modules/@cross-seed/shared/dist/constants.d.ts.map +1 -0
- package/node_modules/@cross-seed/shared/dist/constants.js +127 -0
- package/node_modules/@cross-seed/shared/dist/constants.js.map +1 -0
- package/node_modules/@cross-seed/shared/dist/tsconfig.tsbuildinfo +1 -0
- package/node_modules/@cross-seed/shared/dist/utils.d.ts +6 -0
- package/node_modules/@cross-seed/shared/dist/utils.d.ts.map +1 -0
- package/node_modules/@cross-seed/shared/dist/utils.js +9 -0
- package/node_modules/@cross-seed/shared/dist/utils.js.map +1 -0
- package/node_modules/@cross-seed/shared/package.json +22 -0
- package/package.json +35 -11
- package/dist/Result.js +0 -64
- package/dist/Result.js.map +0 -1
- package/dist/action.js +0 -693
- package/dist/action.js.map +0 -1
- package/dist/arr.js +0 -199
- package/dist/arr.js.map +0 -1
- package/dist/auth.js +0 -25
- package/dist/auth.js.map +0 -1
- package/dist/clients/Deluge.js +0 -698
- package/dist/clients/Deluge.js.map +0 -1
- package/dist/clients/QBittorrent.js +0 -785
- package/dist/clients/QBittorrent.js.map +0 -1
- package/dist/clients/RTorrent.js +0 -654
- package/dist/clients/RTorrent.js.map +0 -1
- package/dist/clients/TorrentClient.js +0 -272
- package/dist/clients/TorrentClient.js.map +0 -1
- package/dist/clients/Transmission.js +0 -404
- package/dist/clients/Transmission.js.map +0 -1
- package/dist/cmd.js +0 -196
- package/dist/cmd.js.map +0 -1
- package/dist/config.template.cjs +0 -353
- package/dist/config.template.cjs.map +0 -1
- package/dist/configSchema.js +0 -667
- package/dist/configSchema.js.map +0 -1
- package/dist/configuration.js +0 -82
- package/dist/configuration.js.map +0 -1
- package/dist/constants.js +0 -281
- package/dist/constants.js.map +0 -1
- package/dist/dataFiles.js +0 -208
- package/dist/dataFiles.js.map +0 -1
- package/dist/db.js +0 -216
- package/dist/db.js.map +0 -1
- package/dist/decide.js +0 -553
- package/dist/decide.js.map +0 -1
- package/dist/diff.js +0 -24
- package/dist/diff.js.map +0 -1
- package/dist/errors.js +0 -16
- package/dist/errors.js.map +0 -1
- package/dist/indexers.js +0 -180
- package/dist/indexers.js.map +0 -1
- package/dist/inject.js +0 -594
- package/dist/inject.js.map +0 -1
- package/dist/jobs.js +0 -146
- package/dist/jobs.js.map +0 -1
- package/dist/logger.js +0 -143
- package/dist/logger.js.map +0 -1
- package/dist/migrations/00-initialSchema.js +0 -30
- package/dist/migrations/00-initialSchema.js.map +0 -1
- package/dist/migrations/01-jobs.js +0 -12
- package/dist/migrations/01-jobs.js.map +0 -1
- package/dist/migrations/02-timestamps.js +0 -21
- package/dist/migrations/02-timestamps.js.map +0 -1
- package/dist/migrations/03-rateLimits.js +0 -14
- package/dist/migrations/03-rateLimits.js.map +0 -1
- package/dist/migrations/04-auth.js +0 -13
- package/dist/migrations/04-auth.js.map +0 -1
- package/dist/migrations/05-caps.js +0 -16
- package/dist/migrations/05-caps.js.map +0 -1
- package/dist/migrations/06-uniqueDecisions.js +0 -29
- package/dist/migrations/06-uniqueDecisions.js.map +0 -1
- package/dist/migrations/07-limits.js +0 -12
- package/dist/migrations/07-limits.js.map +0 -1
- package/dist/migrations/08-rss.js +0 -15
- package/dist/migrations/08-rss.js.map +0 -1
- package/dist/migrations/09-clientAndDataSearchees.js +0 -34
- package/dist/migrations/09-clientAndDataSearchees.js.map +0 -1
- package/dist/migrations/10-indexerNameAudioBookCaps.js +0 -18
- package/dist/migrations/10-indexerNameAudioBookCaps.js.map +0 -1
- package/dist/migrations/11-trackers.js +0 -38
- package/dist/migrations/11-trackers.js.map +0 -1
- package/dist/migrations/migrations.js +0 -31
- package/dist/migrations/migrations.js.map +0 -1
- package/dist/parseTorrent.js +0 -128
- package/dist/parseTorrent.js.map +0 -1
- package/dist/pipeline.js +0 -527
- package/dist/pipeline.js.map +0 -1
- package/dist/preFilter.js +0 -250
- package/dist/preFilter.js.map +0 -1
- package/dist/pushNotifier.js +0 -137
- package/dist/pushNotifier.js.map +0 -1
- package/dist/runtimeConfig.js +0 -11
- package/dist/runtimeConfig.js.map +0 -1
- package/dist/searchee.js +0 -658
- package/dist/searchee.js.map +0 -1
- package/dist/server.js +0 -456
- package/dist/server.js.map +0 -1
- package/dist/startup.js +0 -203
- package/dist/startup.js.map +0 -1
- package/dist/torrent.js +0 -637
- package/dist/torrent.js.map +0 -1
- package/dist/torznab.js +0 -786
- package/dist/torznab.js.map +0 -1
- package/dist/utils.js +0 -637
- package/dist/utils.js.map +0 -1
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import initialSchema from "./00-initialSchema.js";
|
|
2
|
-
import jobs from "./01-jobs.js";
|
|
3
|
-
import timestamps from "./02-timestamps.js";
|
|
4
|
-
import rateLimits from "./03-rateLimits.js";
|
|
5
|
-
import auth from "./04-auth.js";
|
|
6
|
-
import caps from "./05-caps.js";
|
|
7
|
-
import uniqueDecisions from "./06-uniqueDecisions.js";
|
|
8
|
-
import limits from "./07-limits.js";
|
|
9
|
-
import rss from "./08-rss.js";
|
|
10
|
-
import clientAndDataSearchees from "./09-clientAndDataSearchees.js";
|
|
11
|
-
import indexerNameAudioBookCaps from "./10-indexerNameAudioBookCaps.js";
|
|
12
|
-
import trackers from "./11-trackers.js";
|
|
13
|
-
export const migrations = {
|
|
14
|
-
getMigrations: () => Promise.resolve([
|
|
15
|
-
initialSchema,
|
|
16
|
-
jobs,
|
|
17
|
-
timestamps,
|
|
18
|
-
rateLimits,
|
|
19
|
-
auth,
|
|
20
|
-
caps,
|
|
21
|
-
uniqueDecisions,
|
|
22
|
-
limits,
|
|
23
|
-
rss,
|
|
24
|
-
clientAndDataSearchees,
|
|
25
|
-
indexerNameAudioBookCaps,
|
|
26
|
-
trackers,
|
|
27
|
-
]),
|
|
28
|
-
getMigrationName: (migration) => migration.name,
|
|
29
|
-
getMigration: (migration) => migration,
|
|
30
|
-
};
|
|
31
|
-
//# sourceMappingURL=migrations.js.map
|
|
@@ -1 +0,0 @@
|
|
|
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;AAChC,OAAO,UAAU,MAAM,oBAAoB,CAAC;AAC5C,OAAO,UAAU,MAAM,oBAAoB,CAAC;AAC5C,OAAO,IAAI,MAAM,cAAc,CAAC;AAChC,OAAO,IAAI,MAAM,cAAc,CAAC;AAChC,OAAO,eAAe,MAAM,yBAAyB,CAAC;AACtD,OAAO,MAAM,MAAM,gBAAgB,CAAC;AACpC,OAAO,GAAG,MAAM,aAAa,CAAC;AAC9B,OAAO,sBAAsB,MAAM,gCAAgC,CAAC;AACpE,OAAO,wBAAwB,MAAM,kCAAkC,CAAC;AACxE,OAAO,QAAQ,MAAM,kBAAkB,CAAC;AAExC,MAAM,CAAC,MAAM,UAAU,GAAG;IACzB,aAAa,EAAE,GAAG,EAAE,CACnB,OAAO,CAAC,OAAO,CAAC;QACf,aAAa;QACb,IAAI;QACJ,UAAU;QACV,UAAU;QACV,IAAI;QACJ,IAAI;QACJ,eAAe;QACf,MAAM;QACN,GAAG;QACH,sBAAsB;QACtB,wBAAwB;QACxB,QAAQ;KACR,CAAC;IACH,gBAAgB,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI;IAC/C,YAAY,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS;CACtC,CAAC"}
|
package/dist/parseTorrent.js
DELETED
|
@@ -1,128 +0,0 @@
|
|
|
1
|
-
import bencode from "bencode";
|
|
2
|
-
import { createHash } from "crypto";
|
|
3
|
-
import { join } from "path";
|
|
4
|
-
import { parseTitle } from "./searchee.js";
|
|
5
|
-
import { fallback, isTruthy } from "./utils.js";
|
|
6
|
-
export function updateMetafileMetadata(metafile, metadata) {
|
|
7
|
-
if (metadata["qBt-category"]) {
|
|
8
|
-
metafile.category = metadata["qBt-category"].toString();
|
|
9
|
-
}
|
|
10
|
-
if (metadata["qBt-tags"]) {
|
|
11
|
-
metafile.tags = metadata["qBt-tags"].toString().split(",");
|
|
12
|
-
}
|
|
13
|
-
if (metadata.trackers) {
|
|
14
|
-
metafile.trackers = metadata.trackers
|
|
15
|
-
.map((tier) => sanitizeTrackerUrls(tier))
|
|
16
|
-
.flat();
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
export function sanitizeTrackerUrl(url) {
|
|
20
|
-
try {
|
|
21
|
-
return new URL(url).host;
|
|
22
|
-
}
|
|
23
|
-
catch {
|
|
24
|
-
return null;
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
function sanitizeTrackerUrls(urls) {
|
|
28
|
-
return urls
|
|
29
|
-
.map((url) => sanitizeTrackerUrl(url.toString()))
|
|
30
|
-
.filter(isTruthy);
|
|
31
|
-
}
|
|
32
|
-
function sumLength(sum, file) {
|
|
33
|
-
return sum + file.length;
|
|
34
|
-
}
|
|
35
|
-
function ensure(bool, fieldName) {
|
|
36
|
-
if (!bool)
|
|
37
|
-
throw new Error(`Torrent is missing required field: ${fieldName}`);
|
|
38
|
-
}
|
|
39
|
-
function sha1(buf) {
|
|
40
|
-
const hash = createHash("sha1");
|
|
41
|
-
hash.update(new Uint8Array(buf));
|
|
42
|
-
return hash.digest("hex");
|
|
43
|
-
}
|
|
44
|
-
export class Metafile {
|
|
45
|
-
infoHash;
|
|
46
|
-
length;
|
|
47
|
-
name;
|
|
48
|
-
/**
|
|
49
|
-
* Always name, exists for compatibility with Searchee
|
|
50
|
-
*/
|
|
51
|
-
title;
|
|
52
|
-
pieceLength;
|
|
53
|
-
files;
|
|
54
|
-
isSingleFileTorrent;
|
|
55
|
-
category;
|
|
56
|
-
tags;
|
|
57
|
-
trackers;
|
|
58
|
-
raw;
|
|
59
|
-
constructor(raw) {
|
|
60
|
-
ensure(raw.info, "info");
|
|
61
|
-
ensure(raw.info["name.utf-8"] || raw.info.name, "info.name");
|
|
62
|
-
ensure(raw.info["piece length"], "info['piece length']");
|
|
63
|
-
ensure(raw.info.pieces, "info.pieces");
|
|
64
|
-
if (raw.info.files) {
|
|
65
|
-
raw.info.files.forEach((file) => {
|
|
66
|
-
ensure(typeof file.length === "number", "info.files[0].length");
|
|
67
|
-
ensure(file["path.utf-8"] || file.path, "info.files[0].path");
|
|
68
|
-
});
|
|
69
|
-
}
|
|
70
|
-
else {
|
|
71
|
-
ensure(typeof raw.info.length === "number", "info.length");
|
|
72
|
-
}
|
|
73
|
-
this.raw = raw;
|
|
74
|
-
this.infoHash = sha1(bencode.encode(raw.info));
|
|
75
|
-
this.name = fallback(raw.info["name.utf-8"], raw.info.name).toString();
|
|
76
|
-
this.pieceLength = raw.info["piece length"];
|
|
77
|
-
if (!raw.info.files) {
|
|
78
|
-
// length exists if files doesn't exist
|
|
79
|
-
const length = raw.info.length;
|
|
80
|
-
this.files = [
|
|
81
|
-
{
|
|
82
|
-
name: this.name,
|
|
83
|
-
path: this.name,
|
|
84
|
-
length: length,
|
|
85
|
-
},
|
|
86
|
-
];
|
|
87
|
-
this.length = length;
|
|
88
|
-
this.isSingleFileTorrent = true;
|
|
89
|
-
}
|
|
90
|
-
else {
|
|
91
|
-
this.files = raw.info.files
|
|
92
|
-
.map((file) => {
|
|
93
|
-
const rawPathSegments = fallback(file["path.utf-8"], file.path);
|
|
94
|
-
const pathSegments = rawPathSegments.map((buf) => {
|
|
95
|
-
const seg = buf.toString();
|
|
96
|
-
// convention for zero-length path segments is to treat them as underscores
|
|
97
|
-
return seg === "" ? "_" : seg;
|
|
98
|
-
});
|
|
99
|
-
return {
|
|
100
|
-
name: pathSegments[pathSegments.length - 1],
|
|
101
|
-
length: file.length,
|
|
102
|
-
path: join(this.name, ...pathSegments),
|
|
103
|
-
};
|
|
104
|
-
})
|
|
105
|
-
.sort((a, b) => a.path.localeCompare(b.path));
|
|
106
|
-
this.length = this.files.reduce(sumLength, 0);
|
|
107
|
-
this.isSingleFileTorrent = false;
|
|
108
|
-
}
|
|
109
|
-
this.title = parseTitle(this.name, this.files) ?? this.name;
|
|
110
|
-
const announceList = raw["announce-list"];
|
|
111
|
-
this.trackers =
|
|
112
|
-
Array.isArray(announceList) && announceList.length > 0
|
|
113
|
-
? announceList.map((tier) => sanitizeTrackerUrls(tier)).flat()
|
|
114
|
-
: raw.announce
|
|
115
|
-
? sanitizeTrackerUrls([raw.announce])
|
|
116
|
-
: [];
|
|
117
|
-
}
|
|
118
|
-
static decode(buf) {
|
|
119
|
-
return new Metafile(bencode.decode(buf));
|
|
120
|
-
}
|
|
121
|
-
getFileSystemSafeName() {
|
|
122
|
-
return this.name.replace("/", "");
|
|
123
|
-
}
|
|
124
|
-
encode() {
|
|
125
|
-
return bencode.encode(this.raw);
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
//# sourceMappingURL=parseTorrent.js.map
|
package/dist/parseTorrent.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"parseTorrent.js","sourceRoot":"","sources":["../src/parseTorrent.ts"],"names":[],"mappings":"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"}
|