@bobfrankston/rmfmail 1.2.321 → 1.2.323

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 (60) hide show
  1. package/.commitmsg +16 -9
  2. package/.llm/trusted-lists.md +3 -0
  3. package/client/android-bootstrap.bundle.js +35 -9
  4. package/client/android-bootstrap.bundle.js.map +2 -2
  5. package/client/app.bundle.js +33 -3
  6. package/client/app.bundle.js.map +2 -2
  7. package/client/components/calendar-sidebar.js +14 -2
  8. package/client/components/calendar-sidebar.js.map +1 -1
  9. package/client/components/calendar-sidebar.ts +17 -2
  10. package/client/components/message-viewer.js +33 -0
  11. package/client/components/message-viewer.js.map +1 -1
  12. package/client/components/message-viewer.ts +32 -1
  13. package/client/compose/compose.bundle.js +1 -1
  14. package/client/compose/compose.bundle.js.map +2 -2
  15. package/client/lib/api-client.js +1 -1
  16. package/client/lib/api-client.js.map +1 -1
  17. package/client/lib/api-client.ts +3 -3
  18. package/docs/allowlist.md +15 -1
  19. package/npmchanges.md +43 -0
  20. package/package.json +7 -7
  21. package/packages/mailx-imap/package-lock.json +2 -2
  22. package/packages/mailx-imap/package.json +1 -1
  23. package/packages/mailx-service/index.d.ts +1 -0
  24. package/packages/mailx-service/index.d.ts.map +1 -1
  25. package/packages/mailx-service/index.js +9 -2
  26. package/packages/mailx-service/index.js.map +1 -1
  27. package/packages/mailx-service/index.ts +10 -3
  28. package/packages/mailx-service/package.json +1 -1
  29. package/packages/mailx-settings/docs/allowlist.md +15 -1
  30. package/packages/mailx-settings/index.d.ts +1 -0
  31. package/packages/mailx-settings/index.d.ts.map +1 -1
  32. package/packages/mailx-settings/index.js +4 -0
  33. package/packages/mailx-settings/index.js.map +1 -1
  34. package/packages/mailx-settings/index.ts +4 -0
  35. package/packages/mailx-settings/package.json +1 -1
  36. package/packages/mailx-store/package.json +1 -1
  37. package/packages/mailx-store/store.d.ts.map +1 -1
  38. package/packages/mailx-store/store.js +2 -0
  39. package/packages/mailx-store/store.js.map +1 -1
  40. package/packages/mailx-store/store.ts +2 -0
  41. package/packages/mailx-store-web/package.json +1 -1
  42. package/packages/mailx-store-web/web-service.d.ts +1 -0
  43. package/packages/mailx-store-web/web-service.d.ts.map +1 -1
  44. package/packages/mailx-store-web/web-service.js +1 -0
  45. package/packages/mailx-store-web/web-service.js.map +1 -1
  46. package/packages/mailx-store-web/web-service.ts +2 -1
  47. package/packages/mailx-store-web/web-settings.d.ts +1 -0
  48. package/packages/mailx-store-web/web-settings.d.ts.map +1 -1
  49. package/packages/mailx-store-web/web-settings.js +1 -0
  50. package/packages/mailx-store-web/web-settings.js.map +1 -1
  51. package/packages/mailx-store-web/web-settings.ts +1 -0
  52. package/packages/mailx-types/mailx-api.d.ts +1 -0
  53. package/packages/mailx-types/mailx-api.d.ts.map +1 -1
  54. package/packages/mailx-types/mailx-api.ts +1 -1
  55. package/packages/mailx-types/package.json +1 -1
  56. package/packages/mailx-types/trust.d.ts +18 -0
  57. package/packages/mailx-types/trust.d.ts.map +1 -1
  58. package/packages/mailx-types/trust.js +42 -4
  59. package/packages/mailx-types/trust.js.map +1 -1
  60. package/packages/mailx-types/trust.ts +60 -4
@@ -360,7 +360,7 @@ function trustSenderOrDomain(type, value) {
360
360
  return ipc().trustSenderOrDomain?.(type, value) ?? Promise.resolve({ trusted: false });
361
361
  }
