@bobfrankston/mailx 1.0.12 → 1.0.13

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 (237) hide show
  1. package/bin/mailx.js +47 -29
  2. package/client/app.js +93 -13
  3. package/client/components/folder-tree.js +84 -3
  4. package/client/components/message-list.js +134 -8
  5. package/client/components/message-viewer.js +130 -13
  6. package/client/compose/compose.html +4 -4
  7. package/client/compose/compose.js +53 -34
  8. package/client/index.html +33 -9
  9. package/client/lib/api-client.js +102 -30
  10. package/client/lib/mailxapi.js +123 -0
  11. package/client/package.json +1 -1
  12. package/client/styles/components.css +188 -15
  13. package/client/styles/layout.css +2 -1
  14. package/killmail.cmd +6 -0
  15. package/launch.ps1 +47 -5
  16. package/launcher/bin/mailx-app.exe +0 -0
  17. package/launcher/bin/mailx-app.exe.WebView2/EBWebView/Breadcrumbs +0 -0
  18. package/launcher/bin/mailx-app.exe.WebView2/EBWebView/Crashpad/metadata +0 -0
  19. package/launcher/bin/mailx-app.exe.WebView2/EBWebView/Crashpad/settings.dat +0 -0
  20. package/launcher/bin/mailx-app.exe.WebView2/EBWebView/Crashpad/throttle_store.dat +1 -0
  21. package/launcher/bin/mailx-app.exe.WebView2/EBWebView/CrashpadMetrics-active.pma +0 -0
  22. package/launcher/bin/mailx-app.exe.WebView2/EBWebView/Default/BrowsingTopicsSiteData +0 -0
  23. package/launcher/bin/mailx-app.exe.WebView2/EBWebView/Default/Cache/No_Vary_Search/journal.baj +1 -0
  24. package/launcher/bin/mailx-app.exe.WebView2/EBWebView/Default/DIPS +0 -0
  25. package/launcher/bin/mailx-app.exe.WebView2/EBWebView/Default/DashTrackerDatabase +0 -0
  26. package/launcher/bin/mailx-app.exe.WebView2/EBWebView/Default/EdgeJourneys/EdgeJourneys.db +0 -0
  27. package/launcher/bin/mailx-app.exe.WebView2/EBWebView/Default/Extension Rules/LOCK +0 -0
  28. package/launcher/bin/mailx-app.exe.WebView2/EBWebView/Default/Extension Rules/LOG +3 -0
  29. package/launcher/bin/mailx-app.exe.WebView2/EBWebView/Default/Extension Rules/MANIFEST-000001 +0 -0
  30. package/launcher/bin/mailx-app.exe.WebView2/EBWebView/Default/Extension Scripts/LOCK +0 -0
  31. package/launcher/bin/mailx-app.exe.WebView2/EBWebView/Default/Extension Scripts/LOG +3 -0
  32. package/launcher/bin/mailx-app.exe.WebView2/EBWebView/Default/Extension Scripts/MANIFEST-000001 +0 -0
  33. package/launcher/bin/mailx-app.exe.WebView2/EBWebView/Default/Extension State/LOCK +0 -0
  34. package/launcher/bin/mailx-app.exe.WebView2/EBWebView/Default/Extension State/LOG +3 -0
  35. package/launcher/bin/mailx-app.exe.WebView2/EBWebView/Default/Extension State/MANIFEST-000001 +0 -0
  36. package/launcher/bin/mailx-app.exe.WebView2/EBWebView/Default/ExtensionActivityComp +0 -0
  37. package/launcher/bin/mailx-app.exe.WebView2/EBWebView/Default/ExtensionActivityEdge +0 -0
  38. package/launcher/bin/mailx-app.exe.WebView2/EBWebView/Default/Favicons +0 -0
  39. package/launcher/bin/mailx-app.exe.WebView2/EBWebView/Default/History +0 -0
  40. package/launcher/bin/mailx-app.exe.WebView2/EBWebView/Default/History-journal +0 -0
  41. package/launcher/bin/mailx-app.exe.WebView2/EBWebView/Default/IndexedDB/devtools_devtools_0.indexeddb.leveldb/LOCK +0 -0
  42. package/launcher/bin/mailx-app.exe.WebView2/EBWebView/Default/IndexedDB/devtools_devtools_0.indexeddb.leveldb/LOG +3 -0
  43. package/launcher/bin/mailx-app.exe.WebView2/EBWebView/Default/IndexedDB/devtools_devtools_0.indexeddb.leveldb/MANIFEST-000001 +0 -0
  44. package/launcher/bin/mailx-app.exe.WebView2/EBWebView/Default/Local Storage/leveldb/LOCK +0 -0
  45. package/launcher/bin/mailx-app.exe.WebView2/EBWebView/Default/Local Storage/leveldb/LOG +3 -0
  46. package/launcher/bin/mailx-app.exe.WebView2/EBWebView/Default/Local Storage/leveldb/MANIFEST-000001 +0 -0
  47. package/launcher/bin/mailx-app.exe.WebView2/EBWebView/Default/Login Data +0 -0
  48. package/launcher/bin/mailx-app.exe.WebView2/EBWebView/Default/Login Data For Account +0 -0
  49. package/launcher/bin/mailx-app.exe.WebView2/EBWebView/Default/Network/Cookies +0 -0
  50. NEL +0 -0
  51. package/launcher/bin/mailx-app.exe.WebView2/EBWebView/Default/Network/Trust Tokens +0 -0
  52. package/launcher/bin/mailx-app.exe.WebView2/EBWebView/Default/Network Action Predictor +0 -0
  53. package/launcher/bin/mailx-app.exe.WebView2/EBWebView/Default/Preferences +1 -0
  54. package/launcher/bin/mailx-app.exe.WebView2/EBWebView/Default/Safe Browsing Network/Safe Browsing Cookies +0 -0
  55. package/launcher/bin/mailx-app.exe.WebView2/EBWebView/Default/ServerCertificate +0 -0
  56. package/launcher/bin/mailx-app.exe.WebView2/EBWebView/Default/Session Storage/LOCK +0 -0
  57. package/launcher/bin/mailx-app.exe.WebView2/EBWebView/Default/Session Storage/LOG +3 -0
  58. package/launcher/bin/mailx-app.exe.WebView2/EBWebView/Default/Session Storage/MANIFEST-000001 +0 -0
  59. package/launcher/bin/mailx-app.exe.WebView2/EBWebView/Default/Shared Dictionary/db +0 -0
  60. package/launcher/bin/mailx-app.exe.WebView2/EBWebView/Default/SharedStorage +0 -0
  61. package/launcher/bin/mailx-app.exe.WebView2/EBWebView/Default/Shortcuts +0 -0
  62. package/launcher/bin/mailx-app.exe.WebView2/EBWebView/Default/Site Characteristics Database/LOCK +0 -0
  63. package/launcher/bin/mailx-app.exe.WebView2/EBWebView/Default/Site Characteristics Database/LOG +3 -0
  64. package/launcher/bin/mailx-app.exe.WebView2/EBWebView/Default/Site Characteristics Database/MANIFEST-000001 +0 -0
  65. package/launcher/bin/mailx-app.exe.WebView2/EBWebView/Default/Sync Data/LevelDB/LOCK +0 -0
  66. package/launcher/bin/mailx-app.exe.WebView2/EBWebView/Default/Sync Data/LevelDB/LOG +3 -0
  67. package/launcher/bin/mailx-app.exe.WebView2/EBWebView/Default/Sync Data/LevelDB/MANIFEST-000001 +0 -0
  68. package/launcher/bin/mailx-app.exe.WebView2/EBWebView/Default/Top Sites +0 -0
  69. package/launcher/bin/mailx-app.exe.WebView2/EBWebView/Default/Vpn Tokens +0 -0
  70. package/launcher/bin/mailx-app.exe.WebView2/EBWebView/Default/Web Data +0 -0
  71. package/launcher/bin/mailx-app.exe.WebView2/EBWebView/Default/Web Data-journal +0 -0
  72. package/launcher/bin/mailx-app.exe.WebView2/EBWebView/Default/WebStorage/QuotaManager +0 -0
  73. package/launcher/bin/mailx-app.exe.WebView2/EBWebView/Default/WebStorage/QuotaManager-journal +0 -0
  74. package/launcher/bin/mailx-app.exe.WebView2/EBWebView/Default/heavy_ad_intervention_opt_out.db +0 -0
  75. package/launcher/bin/mailx-app.exe.WebView2/EBWebView/Default/shared_proto_db/LOCK +0 -0
  76. package/launcher/bin/mailx-app.exe.WebView2/EBWebView/Default/shared_proto_db/LOG +3 -0
  77. package/launcher/bin/mailx-app.exe.WebView2/EBWebView/Default/shared_proto_db/MANIFEST-000001 +0 -0
  78. package/launcher/bin/mailx-app.exe.WebView2/EBWebView/Default/shared_proto_db/metadata/LOCK +0 -0
  79. package/launcher/bin/mailx-app.exe.WebView2/EBWebView/Default/shared_proto_db/metadata/LOG +3 -0
  80. package/launcher/bin/mailx-app.exe.WebView2/EBWebView/Default/shared_proto_db/metadata/MANIFEST-000001 +0 -0
  81. package/launcher/bin/mailx-app.exe.WebView2/EBWebView/DeferredBrowserMetrics/BrowserMetrics-69CAD063-BE24.pma +0 -0
  82. package/launcher/bin/mailx-app.exe.WebView2/EBWebView/Local State +1 -0
  83. package/launcher/bin/mailx-app.exe.WebView2/EBWebView/Variations +1 -0
  84. package/launcher/bin/mailx-app.old.exe +0 -0
  85. package/package.json +1 -1
  86. package/packages/mailx-api/index.js +79 -26
  87. package/packages/mailx-core/index.d.ts +129 -0
  88. package/packages/mailx-core/index.js +323 -0
  89. package/packages/mailx-core/ipc.d.ts +13 -0
  90. package/packages/mailx-core/ipc.js +56 -0
  91. package/packages/mailx-core/package.json +18 -0
  92. package/packages/mailx-imap/index.d.ts +5 -1
  93. package/packages/mailx-imap/index.js +76 -14
  94. package/packages/mailx-server/index.js +42 -31
  95. package/packages/mailx-server/package.json +1 -2
  96. package/packages/mailx-settings/index.d.ts +1 -1
  97. package/packages/mailx-settings/index.js +21 -12
  98. package/packages/mailx-store/db.d.ts +5 -1
  99. package/packages/mailx-store/db.js +64 -12
  100. package/packages/mailx-store/file-store.d.ts +2 -8
  101. package/packages/mailx-store/file-store.js +7 -31
  102. package/packages/mailx-types/index.d.ts +3 -1
  103. package/.tswalk.json +0 -7396
  104. package/launcher/release.cmd +0 -4
  105. package/mailx.json +0 -9
  106. package/packages/mailx-api/node_modules/nodemailer/.ncurc.js +0 -9
  107. package/packages/mailx-api/node_modules/nodemailer/.prettierignore +0 -8
  108. package/packages/mailx-api/node_modules/nodemailer/.prettierrc +0 -12
  109. package/packages/mailx-api/node_modules/nodemailer/.prettierrc.js +0 -10
  110. package/packages/mailx-api/node_modules/nodemailer/.release-please-config.json +0 -9
  111. package/packages/mailx-api/node_modules/nodemailer/LICENSE +0 -16
  112. package/packages/mailx-api/node_modules/nodemailer/README.md +0 -86
  113. package/packages/mailx-api/node_modules/nodemailer/SECURITY.txt +0 -22
  114. package/packages/mailx-api/node_modules/nodemailer/eslint.config.js +0 -88
  115. package/packages/mailx-api/node_modules/nodemailer/lib/addressparser/index.js +0 -383
  116. package/packages/mailx-api/node_modules/nodemailer/lib/base64/index.js +0 -139
  117. package/packages/mailx-api/node_modules/nodemailer/lib/dkim/index.js +0 -253
  118. package/packages/mailx-api/node_modules/nodemailer/lib/dkim/message-parser.js +0 -155
  119. package/packages/mailx-api/node_modules/nodemailer/lib/dkim/relaxed-body.js +0 -154
  120. package/packages/mailx-api/node_modules/nodemailer/lib/dkim/sign.js +0 -117
  121. package/packages/mailx-api/node_modules/nodemailer/lib/fetch/cookies.js +0 -281
  122. package/packages/mailx-api/node_modules/nodemailer/lib/fetch/index.js +0 -280
  123. package/packages/mailx-api/node_modules/nodemailer/lib/json-transport/index.js +0 -82
  124. package/packages/mailx-api/node_modules/nodemailer/lib/mail-composer/index.js +0 -629
  125. package/packages/mailx-api/node_modules/nodemailer/lib/mailer/index.js +0 -441
  126. package/packages/mailx-api/node_modules/nodemailer/lib/mailer/mail-message.js +0 -316
  127. package/packages/mailx-api/node_modules/nodemailer/lib/mime-funcs/index.js +0 -625
  128. package/packages/mailx-api/node_modules/nodemailer/lib/mime-funcs/mime-types.js +0 -2113
  129. package/packages/mailx-api/node_modules/nodemailer/lib/mime-node/index.js +0 -1316
  130. package/packages/mailx-api/node_modules/nodemailer/lib/mime-node/last-newline.js +0 -33
  131. package/packages/mailx-api/node_modules/nodemailer/lib/mime-node/le-unix.js +0 -43
  132. package/packages/mailx-api/node_modules/nodemailer/lib/mime-node/le-windows.js +0 -52
  133. package/packages/mailx-api/node_modules/nodemailer/lib/nodemailer.js +0 -157
  134. package/packages/mailx-api/node_modules/nodemailer/lib/punycode/index.js +0 -460
  135. package/packages/mailx-api/node_modules/nodemailer/lib/qp/index.js +0 -227
  136. package/packages/mailx-api/node_modules/nodemailer/lib/sendmail-transport/index.js +0 -210
  137. package/packages/mailx-api/node_modules/nodemailer/lib/ses-transport/index.js +0 -234
  138. package/packages/mailx-api/node_modules/nodemailer/lib/shared/index.js +0 -754
  139. package/packages/mailx-api/node_modules/nodemailer/lib/smtp-connection/data-stream.js +0 -108
  140. package/packages/mailx-api/node_modules/nodemailer/lib/smtp-connection/http-proxy-client.js +0 -143
  141. package/packages/mailx-api/node_modules/nodemailer/lib/smtp-connection/index.js +0 -1870
  142. package/packages/mailx-api/node_modules/nodemailer/lib/smtp-pool/index.js +0 -652
  143. package/packages/mailx-api/node_modules/nodemailer/lib/smtp-pool/pool-resource.js +0 -259
  144. package/packages/mailx-api/node_modules/nodemailer/lib/smtp-transport/index.js +0 -421
  145. package/packages/mailx-api/node_modules/nodemailer/lib/stream-transport/index.js +0 -135
  146. package/packages/mailx-api/node_modules/nodemailer/lib/well-known/index.js +0 -47
  147. package/packages/mailx-api/node_modules/nodemailer/lib/well-known/services.json +0 -611
  148. package/packages/mailx-api/node_modules/nodemailer/lib/xoauth2/index.js +0 -427
  149. package/packages/mailx-api/node_modules/nodemailer/package.json +0 -47
  150. package/packages/mailx-imap/node_modules/nodemailer/.ncurc.js +0 -9
  151. package/packages/mailx-imap/node_modules/nodemailer/.prettierignore +0 -8
  152. package/packages/mailx-imap/node_modules/nodemailer/.prettierrc +0 -12
  153. package/packages/mailx-imap/node_modules/nodemailer/.prettierrc.js +0 -10
  154. package/packages/mailx-imap/node_modules/nodemailer/.release-please-config.json +0 -9
  155. package/packages/mailx-imap/node_modules/nodemailer/LICENSE +0 -16
  156. package/packages/mailx-imap/node_modules/nodemailer/README.md +0 -86
  157. package/packages/mailx-imap/node_modules/nodemailer/SECURITY.txt +0 -22
  158. package/packages/mailx-imap/node_modules/nodemailer/eslint.config.js +0 -88
  159. package/packages/mailx-imap/node_modules/nodemailer/lib/addressparser/index.js +0 -383
  160. package/packages/mailx-imap/node_modules/nodemailer/lib/base64/index.js +0 -139
  161. package/packages/mailx-imap/node_modules/nodemailer/lib/dkim/index.js +0 -253
  162. package/packages/mailx-imap/node_modules/nodemailer/lib/dkim/message-parser.js +0 -155
  163. package/packages/mailx-imap/node_modules/nodemailer/lib/dkim/relaxed-body.js +0 -154
  164. package/packages/mailx-imap/node_modules/nodemailer/lib/dkim/sign.js +0 -117
  165. package/packages/mailx-imap/node_modules/nodemailer/lib/fetch/cookies.js +0 -281
  166. package/packages/mailx-imap/node_modules/nodemailer/lib/fetch/index.js +0 -280
  167. package/packages/mailx-imap/node_modules/nodemailer/lib/json-transport/index.js +0 -82
  168. package/packages/mailx-imap/node_modules/nodemailer/lib/mail-composer/index.js +0 -629
  169. package/packages/mailx-imap/node_modules/nodemailer/lib/mailer/index.js +0 -441
  170. package/packages/mailx-imap/node_modules/nodemailer/lib/mailer/mail-message.js +0 -316
  171. package/packages/mailx-imap/node_modules/nodemailer/lib/mime-funcs/index.js +0 -625
  172. package/packages/mailx-imap/node_modules/nodemailer/lib/mime-funcs/mime-types.js +0 -2113
  173. package/packages/mailx-imap/node_modules/nodemailer/lib/mime-node/index.js +0 -1316
  174. package/packages/mailx-imap/node_modules/nodemailer/lib/mime-node/last-newline.js +0 -33
  175. package/packages/mailx-imap/node_modules/nodemailer/lib/mime-node/le-unix.js +0 -43
  176. package/packages/mailx-imap/node_modules/nodemailer/lib/mime-node/le-windows.js +0 -52
  177. package/packages/mailx-imap/node_modules/nodemailer/lib/nodemailer.js +0 -157
  178. package/packages/mailx-imap/node_modules/nodemailer/lib/punycode/index.js +0 -460
  179. package/packages/mailx-imap/node_modules/nodemailer/lib/qp/index.js +0 -227
  180. package/packages/mailx-imap/node_modules/nodemailer/lib/sendmail-transport/index.js +0 -210
  181. package/packages/mailx-imap/node_modules/nodemailer/lib/ses-transport/index.js +0 -234
  182. package/packages/mailx-imap/node_modules/nodemailer/lib/shared/index.js +0 -754
  183. package/packages/mailx-imap/node_modules/nodemailer/lib/smtp-connection/data-stream.js +0 -108
  184. package/packages/mailx-imap/node_modules/nodemailer/lib/smtp-connection/http-proxy-client.js +0 -143
  185. package/packages/mailx-imap/node_modules/nodemailer/lib/smtp-connection/index.js +0 -1870
  186. package/packages/mailx-imap/node_modules/nodemailer/lib/smtp-pool/index.js +0 -652
  187. package/packages/mailx-imap/node_modules/nodemailer/lib/smtp-pool/pool-resource.js +0 -259
  188. package/packages/mailx-imap/node_modules/nodemailer/lib/smtp-transport/index.js +0 -421
  189. package/packages/mailx-imap/node_modules/nodemailer/lib/stream-transport/index.js +0 -135
  190. package/packages/mailx-imap/node_modules/nodemailer/lib/well-known/index.js +0 -47
  191. package/packages/mailx-imap/node_modules/nodemailer/lib/well-known/services.json +0 -611
  192. package/packages/mailx-imap/node_modules/nodemailer/lib/xoauth2/index.js +0 -427
  193. package/packages/mailx-imap/node_modules/nodemailer/package.json +0 -47
  194. package/packages/mailx-send/node_modules/nodemailer/.ncurc.js +0 -9
  195. package/packages/mailx-send/node_modules/nodemailer/.prettierignore +0 -8
  196. package/packages/mailx-send/node_modules/nodemailer/.prettierrc +0 -12
  197. package/packages/mailx-send/node_modules/nodemailer/.prettierrc.js +0 -10
  198. package/packages/mailx-send/node_modules/nodemailer/.release-please-config.json +0 -9
  199. package/packages/mailx-send/node_modules/nodemailer/LICENSE +0 -16
  200. package/packages/mailx-send/node_modules/nodemailer/README.md +0 -86
  201. package/packages/mailx-send/node_modules/nodemailer/SECURITY.txt +0 -22
  202. package/packages/mailx-send/node_modules/nodemailer/eslint.config.js +0 -88
  203. package/packages/mailx-send/node_modules/nodemailer/lib/addressparser/index.js +0 -383
  204. package/packages/mailx-send/node_modules/nodemailer/lib/base64/index.js +0 -139
  205. package/packages/mailx-send/node_modules/nodemailer/lib/dkim/index.js +0 -253
  206. package/packages/mailx-send/node_modules/nodemailer/lib/dkim/message-parser.js +0 -155
  207. package/packages/mailx-send/node_modules/nodemailer/lib/dkim/relaxed-body.js +0 -154
  208. package/packages/mailx-send/node_modules/nodemailer/lib/dkim/sign.js +0 -117
  209. package/packages/mailx-send/node_modules/nodemailer/lib/fetch/cookies.js +0 -281
  210. package/packages/mailx-send/node_modules/nodemailer/lib/fetch/index.js +0 -280
  211. package/packages/mailx-send/node_modules/nodemailer/lib/json-transport/index.js +0 -82
  212. package/packages/mailx-send/node_modules/nodemailer/lib/mail-composer/index.js +0 -629
  213. package/packages/mailx-send/node_modules/nodemailer/lib/mailer/index.js +0 -441
  214. package/packages/mailx-send/node_modules/nodemailer/lib/mailer/mail-message.js +0 -316
  215. package/packages/mailx-send/node_modules/nodemailer/lib/mime-funcs/index.js +0 -625
  216. package/packages/mailx-send/node_modules/nodemailer/lib/mime-funcs/mime-types.js +0 -2113
  217. package/packages/mailx-send/node_modules/nodemailer/lib/mime-node/index.js +0 -1316
  218. package/packages/mailx-send/node_modules/nodemailer/lib/mime-node/last-newline.js +0 -33
  219. package/packages/mailx-send/node_modules/nodemailer/lib/mime-node/le-unix.js +0 -43
  220. package/packages/mailx-send/node_modules/nodemailer/lib/mime-node/le-windows.js +0 -52
  221. package/packages/mailx-send/node_modules/nodemailer/lib/nodemailer.js +0 -157
  222. package/packages/mailx-send/node_modules/nodemailer/lib/punycode/index.js +0 -460
  223. package/packages/mailx-send/node_modules/nodemailer/lib/qp/index.js +0 -227
  224. package/packages/mailx-send/node_modules/nodemailer/lib/sendmail-transport/index.js +0 -210
  225. package/packages/mailx-send/node_modules/nodemailer/lib/ses-transport/index.js +0 -234
  226. package/packages/mailx-send/node_modules/nodemailer/lib/shared/index.js +0 -754
  227. package/packages/mailx-send/node_modules/nodemailer/lib/smtp-connection/data-stream.js +0 -108
  228. package/packages/mailx-send/node_modules/nodemailer/lib/smtp-connection/http-proxy-client.js +0 -143
  229. package/packages/mailx-send/node_modules/nodemailer/lib/smtp-connection/index.js +0 -1870
  230. package/packages/mailx-send/node_modules/nodemailer/lib/smtp-pool/index.js +0 -652
  231. package/packages/mailx-send/node_modules/nodemailer/lib/smtp-pool/pool-resource.js +0 -259
  232. package/packages/mailx-send/node_modules/nodemailer/lib/smtp-transport/index.js +0 -421
  233. package/packages/mailx-send/node_modules/nodemailer/lib/stream-transport/index.js +0 -135
  234. package/packages/mailx-send/node_modules/nodemailer/lib/well-known/index.js +0 -47
  235. package/packages/mailx-send/node_modules/nodemailer/lib/well-known/services.json +0 -611
  236. package/packages/mailx-send/node_modules/nodemailer/lib/xoauth2/index.js +0 -427
  237. package/packages/mailx-send/node_modules/nodemailer/package.json +0 -47
