proton-mail-bridge-client 2.16.2 → 2.17.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 +149 -12
- package/dist/cli.d.ts +16 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +178 -1
- package/dist/cli.js.map +1 -1
- package/dist/config-env.d.ts +2 -1
- package/dist/config-env.d.ts.map +1 -1
- package/dist/config-env.js +24 -0
- package/dist/config-env.js.map +1 -1
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +180 -11
- package/dist/index.js.map +1 -1
- package/dist/services/account-manager.d.ts +7 -0
- package/dist/services/account-manager.d.ts.map +1 -1
- package/dist/services/account-manager.js +59 -0
- package/dist/services/account-manager.js.map +1 -1
- package/dist/services/audit-service.d.ts +20 -0
- package/dist/services/audit-service.d.ts.map +1 -1
- package/dist/services/audit-service.js +266 -9
- package/dist/services/audit-service.js.map +1 -1
- package/dist/services/autoresponder-service.d.ts +35 -6
- package/dist/services/autoresponder-service.d.ts.map +1 -1
- package/dist/services/autoresponder-service.js +223 -108
- package/dist/services/autoresponder-service.js.map +1 -1
- package/dist/services/brief-service.d.ts +7 -1
- package/dist/services/brief-service.d.ts.map +1 -1
- package/dist/services/brief-service.js +19 -5
- package/dist/services/brief-service.js.map +1 -1
- package/dist/services/category-service.d.ts +91 -0
- package/dist/services/category-service.d.ts.map +1 -0
- package/dist/services/category-service.js +320 -0
- package/dist/services/category-service.js.map +1 -0
- package/dist/services/commitment-service.d.ts.map +1 -1
- package/dist/services/commitment-service.js +9 -3
- package/dist/services/commitment-service.js.map +1 -1
- package/dist/services/contact-service.d.ts +60 -0
- package/dist/services/contact-service.d.ts.map +1 -0
- package/dist/services/contact-service.js +248 -0
- package/dist/services/contact-service.js.map +1 -0
- package/dist/services/delivery-queue-service.d.ts +4 -0
- package/dist/services/delivery-queue-service.d.ts.map +1 -1
- package/dist/services/delivery-queue-service.js +12 -2
- package/dist/services/delivery-queue-service.js.map +1 -1
- package/dist/services/draft-store-service.d.ts.map +1 -1
- package/dist/services/draft-store-service.js +3 -2
- package/dist/services/draft-store-service.js.map +1 -1
- package/dist/services/embedding-service.d.ts +68 -0
- package/dist/services/embedding-service.d.ts.map +1 -0
- package/dist/services/embedding-service.js +465 -0
- package/dist/services/embedding-service.js.map +1 -0
- package/dist/services/event-log-service.d.ts +67 -0
- package/dist/services/event-log-service.d.ts.map +1 -0
- package/dist/services/event-log-service.js +280 -0
- package/dist/services/event-log-service.js.map +1 -0
- package/dist/services/grant-service.d.ts +84 -0
- package/dist/services/grant-service.d.ts.map +1 -0
- package/dist/services/grant-service.js +214 -0
- package/dist/services/grant-service.js.map +1 -0
- package/dist/services/local-index-service.d.ts +18 -1
- package/dist/services/local-index-service.d.ts.map +1 -1
- package/dist/services/local-index-service.js +54 -4
- package/dist/services/local-index-service.js.map +1 -1
- package/dist/services/reply-reminder-service.d.ts +4 -0
- package/dist/services/reply-reminder-service.d.ts.map +1 -1
- package/dist/services/reply-reminder-service.js +22 -2
- package/dist/services/reply-reminder-service.js.map +1 -1
- package/dist/services/rules-service.d.ts +9 -1
- package/dist/services/rules-service.d.ts.map +1 -1
- package/dist/services/rules-service.js +8 -3
- package/dist/services/rules-service.js.map +1 -1
- package/dist/services/sieve-export.d.ts +19 -0
- package/dist/services/sieve-export.d.ts.map +1 -0
- package/dist/services/sieve-export.js +192 -0
- package/dist/services/sieve-export.js.map +1 -0
- package/dist/services/simple-imap-service.d.ts +13 -0
- package/dist/services/simple-imap-service.d.ts.map +1 -1
- package/dist/services/simple-imap-service.js +142 -18
- package/dist/services/simple-imap-service.js.map +1 -1
- package/dist/services/smtp-service.d.ts +1 -0
- package/dist/services/smtp-service.d.ts.map +1 -1
- package/dist/services/smtp-service.js +20 -0
- package/dist/services/smtp-service.js.map +1 -1
- package/dist/services/snooze-service.d.ts +4 -0
- package/dist/services/snooze-service.d.ts.map +1 -1
- package/dist/services/snooze-service.js +12 -3
- package/dist/services/snooze-service.js.map +1 -1
- package/dist/services/template-service.d.ts.map +1 -1
- package/dist/services/template-service.js +3 -2
- package/dist/services/template-service.js.map +1 -1
- package/dist/services/triage-plan-service.d.ts +10 -2
- package/dist/services/triage-plan-service.d.ts.map +1 -1
- package/dist/services/triage-plan-service.js +23 -3
- package/dist/services/triage-plan-service.js.map +1 -1
- package/dist/tools/attachments.js +1 -1
- package/dist/tools/attachments.js.map +1 -1
- package/dist/tools/brief.d.ts.map +1 -1
- package/dist/tools/brief.js +14 -4
- package/dist/tools/brief.js.map +1 -1
- package/dist/tools/categories.d.ts +4 -0
- package/dist/tools/categories.d.ts.map +1 -0
- package/dist/tools/categories.js +269 -0
- package/dist/tools/categories.js.map +1 -0
- package/dist/tools/commitments.d.ts.map +1 -1
- package/dist/tools/commitments.js +6 -2
- package/dist/tools/commitments.js.map +1 -1
- package/dist/tools/contacts.d.ts +6 -0
- package/dist/tools/contacts.d.ts.map +1 -0
- package/dist/tools/contacts.js +295 -0
- package/dist/tools/contacts.js.map +1 -0
- package/dist/tools/context.d.ts +4 -0
- package/dist/tools/context.d.ts.map +1 -1
- package/dist/tools/context.js +3 -0
- package/dist/tools/context.js.map +1 -1
- package/dist/tools/definitions.d.ts +333 -5
- package/dist/tools/definitions.d.ts.map +1 -1
- package/dist/tools/definitions.js +169 -5
- package/dist/tools/definitions.js.map +1 -1
- package/dist/tools/delegation.d.ts +44 -0
- package/dist/tools/delegation.d.ts.map +1 -0
- package/dist/tools/delegation.js +180 -0
- package/dist/tools/delegation.js.map +1 -0
- package/dist/tools/diagnostics.d.ts.map +1 -1
- package/dist/tools/diagnostics.js +6 -0
- package/dist/tools/diagnostics.js.map +1 -1
- package/dist/tools/drafts-support.d.ts +2 -1
- package/dist/tools/drafts-support.d.ts.map +1 -1
- package/dist/tools/drafts-support.js +14 -6
- package/dist/tools/drafts-support.js.map +1 -1
- package/dist/tools/drafts.d.ts.map +1 -1
- package/dist/tools/drafts.js +22 -1
- package/dist/tools/drafts.js.map +1 -1
- package/dist/tools/events.d.ts +47 -0
- package/dist/tools/events.d.ts.map +1 -0
- package/dist/tools/events.js +240 -0
- package/dist/tools/events.js.map +1 -0
- package/dist/tools/reading.d.ts.map +1 -1
- package/dist/tools/reading.js +125 -4
- package/dist/tools/reading.js.map +1 -1
- package/dist/tools/resources.d.ts +4 -0
- package/dist/tools/resources.d.ts.map +1 -1
- package/dist/tools/resources.js +9 -0
- package/dist/tools/resources.js.map +1 -1
- package/dist/tools/rules-runner.d.ts.map +1 -1
- package/dist/tools/rules-runner.js +1 -0
- package/dist/tools/rules-runner.js.map +1 -1
- package/dist/tools/rules.d.ts +9 -0
- package/dist/tools/rules.d.ts.map +1 -1
- package/dist/tools/rules.js +50 -19
- package/dist/tools/rules.js.map +1 -1
- package/dist/tools/sending.d.ts.map +1 -1
- package/dist/tools/sending.js +4 -0
- package/dist/tools/sending.js.map +1 -1
- package/dist/tools/style.d.ts +2 -0
- package/dist/tools/style.d.ts.map +1 -1
- package/dist/tools/style.js +3 -3
- package/dist/tools/style.js.map +1 -1
- package/dist/tools/templates-and-reminders.d.ts +3 -0
- package/dist/tools/templates-and-reminders.d.ts.map +1 -1
- package/dist/tools/templates-and-reminders.js +31 -17
- package/dist/tools/templates-and-reminders.js.map +1 -1
- package/dist/tools/triage.d.ts.map +1 -1
- package/dist/tools/triage.js +33 -11
- package/dist/tools/triage.js.map +1 -1
- package/dist/types/index.d.ts +23 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/utils/account-identity.d.ts.map +1 -1
- package/dist/utils/account-identity.js +3 -2
- package/dist/utils/account-identity.js.map +1 -1
- package/dist/utils/approval.d.ts +133 -0
- package/dist/utils/approval.d.ts.map +1 -0
- package/dist/utils/approval.js +507 -0
- package/dist/utils/approval.js.map +1 -0
- package/dist/utils/atomic-write.d.ts +1 -1
- package/dist/utils/atomic-write.d.ts.map +1 -1
- package/dist/utils/atomic-write.js +10 -3
- package/dist/utils/atomic-write.js.map +1 -1
- package/dist/utils/commitment-phrases.d.ts.map +1 -1
- package/dist/utils/commitment-phrases.js +31 -18
- package/dist/utils/commitment-phrases.js.map +1 -1
- package/dist/utils/contact-text.d.ts +8 -0
- package/dist/utils/contact-text.d.ts.map +1 -0
- package/dist/utils/contact-text.js +24 -0
- package/dist/utils/contact-text.js.map +1 -0
- package/dist/utils/delegation.d.ts +17 -0
- package/dist/utils/delegation.d.ts.map +1 -0
- package/dist/utils/delegation.js +72 -0
- package/dist/utils/delegation.js.map +1 -0
- package/dist/utils/file-lock.d.ts.map +1 -1
- package/dist/utils/file-lock.js +5 -4
- package/dist/utils/file-lock.js.map +1 -1
- package/dist/utils/mail-security.d.ts +9 -1
- package/dist/utils/mail-security.d.ts.map +1 -1
- package/dist/utils/mail-security.js +444 -62
- package/dist/utils/mail-security.js.map +1 -1
- package/dist/utils/ocr.d.ts +24 -0
- package/dist/utils/ocr.d.ts.map +1 -0
- package/dist/utils/ocr.js +109 -0
- package/dist/utils/ocr.js.map +1 -0
- package/dist/utils/office-text-worker.d.ts +2 -0
- package/dist/utils/office-text-worker.d.ts.map +1 -0
- package/dist/utils/office-text-worker.js +17 -0
- package/dist/utils/office-text-worker.js.map +1 -0
- package/dist/utils/office-text.d.ts +32 -0
- package/dist/utils/office-text.d.ts.map +1 -0
- package/dist/utils/office-text.js +540 -0
- package/dist/utils/office-text.js.map +1 -0
- package/dist/utils/pdf-text-worker.js +2 -2
- package/dist/utils/pdf-text-worker.js.map +1 -1
- package/dist/utils/pdf-text.d.ts +10 -0
- package/dist/utils/pdf-text.d.ts.map +1 -1
- package/dist/utils/pdf-text.js +49 -9
- package/dist/utils/pdf-text.js.map +1 -1
- package/dist/utils/png.d.ts +2 -0
- package/dist/utils/png.d.ts.map +1 -0
- package/dist/utils/png.js +26 -0
- package/dist/utils/png.js.map +1 -0
- package/dist/utils/regular-file.d.ts +9 -0
- package/dist/utils/regular-file.d.ts.map +1 -0
- package/dist/utils/regular-file.js +34 -0
- package/dist/utils/regular-file.js.map +1 -0
- package/dist/utils/runtime-policy.d.ts.map +1 -1
- package/dist/utils/runtime-policy.js +2 -0
- package/dist/utils/runtime-policy.js.map +1 -1
- package/dist/utils/safe-write.d.ts +8 -0
- package/dist/utils/safe-write.d.ts.map +1 -0
- package/dist/utils/safe-write.js +46 -0
- package/dist/utils/safe-write.js.map +1 -0
- package/dist/utils/server-state-paths.d.ts +12 -0
- package/dist/utils/server-state-paths.d.ts.map +1 -0
- package/dist/utils/server-state-paths.js +69 -0
- package/dist/utils/server-state-paths.js.map +1 -0
- package/dist/utils/style-profile.d.ts +18 -0
- package/dist/utils/style-profile.d.ts.map +1 -1
- package/dist/utils/style-profile.js +63 -14
- package/dist/utils/style-profile.js.map +1 -1
- package/dist/utils/vcard.d.ts +27 -0
- package/dist/utils/vcard.d.ts.map +1 -0
- package/dist/utils/vcard.js +141 -0
- package/dist/utils/vcard.js.map +1 -0
- package/dist/utils/zip-reader.d.ts +16 -0
- package/dist/utils/zip-reader.d.ts.map +1 -0
- package/dist/utils/zip-reader.js +108 -0
- package/dist/utils/zip-reader.js.map +1 -0
- package/package.json +3 -3
|
@@ -10,15 +10,21 @@ const PROMISE = [
|
|
|
10
10
|
// German
|
|
11
11
|
promise("ich schicke|ich sende|ich melde mich|ich werde|ich kümmere mich|wir schicken|wir senden|wir melden uns|ich gebe bescheid"),
|
|
12
12
|
];
|
|
13
|
+
// Exact word forms: a stem with \p{L}* also matched "środowisko" (environment) as Wednesday.
|
|
13
14
|
const WEEKDAYS = [
|
|
14
|
-
[/(?<!\p{L})(sunday|niedziel
|
|
15
|
-
[/(?<!\p{L})(monday|
|
|
16
|
-
[/(?<!\p{L})(tuesday|wtorek|
|
|
17
|
-
[/(?<!\p{L})(wednesday|środ
|
|
18
|
-
[/(?<!\p{L})(thursday|
|
|
19
|
-
[/(?<!\p{L})(friday|
|
|
20
|
-
[/(?<!\p{L})(saturday|sobot
|
|
15
|
+
[/(?<!\p{L})(sunday|niedziela|niedzielę|niedzieli|niedzielą|sonntag)(?!\p{L})/iu, 0],
|
|
16
|
+
[/(?<!\p{L})(monday|poniedziałek|poniedziałku|poniedziałkiem|montag)(?!\p{L})/iu, 1],
|
|
17
|
+
[/(?<!\p{L})(tuesday|wtorek|wtorku|wtorkiem|dienstag)(?!\p{L})/iu, 2],
|
|
18
|
+
[/(?<!\p{L})(wednesday|środa|środę|środy|środzie|środą|mittwoch)(?!\p{L})/iu, 3],
|
|
19
|
+
[/(?<!\p{L})(thursday|czwartek|czwartku|czwartkiem|donnerstag)(?!\p{L})/iu, 4],
|
|
20
|
+
[/(?<!\p{L})(friday|piątek|piątku|piątkiem|freitag)(?!\p{L})/iu, 5],
|
|
21
|
+
[/(?<!\p{L})(saturday|sobota|sobotę|soboty|sobocie|sobotą|samstag)(?!\p{L})/iu, 6],
|
|
21
22
|
];
|
|
23
|
+
// A date only counts when it exists: 31.02 and 2026-13-45 are not dates.
|
|
24
|
+
function validDate(year, month, day) {
|
|
25
|
+
const candidate = new Date(Date.UTC(year, month - 1, day));
|
|
26
|
+
return candidate.getUTCFullYear() === year && candidate.getUTCMonth() === month - 1 && candidate.getUTCDate() === day ? iso(candidate) : undefined;
|
|
27
|
+
}
|
|
22
28
|
function iso(date) {
|
|
23
29
|
return date.toISOString().slice(0, 10);
|
|
24
30
|
}
|
|
@@ -63,24 +69,31 @@ function namedMonthDate(sentence, day) {
|
|
|
63
69
|
/** The date a sentence names, counted from `now` (a UTC day). Weekday names mean the next such day after today. */
|
|
64
70
|
export function parseDue(sentence, now) {
|
|
65
71
|
const day = new Date(Date.UTC(now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate()));
|
|
66
|
-
const full = sentence.match(
|
|
67
|
-
if (full)
|
|
68
|
-
|
|
72
|
+
const full = sentence.match(/(?<![\d-])(\d{4})-(\d{2})-(\d{2})(?![\d-])/);
|
|
73
|
+
if (full) {
|
|
74
|
+
const exact = validDate(Number(full[1]), Number(full[2]), Number(full[3]));
|
|
75
|
+
if (exact)
|
|
76
|
+
return exact;
|
|
77
|
+
}
|
|
69
78
|
const named = namedMonthDate(sentence, day);
|
|
70
79
|
if (named)
|
|
71
80
|
return named;
|
|
72
|
-
|
|
81
|
+
// 5.11. / 05.11.2026 / 5/11: not a version number or a decimal ("version 2.3", "1.5 hours"), so without a year it must
|
|
82
|
+
// follow a word that introduces a date ("by", "do", "bis").
|
|
83
|
+
const dotted = sentence.match(/(?<![\d.,])(\d{1,2})[./](\d{1,2})(?:[./](\d{2,4}))?(?![\d]|[./]\d)/);
|
|
73
84
|
if (dotted) {
|
|
74
|
-
const
|
|
75
|
-
const
|
|
76
|
-
if (
|
|
85
|
+
const before = sentence.slice(0, dotted.index ?? 0);
|
|
86
|
+
const introduced = /(?<!\p{L})(by|until|before|on|due|do|na|przed|bis|am|vor|dnia)\s+$/iu.test(before);
|
|
87
|
+
if (dotted[3] || introduced) {
|
|
77
88
|
let year = dotted[3] ? Number(dotted[3]) : day.getUTCFullYear();
|
|
78
89
|
if (year < 100)
|
|
79
90
|
year += 2000;
|
|
80
|
-
const
|
|
81
|
-
if (
|
|
82
|
-
|
|
83
|
-
|
|
91
|
+
const exact = validDate(year, Number(dotted[2]), Number(dotted[1]));
|
|
92
|
+
if (exact) {
|
|
93
|
+
if (dotted[3] || exact >= iso(day))
|
|
94
|
+
return exact;
|
|
95
|
+
return validDate(year + 1, Number(dotted[2]), Number(dotted[1]));
|
|
96
|
+
}
|
|
84
97
|
}
|
|
85
98
|
}
|
|
86
99
|
if (/(?<!\p{L})(today|dzisiaj|dziś|heute|eod|end of (?:the )?day)(?!\p{L})/iu.test(sentence))
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commitment-phrases.js","sourceRoot":"","sources":["../../src/utils/commitment-phrases.ts"],"names":[],"mappings":"AAAA,sHAAsH;AACtH,sHAAsH;AAQtH,uFAAuF;AACvF,MAAM,OAAO,GAAG,CAAC,KAAa,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC,iBAAiB,KAAK,aAAa,EAAE,IAAI,CAAC,CAAC;AACzF,MAAM,OAAO,GAAG;IACd,UAAU;IACV,OAAO,CAAC,mIAAmI,CAAC;IAC5I,SAAS;IACT,OAAO,CAAC,+KAA+K,CAAC;IACxL,SAAS;IACT,OAAO,CAAC,0HAA0H,CAAC;CACpI,CAAC;AAEF,MAAM,QAAQ,GAA4B;IACxC,CAAC,
|
|
1
|
+
{"version":3,"file":"commitment-phrases.js","sourceRoot":"","sources":["../../src/utils/commitment-phrases.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export declare const INVISIBLE: RegExp;
|
|
2
|
+
/** Without control, bidi and zero-width characters, whitespace collapsed (newlines kept only when asked), at most `max` characters. */
|
|
3
|
+
export declare function cleanContactText(value: string, max: number, keepNewlines?: boolean): string;
|
|
4
|
+
/** Lowercases ASCII letters only: toLowerCase() would turn the Kelvin sign (U+212A) into "k" and make two different addresses one. */
|
|
5
|
+
export declare function lowerAscii(value: string): string;
|
|
6
|
+
/** A lowercased (ASCII only) address, or undefined when the text is not one. */
|
|
7
|
+
export declare function normalizeContactAddress(value: string): string | undefined;
|
|
8
|
+
//# sourceMappingURL=contact-text.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contact-text.d.ts","sourceRoot":"","sources":["../../src/utils/contact-text.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,SAAS,QAAiN,CAAC;AAGxO,uIAAuI;AACvI,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,YAAY,UAAQ,GAAG,MAAM,CAMzF;AAED,sIAAsI;AACtI,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEhD;AAED,gFAAgF;AAChF,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAGzE"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
// Names, notes and addresses of contacts come from mail headers and vCard files: untrusted text. Cleaned before they are
|
|
2
|
+
// stored or shown, so a name cannot hide text from the reader or pass for several lines of something else.
|
|
3
|
+
const CONTROL = /[\u0000-\u0008\u000B-\u001F\u007F-\u009F]/g;
|
|
4
|
+
// Zero-width, bidi, tag characters (U+E0000-E007F smuggle ASCII invisibly), variation selectors, soft hyphen and the blank fillers.
|
|
5
|
+
export const INVISIBLE = /[\u00AD\u061C\u115F\u180E\u200B-\u200F\u202A-\u202E\u2060-\u206F\u2800\u3164\uFEFF\uFFA0\uFFF9-\uFFFB\u{E0000}-\u{E007F}]|[\u034F\u180B-\u180D\u180F\uFE00-\uFE0F\u{E0100}-\u{E01EF}]|\u17B4|\u17B5|\u1160/gu;
|
|
6
|
+
const ADDRESS = /^[^\s@<>()",;:\\[\]]+@[^\s@<>()",;:\\[\]]+\.[^\s@<>()",;:\\[\]]+$/;
|
|
7
|
+
/** Without control, bidi and zero-width characters, whitespace collapsed (newlines kept only when asked), at most `max` characters. */
|
|
8
|
+
export function cleanContactText(value, max, keepNewlines = false) {
|
|
9
|
+
const text = value.replace(/\r\n?/g, "\n").replace(INVISIBLE, "");
|
|
10
|
+
const cleaned = keepNewlines
|
|
11
|
+
? text.split("\n").map((line) => line.replace(CONTROL, " ").replace(/\s+/g, " ").trim()).join("\n").replace(/\n{3,}/g, "\n\n").trim()
|
|
12
|
+
: text.replace(CONTROL, " ").replace(/\s+/g, " ").trim();
|
|
13
|
+
return cleaned.slice(0, max).trim();
|
|
14
|
+
}
|
|
15
|
+
/** Lowercases ASCII letters only: toLowerCase() would turn the Kelvin sign (U+212A) into "k" and make two different addresses one. */
|
|
16
|
+
export function lowerAscii(value) {
|
|
17
|
+
return value.replace(/[A-Z]/g, (letter) => letter.toLowerCase());
|
|
18
|
+
}
|
|
19
|
+
/** A lowercased (ASCII only) address, or undefined when the text is not one. */
|
|
20
|
+
export function normalizeContactAddress(value) {
|
|
21
|
+
const address = lowerAscii(value.trim().replace(/^mailto:/i, "").replace(/^<|>$/g, "").trim());
|
|
22
|
+
return address.length <= 254 && ADDRESS.test(address) ? address : undefined;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=contact-text.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contact-text.js","sourceRoot":"","sources":["../../src/utils/contact-text.ts"],"names":[],"mappings":"AAAA,yHAAyH;AACzH,2GAA2G;AAE3G,MAAM,OAAO,GAAG,4CAA4C,CAAC;AAC7D,oIAAoI;AACpI,MAAM,CAAC,MAAM,SAAS,GAAG,8MAA8M,CAAC;AACxO,MAAM,OAAO,GAAG,mEAAmE,CAAC;AAEpF,uIAAuI;AACvI,MAAM,UAAU,gBAAgB,CAAC,KAAa,EAAE,GAAW,EAAE,YAAY,GAAG,KAAK;IAC/E,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;IAClE,MAAM,OAAO,GAAG,YAAY;QAC1B,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE;QACrI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IAC3D,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;AACtC,CAAC;AAED,sIAAsI;AACtI,MAAM,UAAU,UAAU,CAAC,KAAa;IACtC,OAAO,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;AACnE,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,uBAAuB,CAAC,KAAa;IACnD,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAC/F,OAAO,OAAO,CAAC,MAAM,IAAI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;AAC9E,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/** The only tools a grant can cover: the ones that send mail to a recipient the person can name in advance. */
|
|
2
|
+
export declare const GRANTABLE_TOOLS: readonly ["send_email", "reply_to_email", "reply_all_email", "forward_email", "send_draft", "schedule_draft"];
|
|
3
|
+
export type GrantableTool = (typeof GRANTABLE_TOOLS)[number];
|
|
4
|
+
export declare const isGrantableTool: (name: string) => name is GrantableTool;
|
|
5
|
+
export declare const MAX_GRANT_USES = 50;
|
|
6
|
+
export declare const MAX_GRANT_DAYS = 30;
|
|
7
|
+
export declare const MAX_GRANT_RECIPIENTS = 50;
|
|
8
|
+
export declare const MAX_GRANT_NOTE_CHARS = 200;
|
|
9
|
+
export type DelegationMode = "off" | "on";
|
|
10
|
+
export declare function parseDelegationEnv(name: string): DelegationMode;
|
|
11
|
+
/** The bare, ASCII-lowercased address of one recipient ("Name <a@b.example>" or "a@b.example"); undefined when it cannot be read exactly. */
|
|
12
|
+
export declare function normalizeRecipient(value: unknown): string | undefined;
|
|
13
|
+
/** A pattern a grant may hold: an exact address, or "@domain" for every address at exactly that domain. Undefined when it is neither. */
|
|
14
|
+
export declare function normalizeRecipientPattern(value: unknown): string | undefined;
|
|
15
|
+
/** Whether every recipient of a call is an exact match of a pattern. No recipient, or one that cannot be read, is never covered. */
|
|
16
|
+
export declare function recipientsCovered(patterns: readonly string[], recipients: readonly unknown[]): boolean;
|
|
17
|
+
//# sourceMappingURL=delegation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delegation.d.ts","sourceRoot":"","sources":["../../src/utils/delegation.ts"],"names":[],"mappings":"AAMA,+GAA+G;AAC/G,eAAO,MAAM,eAAe,YAAI,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,eAAe,EAAE,YAAY,EAAE,gBAAgB,CAAU,CAAC;AAC7I,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC;AAE7D,eAAO,MAAM,eAAe,SAAU,MAAM,KAAG,IAAI,IAAI,aAAsE,CAAC;AAE9H,eAAO,MAAM,cAAc,KAAK,CAAC;AACjC,eAAO,MAAM,cAAc,KAAK,CAAC;AACjC,eAAO,MAAM,oBAAoB,KAAK,CAAC;AACvC,eAAO,MAAM,oBAAoB,MAAM,CAAC;AAExC,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,IAAI,CAAC;AAE1C,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,CAM/D;AAiBD,6IAA6I;AAC7I,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAMrE;AAED,yIAAyI;AACzI,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAU5E;AAED,oIAAoI;AACpI,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,EAAE,UAAU,EAAE,SAAS,OAAO,EAAE,GAAG,OAAO,CAStG"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
// Scoped delegation: the rules that decide whether a grant covers a call. A grant is a narrow, expiring permission the
|
|
2
|
+
// person creates with the CLI at a terminal; no MCP tool can create or widen one. That holds against a model that has only
|
|
3
|
+
// MCP tools, not against one that can also write files or run a shell (it can write grants.json itself): the store is not
|
|
4
|
+
// signed. Everything here is pure, so the same rules serve the gate in front of a tool call, the claim just before the
|
|
5
|
+
// send, the store and the CLI.
|
|
6
|
+
/** The only tools a grant can cover: the ones that send mail to a recipient the person can name in advance. */
|
|
7
|
+
export const GRANTABLE_TOOLS = ["send_email", "reply_to_email", "reply_all_email", "forward_email", "send_draft", "schedule_draft"];
|
|
8
|
+
export const isGrantableTool = (name) => GRANTABLE_TOOLS.includes(name);
|
|
9
|
+
export const MAX_GRANT_USES = 50;
|
|
10
|
+
export const MAX_GRANT_DAYS = 30;
|
|
11
|
+
export const MAX_GRANT_RECIPIENTS = 50;
|
|
12
|
+
export const MAX_GRANT_NOTE_CHARS = 200;
|
|
13
|
+
export function parseDelegationEnv(name) {
|
|
14
|
+
const raw = process.env[name]?.trim().toLowerCase();
|
|
15
|
+
// An unfilled "${user_config.delegation}" from a host that did not substitute it is "not set", not a typo to fail on.
|
|
16
|
+
if (!raw || raw.startsWith("${"))
|
|
17
|
+
return "off";
|
|
18
|
+
if (raw === "off" || raw === "on")
|
|
19
|
+
return raw;
|
|
20
|
+
throw new Error(`${name} must be one of: off, on (got "${raw}").`);
|
|
21
|
+
}
|
|
22
|
+
// Only A-Z are folded. String.prototype.toLowerCase would also turn non-ASCII characters into ASCII ones (the Kelvin sign
|
|
23
|
+
// U+212A becomes "k"), which is exactly the look-alike trick the exact comparison below must not fall for.
|
|
24
|
+
const asciiLower = (value) => value.replace(/[A-Z]/g, (letter) => String.fromCharCode(letter.charCodeAt(0) + 32));
|
|
25
|
+
const LABEL = "[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?";
|
|
26
|
+
const DOMAIN = new RegExp(`^${LABEL}(?:\\.${LABEL})+$`);
|
|
27
|
+
const ADDRESS = new RegExp(`^[a-z0-9.!#$%&'*+/=?^_\`{|}~-]+@(${LABEL}(?:\\.${LABEL})+)$`);
|
|
28
|
+
function asciiAddress(value) {
|
|
29
|
+
// Anything but printable ASCII (a space, a control or bidi character, a non-ASCII letter) cannot be read with certainty.
|
|
30
|
+
if (/[^\x21-\x7e]/.test(value))
|
|
31
|
+
return undefined;
|
|
32
|
+
const text = asciiLower(value);
|
|
33
|
+
return text.length <= 254 && ADDRESS.test(text) ? text : undefined;
|
|
34
|
+
}
|
|
35
|
+
/** The bare, ASCII-lowercased address of one recipient ("Name <a@b.example>" or "a@b.example"); undefined when it cannot be read exactly. */
|
|
36
|
+
export function normalizeRecipient(value) {
|
|
37
|
+
if (typeof value !== "string")
|
|
38
|
+
return undefined;
|
|
39
|
+
const text = value.trim();
|
|
40
|
+
// The display name is ignored; what counts is the one address between the angle brackets.
|
|
41
|
+
const named = /^[^<>]*<([^<>]+)>$/.exec(text);
|
|
42
|
+
return asciiAddress((named ? named[1] : text).trim());
|
|
43
|
+
}
|
|
44
|
+
/** A pattern a grant may hold: an exact address, or "@domain" for every address at exactly that domain. Undefined when it is neither. */
|
|
45
|
+
export function normalizeRecipientPattern(value) {
|
|
46
|
+
if (typeof value !== "string")
|
|
47
|
+
return undefined;
|
|
48
|
+
const text = value.trim();
|
|
49
|
+
if (text.startsWith("@")) {
|
|
50
|
+
if (/[^\x21-\x7e]/.test(text))
|
|
51
|
+
return undefined;
|
|
52
|
+
const domain = asciiLower(text.slice(1));
|
|
53
|
+
return domain.length <= 253 && DOMAIN.test(domain) ? `@${domain}` : undefined;
|
|
54
|
+
}
|
|
55
|
+
// "*" is a legal character in an address, but in a pattern it only ever means someone hoped for a wildcard: there are none.
|
|
56
|
+
return text.includes("*") ? undefined : asciiAddress(text);
|
|
57
|
+
}
|
|
58
|
+
/** Whether every recipient of a call is an exact match of a pattern. No recipient, or one that cannot be read, is never covered. */
|
|
59
|
+
export function recipientsCovered(patterns, recipients) {
|
|
60
|
+
if (recipients.length === 0)
|
|
61
|
+
return false;
|
|
62
|
+
for (const recipient of recipients) {
|
|
63
|
+
const address = normalizeRecipient(recipient);
|
|
64
|
+
if (!address)
|
|
65
|
+
return false;
|
|
66
|
+
const domain = address.slice(address.lastIndexOf("@"));
|
|
67
|
+
if (!patterns.includes(address) && !patterns.includes(domain))
|
|
68
|
+
return false;
|
|
69
|
+
}
|
|
70
|
+
return true;
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=delegation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delegation.js","sourceRoot":"","sources":["../../src/utils/delegation.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-lock.d.ts","sourceRoot":"","sources":["../../src/utils/file-lock.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"file-lock.d.ts","sourceRoot":"","sources":["../../src/utils/file-lock.ts"],"names":[],"mappings":"AAsFA,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAc/D;AA0HD,wBAAsB,YAAY,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAQzF"}
|
package/dist/utils/file-lock.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { randomUUID } from "node:crypto";
|
|
2
|
-
import { mkdir, open,
|
|
2
|
+
import { mkdir, open, stat, unlink } from "node:fs/promises";
|
|
3
|
+
import { readRegularFile } from "./regular-file.js";
|
|
3
4
|
import { dirname } from "node:path";
|
|
4
5
|
import { logger } from "./logger.js";
|
|
5
6
|
// Cross-process advisory lock for the JSON-backed stores (SnoozeService,
|
|
@@ -111,7 +112,7 @@ async function isStale(lockPath) {
|
|
|
111
112
|
// death, since age alone can't tell "dead holder" apart from "slow but
|
|
112
113
|
// live holder". A dead PID means the lock is stealable immediately,
|
|
113
114
|
// regardless of age.
|
|
114
|
-
const content = await
|
|
115
|
+
const content = await readRegularFile(lockPath).catch(() => undefined);
|
|
115
116
|
const pidMatch = content?.match(/^(\d+)-/);
|
|
116
117
|
if (pidMatch) {
|
|
117
118
|
const pid = Number(pidMatch[1]);
|
|
@@ -188,7 +189,7 @@ async function acquire(lockPath) {
|
|
|
188
189
|
continue;
|
|
189
190
|
}
|
|
190
191
|
if (Date.now() > deadline) {
|
|
191
|
-
const owner = await
|
|
192
|
+
const owner = await readRegularFile(lockPath).catch(() => "unknown");
|
|
192
193
|
throw new Error(`Timed out after ${LOCK_ACQUIRE_TIMEOUT_MS}ms waiting for lock ${lockPath} (held by ${owner.trim()}). ` +
|
|
193
194
|
"Another process is using the same data directory right now.");
|
|
194
195
|
}
|
|
@@ -197,7 +198,7 @@ async function acquire(lockPath) {
|
|
|
197
198
|
}
|
|
198
199
|
}
|
|
199
200
|
async function release(lockPath, token) {
|
|
200
|
-
const current = await
|
|
201
|
+
const current = await readRegularFile(lockPath).catch(() => undefined);
|
|
201
202
|
if (current !== undefined && current !== token) {
|
|
202
203
|
// Stolen as stale by another process while we were still working —
|
|
203
204
|
// that lock is now theirs. Deleting it here would let a third caller
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-lock.js","sourceRoot":"","sources":["../../src/utils/file-lock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,
|
|
1
|
+
{"version":3,"file":"file-lock.js","sourceRoot":"","sources":["../../src/utils/file-lock.ts"],"names":[],"mappings":"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"}
|
|
@@ -24,7 +24,15 @@ export declare class MailTaint {
|
|
|
24
24
|
} | undefined;
|
|
25
25
|
}
|
|
26
26
|
export declare const TAINT_GATED_TOOLS: Set<string>;
|
|
27
|
-
|
|
27
|
+
/**
|
|
28
|
+
* Whether this call is one the confirmation gate applies to after a high-risk message was read. A preview or a switch-off
|
|
29
|
+
* passes, but only through an argument the tool really declares: an undeclared `dryRun` is ignored by the tool, and honouring
|
|
30
|
+
* it here would let a call skip the gate and still act. Each flag is read with the parser the handlers use (so "false",
|
|
31
|
+
* "no", 0 and " FALSE " mean what they mean there), and the action is trimmed the way requireString trims it.
|
|
32
|
+
*/
|
|
33
|
+
export declare function isGatedAction(name: string, args: Record<string, unknown>, declared: ReadonlySet<string>): boolean;
|
|
34
|
+
/** Marks the nodes of a result that read like an instruction to an AI. Returns whether anything was marked. */
|
|
35
|
+
export declare function annotateHighRisk(value: unknown, taint: MailTaint): boolean;
|
|
28
36
|
/** A tool handler whose results are scanned for mail that tries to steer an AI, wherever that text came from. */
|
|
29
37
|
export declare function withRiskScan<R, T extends {
|
|
30
38
|
content: unknown[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mail-security.d.ts","sourceRoot":"","sources":["../../src/utils/mail-security.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"mail-security.d.ts","sourceRoot":"","sources":["../../src/utils/mail-security.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAOtD,MAAM,MAAM,aAAa,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAAC;AAEtD,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,aAAa,CAAC;IACrB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,EAAE,YAAY,EAAE,CAAC;IACtB,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,uGAAuG;IACvG,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AA4ID,wBAAgB,UAAU,CAAC,KAAK,EAAE,WAAW,GAAG,kBAAkB,CA+CjE;AAID,qBAAa,SAAS;IACpB,OAAO,CAAC,IAAI,CAAqD;IAEjE,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,kBAAkB,GAAG,IAAI,CAE1D;IAED,OAAO,IAAI;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,EAAE,CAAA;KAAE,GAAG,SAAS,CAE5D;CACF;AAGD,eAAO,MAAM,iBAAiB,aAK5B,CAAC;AAMH;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,OAAO,CAUjH;AA2OD,+GAA+G;AAC/G,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,GAAG,OAAO,CAE1E;AAwCD,iHAAiH;AACjH,wBAAgB,YAAY,CAAC,CAAC,EAAE,CAAC,SAAS;IAAE,OAAO,EAAE,OAAO,EAAE,CAAC;IAAC,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,EAC9G,KAAK,EAAE,SAAS,EAChB,OAAO,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,GAClC,CAAC,OAAO,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CA2C5B"}
|