cross-seed 7.0.0-1 → 7.0.0-3
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 +63 -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 +17 -58
- package/LICENSE +0 -201
- package/README.md +0 -33
- package/dist/webui/assets/FieldInfo-Bxj_j8SJ.js +0 -1
- package/dist/webui/assets/Page-C3rteCZt.js +0 -1
- package/dist/webui/assets/array-field-DVSC6nHP.js +0 -1
- package/dist/webui/assets/badge-DTZMtS0e.js +0 -1
- package/dist/webui/assets/check-Bu3ldi63.js +0 -1
- package/dist/webui/assets/chevron-down-CRy8M0kJ.js +0 -1
- package/dist/webui/assets/clients-CW8oEZoQ.js +0 -1
- package/dist/webui/assets/connect-YBNsnjWT.js +0 -1
- package/dist/webui/assets/debug-mz8-WYZj.js +0 -1
- package/dist/webui/assets/directories-BSK28RgR.js +0 -1
- package/dist/webui/assets/duration-field-C6xoSlJg.js +0 -1
- package/dist/webui/assets/general-lJJxZhH7.js +0 -1
- package/dist/webui/assets/health-CXbsVrie.js +0 -1
- package/dist/webui/assets/index-Bi48hI2z.js +0 -54
- package/dist/webui/assets/index-C-Ul7GNg.css +0 -1
- package/dist/webui/assets/index-C2cH1Gst.js +0 -1
- package/dist/webui/assets/index-Cc5bDmJr.js +0 -1
- package/dist/webui/assets/jobs-CxmNab9w.js +0 -1
- package/dist/webui/assets/library-vaj2W8sE.js +0 -1
- package/dist/webui/assets/loader-circle-M0gu1gZ-.js +0 -1
- package/dist/webui/assets/logs-Cu9RyKS0.js +0 -1
- package/dist/webui/assets/search-2R5sIdT8.js +0 -1
- package/dist/webui/assets/select-field-BCqNLDrJ.js +0 -1
- package/dist/webui/assets/select-zHgqMzLj.js +0 -1
- package/dist/webui/assets/settings-CMYjpTbZ.js +0 -1
- package/dist/webui/assets/submit-button-BtcnyggQ.js +0 -1
- package/dist/webui/assets/switch-G0W3uJVN.js +0 -1
- package/dist/webui/assets/switch-field-IBd9ORNq.js +0 -1
- package/dist/webui/assets/table-DvgJU7Gh.js +0 -1
- package/dist/webui/assets/test-tube-BIwmoM45.js +0 -1
- package/dist/webui/assets/text-field-DruSbGhy.js +0 -1
- package/dist/webui/assets/time-BSMZjmyW.js +0 -1
- package/dist/webui/assets/trackers-D-OpAe63.js +0 -7
- package/dist/webui/assets/use-form-validation-context-BkAfWAh0.js +0 -1
- package/dist/webui/assets/use-settings-form-submit-CDRh-E9U.js +0 -2
- package/dist/webui/assets/useQuery-A4Hv_4uX.js +0 -1
- package/dist/webui/index.html +0 -13
- package/node_modules/@cross-seed/shared/dist/configSchema.d.ts +0 -261
- package/node_modules/@cross-seed/shared/dist/configSchema.d.ts.map +0 -1
- package/node_modules/@cross-seed/shared/dist/configSchema.js +0 -53
- package/node_modules/@cross-seed/shared/dist/configSchema.js.map +0 -1
- package/node_modules/@cross-seed/shared/dist/constants.d.ts +0 -122
- package/node_modules/@cross-seed/shared/dist/constants.d.ts.map +0 -1
- package/node_modules/@cross-seed/shared/dist/constants.js +0 -127
- package/node_modules/@cross-seed/shared/dist/constants.js.map +0 -1
- package/node_modules/@cross-seed/shared/dist/tsconfig.tsbuildinfo +0 -1
- package/node_modules/@cross-seed/shared/dist/utils.d.ts +0 -6
- package/node_modules/@cross-seed/shared/dist/utils.d.ts.map +0 -1
- package/node_modules/@cross-seed/shared/dist/utils.js +0 -9
- package/node_modules/@cross-seed/shared/dist/utils.js.map +0 -1
- package/node_modules/@cross-seed/shared/package.json +0 -22
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
async function up(knex) {
|
|
2
|
+
await knex.schema.createTable("rss", (table) => {
|
|
3
|
+
table
|
|
4
|
+
.integer("indexer_id")
|
|
5
|
+
.references("id")
|
|
6
|
+
.inTable("indexer")
|
|
7
|
+
.primary();
|
|
8
|
+
table.string("last_seen_guid");
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
async function down(knex) {
|
|
12
|
+
return knex.schema.dropTable("rss");
|
|
13
|
+
}
|
|
14
|
+
export default { name: "08-rss", up, down };
|
|
15
|
+
//# sourceMappingURL=08-rss.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"08-rss.js","sourceRoot":"","sources":["../../src/migrations/08-rss.ts"],"names":[],"mappings":"AAEA,KAAK,UAAU,EAAE,CAAC,IAAe;IAChC,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE;QAC9C,KAAK;aACH,OAAO,CAAC,YAAY,CAAC;aACrB,UAAU,CAAC,IAAI,CAAC;aAChB,OAAO,CAAC,SAAS,CAAC;aAClB,OAAO,EAAE,CAAC;QACZ,KAAK,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,IAAI,CAAC,IAAe;IAClC,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AACrC,CAAC;AAED,eAAe,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
async function up(knex) {
|
|
2
|
+
await knex.schema.createTable("client_searchee", (table) => {
|
|
3
|
+
table.string("client_host");
|
|
4
|
+
table.string("info_hash").index();
|
|
5
|
+
table.primary(["client_host", "info_hash"]);
|
|
6
|
+
table.string("name");
|
|
7
|
+
table.string("title");
|
|
8
|
+
table.json("files");
|
|
9
|
+
table.integer("length");
|
|
10
|
+
table.string("save_path");
|
|
11
|
+
table.string("category");
|
|
12
|
+
table.json("tags");
|
|
13
|
+
table.json("trackers");
|
|
14
|
+
});
|
|
15
|
+
await knex.schema.createTable("data", (table) => {
|
|
16
|
+
table.string("path").primary();
|
|
17
|
+
table.string("title");
|
|
18
|
+
});
|
|
19
|
+
await knex.schema.createTable("ensemble", (table) => {
|
|
20
|
+
table.string("client_host");
|
|
21
|
+
table.string("path").index();
|
|
22
|
+
table.primary(["client_host", "path"]);
|
|
23
|
+
table.string("info_hash").index();
|
|
24
|
+
table.string("ensemble");
|
|
25
|
+
table.string("element");
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
async function down(knex) {
|
|
29
|
+
void knex.schema.dropTable("client_searchee");
|
|
30
|
+
void knex.schema.dropTable("data");
|
|
31
|
+
void knex.schema.dropTable("ensemble");
|
|
32
|
+
}
|
|
33
|
+
export default { name: "09-clientAndDataSearchees", up, down };
|
|
34
|
+
//# sourceMappingURL=09-clientAndDataSearchees.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"09-clientAndDataSearchees.js","sourceRoot":"","sources":["../../src/migrations/09-clientAndDataSearchees.ts"],"names":[],"mappings":"AAEA,KAAK,UAAU,EAAE,CAAC,IAAe;IAChC,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,iBAAiB,EAAE,CAAC,KAAK,EAAE,EAAE;QAC1D,KAAK,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;QAC5B,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,KAAK,EAAE,CAAC;QAClC,KAAK,CAAC,OAAO,CAAC,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC,CAAC;QAC5C,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACrB,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACtB,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACpB,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACxB,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QAC1B,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QACzB,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACnB,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACxB,CAAC,CAAC,CAAC;IAEH,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;QAC/C,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,CAAC;QAC/B,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,EAAE;QACnD,KAAK,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;QAC5B,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC;QAC7B,KAAK,CAAC,OAAO,CAAC,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC,CAAC;QACvC,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,KAAK,EAAE,CAAC;QAClC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QACzB,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACzB,CAAC,CAAC,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,IAAI,CAAC,IAAe;IAClC,KAAK,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;IAC9C,KAAK,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IACnC,KAAK,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;AACxC,CAAC;AAED,eAAe,EAAE,IAAI,EAAE,2BAA2B,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
async function up(knex) {
|
|
2
|
+
await knex.schema.alterTable("indexer", (table) => {
|
|
3
|
+
table.string("name").after("id");
|
|
4
|
+
table.boolean("music_search_cap").nullable().after("movie_search_cap");
|
|
5
|
+
table.boolean("audio_search_cap").nullable().after("music_search_cap");
|
|
6
|
+
table.boolean("book_search_cap").nullable().after("audio_search_cap");
|
|
7
|
+
});
|
|
8
|
+
}
|
|
9
|
+
async function down(knex) {
|
|
10
|
+
return knex.schema.table("indexer", function (table) {
|
|
11
|
+
table.dropColumn("name");
|
|
12
|
+
table.dropColumn("music_search_cap");
|
|
13
|
+
table.dropColumn("audio_search_cap");
|
|
14
|
+
table.dropColumn("book_search_cap");
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
export default { name: "10-indexerNameAudioBookCaps", up, down };
|
|
18
|
+
//# sourceMappingURL=10-indexerNameAudioBookCaps.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"10-indexerNameAudioBookCaps.js","sourceRoot":"","sources":["../../src/migrations/10-indexerNameAudioBookCaps.ts"],"names":[],"mappings":"AAEA,KAAK,UAAU,EAAE,CAAC,IAAe;IAChC,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE;QACjD,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACjC,KAAK,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;QACvE,KAAK,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;QACvE,KAAK,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;IACvE,CAAC,CAAC,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,IAAI,CAAC,IAAe;IAClC,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE,UAAU,KAAK;QAClD,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QACzB,KAAK,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAC;QACrC,KAAK,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAC;QACrC,KAAK,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;AACJ,CAAC;AAED,eAAe,EAAE,IAAI,EAAE,6BAA6B,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { basename, join } from "path";
|
|
2
|
+
import { existsSync } from "fs";
|
|
3
|
+
import { rename } from "fs/promises";
|
|
4
|
+
import { appDir } from "../configuration.js";
|
|
5
|
+
import { TORRENT_CACHE_FOLDER } from "../constants.js";
|
|
6
|
+
import { getCachedTorrentName } from "../decide.js";
|
|
7
|
+
import { findAllTorrentFilesInDir, parseMetadataFromFilename, } from "../torrent.js";
|
|
8
|
+
async function up(knex) {
|
|
9
|
+
const torrentCacheDir = join(appDir(), TORRENT_CACHE_FOLDER);
|
|
10
|
+
if (existsSync(torrentCacheDir)) {
|
|
11
|
+
const torrentPaths = await findAllTorrentFilesInDir(torrentCacheDir);
|
|
12
|
+
for (const torrentPath of torrentPaths) {
|
|
13
|
+
const { infoHash } = parseMetadataFromFilename(basename(torrentPath));
|
|
14
|
+
if (!infoHash)
|
|
15
|
+
continue;
|
|
16
|
+
await rename(torrentPath, join(torrentCacheDir, getCachedTorrentName(infoHash)));
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
await knex.schema.alterTable("indexer", (table) => {
|
|
20
|
+
table.json("trackers").after("apikey");
|
|
21
|
+
});
|
|
22
|
+
await knex.schema.alterTable("decision", (table) => {
|
|
23
|
+
table.index(["info_hash", "guid"], "idx_decision_info_hash_guid");
|
|
24
|
+
table.index("info_hash", "idx_decision_info_hash");
|
|
25
|
+
table.index("guid", "idx_decision_guid");
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
async function down(knex) {
|
|
29
|
+
await knex.schema.alterTable("indexer", function (table) {
|
|
30
|
+
table.dropColumn("trackers");
|
|
31
|
+
});
|
|
32
|
+
await knex.schema.alterTable("decision", (table) => {
|
|
33
|
+
table.dropIndex("guid", "idx_decision_guid");
|
|
34
|
+
table.dropIndex(["info_hash", "guid"], "idx_decision_info_hash_guid");
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
export default { name: "11-trackers", up, down };
|
|
38
|
+
//# sourceMappingURL=11-trackers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"11-trackers.js","sourceRoot":"","sources":["../../src/migrations/11-trackers.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EACN,wBAAwB,EACxB,yBAAyB,GACzB,MAAM,eAAe,CAAC;AAEvB,KAAK,UAAU,EAAE,CAAC,IAAe;IAChC,MAAM,eAAe,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,oBAAoB,CAAC,CAAC;IAC7D,IAAI,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;QACjC,MAAM,YAAY,GAAG,MAAM,wBAAwB,CAAC,eAAe,CAAC,CAAC;QACrE,KAAK,MAAM,WAAW,IAAI,YAAY,EAAE,CAAC;YACxC,MAAM,EAAE,QAAQ,EAAE,GAAG,yBAAyB,CAC7C,QAAQ,CAAC,WAAW,CAAC,CACrB,CAAC;YACF,IAAI,CAAC,QAAQ;gBAAE,SAAS;YACxB,MAAM,MAAM,CACX,WAAW,EACX,IAAI,CAAC,eAAe,EAAE,oBAAoB,CAAC,QAAQ,CAAC,CAAC,CACrD,CAAC;QACH,CAAC;IACF,CAAC;IAED,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE;QACjD,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IACH,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,EAAE;QAClD,KAAK,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,MAAM,CAAC,EAAE,6BAA6B,CAAC,CAAC;QAClE,KAAK,CAAC,KAAK,CAAC,WAAW,EAAE,wBAAwB,CAAC,CAAC;QACnD,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,IAAI,CAAC,IAAe;IAClC,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,EAAE,UAAU,KAAK;QACtD,KAAK,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;IACH,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,EAAE;QAClD,KAAK,CAAC,SAAS,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;QAC7C,KAAK,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,MAAM,CAAC,EAAE,6BAA6B,CAAC,CAAC;IACvE,CAAC,CAAC,CAAC;AACJ,CAAC;AAED,eAAe,EAAE,IAAI,EAAE,aAAa,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
async function up(knex) {
|
|
2
|
+
// Create user table (singular naming)
|
|
3
|
+
await knex.schema.createTable("user", (table) => {
|
|
4
|
+
table.increments("id").primary();
|
|
5
|
+
table.string("username").unique().notNullable();
|
|
6
|
+
table.string("password").notNullable();
|
|
7
|
+
table.timestamp("created_at").defaultTo(knex.fn.now()).notNullable();
|
|
8
|
+
});
|
|
9
|
+
// Create session table (singular naming)
|
|
10
|
+
await knex.schema.createTable("session", (table) => {
|
|
11
|
+
table.string("id").primary();
|
|
12
|
+
table.integer("user_id").notNullable().references("id").inTable("user");
|
|
13
|
+
table.integer("expires_at").notNullable();
|
|
14
|
+
table.integer("created_at").notNullable();
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
async function down(knex) {
|
|
18
|
+
await knex.schema.dropTable("session");
|
|
19
|
+
await knex.schema.dropTable("user");
|
|
20
|
+
}
|
|
21
|
+
export default { name: "12-user-auth", up, down };
|
|
22
|
+
//# sourceMappingURL=12-user-auth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"12-user-auth.js","sourceRoot":"","sources":["../../src/migrations/12-user-auth.ts"],"names":[],"mappings":"AAEA,KAAK,UAAU,EAAE,CAAC,IAAe;IAChC,sCAAsC;IACtC,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;QAC/C,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;QACjC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,MAAM,EAAE,CAAC,WAAW,EAAE,CAAC;QAChD,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,WAAW,EAAE,CAAC;QACvC,KAAK,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IACtE,CAAC,CAAC,CAAC;IAEH,yCAAyC;IACzC,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE;QAClD,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;QAC7B,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACxE,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,WAAW,EAAE,CAAC;QAC1C,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,WAAW,EAAE,CAAC;IAC3C,CAAC,CAAC,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,IAAI,CAAC,IAAe;IAClC,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IACvC,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;AACrC,CAAC;AAED,eAAe,EAAE,IAAI,EAAE,cAAc,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
async function up(knex) {
|
|
2
|
+
await knex.schema.alterTable("settings", (table) => {
|
|
3
|
+
table.json("settings_json");
|
|
4
|
+
});
|
|
5
|
+
// Add performance indices for stats queries
|
|
6
|
+
await knex.schema.alterTable("decision", (table) => {
|
|
7
|
+
table.index("decision", "idx_decision_decision");
|
|
8
|
+
table.index("last_seen", "idx_decision_last_seen");
|
|
9
|
+
table.index(["decision", "last_seen"], "idx_decision_decision_last_seen");
|
|
10
|
+
});
|
|
11
|
+
}
|
|
12
|
+
async function down(knex) {
|
|
13
|
+
await knex.schema.alterTable("decision", (table) => {
|
|
14
|
+
table.dropIndex(["decision", "last_seen"], "idx_decision_decision_last_seen");
|
|
15
|
+
table.dropIndex("last_seen", "idx_decision_last_seen");
|
|
16
|
+
table.dropIndex("decision", "idx_decision_decision");
|
|
17
|
+
});
|
|
18
|
+
await knex.schema.alterTable("settings", (table) => {
|
|
19
|
+
table.dropColumn("settings_json");
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
export default { name: "13-settings", up, down };
|
|
23
|
+
//# sourceMappingURL=13-settings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"13-settings.js","sourceRoot":"","sources":["../../src/migrations/13-settings.ts"],"names":[],"mappings":"AAEA,KAAK,UAAU,EAAE,CAAC,IAAe;IAChC,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,EAAE;QAClD,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;IAEH,4CAA4C;IAC5C,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,EAAE;QAClD,KAAK,CAAC,KAAK,CAAC,UAAU,EAAE,uBAAuB,CAAC,CAAC;QACjD,KAAK,CAAC,KAAK,CAAC,WAAW,EAAE,wBAAwB,CAAC,CAAC;QACnD,KAAK,CAAC,KAAK,CACV,CAAC,UAAU,EAAE,WAAW,CAAC,EACzB,iCAAiC,CACjC,CAAC;IACH,CAAC,CAAC,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,IAAI,CAAC,IAAe;IAClC,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,EAAE;QAClD,KAAK,CAAC,SAAS,CACd,CAAC,UAAU,EAAE,WAAW,CAAC,EACzB,iCAAiC,CACjC,CAAC;QACF,KAAK,CAAC,SAAS,CAAC,WAAW,EAAE,wBAAwB,CAAC,CAAC;QACvD,KAAK,CAAC,SAAS,CAAC,UAAU,EAAE,uBAAuB,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,EAAE;QAClD,KAAK,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;AACJ,CAAC;AAED,eAAe,EAAE,IAAI,EAAE,aAAa,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import knex from "knex";
|
|
2
|
+
export declare function up(knex: knex.Knex): Promise<void>;
|
|
3
|
+
export declare function down(knex: knex.Knex): Promise<void>;
|
|
4
|
+
declare const _default: {
|
|
5
|
+
name: string;
|
|
6
|
+
up: typeof up;
|
|
7
|
+
down: typeof down;
|
|
8
|
+
};
|
|
9
|
+
export default _default;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export async function up(knex) {
|
|
2
|
+
await knex.schema.alterTable("indexer", (table) => {
|
|
3
|
+
table.boolean("enabled").notNullable().defaultTo(true);
|
|
4
|
+
});
|
|
5
|
+
}
|
|
6
|
+
export async function down(knex) {
|
|
7
|
+
await knex.schema.alterTable("indexer", (table) => {
|
|
8
|
+
table.dropColumn("enabled");
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
export default { name: "14-indexer-enabled-flag", up, down };
|
|
12
|
+
//# sourceMappingURL=14-indexer-enabled-flag.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"14-indexer-enabled-flag.js","sourceRoot":"","sources":["../../src/migrations/14-indexer-enabled-flag.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,KAAK,UAAU,EAAE,CAAC,IAAe;IACvC,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE;QACjD,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,IAAe;IACzC,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE;QACjD,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;AACJ,CAAC;AAED,eAAe,EAAE,IAAI,EAAE,yBAAyB,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
async function up(knex) {
|
|
2
|
+
// Drop the unique constraint on the url column
|
|
3
|
+
await knex.schema.alterTable("indexer", (table) => {
|
|
4
|
+
table.dropUnique(["url"]);
|
|
5
|
+
});
|
|
6
|
+
}
|
|
7
|
+
async function down(knex) {
|
|
8
|
+
// Re-add the unique constraint on the url column
|
|
9
|
+
await knex.schema.alterTable("indexer", (table) => {
|
|
10
|
+
table.unique(["url"]);
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
export default { name: "15-remove-url-unique-constraint", up, down };
|
|
14
|
+
//# sourceMappingURL=15-remove-url-unique-constraint.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"15-remove-url-unique-constraint.js","sourceRoot":"","sources":["../../src/migrations/15-remove-url-unique-constraint.ts"],"names":[],"mappings":"AAEA,KAAK,UAAU,EAAE,CAAC,IAAe;IAChC,+CAA+C;IAC/C,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE;QACjD,KAAK,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IAC3B,CAAC,CAAC,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,IAAI,CAAC,IAAe;IAClC,iDAAiD;IACjD,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE;QACjD,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IACvB,CAAC,CAAC,CAAC;AACJ,CAAC;AAED,eAAe,EAAE,IAAI,EAAE,iCAAiC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export async function up(knex) {
|
|
2
|
+
await knex.transaction(async (trx) => {
|
|
3
|
+
const inactiveIds = await trx("indexer")
|
|
4
|
+
.whereRaw("active = 0")
|
|
5
|
+
.select("id");
|
|
6
|
+
if (inactiveIds.length) {
|
|
7
|
+
const ids = inactiveIds.map((row) => row.id);
|
|
8
|
+
await trx("timestamp").whereIn("indexer_id", ids).del();
|
|
9
|
+
await trx("rss").whereIn("indexer_id", ids).del();
|
|
10
|
+
await trx("indexer").whereIn("id", ids).del();
|
|
11
|
+
}
|
|
12
|
+
await trx.raw("UPDATE indexer SET active = NULL");
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
export async function down() { }
|
|
16
|
+
export default { name: "16-prune-inactive-indexers", up, down };
|
|
17
|
+
//# sourceMappingURL=16-prune-inactive-indexers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"16-prune-inactive-indexers.js","sourceRoot":"","sources":["../../src/migrations/16-prune-inactive-indexers.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,KAAK,UAAU,EAAE,CAAC,IAAe;IACvC,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QACpC,MAAM,WAAW,GAAG,MAAM,GAAG,CAAC,SAAS,CAAC;aACtC,QAAQ,CAAC,YAAY,CAAC;aACtB,MAAM,CAAC,IAAI,CAAC,CAAC;QAEf,IAAI,WAAW,CAAC,MAAM,EAAE,CAAC;YACxB,MAAM,GAAG,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC7C,MAAM,GAAG,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;YACxD,MAAM,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;YAClD,MAAM,GAAG,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;QAC/C,CAAC;QAED,MAAM,GAAG,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,IAAI,KAAmB,CAAC;AAE9C,eAAe,EAAE,IAAI,EAAE,4BAA4B,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export declare const migrations: {
|
|
2
|
+
getMigrations: () => Promise<({
|
|
3
|
+
name: string;
|
|
4
|
+
up: (knex: import("knex").Knex) => Promise<void>;
|
|
5
|
+
down: (knex: import("knex").Knex) => Promise<void>;
|
|
6
|
+
} | {
|
|
7
|
+
name: string;
|
|
8
|
+
up: (knex: import("knex").Knex) => Promise<void>;
|
|
9
|
+
down: () => void;
|
|
10
|
+
})[]>;
|
|
11
|
+
getMigrationName: (migration: any) => any;
|
|
12
|
+
getMigration: (migration: any) => any;
|
|
13
|
+
};
|
|
@@ -0,0 +1,41 @@
|
|
|
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
|
+
import userAuth from "./12-user-auth.js";
|
|
14
|
+
import settings from "./13-settings.js";
|
|
15
|
+
import indexerEnabledFlag from "./14-indexer-enabled-flag.js";
|
|
16
|
+
import removeUrlUniqueConstraint from "./15-remove-url-unique-constraint.js";
|
|
17
|
+
import pruneInactiveIndexers from "./16-prune-inactive-indexers.js";
|
|
18
|
+
export const migrations = {
|
|
19
|
+
getMigrations: () => Promise.resolve([
|
|
20
|
+
initialSchema,
|
|
21
|
+
jobs,
|
|
22
|
+
timestamps,
|
|
23
|
+
rateLimits,
|
|
24
|
+
auth,
|
|
25
|
+
caps,
|
|
26
|
+
uniqueDecisions,
|
|
27
|
+
limits,
|
|
28
|
+
rss,
|
|
29
|
+
clientAndDataSearchees,
|
|
30
|
+
indexerNameAudioBookCaps,
|
|
31
|
+
trackers,
|
|
32
|
+
userAuth,
|
|
33
|
+
settings,
|
|
34
|
+
indexerEnabledFlag,
|
|
35
|
+
removeUrlUniqueConstraint,
|
|
36
|
+
pruneInactiveIndexers,
|
|
37
|
+
]),
|
|
38
|
+
getMigrationName: (migration) => migration.name,
|
|
39
|
+
getMigration: (migration) => migration,
|
|
40
|
+
};
|
|
41
|
+
//# 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;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;AACxC,OAAO,QAAQ,MAAM,mBAAmB,CAAC;AACzC,OAAO,QAAQ,MAAM,kBAAkB,CAAC;AACxC,OAAO,kBAAkB,MAAM,8BAA8B,CAAC;AAC9D,OAAO,yBAAyB,MAAM,sCAAsC,CAAC;AAC7E,OAAO,qBAAqB,MAAM,iCAAiC,CAAC;AAEpE,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;QACR,QAAQ;QACR,QAAQ;QACR,kBAAkB;QAClB,yBAAyB;QACzB,qBAAqB;KACrB,CAAC;IACH,gBAAgB,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI;IAC/C,YAAY,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS;CACtC,CAAC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { File } from "./searchee.js";
|
|
2
|
+
interface TorrentDirent {
|
|
3
|
+
length: number;
|
|
4
|
+
path?: Buffer[];
|
|
5
|
+
"path.utf-8"?: Buffer[];
|
|
6
|
+
}
|
|
7
|
+
export interface Torrent {
|
|
8
|
+
info: {
|
|
9
|
+
"name.utf-8"?: Buffer;
|
|
10
|
+
name?: Buffer;
|
|
11
|
+
"piece length": number;
|
|
12
|
+
pieces: Buffer;
|
|
13
|
+
files?: TorrentDirent[];
|
|
14
|
+
length?: number;
|
|
15
|
+
private: number;
|
|
16
|
+
};
|
|
17
|
+
comment?: Buffer | string;
|
|
18
|
+
announce?: Buffer;
|
|
19
|
+
"announce-list"?: Buffer[][];
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* "Fastresume" for all clients. Used to get torrent info.
|
|
23
|
+
* qBittorrent: .fastresume, Transmission: .resume, rTorrent: .rtorrent
|
|
24
|
+
* Deluge doesn't store labels in fastresume, but in label.conf
|
|
25
|
+
*/
|
|
26
|
+
interface TorrentMetadata {
|
|
27
|
+
trackers?: Buffer[][];
|
|
28
|
+
"qBt-category"?: Buffer;
|
|
29
|
+
"qBt-tags"?: Buffer;
|
|
30
|
+
}
|
|
31
|
+
export declare function updateMetafileMetadata(metafile: Metafile, metadata: TorrentMetadata): void;
|
|
32
|
+
export declare function sanitizeTrackerUrl(url: string): string | null;
|
|
33
|
+
export declare class Metafile {
|
|
34
|
+
infoHash: string;
|
|
35
|
+
length: number;
|
|
36
|
+
name: string;
|
|
37
|
+
/**
|
|
38
|
+
* Always name, exists for compatibility with Searchee
|
|
39
|
+
*/
|
|
40
|
+
title: string;
|
|
41
|
+
pieceLength: number;
|
|
42
|
+
files: File[];
|
|
43
|
+
isSingleFileTorrent: boolean;
|
|
44
|
+
category?: string;
|
|
45
|
+
tags?: string[];
|
|
46
|
+
trackers: string[];
|
|
47
|
+
raw: Torrent;
|
|
48
|
+
constructor(raw: Torrent);
|
|
49
|
+
static decode(buf: Buffer): Metafile;
|
|
50
|
+
getFileSystemSafeName(): string;
|
|
51
|
+
encode(): Buffer;
|
|
52
|
+
}
|
|
53
|
+
export {};
|
|
@@ -0,0 +1,128 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parseTorrent.js","sourceRoot":"","sources":["../src/parseTorrent.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { ActionResult, Decision, DecisionAnyMatch } from "./constants.js";
|
|
2
|
+
import { ResultAssessment } from "./decide.js";
|
|
3
|
+
import { RuntimeConfig } from "./runtimeConfig.js";
|
|
4
|
+
import { SearcheeLabel, SearcheeWithLabel } from "./searchee.js";
|
|
5
|
+
import { TorrentLocator } from "./torrent.js";
|
|
6
|
+
import { WithRequired } from "./utils.js";
|
|
7
|
+
export interface Candidate {
|
|
8
|
+
name: string;
|
|
9
|
+
guid: string;
|
|
10
|
+
link: string;
|
|
11
|
+
tracker: string;
|
|
12
|
+
size?: number;
|
|
13
|
+
pubDate?: number;
|
|
14
|
+
indexerId?: number;
|
|
15
|
+
cookie?: string;
|
|
16
|
+
}
|
|
17
|
+
export type CandidateWithIndexerId = WithRequired<Candidate, "indexerId">;
|
|
18
|
+
export interface AssessmentWithTracker {
|
|
19
|
+
assessment: ResultAssessment;
|
|
20
|
+
tracker: string;
|
|
21
|
+
}
|
|
22
|
+
export declare function searchForLocalTorrentByCriteria(criteria: TorrentLocator, options: {
|
|
23
|
+
configOverride: Partial<RuntimeConfig>;
|
|
24
|
+
ignoreCrossSeeds: boolean;
|
|
25
|
+
}): Promise<number | null>;
|
|
26
|
+
export declare function checkNewCandidateMatch(candidate: Candidate, searcheeLabel: SearcheeLabel): Promise<{
|
|
27
|
+
decision: DecisionAnyMatch | Decision.INFO_HASH_ALREADY_EXISTS | null;
|
|
28
|
+
actionResult: ActionResult | null;
|
|
29
|
+
}>;
|
|
30
|
+
export declare function findAllSearchees(searcheeLabel: SearcheeLabel): Promise<SearcheeWithLabel[]>;
|
|
31
|
+
export declare function bulkSearch(options?: {
|
|
32
|
+
configOverride: Partial<RuntimeConfig>;
|
|
33
|
+
}): Promise<void>;
|
|
34
|
+
export declare function bulkSearchByNames(names: string[], options?: {
|
|
35
|
+
configOverride?: Partial<RuntimeConfig>;
|
|
36
|
+
}): Promise<{
|
|
37
|
+
attempted: number;
|
|
38
|
+
totalFound: number;
|
|
39
|
+
requested: number;
|
|
40
|
+
}>;
|
|
41
|
+
export declare function scanRssFeeds(): Promise<void>;
|