@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.
Files changed (53) hide show
  1. package/.commitmsg +24 -34
  2. package/client/android-bootstrap.bundle.js +42 -1
  3. package/client/android-bootstrap.bundle.js.map +2 -2
  4. package/client/app.bundle.js +36 -2
  5. package/client/app.bundle.js.map +2 -2
  6. package/client/components/message-viewer.js +53 -2
  7. package/client/components/message-viewer.js.map +1 -1
  8. package/client/components/message-viewer.ts +53 -3
  9. package/client/compose/compose.bundle.js +5 -1
  10. package/client/compose/compose.bundle.js.map +2 -2
  11. package/client/lib/api-client.js +7 -1
  12. package/client/lib/api-client.js.map +1 -1
  13. package/client/lib/api-client.ts +9 -2
  14. package/client/lib/mailxapi.js +3 -0
  15. package/client/styles/components.css +25 -0
  16. package/npmchanges.md +76 -0
  17. package/package.json +5 -5
  18. package/packages/mailx-imap/package-lock.json +2 -2
  19. package/packages/mailx-imap/package.json +1 -1
  20. package/packages/mailx-service/index.d.ts +20 -0
  21. package/packages/mailx-service/index.d.ts.map +1 -1
  22. package/packages/mailx-service/index.js +37 -0
  23. package/packages/mailx-service/index.js.map +1 -1
  24. package/packages/mailx-service/index.ts +37 -1
  25. package/packages/mailx-service/jsonrpc.js +2 -0
  26. package/packages/mailx-service/jsonrpc.js.map +1 -1
  27. package/packages/mailx-service/jsonrpc.ts +2 -0
  28. package/packages/mailx-service/package.json +1 -1
  29. package/packages/mailx-settings/package.json +1 -1
  30. package/packages/mailx-store/package.json +1 -1
  31. package/packages/mailx-store/store.d.ts.map +1 -1
  32. package/packages/mailx-store/store.js +30 -5
  33. package/packages/mailx-store/store.js.map +1 -1
  34. package/packages/mailx-store/store.ts +30 -5
  35. package/packages/mailx-store-web/android-bootstrap.js +3 -0
  36. package/packages/mailx-store-web/android-bootstrap.js.map +1 -1
  37. package/packages/mailx-store-web/android-bootstrap.ts +3 -0
  38. package/packages/mailx-store-web/package.json +1 -1
  39. package/packages/mailx-store-web/web-jsonrpc.js +2 -0
  40. package/packages/mailx-store-web/web-jsonrpc.js.map +1 -1
  41. package/packages/mailx-store-web/web-jsonrpc.ts +2 -0
  42. package/packages/mailx-store-web/web-service.d.ts +9 -0
  43. package/packages/mailx-store-web/web-service.d.ts.map +1 -1
  44. package/packages/mailx-store-web/web-service.js +28 -0
  45. package/packages/mailx-store-web/web-service.js.map +1 -1
  46. package/packages/mailx-store-web/web-service.ts +23 -1
  47. package/packages/mailx-types/package.json +1 -1
  48. package/packages/mailx-types/trust.d.ts +11 -0
  49. package/packages/mailx-types/trust.d.ts.map +1 -1
  50. package/packages/mailx-types/trust.js +18 -0
  51. package/packages/mailx-types/trust.js.map +1 -1
  52. package/packages/mailx-types/trust.ts +29 -0
  53. /package/packages/mailx-imap/{node_modules.npmglobalize-stash-27100 → node_modules.npmglobalize-stash-50524}/.package-lock.json +0 -0
@@ -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) {