@@ -0,0 +1,123 @@
1
+ /**
2
+ * mailxapi — IPC bridge injected into WebView by the Rust launcher.
3
+ * Follows the msgapi pattern: callNode → Promise → _mailxapiResolve/Reject.
4
+ *
5
+ * When running in a browser (no IPC), this file is not loaded.
6
+ * api-client.ts auto-detects and falls back to HTTP fetch.
7
+ */
8
+
9
+ (function() {
10
+ "use strict";
11
+
12
+ var _callbacks = {};
13
+ var _callbackId = 0;
14
+ var _eventHandlers = [];
15
+
16
+ function callNode(action, params) {
17
+ var id = String(++_callbackId);
18
+ return new Promise(function(resolve, reject) {
19
+ var timer = setTimeout(function() {
20
+ delete _callbacks[id];
21
+ reject(new Error("mailxapi timeout: " + action));
22
+ }, 30000);
23
+ _callbacks[id] = { resolve: resolve, reject: reject, timer: timer };
24
+ var msg = Object.assign({ _action: action, _cbid: id }, params || {});
25
+ if (window.ipc && window.ipc.postMessage) {
26
+ window.ipc.postMessage(JSON.stringify(msg));
27
+ } else {
28
+ // Fallback: should not happen in WebView
29
+ clearTimeout(timer);
30
+ delete _callbacks[id];
31
+ reject(new Error("No IPC channel available"));
32
+ }
33
+ });
34
+ }
35
+
36
+ // Called by Rust to resolve promises
37
+ window._mailxapiResolve = function(id, value) {
38
+ var cb = _callbacks[id];
39
+ if (!cb) return;
40
+ delete _callbacks[id];
41
+ clearTimeout(cb.timer);
42
+ cb.resolve(value);
43
+ };
44
+
45
+ // Called by Rust to reject promises
46
+ window._mailxapiReject = function(id, error) {
47
+ var cb = _callbacks[id];
48
+ if (!cb) return;
49
+ delete _callbacks[id];
50
+ clearTimeout(cb.timer);
51
+ cb.reject(new Error(error));
52
+ };
53
+
54
+ // Called by Rust to push events (new mail, sync progress, etc.)
55
+ window._mailxapiEvent = function(event) {
56
+ for (var i = 0; i < _eventHandlers.length; i++) {
57
+ try { _eventHandlers[i](event); } catch(e) { /* ignore */ }
58
+ }
59
+ };
60
+
61
+ window.mailxapi = {
62
+ isApp: true,
63
+ platform: "webview2",
64
+
65
+ // Accounts
66
+ getAccounts: function() { return callNode("getAccounts"); },
67
+ getFolders: function(accountId) { return callNode("getFolders", { accountId: accountId }); },
68
+
69
+ // Messages
70
+ getMessages: function(accountId, folderId, page, pageSize) {
71
+ return callNode("getMessages", { accountId: accountId, folderId: folderId, page: page, pageSize: pageSize });
72
+ },
73
+ getUnifiedInbox: function(page, pageSize) {
74
+ return callNode("getUnifiedInbox", { page: page, pageSize: pageSize });
75
+ },
76
+ getMessage: function(accountId, uid, allowRemote) {
77
+ return callNode("getMessage", { accountId: accountId, uid: uid, allowRemote: allowRemote });
78
+ },
79
+
80
+ // Actions
81
+ updateFlags: function(accountId, uid, flags) {
82
+ return callNode("updateFlags", { accountId: accountId, uid: uid, flags: flags });
83
+ },
84
+ deleteMessage: function(accountId, uid) {
85
+ return callNode("deleteMessage", { accountId: accountId, uid: uid });
86
+ },
87
+ undeleteMessage: function(accountId, uid, folderId) {
88
+ return callNode("undeleteMessage", { accountId: accountId, uid: uid, folderId: folderId });
89
+ },
90
+
91
+ // Compose
92
+ sendMessage: function(msg) { return callNode("sendMessage", msg); },
93
+ saveDraft: function(params) { return callNode("saveDraft", params); },
94
+ deleteDraft: function(accountId, draftUid) {
95
+ return callNode("deleteDraft", { accountId: accountId, draftUid: draftUid });
96
+ },
97
+
98
+ // Search
99
+ searchMessages: function(query, page, pageSize) {
100
+ return callNode("searchMessages", { query: query, page: page, pageSize: pageSize });
101
+ },
102
+ searchContacts: function(query) {
103
+ return callNode("searchContacts", { query: query });
104
+ },
105
+
106
+ // Sync
107
+ syncAll: function() { return callNode("syncAll"); },
108
+ getSyncPending: function() { return callNode("getSyncPending"); },
109
+
110
+ // Settings
111
+ allowRemoteContent: function(type, value) {
112
+ return callNode("allowRemoteContent", { type: type, value: value });
113
+ },
114
+ getSettings: function() { return callNode("getSettings"); },
115
+ saveSettings: function(data) { return callNode("saveSettingsData", data); },
116
+ getVersion: function() { return callNode("getVersion"); },
117
+
118
+ // Events
119
+ onEvent: function(handler) { _eventHandlers.push(handler); },
120
+ };
121
+
122
+ window.dispatchEvent(new CustomEvent("mailxapiready"));
123
+ })();
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bobfrankston/mailx-client",
3
- "version": "1.0.1",
3
+ "version": "1.0.7",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "dependencies": {
@@ -7,7 +7,7 @@
7
7
  align-items: center;
8
8
  justify-content: space-between;
9
9
  padding: 0 var(--gap-sm);
10
- background: oklch(0.82 0.06 240); /* DEBUG: light blue toolbar */
10
+ background: var(--color-brand);
11
11
  border-bottom: 1px solid var(--color-border);
12
12
  gap: var(--gap-sm);
13
13
 
@@ -26,9 +26,9 @@
26
26
  border: none;
27
27
  border-radius: var(--radius-sm);
28
28
  background: transparent;
29
- color: var(--color-text);
29
+ color: var(--color-brand-dark);
30
30
  font-size: var(--font-size-sm);
31
- font-weight: 600;
31
+ font-weight: 700;
32
32
  cursor: pointer;
33
33
  white-space: nowrap;
34
34
 
@@ -99,9 +99,9 @@
99
99
  align-items: center;
100
100
  gap: var(--gap-xs);
101
101
  padding: var(--gap-xs) var(--gap-sm);
102
- font-weight: 600;
103
- font-size: var(--font-size-sm);
104
- color: var(--color-text-muted);
102
+ font-weight: 700;
103
+ font-size: var(--font-size-base);
104
+ color: var(--color-brand-dark);
105
105
  text-transform: uppercase;
106
106
  letter-spacing: 0.05em;
107
107
  cursor: pointer;
@@ -130,7 +130,8 @@
130
130
  padding: var(--gap-xs) var(--gap-sm) var(--gap-xs) var(--gap-lg);
131
131
  cursor: pointer;
132
132
  font-size: var(--font-size-base);
133
- color: var(--color-text);
133
+ font-weight: 600;
134
+ color: var(--color-brand-dark);
134
135
  border-radius: 0;
135
136
 
136
137
  &:hover { background: var(--color-bg-hover); }
@@ -150,18 +151,57 @@
150
151
  text-align: center;
151
152
  }
