@bobfrankston/rmfmail 1.2.290 → 1.2.292
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 -34
- package/client/android-bootstrap.bundle.js +42 -1
- package/client/android-bootstrap.bundle.js.map +2 -2
- package/client/app.bundle.js +36 -2
- package/client/app.bundle.js.map +2 -2
- package/client/components/message-viewer.js +53 -2
- package/client/components/message-viewer.js.map +1 -1
- package/client/components/message-viewer.ts +53 -3
- package/client/compose/compose.bundle.js +5 -1
- package/client/compose/compose.bundle.js.map +2 -2
- package/client/lib/api-client.js +7 -1
- package/client/lib/api-client.js.map +1 -1
- package/client/lib/api-client.ts +9 -2
- package/client/lib/mailxapi.js +3 -0
- package/client/styles/components.css +25 -0
- package/npmchanges.md +76 -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-service/index.d.ts +20 -0
- package/packages/mailx-service/index.d.ts.map +1 -1
- package/packages/mailx-service/index.js +37 -0
- package/packages/mailx-service/index.js.map +1 -1
- package/packages/mailx-service/index.ts +37 -1
- package/packages/mailx-service/jsonrpc.js +2 -0
- package/packages/mailx-service/jsonrpc.js.map +1 -1
- package/packages/mailx-service/jsonrpc.ts +2 -0
- package/packages/mailx-service/package.json +1 -1
- package/packages/mailx-settings/package.json +1 -1
- package/packages/mailx-store/package.json +1 -1
- package/packages/mailx-store/store.d.ts.map +1 -1
- package/packages/mailx-store/store.js +30 -5
- package/packages/mailx-store/store.js.map +1 -1
- package/packages/mailx-store/store.ts +30 -5
- package/packages/mailx-store-web/android-bootstrap.js +3 -0
- package/packages/mailx-store-web/android-bootstrap.js.map +1 -1
- package/packages/mailx-store-web/android-bootstrap.ts +3 -0
- package/packages/mailx-store-web/package.json +1 -1
- package/packages/mailx-store-web/web-jsonrpc.js +2 -0
- package/packages/mailx-store-web/web-jsonrpc.js.map +1 -1
- package/packages/mailx-store-web/web-jsonrpc.ts +2 -0
- package/packages/mailx-store-web/web-service.d.ts +9 -0
- package/packages/mailx-store-web/web-service.d.ts.map +1 -1
- package/packages/mailx-store-web/web-service.js +28 -0
- package/packages/mailx-store-web/web-service.js.map +1 -1
- package/packages/mailx-store-web/web-service.ts +23 -1
- package/packages/mailx-types/package.json +1 -1
- package/packages/mailx-types/trust.d.ts +11 -0
- package/packages/mailx-types/trust.d.ts.map +1 -1
- package/packages/mailx-types/trust.js +18 -0
- package/packages/mailx-types/trust.js.map +1 -1
- package/packages/mailx-types/trust.ts +29 -0
- /package/packages/mailx-imap/{node_modules.npmglobalize-stash-27100 → node_modules.npmglobalize-stash-50524}/.package-lock.json +0 -0
package/client/app.bundle.js
CHANGED
|
@@ -125,6 +125,7 @@ __export(api_client_exports, {
|
|
|
125
125
|
syncAccount: () => syncAccount,
|
|
126
126
|
syncFolderNow: () => syncFolderNow,
|
|
127
127
|
triggerSync: () => triggerSync,
|
|
128
|
+
trustSenderOrDomain: () => trustSenderOrDomain,
|
|
128
129
|
undeleteMessage: () => undeleteMessage,
|
|
129
130
|
unsubscribeOneClick: () => unsubscribeOneClick,
|
|
130
131
|
updateCalendarEvent: () => updateCalendarEvent,
|
|
@@ -351,8 +352,11 @@ function addUserDictWords(words) {
|
|
|
351
352
|
function removeUserDictWord(word) {
|
|
352
353
|
return ipc().removeUserDictWord?.(word) ?? Promise.resolve([]);
|
|
353
354
|
}
|
|
355
|
+
function trustSenderOrDomain(type, value) {
|
|
356
|
+
return ipc().trustSenderOrDomain?.(type, value) ?? Promise.resolve({ trusted: false });
|
|
357
|
+
}
|
|
354
358
|
function getAllowlist() {
|
|
355
|
-
return ipc().getAllowlist?.() ?? Promise.resolve({ senders: [], domains: [], recipients: [], flaggedSenders: [], flaggedDomains: [] });
|
|
359
|
+
return ipc().getAllowlist?.() ?? Promise.resolve({ senders: [], domains: [], recipients: [], flaggedSenders: [], flaggedDomains: [], trustedSenders: [], trustedDomains: [] });
|
|
356
360
|
}
|
|
357
361
|
function flagSenderOrDomain(type, value) {
|
|
358
362
|
return ipc().flagSenderOrDomain?.(type, value) ?? Promise.resolve({ flagged: false });
|
|
@@ -3108,7 +3112,7 @@ async function showMessage(accountId, uid, folderId, specialUse, isRetry = false
|
|
|
3108
3112
|
}
|
|
3109
3113
|
bodyEl.innerHTML = "";
|
|
3110
3114
|
const spam = msg.spamScore;
|
|
3111
|
-
if (spam && Number.isFinite(spam.score) && (spam.flagged || spam.score >= spam.threshold / 2)) {
|
|
3115
|
+
if (spam && !spam.trusted && Number.isFinite(spam.score) && (spam.flagged || spam.score >= spam.threshold / 2)) {
|
|
3112
3116
|
const benign = !!spam.proved || spam.kind === "bulk";
|
|
3113
3117
|
const level = benign ? "bulk" : spam.flagged ? "high" : "mid";
|
|
3114
3118
|
const chip = document.createElement("div");
|
|
@@ -3126,6 +3130,36 @@ async function showMessage(accountId, uid, folderId, specialUse, isRetry = false
|
|
|
3126
3130
|
const warn = document.createElement("div");
|
|
3127
3131
|
warn.className = `mv-trust mv-trust-${worst}`;
|
|
3128
3132
|
warn.innerHTML = (head ? `<div class="mv-trust-head">${head}</div>` : "") + trust.map((f) => `<div class="mv-trust-item mv-trust-${escapeText(f.severity)}"><div class="mv-trust-text">${escapeText(f.text)}</div><div class="mv-trust-detail">${escapeText(f.detail)}</div></div>`).join("") + (worst === "info" ? "" : `<div class="mv-trust-foot">Links and attachments here should not be opened.</div>`);
|
|
3133
|
+
const spamOnly = trust.length === 1 && trust[0].id === "server-spam-verdict" && worst !== "danger";
|
|
3134
|
+
const fromAddr = (msg.from?.address || "").toLowerCase();
|
|
3135
|
+
const fromDomain = fromAddr.split("@")[1] || "";
|
|
3136
|
+
if (spamOnly && spam?.proved && fromAddr) {
|
|
3137
|
+
const actions = document.createElement("div");
|
|
3138
|
+
actions.className = "mv-trust-actions";
|
|
3139
|
+
for (const [label, type, value] of [
|
|
3140
|
+
[`Stop warning about ${fromAddr}`, "sender", fromAddr],
|
|
3141
|
+
[`Stop warning about *@${fromDomain}`, "domain", fromDomain]
|
|
3142
|
+
]) {
|
|
3143
|
+
if (!value)
|
|
3144
|
+
continue;
|
|
3145
|
+
const b = document.createElement("button");
|
|
3146
|
+
b.className = "mv-trust-action";
|
|
3147
|
+
b.textContent = label;
|
|
3148
|
+
b.addEventListener("click", async () => {
|
|
3149
|
+
b.disabled = true;
|
|
3150
|
+
try {
|
|
3151
|
+
await trustSenderOrDomain(type, value);
|
|
3152
|
+
warn.remove();
|
|
3153
|
+
document.querySelector(".mv-spamscore")?.remove();
|
|
3154
|
+
} catch (e) {
|
|
3155
|
+
b.disabled = false;
|
|
3156
|
+
b.textContent = `Could not save: ${e?.message || e}`;
|
|
3157
|
+
}
|
|
3158
|
+
});
|
|
3159
|
+
actions.appendChild(b);
|
|
3160
|
+
}
|
|
3161
|
+
warn.appendChild(actions);
|
|
3162
|
+
}
|
|
3129
3163
|
bodyEl.appendChild(warn);
|
|
3130
3164
|
}
|
|
3131
3165
|
if (msg.hasRemoteContent) {
|