@wirecat/cli-memo 0.24.0 → 0.25.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/dist/actions/actions.d.ts +1 -1
- package/dist/actions/actions.d.ts.map +1 -1
- package/dist/actions/command.js +2 -2
- package/dist/actions/command.js.map +1 -1
- package/dist/answers/command.d.ts +1 -1
- package/dist/answers/command.d.ts.map +1 -1
- package/dist/answers/command.js +2 -2
- package/dist/answers/command.js.map +1 -1
- package/dist/author.d.ts +1 -1
- package/dist/author.d.ts.map +1 -1
- package/dist/bin/memo.js +2 -2
- package/dist/bin/memo.js.map +1 -1
- package/dist/config.d.ts +14 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +14 -1
- package/dist/config.js.map +1 -1
- package/dist/context/command.js +1 -1
- package/dist/context/command.js.map +1 -1
- package/dist/context/context.d.ts +3 -3
- package/dist/context/context.d.ts.map +1 -1
- package/dist/context/context.js +2 -2
- package/dist/context/context.js.map +1 -1
- package/dist/discovery/command.d.ts +1 -1
- package/dist/discovery/command.js +2 -2
- package/dist/discovery/command.js.map +1 -1
- package/dist/examples.d.ts.map +1 -1
- package/dist/examples.js +7 -0
- package/dist/examples.js.map +1 -1
- package/dist/facts/command.js +1 -1
- package/dist/facts/command.js.map +1 -1
- package/dist/knowledge/command.js +1 -1
- package/dist/knowledge/command.js.map +1 -1
- package/dist/knowledge/key-documents.d.ts +1 -1
- package/dist/knowledge/key-documents.d.ts.map +1 -1
- package/dist/knowledge/key-documents.js +1 -1
- package/dist/knowledge/key-documents.js.map +1 -1
- package/dist/mail/accounts.d.ts +11 -0
- package/dist/mail/accounts.d.ts.map +1 -0
- package/dist/mail/accounts.js +26 -0
- package/dist/mail/accounts.js.map +1 -0
- package/dist/mail/command.d.ts +4 -0
- package/dist/mail/command.d.ts.map +1 -0
- package/dist/mail/command.js +139 -0
- package/dist/mail/command.js.map +1 -0
- package/dist/mail/gmail.d.ts +7 -2
- package/dist/mail/gmail.d.ts.map +1 -1
- package/dist/mail/gmail.js +76 -37
- package/dist/mail/gmail.js.map +1 -1
- package/dist/mail/headers.d.ts +17 -0
- package/dist/mail/headers.d.ts.map +1 -0
- package/dist/mail/headers.js +28 -0
- package/dist/mail/headers.js.map +1 -0
- package/dist/mail/himalaya.d.ts +3 -1
- package/dist/mail/himalaya.d.ts.map +1 -1
- package/dist/mail/himalaya.js +2 -2
- package/dist/mail/himalaya.js.map +1 -1
- package/dist/mail/import.d.ts +15 -6
- package/dist/mail/import.d.ts.map +1 -1
- package/dist/mail/import.js +130 -87
- package/dist/mail/import.js.map +1 -1
- package/dist/mail/mbox.d.ts +9 -0
- package/dist/mail/mbox.d.ts.map +1 -0
- package/dist/mail/mbox.js +218 -0
- package/dist/mail/mbox.js.map +1 -0
- package/dist/mail/messages-command.js +3 -3
- package/dist/mail/messages-command.js.map +1 -1
- package/dist/mail/parse.d.ts +2 -2
- package/dist/mail/parse.d.ts.map +1 -1
- package/dist/mail/parse.js +27 -63
- package/dist/mail/parse.js.map +1 -1
- package/dist/mail/probe.d.ts +31 -0
- package/dist/mail/probe.d.ts.map +1 -0
- package/dist/mail/probe.js +55 -0
- package/dist/mail/probe.js.map +1 -0
- package/dist/mail/rules.d.ts +18 -0
- package/dist/mail/rules.d.ts.map +1 -0
- package/dist/mail/rules.js +26 -0
- package/dist/mail/rules.js.map +1 -0
- package/dist/mail/source.d.ts +20 -0
- package/dist/mail/source.d.ts.map +1 -0
- package/dist/mail/source.js +99 -0
- package/dist/mail/source.js.map +1 -0
- package/dist/mcp/knowledge.js +1 -1
- package/dist/mcp/knowledge.js.map +1 -1
- package/dist/mcp/server.js +2 -2
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/tool.d.ts +1 -1
- package/dist/mcp/tool.d.ts.map +1 -1
- package/dist/memories/command.js +1 -1
- package/dist/memories/command.js.map +1 -1
- package/dist/memories/memories.d.ts +1 -1
- package/dist/memories/memories.d.ts.map +1 -1
- package/dist/notes/about.d.ts +1 -1
- package/dist/notes/about.d.ts.map +1 -1
- package/dist/notes/about.js +1 -1
- package/dist/notes/about.js.map +1 -1
- package/dist/notes/bound.d.ts +1 -1
- package/dist/notes/bound.d.ts.map +1 -1
- package/dist/notes/command.js +1 -1
- package/dist/notes/command.js.map +1 -1
- package/dist/notes/embed.d.ts +1 -1
- package/dist/notes/embed.d.ts.map +1 -1
- package/dist/notes/embed.js +1 -1
- package/dist/notes/embed.js.map +1 -1
- package/dist/notes/folders-command.js +1 -1
- package/dist/notes/folders-command.js.map +1 -1
- package/dist/notes/import.d.ts +2 -2
- package/dist/notes/import.d.ts.map +1 -1
- package/dist/notes/import.js +2 -2
- package/dist/notes/import.js.map +1 -1
- package/dist/notes/internal.d.ts +1 -1
- package/dist/notes/internal.d.ts.map +1 -1
- package/dist/notes/links.d.ts +1 -1
- package/dist/notes/links.d.ts.map +1 -1
- package/dist/notes/list.d.ts +1 -1
- package/dist/notes/list.d.ts.map +1 -1
- package/dist/notes/search.d.ts +3 -3
- package/dist/notes/search.d.ts.map +1 -1
- package/dist/notes/search.js +1 -1
- package/dist/notes/search.js.map +1 -1
- package/dist/people/command.js +1 -1
- package/dist/people/command.js.map +1 -1
- package/dist/people/identity.d.ts +1 -1
- package/dist/people/identity.d.ts.map +1 -1
- package/dist/people/identity.js +1 -1
- package/dist/people/identity.js.map +1 -1
- package/dist/people/notes-map.d.ts +1 -1
- package/dist/people/notes-map.d.ts.map +1 -1
- package/dist/people/subject.d.ts +1 -1
- package/dist/people/subject.d.ts.map +1 -1
- package/dist/people/subject.js +1 -1
- package/dist/people/subject.js.map +1 -1
- package/dist/program.d.ts.map +1 -1
- package/dist/program.js +2 -0
- package/dist/program.js.map +1 -1
- package/dist/records/run.d.ts +1 -1
- package/dist/records/run.d.ts.map +1 -1
- package/dist/records/run.js +1 -1
- package/dist/records/run.js.map +1 -1
- package/dist/run/import.d.ts.map +1 -1
- package/dist/run/import.js +21 -17
- package/dist/run/import.js.map +1 -1
- package/dist/run/lock.js +1 -1
- package/dist/run/lock.js.map +1 -1
- package/dist/search/command.d.ts +2 -2
- package/dist/search/command.d.ts.map +1 -1
- package/dist/search/command.js +5 -4
- package/dist/search/command.js.map +1 -1
- package/dist/store/gone.d.ts +1 -1
- package/dist/store/gone.d.ts.map +1 -1
- package/dist/store/held.d.ts +1 -1
- package/dist/store/held.d.ts.map +1 -1
- package/dist/store/scope.d.ts +1 -1
- package/dist/store/scope.d.ts.map +1 -1
- package/dist/store/scope.js +1 -1
- package/dist/store/scope.js.map +1 -1
- package/dist/store/source-target.d.ts +1 -1
- package/dist/store/source-target.d.ts.map +1 -1
- package/dist/store/source-target.js +1 -1
- package/dist/store/source-target.js.map +1 -1
- package/dist/tags/command.js +2 -2
- package/dist/tags/command.js.map +1 -1
- package/dist/tasks/command.js +3 -3
- package/dist/tasks/command.js.map +1 -1
- package/dist/tasks/context.d.ts +2 -2
- package/dist/tasks/context.d.ts.map +1 -1
- package/dist/tasks/context.js +2 -2
- package/dist/tasks/context.js.map +1 -1
- package/dist/tasks/relations-command.js +1 -1
- package/dist/tasks/relations-command.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/vocabulary/command.js +1 -1
- package/dist/vocabulary/command.js.map +1 -1
- package/dist/vocabulary/project.d.ts +1 -1
- package/dist/vocabulary/project.d.ts.map +1 -1
- package/package.json +4 -3
- package/skills/cli-memo/SKILL.md +11 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../src/mail/command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAC1D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AA4ExC,eAAO,MAAM,WAAW,YAAa,OAAO,WAAW,OAAO,OAAO,MAAM,CAAC,UAAU,KAAG,IA+FxF,CAAA"}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
import { CliError } from "@wirecat/cli-base";
|
|
2
|
+
import { loadConfig, updateConfig } from "../config.js";
|
|
3
|
+
import { positive } from "../options.js";
|
|
4
|
+
import { printing } from "../records/run.js";
|
|
5
|
+
import { mailAccounts, mailFolders, mailSource } from "./accounts.js";
|
|
6
|
+
import { probeMail, SUGGEST_RULE } from "./probe.js";
|
|
7
|
+
import { sameMatch } from "./rules.js";
|
|
8
|
+
const accountOf = (config, name) => mailAccounts(config.mail?.accounts ?? [], [name])[0];
|
|
9
|
+
const matchOf = ({ from, domain, listId }) => {
|
|
10
|
+
const given = [from, domain, listId].filter((value) => value !== undefined);
|
|
11
|
+
if (given.length !== 1)
|
|
12
|
+
throw new CliError("validation_error", "give exactly one of --from, --domain, --list-id");
|
|
13
|
+
return from !== undefined ? { from } : domain !== undefined ? { domain } : { listId: listId };
|
|
14
|
+
};
|
|
15
|
+
const describe = (match) => match.from !== undefined
|
|
16
|
+
? `from ${match.from}`
|
|
17
|
+
: match.domain !== undefined
|
|
18
|
+
? `domain ${match.domain}`
|
|
19
|
+
: `list-id ${match.listId}`;
|
|
20
|
+
const ruleLine = (rule) => [rule.action.padEnd(4), describe(rule.match), rule.decidedAt.slice(0, 10), rule.reason ?? ""].join(" ").trimEnd();
|
|
21
|
+
const changeRules = (env, name, change) => {
|
|
22
|
+
let changed = [];
|
|
23
|
+
updateConfig((config) => {
|
|
24
|
+
const account = accountOf(config, name);
|
|
25
|
+
changed = change(account.rules ?? []);
|
|
26
|
+
const accounts = (config.mail?.accounts ?? []).map((each) => each === account ? { ...each, rules: changed } : each);
|
|
27
|
+
return { ...config, mail: { ...config.mail, accounts } };
|
|
28
|
+
}, env);
|
|
29
|
+
return changed;
|
|
30
|
+
};
|
|
31
|
+
const megabytes = (bytes) => (bytes / 1024 / 1024).toFixed(1);
|
|
32
|
+
const percent = (value) => (value === null ? "?" : `${Math.round(value * 100)}%`);
|
|
33
|
+
const probeText = (probe) => {
|
|
34
|
+
const rows = probe.items.map((group) => [
|
|
35
|
+
String(group.emails),
|
|
36
|
+
megabytes(group.bytes),
|
|
37
|
+
percent(group.unread),
|
|
38
|
+
percent(group.bulk),
|
|
39
|
+
group.firstYear === group.lastYear ? String(group.firstYear) : `${group.firstYear}-${group.lastYear}`,
|
|
40
|
+
group.replied ? "yes" : "no",
|
|
41
|
+
group.suggest ?? "",
|
|
42
|
+
group.listId === null ? (group.from ?? "") : `${group.listId} (${group.from ?? "?"})`,
|
|
43
|
+
]);
|
|
44
|
+
const header = ["emails", "MB", "unread", "bulk", "years", "replied", "suggest", "sender or list"];
|
|
45
|
+
const widths = header.map((title, column) => Math.max(title.length, ...rows.map((row) => row[column]?.length ?? 0)));
|
|
46
|
+
const line = (row) => row
|
|
47
|
+
.map((cell, column) => (column < 2 ? cell.padStart(widths[column] ?? 0) : cell.padEnd(widths[column] ?? 0)))
|
|
48
|
+
.join(" ")
|
|
49
|
+
.trimEnd();
|
|
50
|
+
return [
|
|
51
|
+
`${probe.emails} emails, ${megabytes(probe.bytes)} MB, ${probe.groups} groups; ${probe.sent} sent, ` +
|
|
52
|
+
`${probe.withoutHeaders} without readable headers; ${probe.seconds}s`,
|
|
53
|
+
line(header),
|
|
54
|
+
...rows.map(line),
|
|
55
|
+
].join("\n");
|
|
56
|
+
};
|
|
57
|
+
export const mailCommand = (program, streams, env) => {
|
|
58
|
+
const print = printing(streams);
|
|
59
|
+
const mail = program.command("mail").description("look at a mail account before importing it, and the owner's rules");
|
|
60
|
+
mail
|
|
61
|
+
.command("probe")
|
|
62
|
+
.description("group an account's mail by sender and list, to decide what to keep or skip")
|
|
63
|
+
.argument("<account>", "the account's name in mail.accounts, or its address")
|
|
64
|
+
.option("--since-time <time>", "only mail from this time, ISO 8601 or 30d ago (default: all mail)")
|
|
65
|
+
.option("--limit-groups <n>", "show this many of the largest groups", positive, 50)
|
|
66
|
+
.option("--json", "print JSON")
|
|
67
|
+
.addHelpText("after", "\nRead-only and headers only: about 300 bytes per email (From, To, Cc, List-Id, List-Unsubscribe, " +
|
|
68
|
+
"Precedence), against Gmail's daily download limit. An mbox account reads the whole file once.\n\n" +
|
|
69
|
+
`Each group's ${SUGGEST_RULE}. The owner decides; add a rule with memo mail rules add.`)
|
|
70
|
+
.action(async (name, options) => {
|
|
71
|
+
const account = accountOf(loadConfig(env), name);
|
|
72
|
+
const since = new Date(options.sinceTime === undefined
|
|
73
|
+
? 0
|
|
74
|
+
: (await import("@wirecat/cli-core/cli")).momentOf(options.sinceTime, "--since-time"));
|
|
75
|
+
const started = Date.now();
|
|
76
|
+
const source = mailSource(account, env);
|
|
77
|
+
const listed = new Map();
|
|
78
|
+
for (const folder of mailFolders(account))
|
|
79
|
+
for (const item of await source.list(since, folder, { headers: true }))
|
|
80
|
+
listed.set(item.messageId, item);
|
|
81
|
+
const probe = { ...probeMail([...listed.values()], options.limitGroups), seconds: 0 };
|
|
82
|
+
probe.seconds = Math.round((Date.now() - started) / 100) / 10;
|
|
83
|
+
print(options.json, probe, probeText(probe));
|
|
84
|
+
});
|
|
85
|
+
const rules = mail
|
|
86
|
+
.command("rules")
|
|
87
|
+
.description("the owner's decisions on which mail to skip or keep, by sender, domain or list");
|
|
88
|
+
rules
|
|
89
|
+
.command("list")
|
|
90
|
+
.description("one account's rules")
|
|
91
|
+
.argument("<account>", "the account's name in mail.accounts, or its address")
|
|
92
|
+
.option("--json", "print JSON")
|
|
93
|
+
.action((name, options) => {
|
|
94
|
+
const items = accountOf(loadConfig(env), name).rules ?? [];
|
|
95
|
+
print(options.json, { items }, items.map(ruleLine).join("\n") || "no rules");
|
|
96
|
+
});
|
|
97
|
+
rules
|
|
98
|
+
.command("add")
|
|
99
|
+
.description("skip or keep mail by sender, domain or list; a repeated match replaces its rule")
|
|
100
|
+
.argument("<account>", "the account's name in mail.accounts, or its address")
|
|
101
|
+
.option("--from <address>", "one sender address")
|
|
102
|
+
.option("--domain <domain>", "a sender domain, and its subdomains")
|
|
103
|
+
.option("--list-id <id>", "a mailing list, by its List-Id")
|
|
104
|
+
.option("--skip", "never import this mail")
|
|
105
|
+
.option("--keep", "import this mail even when a skip rule matches it")
|
|
106
|
+
.option("--reason <text>", "why, for the owner later")
|
|
107
|
+
.option("--json", "print JSON")
|
|
108
|
+
.addHelpText("after", "\nA keep wins over a skip, so --keep --from one sender overrides --skip --domain of its domain. " +
|
|
109
|
+
"A skipped email is never read or stored by memo sync; mail already stored stays.")
|
|
110
|
+
.action((name, options) => {
|
|
111
|
+
const match = matchOf(options);
|
|
112
|
+
if (Boolean(options.skip) === Boolean(options.keep))
|
|
113
|
+
throw new CliError("validation_error", "give exactly one of --skip, --keep");
|
|
114
|
+
const rule = {
|
|
115
|
+
match,
|
|
116
|
+
action: options.skip ? "skip" : "keep",
|
|
117
|
+
...(options.reason === undefined ? {} : { reason: options.reason }),
|
|
118
|
+
decidedAt: new Date().toISOString(),
|
|
119
|
+
};
|
|
120
|
+
changeRules(env, name, (current) => [...current.filter((each) => !sameMatch(each.match, match)), rule]);
|
|
121
|
+
print(options.json, rule, ruleLine(rule));
|
|
122
|
+
});
|
|
123
|
+
rules
|
|
124
|
+
.command("remove")
|
|
125
|
+
.description("drop the rule for a sender, domain or list")
|
|
126
|
+
.argument("<account>", "the account's name in mail.accounts, or its address")
|
|
127
|
+
.option("--from <address>", "one sender address")
|
|
128
|
+
.option("--domain <domain>", "a sender domain")
|
|
129
|
+
.option("--list-id <id>", "a mailing list, by its List-Id")
|
|
130
|
+
.option("--json", "print JSON")
|
|
131
|
+
.action((name, options) => {
|
|
132
|
+
const match = matchOf(options);
|
|
133
|
+
if (!(accountOf(loadConfig(env), name).rules ?? []).some((rule) => sameMatch(rule.match, match)))
|
|
134
|
+
throw new CliError("not_found", `no rule for ${describe(match)}; memo mail rules list ${name} shows them`);
|
|
135
|
+
const left = changeRules(env, name, (current) => current.filter((rule) => !sameMatch(rule.match, match)));
|
|
136
|
+
print(options.json, { removed: match, items: left }, `removed the rule for ${describe(match)}`);
|
|
137
|
+
});
|
|
138
|
+
};
|
|
139
|
+
//# sourceMappingURL=command.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command.js","sourceRoot":"","sources":["../../src/mail/command.ts"],"names":[],"mappings":"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"}
|
package/dist/mail/gmail.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type MailHeaders } from "./headers.js";
|
|
1
2
|
import type { Himalaya } from "./himalaya.js";
|
|
2
3
|
export interface Listed {
|
|
3
4
|
uid: string;
|
|
@@ -6,21 +7,25 @@ export interface Listed {
|
|
|
6
7
|
threadId: string;
|
|
7
8
|
receivedAt: string;
|
|
8
9
|
folder?: string;
|
|
9
|
-
scopeFolder?: string;
|
|
10
10
|
/** Gmail labels, plain names; absent when the answer could not be read, so nothing is changed. */
|
|
11
11
|
labels?: string[];
|
|
12
12
|
seen?: boolean;
|
|
13
13
|
flagged?: boolean;
|
|
14
|
+
/** RFC822.SIZE in bytes, to size fetch batches. */
|
|
15
|
+
size?: number;
|
|
16
|
+
/** Read only when asked for; absent when not asked or unreadable, so no rule applies to it. */
|
|
17
|
+
headers?: MailHeaders;
|
|
14
18
|
}
|
|
15
19
|
/** IMAP's modified UTF-7 (RFC 3501 §5.1.3): `&` opens base64 of UTF-16BE, `,` stands for `/`, `-` closes. */
|
|
16
20
|
export declare const decodeMailboxName: (name: string) => string;
|
|
21
|
+
export declare const systemLabel: (name: string) => string;
|
|
17
22
|
/** A label as people read it: `\\Important` and `Important` are one label, and names are decoded. */
|
|
18
23
|
export declare const labelName: (raw: string) => string;
|
|
19
24
|
/**
|
|
20
25
|
* Every message in All Mail received since `since`, read with EXAMINE so nothing can change a flag.
|
|
21
26
|
* All Mail rather than INBOX: an archived message leaves INBOX but is not deleted.
|
|
22
27
|
*/
|
|
23
|
-
export declare const listAllMail: (run: Himalaya, account: string, since: Date, folder?: string) => Promise<Listed[]>;
|
|
28
|
+
export declare const listAllMail: (run: Himalaya, account: string, since: Date, folder?: string, headers?: boolean) => Promise<Listed[]>;
|
|
24
29
|
/** Message-ID is stable across folders; absent headers fall back to a UIDVALIDITY-scoped identity. */
|
|
25
30
|
export declare const listImapMail: (run: Himalaya, account: string, since: Date, folder: string) => Promise<Listed[]>;
|
|
26
31
|
//# sourceMappingURL=gmail.d.ts.map
|
package/dist/mail/gmail.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gmail.d.ts","sourceRoot":"","sources":["../../src/mail/gmail.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAE7C,MAAM,WAAW,MAAM;IACrB,GAAG,EAAE,MAAM,CAAA;IACX,+EAA+E;IAC/E,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,UAAU,EAAE,MAAM,CAAA;IAClB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,
|
|
1
|
+
{"version":3,"file":"gmail.d.ts","sourceRoot":"","sources":["../../src/mail/gmail.ts"],"names":[],"mappings":"AAEA,OAAO,EAA4B,KAAK,WAAW,EAAE,MAAM,cAAc,CAAA;AACzE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAE7C,MAAM,WAAW,MAAM;IACrB,GAAG,EAAE,MAAM,CAAA;IACX,+EAA+E;IAC/E,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,UAAU,EAAE,MAAM,CAAA;IAClB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,kGAAkG;IAClG,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;IACjB,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,mDAAmD;IACnD,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,+FAA+F;IAC/F,OAAO,CAAC,EAAE,WAAW,CAAA;CACtB;AAcD,6GAA6G;AAC7G,eAAO,MAAM,iBAAiB,SAAU,MAAM,KAAG,MAO7C,CAAA;AA2BJ,eAAO,MAAM,WAAW,SAAU,MAAM,KAAG,MAAmD,CAAA;AAE9F,qGAAqG;AACrG,eAAO,MAAM,SAAS,QAAS,MAAM,KAAG,MAGvC,CAAA;AAmDD;;;GAGG;AACH,eAAO,MAAM,WAAW,QACjB,QAAQ,WACJ,MAAM,SACR,IAAI,yCAGV,OAAO,CAAC,MAAM,EAAE,CA6ElB,CAAA;AAED,sGAAsG;AACtG,eAAO,MAAM,YAAY,QAAe,QAAQ,WAAW,MAAM,SAAS,IAAI,UAAU,MAAM,KAAG,OAAO,CAAC,MAAM,EAAE,CA8DhH,CAAA"}
|
package/dist/mail/gmail.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { createHash } from "node:crypto";
|
|
2
2
|
import { CliError } from "@wirecat/cli-base";
|
|
3
|
+
import { HEADER_FIELDS, headersOf } from "./headers.js";
|
|
3
4
|
const SYSTEM_LABELS = {
|
|
4
5
|
inbox: "Inbox",
|
|
5
6
|
sent: "Sent",
|
|
@@ -52,13 +53,29 @@ const imapList = (items, name) => {
|
|
|
52
53
|
}
|
|
53
54
|
return undefined;
|
|
54
55
|
};
|
|
56
|
+
export const systemLabel = (name) => SYSTEM_LABELS[name.toLowerCase()] ?? name;
|
|
55
57
|
/** A label as people read it: `\\Important` and `Important` are one label, and names are decoded. */
|
|
56
58
|
export const labelName = (raw) => {
|
|
57
59
|
const system = raw.startsWith("\\") ? raw.slice(1) : raw;
|
|
58
60
|
return SYSTEM_LABELS[system.toLowerCase()] ?? decodeMailboxName(system);
|
|
59
61
|
};
|
|
62
|
+
/** One FETCH answer per email, across lines, since a header field comes back as a multi-line literal. */
|
|
63
|
+
const FETCH_ANSWERS = /^\* \d+ FETCH \(([\s\S]*?)(?=^\* \d+ FETCH|^[a-z]\d* (?:OK|NO|BAD)|$(?![\s\S]))/gm;
|
|
64
|
+
/** Each answer's UID and header text; the UID is looked for outside the literal, so a header cannot fake it. */
|
|
65
|
+
const fetchedHeaders = (output) => [...output.matchAll(FETCH_ANSWERS)].flatMap(([, fields = ""]) => {
|
|
66
|
+
const literal = /\{\d+\}\r?\n/.exec(fields);
|
|
67
|
+
if (literal === null)
|
|
68
|
+
return [];
|
|
69
|
+
const start = literal.index + literal[0].length;
|
|
70
|
+
const blank = fields.slice(start).search(/\r?\n\r?\n/);
|
|
71
|
+
const end = blank === -1 ? fields.length : start + blank;
|
|
72
|
+
const uid = /(?:^|\s)UID (\d+)/.exec(`${fields.slice(0, literal.index)} ${fields.slice(end)}`)?.[1];
|
|
73
|
+
return uid === undefined ? [] : [[uid, fields.slice(start, end)]];
|
|
74
|
+
});
|
|
60
75
|
const MONTHS = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
|
|
61
76
|
const FETCH_BATCH = 500;
|
|
77
|
+
/** One himalaya call reads its whole answer into memory, so a mailbox of 300,000+ emails is listed in parts. */
|
|
78
|
+
const CALL_UIDS = 10_000;
|
|
62
79
|
const imapDate = (day) => `${day.getUTCDate()}-${MONTHS[day.getUTCMonth()]}-${day.getUTCFullYear()}`;
|
|
63
80
|
/** IMAP's `INTERNALDATE`: `"04-Oct-2026 19:51:09 +0000"`. */
|
|
64
81
|
const isoOf = (internal) => {
|
|
@@ -83,7 +100,7 @@ const assertCompleted = (output, tags) => {
|
|
|
83
100
|
* Every message in All Mail received since `since`, read with EXAMINE so nothing can change a flag.
|
|
84
101
|
* All Mail rather than INBOX: an archived message leaves INBOX but is not deleted.
|
|
85
102
|
*/
|
|
86
|
-
export const listAllMail = async (run, account, since, folder = "[Gmail]/All Mail") => {
|
|
103
|
+
export const listAllMail = async (run, account, since, folder = "[Gmail]/All Mail", headers = false) => {
|
|
87
104
|
if (/[\r\n]/.test(folder) || folder.includes(String.fromCharCode(0)))
|
|
88
105
|
throw new CliError("validation_error", "invalid mailbox name");
|
|
89
106
|
const mailbox = JSON.stringify(folder);
|
|
@@ -92,43 +109,62 @@ export const listAllMail = async (run, account, since, folder = "[Gmail]/All Mai
|
|
|
92
109
|
const uids = (/^\* SEARCH(.*)$/m.exec(search)?.[1] ?? "").trim().split(/\s+/).filter(Boolean);
|
|
93
110
|
if (uids.length === 0)
|
|
94
111
|
return [];
|
|
95
|
-
const
|
|
96
|
-
for (let start = 0; start < uids.length; start += FETCH_BATCH)
|
|
97
|
-
batches.push(uids.slice(start, start + FETCH_BATCH).join(","));
|
|
98
|
-
const tags = batches.map((_, index) => `f${index}`);
|
|
99
|
-
const fetched = await run(["imap", "raw", "-a", account], `a EXAMINE ${mailbox}\r\n${batches
|
|
100
|
-
.map((set, index) => `${tags[index]} UID FETCH ${set} (UID X-GM-MSGID X-GM-THRID INTERNALDATE)\r\n`)
|
|
101
|
-
.join("")}`);
|
|
102
|
-
assertCompleted(fetched, ["a", ...tags]);
|
|
103
|
-
const listed = [...fetched.matchAll(/^\* \d+ FETCH \((.*)\)\s*$/gm)].map(([, items = ""]) => {
|
|
104
|
-
const item = (name) => new RegExp(`${name} (\\d+)`).exec(items)?.[1];
|
|
105
|
-
const internal = /INTERNALDATE "([^"]+)"/.exec(items)?.[1];
|
|
106
|
-
const uid = item("UID");
|
|
107
|
-
const messageId = item("X-GM-MSGID");
|
|
108
|
-
const threadId = item("X-GM-THRID");
|
|
109
|
-
if (!uid || !messageId || !threadId || !internal)
|
|
110
|
-
throw new CliError("invalid_response", `IMAP FETCH answer without the Gmail ids: ${items}`);
|
|
111
|
-
return { uid, messageId, threadId, receivedAt: isoOf(internal) };
|
|
112
|
-
});
|
|
113
|
-
if (listed.length !== uids.length)
|
|
114
|
-
throw new CliError("invalid_response", `IMAP listed ${uids.length} messages but fetched ${listed.length}`);
|
|
115
|
-
// A separate answer, so a label the parser cannot read costs that message its labels, never the listing.
|
|
116
|
-
const labelled = await run(["imap", "raw", "-a", account], `a EXAMINE ${mailbox}\r\n${batches
|
|
117
|
-
.map((set, index) => `l${index} UID FETCH ${set} (UID X-GM-LABELS FLAGS)\r\n`)
|
|
118
|
-
.join("")}`);
|
|
112
|
+
const listed = [];
|
|
119
113
|
const marks = new Map();
|
|
120
|
-
for (
|
|
121
|
-
const
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
114
|
+
for (let from = 0; from < uids.length; from += CALL_UIDS) {
|
|
115
|
+
const batches = [];
|
|
116
|
+
for (let start = from; start < Math.min(from + CALL_UIDS, uids.length); start += FETCH_BATCH)
|
|
117
|
+
batches.push(uids.slice(start, start + FETCH_BATCH).join(","));
|
|
118
|
+
const tags = batches.map((_, index) => `f${index}`);
|
|
119
|
+
const fetched = await run(["imap", "raw", "-a", account], `a EXAMINE ${mailbox}\r\n${batches
|
|
120
|
+
.map((set, index) => `${tags[index]} UID FETCH ${set} (UID X-GM-MSGID X-GM-THRID INTERNALDATE RFC822.SIZE)\r\n`)
|
|
121
|
+
.join("")}`);
|
|
122
|
+
assertCompleted(fetched, ["a", ...tags]);
|
|
123
|
+
for (const [, items = ""] of fetched.matchAll(/^\* \d+ FETCH \((.*)\)\s*$/gm)) {
|
|
124
|
+
const item = (name) => new RegExp(`${name} (\\d+)`).exec(items)?.[1];
|
|
125
|
+
const internal = /INTERNALDATE "([^"]+)"/.exec(items)?.[1];
|
|
126
|
+
const uid = item("UID");
|
|
127
|
+
const messageId = item("X-GM-MSGID");
|
|
128
|
+
const threadId = item("X-GM-THRID");
|
|
129
|
+
const size = item("RFC822\\.SIZE");
|
|
130
|
+
if (!uid || !messageId || !threadId || !internal)
|
|
131
|
+
throw new CliError("invalid_response", `IMAP FETCH answer without the Gmail ids: ${items}`);
|
|
132
|
+
listed.push({
|
|
133
|
+
uid,
|
|
134
|
+
messageId,
|
|
135
|
+
threadId,
|
|
136
|
+
receivedAt: isoOf(internal),
|
|
137
|
+
...(size === undefined ? {} : { size: Number(size) }),
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
// A separate answer, so a label the parser cannot read costs that message its labels, never the listing.
|
|
141
|
+
const labelled = await run(["imap", "raw", "-a", account], `a EXAMINE ${mailbox}\r\n${batches
|
|
142
|
+
.map((set, index) => `l${index} UID FETCH ${set} (UID X-GM-LABELS FLAGS)\r\n`)
|
|
143
|
+
.join("")}`);
|
|
144
|
+
for (const [, items = ""] of labelled.matchAll(/^\* \d+ FETCH \((.*)\)\s*$/gm)) {
|
|
145
|
+
const uid = /(?:^|\s)UID (\d+)/.exec(items)?.[1];
|
|
146
|
+
const labels = imapList(items, "X-GM-LABELS");
|
|
147
|
+
const flags = imapList(items, "FLAGS");
|
|
148
|
+
if (!uid || labels === undefined || flags === undefined)
|
|
149
|
+
continue;
|
|
150
|
+
const flagged = flags.includes("\\Flagged");
|
|
151
|
+
const names = new Set(labels.map(labelName));
|
|
152
|
+
if (flagged)
|
|
153
|
+
names.add("Starred");
|
|
154
|
+
marks.set(uid, { labels: [...names].sort(), seen: flags.includes("\\Seen"), flagged });
|
|
155
|
+
}
|
|
156
|
+
if (headers) {
|
|
157
|
+
const headed = await run(["imap", "raw", "-a", account], `a EXAMINE ${mailbox}\r\n${batches
|
|
158
|
+
.map((set, index) => `h${index} UID FETCH ${set} (UID BODY.PEEK[HEADER.FIELDS (${HEADER_FIELDS})])\r\n`)
|
|
159
|
+
.join("")}`);
|
|
160
|
+
// A refused fetch would leave a whole batch without headers, and rules would not keep its mail out.
|
|
161
|
+
assertCompleted(headed, ["a", ...batches.map((_, index) => `h${index}`)]);
|
|
162
|
+
for (const [uid, text] of fetchedHeaders(headed))
|
|
163
|
+
marks.set(uid, { ...marks.get(uid), headers: headersOf(text) });
|
|
164
|
+
}
|
|
131
165
|
}
|
|
166
|
+
if (listed.length !== uids.length)
|
|
167
|
+
throw new CliError("invalid_response", `IMAP listed ${uids.length} messages but fetched ${listed.length}`);
|
|
132
168
|
return listed.map((item) => ({ ...item, ...marks.get(item.uid) }));
|
|
133
169
|
};
|
|
134
170
|
/** Message-ID is stable across folders; absent headers fall back to a UIDVALIDITY-scoped identity. */
|
|
@@ -149,7 +185,7 @@ export const listImapMail = async (run, account, since, folder) => {
|
|
|
149
185
|
for (let start = 0; start < uids.length; start += FETCH_BATCH) {
|
|
150
186
|
const batch = uids.slice(start, start + FETCH_BATCH);
|
|
151
187
|
const before = listed.length;
|
|
152
|
-
const output = await run(["imap", "raw", "-a", account], `a EXAMINE ${mailbox}\r\nf UID FETCH ${batch.join(",")} (UID FLAGS INTERNALDATE BODY.PEEK[HEADER.FIELDS (MESSAGE-ID REFERENCES IN-REPLY-TO)])\r\n`);
|
|
188
|
+
const output = await run(["imap", "raw", "-a", account], `a EXAMINE ${mailbox}\r\nf UID FETCH ${batch.join(",")} (UID FLAGS INTERNALDATE RFC822.SIZE BODY.PEEK[HEADER.FIELDS (MESSAGE-ID REFERENCES IN-REPLY-TO ${HEADER_FIELDS})])\r\n`);
|
|
153
189
|
assertCompleted(output, ["a", "f"]);
|
|
154
190
|
for (const match of output.matchAll(/^\* \d+ FETCH \(([\s\S]*?)(?=^\* \d+ FETCH|^[af] (?:OK|NO|BAD)|$(?![\s\S]))/gm)) {
|
|
155
191
|
const fields = match[1] ?? "", uid = /(?:^|\s)UID (\d+)/.exec(fields)?.[1], internal = /INTERNALDATE "([^"]+)"/.exec(fields)?.[1];
|
|
@@ -161,12 +197,15 @@ export const listImapMail = async (run, account, since, folder) => {
|
|
|
161
197
|
const parent = /^In-Reply-To:\s*(<[^>]+>)/im.exec(unfolded)?.[1];
|
|
162
198
|
const identity = messageId ?? `uid:${folder}:${validity}:${uid}`;
|
|
163
199
|
const flags = imapList(fields, "FLAGS");
|
|
200
|
+
const size = /RFC822\.SIZE (\d+)/.exec(fields)?.[1];
|
|
164
201
|
listed.push({
|
|
165
202
|
uid,
|
|
203
|
+
...(size === undefined ? {} : { size: Number(size) }),
|
|
166
204
|
messageId: digest(identity),
|
|
167
205
|
threadId: digest(refs?.[0] ?? parent ?? identity),
|
|
168
206
|
receivedAt: isoOf(internal),
|
|
169
207
|
folder,
|
|
208
|
+
headers: headersOf(unfolded),
|
|
170
209
|
// IMAP has no labels; a flagged message is Starred, as in Gmail, so one search finds both.
|
|
171
210
|
...(flags === undefined
|
|
172
211
|
? {}
|
package/dist/mail/gmail.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gmail.js","sourceRoot":"","sources":["../../src/mail/gmail.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"gmail.js","sourceRoot":"","sources":["../../src/mail/gmail.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/** The header fields memo reads at list time: enough to group mail by sender and apply the owner's rules. */
|
|
2
|
+
export declare const HEADER_FIELDS = "FROM TO CC LIST-ID LIST-UNSUBSCRIBE PRECEDENCE";
|
|
3
|
+
export interface MailHeaders {
|
|
4
|
+
/** The sender's address, lower case; absent when From holds none. */
|
|
5
|
+
from?: string;
|
|
6
|
+
/** To and Cc addresses, lower case. */
|
|
7
|
+
to: string[];
|
|
8
|
+
listId?: string;
|
|
9
|
+
/** List-Id, List-Unsubscribe or `Precedence: bulk|list|junk`: mail sent to many, not written to one. */
|
|
10
|
+
bulk: boolean;
|
|
11
|
+
}
|
|
12
|
+
export declare const unfold: (text: string) => string;
|
|
13
|
+
export declare const field: (unfolded: string, name: string) => string | undefined;
|
|
14
|
+
export declare const addressesOf: (value: string | undefined) => string[];
|
|
15
|
+
/** The header fields of one email, from its header text. */
|
|
16
|
+
export declare const headersOf: (text: string) => MailHeaders;
|
|
17
|
+
//# sourceMappingURL=headers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"headers.d.ts","sourceRoot":"","sources":["../../src/mail/headers.ts"],"names":[],"mappings":"AAAA,6GAA6G;AAC7G,eAAO,MAAM,aAAa,mDAAmD,CAAA;AAE7E,MAAM,WAAW,WAAW;IAC1B,qEAAqE;IACrE,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,uCAAuC;IACvC,EAAE,EAAE,MAAM,EAAE,CAAA;IACZ,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,wGAAwG;IACxG,IAAI,EAAE,OAAO,CAAA;CACd;AAED,eAAO,MAAM,MAAM,SAAU,MAAM,KAAG,MAA2C,CAAA;AAEjF,eAAO,MAAM,KAAK,aAAc,MAAM,QAAQ,MAAM,KAAG,MAAM,GAAG,SACI,CAAA;AAEpE,eAAO,MAAM,WAAW,UAAW,MAAM,GAAG,SAAS,KAAG,MAAM,EAK7D,CAAA;AAED,4DAA4D;AAC5D,eAAO,MAAM,SAAS,SAAU,MAAM,KAAG,WAexC,CAAA"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/** The header fields memo reads at list time: enough to group mail by sender and apply the owner's rules. */
|
|
2
|
+
export const HEADER_FIELDS = "FROM TO CC LIST-ID LIST-UNSUBSCRIBE PRECEDENCE";
|
|
3
|
+
export const unfold = (text) => text.replace(/\r?\n[ \t]+/g, " ");
|
|
4
|
+
export const field = (unfolded, name) => new RegExp(`^${name}:[ \\t]*(.*?)\\r?$`, "im").exec(unfolded)?.[1];
|
|
5
|
+
export const addressesOf = (value) => {
|
|
6
|
+
if (value === undefined)
|
|
7
|
+
return [];
|
|
8
|
+
const bracketed = [...value.matchAll(/<([^<>\s]+@[^<>\s]+)>/g)].map(([, address]) => address);
|
|
9
|
+
const found = bracketed.length ? bracketed : (value.match(/[^\s<>,;:"()]+@[^\s<>,;:"()]+/g) ?? []);
|
|
10
|
+
return found.map((address) => address.toLowerCase());
|
|
11
|
+
};
|
|
12
|
+
/** The header fields of one email, from its header text. */
|
|
13
|
+
export const headersOf = (text) => {
|
|
14
|
+
const unfolded = unfold(text);
|
|
15
|
+
const [from] = addressesOf(field(unfolded, "From"));
|
|
16
|
+
const rawList = field(unfolded, "List-Id");
|
|
17
|
+
const listId = rawList === undefined ? undefined : (/<([^>]+)>/.exec(rawList)?.[1] ?? rawList).trim().toLowerCase();
|
|
18
|
+
const bulk = Boolean(listId) ||
|
|
19
|
+
field(unfolded, "List-Unsubscribe") !== undefined ||
|
|
20
|
+
/^(bulk|list|junk)\b/i.test(field(unfolded, "Precedence") ?? "");
|
|
21
|
+
return {
|
|
22
|
+
...(from === undefined ? {} : { from }),
|
|
23
|
+
to: [...addressesOf(field(unfolded, "To")), ...addressesOf(field(unfolded, "Cc"))],
|
|
24
|
+
...(listId ? { listId } : {}),
|
|
25
|
+
bulk,
|
|
26
|
+
};
|
|
27
|
+
};
|
|
28
|
+
//# sourceMappingURL=headers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"headers.js","sourceRoot":"","sources":["../../src/mail/headers.ts"],"names":[],"mappings":"AAAA,6GAA6G;AAC7G,MAAM,CAAC,MAAM,aAAa,GAAG,gDAAgD,CAAA;AAY7E,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,IAAY,EAAU,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,GAAG,CAAC,CAAA;AAEjF,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,QAAgB,EAAE,IAAY,EAAsB,EAAE,CAC1E,IAAI,MAAM,CAAC,IAAI,IAAI,oBAAoB,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;AAEpE,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,KAAyB,EAAY,EAAE;IACjE,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,EAAE,CAAA;IAClC,MAAM,SAAS,GAAG,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,wBAAwB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,OAAiB,CAAC,CAAA;IACvG,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,gCAAgC,CAAC,IAAI,EAAE,CAAC,CAAA;IAClG,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAA;AACtD,CAAC,CAAA;AAED,4DAA4D;AAC5D,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,IAAY,EAAe,EAAE;IACrD,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,CAAA;IAC7B,MAAM,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAA;IACnD,MAAM,OAAO,GAAG,KAAK,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAA;IAC1C,MAAM,MAAM,GAAG,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;IACnH,MAAM,IAAI,GACR,OAAO,CAAC,MAAM,CAAC;QACf,KAAK,CAAC,QAAQ,EAAE,kBAAkB,CAAC,KAAK,SAAS;QACjD,sBAAsB,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,YAAY,CAAC,IAAI,EAAE,CAAC,CAAA;IAClE,OAAO;QACL,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;QACvC,EAAE,EAAE,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,EAAE,GAAG,WAAW,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC;QAClF,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7B,IAAI;KACL,CAAA;AACH,CAAC,CAAA"}
|
package/dist/mail/himalaya.d.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
export type Himalaya = (args: string[], input?: string
|
|
1
|
+
export type Himalaya = (args: string[], input?: string, options?: {
|
|
2
|
+
maxBuffer?: number;
|
|
3
|
+
}) => Promise<string>;
|
|
2
4
|
/** `MEMO_HIMALAYA` names the program, so the test sandbox can point it at a fake. */
|
|
3
5
|
export declare const himalaya: (env?: NodeJS.ProcessEnv) => Himalaya;
|
|
4
6
|
//# sourceMappingURL=himalaya.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"himalaya.d.ts","sourceRoot":"","sources":["../../src/mail/himalaya.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,QAAQ,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"himalaya.d.ts","sourceRoot":"","sources":["../../src/mail/himalaya.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,QAAQ,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,KAAK,OAAO,CAAC,MAAM,CAAC,CAAA;AAE5G,qFAAqF;AACrF,eAAO,MAAM,QAAQ,SACb,MAAM,CAAC,UAAU,KAAiB,QAgBpC,CAAA"}
|
package/dist/mail/himalaya.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { execFile } from "node:child_process";
|
|
2
2
|
import { CliError } from "@wirecat/cli-base";
|
|
3
3
|
/** `MEMO_HIMALAYA` names the program, so the test sandbox can point it at a fake. */
|
|
4
|
-
export const himalaya = (env = process.env) => (args, input) => new Promise((resolve, reject) => {
|
|
5
|
-
const child = execFile(env.MEMO_HIMALAYA ?? "himalaya", args, { env, maxBuffer: 64 * 1024 * 1024 }, (error, stdout, stderr) => {
|
|
4
|
+
export const himalaya = (env = process.env) => (args, input, options) => new Promise((resolve, reject) => {
|
|
5
|
+
const child = execFile(env.MEMO_HIMALAYA ?? "himalaya", args, { env, maxBuffer: options?.maxBuffer ?? 64 * 1024 * 1024 }, (error, stdout, stderr) => {
|
|
6
6
|
if (error === null)
|
|
7
7
|
resolve(stdout);
|
|
8
8
|
else
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"himalaya.js","sourceRoot":"","sources":["../../src/mail/himalaya.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAI5C,qFAAqF;AACrF,MAAM,CAAC,MAAM,QAAQ,GACnB,CAAC,GAAG,GAAsB,OAAO,CAAC,GAAG,EAAY,EAAE,CACnD,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,
|
|
1
|
+
{"version":3,"file":"himalaya.js","sourceRoot":"","sources":["../../src/mail/himalaya.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAI5C,qFAAqF;AACrF,MAAM,CAAC,MAAM,QAAQ,GACnB,CAAC,GAAG,GAAsB,OAAO,CAAC,GAAG,EAAY,EAAE,CACnD,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,CACvB,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;IAC9B,MAAM,KAAK,GAAG,QAAQ,CACpB,GAAG,CAAC,aAAa,IAAI,UAAU,EAC/B,IAAI,EACJ,EAAE,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,IAAI,EAAE,GAAG,IAAI,GAAG,IAAI,EAAE,EAC1D,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;QACxB,IAAI,KAAK,KAAK,IAAI;YAAE,OAAO,CAAC,MAAM,CAAC,CAAA;;YAEjC,MAAM,CACJ,IAAI,QAAQ,CAAC,gBAAgB,EAAE,YAAY,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,YAAY,MAAM,CAAC,IAAI,EAAE,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC,CACtG,CAAA;IACL,CAAC,CACF,CAAA;IACD,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,CAAA;AAC/B,CAAC,CAAC,CAAA"}
|
package/dist/mail/import.d.ts
CHANGED
|
@@ -1,15 +1,17 @@
|
|
|
1
|
-
import { type LoadEngine } from "@wirecat/cli-
|
|
2
|
-
import type { MessageStore } from "@wirecat/cli-
|
|
1
|
+
import { type LoadEngine } from "@wirecat/cli-core/documents";
|
|
2
|
+
import type { MessageStore } from "@wirecat/cli-core/store";
|
|
3
3
|
import { embedChanged, embedMailChunks, type NotesEmbedded } from "../notes/embed.js";
|
|
4
|
-
import type
|
|
4
|
+
import { type MailRule } from "./rules.js";
|
|
5
|
+
import type { MailSource } from "./source.js";
|
|
5
6
|
export interface MailAccount {
|
|
6
7
|
/** The account's name in Himalaya's config. */
|
|
7
8
|
name: string;
|
|
8
9
|
/** The mailbox address: the store's account id. */
|
|
9
10
|
address: string;
|
|
10
|
-
mode?: "gmail" | "imap";
|
|
11
|
+
mode?: "gmail" | "imap" | "mbox";
|
|
11
12
|
folders?: string[];
|
|
12
13
|
embed?: boolean;
|
|
14
|
+
rules?: MailRule[];
|
|
13
15
|
}
|
|
14
16
|
export interface ImportResult {
|
|
15
17
|
account: string;
|
|
@@ -17,9 +19,16 @@ export interface ImportResult {
|
|
|
17
19
|
listed: number;
|
|
18
20
|
saved: number;
|
|
19
21
|
alreadyStored: number;
|
|
22
|
+
/** New emails a skip rule kept out: never read, never stored. */
|
|
23
|
+
skipped: number;
|
|
20
24
|
deleted: number;
|
|
21
25
|
/** False when `max` stopped the run before every new message was read; the next run continues. */
|
|
22
26
|
complete: boolean;
|
|
27
|
+
/** Emails that could not be read or parsed; they are tried again next run. */
|
|
28
|
+
unreadable?: {
|
|
29
|
+
message: string;
|
|
30
|
+
reason: string;
|
|
31
|
+
}[];
|
|
23
32
|
/** Why stored messages missing at the source were left alone, when they were. */
|
|
24
33
|
deletionsSkipped?: string;
|
|
25
34
|
indexed?: NotesEmbedded;
|
|
@@ -37,9 +46,9 @@ export interface ImportResult {
|
|
|
37
46
|
}[];
|
|
38
47
|
}
|
|
39
48
|
export declare const MAX_ATTACHMENT_CHARS = 200000;
|
|
40
|
-
export declare const importMail: ({ store,
|
|
49
|
+
export declare const importMail: ({ store, source, account, since, max, maxBodyChars, maxAttachmentChars, now, env, embed, loadEngine, retryAttachments, indexThreads, embedMail, }: {
|
|
41
50
|
store: MessageStore;
|
|
42
|
-
|
|
51
|
+
source: MailSource;
|
|
43
52
|
account: MailAccount;
|
|
44
53
|
since: Date;
|
|
45
54
|
max?: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"import.d.ts","sourceRoot":"","sources":["../../src/mail/import.ts"],"names":[],"mappings":"AAAA,OAAO,EAA6B,KAAK,UAAU,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"import.d.ts","sourceRoot":"","sources":["../../src/mail/import.ts"],"names":[],"mappings":"AAAA,OAAO,EAA6B,KAAK,UAAU,EAAE,MAAM,6BAA6B,CAAA;AACxF,OAAO,KAAK,EAA6C,YAAY,EAAE,MAAM,yBAAyB,CAAA;AACtG,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,KAAK,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAIrF,OAAO,EAAU,KAAK,QAAQ,EAAE,MAAM,YAAY,CAAA;AAClD,OAAO,KAAK,EAAU,UAAU,EAAE,MAAM,aAAa,CAAA;AAErD,MAAM,WAAW,WAAW;IAC1B,+CAA+C;IAC/C,IAAI,EAAE,MAAM,CAAA;IACZ,mDAAmD;IACnD,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,CAAA;IAChC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;IAClB,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,KAAK,CAAC,EAAE,QAAQ,EAAE,CAAA;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;IACb,aAAa,EAAE,MAAM,CAAA;IACrB,iEAAiE;IACjE,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;IACf,kGAAkG;IAClG,QAAQ,EAAE,OAAO,CAAA;IACjB,8EAA8E;IAC9E,UAAU,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;IAClD,iFAAiF;IACjF,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,OAAO,CAAC,EAAE,aAAa,CAAA;IACvB,QAAQ,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,EAAE,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,QAAQ,GAAG,SAAS,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAA;IAC7G,WAAW,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;CAClE;AAKD,eAAO,MAAM,oBAAoB,SAAU,CAAA;AAM3C,eAAO,MAAM,UAAU,sJAepB;IACD,KAAK,EAAE,YAAY,CAAA;IACnB,MAAM,EAAE,UAAU,CAAA;IAClB,OAAO,EAAE,WAAW,CAAA;IACpB,KAAK,EAAE,IAAI,CAAA;IACX,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,GAAG,CAAC,EAAE,MAAM,MAAM,CAAA;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAA;IACvB,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,UAAU,CAAC,EAAE,UAAU,CAAA;IACvB,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,YAAY,CAAC,EAAE,OAAO,YAAY,CAAA;IAClC,SAAS,CAAC,EAAE,OAAO,eAAe,CAAA;CACnC,KAAG,OAAO,CAAC,YAAY,CAqPvB,CAAA"}
|