152
153
 
154
+ .ft-badge-outbox {
155
+ background: oklch(0.55 0.18 25);
156
+ }
157
+
158
+ .ft-filter {
159
+ padding: 2px var(--gap-xs);
160
+ border-bottom: 1px solid var(--color-border);
161
+ background: var(--color-bg-surface);
162
+ flex-shrink: 0;
163
+ }
164
+
165
+ .ft-filter input {
166
+ width: 100%;
167
+ padding: 2px var(--gap-sm);
168
+ border: 1px solid var(--color-border);
169
+ border-radius: var(--radius-sm);
170
+ background: var(--color-bg);
171
+ color: var(--color-text);
172
+ font-size: var(--font-size-sm);
173
+ outline: none;
174
+ }
175
+
176
+ .ft-filter input:focus { border-color: var(--color-accent); }
177
+
178
+ .ft-folder.ft-filter-hidden,
179
+ .ft-account.ft-filter-hidden,
180
+ .ft-account-header.ft-filter-hidden { display: none; }
181
+
153
182
  .folder-loading {
154
183
  padding: var(--gap-lg);
155
184
  color: var(--color-text-muted);
156
185
  font-size: var(--font-size-sm);
157
186
  }
158
187
 
188
+ .ft-folder.drop-target {
189
+ background: var(--color-accent);
190
+ color: white;
191
+ outline: 2px solid var(--color-brand-dark);
192
+ outline-offset: -2px;
193
+ }
194
+
195
+ .ml-row.dragging {
196
+ opacity: 0.5;
197
+ }
198
+
159
199
  /* ── Message List ── */