362
362
  function getAllowlist() {
363
- return ipc().getAllowlist?.() ?? Promise.resolve({ senders: [], domains: [], recipients: [], flaggedSenders: [], flaggedDomains: [], trustedSenders: [], trustedDomains: [], trustedIntermediaries: [], trustedLists: [] });
363
+ return ipc().getAllowlist?.() ?? Promise.resolve({ senders: [], domains: [], recipients: [], flaggedSenders: [], flaggedDomains: [], trustedSenders: [], trustedDomains: [], trustedIntermediaries: [], trustedLists: [], trustedSendersVia: [] });
364
364
  }
365
365
  function flagSenderOrDomain(type, value) {
366
366
  return ipc().flagSenderOrDomain?.(type, value) ?? Promise.resolve({ flagged: false });
@@ -3295,6 +3295,32 @@ Delivered by the ${spam.listId} mailing list, which your server proved sent it.
3295
3295
  }
3296
3296
  warn.appendChild(actions);
3297
3297
  }
3298
+ const senderVias = worst === "danger" ? [] : Array.from(new Set(trust.map((f) => f.senderVia).filter(Boolean)));
3299
+ if (senderVias.length) {
3300
+ const actions = document.createElement("div");
3301
+ actions.className = "mv-trust-actions";
3302
+ for (const pair of senderVias) {
3303
+ const b = document.createElement("button");
3304
+ b.className = "mv-trust-action";
3305
+ b.textContent = `Trust ${pair}`;
3306
+ b.title = `Adds "${pair}" to trustedSendersVia in allowlist.jsonc. Stops this note for mail from ${pair.split(" via ")[0]} that ${pair.split(" via ")[1]} signs; a message without that signature is still checked.`;
3307
+ b.addEventListener("click", async () => {
3308
+ b.disabled = true;
3309
+ try {
3310
+ const res = await trustSenderOrDomain("via", pair);
3311
+ if (!res?.trusted)
3312
+ throw new Error("the sender-via list did not save");
3313
+ warn.remove();
3314
+ document.querySelector(".mv-spamscore")?.remove();
3315
+ } catch (e) {
3316
+ b.disabled = false;
3317
+ b.textContent = `Could not save: ${e?.message || e}`;
3318
+ }
3319
+ });
3320
+ actions.appendChild(b);
3321
+ }
3322
+ warn.appendChild(actions);
3323
+ }
3298
3324
  const vias = worst === "danger" ? [] : Array.from(new Set(trust.map((f) => f.via).filter(Boolean)));
3299
3325
  if (vias.length) {
3300
3326
  const actions = document.createElement("div");
@@ -6765,7 +6791,7 @@ async function renderCalendarList() {
6765
6791
  if (list.length === 0) {
6766
6792
  host.innerHTML = "";
6767
6793
  } else {
6768
- const sorted = [...list].sort((a, b) => (a.primary ? 0 : 1) - (b.primary ? 0 : 1) || a.name.localeCompare(b.name));
6794
+ const sorted = list.filter((c) => c.selected !== false).sort((a, b) => (a.primary ? 0 : 1) - (b.primary ? 0 : 1) || a.name.localeCompare(b.name));
6769
6795
  host.innerHTML = sorted.map((c) => `<label class="cal-side-cal-row" title="${escapeHtml6(c.name)} \u2014 untick to hide its events in this list. Which calendars are listed is set in Google Calendar: the ones selected there appear; use Refresh after changing it.">
6770
6796
  <input type="checkbox" class="cal-side-cal-check" data-cal-id="${escapeHtml6(c.id)}" ${hiddenCalendars.has(c.id) ? "" : "checked"}>
6771
6797
  ${calIconHtml(c)}
@@ -7219,7 +7245,11 @@ function openNewEventDialog() {
7219
7245
  opt.selected = true;
7220
7246
  calSelect.append(opt);
7221
7247
  }
7222
- calRow.hidden = writable.length < 2;
7248
+ calRow.hidden = false;
7249
+ calSelect.disabled = writable.length < 2;
7250
+ if (writable.length < 2) {
7251
+ calRow.title = writable.length ? `${writable[0].name} is the only calendar Google says you can add events to. The others are read-only (holidays, or shared without edit rights). To add or share a calendar, do that in Google Calendar and press Refresh.` : "Google reported no calendar you can add events to.";
7252
+ }
7223
7253
  };
7224
7254
  if (calendarList.length)
7225
7255
  fillCalendars(calendarList);