@bobfrankston/rmfmail 1.2.306 → 1.2.308
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 +24 -12
- package/client/android-bootstrap.bundle.js +45 -7
- package/client/android-bootstrap.bundle.js.map +2 -2
- package/client/app.bundle.js +26 -1
- package/client/app.bundle.js.map +2 -2
- package/client/components/message-viewer.js +36 -0
- package/client/components/message-viewer.js.map +1 -1
- package/client/components/message-viewer.ts +35 -1
- package/client/compose/compose.bundle.js +1 -1
- package/client/compose/compose.bundle.js.map +2 -2
- package/client/lib/api-client.js +1 -1
- package/client/lib/api-client.js.map +1 -1
- package/client/lib/api-client.ts +3 -3
- package/client/package.json +1 -1
- package/docs/allowlist.md +19 -1
- package/npmchanges.md +39 -0
- package/package.json +8 -5
- package/packages/mailx-imap/index.d.ts.map +1 -1
- package/packages/mailx-imap/index.js +22 -15
- package/packages/mailx-imap/index.js.map +1 -1
- package/packages/mailx-imap/index.ts +23 -19
- package/packages/mailx-imap/package-lock.json +2 -2
- package/packages/mailx-imap/package.json +1 -1
- package/packages/mailx-service/index.d.ts +2 -1
- package/packages/mailx-service/index.d.ts.map +1 -1
- package/packages/mailx-service/index.js +4 -1
- package/packages/mailx-service/index.js.map +1 -1
- package/packages/mailx-service/index.ts +6 -3
- package/packages/mailx-service/package.json +1 -1
- package/packages/mailx-settings/docs/allowlist.md +19 -1
- package/packages/mailx-settings/docs/rules-design.md +43 -0
- package/packages/mailx-settings/index.d.ts +1 -0
- package/packages/mailx-settings/index.d.ts.map +1 -1
- package/packages/mailx-settings/index.js +4 -0
- package/packages/mailx-settings/index.js.map +1 -1
- package/packages/mailx-settings/index.ts +4 -0
- package/packages/mailx-settings/package.json +1 -1
- package/packages/mailx-store/db.d.ts +23 -0
- package/packages/mailx-store/db.d.ts.map +1 -1
- package/packages/mailx-store/db.js +47 -0
- package/packages/mailx-store/db.js.map +1 -1
- package/packages/mailx-store/db.ts +52 -0
- package/packages/mailx-store/package.json +1 -1
- package/packages/mailx-store/store.d.ts.map +1 -1
- package/packages/mailx-store/store.js +3 -0
- package/packages/mailx-store/store.js.map +1 -1
- package/packages/mailx-store/store.ts +3 -0
- package/packages/mailx-store-web/package.json +1 -1
- package/packages/mailx-store-web/web-service.d.ts +2 -1
- package/packages/mailx-store-web/web-service.d.ts.map +1 -1
- package/packages/mailx-store-web/web-service.js +3 -1
- package/packages/mailx-store-web/web-service.js.map +1 -1
- package/packages/mailx-store-web/web-service.ts +5 -3
- package/packages/mailx-types/package.json +1 -1
- package/packages/mailx-types/trust.d.ts +17 -0
- package/packages/mailx-types/trust.d.ts.map +1 -1
- package/packages/mailx-types/trust.js +63 -2
- package/packages/mailx-types/trust.js.map +1 -1
- package/packages/mailx-types/trust.ts +80 -2
|
@@ -1720,7 +1720,7 @@ export async function showMessage(accountId: string, uid: number, folderId?: num
|
|
|
1720
1720
|
bodyEl.appendChild(chip);
|
|
1721
1721
|
}
|
|
1722
1722
|
|
|
1723
|
-
const trust = ((msg as any).trust || []) as { id: string; severity: string; text: string; detail: string }[];
|
|
1723
|
+
const trust = ((msg as any).trust || []) as { id: string; severity: string; text: string; detail: string; via?: string }[];
|
|
1724
1724
|
if (trust.length) {
|
|
1725
1725
|
// An `info` finding is not an accusation, so it gets neither the
|
|
1726
1726
|
// headline nor the "do not open anything" footer — it renders as a
|
|
@@ -1796,6 +1796,40 @@ export async function showMessage(accountId: string, uid: number, folderId?: num
|
|
|
1796
1796
|
}
|
|
1797
1797
|
warn.appendChild(actions);
|
|
1798
1798
|
}
|
|
1799
|
+
// "Trust ‹service› as an intermediary" (Bob 2026-09-08: "how do I
|
|
1800
|
+
// mark zoom and sites like that as trusted intermediaries?"). A
|
|
1801
|
+
// finding carries `via` only when a party PROVABLY handled the
|
|
1802
|
+
// message — the DKIM signer behind a google.com/url redirector,
|
|
1803
|
+
// the Sender: domain that signed a calendar invitation on the
|
|
1804
|
+
// organizer's behalf — so the button names a real party, and the
|
|
1805
|
+
// list entry it writes can only ever count on mail that party
|
|
1806
|
+
// signed. Nothing is offered on a danger banner: no list silences
|
|
1807
|
+
// "this message is not what it says it is".
|
|
1808
|
+
const vias = worst === "danger" ? [] : Array.from(new Set(trust.map(f => f.via).filter(Boolean)));
|
|
1809
|
+
if (vias.length) {
|
|
1810
|
+
const actions = document.createElement("div");
|
|
1811
|
+
actions.className = "mv-trust-actions";
|
|
1812
|
+
for (const via of vias) {
|
|
1813
|
+
const b = document.createElement("button");
|
|
1814
|
+
b.className = "mv-trust-action";
|
|
1815
|
+
b.textContent = `Trust ${via} as an intermediary`;
|
|
1816
|
+
b.addEventListener("click", async () => {
|
|
1817
|
+
b.disabled = true;
|
|
1818
|
+
try {
|
|
1819
|
+
const res = await trustSenderOrDomain("intermediary", via);
|
|
1820
|
+
if (!res?.trusted) throw new Error("the intermediary list did not save");
|
|
1821
|
+
warn.remove();
|
|
1822
|
+
document.querySelector(".mv-spamscore")?.remove();
|
|
1823
|
+
} catch (e: any) {
|
|
1824
|
+
// The reader pressed a button and must know whether it took.
|
|
1825
|
+
b.disabled = false;
|
|
1826
|
+
b.textContent = `Could not save: ${e?.message || e}`;
|
|
1827
|
+
}
|
|
1828
|
+
});
|
|
1829
|
+
actions.appendChild(b);
|
|
1830
|
+
}
|
|
1831
|
+
warn.appendChild(actions);
|
|
1832
|
+
}
|
|
1799
1833
|
bodyEl.appendChild(warn);
|
|
1800
1834
|
}
|
|
1801
1835
|
|
|
@@ -1353,7 +1353,7 @@ function trustSenderOrDomain(type, value) {
|
|
|
1353
1353
|
return ipc().trustSenderOrDomain?.(type, value) ?? Promise.resolve({ trusted: false });
|
|
1354
1354
|
}
|
|
1355
1355
|
function getAllowlist() {
|
|
1356
|
-
return ipc().getAllowlist?.() ?? Promise.resolve({ senders: [], domains: [], recipients: [], flaggedSenders: [], flaggedDomains: [], trustedSenders: [], trustedDomains: [] });
|
|
1356
|
+
return ipc().getAllowlist?.() ?? Promise.resolve({ senders: [], domains: [], recipients: [], flaggedSenders: [], flaggedDomains: [], trustedSenders: [], trustedDomains: [], trustedIntermediaries: [] });
|
|
1357
1357
|
}
|
|
1358
1358
|
function flagSenderOrDomain(type, value) {
|
|
1359
1359
|
return ipc().flagSenderOrDomain?.(type, value) ?? Promise.resolve({ flagged: false });
|