160
200
 
161
201
  .message-list {
162
202
  display: grid;
163
203
  grid-template-columns: 1.2em minmax(120px, 200px) auto 1fr;
164
- grid-template-rows: auto 1fr;
204
+ grid-template-rows: auto auto 1fr;
165
205
  column-gap: var(--gap-sm);
166
206
  overflow: hidden;
167
207
  border-right: 1px solid var(--color-border);
@@ -187,6 +227,30 @@
187
227
  font-size: var(--font-size-sm);
188
228
  }
189
229
 
230
+ .ml-filter {
231
+ grid-column: 1 / -1;
232
+ padding: 2px var(--gap-xs);
233
+ border-bottom: 1px solid var(--color-border);
234
+ background: var(--color-bg-surface);
235
+ }
236
+
237
+ .ml-filter input {
238
+ width: 100%;
239
+ padding: 2px var(--gap-sm);
240
+ border: 1px solid var(--color-border);
241
+ border-radius: var(--radius-sm);
242
+ background: var(--color-bg);
243
+ color: var(--color-text);
244
+ font-size: var(--font-size-sm);
245
+ outline: none;
246
+ }
247
+
248
+ .ml-filter input:focus {
249
+ border-color: var(--color-accent);
250
+ }
251
+
252
+ .ml-row.filter-hidden { display: none; }
253
+
190
254
  .ml-header {
191
255
  display: grid;
192
256
  grid-template-columns: subgrid;
@@ -195,8 +259,8 @@
195
259
  border-bottom: 1px solid var(--color-border);
196
260
  background: var(--color-bg-toolbar);
197
261
  font-size: var(--font-size-sm);
198
- font-weight: 600;
199
- color: var(--color-text-muted);
262
+ font-weight: 700;
263
+ color: var(--color-brand-dark);
200
264
  user-select: none;
201
265
 
202
266
  .ml-col { cursor: pointer; &:hover { color: var(--color-text); } }
@@ -219,10 +283,11 @@
219
283
  border-bottom: 1px solid color-mix(in oklch, var(--color-border) 50%, transparent);
220
284
  cursor: pointer;
221
285
  font-size: var(--font-size-base);
286
+ color: var(--color-text);
222
287
  align-items: baseline;
223
288
 
224
289
  &:hover { background: var(--color-bg-hover); }
225
- &.selected { background: var(--color-bg-selected); color: var(--color-unread); }
290
+ &.selected { background: var(--color-brand); color: var(--color-brand-dark); font-weight: 600; }
226
291
  &.unread {
227
292
  font-weight: 600;
228
293
  color: var(--color-unread);
@@ -282,21 +347,91 @@
282
347
  font-size: var(--font-size-sm);
283
348
  line-height: 1.5;
284
349
 
350
+ .mv-header-top { display: flex; justify-content: space-between; align-items: flex-start; gap: var(--gap-sm); }
351
+ .mv-header-info { flex: 1; min-width: 0; }
352
+ .mv-header-actions { display: flex; align-items: center; gap: var(--gap-xs); flex-shrink: 0; }
285
353
  .mv-from { font-weight: 600; }
286
354
  .mv-to { color: var(--color-text-muted); }
287
355
  .mv-subject { font-size: var(--font-size-lg); font-weight: 600; margin-top: var(--gap-xs); }
288
356
  .mv-date { color: var(--color-text-muted); font-size: var(--font-size-sm); }
357
+ .mv-unsubscribe {
358
+ font-size: var(--font-size-sm);
359
+ color: var(--color-danger);
360
+ cursor: pointer;
361
+ text-decoration: underline;
362
+ white-space: nowrap;
363
+ }
364
+ .mv-action {
365
+ font-size: var(--font-size-sm);
366
+ padding: 2px 6px;
367
+ border: 1px solid var(--color-border);
368
+ border-radius: var(--radius-sm);
369
+ background: transparent;
370
+ color: var(--color-text-muted);
371
+ cursor: pointer;
372
+ white-space: nowrap;
373
+ }
374
+ .mv-action:hover { background: var(--color-bg-hover); color: var(--color-text); }
375
+ .mv-action-primary {
376
+ background: var(--color-brand-dark) !important;
377
+ color: white !important;
378
+ border-color: var(--color-brand-dark) !important;
379
+ }
380
+ .mv-action-primary:hover { opacity: 0.85; }
289
381
  }
290
382
 
291
383
  .mv-remote-banner {
384
+ background: oklch(0.45 0.12 60);
385
+ color: white;
386
+ font-size: var(--font-size-sm);
387
+ font-weight: 600;
388
+ }
389
+
390
+ .mv-rb-summary {
292
391
  display: flex;
293
392
  align-items: center;
294
393
  gap: var(--gap-sm);
295
394
  padding: var(--gap-xs) var(--gap-md);
296
- background: oklch(0.45 0.12 60);
297
- color: white;
298
- font-size: var(--font-size-sm);
395
+ cursor: pointer;
396
+ flex-wrap: wrap;
397
+ }
398
+
399
+ .mv-rb-toggle {
400
+ font-size: 0.8em;
401
+ width: 1em;
402
+ display: inline-block;
403
+ flex-shrink: 0;
404
+ }
405
+
406
+ .mv-rb-buttons {
407
+ display: flex;
408
+ flex-wrap: wrap;
409
+ gap: var(--gap-xs);
410
+ margin-left: auto;
411
+ }
412
+
413
+ .mv-rb-details {
414
+ padding: var(--gap-xs) var(--gap-md) var(--gap-sm);
415
+ border-top: 1px solid rgba(255,255,255,0.2);
416
+ }
417
+
418
+ .mv-rb-info {
419
+ font-weight: 400;
420
+ line-height: 1.6;
421
+ margin-bottom: var(--gap-sm);
422
+ }
423
+
424
+ .mv-rb-actions {
425
+ display: flex;
426
+ flex-wrap: wrap;
427
+ gap: var(--gap-xs);
428
+ }
429
+
430
+ .mv-rb-label {
431
+ color: rgba(255,255,255,0.7);
299
432
  font-weight: 600;
433
+ display: inline-block;
434
+ min-width: 6em;
300
435
  }
301
436
 
302
437
  .mv-remote-banner button {
@@ -307,6 +442,7 @@
307
442
  color: white;
308
443
  font-size: var(--font-size-sm);
309
444
  cursor: pointer;
445
+ font-weight: 600;
310
446
  }
311
447
 
312
448
  .mv-remote-banner button:hover {
@@ -315,7 +451,7 @@
315
451
 
316
452
  .mv-body {
317
453
  flex: 1;
318
- overflow-y: auto;
454
+ overflow: hidden;
319
455
  background: var(--color-bg-surface);
320
456
 
321
457
  iframe {
@@ -359,3 +495,40 @@
359
495
  font-size: var(--font-size-sm);
360
496
  color: var(--color-text-muted);
361
497
  }
498
+
499
+ /* ── Startup Overlay ── */
500
+
501
+ .startup-overlay {
502
+ position: fixed;
503
+ inset: var(--toolbar-height) 0 var(--statusbar-height) 0;
504
+ display: flex;
505
+ align-items: center;
506
+ justify-content: center;
507
+ background: var(--color-bg);
508
+ z-index: 100;
509
+ transition: opacity 0.3s ease;
510
+ }
511
+
512
+ .startup-overlay.hidden {
513
+ opacity: 0;
514
+ pointer-events: none;
515
+ }
516
+
517
+ .startup-content {
518
+ text-align: center;
519
+ color: var(--color-text);
520
+ }
521
+
522
+ .startup-spinner {
523
+ width: 32px;
524
+ height: 32px;
525
+ margin: 0 auto var(--gap-md);
526
+ border: 3px solid var(--color-border);
527
+ border-top-color: var(--color-brand-dark);
528
+ border-radius: 50%;
529
+ animation: spin 1s linear infinite;
530
+ }
531
+
532
+ #startup-status {
533
+ font-size: var(--font-size-lg);
534
+ }
@@ -24,7 +24,8 @@ body {
24
24
  }
25
25
 
26
26
  .toolbar { grid-area: toolbar; }
27
- .folder-tree { grid-area: folders; }
27
+ .folder-panel { grid-area: folders; display: flex; flex-direction: column; overflow: hidden; }
28
+ .folder-tree { flex: 1; overflow-y: auto; }
28
29
  .main-area { grid-area: main; }
29
30
  .status-bar { grid-area: status; }
30
31
 
package/killmail.cmd ADDED
@@ -0,0 +1,6 @@
1
+ @echo off
2
+ REM Kill mailx server (port 9333) and launcher window
3
+ REM Safe: only kills mailx processes, never all node.exe
4
+
5
+ taskkill /F /IM mailx-app.exe >nul 2>&1 && echo Killed mailx-app.exe || echo mailx-app.exe not running
6
+ killport 9333
package/launch.ps1 CHANGED
@@ -1,20 +1,62 @@
1
1
  # Launch mailx email client
2
2
  #
3
- # Usage: launch.ps1 [-dev] [-prod] [-restart]
3
+ # Usage: launch.ps1 [-dev] [-prod] [-restart] [-clear]
4
4
  # -dev (default) Start server with --watch for auto-restart on file changes
5
5
  # -prod Start server without --watch
6
6
  # -restart Kill existing server on port 9333 before starting
7
+ # -clear Clear WebView2 cache before launching (fixes blank window issues)
7
8
  #
8
9
  # The launcher starts the Node server (if not running) and opens a WebView2 window.
9
10
  # Server: http://localhost:9333
10
11
  # Log: mailx.log
11
12
  # Data: ~/.mailx/ (DB, store, settings pointer)
12
13
 
13
- # Try pre-built binary first, then dev build
14
- $exe = "$PSScriptRoot\launcher\bin\mailx-app.exe"
15
- if (-not (Test-Path $exe)) {
16
- $exe = "$PSScriptRoot\launcher\target\debug\mailx-app.exe"
14
+ # Clear WebView2 cache if requested
15
+ if ("-clear" -in $args) {
16
+ $wv2dir = "$PSScriptRoot\launcher\bin\mailx-app.exe.WebView2"
17
+ if (Test-Path $wv2dir) {
18
+ Write-Host "Clearing WebView2 cache..."
19
+ Remove-Item -Recurse -Force $wv2dir
20
+ }
21
+ # Remove -clear from args passed to exe
22
+ $args = $args | Where-Object { $_ -ne "-clear" }
23
+ }
24
+
25
+ # Check if mailx-app is already running
26
+ $existing = Get-Process -Name "mailx-app" -ErrorAction SilentlyContinue
27
+ if ($existing -and ("-restart" -notin $args)) {
28
+ Write-Host "mailx is already running (PID $($existing.Id)). Use -restart to force."
29
+ # Try to bring the existing window to front
30
+ Add-Type @"
31
+ using System;
32
+ using System.Runtime.InteropServices;
33
+ public class Win32 {
34
+ [DllImport("user32.dll")] public static extern bool SetForegroundWindow(IntPtr hWnd);
35
+ [DllImport("user32.dll")] public static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
36
+ }
37
+ "@
38
+ $hwnd = $existing.MainWindowHandle
39
+ if ($hwnd -ne [IntPtr]::Zero) {
40
+ [Win32]::ShowWindow($hwnd, 9) | Out-Null # SW_RESTORE
41
+ [Win32]::SetForegroundWindow($hwnd) | Out-Null
42
+ }
43
+ exit 0
17
44
  }
45
+
46
+ # Copy latest release build to bin/ if newer
47
+ $release = "$PSScriptRoot\launcher\target\release\mailx-app.exe"
48
+ $bin = "$PSScriptRoot\launcher\bin\mailx-app.exe"
49
+ if ((Test-Path $release) -and (Test-Path $bin)) {
50
+ if ((Get-Item $release).LastWriteTime -gt (Get-Item $bin).LastWriteTime) {
51
+ Write-Host "Updating launcher binary..."
52
+ Copy-Item $release $bin -Force -ErrorAction SilentlyContinue
53
+ }
54
+ }
55
+
56
+ # Try pre-built binary first, then release, then debug
57
+ $exe = $bin
58
+ if (-not (Test-Path $exe)) { $exe = $release }
59
+ if (-not (Test-Path $exe)) { $exe = "$PSScriptRoot\launcher\target\debug\mailx-app.exe" }
18
60
  if (-not (Test-Path $exe)) {
19
61
  Write-Host "Launcher not found. Run: launcher\build.cmd"
20
62
  exit 1
Binary file
@@ -0,0 +1,3 @@
1
+ 2026/03/30-12:46:48.817 6494 Reusing MANIFEST Y:\dev\email\mailx\launcher\bin\mailx-app.exe.WebView2\EBWebView\Default\Extension Rules/MANIFEST-000001
2
+ 2026/03/30-12:46:48.821 6494 Recovering log #3
3
+ 2026/03/30-12:46:48.823 6494 Reusing old log Y:\dev\email\mailx\launcher\bin\mailx-app.exe.WebView2\EBWebView\Default\Extension Rules/000003.log
@@ -0,0 +1,3 @@
1
+ 2026/03/30-12:46:49.347 6494 Reusing MANIFEST Y:\dev\email\mailx\launcher\bin\mailx-app.exe.WebView2\EBWebView\Default\Extension Scripts/MANIFEST-000001
2
+ 2026/03/30-12:46:49.351 6494 Recovering log #3
3
+ 2026/03/30-12:46:49.353 6494 Reusing old log Y:\dev\email\mailx\launcher\bin\mailx-app.exe.WebView2\EBWebView\Default\Extension Scripts/000003.log
@@ -0,0 +1,3 @@
1
+ 2026/03/30-12:46:49.520 6494 Reusing MANIFEST Y:\dev\email\mailx\launcher\bin\mailx-app.exe.WebView2\EBWebView\Default\Extension State/MANIFEST-000001
2
+ 2026/03/30-12:46:49.525 6494 Recovering log #3
3
+ 2026/03/30-12:46:49.529 6494 Reusing old log Y:\dev\email\mailx\launcher\bin\mailx-app.exe.WebView2\EBWebView\Default\Extension State/000003.log
@@ -0,0 +1,3 @@
1
+ 2026/03/30-13:02:28.120 1a28 Reusing MANIFEST Y:\dev\email\mailx\launcher\bin\mailx-app.exe.WebView2\EBWebView\Default\IndexedDB\devtools_devtools_0.indexeddb.leveldb/MANIFEST-000001
2
+ 2026/03/30-13:02:28.168 1a28 Recovering log #3
3
+ 2026/03/30-13:02:28.190 1a28 Reusing old log Y:\dev\email\mailx\launcher\bin\mailx-app.exe.WebView2\EBWebView\Default\IndexedDB\devtools_devtools_0.indexeddb.leveldb/000003.log
@@ -0,0 +1,3 @@
1
+ 2026/03/30-12:46:49.225 c2c Reusing MANIFEST Y:\dev\email\mailx\launcher\bin\mailx-app.exe.WebView2\EBWebView\Default\Local Storage\leveldb/MANIFEST-000001
2
+ 2026/03/30-12:46:49.311 c2c Recovering log #3
3
+ 2026/03/30-12:46:49.348 c2c Reusing old log Y:\dev\email\mailx\launcher\bin\mailx-app.exe.WebView2\EBWebView\Default\Local Storage\leveldb/000003.log
NEL ADDED
Binary file