@bobfrankston/rmfmail 1.2.280 → 1.2.282
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/.commitmsg +62 -19
- package/client/android-bootstrap.bundle.js +214 -0
- package/client/android-bootstrap.bundle.js.map +3 -3
- package/client/app.bundle.js +25 -0
- package/client/app.bundle.js.map +3 -3
- package/client/components/message-viewer.js +50 -1
- package/client/components/message-viewer.js.map +1 -1
- package/client/components/message-viewer.ts +54 -1
- package/client/styles/components.css +63 -0
- package/npmchanges.md +88 -0
- package/package.json +5 -5
- package/packages/mailx-imap/package-lock.json +2 -2
- package/packages/mailx-imap/package.json +1 -1
- package/packages/mailx-settings/docs/editor.md +29 -3
- package/packages/mailx-settings/docs/preferences.md +2 -1
- package/packages/mailx-settings/package.json +1 -1
- package/packages/mailx-store/package.json +1 -1
- package/packages/mailx-store/store.d.ts +7 -0
- package/packages/mailx-store/store.d.ts.map +1 -1
- package/packages/mailx-store/store.js +26 -1
- package/packages/mailx-store/store.js.map +1 -1
- package/packages/mailx-store/store.ts +33 -1
- package/packages/mailx-store-web/package.json +1 -1
- package/packages/mailx-types/index.d.ts +2 -0
- package/packages/mailx-types/index.d.ts.map +1 -1
- package/packages/mailx-types/index.js +18 -0
- package/packages/mailx-types/index.js.map +1 -1
- package/packages/mailx-types/index.ts +20 -0
- package/packages/mailx-types/package.json +1 -1
- package/packages/mailx-types/trust.d.ts +91 -0
- package/packages/mailx-types/trust.d.ts.map +1 -0
- package/packages/mailx-types/trust.js +354 -0
- package/packages/mailx-types/trust.js.map +1 -0
- package/packages/mailx-types/trust.ts +389 -0
- /package/packages/mailx-imap/{node_modules.npmglobalize-stash-18028 → node_modules.npmglobalize-stash-56556}/.package-lock.json +0 -0
|
@@ -1640,8 +1640,61 @@ export async function showMessage(accountId: string, uid: number, folderId?: num
|
|
|
1640
1640
|
});
|
|
1641
1641
|
}
|
|
1642
1642
|
|
|
1643
|
-
//
|
|
1643
|
+
// Forgery evidence — its OWN banner, not part of the remote-content
|
|
1644
|
+
// one, because the two are independent. The 2026-08-25 phishes embedded
|
|
1645
|
+
// their card as a cid: image, so nothing was remote, the remote banner
|
|
1646
|
+
// never rendered, and the message displayed with no warning of any kind
|
|
1647
|
+
// even though the server had already marked it spam.
|
|
1648
|
+
//
|
|
1649
|
+
// Always visible, never collapsed: this is not a preference, and a
|
|
1650
|
+
// reader who has to expand a dropdown to find out the message is forged
|
|
1651
|
+
// has already been asked to trust it. Findings name their evidence so
|
|
1652
|
+
// it can be checked rather than believed. (Claude Code 2026-08-25)
|
|
1644
1653
|
bodyEl.innerHTML = "";
|
|
1654
|
+
|
|
1655
|
+
// The server's spam score, shown whether or not it crossed the line
|
|
1656
|
+
// (Bob 2026-08-25: "should we have a flag ... with the spam assassin
|
|
1657
|
+
// number and a color code?"). The sextortion mail that prompted this
|
|
1658
|
+
// scored 2.7 against a 4.5 threshold — under the wire, so nothing was
|
|
1659
|
+
// flagged, but "did not quite trip it" is not the same as clean and
|
|
1660
|
+
// the reader deserves the number rather than a silent pass.
|
|
1661
|
+
//
|
|
1662
|
+
// The colour is a PROPORTION of the server's own threshold, not a
|
|
1663
|
+
// constant: red once the server flagged it, amber past halfway to its
|
|
1664
|
+
// line, quiet below. If the server's threshold changes, this follows.
|
|
1665
|
+
const spam = (msg as any).spamScore as { score: number; threshold: number; flagged: boolean };
|
|
1666
|
+
if (spam && Number.isFinite(spam.score)) {
|
|
1667
|
+
const level = spam.flagged ? "high" : (spam.score >= spam.threshold / 2 ? "mid" : "low");
|
|
1668
|
+
const chip = document.createElement("div");
|
|
1669
|
+
chip.className = `mv-spamscore mv-spamscore-${level}`;
|
|
1670
|
+
chip.title = level === "high"
|
|
1671
|
+
? "Your mail server scored this at or above its spam threshold and flagged it."
|
|
1672
|
+
: level === "mid"
|
|
1673
|
+
? "Below your server's spam threshold, but more than halfway to it."
|
|
1674
|
+
: "Well below your mail server's spam threshold.";
|
|
1675
|
+
chip.textContent = `spam score ${spam.score} of ${spam.threshold}`;
|
|
1676
|
+
bodyEl.appendChild(chip);
|
|
1677
|
+
}
|
|
1678
|
+
|
|
1679
|
+
const trust = ((msg as any).trust || []) as { id: string; severity: string; text: string; detail: string }[];
|
|
1680
|
+
if (trust.length) {
|
|
1681
|
+
const worst = trust.some(f => f.severity === "danger") ? "danger" : "caution";
|
|
1682
|
+
const warn = document.createElement("div");
|
|
1683
|
+
warn.className = `mv-trust mv-trust-${worst}`;
|
|
1684
|
+
warn.innerHTML =
|
|
1685
|
+
`<div class="mv-trust-head">${worst === "danger"
|
|
1686
|
+
? "This message is not what it says it is"
|
|
1687
|
+
: "Check this message before acting on it"}</div>` +
|
|
1688
|
+
trust.map(f =>
|
|
1689
|
+
`<div class="mv-trust-item mv-trust-${escapeText(f.severity)}">` +
|
|
1690
|
+
`<div class="mv-trust-text">${escapeText(f.text)}</div>` +
|
|
1691
|
+
`<div class="mv-trust-detail">${escapeText(f.detail)}</div>` +
|
|
1692
|
+
`</div>`).join("") +
|
|
1693
|
+
`<div class="mv-trust-foot">Links and attachments here should not be opened.</div>`;
|
|
1694
|
+
bodyEl.appendChild(warn);
|
|
1695
|
+
}
|
|
1696
|
+
|
|
1697
|
+
// Remote content banner (collapsible dropdown with sender/recipient details)
|
|
1645
1698
|
if (msg.hasRemoteContent) {
|
|
1646
1699
|
const senderAddr = msg.from?.address || "";
|
|
1647
1700
|
const senderName = msg.from?.name || "";
|
|
@@ -2930,3 +2930,66 @@ body.calendar-sidebar-on .calendar-sidebar { display: flex; }
|
|
|
2930
2930
|
.mv-invite-badge { background: var(--color-danger); }
|
|
2931
2931
|
.mv-invite-summary { text-decoration: line-through; }
|
|
2932
2932
|
}
|
|
2933
|
+
|
|
2934
|
+
/* Forgery evidence — assessMessageTrust findings, rendered above the body by
|
|
2935
|
+
message-viewer. Distinct from the remote-content banner beneath it: that one
|
|
2936
|
+
is about what was blocked, this one is about whether the message is real.
|
|
2937
|
+
Deliberately loud and never collapsible — a reader who must expand something
|
|
2938
|
+
to learn a message is forged has already been asked to trust it.
|
|
2939
|
+
(Claude Code 2026-08-25) */
|
|
2940
|
+
.mv-trust {
|
|
2941
|
+
margin: 0 0 var(--gap-sm) 0;
|
|
2942
|
+
border-radius: var(--radius-sm, 4px);
|
|
2943
|
+
overflow: hidden;
|
|
2944
|
+
box-shadow: inset 0 0 0 2px oklch(0.55 0.22 25);
|
|
2945
|
+
}
|
|
2946
|
+
.mv-trust-caution { box-shadow: inset 0 0 0 2px oklch(0.65 0.20 50); }
|
|
2947
|
+
|
|
2948
|
+
.mv-trust-head {
|
|
2949
|
+
background: oklch(0.42 0.20 25);
|
|
2950
|
+
color: white;
|
|
2951
|
+
padding: var(--gap-xs) var(--gap-md);
|
|
2952
|
+
font-weight: 700;
|
|
2953
|
+
letter-spacing: 0.02em;
|
|
2954
|
+
}
|
|
2955
|
+
.mv-trust-caution .mv-trust-head { background: oklch(0.55 0.18 50); }
|
|
2956
|
+
|
|
2957
|
+
.mv-trust-item {
|
|
2958
|
+
padding: var(--gap-xs) var(--gap-md);
|
|
2959
|
+
border-top: 1px solid var(--color-border, #ddd);
|
|
2960
|
+
}
|
|
2961
|
+
.mv-trust-text { font-weight: 600; }
|
|
2962
|
+
|
|
2963
|
+
/* The evidence itself — a header value, a host, a score. Smaller and quieter
|
|
2964
|
+
than the claim it supports, but never hidden: it is what makes the finding
|
|
2965
|
+
checkable instead of something to be believed. */
|
|
2966
|
+
.mv-trust-detail {
|
|
2967
|
+
font-size: 0.9em;
|
|
2968
|
+
opacity: 0.85;
|
|
2969
|
+
font-family: var(--font-mono, ui-monospace, monospace);
|
|
2970
|
+
word-break: break-word;
|
|
2971
|
+
}
|
|
2972
|
+
|
|
2973
|
+
.mv-trust-foot {
|
|
2974
|
+
padding: var(--gap-xs) var(--gap-md);
|
|
2975
|
+
border-top: 1px solid var(--color-border, #ddd);
|
|
2976
|
+
font-size: 0.9em;
|
|
2977
|
+
opacity: 0.9;
|
|
2978
|
+
}
|
|
2979
|
+
|
|
2980
|
+
/* Receiving server's spam score — always shown when the server left one, so a
|
|
2981
|
+
below-threshold score is visible instead of silently passing. Colour is a
|
|
2982
|
+
proportion of the server's own threshold (see message-viewer), which is why
|
|
2983
|
+
there is no number hardcoded here. (Claude Code 2026-08-25) */
|
|
2984
|
+
.mv-spamscore {
|
|
2985
|
+
display: inline-block;
|
|
2986
|
+
margin: 0 0 var(--gap-sm) 0;
|
|
2987
|
+
padding: 2px var(--gap-sm);
|
|
2988
|
+
border-radius: var(--radius-sm, 4px);
|
|
2989
|
+
font-size: 0.85em;
|
|
2990
|
+
font-family: var(--font-mono, ui-monospace, monospace);
|
|
2991
|
+
letter-spacing: 0.01em;
|
|
2992
|
+
}
|
|
2993
|
+
.mv-spamscore-low { background: var(--color-bg-alt, #eee); color: var(--color-text-muted, #666); }
|
|
2994
|
+
.mv-spamscore-mid { background: oklch(0.55 0.18 50); color: white; font-weight: 600; }
|
|
2995
|
+
.mv-spamscore-high { background: oklch(0.42 0.20 25); color: white; font-weight: 700; }
|
package/npmchanges.md
CHANGED
|
@@ -615,3 +615,91 @@ it copied; it now prints the resolved versions of tinymce and tinymce-i18n as
|
|
|
615
615
|
well. "Which TinyMCE shipped in 1.2.277?" is answerable from the log, with no
|
|
616
616
|
network call at build time and nothing to maintain.
|
|
617
617
|
|
|
618
|
+
## v1.2.280 — 2026-08-25
|
|
619
|
+
|
|
620
|
+
About: show the bundled editor version
|
|
621
|
+
|
|
622
|
+
CORRECTION to 1.2.279. That release added the resolved tinymce / tinymce-i18n
|
|
623
|
+
versions to build-tinymce.js's console output, on the claim that this put the
|
|
624
|
+
answer in the build transcript every publish archives. It does not:
|
|
625
|
+
npmglobalize swallows a sub-build's stdout and reports only "✓ Build
|
|
626
|
+
succeeded", so the line never reaches c:\temp\rebuild\. The echo is still
|
|
627
|
+
correct when the script is run directly, but the build log is not where this
|
|
628
|
+
question gets answered.
|
|
629
|
+
|
|
630
|
+
About… now carries an "Editor bundle" row — "TinyMCE 8.8.2 · 61 languages" —
|
|
631
|
+
read at display time from client/lib/tinymce/package.json and langs/index.json,
|
|
632
|
+
the same tree the editor loads from, so it cannot drift from what is actually
|
|
633
|
+
running. That answers it on the machine showing the symptom, which is where it
|
|
634
|
+
matters, rather than requiring a checkout of the matching tag.
|
|
635
|
+
|
|
636
|
+
Why this keeps mattering: both specs are caret ranges, so the resolved version
|
|
637
|
+
moves whenever npm re-resolves the tree — tinymce sat at 8.6.0 for weeks under
|
|
638
|
+
a ^8.5.0 spec with nothing to notice.
|
|
639
|
+
|
|
640
|
+
## v1.2.281 — 2026-08-25
|
|
641
|
+
|
|
642
|
+
Say when a message is forged
|
|
643
|
+
|
|
644
|
+
Two phishes arrived on 2026-08-25 and mailx rendered both without a word of
|
|
645
|
+
warning ("this is an attack — could you do a better job of identifying it as
|
|
646
|
+
bogus?"). They carried, in the message itself:
|
|
647
|
+
|
|
648
|
+
X-Spam-Flag: YES <- Bob's own server, score 6.7/4.5
|
|
649
|
+
Authentication-Results: ... spf=fail
|
|
650
|
+
From: bobip@bobf.frankston.com <- his own alias, forged
|
|
651
|
+
Return-Path: <3EDTkWNvbY@visionsurveysqld.com.au>
|
|
652
|
+
<area coords="0,0,10000,10000" href="http://.../redirect.php?newurl=...">
|
|
653
|
+
|
|
654
|
+
Not one of those headers was read anywhere in the codebase — no X-Spam-*, no
|
|
655
|
+
Authentication-Results, nothing. The one impersonation check that existed
|
|
656
|
+
(displayNameClaimsOtherAddress) needs a display name, and these had none. Worse,
|
|
657
|
+
the card was a cid: image, so hasRemoteContent was false and even the
|
|
658
|
+
remote-content banner stayed away: the message displayed clean.
|
|
659
|
+
|
|
660
|
+
The whole visible card was one hidden link. sanitizeHtml stripped their forms
|
|
661
|
+
and inputs and left <area> untouched, so the trap was live in the reader —
|
|
662
|
+
every pixel of the picture pointed at an open redirector on a real French
|
|
663
|
+
company's site, which forwarded to a throwaway host with the victim's own
|
|
664
|
+
address base64'd into the fragment so the landing page could prefill it.
|
|
665
|
+
|
|
666
|
+
packages/mailx-types/trust.ts — assessMessageTrust, four checks, all evidence
|
|
667
|
+
rather than scoring:
|
|
668
|
+
|
|
669
|
+
server-spam-verdict The receiving server already decided. Free, and it was
|
|
670
|
+
being thrown away. Only a POSITIVE verdict is trusted:
|
|
671
|
+
anyone can inject X-Spam-Flag: NO into mail they send,
|
|
672
|
+
and honouring that would hand attackers an off switch.
|
|
673
|
+
A forged YES only flags the forger.
|
|
674
|
+
self-spoof From is one of your own addresses AND authentication
|
|
675
|
+
explicitly failed. Either half alone is ordinary —
|
|
676
|
+
people mail themselves notes, forwarded mail fails SPF.
|
|
677
|
+
Together they are not. Own addresses come from the
|
|
678
|
+
recipient allowlist plus Delivered-To, so an alias
|
|
679
|
+
never added to the allowlist is still covered.
|
|
680
|
+
hidden-link-overlay An <area> hotspot bigger than any real image. Runs on
|
|
681
|
+
the RAW html, before the sanitizer disarms it.
|
|
682
|
+
redirector-link A link whose query carries another absolute URL. Names
|
|
683
|
+
the ENDPOINT — a reader can't URL-decode a query string.
|
|
684
|
+
|
|
685
|
+
Deliberately absent: bare SPF failure on mail not claiming to be you.
|
|
686
|
+
Forwarded mail fails SPF constantly, and flagging it would be the cry-wolf
|
|
687
|
+
banner this is trying not to be. Ordinary mail returns nothing at all — no
|
|
688
|
+
"looks fine" reassurance, which would be a claim this cannot support.
|
|
689
|
+
|
|
690
|
+
sanitizeHtml now also disarms image maps outright (<map> and usemap=).
|
|
691
|
+
Unconditional rather than size-gated: image maps have no legitimate use in
|
|
692
|
+
mail, so there is no threshold to tune and nothing to slip past by choosing a
|
|
693
|
+
smaller rectangle. The image still renders; only its hidden clickability goes,
|
|
694
|
+
and the banner explains why it stopped responding.
|
|
695
|
+
|
|
696
|
+
The banner is its own element above the body, not part of the remote-content
|
|
697
|
+
one — the two are independent, as the cid: case proved — and it never
|
|
698
|
+
collapses. A reader who must expand a dropdown to learn a message is forged has
|
|
699
|
+
already been asked to trust it. Each finding shows its evidence so it can be
|
|
700
|
+
checked rather than believed.
|
|
701
|
+
|
|
702
|
+
tests/trust.test.ts pins both phishes and, as importantly, the negative cases:
|
|
703
|
+
a self-sent note with no auth headers, SPF failure on mail not claiming to be
|
|
704
|
+
you, a modest image map, a same-site return-path parameter, and ordinary mail.
|
|
705
|
+
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bobfrankston/rmfmail",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.282",
|
|
4
4
|
"description": "Local-first email client with IMAP sync and standalone native app",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "bin/mailx.js",
|
|
@@ -34,8 +34,8 @@
|
|
|
34
34
|
"dependencies": {
|
|
35
35
|
"@bobfrankston/iflow-direct": "^0.1.65",
|
|
36
36
|
"@bobfrankston/mailx-host": "^0.1.15",
|
|
37
|
-
"@bobfrankston/mailx-imap": "^0.1.
|
|
38
|
-
"@bobfrankston/mailx-store-web": "^0.1.
|
|
37
|
+
"@bobfrankston/mailx-imap": "^0.1.159",
|
|
38
|
+
"@bobfrankston/mailx-store-web": "^0.1.87",
|
|
39
39
|
"@bobfrankston/mailx-sync": "^0.1.29",
|
|
40
40
|
"@bobfrankston/miscinfo": "^1.0.20",
|
|
41
41
|
"@bobfrankston/msger": "^0.1.429",
|
|
@@ -116,8 +116,8 @@
|
|
|
116
116
|
"dependencies": {
|
|
117
117
|
"@bobfrankston/iflow-direct": "^0.1.65",
|
|
118
118
|
"@bobfrankston/mailx-host": "^0.1.15",
|
|
119
|
-
"@bobfrankston/mailx-imap": "^0.1.
|
|
120
|
-
"@bobfrankston/mailx-store-web": "^0.1.
|
|
119
|
+
"@bobfrankston/mailx-imap": "^0.1.159",
|
|
120
|
+
"@bobfrankston/mailx-store-web": "^0.1.87",
|
|
121
121
|
"@bobfrankston/mailx-sync": "^0.1.29",
|
|
122
122
|
"@bobfrankston/miscinfo": "^1.0.20",
|
|
123
123
|
"@bobfrankston/msger": "^0.1.429",
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bobfrankston/mailx-imap",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.160",
|
|
4
4
|
"lockfileVersion": 3,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "@bobfrankston/mailx-imap",
|
|
9
|
-
"version": "0.1.
|
|
9
|
+
"version": "0.1.160",
|
|
10
10
|
"license": "ISC",
|
|
11
11
|
"dependencies": {
|
|
12
12
|
"@bobfrankston/iflow-direct": "^0.1.27",
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
# Compose editor — formatting and shortcuts
|
|
2
2
|
|
|
3
|
-
mailx ships with
|
|
4
|
-
Most things work the same in
|
|
3
|
+
mailx ships with three rich-text editors: **Quill** (default), **tiptap**,
|
|
4
|
+
and **TinyMCE**. Most things work the same in all of them. Differences are
|
|
5
|
+
called out below.
|
|
5
6
|
|
|
6
|
-
Switch editors via **Settings → Editor → Quill | tiptap**.
|
|
7
|
+
Switch editors via **Settings → Editor → Quill | tiptap | TinyMCE**.
|
|
7
8
|
|
|
8
9
|
## Universal — works in both editors
|
|
9
10
|
|
|
@@ -74,6 +75,31 @@ use the heading select / format menu instead.
|
|
|
74
75
|
- **Ghost-text autocomplete** (off by default) — Settings →
|
|
75
76
|
AI autocomplete → on. Predicts the next words while you type.
|
|
76
77
|
|
|
78
|
+
## Editor language (TinyMCE only)
|
|
79
|
+
|
|
80
|
+
**Settings → Editor → Editor language** translates the editor *chrome* —
|
|
81
|
+
menus, dialogs, tooltips — into one of 61 languages. It does **not** touch:
|
|
82
|
+
|
|
83
|
+
- your message text,
|
|
84
|
+
- the spellchecker (English dictionary),
|
|
85
|
+
- the grammar check (Harper is English-only).
|
|
86
|
+
|
|
87
|
+
So German chrome wraps an unchanged English writing experience. Quill and
|
|
88
|
+
tiptap have no localized chrome and ignore the setting.
|
|
89
|
+
|
|
90
|
+
**Auto** (the default) follows this browser's language list, taking the first
|
|
91
|
+
one we have a pack for: an exact match (`pt-BR`), then the bare language
|
|
92
|
+
(`de-CH` → `de`), then any regional variant of it (`he` → `he-IL`). English
|
|
93
|
+
short-circuits — TinyMCE's built-in strings are English, there is no pack to
|
|
94
|
+
load. The menu names what Auto currently resolves to, so it is never a guess.
|
|
95
|
+
|
|
96
|
+
Everything is local: the packs ship with the app, and only the one language in
|
|
97
|
+
force is ever loaded. Translation coverage is community-contributed and uneven
|
|
98
|
+
— untranslated strings stay English even in widely-used languages.
|
|
99
|
+
|
|
100
|
+
The language is fixed when a compose window opens, so a change takes effect on
|
|
101
|
+
the next Reply / Forward / Compose, not in a window already open.
|
|
102
|
+
|
|
77
103
|
## When the toolbar doesn't appear
|
|
78
104
|
|
|
79
105
|
The editor loads from a CDN (jsdelivr). If your network can't reach it,
|
|
@@ -20,7 +20,8 @@
|
|
|
20
20
|
"flaggedOnly": false,
|
|
21
21
|
"folderCounts": false,
|
|
22
22
|
"calendarSidebar": false,
|
|
23
|
-
"editor": "quill"
|
|
23
|
+
"editor": "quill", // "quill" | "tiptap" | "tinymce"
|
|
24
|
+
"editorLanguage": "auto" // TinyMCE menu/dialog language; "auto" | "en" | pack code ("de", "pt-BR", ...)
|
|
24
25
|
},
|
|
25
26
|
"sync": {
|
|
26
27
|
"intervalMinutes": 5, // full-sync interval (per-folder); IDLE handles INBOX inline
|
|
@@ -19,6 +19,7 @@
|
|
|
19
19
|
* be able to consume it without depending on mailx-service — that's the
|
|
20
20
|
* "arrow points the right way" property of the architecture.
|
|
21
21
|
*/
|
|
22
|
+
import { type TrustFinding, type SpamScore } from "@bobfrankston/mailx-types";
|
|
22
23
|
import type { ParsedInvite } from "@bobfrankston/mailx-types";
|
|
23
24
|
import { MailxDB } from "./db.js";
|
|
24
25
|
import { FileMessageStore } from "./file-store.js";
|
|
@@ -53,6 +54,12 @@ export interface StoreMessage extends MessageEnvelope {
|
|
|
53
54
|
bodyOnDisk: boolean;
|
|
54
55
|
deliveredTo: string;
|
|
55
56
|
returnPath: string;
|
|
57
|
+
/** Evidence that this message is forged — empty for ordinary mail. See
|
|
58
|
+
* assessMessageTrust; the viewer renders these above the body. */
|
|
59
|
+
trust: TrustFinding[];
|
|
60
|
+
/** The receiving server SpamAssassin score, present or not, flagged or
|
|
61
|
+
* not. Shown as a badge so a below-threshold score is still visible. */
|
|
62
|
+
spamScore: SpamScore;
|
|
56
63
|
listUnsubscribe: string;
|
|
57
64
|
listUnsubscribeMail: string;
|
|
58
65
|
listUnsubscribeHttp: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["store.ts"],"names":[],"mappings":"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"}
|
|
@@ -21,6 +21,7 @@
|
|
|
21
21
|
*/
|
|
22
22
|
import * as fs from "node:fs";
|
|
23
23
|
import { parseSerial } from "./parse-serial.js";
|
|
24
|
+
import { assessMessageTrust, spamScoreOf } from "@bobfrankston/mailx-types";
|
|
24
25
|
import { parseInvite } from "@bobfrankston/mailx-types";
|
|
25
26
|
import { storeBus } from "./bus.js";
|
|
26
27
|
import { sanitizeHtml, htmlToPlainText } from "@bobfrankston/mailx-types";
|
|
@@ -532,6 +533,30 @@ export class Store {
|
|
|
532
533
|
if (dAddr && recipients.includes(dAddr))
|
|
533
534
|
allowRemote = true;
|
|
534
535
|
}
|
|
536
|
+
// Forgery evidence. Runs on the RAW html on purpose: sanitizeHtml
|
|
537
|
+
// disarms the image-map overlay, so by the time bodyHtml is safe the
|
|
538
|
+
// thing worth reporting is gone. Header-only checks would be immune,
|
|
539
|
+
// but the link checks would silently stop firing.
|
|
540
|
+
//
|
|
541
|
+
// "Own addresses" is the union of the recipient allowlist and the
|
|
542
|
+
// address this copy was delivered to. Delivered-To matters most: it
|
|
543
|
+
// needs no configuration and it is exactly the address a self-spoof
|
|
544
|
+
// forges, so an alias the user never got round to listing is still
|
|
545
|
+
// covered. (Claude Code 2026-08-25)
|
|
546
|
+
const trustHeaderLines = (parsed.headerLines || []).map(h => ({ key: h.key, line: h.line }));
|
|
547
|
+
const trust = assessMessageTrust({
|
|
548
|
+
headerLines: trustHeaderLines,
|
|
549
|
+
fromAddress: envelope.from?.address || "",
|
|
550
|
+
ownAddresses: [...recipients, (deliveredTo.match(/[^\s<>]+@[^\s<>]+/) || [""])[0]].filter(Boolean),
|
|
551
|
+
bodyHtml,
|
|
552
|
+
bodyText,
|
|
553
|
+
});
|
|
554
|
+
// The server's score travels separately from the findings: a finding is
|
|
555
|
+
// an accusation and fires only on evidence, this is a measurement the
|
|
556
|
+
// reader asked to see either way (Bob 2026-08-25). A 2.7 against a 4.5
|
|
557
|
+
// threshold is "did not quite trip the wire", which is not the same
|
|
558
|
+
// thing as clean — and that is exactly the message that got through.
|
|
559
|
+
const spamScore = spamScoreOf(trustHeaderLines);
|
|
535
560
|
if (bodyHtml && !allowRemote) {
|
|
536
561
|
const result = sanitizeHtml(bodyHtml);
|
|
537
562
|
bodyHtml = result.html;
|
|
@@ -543,7 +568,7 @@ export class Store {
|
|
|
543
568
|
hasRemoteContent, remoteAllowed: allowRemote,
|
|
544
569
|
attachments,
|
|
545
570
|
cached: true,
|
|
546
|
-
deliveredTo, returnPath,
|
|
571
|
+
deliveredTo, returnPath, trust, spamScore,
|
|
547
572
|
listUnsubscribe, listUnsubscribeMail, listUnsubscribeHttp, listUnsubscribeOneClick,
|
|
548
573
|
// body_path in the DB is stored relative to the body-store
|
|
549
574
|
// basePath; resolve to absolute so the UI's "Source" button
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.js","sourceRoot":"","sources":["store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAExD,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAOpC,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC1E,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC3E,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAElD;;8EAE8E;AAC9E,SAAS,oBAAoB,CAAC,OAAY;IACtC,IAAI,IAAI,GAAG,EAAE,CAAC;IACd,IAAI,IAAI,GAAG,EAAE,CAAC;IACd,IAAI,QAAQ,GAAG,KAAK,CAAC;IAErB,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;IAC5C,MAAM,MAAM,GAAG,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,OAAQ,GAAW,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAE,GAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACvH,IAAI,MAAM,EAAE,CAAC;QACT,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;QACjD,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACtB,MAAM,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAClC,IAAI,CAAC,IAAI,IAAI,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC;gBAAE,IAAI,GAAG,GAAG,CAAC;iBAC1C,IAAI,CAAC,IAAI,IAAI,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC;gBAAE,IAAI,GAAG,GAAG,CAAC;QACxD,CAAC;IACL,CAAC;IACD,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACjB,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACxC,IAAI,WAAW,EAAE,WAAW,EAAE,CAAC;YAC3B,MAAM,KAAK,GAAG,WAAW,CAAC,WAAW,CAAC;YACtC,IAAI,KAAK,CAAC,GAAG;gBAAE,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;YAC1E,IAAI,KAAK,CAAC,IAAI;gBAAE,IAAI,GAAG,UAAU,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QAC9F,CAAC;IACL,CAAC;IAED,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;IAClD,MAAM,OAAO,GAAG,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,OAAQ,IAAY,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAE,IAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC7H,IAAI,OAAO,IAAI,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,QAAQ,GAAG,IAAI,CAAC;IAE5D,OAAO,EAAE,mBAAmB,EAAE,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,uBAAuB,EAAE,QAAQ,EAAE,CAAC;AACvG,CAAC;AA0CD,MAAM,OAAO,KAAK;IAmHM;IAGA;IAKA;IA1HpB,wEAAwE;IACxE,yEAAyE;IACzE,yEAAyE;IACzE,oEAAoE;IACpE,2DAA2D;IAC3D,EAAE;IACF,oEAAoE;IACpE,uEAAuE;IACvE,oEAAoE;IACpE,kEAAkE;IAC1D,MAAM,CAAU,mBAAmB,GAAG,GAAG,CAAC;IAC1C,SAAS,GAAG,IAAI,GAAG,EAAwB,CAAC;IAC5C,YAAY,CAAC,GAAW;QAC5B,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAClC,IAAI,CAAC,CAAC;YAAE,OAAO,SAAS,CAAC;QACzB,gBAAgB;QAChB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC3B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAC3B,OAAO,CAAC,CAAC;IACb,CAAC;IACO,YAAY,CAAC,GAAW,EAAE,GAAiB;QAC/C,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC3B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAC7B,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,GAAG,KAAK,CAAC,mBAAmB,EAAE,CAAC;YACrD,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;YAClD,IAAI,MAAM,KAAK,SAAS;gBAAE,MAAM;YAChC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAClC,CAAC;IACL,CAAC;IAED,uEAAuE;IACvE,qEAAqE;IACrE,yEAAyE;IACzE,yEAAyE;IACzE,wEAAwE;IACxE,wEAAwE;IACxE,sEAAsE;IACtE,4BAA4B;IACpB,aAAa,GAAG,IAAI,GAAG,EAAoD,CAAC;IAEpF,qEAAqE;IACrE,uEAAuE;IACvE,sEAAsE;IACtE,iEAAiE;IACjE,sEAAsE;IACtE,qEAAqE;IACrE,mDAAmD;IAC3C,eAAe,GAAe,IAAI,CAAC;IACnC,cAAc,GAAe,IAAI,CAAC;IAClC,kBAAkB;QACtB,IAAI,CAAC,IAAI,CAAC,eAAe;YAAE,IAAI,CAAC,eAAe,GAAG,aAAa,EAAE,CAAC;QAClE,OAAO,IAAI,CAAC,eAAe,CAAC;IAChC,CAAC;IACO,iBAAiB;QACrB,IAAI,CAAC,IAAI,CAAC,cAAc;YAAE,IAAI,CAAC,cAAc,GAAG,YAAY,EAAE,CAAC;QAC/D,OAAO,IAAI,CAAC,cAAc,CAAC;IAC/B,CAAC;IACD,sBAAsB;QAClB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAC5B,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;IAC/B,CAAC;IAED;;;;qEAIiE;IACjE,iBAAiB,GAAuD,IAAI,CAAC;IAE7E;;;;;;;kCAO8B;IAC9B,KAAK,CAAC,uBAAuB;QACzB,IAAI,IAAI,CAAC,EAAE,CAAC,QAAQ;YAAE,OAAO;QAC7B,MAAM,KAAK,GAAG,GAAG,CAAC;QAClB,IAAI,IAAI,GAAG,CAAC,EAAE,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC;QACnD,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACtB,SAAS,CAAC;YACN,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,iBAAiB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YACpD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;gBAAE,MAAM;YAC7B,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;gBACnB,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC;gBACZ,OAAO,EAAE,CAAC;gBACV,IAAI,CAAC,CAAC,CAAC,QAAQ;oBAAE,SAAS;gBAC1B,IAAI,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC;oBAAE,SAAS;gBAC9C,IAAI,CAAC;oBACD,IAAI,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC;wBAAE,SAAS;oBAC1D,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;oBACxD,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC;oBAC1D,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;oBAC9E,IAAI,IAAI,EAAE,CAAC;wBAAC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;wBAAC,OAAO,EAAE,CAAC;oBAAC,CAAC;gBAC/D,CAAC;gBAAC,MAAM,CAAC;oBAAC,MAAM,EAAE,CAAC;gBAAC,CAAC;gBACrB,8DAA8D;gBAC9D,gDAAgD;gBAChD,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;YACnD,CAAC;YACD,IAAI,OAAO,GAAG,IAAI,GAAG,KAAK,EAAE,CAAC;gBACzB,OAAO,CAAC,GAAG,CAAC,oBAAoB,OAAO,aAAa,OAAO,aAAa,MAAM,YAAY,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC;YAC5I,CAAC;QACL,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,oCAAoC,OAAO,oBAAoB,MAAM,YAAY,OAAO,oBAAoB,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;IACzK,CAAC;IAED;IACI;;;;sDAIkD;IAClC,EAAW;IAC3B;uEACmE;IACnD,SAA2B;IAC3C;;;iEAG6D;IAC7C,MAAgB,QAAQ;QARxB,OAAE,GAAF,EAAE,CAAS;QAGX,cAAS,GAAT,SAAS,CAAkB;QAK3B,QAAG,GAAH,GAAG,CAAqB;IACzC,CAAC;IAEJ,qEAAqE;IACrE,6DAA6D;IAE7D;;;6DAGyD;IACzD,WAAW;QACP,OAAO,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC;IACjC,CAAC;IAED,gBAAgB;IAEhB,UAAU,CAAC,SAAiB;QACxB,OAAO,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;IACzC,CAAC;IAED;;;uEAGmE;IACnE,iBAAiB,CAAC,SAAiB,EAAE,UAAkB;QACnD,MAAM,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QAC9C,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CACvB,CAAC,CAAC,UAAU,KAAK,UAAU;YAC3B,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,UAAU,CAAC,WAAW,EAAE,CACpD,CAAC;QACF,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IACjD,CAAC;IAED,0BAA0B;IAE1B;;4CAEwC;IACxC,kBAAkB,CAAC,SAAiB,EAAE,GAAW,EAAE,QAAiB;QAChE,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,eAAe,CAAC,SAAS,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;QAC9D,OAAO,GAAG,IAAI,IAAI,CAAC;IACvB,CAAC;IAED,iEAAiE;IACjE,WAAW,CAAC,KAAmB;QAC3B,OAAO,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IACtC,CAAC;IAED,mEAAmE;IACnE,eAAe,CAAC,IAAI,GAAG,CAAC,EAAE,QAAQ,GAAG,EAAE,EAAE,WAAW,GAAG,KAAK,EAAE,YAAiC,MAAM;QACjG,OAAO,IAAI,CAAC,EAAE,CAAC,eAAe,CAAC,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;IAC3E,CAAC;IAED,sEAAsE;IACtE,cAAc,CAAC,KAAa,EAAE,IAAI,GAAG,CAAC,EAAE,QAAQ,GAAG,EAAE,EAAE,SAAkB,EAAE,QAAiB,EAAE,gBAAgB,GAAG,KAAK;QAClH,OAAO,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,gBAAgB,CAAC,CAAC;IAChG,CAAC;IAED,2CAA2C;IAE3C;;;;;;;sEAOkE;IAClE,KAAK,CAAC,UAAU,CAAC,SAAiB,EAAE,GAAW,EAAE,WAAoB,EAAE,QAAiB;QACpF,MAAM,QAAQ,GAAQ,IAAI,CAAC,EAAE,CAAC,eAAe,CAAC,SAAS,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;QACxE,IAAI,CAAC,QAAQ;YAAE,OAAO,IAAI,CAAC;QAE3B,MAAM,SAAS,GAAG,IAAI,CAAC,kBAAkB,EAAS,CAAC;QACnD,MAAM,UAAU,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;QAChE,MAAM,YAAY,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACpD,uEAAuE;QACvE,uEAAuE;QACvE,wEAAwE;QACxE,qBAAqB;QACrB,MAAM,UAAU,GAAG,CAAC,SAAS,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;QAC5F,MAAM,SAAS,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;aAC7D,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;QAEtD,kEAAkE;QAClE,gEAAgE;QAChE,IAAI,CAAC,WAAW,EAAE,CAAC;YACf,MAAM,OAAO,GAAG,CAAC,SAAS,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;YACtF,MAAM,OAAO,GAAG,CAAC,SAAS,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;YACtF,IAAI,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC;gBAC5B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC;gBAC9B,SAAS,CAAC,IAAI,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBACxD,WAAW,GAAG,IAAI,CAAC;YACvB,CAAC;QACL,CAAC;QAED,MAAM,SAAS,GAAG,CAAC,CAAC,CAChB,CAAC,SAAS,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,KAAK,UAAU,CAAC;YAC5F,CAAC,SAAS,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,KAAK,YAAY,CAAC,CACjG,CAAC;QAEF,iEAAiE;QACjE,mEAAmE;QACnE,IAAI,UAAU,GAAG,QAAQ,CAAC,QAAQ,IAAI,EAAE,CAAC;QACzC,IAAI,CAAC,UAAU;YAAE,UAAU,GAAG,IAAI,CAAC,EAAE,CAAC,kBAAkB,CAAC,SAAS,EAAE,GAAG,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC;QAEzF,MAAM,KAAK,GAAiB;YACxB,GAAG,QAAQ;YACX,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE;YAC1B,gBAAgB,EAAE,KAAK,EAAE,aAAa,EAAE,WAAW;YACnD,WAAW,EAAE,EAAE;YACf,MAAM,EAAE,KAAK;YACb,MAAM,EAAE,IAAI;YACZ,UAAU,EAAE,KAAK,EAAK,iDAAiD;YACvE,WAAW,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE;YAC/B,eAAe,EAAE,EAAE,EAAE,mBAAmB,EAAE,EAAE,EAAE,mBAAmB,EAAE,EAAE,EAAE,uBAAuB,EAAE,KAAK;YACrG,OAAO,EAAE,EAAE;YACX,SAAS;SACZ,CAAC;QAEF,uEAAuE;QACvE,IAAI,CAAC,UAAU;YAAE,OAAO,KAAK,CAAC;QAC9B,IAAI,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,UAAU,CAAC;YAAE,OAAO,KAAK,CAAC;QAE9D,8DAA8D;QAC9D,iEAAiE;QACjE,0DAA0D;QAC1D,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,IAAI,CAAC;YAAC,OAAO,GAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC;QAAC,CAAC;QAC/D,MAAM,CAAC,CAAC,8CAA8C,CAAC,CAAC;QACxD,MAAM,QAAQ,GAAG,GAAG,UAAU,IAAI,OAAO,EAAE,CAAC;QAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;QAC3C,IAAI,MAAM,EAAE,CAAC;YACT,8DAA8D;YAC9D,kEAAkE;YAClE,oEAAoE;YACpE,oEAAoE;YACpE,qEAAqE;YACrE,2BAA2B;YAC3B,OAAO,EAAE,GAAG,MAAM,EAAE,aAAa,EAAE,WAAW,IAAI,MAAM,CAAC,aAAa,EAAE,SAAS,EAAE,CAAC;QACxF,CAAC;QAED,iEAAiE;QACjE,+DAA+D;QAC/D,kEAAkE;QAClE,+DAA+D;QAC/D,EAAE;QACF,iEAAiE;QACjE,0DAA0D;QAC1D,8DAA8D;QAC9D,iEAAiE;QACjE,iEAAiE;QACjE,gEAAgE;QAChE,6DAA6D;QAC7D,+DAA+D;QAC/D,6DAA6D;QAC7D,kEAAkE;QAClE,+DAA+D;QAC/D,IAAI,MAAuC,CAAC;QAC5C,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACvD,IAAI,aAAa,EAAE,CAAC;YAChB,MAAM,GAAG,MAAM,aAAa,CAAC;QACjC,CAAC;aAAM,CAAC;YACJ,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAC5B,MAAM,KAAK,GAAG,CAAC,KAAK,IAA8C,EAAE;gBAChE,MAAM,GAAG,GAAW,MAAM,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;gBAChE,MAAM,QAAQ,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC;gBACzC,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;gBAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,CAAC;gBACvC,IAAI,QAAQ,GAAG,EAAE,EAAE,CAAC;oBAChB,OAAO,CAAC,GAAG,CAAC,0BAA0B,QAAQ,UAAU,CAAC,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,UAAU,GAAG,CAAC,CAAC;gBACjH,CAAC;gBACD,OAAO,MAAM,CAAC;YAClB,CAAC,CAAC,EAAE,CAAC;YACL,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;YACxC,IAAI,CAAC;gBAAC,MAAM,GAAG,MAAM,KAAK,CAAC;YAAC,CAAC;oBACrB,CAAC;gBAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAAC,CAAC;QACpD,CAAC;QACD,IAAI,QAAQ,GAAG,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;QACjC,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;QACnC,qEAAqE;QACrE,6BAA6B;QAC7B,+DAA+D;QAC/D,sEAAsE;QACtE,sEAAsE;QACtE,wBAAwB;QACxB,4DAA4D;QAC5D,uCAAuC;QACvC,IAAI,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACnD,IAAI,aAAa,GAAG,KAAK,CAAC;YAC1B,IAAI,CAAC;gBACD,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;gBACxD,aAAa,GAAG,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;uBACtD,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;YACtE,CAAC;YAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC;YACjB,IAAI,aAAa,EAAE,CAAC;gBAChB,OAAO,CAAC,KAAK,CAAC,+CAA+C,SAAS,QAAQ,GAAG,SAAS,UAAU,qDAAqD,CAAC,CAAC;YAC/J,CAAC;iBAAM,CAAC;gBACJ,OAAO,CAAC,KAAK,CAAC,wCAAwC,SAAS,QAAQ,GAAG,SAAS,UAAU,6CAA6C,CAAC,CAAC;YAChJ,CAAC;QACL,CAAC;QACD,uEAAuE;QACvE,mEAAmE;QACnE,mEAAmE;QACnE,kEAAkE;QAClE,yBAAyB;QACzB,EAAE;QACF,iEAAiE;QACjE,oEAAoE;QACpE,EAAE;QACF,+DAA+D;QAC/D,kEAAkE;QAClE,mEAAmE;QACnE,8DAA8D;QAC9D,mEAAmE;QACnE,4DAA4D;QAC5D,MAAM,OAAO,GAAG,QAAQ,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACxE,IAAI,OAAO,IAAI,QAAQ,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;YACrE,IAAI,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC;gBACnB,IAAI,CAAC;oBAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;gBAAC,CAAC;gBAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC;YAC5F,CAAC;iBAAM,CAAC;gBACJ,IAAI,CAAC;oBAAC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;gBAAC,CAAC;gBAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC;YACxE,CAAC;QACL,CAAC;QACD,IAAI,gBAAgB,GAAG,KAAK,CAAC;QAC7B,wEAAwE;QACxE,mEAAmE;QACnE,oEAAoE;QACpE,iEAAiE;QACjE,mEAAmE;QACnE,oEAAoE;QACpE,kEAAkE;QAClE,iEAAiE;QACjE,oEAAoE;QACpE,mDAAmD;QACnD,MAAM,WAAW,GAAG,CAAC,MAAM,CAAC,WAAW,IAAI,EAAE,CAAC;aACzC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YACV,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,WAAW,IAAI,0BAA0B,CAAC,CAAC,WAAW,EAAE,CAAC;YACzE,MAAM,WAAW,GAAG,CAAC,CAAC,CAAC,kBAAkB,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;YAC/D,MAAM,kBAAkB,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;mBAC5C,CAAC,CAAC,CAAC,QAAQ;mBACX,CAAC,WAAW,KAAK,QAAQ,IAAI,WAAW,KAAK,EAAE,CAAC,CAAC;YACxD,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,kBAAkB,EAAE,CAAC;QACxC,CAAC,CAAC;aACD,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC;aAClC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACP,EAAE,EAAE,CAAC,CAAC,CAAC;YACP,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,IAAI,cAAc,CAAC,CAAC,CAAC,EAAE;YAC7C,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,WAAW,IAAI,0BAA0B;YACvD,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;YACnB,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,EAAE;SACjC,CAAC,CAAC,CAAC;QAER,uEAAuE;QACvE,oEAAoE;QACpE,qEAAqE;QACrE,gEAAgE;QAChE,6DAA6D;QAC7D,IAAI,MAAM,GAAwB,IAAI,CAAC;QACvC,IAAI,CAAC;YACD,MAAM,OAAO,GAAG,CAAC,MAAM,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAM,EAAE,EAAE,CACvD,kCAAkC,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,IAAI,EAAE,CAAC;mBACzD,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,CAAC;YACzC,IAAI,OAAO,EAAE,CAAC;gBACV,MAAM,CAAC,GAAS,OAAe,CAAC,OAAO,CAAC;gBACxC,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;gBACvE,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;YAC/B,CAAC;QACL,CAAC;QAAC,OAAO,CAAM,EAAE,CAAC;YACd,OAAO,CAAC,IAAI,CAAC,8BAA8B,EAAE,CAAC,EAAE,OAAO,IAAI,CAAC,CAAC,CAAC;QAClE,CAAC;QAED,mEAAmE;QACnE,8DAA8D;QAC9D,8DAA8D;QAC9D,6DAA6D;QAC7D,mEAAmE;QACnE,oEAAoE;QACpE,oDAAoD;QACpD,+DAA+D;QAC/D,2CAA2C;QAC3C,IAAI,WAAW,GAAG,EAAE,CAAC;QACrB,2DAA2D;QAC3D,mEAAmE;QACnE,sEAAsE;QACtE,sEAAsE;QACtE,qEAAqE;QACrE,oEAAoE;QACpE,2CAA2C;QAC3C,EAAE;QACF,oEAAoE;QACpE,mEAAmE;QACnE,qEAAqE;QACrE,sEAAsE;QACtE,0BAA0B;QAC1B,KAAK,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE,eAAe,EAAE,aAAa,CAAC,EAAE,CAAC;YACjE,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC7C,IAAI,CAAC,YAAY;gBAAE,SAAS;YAC5B,4DAA4D;YAC5D,+DAA+D;YAC/D,MAAM,aAAa,GAAG,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;YAClF,MAAM,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;YAC3B,WAAW,GAAG,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAE,CAAS,EAAE,IAAI,IAAK,CAAS,EAAE,OAAO,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC;YAC/F,IAAI,WAAW;gBAAE,MAAM;QAC3B,CAAC;QAED,MAAM,GAAG,GAAG,CAAC,GAAW,EAAU,EAAE;YAChC,IAAI,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAChC,IAAI,CAAC,CAAC;gBAAE,OAAO,EAAE,CAAC;YAClB,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;gBAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAC/B,IAAI,OAAO,CAAC,KAAK,QAAQ;gBAAE,OAAO,CAAC,CAAC;YACpC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;gBACtC,IAAI,MAAM,IAAI,CAAC;oBAAE,OAAQ,CAAS,CAAC,IAAI,IAAI,EAAE,CAAC;gBAC9C,IAAI,OAAO,IAAI,CAAC;oBAAE,OAAO,MAAM,CAAE,CAAS,CAAC,KAAK,CAAC,CAAC;gBAClD,IAAI,SAAS,IAAI,CAAC;oBAAE,OAAQ,CAAS,CAAC,OAAO,IAAI,EAAE,CAAC;YACxD,CAAC;YACD,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;QACrB,CAAC,CAAC;QACF,MAAM,UAAU,GAAG,GAAG,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QAC3D,MAAM,YAAY,GAAG,GAAG,CAAC,kBAAkB,CAAC,CAAC,IAAI,EAAE,CAAC;QACpD,MAAM,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,GACvE,oBAAoB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACzC,MAAM,eAAe,GAAG,mBAAmB,IAAI,mBAAmB,CAAC;QAEnE,oEAAoE;QACpE,uEAAuE;QACvE,wEAAwE;QACxE,mEAAmE;QACnE,mEAAmE;QACnE,IAAI,CAAC,WAAW,IAAI,WAAW,EAAE,CAAC;YAC9B,MAAM,KAAK,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;YAChF,IAAI,KAAK,IAAI,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC;gBAAE,WAAW,GAAG,IAAI,CAAC;QAChE,CAAC;QAED,IAAI,QAAQ,IAAI,CAAC,WAAW,EAAE,CAAC;YAC3B,MAAM,MAAM,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;YACtC,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC;YACvB,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;QAC/C,CAAC;QAED,MAAM,MAAM,GAAiB;YACzB,GAAG,QAAQ;YACX,QAAQ,EAAE,QAAQ;YAClB,gBAAgB,EAAE,aAAa,EAAE,WAAW;YAC5C,WAAW;YACX,MAAM,EAAE,IAAI;YACZ,WAAW,EAAE,UAAU;YACvB,eAAe,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,uBAAuB;YAClF,2DAA2D;YAC3D,4DAA4D;YAC5D,2DAA2D;YAC3D,uBAAuB;YACvB,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,UAAU,CAAC;YAChD,SAAS;YACT,YAAY;YACZ,MAAM;SACT,CAAC;QACF,+DAA+D;QAC/D,kEAAkE;QAClE,iEAAiE;QACjE,IAAI,OAAO,GAAG,CAAC;YAAE,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACrD,OAAO,MAAM,CAAC;IAClB,CAAC;IAED,iDAAiD;IAEjD,iBAAiB,CAAC,SAAiB,EAAE,MAAc,EAAE,IAAY;QAC7D,OAAO,IAAI,CAAC,EAAE,CAAC,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;IAC9D,CAAC;IAED,QAAQ,CAAC,SAAiB,EAAE,gBAAgB,GAAG,KAAK;QAChD,OAAO,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC;IACzD,CAAC;IAED,cAAc,CAAC,KAAa,EAAE,KAAK,GAAG,EAAE;QACpC,OAAO,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAChD,CAAC;IAED,YAAY,CAAC,KAAa,EAAE,IAAI,GAAG,CAAC,EAAE,QAAQ,GAAG,GAAG;QAChD,OAAO,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;IACvD,CAAC;IAED,wEAAwE;IAExE;;;;;;;;OAQG;IACH,WAAW,CAAC,SAAiB,EAAE,GAAW,EAAE,QAAgB,EAAE,KAAe;QACzE,IAAI,CAAC,EAAE,CAAC,kBAAkB,CAAC,SAAS,EAAE,QAAQ,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;QAC5D,MAAM,GAAG,GAAQ,IAAI,CAAC,EAAE,CAAC,eAAe,CAAC,SAAS,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;QACnE,MAAM,OAAO,GAAuB,GAAG,EAAE,IAAI,CAAC;QAC9C,IAAI,OAAO,EAAE,CAAC;YACV,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC;gBACb,KAAK,EAAE,WAAW,OAAO,EAAE;gBAC3B,IAAI,EAAE,cAAc;gBACpB,SAAS,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK;aAC3C,CAAC,CAAC;QACP,CAAC;IACL,CAAC;IAED;;;;;;;;;;OAUG;IACH,WAAW,CAAC,SAAiB,EAAE,GAAW,EAAE,YAAoB,EAAE,cAAsB;QACpF,MAAM,GAAG,GAAQ,IAAI,CAAC,EAAE,CAAC,eAAe,CAAC,SAAS,EAAE,GAAG,EAAE,YAAY,CAAC,CAAC;QACvE,IAAI,CAAC,GAAG;YAAE,OAAO,KAAK,CAAC;QACvB,IAAI,GAAG,CAAC,SAAS;YAAE,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;QACrF,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,SAAS,EAAE,GAAG,EAAE,YAAY,EAAE,cAAc,CAAC,CAAC;QACrF,IAAI,CAAC,KAAK;YAAE,OAAO,KAAK,CAAC;QACzB,IAAI,CAAC,EAAE,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC;QACzC,IAAI,CAAC,EAAE,CAAC,kBAAkB,CAAC,cAAc,CAAC,CAAC;QAC3C,MAAM,OAAO,GAAuB,GAAG,EAAE,IAAI,CAAC;QAC9C,IAAI,OAAO,EAAE,CAAC;YACV,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC;gBACb,KAAK,EAAE,WAAW,OAAO,EAAE;gBAC3B,IAAI,EAAE,cAAc;gBACpB,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAE,cAAc,EAAE,GAAG,EAAE,OAAO;aAClE,CAAC,CAAC;QACP,CAAC;QACD,sEAAsE;QACtE,sEAAsE;QACtE,mEAAmE;QACnE,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC;YACb,KAAK,EAAE,UAAU,cAAc,EAAE;YACjC,IAAI,EAAE,qBAAqB;YAC3B,SAAS,EAAE,QAAQ,EAAE,cAAc;SACtC,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;;;;OAMG;IACH,YAAY,CAAC,SAAiB,EAAE,GAAW,EAAE,QAAgB,EAAE,aAA4B;QACvF,MAAM,GAAG,GAAQ,IAAI,CAAC,EAAE,CAAC,eAAe,CAAC,SAAS,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;QACnE,IAAI,GAAG,EAAE,SAAS;YAAE,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;QACtF,MAAM,OAAO,GAAuB,GAAG,EAAE,IAAI,CAAC;QAC9C,IAAI,aAAa,IAAI,IAAI,IAAI,aAAa,KAAK,QAAQ,EAAE,CAAC;YACtD,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,SAAS,EAAE,GAAG,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;YAClE,IAAI,CAAC,EAAE,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC;YACrC,IAAI,CAAC,EAAE,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC;YAC1C,IAAI,OAAO,EAAE,CAAC;gBACV,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC;oBACb,KAAK,EAAE,WAAW,OAAO,EAAE;oBAC3B,IAAI,EAAE,cAAc;oBACpB,SAAS,EAAE,QAAQ,EAAE,cAAc,EAAE,aAAa,EAAE,GAAG,EAAE,OAAO;iBACnE,CAAC,CAAC;YACP,CAAC;YACD,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC;gBACb,KAAK,EAAE,UAAU,aAAa,EAAE;gBAChC,IAAI,EAAE,qBAAqB;gBAC3B,SAAS,EAAE,QAAQ,EAAE,aAAa;aACrC,CAAC,CAAC;YACH,OAAO,gBAAgB,CAAC;QAC5B,CAAC;QACD,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,SAAS,EAAE,QAAQ,EAAE,GAAG,EAAE,mDAAmD,EAAE,oBAAoB,CAAC,CAAC;QAC3H,IAAI,CAAC,EAAE,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC;QACrC,IAAI,OAAO,EAAE,CAAC;YACV,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC;gBACb,KAAK,EAAE,WAAW,OAAO,EAAE;gBAC3B,IAAI,EAAE,gBAAgB;gBACtB,SAAS,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO;aACpC,CAAC,CAAC;QACP,CAAC;QACD,OAAO,UAAU,CAAC;IACtB,CAAC;IAED;;iDAE6C;IAC7C,eAAe,CAAC,SAAiB,EAAE,GAAW,EAAE,aAAqB,EAAE,gBAAwB;QAC3F,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,SAAS,EAAE,GAAG,EAAE,aAAa,EAAE,gBAAgB,CAAC,CAAC;QACxF,IAAI,CAAC,KAAK;YAAE,OAAO,KAAK,CAAC;QACzB,IAAI,CAAC,EAAE,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC;QAC1C,IAAI,CAAC,EAAE,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,CAAC;QAC7C,MAAM,GAAG,GAAQ,IAAI,CAAC,EAAE,CAAC,eAAe,CAAC,SAAS,EAAE,GAAG,EAAE,gBAAgB,CAAC,CAAC;QAC3E,MAAM,OAAO,GAAuB,GAAG,EAAE,IAAI,CAAC;QAC9C,IAAI,OAAO,EAAE,CAAC;YACV,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC;gBACb,KAAK,EAAE,WAAW,OAAO,EAAE;gBAC3B,IAAI,EAAE,cAAc;gBACpB,SAAS,EAAE,QAAQ,EAAE,aAAa,EAAE,cAAc,EAAE,gBAAgB,EAAE,GAAG,EAAE,OAAO;aACrF,CAAC,CAAC;QACP,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC;YACb,KAAK,EAAE,UAAU,gBAAgB,EAAE;YACnC,IAAI,EAAE,qBAAqB;YAC3B,SAAS,EAAE,QAAQ,EAAE,gBAAgB;SACxC,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IAChB,CAAC"}
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["store.ts"],"names":[],"mappings":"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"}
|
|
@@ -22,6 +22,7 @@
|
|
|
22
22
|
|
|
23
23
|
import * as fs from "node:fs";
|
|
24
24
|
import { parseSerial } from "./parse-serial.js";
|
|
25
|
+
import { assessMessageTrust, spamScoreOf, type TrustFinding, type SpamScore } from "@bobfrankston/mailx-types";
|
|
25
26
|
import { parseInvite } from "@bobfrankston/mailx-types";
|
|
26
27
|
import type { ParsedInvite } from "@bobfrankston/mailx-types";
|
|
27
28
|
import { storeBus } from "./bus.js";
|
|
@@ -92,6 +93,12 @@ export interface StoreMessage extends MessageEnvelope {
|
|
|
92
93
|
bodyOnDisk: boolean;
|
|
93
94
|
deliveredTo: string;
|
|
94
95
|
returnPath: string;
|
|
96
|
+
/** Evidence that this message is forged — empty for ordinary mail. See
|
|
97
|
+
* assessMessageTrust; the viewer renders these above the body. */
|
|
98
|
+
trust: TrustFinding[];
|
|
99
|
+
/** The receiving server SpamAssassin score, present or not, flagged or
|
|
100
|
+
* not. Shown as a badge so a below-threshold score is still visible. */
|
|
101
|
+
spamScore: SpamScore;
|
|
95
102
|
listUnsubscribe: string;
|
|
96
103
|
listUnsubscribeMail: string;
|
|
97
104
|
listUnsubscribeHttp: string;
|
|
@@ -565,6 +572,31 @@ export class Store {
|
|
|
565
572
|
if (dAddr && recipients.includes(dAddr)) allowRemote = true;
|
|
566
573
|
}
|
|
567
574
|
|
|
575
|
+
// Forgery evidence. Runs on the RAW html on purpose: sanitizeHtml
|
|
576
|
+
// disarms the image-map overlay, so by the time bodyHtml is safe the
|
|
577
|
+
// thing worth reporting is gone. Header-only checks would be immune,
|
|
578
|
+
// but the link checks would silently stop firing.
|
|
579
|
+
//
|
|
580
|
+
// "Own addresses" is the union of the recipient allowlist and the
|
|
581
|
+
// address this copy was delivered to. Delivered-To matters most: it
|
|
582
|
+
// needs no configuration and it is exactly the address a self-spoof
|
|
583
|
+
// forges, so an alias the user never got round to listing is still
|
|
584
|
+
// covered. (Claude Code 2026-08-25)
|
|
585
|
+
const trustHeaderLines = (parsed.headerLines || []).map(h => ({ key: h.key, line: h.line }));
|
|
586
|
+
const trust = assessMessageTrust({
|
|
587
|
+
headerLines: trustHeaderLines,
|
|
588
|
+
fromAddress: envelope.from?.address || "",
|
|
589
|
+
ownAddresses: [...recipients, (deliveredTo.match(/[^\s<>]+@[^\s<>]+/) || [""])[0]].filter(Boolean),
|
|
590
|
+
bodyHtml,
|
|
591
|
+
bodyText,
|
|
592
|
+
});
|
|
593
|
+
// The server's score travels separately from the findings: a finding is
|
|
594
|
+
// an accusation and fires only on evidence, this is a measurement the
|
|
595
|
+
// reader asked to see either way (Bob 2026-08-25). A 2.7 against a 4.5
|
|
596
|
+
// threshold is "did not quite trip the wire", which is not the same
|
|
597
|
+
// thing as clean — and that is exactly the message that got through.
|
|
598
|
+
const spamScore = spamScoreOf(trustHeaderLines);
|
|
599
|
+
|
|
568
600
|
if (bodyHtml && !allowRemote) {
|
|
569
601
|
const result = sanitizeHtml(bodyHtml);
|
|
570
602
|
bodyHtml = result.html;
|
|
@@ -577,7 +609,7 @@ export class Store {
|
|
|
577
609
|
hasRemoteContent, remoteAllowed: allowRemote,
|
|
578
610
|
attachments,
|
|
579
611
|
cached: true,
|
|
580
|
-
deliveredTo, returnPath,
|
|
612
|
+
deliveredTo, returnPath, trust, spamScore,
|
|
581
613
|
listUnsubscribe, listUnsubscribeMail, listUnsubscribeHttp, listUnsubscribeOneClick,
|
|
582
614
|
// body_path in the DB is stored relative to the body-store
|
|
583
615
|
// basePath; resolve to absolute so the UI's "Source" button
|
|
@@ -4,6 +4,8 @@
|
|
|
4
4
|
* This is the contract between client and server.
|
|
5
5
|
*/
|
|
6
6
|
export { CONTACT_RULES } from "./contact-rules.js";
|
|
7
|
+
export { assessMessageTrust, spamScoreOf } from "./trust.js";
|
|
8
|
+
export type { TrustFinding, TrustInput, SpamScore } from "./trust.js";
|
|
7
9
|
export type { MailxApi } from "./mailx-api.js";
|
|
8
10
|
export { addContactsDenylistEntry, addContactsPreferredEntry, type PreferredContactEntry, type CloudReadFn, type CloudWriteFn, } from "./contacts-config.js";
|
|
9
11
|
export { expandRecipients, splitRecipients, isAddressToken, extractAddress, } from "./groups.js";
|