@bobfrankston/rmfmail 1.2.272 → 1.2.276

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 (63) hide show
  1. package/.commitmsg +26 -0
  2. package/client/android-bootstrap.bundle.js +184 -0
  3. package/client/android-bootstrap.bundle.js.map +2 -2
  4. package/client/app.bundle.js +235 -31
  5. package/client/app.bundle.js.map +4 -4
  6. package/client/app.js +35 -1
  7. package/client/app.js.map +1 -1
  8. package/client/app.ts +36 -1
  9. package/client/components/invite-card.js +107 -0
  10. package/client/components/invite-card.js.map +1 -0
  11. package/client/components/invite-card.ts +119 -0
  12. package/client/components/message-list.js +9 -1
  13. package/client/components/message-list.js.map +1 -1
  14. package/client/components/message-list.ts +9 -1
  15. package/client/components/message-viewer.js +82 -19
  16. package/client/components/message-viewer.js.map +1 -1
  17. package/client/components/message-viewer.ts +79 -18
  18. package/client/compose/compose.bundle.js +4 -0
  19. package/client/compose/compose.bundle.js.map +2 -2
  20. package/client/lib/api-client.js +6 -0
  21. package/client/lib/api-client.js.map +1 -1
  22. package/client/lib/api-client.ts +6 -0
  23. package/client/lib/approved-senders.js +66 -0
  24. package/client/lib/approved-senders.js.map +1 -0
  25. package/client/lib/approved-senders.ts +63 -0
  26. package/client/lib/mailxapi.js +3 -0
  27. package/client/package.json +1 -1
  28. package/client/styles/components.css +48 -0
  29. package/package.json +10 -10
  30. package/packages/mailx-imap/package-lock.json +2 -2
  31. package/packages/mailx-imap/package.json +2 -2
  32. package/packages/mailx-service/index.d.ts +15 -0
  33. package/packages/mailx-service/index.d.ts.map +1 -1
  34. package/packages/mailx-service/index.js +18 -0
  35. package/packages/mailx-service/index.js.map +1 -1
  36. package/packages/mailx-service/index.ts +19 -0
  37. package/packages/mailx-service/jsonrpc.js +2 -0
  38. package/packages/mailx-service/jsonrpc.js.map +1 -1
  39. package/packages/mailx-service/jsonrpc.ts +2 -0
  40. package/packages/mailx-service/package.json +1 -1
  41. package/packages/mailx-settings/package.json +1 -1
  42. package/packages/mailx-store/package.json +1 -1
  43. package/packages/mailx-store/store.d.ts +5 -0
  44. package/packages/mailx-store/store.d.ts.map +1 -1
  45. package/packages/mailx-store/store.js +21 -0
  46. package/packages/mailx-store/store.js.map +1 -1
  47. package/packages/mailx-store/store.ts +27 -0
  48. package/packages/mailx-store-web/android-bootstrap.js +1 -0
  49. package/packages/mailx-store-web/android-bootstrap.js.map +1 -1
  50. package/packages/mailx-store-web/android-bootstrap.ts +1 -0
  51. package/packages/mailx-store-web/package.json +1 -1
  52. package/packages/mailx-store-web/web-service.d.ts +11 -0
  53. package/packages/mailx-store-web/web-service.d.ts.map +1 -1
  54. package/packages/mailx-store-web/web-service.js +14 -0
  55. package/packages/mailx-store-web/web-service.js.map +1 -1
  56. package/packages/mailx-store-web/web-service.ts +15 -0
  57. package/packages/mailx-types/index.d.ts +56 -0
  58. package/packages/mailx-types/index.d.ts.map +1 -1
  59. package/packages/mailx-types/index.js +187 -0
  60. package/packages/mailx-types/index.js.map +1 -1
  61. package/packages/mailx-types/index.ts +192 -0
  62. package/packages/mailx-types/package.json +1 -1
  63. /package/packages/mailx-imap/{node_modules.npmglobalize-stash-72180 → node_modules.npmglobalize-stash-59216}/.package-lock.json +0 -0
package/client/app.js CHANGED
@@ -159,6 +159,9 @@ window.__btick && window.__btick("app.ts module body executing");
159
159
  let baseTitle = APP_NAME;
160
160
  let lastSeenCount = 0;
161
161
  let badgeCount = 0;
162
+ /** Last count pushed to the Windows taskbar overlay, so an unchanged count
163
+ * is not re-pushed. -1 = nothing pushed yet. See updateBadge. */
164
+ let lastOverlayCount = -1;
162
165
  function updateBadge(count) {
163
166
  badgeCount = count;
164
167
  // Update title
@@ -212,7 +215,19 @@ function updateBadge(count) {
212
215
  // taskbar for the whole life of this feature (Bob 2026-05-28 "are you
213
216
  // able to show the number of new messages").
214
217
  const hostApi = window.mailxapi;
215
- if (hostApi?.setTaskbarOverlay) {
218
+ // Push ONLY when the number actually changes. Windows keeps the
219
+ // overlay icon alive until the next SetOverlayIcon, so the host
220
+ // cannot free the icon it just handed over — each push costs the
221
+ // host process one HICON plus the two bitmaps inside it, and the
222
+ // unread-count refresh fires every few seconds. That reached the
223
+ // 10,000-object per-process GDI cap in about a day, after which the
224
+ // host logged "CreateIconIndirect failed: Not enough memory
225
+ // resources" on every tick and could create no further GDI objects
226
+ // (Bob 2026-08-23, measured: rmfmail.exe at GDI=9995). msger now
227
+ // frees the PREVIOUS icon so the leak is bounded either way; this
228
+ // just stops the pointless churn (Claude Code 2026-08-23).
229
+ if (hostApi?.setTaskbarOverlay && count !== lastOverlayCount) {
230
+ lastOverlayCount = count;
216
231
  if (count > 0) {
217
232
  // BADGE-ONLY overlay. SetOverlayIcon composites the supplied
218
233
  // icon onto the bottom-right corner of the taskbar button —
@@ -4927,6 +4942,25 @@ function applyThreadFilter() {
4927
4942
  console.error("pending mailto pickup failed:", e?.message || e);
4928
4943
  }
4929
4944
  })();
4945
+ // Approved-sender index (the shared allowlist). Loaded once so the message
4946
+ // list can ask synchronously whether a sender has been vouched for — the
4947
+ // display-name warning is suppressed for those. Re-render on change so
4948
+ // marking a sender valid clears the warning from rows already on screen.
4949
+ (async () => {
4950
+ try {
4951
+ const { refreshApprovedSenders } = await import("./lib/approved-senders.js");
4952
+ await refreshApprovedSenders();
4953
+ document.dispatchEvent(new CustomEvent("mailx-allowlist-changed"));
4954
+ }
4955
+ catch (e) {
4956
+ console.warn("approved-sender index load failed:", e?.message || e);
4957
+ }
4958
+ })();
4959
+ document.addEventListener("mailx-allowlist-changed", () => {
4960
+ void import("./components/message-list.js")
4961
+ .then(m => m.reloadCurrentFolder?.())
4962
+ .catch(() => { });
4963
+ });
4930
4964
  // C46: same startup pickup for a pending Windows-share drop (rmfshare.exe
4931
4965
  // spawned the daemon before its fs.watch armed). Live shares during this
4932
4966
  // session arrive via the `openShare` event handled in onEvent above.