cross-seed 4.3.8 → 4.4.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 +2 -1
- package/dist/Result.js +53 -0
- package/dist/Result.js.map +1 -0
- package/dist/clients/QBittorrent.js +8 -8
- package/dist/clients/QBittorrent.js.map +1 -1
- package/dist/clients/TorrentClient.js +5 -1
- package/dist/clients/TorrentClient.js.map +1 -1
- package/dist/clients/Transmission.js +113 -0
- package/dist/clients/Transmission.js.map +1 -0
- package/dist/cmd.js +6 -1
- package/dist/cmd.js.map +1 -1
- package/dist/config.template.cjs +13 -0
- package/dist/config.template.cjs.map +1 -1
- package/dist/config.template.docker.cjs +13 -0
- package/dist/config.template.docker.cjs.map +1 -1
- package/dist/configuration.js.map +1 -1
- package/dist/constants.js +1 -0
- package/dist/constants.js.map +1 -1
- package/dist/db.js +7 -3
- package/dist/db.js.map +1 -1
- package/dist/decide.js +28 -16
- package/dist/decide.js.map +1 -1
- package/dist/indexers.js +64 -0
- package/dist/indexers.js.map +1 -0
- package/dist/jobs.js +26 -15
- package/dist/jobs.js.map +1 -1
- package/dist/logger.js +9 -3
- package/dist/logger.js.map +1 -1
- package/dist/migrations/00-initialSchema.js +1 -6
- package/dist/migrations/00-initialSchema.js.map +1 -1
- package/dist/migrations/01-jobs.js +0 -5
- package/dist/migrations/01-jobs.js.map +1 -1
- package/dist/migrations/02-timestamps.js +47 -0
- package/dist/migrations/02-timestamps.js.map +1 -0
- package/dist/migrations/03-rateLimits.js +14 -0
- package/dist/migrations/03-rateLimits.js.map +1 -0
- package/dist/migrations/migrations.js +3 -2
- package/dist/migrations/migrations.js.map +1 -1
- package/dist/pipeline.js +36 -26
- package/dist/pipeline.js.map +1 -1
- package/dist/preFilter.js +29 -14
- package/dist/preFilter.js.map +1 -1
- package/dist/pushNotifier.js +4 -10
- package/dist/pushNotifier.js.map +1 -1
- package/dist/runtimeConfig.js.map +1 -1
- package/dist/searchee.js +5 -4
- package/dist/searchee.js.map +1 -1
- package/dist/server.js +3 -2
- package/dist/server.js.map +1 -1
- package/dist/startup.js +6 -6
- package/dist/startup.js.map +1 -1
- package/dist/torrent.js +57 -31
- package/dist/torrent.js.map +1 -1
- package/dist/torznab.js +253 -133
- package/dist/torznab.js.map +1 -1
- package/dist/utils.js +13 -4
- package/dist/utils.js.map +1 -1
- package/package.json +6 -5
package/dist/indexers.js
ADDED
@@ -0,0 +1,64 @@
|
|
1
|
+
import { db } from "./db.js";
|
2
|
+
import { Label, logger } from "./logger.js";
|
3
|
+
import { humanReadable } from "./utils.js";
|
4
|
+
export var IndexerStatus;
|
5
|
+
(function (IndexerStatus) {
|
6
|
+
/**
|
7
|
+
* equivalent to null
|
8
|
+
*/
|
9
|
+
IndexerStatus["OK"] = "OK";
|
10
|
+
IndexerStatus["RATE_LIMITED"] = "RATE_LIMITED";
|
11
|
+
IndexerStatus["UNKNOWN_ERROR"] = "UNKNOWN_ERROR";
|
12
|
+
})(IndexerStatus = IndexerStatus || (IndexerStatus = {}));
|
13
|
+
export async function getEnabledIndexers() {
|
14
|
+
return db("indexer")
|
15
|
+
.where({ active: true, search_cap: true, status: null })
|
16
|
+
.orWhere({ active: true, search_cap: true, status: IndexerStatus.OK })
|
17
|
+
.orWhere((b) => b
|
18
|
+
.where({ active: true, search_cap: true })
|
19
|
+
.where("retry_after", "<", Date.now()))
|
20
|
+
.select({
|
21
|
+
id: "id",
|
22
|
+
url: "url",
|
23
|
+
apikey: "apikey",
|
24
|
+
active: "active",
|
25
|
+
status: "status",
|
26
|
+
retryAfter: "retry_after",
|
27
|
+
searchCap: "search_cap",
|
28
|
+
tvSearchCap: "tv_search_cap",
|
29
|
+
movieSearchCap: "movie_search_cap",
|
30
|
+
});
|
31
|
+
}
|
32
|
+
export async function updateIndexerStatus(status, retryAfter, indexerIds) {
|
33
|
+
if (indexerIds.length > 0) {
|
34
|
+
logger.verbose({
|
35
|
+
label: Label.TORZNAB,
|
36
|
+
message: `Snoozing indexers ${indexerIds} with ${status} until ${humanReadable(retryAfter)}`,
|
37
|
+
});
|
38
|
+
await db("indexer").whereIn("id", indexerIds).update({
|
39
|
+
retry_after: retryAfter,
|
40
|
+
status,
|
41
|
+
});
|
42
|
+
}
|
43
|
+
}
|
44
|
+
export async function updateSearchTimestamps(name, indexerIds) {
|
45
|
+
for (const indexerId of indexerIds) {
|
46
|
+
await db.transaction(async (trx) => {
|
47
|
+
const now = Date.now();
|
48
|
+
const { id: searchee_id } = await trx("searchee")
|
49
|
+
.where({ name })
|
50
|
+
.select("id")
|
51
|
+
.first();
|
52
|
+
await trx("timestamp")
|
53
|
+
.insert({
|
54
|
+
searchee_id,
|
55
|
+
indexer_id: indexerId,
|
56
|
+
last_searched: now,
|
57
|
+
first_searched: now,
|
58
|
+
})
|
59
|
+
.onConflict(["searchee_id", "indexer_id"])
|
60
|
+
.merge(["searchee_id", "indexer_id", "last_searched"]);
|
61
|
+
});
|
62
|
+
}
|
63
|
+
}
|
64
|
+
//# sourceMappingURL=indexers.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"indexers.js","sourceRoot":"","sources":["../src/indexers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAC7B,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE3C,MAAM,CAAN,IAAY,aAOX;AAPD,WAAY,aAAa;IACxB;;OAEG;IACH,0BAAS,CAAA;IACT,8CAA6B,CAAA;IAC7B,gDAA+B,CAAA;AAChC,CAAC,EAPW,aAAa,GAAb,aAAa,KAAb,aAAa,QAOxB;AAiBD,MAAM,CAAC,KAAK,UAAU,kBAAkB;IACvC,OAAO,EAAE,CAAC,SAAS,CAAC;SAClB,KAAK,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;SACvD,OAAO,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,EAAE,CAAC;SACrE,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CACd,CAAC;SACC,KAAK,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;SACzC,KAAK,CAAC,aAAa,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CACvC;SACA,MAAM,CAAC;QACP,EAAE,EAAE,IAAI;QACR,GAAG,EAAE,KAAK;QACV,MAAM,EAAE,QAAQ;QAChB,MAAM,EAAE,QAAQ;QAChB,MAAM,EAAE,QAAQ;QAChB,UAAU,EAAE,aAAa;QACzB,SAAS,EAAE,YAAY;QACvB,WAAW,EAAE,eAAe;QAC5B,cAAc,EAAE,kBAAkB;KAClC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACxC,MAAqB,EACrB,UAAkB,EAClB,UAAoB;IAEpB,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;QAC1B,MAAM,CAAC,OAAO,CAAC;YACd,KAAK,EAAE,KAAK,CAAC,OAAO;YACpB,OAAO,EAAE,qBAAqB,UAAU,SAAS,MAAM,UAAU,aAAa,CAC7E,UAAU,CACV,EAAE;SACH,CAAC,CAAC;QAEH,MAAM,EAAE,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,MAAM,CAAC;YACpD,WAAW,EAAE,UAAU;YACvB,MAAM;SACN,CAAC,CAAC;KACH;AACF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC3C,IAAY,EACZ,UAAoB;IAEpB,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE;QACnC,MAAM,EAAE,CAAC,WAAW,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;YAClC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACvB,MAAM,EAAE,EAAE,EAAE,WAAW,EAAE,GAAG,MAAM,GAAG,CAAC,UAAU,CAAC;iBAC/C,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC;iBACf,MAAM,CAAC,IAAI,CAAC;iBACZ,KAAK,EAAE,CAAC;YAEV,MAAM,GAAG,CAAC,WAAW,CAAC;iBACpB,MAAM,CAAC;gBACP,WAAW;gBACX,UAAU,EAAE,SAAS;gBACrB,aAAa,EAAE,GAAG;gBAClB,cAAc,EAAE,GAAG;aACnB,CAAC;iBACD,UAAU,CAAC,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;iBACzC,KAAK,CAAC,CAAC,aAAa,EAAE,YAAY,EAAE,eAAe,CAAC,CAAC,CAAC;QACzD,CAAC,CAAC,CAAC;KACH;AACF,CAAC"}
|
package/dist/jobs.js
CHANGED
@@ -24,7 +24,9 @@ class Job {
|
|
24
24
|
finally {
|
25
25
|
this.isActive = false;
|
26
26
|
}
|
27
|
+
return true;
|
27
28
|
}
|
29
|
+
return false;
|
28
30
|
}
|
29
31
|
}
|
30
32
|
const getJobs = () => {
|
@@ -34,9 +36,19 @@ const getJobs = () => {
|
|
34
36
|
searchCadence && new Job("search", searchCadence, main),
|
35
37
|
].filter(Boolean);
|
36
38
|
};
|
37
|
-
|
39
|
+
function logNextRun(name, cadence, lastRun) {
|
40
|
+
const now = Date.now();
|
41
|
+
const eligibilityTs = lastRun ? lastRun + cadence : now;
|
42
|
+
const lastRunStr = lastRun ? `${ms(now - lastRun)} ago` : "never";
|
43
|
+
const nextRunStr = now >= eligibilityTs ? "now" : `in ${ms(eligibilityTs - now)}`;
|
44
|
+
logger.info({
|
45
|
+
label: Label.SCHEDULER,
|
46
|
+
message: `${name}: last run ${lastRunStr}, next run ${nextRunStr}`,
|
47
|
+
});
|
48
|
+
}
|
49
|
+
export function jobsLoop() {
|
38
50
|
const jobs = getJobs();
|
39
|
-
async function loop() {
|
51
|
+
async function loop(isFirstRun) {
|
40
52
|
var _a;
|
41
53
|
const now = Date.now();
|
42
54
|
for (const job of jobs) {
|
@@ -46,20 +58,19 @@ export async function jobsLoop() {
|
|
46
58
|
.first())) === null || _a === void 0 ? void 0 : _a.last_run;
|
47
59
|
// if it's never been run, you are eligible immediately
|
48
60
|
const eligibilityTs = lastRun ? lastRun + job.cadence : now;
|
49
|
-
|
50
|
-
|
51
|
-
logger.verbose({
|
52
|
-
label: Label.SCHEDULER,
|
53
|
-
message: `${job.name}: last run ${lastRunStr}, next run in ${nextRunStr}`,
|
54
|
-
});
|
61
|
+
if (isFirstRun)
|
62
|
+
logNextRun(job.name, job.cadence, lastRun);
|
55
63
|
if (now >= eligibilityTs) {
|
56
64
|
job.run()
|
57
|
-
.then(async () => {
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
65
|
+
.then(async (didRun) => {
|
66
|
+
if (didRun) {
|
67
|
+
// upon success, update the log
|
68
|
+
await db("job_log")
|
69
|
+
.insert({ name: job.name, last_run: now })
|
70
|
+
.onConflict("name")
|
71
|
+
.merge();
|
72
|
+
logNextRun(job.name, job.cadence, now);
|
73
|
+
}
|
63
74
|
})
|
64
75
|
.catch(exitOnCrossSeedErrors)
|
65
76
|
.catch((e) => void logger.error(e));
|
@@ -67,7 +78,7 @@ export async function jobsLoop() {
|
|
67
78
|
}
|
68
79
|
}
|
69
80
|
const interval = setInterval(loop, ms("1 minute"));
|
70
|
-
loop();
|
81
|
+
loop(true);
|
71
82
|
return () => clearInterval(interval);
|
72
83
|
}
|
73
84
|
//# sourceMappingURL=jobs.js.map
|
package/dist/jobs.js.map
CHANGED
@@ -1 +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;
|
1
|
+
{"version":3,"file":"jobs.js","sourceRoot":"","sources":["../src/jobs.ts"],"names":[],"mappings":"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"}
|
package/dist/logger.js
CHANGED
@@ -7,6 +7,7 @@ export var Label;
|
|
7
7
|
(function (Label) {
|
8
8
|
Label["QBITTORRENT"] = "qbittorrent";
|
9
9
|
Label["RTORRENT"] = "rtorrent";
|
10
|
+
Label["TRANSMISSION"] = "transmission";
|
10
11
|
Label["DECIDE"] = "decide";
|
11
12
|
Label["PREFILTER"] = "prefilter";
|
12
13
|
Label["CONFIGDUMP"] = "configdump";
|
@@ -39,15 +40,20 @@ function redactUrlPassword(message, urlStr) {
|
|
39
40
|
return message;
|
40
41
|
}
|
41
42
|
function redactMessage(message) {
|
43
|
+
if (typeof message !== "string") {
|
44
|
+
return message;
|
45
|
+
}
|
42
46
|
const runtimeConfig = getRuntimeConfig();
|
47
|
+
let ret = message;
|
43
48
|
// redact torznab api keys
|
44
|
-
|
49
|
+
ret = ret.replace(/apikey=[a-zA-Z0-9]+/g, `apikey=${redactionMsg}`);
|
50
|
+
ret = ret.replace(/\/notification\/crossSeed\/\w+/g, `/notification/crossSeed/${redactionMsg}`);
|
45
51
|
for (const [key, urlStr] of Object.entries(runtimeConfig)) {
|
46
52
|
if (key.endsWith("Url") && urlStr) {
|
47
|
-
|
53
|
+
ret = redactUrlPassword(ret, urlStr);
|
48
54
|
}
|
49
55
|
}
|
50
|
-
return
|
56
|
+
return ret;
|
51
57
|
}
|
52
58
|
const logOnceCache = [];
|
53
59
|
export function logOnce(cacheKey, cb) {
|
package/dist/logger.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,eAAe,MAAM,2BAA2B,CAAC;AAExD,MAAM,CAAN,IAAY,
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"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"}
|
@@ -66,10 +66,5 @@ async function down(knex) {
|
|
66
66
|
await knex.schema.dropTable("decision");
|
67
67
|
await knex.schema.dropTable("torrent");
|
68
68
|
}
|
69
|
-
export default {
|
70
|
-
name: "00-initialSchema",
|
71
|
-
up,
|
72
|
-
down,
|
73
|
-
config: { transaction: true },
|
74
|
-
};
|
69
|
+
export default { name: "00-initialSchema", up, down };
|
75
70
|
//# sourceMappingURL=00-initialSchema.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"00-initialSchema.js","sourceRoot":"","sources":["../../src/migrations/00-initialSchema.ts"],"names":[],"mappings":"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
|
1
|
+
{"version":3,"file":"00-initialSchema.js","sourceRoot":"","sources":["../../src/migrations/00-initialSchema.ts"],"names":[],"mappings":"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"}
|
@@ -1,9 +1,4 @@
|
|
1
|
-
import { join } from "path";
|
2
|
-
import { appDir } from "../configuration.js";
|
3
1
|
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
2
|
await knex.schema.createTable("job_log", (table) => {
|
8
3
|
table.increments("id").primary();
|
9
4
|
table.string("name").unique();
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"01-jobs.js","sourceRoot":"","sources":["../../src/migrations/01-jobs.ts"],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"01-jobs.js","sourceRoot":"","sources":["../../src/migrations/01-jobs.ts"],"names":[],"mappings":"AAEA,KAAK,UAAU,EAAE,CAAC,IAAe;IAChC,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,47 @@
|
|
1
|
+
import { getRuntimeConfig } from "../runtimeConfig.js";
|
2
|
+
function sanitizeUrl(url) {
|
3
|
+
url = new URL(url);
|
4
|
+
return url.origin + url.pathname;
|
5
|
+
}
|
6
|
+
function getApikey(url) {
|
7
|
+
return new URL(url).searchParams.get("apikey");
|
8
|
+
}
|
9
|
+
async function backfill(knex) {
|
10
|
+
const { torznab } = getRuntimeConfig();
|
11
|
+
await knex("indexer")
|
12
|
+
.insert(torznab.map((url) => ({
|
13
|
+
url: sanitizeUrl(url),
|
14
|
+
apikey: getApikey(url),
|
15
|
+
active: true,
|
16
|
+
})))
|
17
|
+
.onConflict("url")
|
18
|
+
.merge(["active", "apikey"]);
|
19
|
+
const timestampRows = await knex
|
20
|
+
.select("searchee.id as searchee_id", "indexer.id as indexer_id", "searchee.first_searched as first_searched", "searchee.last_searched as last_searched")
|
21
|
+
.from("searchee")
|
22
|
+
// @ts-expect-error crossJoin supports string
|
23
|
+
.crossJoin("indexer");
|
24
|
+
await knex.batchInsert("timestamp", timestampRows, 100);
|
25
|
+
}
|
26
|
+
async function up(knex) {
|
27
|
+
await knex.schema.createTable("indexer", (table) => {
|
28
|
+
table.increments("id").primary();
|
29
|
+
table.string("url").unique();
|
30
|
+
table.string("apikey");
|
31
|
+
table.boolean("active");
|
32
|
+
});
|
33
|
+
await knex.schema.createTable("timestamp", (table) => {
|
34
|
+
table.integer("searchee_id").references("id").inTable("searchee");
|
35
|
+
table.integer("indexer_id").references("id").inTable("indexer");
|
36
|
+
table.integer("first_searched");
|
37
|
+
table.integer("last_searched");
|
38
|
+
table.primary(["searchee_id", "indexer_id"]);
|
39
|
+
});
|
40
|
+
await backfill(knex);
|
41
|
+
}
|
42
|
+
async function down(knex) {
|
43
|
+
await knex.schema.dropTable("timestamp");
|
44
|
+
await knex.schema.dropTable("indexer");
|
45
|
+
}
|
46
|
+
export default { name: "02-timestamps", up, down };
|
47
|
+
//# sourceMappingURL=02-timestamps.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"02-timestamps.js","sourceRoot":"","sources":["../../src/migrations/02-timestamps.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvD,SAAS,WAAW,CAAC,GAAiB;IACrC,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;IACnB,OAAO,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,QAAQ,CAAC;AAClC,CAAC;AAED,SAAS,SAAS,CAAC,GAAW;IAC7B,OAAO,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAChD,CAAC;AAED,KAAK,UAAU,QAAQ,CAAC,IAAe;IACtC,MAAM,EAAE,OAAO,EAAE,GAAG,gBAAgB,EAAE,CAAC;IAEvC,MAAM,IAAI,CAAC,SAAS,CAAC;SACnB,MAAM,CACN,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QACrB,GAAG,EAAE,WAAW,CAAC,GAAG,CAAC;QACrB,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC;QACtB,MAAM,EAAE,IAAI;KACZ,CAAC,CAAC,CACH;SACA,UAAU,CAAC,KAAK,CAAC;SACjB,KAAK,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;IAE9B,MAAM,aAAa,GAAG,MAAM,IAAI;SAC9B,MAAM,CACN,4BAA4B,EAC5B,0BAA0B,EAC1B,2CAA2C,EAC3C,yCAAyC,CACzC;SACA,IAAI,CAAC,UAAU,CAAC;QACjB,6CAA6C;SAC5C,SAAS,CAAC,SAAS,CAAC,CAAC;IACvB,MAAM,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,aAAa,EAAE,GAAG,CAAC,CAAC;AACzD,CAAC;AAED,KAAK,UAAU,EAAE,CAAC,IAAe;IAChC,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,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC;QAC7B,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACvB,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACzB,CAAC,CAAC,CAAC;IAEH,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,EAAE;QACpD,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAClE,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAChE,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;QAChC,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;QAC/B,KAAK,CAAC,OAAO,CAAC,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC;AACtB,CAAC;AAED,KAAK,UAAU,IAAI,CAAC,IAAe;IAClC,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;IACzC,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;AACxC,CAAC;AAED,eAAe,EAAE,IAAI,EAAE,eAAe,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC"}
|
@@ -0,0 +1,14 @@
|
|
1
|
+
async function up(knex) {
|
2
|
+
await knex.schema.alterTable("indexer", (table) => {
|
3
|
+
table.string("status");
|
4
|
+
table.integer("retry_after");
|
5
|
+
table.boolean("search_cap").nullable();
|
6
|
+
table.boolean("tv_search_cap").nullable();
|
7
|
+
table.boolean("movie_search_cap").nullable();
|
8
|
+
});
|
9
|
+
}
|
10
|
+
function down() {
|
11
|
+
// no new tables created
|
12
|
+
}
|
13
|
+
export default { name: "03-rateLimits", up, down };
|
14
|
+
//# sourceMappingURL=03-rateLimits.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"03-rateLimits.js","sourceRoot":"","sources":["../../src/migrations/03-rateLimits.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,QAAQ,CAAC,CAAC;QACvB,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;QAC7B,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,QAAQ,EAAE,CAAC;QACvC,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,QAAQ,EAAE,CAAC;QAC1C,KAAK,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,QAAQ,EAAE,CAAC;IAC9C,CAAC,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,IAAI;IACZ,wBAAwB;AACzB,CAAC;AAED,eAAe,EAAE,IAAI,EAAE,eAAe,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC"}
|
@@ -1,8 +1,9 @@
|
|
1
1
|
import initialSchema from "./00-initialSchema.js";
|
2
2
|
import jobs from "./01-jobs.js";
|
3
|
-
|
3
|
+
import timestamps from "./02-timestamps.js";
|
4
|
+
import rateLimits from "./03-rateLimits.js";
|
4
5
|
export const migrations = {
|
5
|
-
getMigrations: () => Promise.resolve([initialSchema, jobs]),
|
6
|
+
getMigrations: () => Promise.resolve([initialSchema, jobs, timestamps, rateLimits]),
|
6
7
|
getMigrationName: (migration) => migration.name,
|
7
8
|
getMigration: (migration) => migration,
|
8
9
|
};
|
@@ -1 +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;
|
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;AAE5C,MAAM,CAAC,MAAM,UAAU,GAAG;IACzB,aAAa,EAAE,GAAG,EAAE,CACnB,OAAO,CAAC,OAAO,CAAC,CAAC,aAAa,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;IAC/D,gBAAgB,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI;IAC/C,YAAY,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS;CACtC,CAAC"}
|
package/dist/pipeline.js
CHANGED
@@ -1,24 +1,25 @@
|
|
1
1
|
import chalk from "chalk";
|
2
2
|
import fs from "fs";
|
3
3
|
import { zip } from "lodash-es";
|
4
|
+
import ms from "ms";
|
4
5
|
import { performAction, performActions } from "./action.js";
|
5
6
|
import { Decision, InjectionResult, SaveResult, } from "./constants.js";
|
6
7
|
import { db } from "./db.js";
|
7
8
|
import { assessCandidate } from "./decide.js";
|
9
|
+
import { IndexerStatus, updateIndexerStatus, updateSearchTimestamps, } from "./indexers.js";
|
8
10
|
import { Label, logger } from "./logger.js";
|
9
11
|
import { filterByContent, filterDupes, filterTimestamps } from "./preFilter.js";
|
10
12
|
import { sendResultsNotification } from "./pushNotifier.js";
|
11
13
|
import { EmptyNonceOptions, getRuntimeConfig, } from "./runtimeConfig.js";
|
12
14
|
import { createSearcheeFromMetafile, createSearcheeFromTorrentFile, } from "./searchee.js";
|
13
15
|
import { getInfoHashesToExclude, getTorrentByCriteria, getTorrentByFuzzyName, indexNewTorrents, loadTorrentDirLight, } from "./torrent.js";
|
14
|
-
import {
|
15
|
-
import { filterAsync,
|
16
|
+
import { queryRssFeeds, searchTorznab } from "./torznab.js";
|
17
|
+
import { filterAsync, stripExtension } from "./utils.js";
|
16
18
|
async function findOnOtherSites(searchee, hashesToExclude, nonceOptions = EmptyNonceOptions) {
|
17
19
|
const assessEach = async (result) => ({
|
18
20
|
assessment: await assessCandidate(result, searchee, hashesToExclude),
|
19
21
|
tracker: result.tracker,
|
20
22
|
});
|
21
|
-
const query = stripExtension(searchee.name);
|
22
23
|
// make sure searchee is in database
|
23
24
|
await db("searchee")
|
24
25
|
.insert({ name: searchee.name })
|
@@ -26,35 +27,39 @@ async function findOnOtherSites(searchee, hashesToExclude, nonceOptions = EmptyN
|
|
26
27
|
.ignore();
|
27
28
|
let response;
|
28
29
|
try {
|
29
|
-
response = await
|
30
|
+
response = await searchTorznab(searchee.name);
|
30
31
|
}
|
31
32
|
catch (e) {
|
32
|
-
logger.error(`error searching for ${
|
33
|
+
logger.error(`error searching for ${searchee.name}`);
|
34
|
+
logger.debug(e);
|
33
35
|
return 0;
|
34
36
|
}
|
35
|
-
const results = response
|
36
|
-
|
37
|
-
|
37
|
+
const results = response.flatMap((e) => e.candidates.map((candidate) => ({
|
38
|
+
...candidate,
|
39
|
+
indexerId: e.indexerId,
|
40
|
+
})));
|
41
|
+
const assessed = await Promise.all(results.map(assessEach));
|
42
|
+
const { rateLimited, notRateLimited } = assessed.reduce((acc, cur, idx) => {
|
43
|
+
const candidate = results[idx];
|
44
|
+
if (cur.assessment.decision === Decision.RATE_LIMITED) {
|
45
|
+
acc.rateLimited.add(candidate.indexerId);
|
46
|
+
acc.notRateLimited.delete(candidate.indexerId);
|
47
|
+
}
|
48
|
+
return acc;
|
49
|
+
}, {
|
50
|
+
rateLimited: new Set(),
|
51
|
+
notRateLimited: new Set(response.map((r) => r.indexerId)),
|
52
|
+
});
|
53
|
+
await updateSearchTimestamps(searchee.name, Array.from(notRateLimited));
|
54
|
+
await updateIndexerStatus(IndexerStatus.RATE_LIMITED, Date.now() + ms("1 hour"), Array.from(rateLimited));
|
55
|
+
const matches = assessed.filter((e) => e.assessment.decision === Decision.MATCH);
|
38
56
|
const actionResults = await performActions(searchee, matches, nonceOptions);
|
39
57
|
if (!actionResults.includes(InjectionResult.TORRENT_NOT_COMPLETE)) {
|
40
58
|
const zipped = zip(matches.map((m) => m.assessment), matches.map((m) => m.tracker), actionResults);
|
41
59
|
sendResultsNotification(searchee, zipped, Label.SEARCH);
|
42
|
-
await updateSearchTimestamps(searchee.name);
|
43
60
|
}
|
44
61
|
return matches.length;
|
45
62
|
}
|
46
|
-
async function updateSearchTimestamps(name) {
|
47
|
-
await db.transaction(async (trx) => {
|
48
|
-
const now = Date.now();
|
49
|
-
const entry = await trx("searchee").where({ name }).first();
|
50
|
-
await trx("searchee")
|
51
|
-
.where({ name })
|
52
|
-
.update({
|
53
|
-
last_searched: now,
|
54
|
-
first_searched: (entry === null || entry === void 0 ? void 0 : entry.first_searched) ? undefined : now,
|
55
|
-
});
|
56
|
-
});
|
57
|
-
}
|
58
63
|
async function findMatchesBatch(samples, hashesToExclude) {
|
59
64
|
const { delay } = getRuntimeConfig();
|
60
65
|
let totalFound = 0;
|
@@ -106,7 +111,9 @@ async function findSearchableTorrents() {
|
|
106
111
|
let parsedTorrents;
|
107
112
|
if (Array.isArray(torrents)) {
|
108
113
|
const searcheeResults = await Promise.all(torrents.map(createSearcheeFromTorrentFile));
|
109
|
-
parsedTorrents = searcheeResults
|
114
|
+
parsedTorrents = searcheeResults
|
115
|
+
.filter((t) => t.isOk())
|
116
|
+
.map((t) => t.unwrapOrThrow());
|
110
117
|
}
|
111
118
|
else {
|
112
119
|
parsedTorrents = await loadTorrentDirLight();
|
@@ -132,20 +139,23 @@ export async function main() {
|
|
132
139
|
});
|
133
140
|
}
|
134
141
|
export async function scanRssFeeds() {
|
135
|
-
|
142
|
+
var _a, _b;
|
143
|
+
const candidates = await queryRssFeeds();
|
144
|
+
const lastRun = (_b = (_a = (await db("job_log").select("last_run").where({ name: "rss" }).first())) === null || _a === void 0 ? void 0 : _a.last_run) !== null && _b !== void 0 ? _b : 0;
|
145
|
+
const candidatesSinceLastTime = candidates.filter((c) => c.pubDate > lastRun);
|
136
146
|
logger.verbose({
|
137
147
|
label: Label.RSS,
|
138
|
-
message: `Scan returned ${candidates.length}
|
148
|
+
message: `Scan returned ${candidatesSinceLastTime.length} new results, ignoring ${candidates.length - candidatesSinceLastTime.length} already seen`,
|
139
149
|
});
|
140
150
|
logger.verbose({
|
141
151
|
label: Label.RSS,
|
142
152
|
message: "Indexing new torrents...",
|
143
153
|
});
|
144
154
|
await indexNewTorrents();
|
145
|
-
for (const [i, candidate] of
|
155
|
+
for (const [i, candidate] of candidatesSinceLastTime.entries()) {
|
146
156
|
logger.verbose({
|
147
157
|
label: Label.RSS,
|
148
|
-
message: `Processing release ${i + 1}/${
|
158
|
+
message: `Processing release ${i + 1}/${candidatesSinceLastTime.length}`,
|
149
159
|
});
|
150
160
|
await checkNewCandidateMatch(candidate);
|
151
161
|
}
|
package/dist/pipeline.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../src/pipeline.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAChC,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,EAEN,QAAQ,EACR,eAAe,EACf,UAAU,GACV,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAC7B,OAAO,EAAE,eAAe,EAAoB,MAAM,aAAa,CAAC;AAChE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAChF,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EACN,iBAAiB,EACjB,gBAAgB,GAEhB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACN,0BAA0B,EAC1B,6BAA6B,GAE7B,MAAM,eAAe,CAAC;AACvB,OAAO,EACN,sBAAsB,EACtB,oBAAoB,EACpB,qBAAqB,EACrB,gBAAgB,EAChB,mBAAmB,GAEnB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,
|
1
|
+
{"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../src/pipeline.ts"],"names":[],"mappings":"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"}
|
package/dist/preFilter.js
CHANGED
@@ -1,10 +1,11 @@
|
|
1
1
|
import { uniqBy } from "lodash-es";
|
2
|
+
import ms from "ms";
|
2
3
|
import path from "path";
|
3
4
|
import { EP_REGEX, EXTENSIONS } from "./constants.js";
|
5
|
+
import { db } from "./db.js";
|
4
6
|
import { Label, logger } from "./logger.js";
|
5
7
|
import { getRuntimeConfig } from "./runtimeConfig.js";
|
6
|
-
import {
|
7
|
-
import { nMsAgo } from "./utils.js";
|
8
|
+
import { humanReadable, nMsAgo } from "./utils.js";
|
8
9
|
const extensionsWithDots = EXTENSIONS.map((e) => `.${e}`);
|
9
10
|
export function filterByContent(searchee) {
|
10
11
|
const { includeEpisodes, includeNonVideos } = getRuntimeConfig();
|
@@ -40,27 +41,41 @@ export function filterDupes(searchees) {
|
|
40
41
|
export async function filterTimestamps(searchee) {
|
41
42
|
const { excludeOlder, excludeRecentSearch } = getRuntimeConfig();
|
42
43
|
const timestampDataSql = await db("searchee")
|
43
|
-
|
44
|
+
// @ts-expect-error crossJoin supports string
|
45
|
+
.crossJoin("indexer")
|
46
|
+
.leftOuterJoin("timestamp", {
|
47
|
+
"timestamp.indexer_id": "indexer.id",
|
48
|
+
"timestamp.searchee_id": "searchee.id",
|
49
|
+
})
|
50
|
+
.where({
|
51
|
+
name: searchee.name,
|
52
|
+
"indexer.active": true,
|
53
|
+
"indexer.search_cap": true,
|
54
|
+
})
|
55
|
+
.max({
|
56
|
+
first_searched_all: db.raw("coalesce(timestamp.first_searched, 9223372036854775807)"),
|
57
|
+
})
|
58
|
+
.min({
|
59
|
+
last_searched_all: db.raw("coalesce(timestamp.last_searched, 0)"),
|
60
|
+
})
|
44
61
|
.first();
|
45
|
-
|
46
|
-
return true;
|
47
|
-
const { first_searched, last_searched } = timestampDataSql;
|
62
|
+
const { first_searched_all, last_searched_all } = timestampDataSql;
|
48
63
|
function logReason(reason) {
|
49
64
|
logger.verbose({
|
50
65
|
label: Label.PREFILTER,
|
51
66
|
message: `Torrent ${searchee.name} was not selected for searching because ${reason}`,
|
52
67
|
});
|
53
68
|
}
|
54
|
-
if (excludeOlder &&
|
55
|
-
|
56
|
-
|
57
|
-
logReason(`its first search timestamp ${
|
69
|
+
if (typeof excludeOlder === "number" &&
|
70
|
+
first_searched_all &&
|
71
|
+
first_searched_all < nMsAgo(excludeOlder)) {
|
72
|
+
logReason(`its first search timestamp ${humanReadable(first_searched_all)} is older than ${ms(excludeOlder, { long: true })} ago`);
|
58
73
|
return false;
|
59
74
|
}
|
60
|
-
if (excludeRecentSearch &&
|
61
|
-
|
62
|
-
|
63
|
-
logReason(`its last search timestamp ${
|
75
|
+
if (typeof excludeRecentSearch === "number" &&
|
76
|
+
last_searched_all &&
|
77
|
+
last_searched_all > nMsAgo(excludeRecentSearch)) {
|
78
|
+
logReason(`its last search timestamp ${humanReadable(last_searched_all)} is newer than ${ms(excludeRecentSearch, { long: true })} ago`);
|
64
79
|
return false;
|
65
80
|
}
|
66
81
|
return true;
|
package/dist/preFilter.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"preFilter.js","sourceRoot":"","sources":["../src/preFilter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACnC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,
|
1
|
+
{"version":3,"file":"preFilter.js","sourceRoot":"","sources":["../src/preFilter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACnC,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAC7B,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAEnD,MAAM,kBAAkB,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAE1D,MAAM,UAAU,eAAe,CAAC,QAAkB;IACjD,MAAM,EAAE,eAAe,EAAE,gBAAgB,EAAE,GAAG,gBAAgB,EAAE,CAAC;IAEjE,SAAS,SAAS,CAAC,MAAM;QACxB,MAAM,CAAC,OAAO,CAAC;YACd,KAAK,EAAE,KAAK,CAAC,SAAS;YACtB,OAAO,EAAE,WAAW,QAAQ,CAAC,IAAI,2CAA2C,MAAM,EAAE;SACpF,CAAC,CAAC;IACJ,CAAC;IAED,MAAM,sBAAsB,GAC3B,QAAQ,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAEtE,IAAI,CAAC,eAAe,IAAI,sBAAsB,EAAE;QAC/C,SAAS,CAAC,wBAAwB,CAAC,CAAC;QACpC,OAAO,KAAK,CAAC;KACb;IAED,MAAM,iBAAiB,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CACvD,kBAAkB,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CACpD,CAAC;IAEF,IAAI,CAAC,gBAAgB,IAAI,CAAC,iBAAiB,EAAE;QAC5C,SAAS,CAAC,0BAA0B,CAAC,CAAC;QACtC,OAAO,KAAK,CAAC;KACb;IAED,OAAO,IAAI,CAAC;AACb,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,SAAqB;IAChD,MAAM,QAAQ,GAAG,MAAM,CAAW,SAAS,EAAE,MAAM,CAAC,CAAC;IACrD,MAAM,QAAQ,GAAG,SAAS,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;IACpD,IAAI,QAAQ,GAAG,CAAC,EAAE;QACjB,MAAM,CAAC,OAAO,CAAC;YACd,KAAK,EAAE,KAAK,CAAC,SAAS;YACtB,OAAO,EAAE,GAAG,QAAQ,wCAAwC;SAC5D,CAAC,CAAC;KACH;IACD,OAAO,QAAQ,CAAC;AACjB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,QAAkB;IACxD,MAAM,EAAE,YAAY,EAAE,mBAAmB,EAAE,GAAG,gBAAgB,EAAE,CAAC;IACjE,MAAM,gBAAgB,GAAG,MAAM,EAAE,CAAC,UAAU,CAAC;QAC5C,6CAA6C;SAC5C,SAAS,CAAC,SAAS,CAAC;SACpB,aAAa,CAAC,WAAW,EAAE;QAC3B,sBAAsB,EAAE,YAAY;QACpC,uBAAuB,EAAE,aAAa;KACtC,CAAC;SACD,KAAK,CAAC;QACN,IAAI,EAAE,QAAQ,CAAC,IAAI;QACnB,gBAAgB,EAAE,IAAI;QACtB,oBAAoB,EAAE,IAAI;KAC1B,CAAC;SACD,GAAG,CAAC;QACJ,kBAAkB,EAAE,EAAE,CAAC,GAAG,CACzB,yDAAyD,CACzD;KACD,CAAC;SACD,GAAG,CAAC;QACJ,iBAAiB,EAAE,EAAE,CAAC,GAAG,CAAC,sCAAsC,CAAC;KACjE,CAAC;SACD,KAAK,EAAE,CAAC;IAEV,MAAM,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,GAAG,gBAAgB,CAAC;IACnE,SAAS,SAAS,CAAC,MAAM;QACxB,MAAM,CAAC,OAAO,CAAC;YACd,KAAK,EAAE,KAAK,CAAC,SAAS;YACtB,OAAO,EAAE,WAAW,QAAQ,CAAC,IAAI,2CAA2C,MAAM,EAAE;SACpF,CAAC,CAAC;IACJ,CAAC;IAED,IACC,OAAO,YAAY,KAAK,QAAQ;QAChC,kBAAkB;QAClB,kBAAkB,GAAG,MAAM,CAAC,YAAY,CAAC,EACxC;QACD,SAAS,CACR,8BAA8B,aAAa,CAC1C,kBAAkB,CAClB,kBAAkB,EAAE,CAAC,YAAY,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,MAAM,CACzD,CAAC;QACF,OAAO,KAAK,CAAC;KACb;IAED,IACC,OAAO,mBAAmB,KAAK,QAAQ;QACvC,iBAAiB;QACjB,iBAAiB,GAAG,MAAM,CAAC,mBAAmB,CAAC,EAC9C;QACD,SAAS,CACR,6BAA6B,aAAa,CACzC,iBAAiB,CACjB,kBAAkB,EAAE,CAAC,mBAAmB,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,MAAM,CAChE,CAAC;QACF,OAAO,KAAK,CAAC;KACb;IAED,OAAO,IAAI,CAAC;AACb,CAAC"}
|