@wirecat/cli-memo 0.30.0 → 0.32.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 +1 -1
- package/dist/actions/command.d.ts.map +1 -1
- package/dist/actions/command.js +7 -7
- package/dist/actions/command.js.map +1 -1
- package/dist/agents/command.js +3 -3
- package/dist/agents/command.js.map +1 -1
- package/dist/answer.d.ts +23 -0
- package/dist/answer.d.ts.map +1 -0
- package/dist/answer.js +56 -0
- package/dist/answer.js.map +1 -0
- package/dist/answers/command.d.ts.map +1 -1
- package/dist/answers/command.js +6 -13
- package/dist/answers/command.js.map +1 -1
- package/dist/bin/memo.js +16 -2
- package/dist/bin/memo.js.map +1 -1
- package/dist/config.d.ts +8 -4
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +15 -7
- package/dist/config.js.map +1 -1
- package/dist/context/command.d.ts +1 -1
- package/dist/context/command.d.ts.map +1 -1
- package/dist/context/command.js +6 -14
- package/dist/context/command.js.map +1 -1
- package/dist/discovery/command.d.ts +1 -1
- package/dist/discovery/command.js +1 -1
- package/dist/doctor/command.d.ts +82 -0
- package/dist/doctor/command.d.ts.map +1 -0
- package/dist/doctor/command.js +148 -0
- package/dist/doctor/command.js.map +1 -0
- package/dist/effects.d.ts +6 -1
- package/dist/effects.d.ts.map +1 -1
- package/dist/effects.js +26 -9
- package/dist/effects.js.map +1 -1
- package/dist/examples.d.ts.map +1 -1
- package/dist/examples.js +7 -3
- package/dist/examples.js.map +1 -1
- package/dist/facts/command.d.ts.map +1 -1
- package/dist/facts/command.js +14 -22
- package/dist/facts/command.js.map +1 -1
- package/dist/facts/fact.d.ts +36 -0
- package/dist/facts/fact.d.ts.map +1 -0
- package/dist/facts/fact.js +47 -0
- package/dist/facts/fact.js.map +1 -0
- package/dist/failure.d.ts +5 -7
- package/dist/failure.d.ts.map +1 -1
- package/dist/failure.js +8 -27
- package/dist/failure.js.map +1 -1
- package/dist/knowledge/command.d.ts.map +1 -1
- package/dist/knowledge/command.js +33 -34
- package/dist/knowledge/command.js.map +1 -1
- package/dist/knowledge/meeting-projects-command.d.ts.map +1 -1
- package/dist/knowledge/meeting-projects-command.js +22 -12
- package/dist/knowledge/meeting-projects-command.js.map +1 -1
- package/dist/list-query.d.ts +18 -0
- package/dist/list-query.d.ts.map +1 -0
- package/dist/list-query.js +68 -0
- package/dist/list-query.js.map +1 -0
- package/dist/mail/apply.d.ts.map +1 -1
- package/dist/mail/apply.js +1 -0
- package/dist/mail/apply.js.map +1 -1
- package/dist/mail/command.d.ts.map +1 -1
- package/dist/mail/command.js +133 -108
- package/dist/mail/command.js.map +1 -1
- package/dist/mail/domain-age.d.ts +21 -0
- package/dist/mail/domain-age.d.ts.map +1 -0
- package/dist/mail/domain-age.js +99 -0
- package/dist/mail/domain-age.js.map +1 -0
- package/dist/mail/gmail.d.ts +1 -1
- package/dist/mail/gmail.d.ts.map +1 -1
- package/dist/mail/gmail.js +6 -1
- package/dist/mail/gmail.js.map +1 -1
- package/dist/mail/headers.d.ts +17 -3
- package/dist/mail/headers.d.ts.map +1 -1
- package/dist/mail/headers.js +32 -3
- package/dist/mail/headers.js.map +1 -1
- package/dist/mail/himalaya.d.ts +5 -0
- package/dist/mail/himalaya.d.ts.map +1 -1
- package/dist/mail/himalaya.js +34 -5
- package/dist/mail/himalaya.js.map +1 -1
- package/dist/mail/import.d.ts.map +1 -1
- package/dist/mail/import.js +4 -0
- package/dist/mail/import.js.map +1 -1
- package/dist/mail/messages-command.d.ts.map +1 -1
- package/dist/mail/messages-command.js +7 -13
- package/dist/mail/messages-command.js.map +1 -1
- package/dist/mail/probe.d.ts +7 -1
- package/dist/mail/probe.d.ts.map +1 -1
- package/dist/mail/probe.js +12 -1
- package/dist/mail/probe.js.map +1 -1
- package/dist/mail/resume.js +1 -1
- package/dist/mail/resume.js.map +1 -1
- package/dist/mail/rule-store.d.ts +33 -0
- package/dist/mail/rule-store.d.ts.map +1 -0
- package/dist/mail/rule-store.js +129 -0
- package/dist/mail/rule-store.js.map +1 -0
- package/dist/mail/rules.d.ts +6 -2
- package/dist/mail/rules.d.ts.map +1 -1
- package/dist/mail/rules.js +3 -3
- package/dist/mail/rules.js.map +1 -1
- package/dist/mail/score.d.ts +50 -0
- package/dist/mail/score.d.ts.map +1 -0
- package/dist/mail/score.js +118 -0
- package/dist/mail/score.js.map +1 -0
- package/dist/mcp/knowledge.d.ts.map +1 -1
- package/dist/mcp/knowledge.js +15 -9
- package/dist/mcp/knowledge.js.map +1 -1
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +30 -36
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/task-relations.d.ts.map +1 -1
- package/dist/mcp/task-relations.js +9 -7
- package/dist/mcp/task-relations.js.map +1 -1
- package/dist/mcp/tool.d.ts +3 -2
- package/dist/mcp/tool.d.ts.map +1 -1
- package/dist/mcp/tool.js.map +1 -1
- package/dist/mcp/vocabulary.d.ts.map +1 -1
- package/dist/mcp/vocabulary.js +7 -6
- package/dist/mcp/vocabulary.js.map +1 -1
- package/dist/memories/command.d.ts.map +1 -1
- package/dist/memories/command.js +15 -19
- package/dist/memories/command.js.map +1 -1
- package/dist/memories/memory.d.ts +31 -0
- package/dist/memories/memory.d.ts.map +1 -0
- package/dist/memories/memory.js +43 -0
- package/dist/memories/memory.js.map +1 -0
- package/dist/notes/command.d.ts.map +1 -1
- package/dist/notes/command.js +39 -30
- package/dist/notes/command.js.map +1 -1
- package/dist/notes/embed.d.ts +2 -0
- package/dist/notes/embed.d.ts.map +1 -1
- package/dist/notes/embed.js +8 -0
- package/dist/notes/embed.js.map +1 -1
- package/dist/notes/folders-command.d.ts.map +1 -1
- package/dist/notes/folders-command.js +19 -26
- package/dist/notes/folders-command.js.map +1 -1
- package/dist/notes/search.d.ts.map +1 -1
- package/dist/notes/search.js +2 -8
- package/dist/notes/search.js.map +1 -1
- package/dist/output.d.ts +9 -7
- package/dist/output.d.ts.map +1 -1
- package/dist/output.js +11 -14
- package/dist/output.js.map +1 -1
- package/dist/page.d.ts +2 -5
- package/dist/page.d.ts.map +1 -1
- package/dist/page.js +7 -2
- package/dist/page.js.map +1 -1
- package/dist/people/command.d.ts.map +1 -1
- package/dist/people/command.js +3 -7
- package/dist/people/command.js.map +1 -1
- package/dist/program.d.ts.map +1 -1
- package/dist/program.js +6 -0
- package/dist/program.js.map +1 -1
- package/dist/reasons.d.ts.map +1 -1
- package/dist/reasons.js +12 -0
- package/dist/reasons.js.map +1 -1
- package/dist/run/auto.d.ts +11 -1
- package/dist/run/auto.d.ts.map +1 -1
- package/dist/run/auto.js +46 -18
- package/dist/run/auto.js.map +1 -1
- package/dist/run/import.d.ts.map +1 -1
- package/dist/run/import.js +15 -17
- package/dist/run/import.js.map +1 -1
- package/dist/search/answers.d.ts +16 -0
- package/dist/search/answers.d.ts.map +1 -0
- package/dist/search/answers.js +48 -0
- package/dist/search/answers.js.map +1 -0
- package/dist/search/command.d.ts.map +1 -1
- package/dist/search/command.js +29 -35
- package/dist/search/command.js.map +1 -1
- package/dist/search/hits.d.ts +8 -0
- package/dist/search/hits.d.ts.map +1 -0
- package/dist/search/hits.js +68 -0
- package/dist/search/hits.js.map +1 -0
- package/dist/tags/command.d.ts.map +1 -1
- package/dist/tags/command.js +23 -31
- package/dist/tags/command.js.map +1 -1
- package/dist/tasks/command.d.ts.map +1 -1
- package/dist/tasks/command.js +29 -44
- package/dist/tasks/command.js.map +1 -1
- package/dist/tasks/relations-command.js +4 -4
- package/dist/tasks/relations-command.js.map +1 -1
- package/dist/terminal.d.ts +4 -0
- package/dist/terminal.d.ts.map +1 -0
- package/dist/terminal.js +8 -0
- package/dist/terminal.js.map +1 -0
- package/dist/update.d.ts +26 -0
- package/dist/update.d.ts.map +1 -0
- package/dist/update.js +67 -0
- package/dist/update.js.map +1 -0
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/vocabulary/command.d.ts.map +1 -1
- package/dist/vocabulary/command.js +3 -3
- package/dist/vocabulary/command.js.map +1 -1
- package/package.json +4 -2
- package/skills/cli-memo/SKILL.md +14 -5
- package/dist/records/run.d.ts +0 -7
- package/dist/records/run.d.ts.map +0 -1
- package/dist/records/run.js +0 -24
- package/dist/records/run.js.map +0 -1
package/dist/mail/command.js
CHANGED
|
@@ -1,64 +1,67 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
1
|
+
import { readFileSync } from "node:fs";
|
|
2
|
+
import { CliError } from "@wirecat/cli-base";
|
|
3
|
+
import { momentOf } from "@wirecat/cli-core/cli";
|
|
4
|
+
import { answers, itemAnswer, wholeList, withStore } from "../answer.js";
|
|
5
|
+
import { loadConfig } from "../config.js";
|
|
4
6
|
import { positive } from "../options.js";
|
|
5
|
-
import { metaOf, snakeKeys } from "../output.js";
|
|
6
|
-
import { printing } from "../records/run.js";
|
|
7
7
|
import { withImportLock } from "../run/lock.js";
|
|
8
8
|
import { mailAccounts, mailFolders, mailSource } from "./accounts.js";
|
|
9
9
|
import { applyRules } from "./apply.js";
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
10
|
+
import { knownAges, lookUpAges } from "./domain-age.js";
|
|
11
|
+
import { domainsToAge, probeMail, SUGGEST_RULE } from "./probe.js";
|
|
12
|
+
import { removeRule, ruleCounts, rulesOf, saveRule } from "./rule-store.js";
|
|
13
|
+
import { FREE_MAIL, SCORE_RULE } from "./score.js";
|
|
12
14
|
import { mailStatus, statusText } from "./status.js";
|
|
13
15
|
const accountOf = (config, name) => mailAccounts(config.mail?.accounts ?? [], [name])[0];
|
|
14
16
|
const matchOf = ({ from, domain, listId }) => {
|
|
15
17
|
const given = [from, domain, listId].filter((value) => value !== undefined);
|
|
16
18
|
if (given.length !== 1)
|
|
17
19
|
throw new CliError("validation_error", "give exactly one of --from, --domain, --list-id");
|
|
18
|
-
return from !== undefined ? { from } : domain !== undefined ? { domain } : {
|
|
20
|
+
return from !== undefined ? { from } : domain !== undefined ? { domain } : { list_id: listId };
|
|
19
21
|
};
|
|
20
22
|
const describe = (match) => match.from !== undefined
|
|
21
23
|
? `from ${match.from}`
|
|
22
24
|
: match.domain !== undefined
|
|
23
25
|
? `domain ${match.domain}`
|
|
24
|
-
: `list-id ${match.
|
|
26
|
+
: `list-id ${match.list_id}`;
|
|
25
27
|
const ruleLine = (rule) => [
|
|
26
28
|
rule.action.padEnd(8),
|
|
29
|
+
rule.protected ? "protected" : "",
|
|
27
30
|
describe(rule.match),
|
|
28
|
-
rule.
|
|
31
|
+
rule.decided_at.slice(0, 10),
|
|
29
32
|
rule.recorded === undefined ? "" : `${rule.recorded.emails} emails, ${megabytes(rule.recorded.bytes)} MB`,
|
|
30
33
|
rule.reason ?? "",
|
|
31
34
|
]
|
|
32
35
|
.filter(Boolean)
|
|
33
36
|
.join(" ")
|
|
34
37
|
.trimEnd();
|
|
35
|
-
const
|
|
36
|
-
|
|
37
|
-
const
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
return recorded;
|
|
42
|
-
const mailbox = envelopeBox(rule.match).externalId;
|
|
43
|
-
for (let offset = 0;; offset += PAGE) {
|
|
44
|
-
const page = await store.mail.emails({ accountId: account.id, mailbox, limit: PAGE, offset });
|
|
45
|
-
for (const email of page) {
|
|
46
|
-
recorded.emails++;
|
|
47
|
-
recorded.bytes += email.size ?? 0;
|
|
48
|
-
}
|
|
49
|
-
if (page.length < PAGE)
|
|
50
|
-
return recorded;
|
|
38
|
+
const ACTIONS = ["skip", "envelope", "keep"];
|
|
39
|
+
const rulesFileOf = (text, path) => {
|
|
40
|
+
const bad = (why) => new CliError("validation_error", `${path}: ${why}`, { reason: "mail.rules-file-invalid" });
|
|
41
|
+
let parsed;
|
|
42
|
+
try {
|
|
43
|
+
parsed = JSON.parse(text);
|
|
51
44
|
}
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
45
|
+
catch {
|
|
46
|
+
throw bad("not JSON");
|
|
47
|
+
}
|
|
48
|
+
const rules = parsed.rules;
|
|
49
|
+
if (!Array.isArray(rules))
|
|
50
|
+
throw bad("no rules list; write it with memo mail rules export");
|
|
51
|
+
return rules.map((raw, index) => {
|
|
52
|
+
const rule = raw;
|
|
53
|
+
const match = rule.match ?? {};
|
|
54
|
+
const given = [match.from, match.domain, match.list_id].filter((value) => typeof value === "string");
|
|
55
|
+
if (given.length !== 1 || !ACTIONS.includes(rule.action))
|
|
56
|
+
throw bad(`rule ${index + 1} needs one of match.from, match.domain, match.list_id and an action`);
|
|
57
|
+
return {
|
|
58
|
+
match: matchOf({ from: match.from, domain: match.domain, listId: match.list_id }),
|
|
59
|
+
action: rule.action,
|
|
60
|
+
...(typeof rule.reason === "string" ? { reason: rule.reason } : {}),
|
|
61
|
+
...(rule.protected === true ? { protected: true } : {}),
|
|
62
|
+
decided_at: typeof rule.decided_at === "string" ? rule.decided_at : new Date().toISOString(),
|
|
63
|
+
};
|
|
64
|
+
});
|
|
62
65
|
};
|
|
63
66
|
const applyText = (result) => [
|
|
64
67
|
...result.rules
|
|
@@ -80,9 +83,10 @@ const probeText = (probe) => {
|
|
|
80
83
|
group.firstYear === group.lastYear ? String(group.firstYear) : `${group.firstYear}-${group.lastYear}`,
|
|
81
84
|
group.replied ? "yes" : "no",
|
|
82
85
|
group.suggest ?? "",
|
|
86
|
+
String(group.score),
|
|
83
87
|
group.listId === null ? (group.from ?? "") : `${group.listId} (${group.from ?? "?"})`,
|
|
84
88
|
]);
|
|
85
|
-
const header = ["emails", "MB", "unread", "bulk", "years", "replied", "suggest", "sender or list"];
|
|
89
|
+
const header = ["emails", "MB", "unread", "bulk", "years", "replied", "suggest", "score", "sender or list"];
|
|
86
90
|
const widths = header.map((title, column) => Math.max(title.length, ...rows.map((row) => row[column]?.length ?? 0)));
|
|
87
91
|
const line = (row) => row
|
|
88
92
|
.map((cell, column) => (column < 2 ? cell.padStart(widths[column] ?? 0) : cell.padEnd(widths[column] ?? 0)))
|
|
@@ -96,7 +100,7 @@ const probeText = (probe) => {
|
|
|
96
100
|
].join("\n");
|
|
97
101
|
};
|
|
98
102
|
export const mailCommand = (program, streams, env) => {
|
|
99
|
-
const print =
|
|
103
|
+
const { print } = answers(program, streams, env);
|
|
100
104
|
const mail = program.command("mail").description("look at a mail account before importing it, and the owner's rules");
|
|
101
105
|
mail
|
|
102
106
|
.command("probe")
|
|
@@ -104,24 +108,38 @@ export const mailCommand = (program, streams, env) => {
|
|
|
104
108
|
.argument("<account>", "the account's name in mail.accounts, or its address")
|
|
105
109
|
.option("--since-time <time>", "only mail from this time, ISO 8601 or 30d ago (default: all mail)")
|
|
106
110
|
.option("--limit-groups <n>", "show this many of the largest groups", positive, 50)
|
|
111
|
+
.option("--domain-age", "ask each shown sender domain's registry when it was registered (RDAP); tells each registry its domain")
|
|
107
112
|
.option("--json", "print JSON; --json=id,title keeps only those fields")
|
|
108
|
-
.addHelpText("after", "\nRead-only and headers only: about
|
|
109
|
-
"Precedence), against Gmail's daily download limit. An mbox
|
|
110
|
-
|
|
113
|
+
.addHelpText("after", "\nRead-only and headers only: about 1 KB per email (From, To, Cc, Reply-To, List-Id, List-Unsubscribe, " +
|
|
114
|
+
"Precedence and Gmail's SPF, DKIM and DMARC verdicts), against Gmail's daily download limit. An mbox " +
|
|
115
|
+
"account reads the whole file once.\n\n" +
|
|
116
|
+
`Each group's ${SUGGEST_RULE}. Its ${SCORE_RULE}. The owner decides; add a rule with memo mail rules add.\n\n` +
|
|
117
|
+
"--domain-age asks the registry of each shown group's sender domain, one a second, and keeps the answer " +
|
|
118
|
+
"on this computer for good. Big mailbox providers and senders the owner replied to are never asked; " +
|
|
119
|
+
"most country domains (.ru, .de, .es, .io) have no RDAP and stay unknown. Without it, only ages " +
|
|
120
|
+
"already kept are used and nothing leaves this computer.")
|
|
111
121
|
.action(async (name, options) => {
|
|
112
122
|
const account = accountOf(loadConfig(env), name);
|
|
113
|
-
const since = new Date(options.sinceTime === undefined
|
|
114
|
-
? 0
|
|
115
|
-
: (await import("@wirecat/cli-core/cli")).momentOf(options.sinceTime, "--since-time"));
|
|
123
|
+
const since = new Date(options.sinceTime === undefined ? 0 : momentOf(options.sinceTime, "--since-time"));
|
|
116
124
|
const started = Date.now();
|
|
117
125
|
const source = mailSource(account, env);
|
|
118
126
|
const listed = new Map();
|
|
119
127
|
for (const folder of mailFolders(account))
|
|
120
128
|
for (const item of await source.list(since, folder, { headers: true }))
|
|
121
129
|
listed.set(item.messageId, item);
|
|
122
|
-
const
|
|
123
|
-
probe
|
|
124
|
-
|
|
130
|
+
const items = [...listed.values()];
|
|
131
|
+
let probe = probeMail(items, options.limitGroups, knownAges(env));
|
|
132
|
+
let lookups;
|
|
133
|
+
if (options.domainAge) {
|
|
134
|
+
lookups = await lookUpAges(env, domainsToAge(probe.items, FREE_MAIL));
|
|
135
|
+
probe = probeMail(items, options.limitGroups, knownAges(env));
|
|
136
|
+
}
|
|
137
|
+
const shown = {
|
|
138
|
+
...probe,
|
|
139
|
+
...(lookups === undefined ? {} : { domainLookups: lookups }),
|
|
140
|
+
seconds: Math.round((Date.now() - started) / 100) / 10,
|
|
141
|
+
};
|
|
142
|
+
print(options.json, itemAnswer(shown), probeText(shown));
|
|
125
143
|
});
|
|
126
144
|
mail
|
|
127
145
|
.command("status")
|
|
@@ -132,21 +150,8 @@ export const mailCommand = (program, streams, env) => {
|
|
|
132
150
|
"recorded by a rule or skipped by one. The total is the mail in the window at the last sync's search.")
|
|
133
151
|
.action(async (name, options) => {
|
|
134
152
|
const account = accountOf(loadConfig(env), name);
|
|
135
|
-
const
|
|
136
|
-
|
|
137
|
-
try {
|
|
138
|
-
const status = await mailStatus(store, account);
|
|
139
|
-
if (options.json)
|
|
140
|
-
createRenderer({ format: "json", color: false, streams }).result({
|
|
141
|
-
item: snakeKeys(status),
|
|
142
|
-
meta: metaOf(startedAt, { accounts: [account.name] }),
|
|
143
|
-
});
|
|
144
|
-
else
|
|
145
|
-
streams.data(`${statusText(status)}\n`);
|
|
146
|
-
}
|
|
147
|
-
finally {
|
|
148
|
-
await store.close();
|
|
149
|
-
}
|
|
153
|
+
const status = await withStore(env, (store) => mailStatus(store, account));
|
|
154
|
+
print(options.json, itemAnswer(status, { meta: { accounts: [account.name] } }), statusText(status));
|
|
150
155
|
});
|
|
151
156
|
const rules = mail
|
|
152
157
|
.command("rules")
|
|
@@ -159,19 +164,15 @@ export const mailCommand = (program, streams, env) => {
|
|
|
159
164
|
.addHelpText("after", "\nAn envelope rule shows how many emails it recorded and their size at the source.")
|
|
160
165
|
.action(async (name, options) => {
|
|
161
166
|
const account = accountOf(loadConfig(env), name);
|
|
162
|
-
const
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
}
|
|
172
|
-
finally {
|
|
173
|
-
await store?.close();
|
|
174
|
-
}
|
|
167
|
+
const items = await withStore(env, async (store) => {
|
|
168
|
+
const rules = await rulesOf(store, account, env, streams.diagnostic);
|
|
169
|
+
const counts = await ruleCounts(store, account.address);
|
|
170
|
+
return rules.map((rule) => {
|
|
171
|
+
const recorded = rule.id === undefined ? undefined : counts.get(rule.id);
|
|
172
|
+
return rule.action === "envelope" ? { ...rule, recorded: recorded ?? { emails: 0, bytes: 0 } } : rule;
|
|
173
|
+
});
|
|
174
|
+
});
|
|
175
|
+
print(options.json, wholeList("mail rules list", items), items.map(ruleLine).join("\n") || "no rules");
|
|
175
176
|
});
|
|
176
177
|
rules
|
|
177
178
|
.command("add")
|
|
@@ -190,7 +191,7 @@ export const mailCommand = (program, streams, env) => {
|
|
|
190
191
|
"email costs no more from the mailbox than a skipped one; its subject is kept in its metadata, not in " +
|
|
191
192
|
"search. Changing an envelope rule to keep, or removing it, reads those emails in full on the next sync. " +
|
|
192
193
|
"Mail already stored in full stays.")
|
|
193
|
-
.action((name, options) => {
|
|
194
|
+
.action(async (name, options) => {
|
|
194
195
|
const match = matchOf(options);
|
|
195
196
|
const actions = ["skip", "envelope", "keep"].filter((action) => options[action]);
|
|
196
197
|
if (actions.length !== 1)
|
|
@@ -199,10 +200,14 @@ export const mailCommand = (program, streams, env) => {
|
|
|
199
200
|
match,
|
|
200
201
|
action: actions[0],
|
|
201
202
|
...(options.reason === undefined ? {} : { reason: options.reason }),
|
|
202
|
-
|
|
203
|
+
decided_at: new Date().toISOString(),
|
|
203
204
|
};
|
|
204
|
-
|
|
205
|
-
|
|
205
|
+
const account = accountOf(loadConfig(env), name);
|
|
206
|
+
const saved = await withStore(env, async (store) => {
|
|
207
|
+
await rulesOf(store, account, env, streams.diagnostic);
|
|
208
|
+
return saveRule(store, account.address, rule);
|
|
209
|
+
});
|
|
210
|
+
print(options.json, itemAnswer(saved), ruleLine(saved));
|
|
206
211
|
});
|
|
207
212
|
rules
|
|
208
213
|
.command("remove")
|
|
@@ -212,14 +217,18 @@ export const mailCommand = (program, streams, env) => {
|
|
|
212
217
|
.option("--domain <domain>", "a sender domain")
|
|
213
218
|
.option("--list-id <id>", "a mailing list, by its List-Id")
|
|
214
219
|
.option("--json", "print JSON; --json=id,title keeps only those fields")
|
|
215
|
-
.action((name, options) => {
|
|
220
|
+
.action(async (name, options) => {
|
|
216
221
|
const match = matchOf(options);
|
|
217
|
-
|
|
222
|
+
const account = accountOf(loadConfig(env), name);
|
|
223
|
+
const removed = await withStore(env, async (store) => {
|
|
224
|
+
await rulesOf(store, account, env, streams.diagnostic);
|
|
225
|
+
return removeRule(store, account.address, match);
|
|
226
|
+
});
|
|
227
|
+
if (!removed)
|
|
218
228
|
throw new CliError("not_found", `no rule for ${describe(match)}; memo mail rules list ${name} shows them`, {
|
|
219
229
|
reason: "mail.rule-not-found",
|
|
220
230
|
});
|
|
221
|
-
|
|
222
|
-
print(options.json, { removed: match, items: left }, `removed the rule for ${describe(match)}`);
|
|
231
|
+
print(options.json, itemAnswer({ removed: match }), `removed the rule for ${describe(match)}`);
|
|
223
232
|
});
|
|
224
233
|
rules
|
|
225
234
|
.command("apply")
|
|
@@ -234,32 +243,48 @@ export const mailCommand = (program, streams, env) => {
|
|
|
234
243
|
"mailbox. Changing a rule to keep, or removing it, reads those emails in full on the next sync.")
|
|
235
244
|
.action(async (name, options) => {
|
|
236
245
|
const account = accountOf(loadConfig(env), name);
|
|
237
|
-
const since = new Date(options.sinceTime === undefined
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
246
|
+
const since = new Date(options.sinceTime === undefined ? 0 : momentOf(options.sinceTime, "--since-time"));
|
|
247
|
+
const result = await withImportLock(env, () => withStore(env, async (store) => applyRules({
|
|
248
|
+
store,
|
|
249
|
+
source: mailSource(account, env),
|
|
250
|
+
account: { ...account, rules: await rulesOf(store, account, env, streams.diagnostic) },
|
|
251
|
+
since,
|
|
252
|
+
apply: options.yes === true,
|
|
253
|
+
})));
|
|
254
|
+
print(options.json, itemAnswer(result, { meta: { accounts: [account.name] } }), applyText(result));
|
|
255
|
+
});
|
|
256
|
+
rules
|
|
257
|
+
.command("export")
|
|
258
|
+
.description("print one account's rules as JSON, to review, keep or move elsewhere")
|
|
259
|
+
.argument("<account>", "the account's name in mail.accounts, or its address")
|
|
260
|
+
.addHelpText("after", "\nmemo mail rules export personal > rules.json; memo mail rules import reads it back.")
|
|
261
|
+
.action(async (name) => {
|
|
262
|
+
const account = accountOf(loadConfig(env), name);
|
|
263
|
+
const rules = await withStore(env, (store) => rulesOf(store, account, env, streams.diagnostic));
|
|
264
|
+
const file = {
|
|
265
|
+
version: 1,
|
|
266
|
+
account: account.address,
|
|
267
|
+
rules: rules.map(({ id: _, ...rule }) => rule),
|
|
268
|
+
};
|
|
269
|
+
streams.data(`${JSON.stringify(file, null, 2)}\n`);
|
|
270
|
+
});
|
|
271
|
+
rules
|
|
272
|
+
.command("import")
|
|
273
|
+
.description("add the rules of a file from memo mail rules export; same match replaces")
|
|
274
|
+
.argument("<account>", "the account's name in mail.accounts, or its address")
|
|
275
|
+
.argument("<file>", "the file memo mail rules export wrote")
|
|
276
|
+
.option("--json", "print JSON; --json=id,title keeps only those fields")
|
|
277
|
+
.action(async (name, path, options) => {
|
|
278
|
+
const account = accountOf(loadConfig(env), name);
|
|
279
|
+
const rules = rulesFileOf(readFileSync(path, "utf8"), path);
|
|
280
|
+
const saved = await withStore(env, async (store) => {
|
|
281
|
+
await rulesOf(store, account, env, streams.diagnostic);
|
|
282
|
+
const out = [];
|
|
283
|
+
for (const rule of rules)
|
|
284
|
+
out.push(await saveRule(store, account.address, rule));
|
|
285
|
+
return out;
|
|
255
286
|
});
|
|
256
|
-
|
|
257
|
-
createRenderer({ format: "json", color: false, streams }).result({
|
|
258
|
-
item: snakeKeys(result),
|
|
259
|
-
meta: metaOf(startedAt, { accounts: [account.name] }),
|
|
260
|
-
});
|
|
261
|
-
else
|
|
262
|
-
streams.data(`${applyText(result)}\n`);
|
|
287
|
+
print(options.json, wholeList("mail rules import", saved), `imported ${saved.length} rules into ${account.name}`);
|
|
263
288
|
});
|
|
264
289
|
};
|
|
265
290
|
//# sourceMappingURL=command.js.map
|
package/dist/mail/command.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command.js","sourceRoot":"","sources":["../../src/mail/command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAgB,MAAM,mBAAmB,CAAA;AAC1E,OAAO,EAAqB,SAAS,EAAE,MAAM,yBAAyB,CAAA;AAEtE,OAAO,EAAe,UAAU,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AACpE,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAC/C,OAAO,EAA0B,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAC7F,OAAO,EAAoB,UAAU,EAAE,MAAM,YAAY,CAAA;AACzD,OAAO,EAAc,SAAS,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAChE,OAAO,EAAE,WAAW,EAAqC,SAAS,EAAE,MAAM,YAAY,CAAA;AAEtF,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAQpD,MAAM,SAAS,GAAG,CAAC,MAAc,EAAE,IAAY,EAAqB,EAAE,CACpE,YAAY,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAsB,CAAA;AAE3E,MAAM,OAAO,GAAG,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAgB,EAAiB,EAAE;IACxE,MAAM,KAAK,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,SAAS,CAAC,CAAA;IAC3E,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,QAAQ,CAAC,kBAAkB,EAAE,iDAAiD,CAAC,CAAA;IACjH,OAAO,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAgB,EAAE,CAAA;AACzG,CAAC,CAAA;AAED,MAAM,QAAQ,GAAG,CAAC,KAAoB,EAAU,EAAE,CAChD,KAAK,CAAC,IAAI,KAAK,SAAS;IACtB,CAAC,CAAC,QAAQ,KAAK,CAAC,IAAI,EAAE;IACtB,CAAC,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS;QAC1B,CAAC,CAAC,UAAU,KAAK,CAAC,MAAM,EAAE;QAC1B,CAAC,CAAC,WAAW,KAAK,CAAC,MAAM,EAAE,CAAA;AAOjC,MAAM,QAAQ,GAAG,CAAC,IAAwC,EAAU,EAAE,CACpE;IACE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;IACrB,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;IACpB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;IAC3B,IAAI,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,YAAY,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK;IACzG,IAAI,CAAC,MAAM,IAAI,EAAE;CAClB;KACE,MAAM,CAAC,OAAO,CAAC;KACf,IAAI,CAAC,IAAI,CAAC;KACV,OAAO,EAAE,CAAA;AAEd,MAAM,IAAI,GAAG,IAAI,CAAA;AAEjB,6GAA6G;AAC7G,MAAM,UAAU,GAAG,KAAK,EAAE,KAAmB,EAAE,OAAe,EAAE,IAAc,EAAqB,EAAE;IACnG,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,aAAa,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAA;IAClH,MAAM,QAAQ,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAA;IACxC,IAAI,OAAO,KAAK,IAAI;QAAE,OAAO,QAAQ,CAAA;IACrC,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,UAAU,CAAA;IAClD,KAAK,IAAI,MAAM,GAAG,CAAC,GAAI,MAAM,IAAI,IAAI,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAA;QAC7F,KAAK,MAAM,KAAK,IAAI,IAAI,EAAE,CAAC;YACzB,QAAQ,CAAC,MAAM,EAAE,CAAA;YACjB,QAAQ,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,CAAA;QACnC,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI;YAAE,OAAO,QAAQ,CAAA;IACzC,CAAC;AACH,CAAC,CAAA;AAED,MAAM,WAAW,GAAG,CAAC,GAAsB,EAAE,IAAY,EAAE,MAAyC,EAAc,EAAE;IAClH,IAAI,OAAO,GAAe,EAAE,CAAA;IAC5B,YAAY,CAAC,CAAC,MAAM,EAAE,EAAE;QACtB,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;QACvC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,CAAA;QACrC,MAAM,QAAQ,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAC1D,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CACtD,CAAA;QACD,OAAO,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE,EAAE,GAAG,MAAM,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE,CAAA;IAC1D,CAAC,EAAE,GAAG,CAAC,CAAA;IACP,OAAO,OAAO,CAAA;AAChB,CAAC,CAAA;AAED,MAAM,SAAS,GAAG,CAAC,MAAmB,EAAU,EAAE,CAChD;IACE,GAAG,MAAM,CAAC,KAAK;SACZ,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;SAClC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,MAAM,YAAY,SAAS,CAAC,KAAK,CAAC,aAAa,CAAC;IAChH,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,WAAW,IAAI,MAAM,CAAC,SAAS,wBAAwB;QACjF,GAAG,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,mBAAmB,MAAM,CAAC,MAAM,WAAW;QACrE,GAAG,MAAM,CAAC,WAAW,4CAA4C;QACjE,CAAC,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,SAAS,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,2BAA2B,MAAM,CAAC,OAAO,kBAAkB,CAAC;CAChH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AAEd,MAAM,SAAS,GAAG,CAAC,KAAa,EAAE,EAAE,CAAC,CAAC,KAAK,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;AACrE,MAAM,OAAO,GAAG,CAAC,KAAoB,EAAE,EAAE,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,CAAA;AAEhG,MAAM,SAAS,GAAG,CAAC,KAAkC,EAAU,EAAE;IAC/D,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC;QACtC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;QACpB,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC;QACtB,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC;QACrB,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC;QACnB,KAAK,CAAC,SAAS,KAAK,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,QAAQ,EAAE;QACrG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI;QAC5B,KAAK,CAAC,OAAO,IAAI,EAAE;QACnB,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,IAAI,IAAI,GAAG,GAAG;KACtF,CAAC,CAAA;IACF,MAAM,MAAM,GAAG,CAAC,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,gBAAgB,CAAC,CAAA;IAClG,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;IACpH,MAAM,IAAI,GAAG,CAAC,GAAa,EAAE,EAAE,CAC7B,GAAG;SACA,GAAG,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SAC3G,IAAI,CAAC,IAAI,CAAC;SACV,OAAO,EAAE,CAAA;IACd,OAAO;QACL,GAAG,KAAK,CAAC,MAAM,YAAY,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,KAAK,CAAC,MAAM,YAAY,KAAK,CAAC,IAAI,SAAS;YAClG,GAAG,KAAK,CAAC,cAAc,8BAA8B,KAAK,CAAC,OAAO,GAAG;QACvE,IAAI,CAAC,MAAM,CAAC;QACZ,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;KAClB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACd,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,OAAgB,EAAE,OAAgB,EAAE,GAAsB,EAAQ,EAAE;IAC9F,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAA;IAC/B,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,mEAAmE,CAAC,CAAA;IAErH,IAAI;SACD,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,4EAA4E,CAAC;SACzF,QAAQ,CAAC,WAAW,EAAE,qDAAqD,CAAC;SAC5E,MAAM,CAAC,qBAAqB,EAAE,mEAAmE,CAAC;SAClG,MAAM,CAAC,oBAAoB,EAAE,sCAAsC,EAAE,QAAQ,EAAE,EAAE,CAAC;SAClF,MAAM,CAAC,QAAQ,EAAE,qDAAqD,CAAC;SACvE,WAAW,CACV,OAAO,EACP,oGAAoG;QAClG,mGAAmG;QACnG,gBAAgB,YAAY,2DAA2D,CAC1F;SACA,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,OAAoE,EAAE,EAAE;QACnG,MAAM,OAAO,GAAG,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAA;QAChD,MAAM,KAAK,GAAG,IAAI,IAAI,CACpB,OAAO,CAAC,SAAS,KAAK,SAAS;YAC7B,CAAC,CAAC,CAAC;YACH,CAAC,CAAC,CAAC,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,EAAE,cAAc,CAAC,CACxF,CAAA;QACD,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QAC1B,MAAM,MAAM,GAAG,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAA;QACvC,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAA;QACxC,KAAK,MAAM,MAAM,IAAI,WAAW,CAAC,OAAO,CAAC;YACvC,KAAK,MAAM,IAAI,IAAI,MAAM,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;gBAAE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAA;QAC1G,MAAM,KAAK,GAAG,EAAE,GAAG,SAAS,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAA;QACrF,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,GAAG,CAAC,GAAG,EAAE,CAAA;QAC7D,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC,CAAA;IAC9C,CAAC,CAAC,CAAA;IAEJ,IAAI;SACD,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,yEAAyE,CAAC;SACtF,QAAQ,CAAC,WAAW,EAAE,qDAAqD,CAAC;SAC5E,MAAM,CAAC,QAAQ,EAAE,qDAAqD,CAAC;SACvE,WAAW,CACV,OAAO,EACP,gHAAgH;QAC9G,sGAAsG,CACzG;SACA,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,OAA2B,EAAE,EAAE;QAC1D,MAAM,OAAO,GAAG,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAA;QAChD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QAC5B,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,EAAE,GAAG,EAAE,CAAC,CAAA;QACtC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;YAC/C,IAAI,OAAO,CAAC,IAAI;gBACd,cAAc,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC;oBAC/D,IAAI,EAAE,SAAS,CAAC,MAAM,CAAC;oBACvB,IAAI,EAAE,MAAM,CAAC,SAAS,EAAE,EAAE,QAAQ,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;iBACtD,CAAC,CAAA;;gBACC,OAAO,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;QAC9C,CAAC;gBAAS,CAAC;YACT,MAAM,KAAK,CAAC,KAAK,EAAE,CAAA;QACrB,CAAC;IACH,CAAC,CAAC,CAAA;IAEJ,MAAM,KAAK,GAAG,IAAI;SACf,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,gFAAgF,CAAC,CAAA;IAEhG,KAAK;SACF,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,qBAAqB,CAAC;SAClC,QAAQ,CAAC,WAAW,EAAE,qDAAqD,CAAC;SAC5E,MAAM,CAAC,QAAQ,EAAE,qDAAqD,CAAC;SACvE,WAAW,CAAC,OAAO,EAAE,oFAAoF,CAAC;SAC1G,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,OAA2B,EAAE,EAAE;QAC1D,MAAM,OAAO,GAAG,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAA;QAChD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,EAAE,CAAA;QACjC,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,SAAS,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;QACtG,IAAI,CAAC;YACH,MAAM,KAAK,GAA2C,EAAE,CAAA;YACxD,KAAK,MAAM,IAAI,IAAI,KAAK;gBACtB,KAAK,CAAC,IAAI,CACR,KAAK,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,KAAK,UAAU;oBAC/C,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC,KAAK,EAAE,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE;oBACvE,CAAC,CAAC,IAAI,CACT,CAAA;YACH,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,EAAE,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,CAAA;QAC9E,CAAC;gBAAS,CAAC;YACT,MAAM,KAAK,EAAE,KAAK,EAAE,CAAA;QACtB,CAAC;IACH,CAAC,CAAC,CAAA;IAEJ,KAAK;SACF,OAAO,CAAC,KAAK,CAAC;SACd,WAAW,CAAC,iFAAiF,CAAC;SAC9F,QAAQ,CAAC,WAAW,EAAE,qDAAqD,CAAC;SAC5E,MAAM,CAAC,kBAAkB,EAAE,oBAAoB,CAAC;SAChD,MAAM,CAAC,mBAAmB,EAAE,qCAAqC,CAAC;SAClE,MAAM,CAAC,gBAAgB,EAAE,gCAAgC,CAAC;SAC1D,MAAM,CAAC,QAAQ,EAAE,+BAA+B,CAAC;SACjD,MAAM,CAAC,YAAY,EAAE,mFAAmF,CAAC;SACzG,MAAM,CAAC,QAAQ,EAAE,+DAA+D,CAAC;SACjF,MAAM,CAAC,iBAAiB,EAAE,0BAA0B,CAAC;SACrD,MAAM,CAAC,QAAQ,EAAE,qDAAqD,CAAC;SACvE,WAAW,CACV,OAAO,EACP,iGAAiG;QAC/F,mGAAmG;QACnG,uGAAuG;QACvG,0GAA0G;QAC1G,oCAAoC,CACvC;SACA,MAAM,CACL,CACE,IAAY,EACZ,OAA+G,EAC/G,EAAE;QACF,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;QAC9B,MAAM,OAAO,GAAI,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,CAAW,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAA;QAC3F,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YACtB,MAAM,IAAI,QAAQ,CAAC,kBAAkB,EAAE,gDAAgD,CAAC,CAAA;QAC1F,MAAM,IAAI,GAAa;YACrB,KAAK;YACL,MAAM,EAAE,OAAO,CAAC,CAAC,CAAuB;YACxC,GAAG,CAAC,OAAO,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC;YACnE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAA;QACD,WAAW,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAA;QACvG,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAA;IAC3C,CAAC,CACF,CAAA;IAEH,KAAK;SACF,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,4CAA4C,CAAC;SACzD,QAAQ,CAAC,WAAW,EAAE,qDAAqD,CAAC;SAC5E,MAAM,CAAC,kBAAkB,EAAE,oBAAoB,CAAC;SAChD,MAAM,CAAC,mBAAmB,EAAE,iBAAiB,CAAC;SAC9C,MAAM,CAAC,gBAAgB,EAAE,gCAAgC,CAAC;SAC1D,MAAM,CAAC,QAAQ,EAAE,qDAAqD,CAAC;SACvE,MAAM,CAAC,CAAC,IAAY,EAAE,OAA0C,EAAE,EAAE;QACnE,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;QAC9B,IAAI,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YAC9F,MAAM,IAAI,QAAQ,CAAC,WAAW,EAAE,eAAe,QAAQ,CAAC,KAAK,CAAC,0BAA0B,IAAI,aAAa,EAAE;gBACzG,MAAM,EAAE,qBAAqB;aAC9B,CAAC,CAAA;QACJ,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAA;QACzG,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,wBAAwB,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;IACjG,CAAC,CAAC,CAAA;IAEJ,KAAK;SACF,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,gFAAgF,CAAC;SAC7F,QAAQ,CAAC,WAAW,EAAE,qDAAqD,CAAC;SAC5E,MAAM,CAAC,qBAAqB,EAAE,mEAAmE,CAAC;SAClG,MAAM,CAAC,OAAO,EAAE,0DAA0D,CAAC;SAC3E,MAAM,CAAC,QAAQ,EAAE,qDAAqD,CAAC;SACvE,WAAW,CACV,OAAO,EACP,4GAA4G;QAC1G,uGAAuG;QACvG,qGAAqG;QACrG,gGAAgG,CACnG;SACA,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,OAA8D,EAAE,EAAE;QAC7F,MAAM,OAAO,GAAG,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAA;QAChD,MAAM,KAAK,GAAG,IAAI,IAAI,CACpB,OAAO,CAAC,SAAS,KAAK,SAAS;YAC7B,CAAC,CAAC,CAAC;YACH,CAAC,CAAC,CAAC,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,EAAE,cAAc,CAAC,CACxF,CAAA;QACD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QAC5B,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,GAAG,EAAE,KAAK,IAAI,EAAE;YAClD,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,EAAE,GAAG,EAAE,CAAC,CAAA;YACtC,IAAI,CAAC;gBACH,OAAO,MAAM,UAAU,CAAC;oBACtB,KAAK;oBACL,MAAM,EAAE,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC;oBAChC,OAAO;oBACP,KAAK;oBACL,KAAK,EAAE,OAAO,CAAC,GAAG,KAAK,IAAI;iBAC5B,CAAC,CAAA;YACJ,CAAC;oBAAS,CAAC;gBACT,MAAM,KAAK,CAAC,KAAK,EAAE,CAAA;YACrB,CAAC;QACH,CAAC,CAAC,CAAA;QACF,IAAI,OAAO,CAAC,IAAI;YACd,cAAc,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC;gBAC/D,IAAI,EAAE,SAAS,CAAC,MAAM,CAAC;gBACvB,IAAI,EAAE,MAAM,CAAC,SAAS,EAAE,EAAE,QAAQ,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;aACtD,CAAC,CAAA;;YACC,OAAO,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IAC7C,CAAC,CAAC,CAAA;AACN,CAAC,CAAA"}
|
|
1
|
+
{"version":3,"file":"command.js","sourceRoot":"","sources":["../../src/mail/command.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { DomainAge } from "./score.js";
|
|
2
|
+
/** IANA's list of which registry answers RDAP for which top-level domain (RFC 9224). */
|
|
3
|
+
export declare const BOOTSTRAP_URL = "https://data.iana.org/rdap/dns.json";
|
|
4
|
+
/** The ages already looked up; reads no network. */
|
|
5
|
+
export declare const knownAges: (env: NodeJS.ProcessEnv) => Map<string, DomainAge>;
|
|
6
|
+
export interface LookupDeps {
|
|
7
|
+
fetch: typeof fetch;
|
|
8
|
+
sleep: (ms: number) => Promise<void>;
|
|
9
|
+
now: () => Date;
|
|
10
|
+
}
|
|
11
|
+
export interface LookupResult {
|
|
12
|
+
looked: number;
|
|
13
|
+
failed: number;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Asks each domain's own registry when it was registered, straight from IANA's list, never through a relay: each
|
|
17
|
+
* question tells that registry, and only it, the domain's name. One question a second; answers are kept for good.
|
|
18
|
+
* A domain whose registry has no RDAP (most country domains: .ru, .de, .es, .io) is marked unsupported, not guessed.
|
|
19
|
+
*/
|
|
20
|
+
export declare const lookUpAges: (env: NodeJS.ProcessEnv, domains: readonly string[], deps?: LookupDeps) => Promise<LookupResult>;
|
|
21
|
+
//# sourceMappingURL=domain-age.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"domain-age.d.ts","sourceRoot":"","sources":["../../src/mail/domain-age.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAE3C,wFAAwF;AACxF,eAAO,MAAM,aAAa,wCAAwC,CAAA;AA8BlE,oDAAoD;AACpD,eAAO,MAAM,SAAS,QAAS,MAAM,CAAC,UAAU,KAAG,GAAG,CAAC,MAAM,EAAE,SAAS,CACvB,CAAA;AAEjD,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,OAAO,KAAK,CAAA;IACnB,KAAK,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACpC,GAAG,EAAE,MAAM,IAAI,CAAA;CAChB;AAqBD,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;CACf;AAED;;;;GAIG;AACH,eAAO,MAAM,UAAU,QAChB,MAAM,CAAC,UAAU,WACb,SAAS,MAAM,EAAE,SACpB,UAAU,KACf,OAAO,CAAC,YAAY,CA4CtB,CAAA"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { mkdirSync, readFileSync, renameSync, writeFileSync } from "node:fs";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import { resolvePaths } from "@wirecat/cli-base";
|
|
4
|
+
import { VERSION } from "../version.js";
|
|
5
|
+
/** IANA's list of which registry answers RDAP for which top-level domain (RFC 9224). */
|
|
6
|
+
export const BOOTSTRAP_URL = "https://data.iana.org/rdap/dns.json";
|
|
7
|
+
const BOOTSTRAP_MAX_AGE_MS = 30 * 24 * 60 * 60 * 1000;
|
|
8
|
+
const REQUEST_GAP_MS = 1000;
|
|
9
|
+
const TIMEOUT_MS = 10_000;
|
|
10
|
+
const USER_AGENT = `cli-memo/${VERSION} (+https://github.com/WireCatLabs/cli-memo)`;
|
|
11
|
+
const fileOf = (env) => join(resolvePaths({ appName: "cli-memo", prefix: "MEMO", env }).state, "domain-ages.json");
|
|
12
|
+
// A registration date never changes, so the cache is kept on this computer for good and asked again never.
|
|
13
|
+
const loadCache = (env) => {
|
|
14
|
+
try {
|
|
15
|
+
return { domains: {}, ...JSON.parse(readFileSync(fileOf(env), "utf8")) };
|
|
16
|
+
}
|
|
17
|
+
catch {
|
|
18
|
+
return { domains: {} };
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
const saveCache = (env, cache) => {
|
|
22
|
+
const file = fileOf(env);
|
|
23
|
+
mkdirSync(join(file, ".."), { recursive: true });
|
|
24
|
+
writeFileSync(`${file}.tmp`, JSON.stringify(cache));
|
|
25
|
+
renameSync(`${file}.tmp`, file);
|
|
26
|
+
};
|
|
27
|
+
/** The ages already looked up; reads no network. */
|
|
28
|
+
export const knownAges = (env) => new Map(Object.entries(loadCache(env).domains));
|
|
29
|
+
const realDeps = {
|
|
30
|
+
fetch: (input, init) => fetch(input, init),
|
|
31
|
+
sleep: (ms) => new Promise((done) => setTimeout(done, ms)),
|
|
32
|
+
now: () => new Date(),
|
|
33
|
+
};
|
|
34
|
+
const getJson = async (deps, url) => {
|
|
35
|
+
const response = await deps.fetch(url, {
|
|
36
|
+
headers: { accept: "application/rdap+json, application/json", "user-agent": USER_AGENT },
|
|
37
|
+
signal: AbortSignal.timeout(TIMEOUT_MS),
|
|
38
|
+
});
|
|
39
|
+
return { status: response.status, body: response.ok ? await response.json() : undefined };
|
|
40
|
+
};
|
|
41
|
+
const registrationOf = (body) => (body?.events ?? []).find((event) => event.eventAction === "registration")?.eventDate;
|
|
42
|
+
/**
|
|
43
|
+
* Asks each domain's own registry when it was registered, straight from IANA's list, never through a relay: each
|
|
44
|
+
* question tells that registry, and only it, the domain's name. One question a second; answers are kept for good.
|
|
45
|
+
* A domain whose registry has no RDAP (most country domains: .ru, .de, .es, .io) is marked unsupported, not guessed.
|
|
46
|
+
*/
|
|
47
|
+
export const lookUpAges = async (env, domains, deps = realDeps) => {
|
|
48
|
+
const cache = loadCache(env);
|
|
49
|
+
const wanted = [...new Set(domains.map((domain) => domain.toLowerCase()))].filter((domain) => cache.domains[domain] === undefined);
|
|
50
|
+
if (wanted.length === 0)
|
|
51
|
+
return { looked: 0, failed: 0 };
|
|
52
|
+
const fetchedAt = cache.bootstrap?.fetchedAt;
|
|
53
|
+
if (fetchedAt === undefined || deps.now().getTime() - Date.parse(fetchedAt) > BOOTSTRAP_MAX_AGE_MS) {
|
|
54
|
+
const { body } = await getJson(deps, BOOTSTRAP_URL);
|
|
55
|
+
const services = body?.services;
|
|
56
|
+
if (!Array.isArray(services))
|
|
57
|
+
throw new Error("IANA's RDAP list did not answer");
|
|
58
|
+
cache.bootstrap = { fetchedAt: deps.now().toISOString(), services };
|
|
59
|
+
}
|
|
60
|
+
const servers = new Map();
|
|
61
|
+
for (const [tlds, urls] of cache.bootstrap?.services ?? []) {
|
|
62
|
+
const url = urls.find((candidate) => candidate.startsWith("https://")) ?? urls[0];
|
|
63
|
+
if (url !== undefined)
|
|
64
|
+
for (const tld of tlds)
|
|
65
|
+
servers.set(tld.toLowerCase(), url.endsWith("/") ? url : `${url}/`);
|
|
66
|
+
}
|
|
67
|
+
let looked = 0;
|
|
68
|
+
let failed = 0;
|
|
69
|
+
for (const domain of wanted) {
|
|
70
|
+
const server = servers.get(domain.slice(domain.lastIndexOf(".") + 1));
|
|
71
|
+
const checkedAt = deps.now().toISOString();
|
|
72
|
+
if (server === undefined) {
|
|
73
|
+
cache.domains[domain] = { unsupported: true, checkedAt };
|
|
74
|
+
continue;
|
|
75
|
+
}
|
|
76
|
+
if (looked > 0)
|
|
77
|
+
await deps.sleep(REQUEST_GAP_MS);
|
|
78
|
+
looked++;
|
|
79
|
+
try {
|
|
80
|
+
const { status, body } = await getJson(deps, `${server}domain/${encodeURIComponent(domain)}`);
|
|
81
|
+
// Not found is an answer worth keeping; anything else may work another day, so it is not kept.
|
|
82
|
+
if (status === 404)
|
|
83
|
+
cache.domains[domain] = { checkedAt };
|
|
84
|
+
else if (status >= 200 && status < 300) {
|
|
85
|
+
const created = registrationOf(body);
|
|
86
|
+
cache.domains[domain] = { ...(created === undefined ? {} : { created }), checkedAt };
|
|
87
|
+
}
|
|
88
|
+
else
|
|
89
|
+
failed++;
|
|
90
|
+
}
|
|
91
|
+
catch {
|
|
92
|
+
failed++;
|
|
93
|
+
}
|
|
94
|
+
saveCache(env, cache);
|
|
95
|
+
}
|
|
96
|
+
saveCache(env, cache);
|
|
97
|
+
return { looked, failed };
|
|
98
|
+
};
|
|
99
|
+
//# sourceMappingURL=domain-age.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"domain-age.js","sourceRoot":"","sources":["../../src/mail/domain-age.ts"],"names":[],"mappings":"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"}
|
package/dist/mail/gmail.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type MailHeaders } from "./headers.js";
|
|
2
|
-
import type
|
|
2
|
+
import { type Himalaya } from "./himalaya.js";
|
|
3
3
|
export interface Listed {
|
|
4
4
|
uid: string;
|
|
5
5
|
/** Gmail's own ids: the same in every folder, and they survive a UID reset. */
|
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,EAA4B,KAAK,WAAW,EAAE,MAAM,cAAc,CAAA;AACzE,OAAO,KAAK,
|
|
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,EAAE,KAAK,QAAQ,EAA+B,MAAM,eAAe,CAAA;AAE1E,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;AAuDD,6FAA6F;AAC7F,MAAM,WAAW,QAAQ;IACvB,+EAA+E;IAC/E,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,IAAI,EAAE,MAAM,EAAE,CAAA;CACf;AAQD,uGAAuG;AACvG,eAAO,MAAM,UAAU,QAAe,QAAQ,WAAW,MAAM,SAAS,IAAI,UAAU,MAAM,KAAG,OAAO,CAAC,QAAQ,CAW9G,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,WAAW,QACjB,QAAQ,WACJ,MAAM,SACR,IAAI,iDAGA,QAAQ,KAClB,OAAO,CAAC,MAAM,EAAE,CA0ElB,CAAA;AAED,sGAAsG;AACtG,eAAO,MAAM,YAAY,QAClB,QAAQ,WACJ,MAAM,SACR,IAAI,UACH,MAAM,aACH,QAAQ,KAClB,OAAO,CAAC,MAAM,EAAE,CA0DlB,CAAA"}
|
package/dist/mail/gmail.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { createHash } from "node:crypto";
|
|
2
2
|
import { CliError } from "@wirecat/cli-base";
|
|
3
3
|
import { HEADER_FIELDS, headersOf } from "./headers.js";
|
|
4
|
+
import { isThrottled, throttledError } from "./himalaya.js";
|
|
4
5
|
const SYSTEM_LABELS = {
|
|
5
6
|
inbox: "Inbox",
|
|
6
7
|
sent: "Sent",
|
|
@@ -92,7 +93,11 @@ const assertCompleted = (output, tags) => {
|
|
|
92
93
|
for (const tag of tags) {
|
|
93
94
|
if (!new RegExp(`^${tag} OK`, "m").test(output)) {
|
|
94
95
|
const line = output.split(/\r?\n/).find((text) => text.startsWith(`${tag} `)) ?? "no answer";
|
|
95
|
-
|
|
96
|
+
if (isThrottled(line))
|
|
97
|
+
throw throttledError(`IMAP command ${tag}`);
|
|
98
|
+
throw new CliError("provider_error", `IMAP command ${tag} did not complete: ${line}`, {
|
|
99
|
+
reason: "mail.source-failed",
|
|
100
|
+
});
|
|
96
101
|
}
|
|
97
102
|
}
|
|
98
103
|
};
|