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.
- package/dist/Result.d.ts +27 -0
- package/dist/Result.js +64 -0
- package/dist/Result.js.map +1 -0
- package/dist/action.d.ts +34 -0
- package/dist/action.js +694 -0
- package/dist/action.js.map +1 -0
- package/dist/arr.d.ts +31 -0
- package/dist/arr.js +267 -0
- package/dist/arr.js.map +1 -0
- package/dist/auth.d.ts +3 -0
- package/dist/auth.js +28 -0
- package/dist/auth.js.map +1 -0
- package/dist/clients/Deluge.d.ts +153 -0
- package/dist/clients/Deluge.js +698 -0
- package/dist/clients/Deluge.js.map +1 -0
- package/dist/clients/QBittorrent.d.ts +218 -0
- package/dist/clients/QBittorrent.js +785 -0
- package/dist/clients/QBittorrent.js.map +1 -0
- package/dist/clients/RTorrent.d.ts +43 -0
- package/dist/clients/RTorrent.js +657 -0
- package/dist/clients/RTorrent.js.map +1 -0
- package/dist/clients/TorrentClient.d.ts +108 -0
- package/dist/clients/TorrentClient.js +341 -0
- package/dist/clients/TorrentClient.js.map +1 -0
- package/dist/clients/Transmission.d.ts +43 -0
- package/dist/clients/Transmission.js +404 -0
- package/dist/clients/Transmission.js.map +1 -0
- package/dist/cmd.d.ts +2 -0
- package/dist/cmd.js +128 -0
- package/dist/cmd.js.map +1 -0
- package/dist/configSchema.d.ts +1 -0
- package/dist/configSchema.js +2 -0
- package/dist/configSchema.js.map +1 -0
- package/dist/configuration.d.ts +63 -0
- package/dist/configuration.js +321 -0
- package/dist/configuration.js.map +1 -0
- package/dist/constants.d.ts +108 -0
- package/dist/constants.js +251 -0
- package/dist/constants.js.map +1 -0
- package/dist/dataFiles.d.ts +8 -0
- package/dist/dataFiles.js +223 -0
- package/dist/dataFiles.js.map +1 -0
- package/dist/db.d.ts +3 -0
- package/dist/db.js +216 -0
- package/dist/db.js.map +1 -0
- package/dist/dbConfig.d.ts +4 -0
- package/dist/dbConfig.js +67 -0
- package/dist/dbConfig.js.map +1 -0
- package/dist/decide.d.ts +25 -0
- package/dist/decide.js +553 -0
- package/dist/decide.js.map +1 -0
- package/dist/diff.d.ts +1 -0
- package/dist/diff.js +24 -0
- package/dist/diff.js.map +1 -0
- package/dist/errors.d.ts +3 -0
- package/dist/errors.js +7 -0
- package/dist/errors.js.map +1 -0
- package/dist/indexers.d.ts +105 -0
- package/dist/indexers.js +248 -0
- package/dist/indexers.js.map +1 -0
- package/dist/inject.d.ts +2 -0
- package/dist/inject.js +594 -0
- package/dist/inject.js.map +1 -0
- package/dist/jobs.d.ts +29 -0
- package/dist/jobs.js +151 -0
- package/dist/jobs.js.map +1 -0
- package/dist/logger.d.ts +29 -0
- package/dist/logger.js +157 -0
- package/dist/logger.js.map +1 -0
- package/dist/migrations/00-initialSchema.d.ts +9 -0
- package/dist/migrations/00-initialSchema.js +30 -0
- package/dist/migrations/00-initialSchema.js.map +1 -0
- package/dist/migrations/01-jobs.d.ts +9 -0
- package/dist/migrations/01-jobs.js +12 -0
- package/dist/migrations/01-jobs.js.map +1 -0
- package/dist/migrations/02-timestamps.d.ts +9 -0
- package/dist/migrations/02-timestamps.js +21 -0
- package/dist/migrations/02-timestamps.js.map +1 -0
- package/dist/migrations/03-rateLimits.d.ts +9 -0
- package/dist/migrations/03-rateLimits.js +14 -0
- package/dist/migrations/03-rateLimits.js.map +1 -0
- package/dist/migrations/04-auth.d.ts +9 -0
- package/dist/migrations/04-auth.js +13 -0
- package/dist/migrations/04-auth.js.map +1 -0
- package/dist/migrations/05-caps.d.ts +9 -0
- package/dist/migrations/05-caps.js +16 -0
- package/dist/migrations/05-caps.js.map +1 -0
- package/dist/migrations/06-uniqueDecisions.d.ts +9 -0
- package/dist/migrations/06-uniqueDecisions.js +29 -0
- package/dist/migrations/06-uniqueDecisions.js.map +1 -0
- package/dist/migrations/07-limits.d.ts +9 -0
- package/dist/migrations/07-limits.js +12 -0
- package/dist/migrations/07-limits.js.map +1 -0
- package/dist/migrations/08-rss.d.ts +9 -0
- package/dist/migrations/08-rss.js +15 -0
- package/dist/migrations/08-rss.js.map +1 -0
- package/dist/migrations/09-clientAndDataSearchees.d.ts +9 -0
- package/dist/migrations/09-clientAndDataSearchees.js +34 -0
- package/dist/migrations/09-clientAndDataSearchees.js.map +1 -0
- package/dist/migrations/10-indexerNameAudioBookCaps.d.ts +9 -0
- package/dist/migrations/10-indexerNameAudioBookCaps.js +18 -0
- package/dist/migrations/10-indexerNameAudioBookCaps.js.map +1 -0
- package/dist/migrations/11-trackers.d.ts +9 -0
- package/dist/migrations/11-trackers.js +38 -0
- package/dist/migrations/11-trackers.js.map +1 -0
- package/dist/migrations/12-user-auth.d.ts +9 -0
- package/dist/migrations/12-user-auth.js +22 -0
- package/dist/migrations/12-user-auth.js.map +1 -0
- package/dist/migrations/13-settings.d.ts +9 -0
- package/dist/migrations/13-settings.js +23 -0
- package/dist/migrations/13-settings.js.map +1 -0
- package/dist/migrations/14-indexer-enabled-flag.d.ts +9 -0
- package/dist/migrations/14-indexer-enabled-flag.js +12 -0
- package/dist/migrations/14-indexer-enabled-flag.js.map +1 -0
- package/dist/migrations/15-remove-url-unique-constraint.d.ts +9 -0
- package/dist/migrations/15-remove-url-unique-constraint.js +14 -0
- package/dist/migrations/15-remove-url-unique-constraint.js.map +1 -0
- package/dist/migrations/16-prune-inactive-indexers.d.ts +9 -0
- package/dist/migrations/16-prune-inactive-indexers.js +17 -0
- package/dist/migrations/16-prune-inactive-indexers.js.map +1 -0
- package/dist/migrations/migrations.d.ts +13 -0
- package/dist/migrations/migrations.js +41 -0
- package/dist/migrations/migrations.js.map +1 -0
- package/dist/parseTorrent.d.ts +53 -0
- package/dist/parseTorrent.js +128 -0
- package/dist/parseTorrent.js.map +1 -0
- package/dist/pipeline.d.ts +41 -0
- package/dist/pipeline.js +574 -0
- package/dist/pipeline.js.map +1 -0
- package/dist/preFilter.d.ts +25 -0
- package/dist/preFilter.js +250 -0
- package/dist/preFilter.js.map +1 -0
- package/dist/problems/linking.d.ts +2 -0
- package/dist/problems/linking.js +80 -0
- package/dist/problems/linking.js.map +1 -0
- package/dist/problems/path.d.ts +22 -0
- package/dist/problems/path.js +96 -0
- package/dist/problems/path.js.map +1 -0
- package/dist/problems.d.ts +13 -0
- package/dist/problems.js +48 -0
- package/dist/problems.js.map +1 -0
- package/dist/pushNotifier.d.ts +19 -0
- package/dist/pushNotifier.js +137 -0
- package/dist/pushNotifier.js.map +1 -0
- package/dist/routes/baseApi.d.ts +2 -0
- package/dist/routes/baseApi.js +354 -0
- package/dist/routes/baseApi.js.map +1 -0
- package/dist/routes/indexerApi.d.ts +6 -0
- package/dist/routes/indexerApi.js +165 -0
- package/dist/routes/indexerApi.js.map +1 -0
- package/dist/routes/staticFrontendPlugin.d.ts +4 -0
- package/dist/routes/staticFrontendPlugin.js +61 -0
- package/dist/routes/staticFrontendPlugin.js.map +1 -0
- package/dist/runtimeConfig.d.ts +6 -0
- package/dist/runtimeConfig.js +27 -0
- package/dist/runtimeConfig.js.map +1 -0
- package/dist/searchee.d.ts +108 -0
- package/dist/searchee.js +689 -0
- package/dist/searchee.js.map +1 -0
- package/dist/server.d.ts +4 -0
- package/dist/server.js +65 -0
- package/dist/server.js.map +1 -0
- package/dist/services/indexerService.d.ts +96 -0
- package/dist/services/indexerService.js +287 -0
- package/dist/services/indexerService.js.map +1 -0
- package/dist/sessionCookies.d.ts +5 -0
- package/dist/sessionCookies.js +27 -0
- package/dist/sessionCookies.js.map +1 -0
- package/dist/startup.d.ts +25 -0
- package/dist/startup.js +157 -0
- package/dist/startup.js.map +1 -0
- package/dist/torrent.d.ts +69 -0
- package/dist/torrent.js +641 -0
- package/dist/torrent.js.map +1 -0
- package/dist/torznab.d.ts +60 -0
- package/dist/torznab.js +711 -0
- package/dist/torznab.js.map +1 -0
- package/dist/trpc/fastifyAdapter.d.ts +2 -0
- package/dist/trpc/fastifyAdapter.js +9 -0
- package/dist/trpc/fastifyAdapter.js.map +1 -0
- package/dist/trpc/index.d.ts +49 -0
- package/dist/trpc/index.js +53 -0
- package/dist/trpc/index.js.map +1 -0
- package/dist/trpc/routers/auth.d.ts +43 -0
- package/dist/trpc/routers/auth.js +116 -0
- package/dist/trpc/routers/auth.js.map +1 -0
- package/dist/trpc/routers/clients.d.ts +21 -0
- package/dist/trpc/routers/clients.js +65 -0
- package/dist/trpc/routers/clients.js.map +1 -0
- package/dist/trpc/routers/health.d.ts +14 -0
- package/dist/trpc/routers/health.js +20 -0
- package/dist/trpc/routers/health.js.map +1 -0
- package/dist/trpc/routers/index.d.ts +391 -0
- package/dist/trpc/routers/index.js +23 -0
- package/dist/trpc/routers/index.js.map +1 -0
- package/dist/trpc/routers/indexers.d.ts +75 -0
- package/dist/trpc/routers/indexers.js +79 -0
- package/dist/trpc/routers/indexers.js.map +1 -0
- package/dist/trpc/routers/jobs.d.ts +33 -0
- package/dist/trpc/routers/jobs.js +84 -0
- package/dist/trpc/routers/jobs.js.map +1 -0
- package/dist/trpc/routers/logs.d.ts +27 -0
- package/dist/trpc/routers/logs.js +91 -0
- package/dist/trpc/routers/logs.js.map +1 -0
- package/dist/trpc/routers/searchees.d.ts +51 -0
- package/dist/trpc/routers/searchees.js +156 -0
- package/dist/trpc/routers/searchees.js.map +1 -0
- package/dist/trpc/routers/settings.d.ts +83 -0
- package/dist/trpc/routers/settings.js +92 -0
- package/dist/trpc/routers/settings.js.map +1 -0
- package/dist/trpc/routers/stats.d.ts +42 -0
- package/dist/trpc/routers/stats.js +102 -0
- package/dist/trpc/routers/stats.js.map +1 -0
- package/dist/userAuth.d.ts +21 -0
- package/dist/userAuth.js +86 -0
- package/dist/userAuth.js.map +1 -0
- package/dist/utils/authUtils.d.ts +10 -0
- package/dist/utils/authUtils.js +24 -0
- package/dist/utils/authUtils.js.map +1 -0
- package/dist/utils/logWatcher.d.ts +28 -0
- package/dist/utils/logWatcher.js +218 -0
- package/dist/utils/logWatcher.js.map +1 -0
- package/dist/utils/object.d.ts +1 -0
- package/dist/utils/object.js +4 -0
- package/dist/utils/object.js.map +1 -0
- package/dist/utils.d.ts +175 -0
- package/dist/utils.js +660 -0
- package/dist/utils.js.map +1 -0
- package/package.json +2 -2
package/dist/startup.js
ADDED
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
import { mkdir } from "fs/promises";
|
|
2
|
+
import { spawn } from "node:child_process";
|
|
3
|
+
import { resetApiKey } from "./auth.js";
|
|
4
|
+
import { instantiateDownloadClients } from "./clients/TorrentClient.js";
|
|
5
|
+
import { createAppDirHierarchy, getDefaultRuntimeConfig, getFileConfig, stripDefaults, transformFileConfig, } from "./configuration.js";
|
|
6
|
+
import { db } from "./db.js";
|
|
7
|
+
import { getDbConfig, setDbConfig } from "./dbConfig.js";
|
|
8
|
+
import { exitOnCrossSeedErrors, initializeLogger, Label, logger, } from "./logger.js";
|
|
9
|
+
import { initializePushNotifier } from "./pushNotifier.js";
|
|
10
|
+
import { getRuntimeConfig, setRuntimeConfig, } from "./runtimeConfig.js";
|
|
11
|
+
import { notExists } from "./utils.js";
|
|
12
|
+
import { getLogWatcher } from "./utils/logWatcher.js";
|
|
13
|
+
import { omitUndefined } from "./utils/object.js";
|
|
14
|
+
export async function exitGracefully() {
|
|
15
|
+
await db.destroy();
|
|
16
|
+
process.exit();
|
|
17
|
+
}
|
|
18
|
+
process.on("SIGINT", exitGracefully);
|
|
19
|
+
process.on("SIGTERM", exitGracefully);
|
|
20
|
+
async function ensureConfiguredDirectories() {
|
|
21
|
+
const { outputDir, linkDirs = [] } = getRuntimeConfig();
|
|
22
|
+
const directories = [];
|
|
23
|
+
if (outputDir) {
|
|
24
|
+
directories.push({ path: outputDir, label: "outputDir" });
|
|
25
|
+
}
|
|
26
|
+
for (const [index, linkDir] of linkDirs.entries()) {
|
|
27
|
+
directories.push({ path: linkDir, label: `linkDir${index}` });
|
|
28
|
+
}
|
|
29
|
+
for (const { path, label } of directories) {
|
|
30
|
+
if (!(await notExists(path))) {
|
|
31
|
+
continue;
|
|
32
|
+
}
|
|
33
|
+
try {
|
|
34
|
+
logger.info(`Creating ${label}: ${path}`);
|
|
35
|
+
await mkdir(path, { recursive: true });
|
|
36
|
+
}
|
|
37
|
+
catch (error) {
|
|
38
|
+
const message = error instanceof Error ? error.message : String(error ?? "");
|
|
39
|
+
logger.error({
|
|
40
|
+
label: Label.SERVER,
|
|
41
|
+
message: `Failed to create ${label} at ${path}: ${message}`,
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Initializes only the database, runs the callback, then cleans up
|
|
48
|
+
*/
|
|
49
|
+
export function withMinimalRuntime(entrypoint, { migrate = true } = {}) {
|
|
50
|
+
return async (...args) => {
|
|
51
|
+
try {
|
|
52
|
+
if (migrate)
|
|
53
|
+
await db.migrate.latest();
|
|
54
|
+
const output = await entrypoint(...args);
|
|
55
|
+
if (output)
|
|
56
|
+
console.log(output);
|
|
57
|
+
}
|
|
58
|
+
catch (e) {
|
|
59
|
+
exitOnCrossSeedErrors(e);
|
|
60
|
+
}
|
|
61
|
+
finally {
|
|
62
|
+
await exitGracefully();
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
async function applyExistingApiKey(config) {
|
|
67
|
+
try {
|
|
68
|
+
const existingApiKey = await db("settings").select("apikey").first();
|
|
69
|
+
if (existingApiKey?.apikey && !config.apiKey) {
|
|
70
|
+
config.apiKey = existingApiKey.apikey;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
catch (error) {
|
|
74
|
+
// best-effort only
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
async function determineRuntimeConfig(rawOptions) {
|
|
78
|
+
const cliOptions = omitUndefined(rawOptions);
|
|
79
|
+
// first, try to load from database (existing user happy path)
|
|
80
|
+
let dbOverrides;
|
|
81
|
+
try {
|
|
82
|
+
dbOverrides = await getDbConfig();
|
|
83
|
+
}
|
|
84
|
+
catch (dbError) {
|
|
85
|
+
logger.debug("Unable to load configuration from database", dbError);
|
|
86
|
+
}
|
|
87
|
+
if (dbOverrides !== undefined) {
|
|
88
|
+
return {
|
|
89
|
+
...getDefaultRuntimeConfig(),
|
|
90
|
+
...dbOverrides,
|
|
91
|
+
...cliOptions,
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
// then, try to migrate from file config (v6 to v7 upgrade path)
|
|
95
|
+
try {
|
|
96
|
+
const fileConfig = await getFileConfig();
|
|
97
|
+
if (fileConfig) {
|
|
98
|
+
const transformedFileConfig = transformFileConfig(fileConfig);
|
|
99
|
+
const runtimeFromFile = {
|
|
100
|
+
...getDefaultRuntimeConfig(),
|
|
101
|
+
...transformedFileConfig,
|
|
102
|
+
};
|
|
103
|
+
await applyExistingApiKey(runtimeFromFile);
|
|
104
|
+
await setDbConfig(runtimeFromFile);
|
|
105
|
+
const resolvedOverrides = stripDefaults(runtimeFromFile);
|
|
106
|
+
logger.info("Migrated file config to database");
|
|
107
|
+
return {
|
|
108
|
+
...getDefaultRuntimeConfig(),
|
|
109
|
+
...resolvedOverrides,
|
|
110
|
+
...cliOptions,
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
catch (migrationError) {
|
|
115
|
+
logger.error(new Error("Failed to import configuration file, falling back to defaults", { cause: migrationError }));
|
|
116
|
+
}
|
|
117
|
+
// finally, fall back to defaults (new user happy path or migration failure)
|
|
118
|
+
const defaultRuntime = getDefaultRuntimeConfig();
|
|
119
|
+
await setDbConfig(defaultRuntime);
|
|
120
|
+
await resetApiKey();
|
|
121
|
+
logger.info("Created initial database config from defaults");
|
|
122
|
+
const resolvedOverrides = stripDefaults(defaultRuntime);
|
|
123
|
+
return {
|
|
124
|
+
...getDefaultRuntimeConfig(),
|
|
125
|
+
...resolvedOverrides,
|
|
126
|
+
...cliOptions,
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Initializes the full runtime, runs the callback, then cleans up
|
|
131
|
+
* @param entrypoint
|
|
132
|
+
*/
|
|
133
|
+
export function withFullRuntime(entrypoint) {
|
|
134
|
+
return withMinimalRuntime(async (options) => {
|
|
135
|
+
createAppDirHierarchy();
|
|
136
|
+
initializeLogger(options);
|
|
137
|
+
const runtimeConfig = await determineRuntimeConfig(options);
|
|
138
|
+
setRuntimeConfig(runtimeConfig);
|
|
139
|
+
initializePushNotifier();
|
|
140
|
+
getLogWatcher();
|
|
141
|
+
await ensureConfiguredDirectories();
|
|
142
|
+
instantiateDownloadClients();
|
|
143
|
+
await entrypoint(runtimeConfig);
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
export async function restartCrossSeed() {
|
|
147
|
+
logger.info("Restarting cross-seed");
|
|
148
|
+
process.on("exit", () => {
|
|
149
|
+
spawn(process.argv[0], process.argv.slice(1), {
|
|
150
|
+
cwd: process.cwd(),
|
|
151
|
+
stdio: "inherit",
|
|
152
|
+
detached: false,
|
|
153
|
+
});
|
|
154
|
+
});
|
|
155
|
+
await exitGracefully();
|
|
156
|
+
}
|
|
157
|
+
//# sourceMappingURL=startup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"startup.js","sourceRoot":"","sources":["../src/startup.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { TorrentMetadataInClient } from "./clients/TorrentClient.js";
|
|
2
|
+
import { MediaType } from "./constants.js";
|
|
3
|
+
import { Metafile } from "./parseTorrent.js";
|
|
4
|
+
import { Candidate } from "./pipeline.js";
|
|
5
|
+
import { Result } from "./Result.js";
|
|
6
|
+
import { File, SearcheeLabel, SearcheeWithInfoHash, SearcheeWithoutInfoHash } from "./searchee.js";
|
|
7
|
+
export interface TorrentLocator {
|
|
8
|
+
infoHash?: string;
|
|
9
|
+
path?: string;
|
|
10
|
+
}
|
|
11
|
+
export interface FilenameMetadata {
|
|
12
|
+
mediaType: string;
|
|
13
|
+
tracker: string;
|
|
14
|
+
name: string;
|
|
15
|
+
infoHash?: string;
|
|
16
|
+
cached: boolean;
|
|
17
|
+
}
|
|
18
|
+
export declare enum SnatchError {
|
|
19
|
+
ABORTED = "ABORTED",
|
|
20
|
+
RATE_LIMITED = "RATE_LIMITED",
|
|
21
|
+
MAGNET_LINK = "MAGNET_LINK",
|
|
22
|
+
INVALID_CONTENTS = "INVALID_CONTENTS",
|
|
23
|
+
UNKNOWN_ERROR = "UNKNOWN_ERROR"
|
|
24
|
+
}
|
|
25
|
+
export interface EnsembleEntry {
|
|
26
|
+
client_host: string | null;
|
|
27
|
+
path: string;
|
|
28
|
+
info_hash: string | null;
|
|
29
|
+
ensemble: string;
|
|
30
|
+
element: string | number;
|
|
31
|
+
}
|
|
32
|
+
export declare function parseTorrentFromPath(filePath: string): Promise<Metafile>;
|
|
33
|
+
export declare function parseTorrentWithMetadata(filePath: string, torrentInfos: TorrentMetadataInClient[]): Promise<Metafile>;
|
|
34
|
+
export declare const snatchHistory: Map<string, {
|
|
35
|
+
initialFailureAt: number;
|
|
36
|
+
numFailures: number;
|
|
37
|
+
}>;
|
|
38
|
+
export declare function snatch(candidate: Candidate, label: SearcheeLabel, options: {
|
|
39
|
+
retries: number;
|
|
40
|
+
delayMs: number;
|
|
41
|
+
}): Promise<Result<Metafile, SnatchError>>;
|
|
42
|
+
/**
|
|
43
|
+
* Be sure to update parseMetadataFromFilename if changing the format
|
|
44
|
+
*/
|
|
45
|
+
export declare function getTorrentSavePath(meta: Metafile, mediaType: MediaType, tracker: string, dir: string, options: {
|
|
46
|
+
cached: boolean;
|
|
47
|
+
}): string;
|
|
48
|
+
/**
|
|
49
|
+
* Depends on getTorrentSavePath format
|
|
50
|
+
*/
|
|
51
|
+
export declare function parseMetadataFromFilename(filename: string): Partial<FilenameMetadata>;
|
|
52
|
+
export declare function findAllTorrentFilesInDir(dir: string): Promise<string[]>;
|
|
53
|
+
export declare function createEnsemblePieces(title: string, files: File[]): {
|
|
54
|
+
key: string;
|
|
55
|
+
element: string | number;
|
|
56
|
+
largestFile: File;
|
|
57
|
+
}[] | null;
|
|
58
|
+
export declare function cacheEnsembleTorrentEntry(searchee: SearcheeWithInfoHash, torrentSavePaths?: Map<string, string>): Promise<EnsembleEntry[] | null>;
|
|
59
|
+
export declare function indexTorrentsAndDataDirs(options?: {
|
|
60
|
+
startup: boolean;
|
|
61
|
+
}): Promise<void>;
|
|
62
|
+
export declare function getInfoHashesToExclude(): Promise<Set<string>>;
|
|
63
|
+
export declare function loadTorrentDirLight(torrentDir: string): Promise<SearcheeWithInfoHash[]>;
|
|
64
|
+
export declare function getSimilarByName(name: string): Promise<{
|
|
65
|
+
keys: string[];
|
|
66
|
+
clientSearchees: SearcheeWithInfoHash[];
|
|
67
|
+
dataSearchees: SearcheeWithoutInfoHash[];
|
|
68
|
+
}>;
|
|
69
|
+
export declare function getTorrentByCriteria(criteria: TorrentLocator): Promise<SearcheeWithInfoHash[]>;
|