xtrawl 0.1.0
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/DOCUMENTATION.md +774 -0
- package/README.md +232 -0
- package/dist/auth/bootstrap.d.ts +4 -0
- package/dist/auth/bootstrap.d.ts.map +1 -0
- package/dist/auth/bootstrap.js +29 -0
- package/dist/auth/bootstrap.js.map +1 -0
- package/dist/auth/cookies.d.ts +7 -0
- package/dist/auth/cookies.d.ts.map +1 -0
- package/dist/auth/cookies.js +83 -0
- package/dist/auth/cookies.js.map +1 -0
- package/dist/auth/loaders.d.ts +6 -0
- package/dist/auth/loaders.d.ts.map +1 -0
- package/dist/auth/loaders.js +69 -0
- package/dist/auth/loaders.js.map +1 -0
- package/dist/auth/material.d.ts +3 -0
- package/dist/auth/material.d.ts.map +1 -0
- package/dist/auth/material.js +20 -0
- package/dist/auth/material.js.map +1 -0
- package/dist/auth/records.d.ts +4 -0
- package/dist/auth/records.d.ts.map +1 -0
- package/dist/auth/records.js +38 -0
- package/dist/auth/records.js.map +1 -0
- package/dist/cli/help.d.ts +2 -0
- package/dist/cli/help.d.ts.map +1 -0
- package/dist/cli/help.js +30 -0
- package/dist/cli/help.js.map +1 -0
- package/dist/cli/main.d.ts +3 -0
- package/dist/cli/main.d.ts.map +1 -0
- package/dist/cli/main.js +85 -0
- package/dist/cli/main.js.map +1 -0
- package/dist/cli/parser.d.ts +22 -0
- package/dist/cli/parser.d.ts.map +1 -0
- package/dist/cli/parser.js +275 -0
- package/dist/cli/parser.js.map +1 -0
- package/dist/client/client.d.ts +29 -0
- package/dist/client/client.d.ts.map +1 -0
- package/dist/client/client.js +192 -0
- package/dist/client/client.js.map +1 -0
- package/dist/client/collectors.d.ts +15 -0
- package/dist/client/collectors.d.ts.map +1 -0
- package/dist/client/collectors.js +185 -0
- package/dist/client/collectors.js.map +1 -0
- package/dist/client/database.d.ts +56 -0
- package/dist/client/database.d.ts.map +1 -0
- package/dist/client/database.js +146 -0
- package/dist/client/database.js.map +1 -0
- package/dist/client/profiles.d.ts +5 -0
- package/dist/client/profiles.d.ts.map +1 -0
- package/dist/client/profiles.js +36 -0
- package/dist/client/profiles.js.map +1 -0
- package/dist/client/search.d.ts +21 -0
- package/dist/client/search.d.ts.map +1 -0
- package/dist/client/search.js +139 -0
- package/dist/client/search.js.map +1 -0
- package/dist/client/types.d.ts +21 -0
- package/dist/client/types.d.ts.map +1 -0
- package/dist/client/types.js +2 -0
- package/dist/client/types.js.map +1 -0
- package/dist/config/defaults.d.ts +3 -0
- package/dist/config/defaults.d.ts.map +1 -0
- package/dist/config/defaults.js +38 -0
- package/dist/config/defaults.js.map +1 -0
- package/dist/config/environment.d.ts +5 -0
- package/dist/config/environment.d.ts.map +1 -0
- package/dist/config/environment.js +62 -0
- package/dist/config/environment.js.map +1 -0
- package/dist/config/types.d.ts +47 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/types.js +2 -0
- package/dist/config/types.js.map +1 -0
- package/dist/config/validation.d.ts +6 -0
- package/dist/config/validation.d.ts.map +1 -0
- package/dist/config/validation.js +147 -0
- package/dist/config/validation.js.map +1 -0
- package/dist/domain/accounts.d.ts +64 -0
- package/dist/domain/accounts.d.ts.map +1 -0
- package/dist/domain/accounts.js +2 -0
- package/dist/domain/accounts.js.map +1 -0
- package/dist/domain/errors.d.ts +61 -0
- package/dist/domain/errors.d.ts.map +1 -0
- package/dist/domain/errors.js +89 -0
- package/dist/domain/errors.js.map +1 -0
- package/dist/domain/http.d.ts +36 -0
- package/dist/domain/http.d.ts.map +1 -0
- package/dist/domain/http.js +2 -0
- package/dist/domain/http.js.map +1 -0
- package/dist/domain/manifest.d.ts +23 -0
- package/dist/domain/manifest.d.ts.map +1 -0
- package/dist/domain/manifest.js +2 -0
- package/dist/domain/manifest.js.map +1 -0
- package/dist/domain/records.d.ts +67 -0
- package/dist/domain/records.d.ts.map +1 -0
- package/dist/domain/records.js +2 -0
- package/dist/domain/records.js.map +1 -0
- package/dist/domain/requests.d.ts +87 -0
- package/dist/domain/requests.d.ts.map +1 -0
- package/dist/domain/requests.js +2 -0
- package/dist/domain/requests.js.map +1 -0
- package/dist/engine/api-engine.d.ts +25 -0
- package/dist/engine/api-engine.d.ts.map +1 -0
- package/dist/engine/api-engine.js +98 -0
- package/dist/engine/api-engine.js.map +1 -0
- package/dist/engine/extractors.d.ts +27 -0
- package/dist/engine/extractors.d.ts.map +1 -0
- package/dist/engine/extractors.js +248 -0
- package/dist/engine/extractors.js.map +1 -0
- package/dist/index.d.ts +21 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +15 -0
- package/dist/index.js.map +1 -0
- package/dist/manifest/default-manifest.d.ts +3 -0
- package/dist/manifest/default-manifest.d.ts.map +1 -0
- package/dist/manifest/default-manifest.js +46 -0
- package/dist/manifest/default-manifest.js.map +1 -0
- package/dist/manifest/model.d.ts +3 -0
- package/dist/manifest/model.d.ts.map +1 -0
- package/dist/manifest/model.js +48 -0
- package/dist/manifest/model.js.map +1 -0
- package/dist/manifest/provider.d.ts +19 -0
- package/dist/manifest/provider.d.ts.map +1 -0
- package/dist/manifest/provider.js +94 -0
- package/dist/manifest/provider.js.map +1 -0
- package/dist/manifest/scraper.d.ts +11 -0
- package/dist/manifest/scraper.d.ts.map +1 -0
- package/dist/manifest/scraper.js +130 -0
- package/dist/manifest/scraper.js.map +1 -0
- package/dist/output/csv-writer.d.ts +2 -0
- package/dist/output/csv-writer.d.ts.map +1 -0
- package/dist/output/csv-writer.js +94 -0
- package/dist/output/csv-writer.js.map +1 -0
- package/dist/output/json-writer.d.ts +2 -0
- package/dist/output/json-writer.d.ts.map +1 -0
- package/dist/output/json-writer.js +29 -0
- package/dist/output/json-writer.js.map +1 -0
- package/dist/output/names.d.ts +4 -0
- package/dist/output/names.d.ts.map +1 -0
- package/dist/output/names.js +22 -0
- package/dist/output/names.js.map +1 -0
- package/dist/output/writer.d.ts +7 -0
- package/dist/output/writer.d.ts.map +1 -0
- package/dist/output/writer.js +33 -0
- package/dist/output/writer.js.map +1 -0
- package/dist/pool/account-pool.d.ts +29 -0
- package/dist/pool/account-pool.d.ts.map +1 -0
- package/dist/pool/account-pool.js +145 -0
- package/dist/pool/account-pool.js.map +1 -0
- package/dist/pool/cooldown.d.ts +18 -0
- package/dist/pool/cooldown.d.ts.map +1 -0
- package/dist/pool/cooldown.js +38 -0
- package/dist/pool/cooldown.js.map +1 -0
- package/dist/pool/limiter.d.ts +11 -0
- package/dist/pool/limiter.d.ts.map +1 -0
- package/dist/pool/limiter.js +27 -0
- package/dist/pool/limiter.js.map +1 -0
- package/dist/query/builder.d.ts +19 -0
- package/dist/query/builder.d.ts.map +1 -0
- package/dist/query/builder.js +110 -0
- package/dist/query/builder.js.map +1 -0
- package/dist/query/hash.d.ts +2 -0
- package/dist/query/hash.d.ts.map +1 -0
- package/dist/query/hash.js +6 -0
- package/dist/query/hash.js.map +1 -0
- package/dist/query/normalize.d.ts +39 -0
- package/dist/query/normalize.d.ts.map +1 -0
- package/dist/query/normalize.js +176 -0
- package/dist/query/normalize.js.map +1 -0
- package/dist/query/targets.d.ts +11 -0
- package/dist/query/targets.d.ts.map +1 -0
- package/dist/query/targets.js +96 -0
- package/dist/query/targets.js.map +1 -0
- package/dist/runner/index.d.ts +4 -0
- package/dist/runner/index.d.ts.map +1 -0
- package/dist/runner/index.js +4 -0
- package/dist/runner/index.js.map +1 -0
- package/dist/runner/retry.d.ts +7 -0
- package/dist/runner/retry.d.ts.map +1 -0
- package/dist/runner/retry.js +26 -0
- package/dist/runner/retry.js.map +1 -0
- package/dist/runner/runner.d.ts +20 -0
- package/dist/runner/runner.d.ts.map +1 -0
- package/dist/runner/runner.js +37 -0
- package/dist/runner/runner.js.map +1 -0
- package/dist/runner/task-queue.d.ts +19 -0
- package/dist/runner/task-queue.d.ts.map +1 -0
- package/dist/runner/task-queue.js +58 -0
- package/dist/runner/task-queue.js.map +1 -0
- package/dist/storage/account-repository.d.ts +50 -0
- package/dist/storage/account-repository.d.ts.map +1 -0
- package/dist/storage/account-repository.js +171 -0
- package/dist/storage/account-repository.js.map +1 -0
- package/dist/storage/account-row.d.ts +4 -0
- package/dist/storage/account-row.d.ts.map +1 -0
- package/dist/storage/account-row.js +46 -0
- package/dist/storage/account-row.js.map +1 -0
- package/dist/storage/checkpoint-repository.d.ts +10 -0
- package/dist/storage/checkpoint-repository.d.ts.map +1 -0
- package/dist/storage/checkpoint-repository.js +30 -0
- package/dist/storage/checkpoint-repository.js.map +1 -0
- package/dist/storage/database.d.ts +18 -0
- package/dist/storage/database.d.ts.map +1 -0
- package/dist/storage/database.js +42 -0
- package/dist/storage/database.js.map +1 -0
- package/dist/storage/index.d.ts +15 -0
- package/dist/storage/index.d.ts.map +1 -0
- package/dist/storage/index.js +18 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/storage/manifest-repository.d.ts +9 -0
- package/dist/storage/manifest-repository.d.ts.map +1 -0
- package/dist/storage/manifest-repository.js +22 -0
- package/dist/storage/manifest-repository.js.map +1 -0
- package/dist/storage/run-repository.d.ts +24 -0
- package/dist/storage/run-repository.d.ts.map +1 -0
- package/dist/storage/run-repository.js +51 -0
- package/dist/storage/run-repository.js.map +1 -0
- package/dist/storage/schema.d.ts +3 -0
- package/dist/storage/schema.d.ts.map +1 -0
- package/dist/storage/schema.js +53 -0
- package/dist/storage/schema.js.map +1 -0
- package/dist/transport/graphql.d.ts +8 -0
- package/dist/transport/graphql.d.ts.map +1 -0
- package/dist/transport/graphql.js +104 -0
- package/dist/transport/graphql.js.map +1 -0
- package/dist/transport/proxy.d.ts +5 -0
- package/dist/transport/proxy.d.ts.map +1 -0
- package/dist/transport/proxy.js +36 -0
- package/dist/transport/proxy.js.map +1 -0
- package/dist/transport/session.d.ts +25 -0
- package/dist/transport/session.d.ts.map +1 -0
- package/dist/transport/session.js +138 -0
- package/dist/transport/session.js.map +1 -0
- package/dist/transport/transaction-id.d.ts +20 -0
- package/dist/transport/transaction-id.d.ts.map +1 -0
- package/dist/transport/transaction-id.js +74 -0
- package/dist/transport/transaction-id.js.map +1 -0
- package/dist/utils/fingerprint.d.ts +3 -0
- package/dist/utils/fingerprint.d.ts.map +1 -0
- package/dist/utils/fingerprint.js +20 -0
- package/dist/utils/fingerprint.js.map +1 -0
- package/dist/utils/guards.d.ts +8 -0
- package/dist/utils/guards.d.ts.map +1 -0
- package/dist/utils/guards.js +38 -0
- package/dist/utils/guards.js.map +1 -0
- package/docs/architecture/overview.md +59 -0
- package/docs/decisions/0001-runtime-and-state.md +21 -0
- package/docs/decisions/0002-modular-boundaries.md +16 -0
- package/docs/plans/initial-build.md +18 -0
- package/docs/product/specification.md +87 -0
- package/docs/security/data-boundary.md +27 -0
- package/package.json +89 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/client/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { ClientConfig } from "../config/types.js";
|
|
2
|
+
import type { FollowRecord, SearchResult } from "../domain/records.js";
|
|
3
|
+
import type { FollowsRequest, ProfileTimelineRequest, TargetInput } from "../domain/requests.js";
|
|
4
|
+
import type { ApiEngine } from "../engine/api-engine.js";
|
|
5
|
+
import type { AccountPool } from "../pool/account-pool.js";
|
|
6
|
+
import type { StorageBundle } from "../storage/index.js";
|
|
7
|
+
export interface CollectionContext {
|
|
8
|
+
readonly config: ClientConfig;
|
|
9
|
+
readonly pool: AccountPool;
|
|
10
|
+
readonly engine: ApiEngine;
|
|
11
|
+
readonly storage: StorageBundle;
|
|
12
|
+
}
|
|
13
|
+
export declare function collectProfileTweets(context: CollectionContext, targets: readonly TargetInput[], options: Omit<ProfileTimelineRequest, "targets">): Promise<SearchResult>;
|
|
14
|
+
export declare function collectFollows(context: CollectionContext, targets: readonly TargetInput[], options: FollowsRequest): Promise<readonly FollowRecord[]>;
|
|
15
|
+
//# sourceMappingURL=collectors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collectors.d.ts","sourceRoot":"","sources":["../../src/client/collectors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAe,MAAM,sBAAsB,CAAC;AACpF,OAAO,KAAK,EAAE,cAAc,EAAE,sBAAsB,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEjG,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAI3D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAIzD,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC;CACjC;AAED,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,iBAAiB,EAC1B,OAAO,EAAE,SAAS,WAAW,EAAE,EAC/B,OAAO,EAAE,IAAI,CAAC,sBAAsB,EAAE,SAAS,CAAC,GAC/C,OAAO,CAAC,YAAY,CAAC,CAmGvB;AAED,wBAAsB,cAAc,CAClC,OAAO,EAAE,iBAAiB,EAC1B,OAAO,EAAE,SAAS,WAAW,EAAE,EAC/B,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,SAAS,YAAY,EAAE,CAAC,CA0ElC"}
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
import { mapFollow } from "../engine/extractors.js";
|
|
2
|
+
import { RunFailed } from "../domain/errors.js";
|
|
3
|
+
import { queryHash } from "../query/hash.js";
|
|
4
|
+
import { ExecutionRunner } from "../runner/runner.js";
|
|
5
|
+
import { saveRows } from "../output/writer.js";
|
|
6
|
+
import { targetOutputName } from "../output/names.js";
|
|
7
|
+
export async function collectProfileTweets(context, targets, options) {
|
|
8
|
+
const request = { targets, ...options };
|
|
9
|
+
const out = [];
|
|
10
|
+
const seenByTarget = new Map();
|
|
11
|
+
const cursors = new Map();
|
|
12
|
+
const counts = new Map();
|
|
13
|
+
let limitReached = false;
|
|
14
|
+
let poolRetries = 0;
|
|
15
|
+
const runner = new ExecutionRunner({
|
|
16
|
+
concurrency: workerCount(context, targets.length),
|
|
17
|
+
maxAttempts: 1,
|
|
18
|
+
});
|
|
19
|
+
const outcome = await runner.run(targets, async (target) => {
|
|
20
|
+
const resolved = await resolveTarget(context, target, () => {
|
|
21
|
+
poolRetries += 1;
|
|
22
|
+
}, options.maxAccountSwitches);
|
|
23
|
+
const checkpointHash = queryHash({ operation: "profile_tweets", target, options });
|
|
24
|
+
const seen = seenByTarget.get(checkpointHash) ?? new Set();
|
|
25
|
+
seenByTarget.set(checkpointHash, seen);
|
|
26
|
+
const saved = options.resume ? context.storage.checkpoints.get(checkpointHash) : undefined;
|
|
27
|
+
let cursor = cursors.get(checkpointHash) ??
|
|
28
|
+
options.initialCursors?.[targetKey(target, resolved.userId)] ??
|
|
29
|
+
saved?.root;
|
|
30
|
+
let empty = 0;
|
|
31
|
+
let pages = 0;
|
|
32
|
+
let profileCount = counts.get(checkpointHash) ?? 0;
|
|
33
|
+
const maxPages = options.maxPagesPerProfile ?? Number.POSITIVE_INFINITY;
|
|
34
|
+
while (pages < maxPages && !limitReached) {
|
|
35
|
+
pages += 1;
|
|
36
|
+
const page = await context.pool.execute("profile-tweets", ({ session }) => context.engine.profilePage(session, resolved.userId, request, cursor), {
|
|
37
|
+
countTweets: (value) => value.tweets.length,
|
|
38
|
+
onRetry: () => {
|
|
39
|
+
poolRetries += 1;
|
|
40
|
+
},
|
|
41
|
+
maxAccountSwitches: options.maxAccountSwitches,
|
|
42
|
+
});
|
|
43
|
+
const globalRemaining = options.limit === undefined ? page.tweets.length : Math.max(0, options.limit - out.length);
|
|
44
|
+
const profileRemaining = options.perProfileLimit === undefined
|
|
45
|
+
? page.tweets.length
|
|
46
|
+
: Math.max(0, options.perProfileLimit - profileCount);
|
|
47
|
+
const remaining = page.tweets.slice(0, Math.min(globalRemaining, profileRemaining));
|
|
48
|
+
let added = 0;
|
|
49
|
+
for (const tweet of remaining) {
|
|
50
|
+
if (seen.has(tweet.tweetId))
|
|
51
|
+
continue;
|
|
52
|
+
seen.add(tweet.tweetId);
|
|
53
|
+
out.push(tweet);
|
|
54
|
+
added += 1;
|
|
55
|
+
profileCount += 1;
|
|
56
|
+
counts.set(checkpointHash, profileCount);
|
|
57
|
+
if (options.limit !== undefined && out.length >= options.limit) {
|
|
58
|
+
limitReached = true;
|
|
59
|
+
break;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
empty = added === 0 ? empty + 1 : 0;
|
|
63
|
+
if (options.resume && page.cursor)
|
|
64
|
+
context.storage.checkpoints.save(checkpointHash, { root: page.cursor });
|
|
65
|
+
if (page.cursor)
|
|
66
|
+
cursors.set(checkpointHash, page.cursor);
|
|
67
|
+
if (stopPaging(options, out.length, profileCount, page.cursor, empty, options.maxEmptyPages ?? context.config.maxEmptyPages))
|
|
68
|
+
break;
|
|
69
|
+
cursor = page.cursor;
|
|
70
|
+
}
|
|
71
|
+
if (!limitReached)
|
|
72
|
+
context.storage.checkpoints.clear(checkpointHash);
|
|
73
|
+
});
|
|
74
|
+
if (outcome.failed.length > 0 && (context.config.strict || out.length === 0))
|
|
75
|
+
throw failureFor("Profile timeline", outcome.failed);
|
|
76
|
+
const tweets = options.limit === undefined ? out : out.slice(0, options.limit);
|
|
77
|
+
await saveCollection(context, "profile_tweets", tweets, options, targets);
|
|
78
|
+
return {
|
|
79
|
+
tweets,
|
|
80
|
+
stats: {
|
|
81
|
+
tweetsCount: tweets.length,
|
|
82
|
+
tasksTotal: targets.length,
|
|
83
|
+
tasksDone: outcome.complete.length,
|
|
84
|
+
tasksFailed: outcome.failed.length,
|
|
85
|
+
retries: outcome.retries + poolRetries,
|
|
86
|
+
},
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
export async function collectFollows(context, targets, options) {
|
|
90
|
+
const out = [];
|
|
91
|
+
const seenByTarget = new Map();
|
|
92
|
+
const cursors = new Map();
|
|
93
|
+
let limitReached = false;
|
|
94
|
+
const runner = new ExecutionRunner({
|
|
95
|
+
concurrency: workerCount(context, targets.length),
|
|
96
|
+
maxAttempts: 1,
|
|
97
|
+
});
|
|
98
|
+
const outcome = await runner.run(targets, async (target) => {
|
|
99
|
+
const resolved = await resolveTarget(context, target, undefined, options.maxAccountSwitches);
|
|
100
|
+
const checkpointHash = queryHash({ operation: options.followType, target, options });
|
|
101
|
+
const saved = options.resume ? context.storage.checkpoints.get(checkpointHash) : undefined;
|
|
102
|
+
let cursor = cursors.get(checkpointHash) ??
|
|
103
|
+
options.initialCursors?.[targetKey(target, resolved.userId)] ??
|
|
104
|
+
saved?.root;
|
|
105
|
+
let empty = 0;
|
|
106
|
+
let pages = 0;
|
|
107
|
+
const seen = seenByTarget.get(checkpointHash) ?? new Set();
|
|
108
|
+
seenByTarget.set(checkpointHash, seen);
|
|
109
|
+
let targetCount = seen.size;
|
|
110
|
+
const maxPages = options.maxPagesPerProfile ?? Number.POSITIVE_INFINITY;
|
|
111
|
+
while (pages < maxPages && !limitReached) {
|
|
112
|
+
pages += 1;
|
|
113
|
+
const page = await context.pool.execute(options.followType, ({ session }) => context.engine.followsPage(session, resolved.userId, options.followType, cursor), { maxAccountSwitches: options.maxAccountSwitches });
|
|
114
|
+
let added = 0;
|
|
115
|
+
for (const user of page.users) {
|
|
116
|
+
const mapped = mapFollow(user, { ...target, userId: resolved.userId }, options.followType, options.rawJson);
|
|
117
|
+
const key = mapped.userId ?? mapped.username;
|
|
118
|
+
if (key && !seen.has(key) && withinProfileLimit(options.perProfileLimit, targetCount)) {
|
|
119
|
+
seen.add(key);
|
|
120
|
+
out.push(mapped);
|
|
121
|
+
added += 1;
|
|
122
|
+
targetCount += 1;
|
|
123
|
+
if (options.limit !== undefined && out.length >= options.limit) {
|
|
124
|
+
limitReached = true;
|
|
125
|
+
break;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
empty = added === 0 ? empty + 1 : 0;
|
|
130
|
+
if (options.resume && page.cursor)
|
|
131
|
+
context.storage.checkpoints.save(checkpointHash, { root: page.cursor });
|
|
132
|
+
if (page.cursor)
|
|
133
|
+
cursors.set(checkpointHash, page.cursor);
|
|
134
|
+
if (stopPaging(options, out.length, targetCount, page.cursor, empty, options.maxEmptyPages ?? context.config.maxEmptyPages))
|
|
135
|
+
break;
|
|
136
|
+
cursor = page.cursor;
|
|
137
|
+
}
|
|
138
|
+
if (!limitReached)
|
|
139
|
+
context.storage.checkpoints.clear(checkpointHash);
|
|
140
|
+
});
|
|
141
|
+
if (outcome.failed.length > 0 && (context.config.strict || out.length === 0))
|
|
142
|
+
throw failureFor("Relationship collection", outcome.failed);
|
|
143
|
+
const follows = options.limit === undefined ? out : out.slice(0, options.limit);
|
|
144
|
+
await saveCollection(context, options.followType, follows, options, targets);
|
|
145
|
+
return follows;
|
|
146
|
+
}
|
|
147
|
+
async function saveCollection(context, name, rows, options, targets) {
|
|
148
|
+
if (!options.save)
|
|
149
|
+
return;
|
|
150
|
+
await saveRows(options.saveName ?? targetOutputName(name, targets), rows, {
|
|
151
|
+
directory: options.saveDir ?? context.config.saveDir,
|
|
152
|
+
format: options.saveFormat ?? context.config.saveFormat,
|
|
153
|
+
append: true,
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
async function resolveTarget(context, target, onRetry, maxAccountSwitches) {
|
|
157
|
+
if (target.userId && !target.username)
|
|
158
|
+
return { username: target.userId, userId: target.userId, raw: {} };
|
|
159
|
+
return context.pool.execute("user-lookup", ({ session }) => context.engine.resolveTarget(session, target), {
|
|
160
|
+
onRetry,
|
|
161
|
+
maxAccountSwitches,
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
function workerCount(context, tasks) {
|
|
165
|
+
return Math.max(1, Math.min(context.config.concurrency, context.pool.summary.eligible, tasks));
|
|
166
|
+
}
|
|
167
|
+
function failureFor(label, failed) {
|
|
168
|
+
const first = failed[0]?.error;
|
|
169
|
+
return first instanceof Error
|
|
170
|
+
? first
|
|
171
|
+
: new RunFailed(`${label} failed for ${failed.length} target(s): ${String(first)}`);
|
|
172
|
+
}
|
|
173
|
+
function stopPaging(options, total, profileTotal, cursor, empty, maxEmptyPages) {
|
|
174
|
+
return Boolean((options.limit !== undefined && total >= options.limit) ||
|
|
175
|
+
(options.perProfileLimit !== undefined && profileTotal >= options.perProfileLimit) ||
|
|
176
|
+
!cursor ||
|
|
177
|
+
empty >= maxEmptyPages);
|
|
178
|
+
}
|
|
179
|
+
function withinProfileLimit(limit, count) {
|
|
180
|
+
return limit === undefined || count < limit;
|
|
181
|
+
}
|
|
182
|
+
function targetKey(target, resolvedUserId) {
|
|
183
|
+
return target.username ?? target.userId ?? target.profileUrl ?? target.raw ?? resolvedUserId;
|
|
184
|
+
}
|
|
185
|
+
//# sourceMappingURL=collectors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collectors.js","sourceRoot":"","sources":["../../src/client/collectors.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAGpD,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAStD,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,OAA0B,EAC1B,OAA+B,EAC/B,OAAgD;IAEhD,MAAM,OAAO,GAA2B,EAAE,OAAO,EAAE,GAAG,OAAO,EAAE,CAAC;IAChE,MAAM,GAAG,GAAkB,EAAE,CAAC;IAC9B,MAAM,YAAY,GAAG,IAAI,GAAG,EAAuB,CAAC;IACpD,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC1C,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IACzC,IAAI,YAAY,GAAG,KAAK,CAAC;IACzB,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,MAAM,MAAM,GAAG,IAAI,eAAe,CAAc;QAC9C,WAAW,EAAE,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC;QACjD,WAAW,EAAE,CAAC;KACf,CAAC,CAAC;IACH,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;QACzD,MAAM,QAAQ,GAAG,MAAM,aAAa,CAClC,OAAO,EACP,MAAM,EACN,GAAG,EAAE;YACH,WAAW,IAAI,CAAC,CAAC;QACnB,CAAC,EACD,OAAO,CAAC,kBAAkB,CAC3B,CAAC;QACF,MAAM,cAAc,GAAG,SAAS,CAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;QACnF,MAAM,IAAI,GAAG,YAAY,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,IAAI,GAAG,EAAU,CAAC;QACnE,YAAY,CAAC,GAAG,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;QACvC,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC3F,IAAI,MAAM,GACR,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;YAC3B,OAAO,CAAC,cAAc,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;YAC5D,KAAK,EAAE,IAAI,CAAC;QACd,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,YAAY,GAAG,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QACnD,MAAM,QAAQ,GAAG,OAAO,CAAC,kBAAkB,IAAI,MAAM,CAAC,iBAAiB,CAAC;QACxE,OAAO,KAAK,GAAG,QAAQ,IAAI,CAAC,YAAY,EAAE,CAAC;YACzC,KAAK,IAAI,CAAC,CAAC;YACX,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,OAAO,CACrC,gBAAgB,EAChB,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,EACtF;gBACE,WAAW,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM;gBAC3C,OAAO,EAAE,GAAG,EAAE;oBACZ,WAAW,IAAI,CAAC,CAAC;gBACnB,CAAC;gBACD,kBAAkB,EAAE,OAAO,CAAC,kBAAkB;aAC/C,CACF,CAAC;YACF,MAAM,eAAe,GACnB,OAAO,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC;YAC7F,MAAM,gBAAgB,GACpB,OAAO,CAAC,eAAe,KAAK,SAAS;gBACnC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM;gBACpB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,eAAe,GAAG,YAAY,CAAC,CAAC;YAC1D,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,gBAAgB,CAAC,CAAC,CAAC;YACpF,IAAI,KAAK,GAAG,CAAC,CAAC;YACd,KAAK,MAAM,KAAK,IAAI,SAAS,EAAE,CAAC;gBAC9B,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC;oBAAE,SAAS;gBACtC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBACxB,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAChB,KAAK,IAAI,CAAC,CAAC;gBACX,YAAY,IAAI,CAAC,CAAC;gBAClB,MAAM,CAAC,GAAG,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC;gBACzC,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS,IAAI,GAAG,CAAC,MAAM,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;oBAC/D,YAAY,GAAG,IAAI,CAAC;oBACpB,MAAM;gBACR,CAAC;YACH,CAAC;YACD,KAAK,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACpC,IAAI,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM;gBAC/B,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;YAC1E,IAAI,IAAI,CAAC,MAAM;gBAAE,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YAC1D,IACE,UAAU,CACR,OAAO,EACP,GAAG,CAAC,MAAM,EACV,YAAY,EACZ,IAAI,CAAC,MAAM,EACX,KAAK,EACL,OAAO,CAAC,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC,aAAa,CACtD;gBAED,MAAM;YACR,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QACvB,CAAC;QACD,IAAI,CAAC,YAAY;YAAE,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;IACvE,CAAC,CAAC,CAAC;IACH,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,CAAC;QAC1E,MAAM,UAAU,CAAC,kBAAkB,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IACvD,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IAC/E,MAAM,cAAc,CAAC,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IAC1E,OAAO;QACL,MAAM;QACN,KAAK,EAAE;YACL,WAAW,EAAE,MAAM,CAAC,MAAM;YAC1B,UAAU,EAAE,OAAO,CAAC,MAAM;YAC1B,SAAS,EAAE,OAAO,CAAC,QAAQ,CAAC,MAAM;YAClC,WAAW,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM;YAClC,OAAO,EAAE,OAAO,CAAC,OAAO,GAAG,WAAW;SACvC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,OAA0B,EAC1B,OAA+B,EAC/B,OAAuB;IAEvB,MAAM,GAAG,GAAmB,EAAE,CAAC;IAC/B,MAAM,YAAY,GAAG,IAAI,GAAG,EAAuB,CAAC;IACpD,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC1C,IAAI,YAAY,GAAG,KAAK,CAAC;IACzB,MAAM,MAAM,GAAG,IAAI,eAAe,CAAc;QAC9C,WAAW,EAAE,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC;QACjD,WAAW,EAAE,CAAC;KACf,CAAC,CAAC;IACH,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;QACzD,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAC;QAC7F,MAAM,cAAc,GAAG,SAAS,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;QACrF,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC3F,IAAI,MAAM,GACR,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;YAC3B,OAAO,CAAC,cAAc,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;YAC5D,KAAK,EAAE,IAAI,CAAC;QACd,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,MAAM,IAAI,GAAG,YAAY,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,IAAI,GAAG,EAAU,CAAC;QACnE,YAAY,CAAC,GAAG,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;QACvC,IAAI,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC;QAC5B,MAAM,QAAQ,GAAG,OAAO,CAAC,kBAAkB,IAAI,MAAM,CAAC,iBAAiB,CAAC;QACxE,OAAO,KAAK,GAAG,QAAQ,IAAI,CAAC,YAAY,EAAE,CAAC;YACzC,KAAK,IAAI,CAAC,CAAC;YACX,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,OAAO,CACrC,OAAO,CAAC,UAAU,EAClB,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,UAAU,EAAE,MAAM,CAAC,EACjG,EAAE,kBAAkB,EAAE,OAAO,CAAC,kBAAkB,EAAE,CACnD,CAAC;YACF,IAAI,KAAK,GAAG,CAAC,CAAC;YACd,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;gBAC9B,MAAM,MAAM,GAAG,SAAS,CACtB,IAAI,EACJ,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,EACtC,OAAO,CAAC,UAAU,EAClB,OAAO,CAAC,OAAO,CAChB,CAAC;gBACF,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,QAAQ,CAAC;gBAC7C,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,kBAAkB,CAAC,OAAO,CAAC,eAAe,EAAE,WAAW,CAAC,EAAE,CAAC;oBACtF,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBACd,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;oBACjB,KAAK,IAAI,CAAC,CAAC;oBACX,WAAW,IAAI,CAAC,CAAC;oBACjB,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS,IAAI,GAAG,CAAC,MAAM,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;wBAC/D,YAAY,GAAG,IAAI,CAAC;wBACpB,MAAM;oBACR,CAAC;gBACH,CAAC;YACH,CAAC;YACD,KAAK,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACpC,IAAI,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM;gBAC/B,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;YAC1E,IAAI,IAAI,CAAC,MAAM;gBAAE,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YAC1D,IACE,UAAU,CACR,OAAO,EACP,GAAG,CAAC,MAAM,EACV,WAAW,EACX,IAAI,CAAC,MAAM,EACX,KAAK,EACL,OAAO,CAAC,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC,aAAa,CACtD;gBAED,MAAM;YACR,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QACvB,CAAC;QACD,IAAI,CAAC,YAAY;YAAE,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;IACvE,CAAC,CAAC,CAAC;IACH,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,CAAC;QAC1E,MAAM,UAAU,CAAC,yBAAyB,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAC9D,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IAChF,MAAM,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IAC7E,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,KAAK,UAAU,cAAc,CAC3B,OAA0B,EAC1B,IAAY,EACZ,IAAwB,EACxB,OAAoB,EACpB,OAA+B;IAE/B,IAAI,CAAC,OAAO,CAAC,IAAI;QAAE,OAAO;IAC1B,MAAM,QAAQ,CAAC,OAAO,CAAC,QAAQ,IAAI,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE;QACxE,SAAS,EAAE,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC,OAAO;QACpD,MAAM,EAAE,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC,UAAU;QACvD,MAAM,EAAE,IAAI;KACb,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,aAAa,CAC1B,OAA0B,EAC1B,MAAmB,EACnB,OAAoB,EACpB,kBAA2B;IAE3B,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ;QAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC;IAC1G,OAAO,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE;QACzG,OAAO;QACP,kBAAkB;KACnB,CAAC,CAAC;AACL,CAAC;AAED,SAAS,WAAW,CAAC,OAA0B,EAAE,KAAa;IAC5D,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;AACjG,CAAC;AAED,SAAS,UAAU,CAAC,KAAa,EAAE,MAA8C;IAC/E,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC;IAC/B,OAAO,KAAK,YAAY,KAAK;QAC3B,CAAC,CAAC,KAAK;QACP,CAAC,CAAC,IAAI,SAAS,CAAC,GAAG,KAAK,eAAe,MAAM,CAAC,MAAM,eAAe,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AACxF,CAAC;AAED,SAAS,UAAU,CACjB,OAAuE,EACvE,KAAa,EACb,YAAoB,EACpB,MAA0B,EAC1B,KAAa,EACb,aAAqB;IAErB,OAAO,OAAO,CACZ,CAAC,OAAO,CAAC,KAAK,KAAK,SAAS,IAAI,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC;QACvD,CAAC,OAAO,CAAC,eAAe,KAAK,SAAS,IAAI,YAAY,IAAI,OAAO,CAAC,eAAe,CAAC;QAClF,CAAC,MAAM;QACP,KAAK,IAAI,aAAa,CACvB,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAyB,EAAE,KAAa;IAClE,OAAO,KAAK,KAAK,SAAS,IAAI,KAAK,GAAG,KAAK,CAAC;AAC9C,CAAC;AAED,SAAS,SAAS,CAAC,MAAmB,EAAE,cAAsB;IAC5D,OAAO,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,GAAG,IAAI,cAAc,CAAC;AAC/F,CAAC"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import type { AccountInput, ProxySettings } from "../domain/accounts.js";
|
|
2
|
+
import type { StorageBundle } from "../storage/index.js";
|
|
3
|
+
export interface AccountListOptions {
|
|
4
|
+
readonly eligibleOnly?: boolean;
|
|
5
|
+
readonly unusableOnly?: boolean;
|
|
6
|
+
readonly includeCookies?: boolean;
|
|
7
|
+
readonly revealSecrets?: boolean;
|
|
8
|
+
}
|
|
9
|
+
export interface AccountImportOptions {
|
|
10
|
+
readonly accountsFile?: string;
|
|
11
|
+
readonly cookiesFile?: string;
|
|
12
|
+
readonly envFile?: string;
|
|
13
|
+
readonly cookies?: unknown;
|
|
14
|
+
readonly accounts?: readonly AccountInput[];
|
|
15
|
+
readonly proxy?: string | ProxySettings;
|
|
16
|
+
}
|
|
17
|
+
export declare class XTrawlDatabase {
|
|
18
|
+
private readonly storage;
|
|
19
|
+
constructor(storage: StorageBundle);
|
|
20
|
+
accountsSummary(): import("../domain/accounts.js").AccountSummary;
|
|
21
|
+
listAccounts(options?: AccountListOptions): readonly Record<string, unknown>[];
|
|
22
|
+
getAccount(username: string, options?: Pick<AccountListOptions, "includeCookies" | "revealSecrets">): Record<string, unknown> | undefined;
|
|
23
|
+
deleteAccount(username: string): boolean;
|
|
24
|
+
setAccountProxy(username: string, proxy?: string | ProxySettings): boolean;
|
|
25
|
+
markAccountUnusable(username: string, reason?: string): boolean;
|
|
26
|
+
repairAccount(username: string, forceRefresh?: boolean): Promise<boolean>;
|
|
27
|
+
resetAccountCooldowns(usernames?: readonly string[], includeUnusable?: boolean): number;
|
|
28
|
+
clearLeases(expiredOnly?: boolean): number;
|
|
29
|
+
resetDailyCounters(usernames?: readonly string[]): number;
|
|
30
|
+
importAccounts(options: AccountImportOptions): {
|
|
31
|
+
readonly processed: number;
|
|
32
|
+
readonly eligible: number;
|
|
33
|
+
};
|
|
34
|
+
collapseDuplicateAccounts(dryRun?: boolean): {
|
|
35
|
+
removed: number;
|
|
36
|
+
merged: number;
|
|
37
|
+
dryRun: false;
|
|
38
|
+
wouldRemove?: undefined;
|
|
39
|
+
} | {
|
|
40
|
+
dryRun: true;
|
|
41
|
+
removed: number;
|
|
42
|
+
merged: number;
|
|
43
|
+
wouldRemove: number;
|
|
44
|
+
};
|
|
45
|
+
getCheckpoint(queryHash: string): Readonly<Record<string, string>> | undefined;
|
|
46
|
+
clearCheckpoint(queryHash: string): boolean;
|
|
47
|
+
clearAllCheckpoints(): number;
|
|
48
|
+
listRuns(limit?: number): import("../storage/run-repository.js").RunRecord[];
|
|
49
|
+
lastRun(): import("../storage/run-repository.js").RunRecord | undefined;
|
|
50
|
+
runsSummary(limit?: number): {
|
|
51
|
+
readonly totalRuns: number;
|
|
52
|
+
readonly byStatus: Readonly<Record<string, number>>;
|
|
53
|
+
readonly lastRun?: import("../storage/run-repository.js").RunRecord;
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=database.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../src/client/database.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAiB,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACxF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAGzD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC;IAChC,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC;IAChC,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC;IAClC,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC;CAClC;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,YAAY,EAAE,CAAC;IAC5C,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,aAAa,CAAC;CACzC;AAED,qBAAa,cAAc;IACN,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,aAAa;IAEnD,eAAe;IAIf,YAAY,CAAC,OAAO,GAAE,kBAAuB,GAAG,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE;IAQlF,UAAU,CACf,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,IAAI,CAAC,kBAAkB,EAAE,gBAAgB,GAAG,eAAe,CAAM,GACzE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS;IAK/B,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAIxC,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,aAAa,GAAG,OAAO;IAI1E,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,SAAW,GAAG,OAAO;IAI3D,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,UAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;IAmB7E,qBAAqB,CAAC,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,EAAE,eAAe,UAAQ,GAAG,MAAM;IAIrF,WAAW,CAAC,WAAW,UAAO,GAAG,MAAM;IAIvC,kBAAkB,CAAC,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM;IAIzD,cAAc,CAAC,OAAO,EAAE,oBAAoB,GAAG;QACpD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;QAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;KAC3B;IAaM,yBAAyB,CAAC,MAAM,UAAO;;;;;;;;;;;IASvC,aAAa,CAAC,SAAS,EAAE,MAAM;IAI/B,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAI3C,mBAAmB,IAAI,MAAM;IAI7B,QAAQ,CAAC,KAAK,SAAK;IAInB,OAAO;IAIP,WAAW,CAAC,KAAK,SAAM;;;;;CAG/B"}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
import { bootstrapCookiesFromAuthToken } from "../auth/bootstrap.js";
|
|
2
|
+
import { loadAccountsFileSync, loadInlineAccounts } from "../auth/loaders.js";
|
|
3
|
+
import { accountInputToRecord } from "../auth/records.js";
|
|
4
|
+
import { loadAccountFromEnvironmentSync } from "../config/environment.js";
|
|
5
|
+
import { tokenFingerprint } from "../utils/fingerprint.js";
|
|
6
|
+
export class XTrawlDatabase {
|
|
7
|
+
storage;
|
|
8
|
+
constructor(storage) {
|
|
9
|
+
this.storage = storage;
|
|
10
|
+
}
|
|
11
|
+
accountsSummary() {
|
|
12
|
+
return this.storage.accounts.summary();
|
|
13
|
+
}
|
|
14
|
+
listAccounts(options = {}) {
|
|
15
|
+
return this.storage.accounts
|
|
16
|
+
.list()
|
|
17
|
+
.filter((account) => !options.eligibleOnly || this.storage.accounts.eligible(account))
|
|
18
|
+
.filter((account) => !options.unusableOnly || account.status === 0)
|
|
19
|
+
.map((account) => redactAccount(account, options));
|
|
20
|
+
}
|
|
21
|
+
getAccount(username, options = {}) {
|
|
22
|
+
const account = this.storage.accounts.findByUsername(username);
|
|
23
|
+
return account ? redactAccount(account, options) : undefined;
|
|
24
|
+
}
|
|
25
|
+
deleteAccount(username) {
|
|
26
|
+
return this.storage.accounts.delete(username);
|
|
27
|
+
}
|
|
28
|
+
setAccountProxy(username, proxy) {
|
|
29
|
+
return this.storage.accounts.setProxy(username, proxy);
|
|
30
|
+
}
|
|
31
|
+
markAccountUnusable(username, reason = "manual") {
|
|
32
|
+
return this.storage.accounts.markUnusable(username, 401, `unusable:${reason}`);
|
|
33
|
+
}
|
|
34
|
+
async repairAccount(username, forceRefresh = false) {
|
|
35
|
+
const account = this.storage.accounts.findByUsername(username);
|
|
36
|
+
if (!account?.authToken)
|
|
37
|
+
return false;
|
|
38
|
+
if (!forceRefresh && account.csrfToken) {
|
|
39
|
+
this.storage.accounts.resetCooldowns([username], true);
|
|
40
|
+
return true;
|
|
41
|
+
}
|
|
42
|
+
const cookies = await bootstrapCookiesFromAuthToken(account.authToken, undefined, account.proxy);
|
|
43
|
+
if (!cookies?.ct0)
|
|
44
|
+
return false;
|
|
45
|
+
this.storage.accounts.upsert({
|
|
46
|
+
...account,
|
|
47
|
+
status: 1,
|
|
48
|
+
availableUntil: 0,
|
|
49
|
+
csrfToken: cookies.ct0,
|
|
50
|
+
cookies: { ...account.cookies, ...cookies },
|
|
51
|
+
});
|
|
52
|
+
return true;
|
|
53
|
+
}
|
|
54
|
+
resetAccountCooldowns(usernames, includeUnusable = false) {
|
|
55
|
+
return this.storage.accounts.resetCooldowns(usernames, includeUnusable);
|
|
56
|
+
}
|
|
57
|
+
clearLeases(expiredOnly = true) {
|
|
58
|
+
return this.storage.accounts.clearLeases(expiredOnly);
|
|
59
|
+
}
|
|
60
|
+
resetDailyCounters(usernames) {
|
|
61
|
+
return this.storage.accounts.resetDailyUsage(usernames);
|
|
62
|
+
}
|
|
63
|
+
importAccounts(options) {
|
|
64
|
+
const accounts = [];
|
|
65
|
+
if (options.accounts)
|
|
66
|
+
accounts.push(...options.accounts.map(accountInputToRecord));
|
|
67
|
+
if (options.cookies !== undefined)
|
|
68
|
+
accounts.push(...loadInlineAccounts(options.cookies));
|
|
69
|
+
if (options.accountsFile)
|
|
70
|
+
accounts.push(...loadAccountsFileSync(options.accountsFile));
|
|
71
|
+
if (options.cookiesFile)
|
|
72
|
+
accounts.push(...loadAccountsFileSync(options.cookiesFile));
|
|
73
|
+
if (options.envFile)
|
|
74
|
+
accounts.push(...loadAccountFromEnvironmentSync(options.envFile).map(accountInputToRecord));
|
|
75
|
+
for (const account of accounts)
|
|
76
|
+
this.storage.accounts.upsert({ ...account, proxy: account.proxy ?? options.proxy });
|
|
77
|
+
return { processed: accounts.length, eligible: this.storage.accounts.summary().eligible };
|
|
78
|
+
}
|
|
79
|
+
collapseDuplicateAccounts(dryRun = true) {
|
|
80
|
+
if (!dryRun)
|
|
81
|
+
return { dryRun, ...this.storage.accounts.collapseDuplicatesByAuthToken() };
|
|
82
|
+
const tokens = this.storage.accounts
|
|
83
|
+
.list()
|
|
84
|
+
.flatMap((account) => (account.authToken ? [account.authToken] : []));
|
|
85
|
+
const duplicates = tokens.length - new Set(tokens).size;
|
|
86
|
+
return { dryRun, removed: 0, merged: 0, wouldRemove: duplicates };
|
|
87
|
+
}
|
|
88
|
+
getCheckpoint(queryHash) {
|
|
89
|
+
return this.storage.checkpoints.get(queryHash);
|
|
90
|
+
}
|
|
91
|
+
clearCheckpoint(queryHash) {
|
|
92
|
+
return this.storage.checkpoints.clear(queryHash);
|
|
93
|
+
}
|
|
94
|
+
clearAllCheckpoints() {
|
|
95
|
+
return this.storage.checkpoints.clearAll();
|
|
96
|
+
}
|
|
97
|
+
listRuns(limit = 50) {
|
|
98
|
+
return this.storage.runs.list(limit);
|
|
99
|
+
}
|
|
100
|
+
lastRun() {
|
|
101
|
+
return this.storage.runs.last();
|
|
102
|
+
}
|
|
103
|
+
runsSummary(limit = 500) {
|
|
104
|
+
return this.storage.runs.summary(limit);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
function redactAccount(account, options) {
|
|
108
|
+
const safe = {
|
|
109
|
+
...account,
|
|
110
|
+
authToken: account.authToken ? tokenFingerprint(account.authToken) : undefined,
|
|
111
|
+
csrfToken: account.csrfToken ? "[redacted]" : undefined,
|
|
112
|
+
bearerToken: account.bearerToken ? "[redacted]" : undefined,
|
|
113
|
+
password: account.password ? "[redacted]" : undefined,
|
|
114
|
+
email: account.email ? "[redacted]" : undefined,
|
|
115
|
+
emailPassword: account.emailPassword ? "[redacted]" : undefined,
|
|
116
|
+
twoFactorSecret: account.twoFactorSecret ? "[redacted]" : undefined,
|
|
117
|
+
proxy: account.proxy ? redactProxy(account.proxy) : undefined,
|
|
118
|
+
cookies: options.includeCookies ? redactCookies(account.cookies) : undefined,
|
|
119
|
+
};
|
|
120
|
+
if (options.revealSecrets)
|
|
121
|
+
return { ...account, cookies: options.includeCookies ? account.cookies : undefined };
|
|
122
|
+
return safe;
|
|
123
|
+
}
|
|
124
|
+
function redactCookies(cookies) {
|
|
125
|
+
return Object.fromEntries(Object.keys(cookies).map((name) => [name, "[redacted]"]));
|
|
126
|
+
}
|
|
127
|
+
function redactProxy(proxy) {
|
|
128
|
+
if (typeof proxy !== "string")
|
|
129
|
+
return {
|
|
130
|
+
...proxy,
|
|
131
|
+
...(proxy.username ? { username: "[redacted]" } : {}),
|
|
132
|
+
...(proxy.password ? { password: "[redacted]" } : {}),
|
|
133
|
+
};
|
|
134
|
+
try {
|
|
135
|
+
const value = new URL(proxy.includes("://") ? proxy : `http://${proxy}`);
|
|
136
|
+
if (value.username)
|
|
137
|
+
value.username = "[redacted]";
|
|
138
|
+
if (value.password)
|
|
139
|
+
value.password = "[redacted]";
|
|
140
|
+
return value.toString();
|
|
141
|
+
}
|
|
142
|
+
catch {
|
|
143
|
+
return "[redacted]";
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
//# sourceMappingURL=database.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"database.js","sourceRoot":"","sources":["../../src/client/database.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { ProfileRecord } from "../domain/records.js";
|
|
2
|
+
import type { TargetInput, UserInfoRequest } from "../domain/requests.js";
|
|
3
|
+
import type { CollectionContext } from "./collectors.js";
|
|
4
|
+
export declare function collectProfiles(context: CollectionContext, targets: readonly TargetInput[], options: UserInfoRequest): Promise<readonly ProfileRecord[]>;
|
|
5
|
+
//# sourceMappingURL=profiles.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profiles.d.ts","sourceRoot":"","sources":["../../src/client/profiles.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAO1E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEzD,wBAAsB,eAAe,CACnC,OAAO,EAAE,iBAAiB,EAC1B,OAAO,EAAE,SAAS,WAAW,EAAE,EAC/B,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,SAAS,aAAa,EAAE,CAAC,CAgCnC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { RunFailed } from "../domain/errors.js";
|
|
2
|
+
import { mapProfile } from "../engine/extractors.js";
|
|
3
|
+
import { saveRows } from "../output/writer.js";
|
|
4
|
+
import { targetOutputName } from "../output/names.js";
|
|
5
|
+
import { targetUsername } from "../query/builder.js";
|
|
6
|
+
import { ExecutionRunner } from "../runner/runner.js";
|
|
7
|
+
export async function collectProfiles(context, targets, options) {
|
|
8
|
+
const records = new Map();
|
|
9
|
+
const tasks = targets.flatMap((target, index) => (targetUsername(target) ? [{ index, target }] : []));
|
|
10
|
+
const runner = new ExecutionRunner({
|
|
11
|
+
concurrency: Math.max(1, Math.min(context.config.concurrency, context.pool.summary.eligible, tasks.length)),
|
|
12
|
+
maxAttempts: 1,
|
|
13
|
+
});
|
|
14
|
+
const outcome = await runner.run(tasks, async ({ index, target }) => {
|
|
15
|
+
const username = targetUsername(target);
|
|
16
|
+
if (!username)
|
|
17
|
+
return;
|
|
18
|
+
const user = await context.pool.execute("user-info", ({ session }) => context.engine.lookupUser(session, username));
|
|
19
|
+
records.set(index, mapProfile(user, target, username));
|
|
20
|
+
});
|
|
21
|
+
if (outcome.failed.length > 0 && (context.config.strict || records.size === 0)) {
|
|
22
|
+
const first = outcome.failed[0]?.error;
|
|
23
|
+
throw first instanceof RunFailed
|
|
24
|
+
? first
|
|
25
|
+
: new RunFailed(`Profile lookup failed for ${outcome.failed.length} target(s): ${String(first)}`);
|
|
26
|
+
}
|
|
27
|
+
const result = [...records.entries()].sort(([left], [right]) => left - right).map(([, value]) => value);
|
|
28
|
+
if (options.save)
|
|
29
|
+
await saveRows(options.saveName ?? targetOutputName("user_info", targets), result, {
|
|
30
|
+
directory: options.saveDir ?? context.config.saveDir,
|
|
31
|
+
format: options.saveFormat ?? context.config.saveFormat,
|
|
32
|
+
append: true,
|
|
33
|
+
});
|
|
34
|
+
return result;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=profiles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profiles.js","sourceRoot":"","sources":["../../src/client/profiles.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { ClientConfig } from "../config/types.js";
|
|
2
|
+
import type { SearchResult } from "../domain/records.js";
|
|
3
|
+
import type { SearchRequest } from "../domain/requests.js";
|
|
4
|
+
import type { ApiEngine } from "../engine/api-engine.js";
|
|
5
|
+
import type { AccountPool } from "../pool/account-pool.js";
|
|
6
|
+
import type { StorageBundle } from "../storage/index.js";
|
|
7
|
+
export interface SearchContext {
|
|
8
|
+
readonly config: ClientConfig;
|
|
9
|
+
readonly pool: AccountPool;
|
|
10
|
+
readonly engine: ApiEngine;
|
|
11
|
+
readonly storage: StorageBundle;
|
|
12
|
+
}
|
|
13
|
+
interface SearchTask {
|
|
14
|
+
readonly id: string;
|
|
15
|
+
readonly request: SearchRequest;
|
|
16
|
+
}
|
|
17
|
+
export declare function collectSearch(context: SearchContext, query: string, options: SearchRequest): Promise<SearchResult>;
|
|
18
|
+
export declare function withDefaultBounds(request: SearchRequest, now?: Date): SearchRequest;
|
|
19
|
+
export declare function splitSearchTasks(request: SearchRequest, requestedSplits: number, minIntervalMs: number): readonly SearchTask[];
|
|
20
|
+
export {};
|
|
21
|
+
//# sourceMappingURL=search.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/client/search.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD,OAAO,KAAK,EAAE,YAAY,EAAe,MAAM,sBAAsB,CAAC;AACtE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAG3D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAIzD,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC;CACjC;AAED,UAAU,UAAU;IAClB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC;CACjC;AAED,wBAAsB,aAAa,CACjC,OAAO,EAAE,aAAa,EACtB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,YAAY,CAAC,CAiGvB;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,aAAa,EAAE,GAAG,OAAa,GAAG,aAAa,CAIzF;AAED,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,aAAa,EACtB,eAAe,EAAE,MAAM,EACvB,aAAa,EAAE,MAAM,GACpB,SAAS,UAAU,EAAE,CAavB"}
|