@bobfrankston/rmfmail 1.0.703 → 1.0.705

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 (35) hide show
  1. package/bin/build-bundles.mjs +52 -24
  2. package/client/android-bootstrap.bundle.js +8188 -0
  3. package/client/android-bootstrap.bundle.js.map +7 -0
  4. package/client/app.bundle.js +122 -10
  5. package/client/app.bundle.js.map +2 -2
  6. package/client/app.js +46 -2
  7. package/client/app.js.map +1 -1
  8. package/client/app.ts +46 -3
  9. package/client/components/alarms.js +37 -7
  10. package/client/components/alarms.js.map +1 -1
  11. package/client/components/alarms.ts +32 -7
  12. package/client/components/message-list.js +48 -2
  13. package/client/components/message-list.js.map +1 -1
  14. package/client/components/message-list.ts +44 -2
  15. package/client/components/message-viewer.js +27 -0
  16. package/client/components/message-viewer.js.map +1 -1
  17. package/client/components/message-viewer.ts +23 -0
  18. package/client/compose/compose.bundle.js +16 -0
  19. package/client/compose/compose.bundle.js.map +2 -2
  20. package/client/compose/compose.js +37 -0
  21. package/client/compose/compose.js.map +1 -1
  22. package/client/compose/compose.ts +42 -0
  23. package/client/index.html +9 -1
  24. package/docs/accounts.md +1 -1
  25. package/package.json +1 -1
  26. package/packages/mailx-service/index.d.ts.map +1 -1
  27. package/packages/mailx-service/index.js +14 -0
  28. package/packages/mailx-service/index.js.map +1 -1
  29. package/packages/mailx-service/index.ts +15 -0
  30. package/packages/mailx-service/local-store.d.ts.map +1 -1
  31. package/packages/mailx-service/local-store.js +9 -22
  32. package/packages/mailx-service/local-store.js.map +1 -1
  33. package/packages/mailx-service/local-store.ts +9 -23
  34. package/packages/mailx-settings/docs/accounts.md +1 -1
  35. /package/packages/mailx-imap/{node_modules.npmglobalize-stash-4104 → node_modules.npmglobalize-stash-34984}/.package-lock.json +0 -0
package/client/app.js CHANGED
@@ -801,9 +801,18 @@ async function openCompose(mode) {
801
801
  const account = accounts.find((a) => a.id === accountId);
802
802
  const explicitDomains = (account?.identityDomains || []).map((d) => d.toLowerCase());
803
803
  const accountDomain = (account?.email || "").split("@")[1]?.toLowerCase();
804
- const identityDomains = explicitDomains.length > 0
804
+ // Fold subsumed subdomains. If the list has both `frankston.com` and
805
+ // `bobf.frankston.com`, drop the longer entry — the matcher's
806
+ // `endsWith(".frankston.com")` test already catches it, so listing
807
+ // both is wasted clutter. Same-pair dedup + parent-shadow filter in
808
+ // one pass.
809
+ function foldDomains(list) {
810
+ const unique = Array.from(new Set(list));
811
+ return unique.filter(d => !unique.some(p => p !== d && d.endsWith(`.${p}`)));
812
+ }
813
+ const identityDomains = foldDomains(explicitDomains.length > 0
805
814
  ? explicitDomains
806
- : (accountDomain ? [accountDomain] : []);
815
+ : (accountDomain ? [accountDomain] : []));
807
816
  function detectReplyFrom() {
808
817
  if (!msg)
809
818
  return undefined;
@@ -832,6 +841,41 @@ async function openCompose(mode) {
832
841
  console.log(`[compose] no identity match`);
833
842
  return undefined;
834
843
  }
844
+ // Trace what we're feeding the reply — `[reply-init]` on the daemon log
845
+ // will show the exact `from`/`to`/`cc` values present on the source
846
+ // message at construction time, so a "To field empty" report can be
847
+ // diagnosed without re-deriving state. Bob 2026-05-13: had empty To on
848
+ // a clear-From mailing list message; need to see whether msg.from was
849
+ // populated or arrived as null.
850
+ if (msg) {
851
+ try {
852
+ const dump = {
853
+ mode,
854
+ accountId,
855
+ hasMsg: true,
856
+ from: msg.from || null,
857
+ toLen: Array.isArray(msg.to) ? msg.to.length : -1,
858
+ ccLen: Array.isArray(msg.cc) ? msg.cc.length : -1,
859
+ deliveredTo: msg.deliveredTo || "",
860
+ identityDomains,
861
+ subject: msg.subject || "",
862
+ };
863
+ const apiClient = window.mailxapi;
864
+ if (apiClient?.logClientEvent) {
865
+ apiClient.logClientEvent("reply-init", dump);
866
+ }
867
+ else {
868
+ console.log("[reply-init]", dump);
869
+ }
870
+ }
871
+ catch { /* tracing must never break compose */ }
872
+ }
873
+ else {
874
+ try {
875
+ window.mailxapi?.logClientEvent?.("reply-init", { mode, accountId, hasMsg: false });
876
+ }
877
+ catch { /* */ }
878
+ }
835
879
  // Defensive: msg.from / msg.to may be missing on rows that arrived before
836
880
  // headers finished loading. Don't push undefined into init.to — that
837
881
  // bubbles to the compose form as literal "undefined". Empty-out gracefully.