@leemour/cli-messaging 0.161.0 → 0.163.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/README.md +19 -0
- package/dist/attachments/directory.d.ts +3 -0
- package/dist/attachments/directory.d.ts.map +1 -0
- package/dist/attachments/directory.js +74 -0
- package/dist/attachments/directory.js.map +1 -0
- package/dist/cli/command-contract.d.ts.map +1 -1
- package/dist/cli/command-contract.js +1 -1
- package/dist/cli/command-contract.js.map +1 -1
- package/dist/cli/index.d.ts +2 -2
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/messenger/archive-commands.d.ts.map +1 -1
- package/dist/cli/messenger/archive-commands.js +2 -0
- package/dist/cli/messenger/archive-commands.js.map +1 -1
- package/dist/cli/messenger/attachments-command.d.ts.map +1 -1
- package/dist/cli/messenger/attachments-command.js +8 -2
- package/dist/cli/messenger/attachments-command.js.map +1 -1
- package/dist/cli/messenger/backfill-command.d.ts.map +1 -1
- package/dist/cli/messenger/backfill-command.js +31 -3
- package/dist/cli/messenger/backfill-command.js.map +1 -1
- package/dist/cli/messenger/backfill-jobs.d.ts +1 -39
- package/dist/cli/messenger/backfill-jobs.d.ts.map +1 -1
- package/dist/cli/messenger/backfill-jobs.js +1 -61
- package/dist/cli/messenger/backfill-jobs.js.map +1 -1
- package/dist/cli/messenger/chats-command.d.ts.map +1 -1
- package/dist/cli/messenger/chats-command.js +12 -0
- package/dist/cli/messenger/chats-command.js.map +1 -1
- package/dist/cli/messenger/context.d.ts +10 -0
- package/dist/cli/messenger/context.d.ts.map +1 -1
- package/dist/cli/messenger/context.js +5 -0
- package/dist/cli/messenger/context.js.map +1 -1
- package/dist/cli/messenger/download-command.d.ts +1 -31
- package/dist/cli/messenger/download-command.d.ts.map +1 -1
- package/dist/cli/messenger/download-command.js +45 -119
- package/dist/cli/messenger/download-command.js.map +1 -1
- package/dist/cli/messenger/gaps-command.d.ts +4 -0
- package/dist/cli/messenger/gaps-command.d.ts.map +1 -0
- package/dist/cli/messenger/gaps-command.js +147 -0
- package/dist/cli/messenger/gaps-command.js.map +1 -0
- package/dist/cli/messenger/messages-forward-command.d.ts.map +1 -1
- package/dist/cli/messenger/messages-forward-command.js +5 -1
- package/dist/cli/messenger/messages-forward-command.js.map +1 -1
- package/dist/cli/messenger/messages-search-command.d.ts.map +1 -1
- package/dist/cli/messenger/messages-search-command.js +7 -1
- package/dist/cli/messenger/messages-search-command.js.map +1 -1
- package/dist/cli/messenger/messages-send-command.d.ts.map +1 -1
- package/dist/cli/messenger/messages-send-command.js +9 -1
- package/dist/cli/messenger/messages-send-command.js.map +1 -1
- package/dist/cli/messenger/messages-stats-command.d.ts.map +1 -1
- package/dist/cli/messenger/messages-stats-command.js +4 -1
- package/dist/cli/messenger/messages-stats-command.js.map +1 -1
- package/dist/cli/messenger/official-stats-command.d.ts +4 -0
- package/dist/cli/messenger/official-stats-command.d.ts.map +1 -0
- package/dist/cli/messenger/official-stats-command.js +44 -0
- package/dist/cli/messenger/official-stats-command.js.map +1 -0
- package/dist/cli/messenger/polls-command.d.ts.map +1 -1
- package/dist/cli/messenger/polls-command.js +5 -1
- package/dist/cli/messenger/polls-command.js.map +1 -1
- package/dist/cli/messenger/port.d.ts +23 -3
- package/dist/cli/messenger/port.d.ts.map +1 -1
- package/dist/cli/messenger/port.js.map +1 -1
- package/dist/cli/messenger/report.d.ts +1 -1
- package/dist/cli/messenger/report.d.ts.map +1 -1
- package/dist/cli/messenger/report.js +1 -0
- package/dist/cli/messenger/report.js.map +1 -1
- package/dist/cli/messenger/searches-command.d.ts.map +1 -1
- package/dist/cli/messenger/searches-command.js +1 -0
- package/dist/cli/messenger/searches-command.js.map +1 -1
- package/dist/cli/messenger/stats-command.d.ts.map +1 -1
- package/dist/cli/messenger/stats-command.js +5 -1
- package/dist/cli/messenger/stats-command.js.map +1 -1
- package/dist/cli/program.js +2 -2
- package/dist/cli/program.js.map +1 -1
- package/dist/cli/settings.d.ts +3 -0
- package/dist/cli/settings.d.ts.map +1 -1
- package/dist/cli/settings.js +4 -0
- package/dist/cli/settings.js.map +1 -1
- package/dist/conversations/chunks.d.ts +2 -2
- package/dist/conversations/chunks.d.ts.map +1 -1
- package/dist/conversations/chunks.js +5 -3
- package/dist/conversations/chunks.js.map +1 -1
- package/dist/conversations/link.d.ts +2 -1
- package/dist/conversations/link.d.ts.map +1 -1
- package/dist/conversations/link.js +2 -1
- package/dist/conversations/link.js.map +1 -1
- package/dist/domain/models.d.ts +92 -0
- package/dist/domain/models.d.ts.map +1 -1
- package/dist/mcp/server.d.ts +3 -1
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +1 -0
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/tool.d.ts +2 -1
- package/dist/mcp/tool.d.ts.map +1 -1
- package/dist/mcp/tool.js.map +1 -1
- package/dist/mcp/tools/attachments.d.ts.map +1 -1
- package/dist/mcp/tools/attachments.js +50 -0
- package/dist/mcp/tools/attachments.js.map +1 -1
- package/dist/mcp/tools/chats.d.ts.map +1 -1
- package/dist/mcp/tools/chats.js +9 -0
- package/dist/mcp/tools/chats.js.map +1 -1
- package/dist/mcp/tools/messages-actions.d.ts.map +1 -1
- package/dist/mcp/tools/messages-actions.js +2 -0
- package/dist/mcp/tools/messages-actions.js.map +1 -1
- package/dist/mcp/tools/messages-send.d.ts.map +1 -1
- package/dist/mcp/tools/messages-send.js +6 -0
- package/dist/mcp/tools/messages-send.js.map +1 -1
- package/dist/mcp/tools/polls.d.ts.map +1 -1
- package/dist/mcp/tools/polls.js +2 -0
- package/dist/mcp/tools/polls.js.map +1 -1
- package/dist/mcp/tools/search.d.ts +5 -2
- package/dist/mcp/tools/search.d.ts.map +1 -1
- package/dist/mcp/tools/search.js +9 -3
- package/dist/mcp/tools/search.js.map +1 -1
- package/dist/mcp/tools/store.d.ts +4 -0
- package/dist/mcp/tools/store.d.ts.map +1 -0
- package/dist/mcp/tools/store.js +152 -0
- package/dist/mcp/tools/store.js.map +1 -0
- package/dist/mcp/tools.d.ts.map +1 -1
- package/dist/mcp/tools.js +2 -0
- package/dist/mcp/tools.js.map +1 -1
- package/dist/search/lucene/parser.d.ts +3 -1
- package/dist/search/lucene/parser.d.ts.map +1 -1
- package/dist/search/lucene/parser.js +2 -2
- package/dist/search/lucene/parser.js.map +1 -1
- package/dist/search/lucene/registry.d.ts +12 -3
- package/dist/search/lucene/registry.d.ts.map +1 -1
- package/dist/search/lucene/registry.js +18 -4
- package/dist/search/lucene/registry.js.map +1 -1
- package/dist/search/lucene/resolved.d.ts +7 -0
- package/dist/search/lucene/resolved.d.ts.map +1 -1
- package/dist/search/lucene/resolved.js +7 -1
- package/dist/search/lucene/resolved.js.map +1 -1
- package/dist/search/stem.d.ts +6 -0
- package/dist/search/stem.d.ts.map +1 -1
- package/dist/search/stem.js +7 -0
- package/dist/search/stem.js.map +1 -1
- package/dist/sends/guard.d.ts +1 -0
- package/dist/sends/guard.d.ts.map +1 -1
- package/dist/sends/guard.js +5 -1
- package/dist/sends/guard.js.map +1 -1
- package/dist/sends/journal.d.ts +2 -0
- package/dist/sends/journal.d.ts.map +1 -1
- package/dist/sends/journal.js.map +1 -1
- package/dist/sends/permissions.d.ts +1 -1
- package/dist/sends/permissions.d.ts.map +1 -1
- package/dist/sends/permissions.js +6 -0
- package/dist/sends/permissions.js.map +1 -1
- package/dist/sends/polls.d.ts +2 -1
- package/dist/sends/polls.d.ts.map +1 -1
- package/dist/sends/polls.js +6 -1
- package/dist/sends/polls.js.map +1 -1
- package/dist/sends/send-as.d.ts +10 -0
- package/dist/sends/send-as.d.ts.map +1 -0
- package/dist/sends/send-as.js +24 -0
- package/dist/sends/send-as.js.map +1 -0
- package/dist/services/archive-gaps.d.ts +64 -0
- package/dist/services/archive-gaps.d.ts.map +1 -0
- package/dist/services/archive-gaps.js +146 -0
- package/dist/services/archive-gaps.js.map +1 -0
- package/dist/services/archive.d.ts +12 -1
- package/dist/services/archive.d.ts.map +1 -1
- package/dist/services/archive.js +60 -14
- package/dist/services/archive.js.map +1 -1
- package/dist/services/attachments.d.ts +7 -1
- package/dist/services/attachments.d.ts.map +1 -1
- package/dist/services/attachments.js +47 -14
- package/dist/services/attachments.js.map +1 -1
- package/dist/services/backfill-jobs.d.ts +51 -0
- package/dist/services/backfill-jobs.d.ts.map +1 -0
- package/dist/services/backfill-jobs.js +90 -0
- package/dist/services/backfill-jobs.js.map +1 -0
- package/dist/services/chats.d.ts +3 -1
- package/dist/services/chats.d.ts.map +1 -1
- package/dist/services/chats.js +19 -5
- package/dist/services/chats.js.map +1 -1
- package/dist/services/conversations.d.ts +4 -1
- package/dist/services/conversations.d.ts.map +1 -1
- package/dist/services/conversations.js +9 -2
- package/dist/services/conversations.js.map +1 -1
- package/dist/services/deps.d.ts +1 -0
- package/dist/services/deps.d.ts.map +1 -1
- package/dist/services/deps.js.map +1 -1
- package/dist/services/embeddings.d.ts +2 -0
- package/dist/services/embeddings.d.ts.map +1 -1
- package/dist/services/embeddings.js +9 -4
- package/dist/services/embeddings.js.map +1 -1
- package/dist/services/file-download.d.ts +37 -0
- package/dist/services/file-download.d.ts.map +1 -0
- package/dist/services/file-download.js +111 -0
- package/dist/services/file-download.js.map +1 -0
- package/dist/services/index.d.ts +4 -0
- package/dist/services/index.d.ts.map +1 -1
- package/dist/services/index.js +4 -0
- package/dist/services/index.js.map +1 -1
- package/dist/services/messages-search.d.ts +13 -0
- package/dist/services/messages-search.d.ts.map +1 -1
- package/dist/services/messages-search.js +61 -6
- package/dist/services/messages-search.js.map +1 -1
- package/dist/services/messages.d.ts +10 -0
- package/dist/services/messages.d.ts.map +1 -1
- package/dist/services/messages.js +28 -3
- package/dist/services/messages.js.map +1 -1
- package/dist/services/search-catchup.d.ts +22 -0
- package/dist/services/search-catchup.d.ts.map +1 -0
- package/dist/services/search-catchup.js +55 -0
- package/dist/services/search-catchup.js.map +1 -0
- package/dist/services/searches.d.ts +2 -0
- package/dist/services/searches.d.ts.map +1 -1
- package/dist/services/searches.js +1 -1
- package/dist/services/searches.js.map +1 -1
- package/dist/store/sqlite/attachment-texts.d.ts +3 -1
- package/dist/store/sqlite/attachment-texts.d.ts.map +1 -1
- package/dist/store/sqlite/attachment-texts.js +5 -4
- package/dist/store/sqlite/attachment-texts.js.map +1 -1
- package/dist/store/sqlite/conversations.d.ts +1 -1
- package/dist/store/sqlite/conversations.d.ts.map +1 -1
- package/dist/store/sqlite/conversations.js +10 -1
- package/dist/store/sqlite/conversations.js.map +1 -1
- package/dist/store/sqlite/lucene.d.ts.map +1 -1
- package/dist/store/sqlite/lucene.js +137 -21
- package/dist/store/sqlite/lucene.js.map +1 -1
- package/dist/store/sqlite/messages.d.ts.map +1 -1
- package/dist/store/sqlite/messages.js +1 -0
- package/dist/store/sqlite/messages.js.map +1 -1
- package/dist/store/sqlite/vectors.d.ts +2 -1
- package/dist/store/sqlite/vectors.d.ts.map +1 -1
- package/dist/store/sqlite/vectors.js +35 -16
- package/dist/store/sqlite/vectors.js.map +1 -1
- package/dist/store/sqlite/words.d.ts +2 -0
- package/dist/store/sqlite/words.d.ts.map +1 -1
- package/dist/store/sqlite/words.js.map +1 -1
- package/dist/store/store.d.ts +2 -0
- package/dist/store/store.d.ts.map +1 -1
- package/dist/store/store.js.map +1 -1
- package/docs/search/recipes.json +13 -1
- package/package.json +1 -1
- package/parity.json +326 -217
|
@@ -1,40 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
export interface Job {
|
|
3
|
-
id: string;
|
|
4
|
-
chat: string;
|
|
5
|
-
profile: string;
|
|
6
|
-
pid: number;
|
|
7
|
-
startedAt: string;
|
|
8
|
-
/** Absent on a job started before `--limit`. */
|
|
9
|
-
limit?: number;
|
|
10
|
-
pageSize?: number;
|
|
11
|
-
last?: number;
|
|
12
|
-
log: string;
|
|
13
|
-
progress?: {
|
|
14
|
-
fetched: number;
|
|
15
|
-
chatId: string;
|
|
16
|
-
oldest: number;
|
|
17
|
-
};
|
|
18
|
-
finishedAt?: string;
|
|
19
|
-
result?: Record<string, unknown>;
|
|
20
|
-
error?: {
|
|
21
|
-
code: string;
|
|
22
|
-
message: string;
|
|
23
|
-
};
|
|
24
|
-
cancelRequestedAt?: string;
|
|
25
|
-
}
|
|
26
|
-
export type JobState = "running" | "done" | "failed" | "cancelled" | "died";
|
|
27
|
-
/** Starts `<cli> <argv>` apart from this process, writing to `log`, and answers its PID. Tests hand one in. */
|
|
28
|
-
export type SpawnJob = (argv: string[], env: NodeJS.ProcessEnv, log: string) => number;
|
|
29
|
-
export declare const spawnDetached: SpawnJob;
|
|
30
|
-
export declare const jobsDir: (app: AppIdentity, env: NodeJS.ProcessEnv) => string;
|
|
31
|
-
export declare const saveJob: (dir: string, job: Job) => void;
|
|
32
|
-
export declare const readJob: (dir: string, id: string) => Job | undefined;
|
|
33
|
-
export declare const updateJob: (dir: string, id: string, change: Partial<Job>) => void;
|
|
34
|
-
/** Newest first. */
|
|
35
|
-
export declare const listJobs: (dir: string) => Job[];
|
|
36
|
-
/** A job that is gone without saying how it ended was killed, or crashed before it could — its log says which. */
|
|
37
|
-
export declare const stateOf: (job: Job) => JobState;
|
|
38
|
-
/** Whether the recorded PID is still this job — its environment names it (`<PREFIX>_BACKFILL_JOB`). */
|
|
39
|
-
export declare const isJob: (job: Job) => boolean;
|
|
1
|
+
export { isJob, type Job, type JobState, jobsDir, listJobs, readJob, type SpawnJob, saveJob, spawnDetached, stateOf, updateJob, } from "../../services/backfill-jobs.js";
|
|
40
2
|
//# sourceMappingURL=backfill-jobs.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"backfill-jobs.d.ts","sourceRoot":"","sources":["../../../src/cli/messenger/backfill-jobs.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"backfill-jobs.d.ts","sourceRoot":"","sources":["../../../src/cli/messenger/backfill-jobs.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,EACL,KAAK,GAAG,EACR,KAAK,QAAQ,EACb,OAAO,EACP,QAAQ,EACR,OAAO,EACP,KAAK,QAAQ,EACb,OAAO,EACP,aAAa,EACb,OAAO,EACP,SAAS,GACV,MAAM,iCAAiC,CAAA"}
|
|
@@ -1,62 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
import { closeSync, existsSync, mkdirSync, openSync, readdirSync, readFileSync, realpathSync } from "node:fs";
|
|
3
|
-
import { join } from "node:path";
|
|
4
|
-
import { resolvePaths, writeSecurely } from "@leemour/cli-core";
|
|
5
|
-
import { carries } from "../../background/processes.js";
|
|
6
|
-
export const spawnDetached = (argv, env, log) => {
|
|
7
|
-
const out = openSync(log, "a", 0o600);
|
|
8
|
-
try {
|
|
9
|
-
const child = spawn(process.execPath, [realpathSync(process.argv[1] ?? ""), ...argv], {
|
|
10
|
-
detached: true,
|
|
11
|
-
stdio: ["ignore", out, out],
|
|
12
|
-
env,
|
|
13
|
-
});
|
|
14
|
-
child.unref();
|
|
15
|
-
return child.pid ?? 0;
|
|
16
|
-
}
|
|
17
|
-
finally {
|
|
18
|
-
closeSync(out);
|
|
19
|
-
}
|
|
20
|
-
};
|
|
21
|
-
export const jobsDir = (app, env) => join(resolvePaths({ appName: app.appName, prefix: app.envPrefix, env }).state, "backfill");
|
|
22
|
-
const jobPath = (dir, id) => join(dir, `${id}.json`);
|
|
23
|
-
export const saveJob = (dir, job) => {
|
|
24
|
-
mkdirSync(dir, { recursive: true, mode: 0o700 });
|
|
25
|
-
writeSecurely(jobPath(dir, job.id), `${JSON.stringify(job, null, 2)}\n`, 0o600);
|
|
26
|
-
};
|
|
27
|
-
export const readJob = (dir, id) => {
|
|
28
|
-
if (!/^[\w-]+$/.test(id) || !existsSync(jobPath(dir, id)))
|
|
29
|
-
return undefined;
|
|
30
|
-
try {
|
|
31
|
-
return JSON.parse(readFileSync(jobPath(dir, id), "utf8"));
|
|
32
|
-
}
|
|
33
|
-
catch {
|
|
34
|
-
return undefined;
|
|
35
|
-
}
|
|
36
|
-
};
|
|
37
|
-
export const updateJob = (dir, id, change) => {
|
|
38
|
-
const job = readJob(dir, id);
|
|
39
|
-
if (job)
|
|
40
|
-
saveJob(dir, { ...job, ...change });
|
|
41
|
-
};
|
|
42
|
-
/** Newest first. */
|
|
43
|
-
export const listJobs = (dir) => existsSync(dir)
|
|
44
|
-
? readdirSync(dir)
|
|
45
|
-
.filter((name) => name.endsWith(".json"))
|
|
46
|
-
.flatMap((name) => readJob(dir, name.slice(0, -".json".length)) ?? [])
|
|
47
|
-
.sort((a, b) => b.startedAt.localeCompare(a.startedAt))
|
|
48
|
-
: [];
|
|
49
|
-
/** A job that is gone without saying how it ended was killed, or crashed before it could — its log says which. */
|
|
50
|
-
export const stateOf = (job) => {
|
|
51
|
-
if (job.finishedAt !== undefined) {
|
|
52
|
-
if (job.cancelRequestedAt)
|
|
53
|
-
return "cancelled";
|
|
54
|
-
return job.error ? "failed" : "done";
|
|
55
|
-
}
|
|
56
|
-
if (isJob(job))
|
|
57
|
-
return "running";
|
|
58
|
-
return job.cancelRequestedAt ? "cancelled" : "died";
|
|
59
|
-
};
|
|
60
|
-
/** Whether the recorded PID is still this job — its environment names it (`<PREFIX>_BACKFILL_JOB`). */
|
|
61
|
-
export const isJob = (job) => carries(job.pid, `_BACKFILL_JOB=${job.id}`);
|
|
1
|
+
export { isJob, jobsDir, listJobs, readJob, saveJob, spawnDetached, stateOf, updateJob, } from "../../services/backfill-jobs.js";
|
|
62
2
|
//# sourceMappingURL=backfill-jobs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"backfill-jobs.js","sourceRoot":"","sources":["../../../src/cli/messenger/backfill-jobs.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"backfill-jobs.js","sourceRoot":"","sources":["../../../src/cli/messenger/backfill-jobs.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,EAGL,OAAO,EACP,QAAQ,EACR,OAAO,EAEP,OAAO,EACP,aAAa,EACb,OAAO,EACP,SAAS,GACV,MAAM,iCAAiC,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chats-command.d.ts","sourceRoot":"","sources":["../../../src/cli/messenger/chats-command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAUnC,OAAO,EAAE,KAAK,SAAS,EAAoB,MAAM,cAAc,CAAA;AAE/D,eAAO,MAAM,YAAY,cAAe,SAAS,KAAG,
|
|
1
|
+
{"version":3,"file":"chats-command.d.ts","sourceRoot":"","sources":["../../../src/cli/messenger/chats-command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAUnC,OAAO,EAAE,KAAK,SAAS,EAAoB,MAAM,cAAc,CAAA;AAE/D,eAAO,MAAM,YAAY,cAAe,SAAS,KAAG,OA+GnD,CAAA"}
|
|
@@ -87,6 +87,18 @@ export const chatsCommand = (messenger) => {
|
|
|
87
87
|
context.renderer.note(`${members.length} listed members; the chat reports ${participantsCount} participants. The list may omit your account or be partial.`);
|
|
88
88
|
}
|
|
89
89
|
});
|
|
90
|
+
chats
|
|
91
|
+
.command("send-as")
|
|
92
|
+
.description("who this account may post as in a chat; changes no saved choice")
|
|
93
|
+
.argument("<chat>", messenger.chatArgument)
|
|
94
|
+
.action(async function (chat) {
|
|
95
|
+
const context = messengerContext(this, messenger);
|
|
96
|
+
const identities = await context.withServices((services) => services.chats.sendAs(chat));
|
|
97
|
+
if (context.format === "json")
|
|
98
|
+
context.renderer.result(listed(identities));
|
|
99
|
+
else
|
|
100
|
+
context.renderer.stream(identities);
|
|
101
|
+
});
|
|
90
102
|
chats.addCommand(membersCommand(messenger));
|
|
91
103
|
chats.addCommand(markReadCommand(messenger));
|
|
92
104
|
chats.addCommand(trackingCommand(messenger));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chats-command.js","sourceRoot":"","sources":["../../../src/cli/messenger/chats-command.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"chats-command.js","sourceRoot":"","sources":["../../../src/cli/messenger/chats-command.ts"],"names":[],"mappings":"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"}
|
|
@@ -20,6 +20,7 @@ export interface ConnectOptions {
|
|
|
20
20
|
events?: EventSink;
|
|
21
21
|
}
|
|
22
22
|
export interface Fetching {
|
|
23
|
+
beforeInclusive?: boolean;
|
|
23
24
|
/** Messages per history request. */
|
|
24
25
|
page: number;
|
|
25
26
|
/** The most one history request returns, where the messenger is known to cap it; a larger `--page-size` is refused. */
|
|
@@ -37,6 +38,8 @@ export interface Fetching {
|
|
|
37
38
|
orderBy?: "id" | "time";
|
|
38
39
|
}
|
|
39
40
|
/** What one messenger CLI hands the shared commands. Everything else about it stays in its own code. */
|
|
41
|
+
/** `messages send --spoiler` and `--caption-above`. */
|
|
42
|
+
export type MediaOption = "spoiler" | "captionAbove";
|
|
40
43
|
export interface Messenger {
|
|
41
44
|
app: AppIdentity;
|
|
42
45
|
provider: Provider;
|
|
@@ -52,6 +55,11 @@ export interface Messenger {
|
|
|
52
55
|
chatArgument: string;
|
|
53
56
|
/** The group settings this messenger has, as `chats update` offers them; every one when unset. */
|
|
54
57
|
groupSettings?: readonly (keyof GroupSettings)[];
|
|
58
|
+
/**
|
|
59
|
+
* The send options for attachments this messenger honours; none when unset, so an adapter that does not
|
|
60
|
+
* know a newer option is never handed one to drop.
|
|
61
|
+
*/
|
|
62
|
+
mediaOptions?: readonly MediaOption[];
|
|
55
63
|
/** Whether the messenger says when an account was made — the moderation rule `newAccount`; yes when unset. */
|
|
56
64
|
knowsAccountAge?: boolean;
|
|
57
65
|
/**
|
|
@@ -80,6 +88,8 @@ export interface Messenger {
|
|
|
80
88
|
* `serve` keeps filled, and never connect; writes still do. `server` when unset.
|
|
81
89
|
*/
|
|
82
90
|
history?: "server" | "store";
|
|
91
|
+
/** Whether the messenger computes a chat's statistics for its admins — `stats chats official`; no when unset. */
|
|
92
|
+
officialStats?: boolean;
|
|
83
93
|
/** Whether this CLI's background service fetches tracked rosters daily; true when unset. */
|
|
84
94
|
tracksMembers?: boolean;
|
|
85
95
|
/** Speech model ids, most suitable first, for `messages transcribe --local`; the first is the default. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/cli/messenger/context.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/cli/messenger/context.ts"],"names":[],"mappings":"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"}
|
|
@@ -178,6 +178,7 @@ export const messengerContext = (command, messenger) => {
|
|
|
178
178
|
reads: messenger.history ?? "server",
|
|
179
179
|
// Turning recording off by name (--no-record, or record: false) keeps no search history either.
|
|
180
180
|
history: base.settings.keepFailedRuns,
|
|
181
|
+
searchCatchUp: base.settings.searchCatchUp,
|
|
181
182
|
guard,
|
|
182
183
|
connection: async () => {
|
|
183
184
|
if (base.settings.offline)
|
|
@@ -186,6 +187,10 @@ export const messengerContext = (command, messenger) => {
|
|
|
186
187
|
throw new CliError("validation_error", "the read connection has already been released");
|
|
187
188
|
if (!held) {
|
|
188
189
|
const connection = await messenger.connect(command, base, { events });
|
|
190
|
+
if (released) {
|
|
191
|
+
await connection.close();
|
|
192
|
+
throw new CliError("validation_error", "the read connection has already been released");
|
|
193
|
+
}
|
|
189
194
|
base.track(connection);
|
|
190
195
|
held = connected(connection, messenger, base, events);
|
|
191
196
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../../src/cli/messenger/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAE5C,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAE1D,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAChE,OAAO,EAAE,QAAQ,EAAkB,MAAM,sBAAsB,CAAA;AAC/D,OAAO,EACL,6BAA6B,EAC7B,QAAQ,EAER,kBAAkB,GACnB,MAAM,4BAA4B,CAAA;AACnC,OAAO,EAAE,OAAO,EAAkD,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAE9G,OAAO,EAA0D,SAAS,EAAE,MAAM,sBAAsB,CAAA;AAExG,OAAO,EAAoB,WAAW,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAC5E,OAAO,EAAE,mBAAmB,EAAwB,qBAAqB,EAAE,MAAM,uBAAuB,CAAA;AAGxG,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAExC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../../src/cli/messenger/context.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,36 +1,6 @@
|
|
|
1
1
|
import type { Command } from "commander";
|
|
2
|
-
|
|
3
|
-
import type { MessagesService } from "../../services/messages.js";
|
|
2
|
+
export { downloadMessage, type Saved, safeName, save } from "../../services/file-download.js";
|
|
4
3
|
import { type Messenger } from "./context.js";
|
|
5
|
-
import type { RemoteFile } from "./port.js";
|
|
6
|
-
export interface Saved {
|
|
7
|
-
kind: string;
|
|
8
|
-
path: string;
|
|
9
|
-
bytes: number;
|
|
10
|
-
/** Only with `--all`: the file was already there from an earlier run, and was left as it was. */
|
|
11
|
-
existing?: true;
|
|
12
|
-
}
|
|
13
4
|
/** `messages download`: every file of one message, or with `--all` of a whole chat, never over a file already there. */
|
|
14
5
|
export declare const downloadSubcommand: (messages: Command, messenger: Messenger) => Command;
|
|
15
|
-
/**
|
|
16
|
-
* Every file of one message, as `--all` saves them — a taken name gets the message's prefix, never
|
|
17
|
-
* overwrites — and where they went recorded in the store. For `attachments extract --download`.
|
|
18
|
-
*/
|
|
19
|
-
export declare const downloadMessage: (messages: Pick<MessagesService, "download" | "keepDownloaded">, chat: string, message: Id, output: string, warn: (message: string) => void) => Promise<Saved[]>;
|
|
20
|
-
/**
|
|
21
|
-
* A name another person chose cannot climb out of the folder, cannot be a dot file we would then
|
|
22
|
-
* hide, and carries no control or direction character to rewrite the terminal or disguise its extension.
|
|
23
|
-
*/
|
|
24
|
-
export declare const safeName: (name: string | undefined) => string | undefined;
|
|
25
|
-
/**
|
|
26
|
-
* The bytes go to a temporary name first and are then hard-linked to the real one, which fails if the
|
|
27
|
-
* name is taken — so an existing file survives, and an interrupted download leaves no half file under
|
|
28
|
-
* the name somebody will open.
|
|
29
|
-
*
|
|
30
|
-
* `unique` is for a whole chat, where two messages often carry the same file name: a taken name gets the
|
|
31
|
-
* message's own prefix, and when that is taken too the file was saved by an earlier run and is `existing`.
|
|
32
|
-
*/
|
|
33
|
-
export declare const save: (file: RemoteFile, directory: string, fallbackName: string, { unique }?: {
|
|
34
|
-
unique?: boolean;
|
|
35
|
-
}) => Promise<Saved>;
|
|
36
6
|
//# sourceMappingURL=download-command.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"download-command.d.ts","sourceRoot":"","sources":["../../../src/cli/messenger/download-command.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"download-command.d.ts","sourceRoot":"","sources":["../../../src/cli/messenger/download-command.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAMxC,OAAO,EAAE,eAAe,EAAE,KAAK,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,iCAAiC,CAAA;AAM7F,OAAO,EAAiB,KAAK,SAAS,EAA6D,MAAM,cAAc,CAAA;AAGvH,wHAAwH;AACxH,eAAO,MAAM,kBAAkB,aAAc,OAAO,aAAa,SAAS,KAAG,OAmDvE,CAAA"}
|
|
@@ -1,16 +1,15 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { basename, join, resolve } from "node:path";
|
|
4
|
-
import { Readable, Transform } from "node:stream";
|
|
5
|
-
import { pipeline } from "node:stream/promises";
|
|
1
|
+
import { existsSync, mkdirSync, readFileSync, renameSync, writeFileSync } from "node:fs";
|
|
2
|
+
import { join } from "node:path";
|
|
6
3
|
import { setTimeout as sleep } from "node:timers/promises";
|
|
7
4
|
import { CliError } from "@leemour/cli-core";
|
|
8
5
|
import { NOT_FILES } from "../../domain/attachments.js";
|
|
9
6
|
import { FETCHING, keyOf } from "../../services/archive.js";
|
|
7
|
+
import { recordPaths, save } from "../../services/file-download.js";
|
|
8
|
+
export { downloadMessage, safeName, save } from "../../services/file-download.js";
|
|
10
9
|
import { OFFLINE } from "../../services/deps.js";
|
|
11
10
|
import { patiently } from "../../services/patience.js";
|
|
12
11
|
import { parseDuration } from "../settings.js";
|
|
13
|
-
import { messengerContext } from "./context.js";
|
|
12
|
+
import { messengerContext, refuseLocalWrite } from "./context.js";
|
|
14
13
|
import { stopOnSignal } from "./patience.js";
|
|
15
14
|
/** `messages download`: every file of one message, or with `--all` of a whole chat, never over a file already there. */
|
|
16
15
|
export const downloadSubcommand = (messages, messenger) => messages
|
|
@@ -21,20 +20,23 @@ export const downloadSubcommand = (messages, messenger) => messages
|
|
|
21
20
|
.option("--output-dir <dir>", "where to save them; created if missing", ".")
|
|
22
21
|
.option("--all", "every file of the chat, newest first; run it again to continue where it stopped")
|
|
23
22
|
.option("--pause <duration>", "with --all, a pause between pages, to stay under the provider's limits", messenger.fetching?.pause ?? FETCHING.pause)
|
|
23
|
+
.option("--extract", "read text layers from the files this download maps into the local content index")
|
|
24
24
|
.action(async function (chat, messageId) {
|
|
25
25
|
const context = messengerContext(this, messenger);
|
|
26
|
-
const { outputDir: output, all, pause } = this.opts();
|
|
26
|
+
const { outputDir: output, all, pause, extract, } = this.opts();
|
|
27
|
+
if (extract)
|
|
28
|
+
refuseLocalWrite(context, messenger.app.command, "attachments.extract");
|
|
27
29
|
if (all && messageId !== undefined) {
|
|
28
30
|
throw new CliError("validation_error", "--all saves the whole chat; leave out the message id");
|
|
29
31
|
}
|
|
30
32
|
if (all) {
|
|
31
|
-
await downloadChat(this, context, messenger, chat, output, parseDuration(pause, "--pause"));
|
|
33
|
+
await downloadChat(this, context, messenger, chat, output, parseDuration(pause, "--pause"), extract);
|
|
32
34
|
return;
|
|
33
35
|
}
|
|
34
36
|
if (messageId === undefined)
|
|
35
37
|
throw new CliError("validation_error", "name a message id, or use --all");
|
|
36
38
|
const id = messageId.trim();
|
|
37
|
-
const
|
|
39
|
+
const result = await context.withServices(async (services) => {
|
|
38
40
|
const { files, skipped } = await services.messages.download(chat, id);
|
|
39
41
|
if (skipped.length > 0)
|
|
40
42
|
context.renderer.note(`not a file, not downloaded: ${skipped.join(", ")}`);
|
|
@@ -45,47 +47,21 @@ export const downloadSubcommand = (messages, messenger) => messages
|
|
|
45
47
|
for (const [index, file] of files.entries())
|
|
46
48
|
done.push(await save(file, output, `${id}-${index + 1}`));
|
|
47
49
|
await recordPaths(services.messages, chat, id, files, done, context.renderer.warn);
|
|
48
|
-
|
|
50
|
+
const extraction = extract
|
|
51
|
+
? await services.attachments.extract({ chat, message: id, paths: done.map((file) => file.path) })
|
|
52
|
+
: undefined;
|
|
53
|
+
return { saved: done, extraction };
|
|
49
54
|
});
|
|
55
|
+
const { saved, extraction } = result;
|
|
56
|
+
if (extraction && context.format !== "json")
|
|
57
|
+
context.renderer.note(`${extraction.extracted} extracted, ${extraction.failed} unreadable`);
|
|
50
58
|
if (context.format === "pretty")
|
|
51
59
|
context.streams.data(`${saved.map((one) => one.path).join("\n")}\n`);
|
|
52
60
|
else if (context.format === "jsonl")
|
|
53
61
|
context.renderer.stream(saved);
|
|
54
62
|
else
|
|
55
|
-
context.renderer.result({ items: saved });
|
|
63
|
+
context.renderer.result({ items: saved, ...(extraction ? { extraction } : {}) });
|
|
56
64
|
});
|
|
57
|
-
/**
|
|
58
|
-
* The files are saved whatever happens here: a store that cannot take the paths costs only the later
|
|
59
|
-
* `attachments extract`, so it warns and never fails the download.
|
|
60
|
-
*/
|
|
61
|
-
const recordPaths = async (messages, chat, message, files, saved, warn) => {
|
|
62
|
-
const downloaded = saved.map((one, index) => ({
|
|
63
|
-
kind: one.kind,
|
|
64
|
-
path: one.path,
|
|
65
|
-
...(files[index]?.name === undefined ? {} : { name: files[index]?.name }),
|
|
66
|
-
...(files[index]?.position === undefined ? {} : { position: files[index]?.position }),
|
|
67
|
-
}));
|
|
68
|
-
try {
|
|
69
|
-
return await messages.keepDownloaded(chat, message, downloaded);
|
|
70
|
-
}
|
|
71
|
-
catch (error) {
|
|
72
|
-
warn(`not recorded in the local store where message ${message}'s files went: ${error.message}`);
|
|
73
|
-
return 0;
|
|
74
|
-
}
|
|
75
|
-
};
|
|
76
|
-
/**
|
|
77
|
-
* Every file of one message, as `--all` saves them — a taken name gets the message's prefix, never
|
|
78
|
-
* overwrites — and where they went recorded in the store. For `attachments extract --download`.
|
|
79
|
-
*/
|
|
80
|
-
export const downloadMessage = async (messages, chat, message, output, warn) => {
|
|
81
|
-
const { files } = await messages.download(chat, message);
|
|
82
|
-
mkdirSync(output, { recursive: true });
|
|
83
|
-
const done = [];
|
|
84
|
-
for (const [index, file] of files.entries())
|
|
85
|
-
done.push(await save(file, output, `${message}-${index + 1}`, { unique: true }));
|
|
86
|
-
await recordPaths(messages, chat, message, files, done, warn);
|
|
87
|
-
return done;
|
|
88
|
-
};
|
|
89
65
|
/** The most messages a provider hands out per history request — Telegram's cap. */
|
|
90
66
|
const PAGE = 100;
|
|
91
67
|
/**
|
|
@@ -109,10 +85,11 @@ const writeProgress = (path, chatId, progress) => {
|
|
|
109
85
|
writeFileSync(`${path}.tmp`, `${JSON.stringify({ chat: chatId, ...progress })}\n`, { mode: 0o600 });
|
|
110
86
|
renameSync(`${path}.tmp`, path);
|
|
111
87
|
};
|
|
112
|
-
const downloadChat = async (command, context, messenger, chat, output, pauseMs) => {
|
|
88
|
+
const downloadChat = async (command, context, messenger, chat, output, pauseMs, extract = false) => {
|
|
113
89
|
if (context.settings.offline)
|
|
114
90
|
throw new CliError("validation_error", OFFLINE);
|
|
115
91
|
const items = [];
|
|
92
|
+
const extraction = { extracted: 0, failed: 0, needsAgent: 0, complete: true };
|
|
116
93
|
const onSaved = (one) => {
|
|
117
94
|
if (context.format === "pretty")
|
|
118
95
|
context.streams.data(`${one.path}\n`);
|
|
@@ -133,11 +110,31 @@ const downloadChat = async (command, context, messenger, chat, output, pauseMs)
|
|
|
133
110
|
note: context.renderer.note,
|
|
134
111
|
warn: context.renderer.warn,
|
|
135
112
|
onSaved,
|
|
113
|
+
...(extract
|
|
114
|
+
? {
|
|
115
|
+
onDownloaded: async (id, paths) => {
|
|
116
|
+
try {
|
|
117
|
+
const run = await services.attachments.extract({ chat, message: id, paths, signal: stop.signal });
|
|
118
|
+
extraction.extracted += run.extracted;
|
|
119
|
+
extraction.failed += run.failed;
|
|
120
|
+
extraction.needsAgent += run.needsAgent;
|
|
121
|
+
extraction.complete &&= run.complete;
|
|
122
|
+
}
|
|
123
|
+
catch {
|
|
124
|
+
extraction.failed += 1;
|
|
125
|
+
extraction.complete = false;
|
|
126
|
+
}
|
|
127
|
+
},
|
|
128
|
+
}
|
|
129
|
+
: {}),
|
|
136
130
|
}));
|
|
137
131
|
if (context.format === "json")
|
|
138
|
-
context.renderer.result({ items, ...result });
|
|
139
|
-
else
|
|
132
|
+
context.renderer.result({ items, ...result, ...(extract ? { extraction } : {}) });
|
|
133
|
+
else {
|
|
140
134
|
context.renderer.note(summary(result));
|
|
135
|
+
if (extract)
|
|
136
|
+
context.renderer.note(`${extraction.extracted} extracted, ${extraction.failed} unreadable`);
|
|
137
|
+
}
|
|
141
138
|
}
|
|
142
139
|
finally {
|
|
143
140
|
stop.release();
|
|
@@ -168,7 +165,7 @@ const joined = (a, b) => {
|
|
|
168
165
|
* a page is asked for up to and including the oldest moment seen, so none sent then is skipped, and
|
|
169
166
|
* what this run already walked is passed over. A stretch's ends hold only the messages it names.
|
|
170
167
|
*/
|
|
171
|
-
const walkChat = async (messages, chat, { output, pauseMs, fetching, fromStore, stop, note, warn, onSaved }) => {
|
|
168
|
+
const walkChat = async (messages, chat, { output, pauseMs, fetching, fromStore, stop, note, warn, onSaved, onDownloaded }) => {
|
|
172
169
|
const by = fetching.orderBy ?? "id";
|
|
173
170
|
const keyed = keyOf(fetching);
|
|
174
171
|
const pagesByTime = by === "time" && !fromStore;
|
|
@@ -244,6 +241,7 @@ const walkChat = async (messages, chat, { output, pauseMs, fetching, fromStore,
|
|
|
244
241
|
onSaved(one);
|
|
245
242
|
}
|
|
246
243
|
await recordPaths(messages, message.chatId, message.id, files, done, warn);
|
|
244
|
+
await onDownloaded?.(message.id, done.map((file) => file.path));
|
|
247
245
|
run = run ? joined(run, point(key, message.id)) : point(key, message.id);
|
|
248
246
|
remember();
|
|
249
247
|
}
|
|
@@ -271,76 +269,4 @@ const walkChat = async (messages, chat, { output, pauseMs, fetching, fromStore,
|
|
|
271
269
|
remember();
|
|
272
270
|
return { chat: chatId ?? null, saved, existing, complete, ...(stop.aborted ? { stopped: true } : {}) };
|
|
273
271
|
};
|
|
274
|
-
const EXTENSIONS = {
|
|
275
|
-
"image/jpeg": "jpg",
|
|
276
|
-
"image/png": "png",
|
|
277
|
-
"image/webp": "webp",
|
|
278
|
-
"image/gif": "gif",
|
|
279
|
-
"video/mp4": "mp4",
|
|
280
|
-
"video/webm": "webm",
|
|
281
|
-
"audio/mpeg": "mp3",
|
|
282
|
-
"audio/ogg": "ogg",
|
|
283
|
-
"audio/mp4": "m4a",
|
|
284
|
-
"application/pdf": "pdf",
|
|
285
|
-
};
|
|
286
|
-
/** Telegram sends a photo with no name and no type; it is always a JPEG. */
|
|
287
|
-
const BY_KIND = { photo: "jpg" };
|
|
288
|
-
/**
|
|
289
|
-
* A name another person chose cannot climb out of the folder, cannot be a dot file we would then
|
|
290
|
-
* hide, and carries no control or direction character to rewrite the terminal or disguise its extension.
|
|
291
|
-
*/
|
|
292
|
-
export const safeName = (name) => {
|
|
293
|
-
const plain = name === undefined
|
|
294
|
-
? ""
|
|
295
|
-
: basename(name.replaceAll("\\", "/"))
|
|
296
|
-
.replace(/[\p{Cc}---]/gu, "")
|
|
297
|
-
.replace(/^\.+/, "");
|
|
298
|
-
return plain === "" ? undefined : plain;
|
|
299
|
-
};
|
|
300
|
-
/**
|
|
301
|
-
* The bytes go to a temporary name first and are then hard-linked to the real one, which fails if the
|
|
302
|
-
* name is taken — so an existing file survives, and an interrupted download leaves no half file under
|
|
303
|
-
* the name somebody will open.
|
|
304
|
-
*
|
|
305
|
-
* `unique` is for a whole chat, where two messages often carry the same file name: a taken name gets the
|
|
306
|
-
* message's own prefix, and when that is taken too the file was saved by an earlier run and is `existing`.
|
|
307
|
-
*/
|
|
308
|
-
export const save = async (file, directory, fallbackName, { unique = false } = {}) => {
|
|
309
|
-
const own = safeName(file.name);
|
|
310
|
-
const fileName = () => {
|
|
311
|
-
const extension = EXTENSIONS[file.mime ?? ""] ?? BY_KIND[file.kind];
|
|
312
|
-
return own ?? (extension ? `${fallbackName}.${extension}` : fallbackName);
|
|
313
|
-
};
|
|
314
|
-
const partial = join(directory, `.${fileName()}.${process.pid}.part`);
|
|
315
|
-
let bytes = 0;
|
|
316
|
-
const counting = new Transform({
|
|
317
|
-
transform(chunk, _encoding, done) {
|
|
318
|
-
bytes += chunk.length;
|
|
319
|
-
done(null, chunk);
|
|
320
|
-
},
|
|
321
|
-
});
|
|
322
|
-
try {
|
|
323
|
-
await pipeline(Readable.from(file.bytes()), counting, createWriteStream(partial, { flags: "wx", mode: 0o600 }));
|
|
324
|
-
// Lazy HTTP downloads learn MIME while reading bytes.
|
|
325
|
-
const name = fileName();
|
|
326
|
-
const names = unique && own ? [name, `${fallbackName}-${own}`] : [name];
|
|
327
|
-
for (const candidate of names) {
|
|
328
|
-
const path = resolve(join(directory, candidate));
|
|
329
|
-
const taken = await link(partial, path).then(() => false, (error) => {
|
|
330
|
-
if (error.code === "EEXIST")
|
|
331
|
-
return true;
|
|
332
|
-
throw error;
|
|
333
|
-
});
|
|
334
|
-
if (!taken)
|
|
335
|
-
return { kind: file.kind, path, bytes };
|
|
336
|
-
}
|
|
337
|
-
const path = resolve(join(directory, names.at(-1) ?? name));
|
|
338
|
-
if (unique)
|
|
339
|
-
return { kind: file.kind, path, bytes, existing: true };
|
|
340
|
-
throw new CliError("validation_error", `${path} already exists — nothing was overwritten; choose --output-dir`);
|
|
341
|
-
}
|
|
342
|
-
finally {
|
|
343
|
-
await rm(partial, { force: true });
|
|
344
|
-
}
|
|
345
|
-
};
|
|
346
272
|
//# sourceMappingURL=download-command.js.map
|