@bobfrankston/mailx 1.0.465 → 1.0.500

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 (344) hide show
  1. package/.globalize.json5 +25 -0
  2. package/README.md +17 -420
  3. package/bin/mailx.js +87 -84
  4. package/bin/mailx.js.map +1 -1
  5. package/bin/mailx.ts +87 -84
  6. package/client/android.html +5 -5
  7. package/client/app.js +42 -38
  8. package/client/components/folder-tree.js +7 -5
  9. package/client/components/message-list.js +485 -448
  10. package/client/components/message-viewer.js +36 -41
  11. package/client/index.html +8 -8
  12. package/client/lib/message-state.js +46 -65
  13. package/index.js +59 -0
  14. package/package.json +12 -114
  15. package/packages/mailx-send/mailsend/{package-lock.json → node_modules/.package-lock.json} +0 -16
  16. package/packages/mailx-send/mailsend/node_modules/@types/node/LICENSE +21 -0
  17. package/packages/mailx-send/mailsend/node_modules/@types/node/README.md +15 -0
  18. package/packages/mailx-send/mailsend/node_modules/@types/node/assert/strict.d.ts +111 -0
  19. package/packages/mailx-send/mailsend/node_modules/@types/node/assert.d.ts +1078 -0
  20. package/packages/mailx-send/mailsend/node_modules/@types/node/async_hooks.d.ts +603 -0
  21. package/packages/mailx-send/mailsend/node_modules/@types/node/buffer.buffer.d.ts +472 -0
  22. package/packages/mailx-send/mailsend/node_modules/@types/node/buffer.d.ts +1934 -0
  23. package/packages/mailx-send/mailsend/node_modules/@types/node/child_process.d.ts +1476 -0
  24. package/packages/mailx-send/mailsend/node_modules/@types/node/cluster.d.ts +578 -0
  25. package/packages/mailx-send/mailsend/node_modules/@types/node/compatibility/disposable.d.ts +14 -0
  26. package/packages/mailx-send/mailsend/node_modules/@types/node/compatibility/index.d.ts +9 -0
  27. package/packages/mailx-send/mailsend/node_modules/@types/node/compatibility/indexable.d.ts +20 -0
  28. package/packages/mailx-send/mailsend/node_modules/@types/node/compatibility/iterators.d.ts +20 -0
  29. package/packages/mailx-send/mailsend/node_modules/@types/node/console.d.ts +452 -0
  30. package/packages/mailx-send/mailsend/node_modules/@types/node/constants.d.ts +21 -0
  31. package/packages/mailx-send/mailsend/node_modules/@types/node/crypto.d.ts +4545 -0
  32. package/packages/mailx-send/mailsend/node_modules/@types/node/dgram.d.ts +600 -0
  33. package/packages/mailx-send/mailsend/node_modules/@types/node/diagnostics_channel.d.ts +578 -0
  34. package/packages/mailx-send/mailsend/node_modules/@types/node/dns/promises.d.ts +503 -0
  35. package/packages/mailx-send/mailsend/node_modules/@types/node/dns.d.ts +923 -0
  36. package/packages/mailx-send/mailsend/node_modules/@types/node/domain.d.ts +170 -0
  37. package/packages/mailx-send/mailsend/node_modules/@types/node/events.d.ts +976 -0
  38. package/packages/mailx-send/mailsend/node_modules/@types/node/fs/promises.d.ts +1295 -0
  39. package/packages/mailx-send/mailsend/node_modules/@types/node/fs.d.ts +4461 -0
  40. package/packages/mailx-send/mailsend/node_modules/@types/node/globals.d.ts +172 -0
  41. package/packages/mailx-send/mailsend/node_modules/@types/node/globals.typedarray.d.ts +38 -0
  42. package/packages/mailx-send/mailsend/node_modules/@types/node/http.d.ts +2089 -0
  43. package/packages/mailx-send/mailsend/node_modules/@types/node/http2.d.ts +2644 -0
  44. package/packages/mailx-send/mailsend/node_modules/@types/node/https.d.ts +579 -0
  45. package/packages/mailx-send/mailsend/node_modules/@types/node/index.d.ts +97 -0
  46. package/packages/mailx-send/mailsend/node_modules/@types/node/inspector.d.ts +253 -0
  47. package/packages/mailx-send/mailsend/node_modules/@types/node/inspector.generated.d.ts +4052 -0
  48. package/packages/mailx-send/mailsend/node_modules/@types/node/module.d.ts +891 -0
  49. package/packages/mailx-send/mailsend/node_modules/@types/node/net.d.ts +1057 -0
  50. package/packages/mailx-send/mailsend/node_modules/@types/node/os.d.ts +506 -0
  51. package/packages/mailx-send/mailsend/node_modules/@types/node/package.json +145 -0
  52. package/packages/mailx-send/mailsend/node_modules/@types/node/path.d.ts +200 -0
  53. package/packages/mailx-send/mailsend/node_modules/@types/node/perf_hooks.d.ts +968 -0
  54. package/packages/mailx-send/mailsend/node_modules/@types/node/process.d.ts +2084 -0
  55. package/packages/mailx-send/mailsend/node_modules/@types/node/punycode.d.ts +117 -0
  56. package/packages/mailx-send/mailsend/node_modules/@types/node/querystring.d.ts +152 -0
  57. package/packages/mailx-send/mailsend/node_modules/@types/node/readline/promises.d.ts +161 -0
  58. package/packages/mailx-send/mailsend/node_modules/@types/node/readline.d.ts +594 -0
  59. package/packages/mailx-send/mailsend/node_modules/@types/node/repl.d.ts +428 -0
  60. package/packages/mailx-send/mailsend/node_modules/@types/node/sea.d.ts +153 -0
  61. package/packages/mailx-send/mailsend/node_modules/@types/node/sqlite.d.ts +721 -0
  62. package/packages/mailx-send/mailsend/node_modules/@types/node/stream/consumers.d.ts +38 -0
  63. package/packages/mailx-send/mailsend/node_modules/@types/node/stream/promises.d.ts +90 -0
  64. package/packages/mailx-send/mailsend/node_modules/@types/node/stream/web.d.ts +622 -0
  65. package/packages/mailx-send/mailsend/node_modules/@types/node/stream.d.ts +1664 -0
  66. package/packages/mailx-send/mailsend/node_modules/@types/node/string_decoder.d.ts +67 -0
  67. package/packages/mailx-send/mailsend/node_modules/@types/node/test.d.ts +2163 -0
  68. package/packages/mailx-send/mailsend/node_modules/@types/node/timers/promises.d.ts +108 -0
  69. package/packages/mailx-send/mailsend/node_modules/@types/node/timers.d.ts +287 -0
  70. package/packages/mailx-send/mailsend/node_modules/@types/node/tls.d.ts +1319 -0
  71. package/packages/mailx-send/mailsend/node_modules/@types/node/trace_events.d.ts +197 -0
  72. package/packages/mailx-send/mailsend/node_modules/@types/node/ts5.6/buffer.buffer.d.ts +468 -0
  73. package/packages/mailx-send/mailsend/node_modules/@types/node/ts5.6/globals.typedarray.d.ts +34 -0
  74. package/packages/mailx-send/mailsend/node_modules/@types/node/ts5.6/index.d.ts +97 -0
  75. package/packages/mailx-send/mailsend/node_modules/@types/node/tty.d.ts +208 -0
  76. package/packages/mailx-send/mailsend/node_modules/@types/node/url.d.ts +984 -0
  77. package/packages/mailx-send/mailsend/node_modules/@types/node/util.d.ts +2606 -0
  78. package/packages/mailx-send/mailsend/node_modules/@types/node/v8.d.ts +920 -0
  79. package/packages/mailx-send/mailsend/node_modules/@types/node/vm.d.ts +1000 -0
  80. package/packages/mailx-send/mailsend/node_modules/@types/node/wasi.d.ts +181 -0
  81. package/packages/mailx-send/mailsend/node_modules/@types/node/web-globals/abortcontroller.d.ts +34 -0
  82. package/packages/mailx-send/mailsend/node_modules/@types/node/web-globals/domexception.d.ts +68 -0
  83. package/packages/mailx-send/mailsend/node_modules/@types/node/web-globals/events.d.ts +97 -0
  84. package/packages/mailx-send/mailsend/node_modules/@types/node/web-globals/fetch.d.ts +55 -0
  85. package/packages/mailx-send/mailsend/node_modules/@types/node/web-globals/navigator.d.ts +22 -0
  86. package/packages/mailx-send/mailsend/node_modules/@types/node/web-globals/storage.d.ts +24 -0
  87. package/packages/mailx-send/mailsend/node_modules/@types/node/worker_threads.d.ts +784 -0
  88. package/packages/mailx-send/mailsend/node_modules/@types/node/zlib.d.ts +747 -0
  89. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/LICENSE +21 -0
  90. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/README.md +15 -0
  91. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/index.d.ts +82 -0
  92. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/addressparser/index.d.ts +31 -0
  93. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/base64/index.d.ts +22 -0
  94. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/dkim/index.d.ts +45 -0
  95. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/dkim/message-parser.d.ts +75 -0
  96. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/dkim/relaxed-body.d.ts +75 -0
  97. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/dkim/sign.d.ts +21 -0
  98. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/fetch/cookies.d.ts +54 -0
  99. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/fetch/index.d.ts +38 -0
  100. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/json-transport/index.d.ts +53 -0
  101. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/mail-composer/index.d.ts +25 -0
  102. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/mailer/index.d.ts +283 -0
  103. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/mailer/mail-message.d.ts +32 -0
  104. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/mime-funcs/index.d.ts +87 -0
  105. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/mime-funcs/mime-types.d.ts +2 -0
  106. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/mime-node/index.d.ts +224 -0
  107. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/mime-node/last-newline.d.ts +9 -0
  108. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/qp/index.d.ts +23 -0
  109. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/sendmail-transport/index.d.ts +53 -0
  110. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/sendmail-transport/le-unix.d.ts +7 -0
  111. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/sendmail-transport/le-windows.d.ts +7 -0
  112. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/ses-transport/index.d.ts +146 -0
  113. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/shared/index.d.ts +58 -0
  114. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/smtp-connection/data-stream.d.ts +11 -0
  115. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/smtp-connection/http-proxy-client.d.ts +16 -0
  116. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/smtp-connection/index.d.ts +270 -0
  117. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/smtp-pool/index.d.ts +93 -0
  118. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/smtp-pool/pool-resource.d.ts +66 -0
  119. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/smtp-transport/index.d.ts +115 -0
  120. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/stream-transport/index.d.ts +59 -0
  121. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/well-known/index.d.ts +6 -0
  122. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/xoauth2/index.d.ts +114 -0
  123. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/package.json +38 -0
  124. package/packages/mailx-send/mailsend/node_modules/nodemailer/.ncurc.js +9 -0
  125. package/packages/mailx-send/mailsend/node_modules/nodemailer/.prettierignore +8 -0
  126. package/packages/mailx-send/mailsend/node_modules/nodemailer/.prettierrc +12 -0
  127. package/packages/mailx-send/mailsend/node_modules/nodemailer/.prettierrc.js +10 -0
  128. package/packages/mailx-send/mailsend/node_modules/nodemailer/.release-please-config.json +9 -0
  129. package/packages/mailx-send/mailsend/node_modules/nodemailer/LICENSE +16 -0
  130. package/packages/mailx-send/mailsend/node_modules/nodemailer/README.md +86 -0
  131. package/packages/mailx-send/mailsend/node_modules/nodemailer/SECURITY.txt +22 -0
  132. package/packages/mailx-send/mailsend/node_modules/nodemailer/eslint.config.js +88 -0
  133. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/addressparser/index.js +383 -0
  134. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/base64/index.js +139 -0
  135. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/dkim/index.js +253 -0
  136. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/dkim/message-parser.js +155 -0
  137. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/dkim/relaxed-body.js +154 -0
  138. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/dkim/sign.js +117 -0
  139. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/fetch/cookies.js +281 -0
  140. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/fetch/index.js +280 -0
  141. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/json-transport/index.js +82 -0
  142. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/mail-composer/index.js +629 -0
  143. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/mailer/index.js +441 -0
  144. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/mailer/mail-message.js +316 -0
  145. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/mime-funcs/index.js +625 -0
  146. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/mime-funcs/mime-types.js +2113 -0
  147. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/mime-node/index.js +1316 -0
  148. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/mime-node/last-newline.js +33 -0
  149. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/mime-node/le-unix.js +43 -0
  150. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/mime-node/le-windows.js +52 -0
  151. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/nodemailer.js +157 -0
  152. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/punycode/index.js +460 -0
  153. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/qp/index.js +227 -0
  154. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/sendmail-transport/index.js +210 -0
  155. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/ses-transport/index.js +234 -0
  156. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/shared/index.js +754 -0
  157. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/smtp-connection/data-stream.js +108 -0
  158. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/smtp-connection/http-proxy-client.js +143 -0
  159. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/smtp-connection/index.js +1870 -0
  160. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/smtp-pool/index.js +652 -0
  161. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/smtp-pool/pool-resource.js +259 -0
  162. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/smtp-transport/index.js +421 -0
  163. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/stream-transport/index.js +135 -0
  164. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/well-known/index.js +47 -0
  165. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/well-known/services.json +611 -0
  166. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/xoauth2/index.js +427 -0
  167. package/packages/mailx-send/mailsend/node_modules/nodemailer/package.json +47 -0
  168. package/packages/mailx-send/mailsend/node_modules/undici-types/LICENSE +21 -0
  169. package/packages/mailx-send/mailsend/node_modules/undici-types/README.md +6 -0
  170. package/packages/mailx-send/mailsend/node_modules/undici-types/agent.d.ts +31 -0
  171. package/packages/mailx-send/mailsend/node_modules/undici-types/api.d.ts +43 -0
  172. package/packages/mailx-send/mailsend/node_modules/undici-types/balanced-pool.d.ts +29 -0
  173. package/packages/mailx-send/mailsend/node_modules/undici-types/cache.d.ts +36 -0
  174. package/packages/mailx-send/mailsend/node_modules/undici-types/client.d.ts +108 -0
  175. package/packages/mailx-send/mailsend/node_modules/undici-types/connector.d.ts +34 -0
  176. package/packages/mailx-send/mailsend/node_modules/undici-types/content-type.d.ts +21 -0
  177. package/packages/mailx-send/mailsend/node_modules/undici-types/cookies.d.ts +28 -0
  178. package/packages/mailx-send/mailsend/node_modules/undici-types/diagnostics-channel.d.ts +66 -0
  179. package/packages/mailx-send/mailsend/node_modules/undici-types/dispatcher.d.ts +256 -0
  180. package/packages/mailx-send/mailsend/node_modules/undici-types/env-http-proxy-agent.d.ts +21 -0
  181. package/packages/mailx-send/mailsend/node_modules/undici-types/errors.d.ts +149 -0
  182. package/packages/mailx-send/mailsend/node_modules/undici-types/eventsource.d.ts +61 -0
  183. package/packages/mailx-send/mailsend/node_modules/undici-types/fetch.d.ts +209 -0
  184. package/packages/mailx-send/mailsend/node_modules/undici-types/file.d.ts +39 -0
  185. package/packages/mailx-send/mailsend/node_modules/undici-types/filereader.d.ts +54 -0
  186. package/packages/mailx-send/mailsend/node_modules/undici-types/formdata.d.ts +108 -0
  187. package/packages/mailx-send/mailsend/node_modules/undici-types/global-dispatcher.d.ts +9 -0
  188. package/packages/mailx-send/mailsend/node_modules/undici-types/global-origin.d.ts +7 -0
  189. package/packages/mailx-send/mailsend/node_modules/undici-types/handlers.d.ts +15 -0
  190. package/packages/mailx-send/mailsend/node_modules/undici-types/header.d.ts +4 -0
  191. package/packages/mailx-send/mailsend/node_modules/undici-types/index.d.ts +71 -0
  192. package/packages/mailx-send/mailsend/node_modules/undici-types/interceptors.d.ts +17 -0
  193. package/packages/mailx-send/mailsend/node_modules/undici-types/mock-agent.d.ts +50 -0
  194. package/packages/mailx-send/mailsend/node_modules/undici-types/mock-client.d.ts +25 -0
  195. package/packages/mailx-send/mailsend/node_modules/undici-types/mock-errors.d.ts +12 -0
  196. package/packages/mailx-send/mailsend/node_modules/undici-types/mock-interceptor.d.ts +93 -0
  197. package/packages/mailx-send/mailsend/node_modules/undici-types/mock-pool.d.ts +25 -0
  198. package/packages/mailx-send/mailsend/node_modules/undici-types/package.json +55 -0
  199. package/packages/mailx-send/mailsend/node_modules/undici-types/patch.d.ts +33 -0
  200. package/packages/mailx-send/mailsend/node_modules/undici-types/pool-stats.d.ts +19 -0
  201. package/packages/mailx-send/mailsend/node_modules/undici-types/pool.d.ts +39 -0
  202. package/packages/mailx-send/mailsend/node_modules/undici-types/proxy-agent.d.ts +28 -0
  203. package/packages/mailx-send/mailsend/node_modules/undici-types/readable.d.ts +65 -0
  204. package/packages/mailx-send/mailsend/node_modules/undici-types/retry-agent.d.ts +8 -0
  205. package/packages/mailx-send/mailsend/node_modules/undici-types/retry-handler.d.ts +116 -0
  206. package/packages/mailx-send/mailsend/node_modules/undici-types/util.d.ts +18 -0
  207. package/packages/mailx-send/mailsend/node_modules/undici-types/webidl.d.ts +228 -0
  208. package/packages/mailx-send/mailsend/node_modules/undici-types/websocket.d.ts +150 -0
  209. package/packages/mailx-server/index.js +1 -1
  210. package/packages/mailx-settings/cloud.js +12 -7
  211. package/packages/mailx-settings/index.js +22 -1
  212. package/client/.gitattributes +0 -10
  213. package/client/app.js.map +0 -1
  214. package/client/app.ts +0 -3190
  215. package/client/components/address-book.js.map +0 -1
  216. package/client/components/address-book.ts +0 -204
  217. package/client/components/alarms.js.map +0 -1
  218. package/client/components/alarms.ts +0 -276
  219. package/client/components/calendar-sidebar.js.map +0 -1
  220. package/client/components/calendar-sidebar.ts +0 -474
  221. package/client/components/calendar.js.map +0 -1
  222. package/client/components/calendar.ts +0 -211
  223. package/client/components/context-menu.js.map +0 -1
  224. package/client/components/context-menu.ts +0 -95
  225. package/client/components/folder-picker.js.map +0 -1
  226. package/client/components/folder-picker.ts +0 -127
  227. package/client/components/folder-tree.js.map +0 -1
  228. package/client/components/folder-tree.ts +0 -1069
  229. package/client/components/message-list.js.map +0 -1
  230. package/client/components/message-list.ts +0 -1129
  231. package/client/components/message-viewer.js.map +0 -1
  232. package/client/components/message-viewer.ts +0 -1257
  233. package/client/components/outbox-view.js.map +0 -1
  234. package/client/components/outbox-view.ts +0 -102
  235. package/client/components/tasks.js.map +0 -1
  236. package/client/components/tasks.ts +0 -234
  237. package/client/compose/compose.js.map +0 -1
  238. package/client/compose/compose.ts +0 -1231
  239. package/client/compose/editor.js.map +0 -1
  240. package/client/compose/editor.ts +0 -599
  241. package/client/compose/ghost-text.js.map +0 -1
  242. package/client/compose/ghost-text.ts +0 -140
  243. package/client/lib/android-bootstrap.js.map +0 -1
  244. package/client/lib/android-bootstrap.ts +0 -9
  245. package/client/lib/api-client.js.map +0 -1
  246. package/client/lib/api-client.ts +0 -439
  247. package/client/lib/local-service.js.map +0 -1
  248. package/client/lib/local-service.ts +0 -646
  249. package/client/lib/local-store.js.map +0 -1
  250. package/client/lib/local-store.ts +0 -283
  251. package/client/lib/message-state.js.map +0 -1
  252. package/client/lib/message-state.ts +0 -160
  253. package/client/tsconfig.json +0 -19
  254. package/packages/mailx-api/.gitattributes +0 -10
  255. package/packages/mailx-api/index.d.ts.map +0 -1
  256. package/packages/mailx-api/index.js.map +0 -1
  257. package/packages/mailx-api/index.ts +0 -283
  258. package/packages/mailx-api/tsconfig.json +0 -9
  259. package/packages/mailx-compose/.gitattributes +0 -10
  260. package/packages/mailx-compose/index.d.ts.map +0 -1
  261. package/packages/mailx-compose/index.js.map +0 -1
  262. package/packages/mailx-compose/index.ts +0 -85
  263. package/packages/mailx-compose/tsconfig.json +0 -9
  264. package/packages/mailx-host/.gitattributes +0 -10
  265. package/packages/mailx-host/index.d.ts +0 -21
  266. package/packages/mailx-host/index.d.ts.map +0 -1
  267. package/packages/mailx-host/index.js +0 -29
  268. package/packages/mailx-host/index.js.map +0 -1
  269. package/packages/mailx-host/index.ts +0 -38
  270. package/packages/mailx-host/package.json +0 -23
  271. package/packages/mailx-host/tsconfig.json +0 -9
  272. package/packages/mailx-host/types-shim.d.ts +0 -14
  273. package/packages/mailx-imap/.gitattributes +0 -10
  274. package/packages/mailx-imap/index.d.ts +0 -442
  275. package/packages/mailx-imap/index.d.ts.map +0 -1
  276. package/packages/mailx-imap/index.js +0 -3684
  277. package/packages/mailx-imap/index.js.map +0 -1
  278. package/packages/mailx-imap/index.ts +0 -3652
  279. package/packages/mailx-imap/package-lock.json +0 -131
  280. package/packages/mailx-imap/package.json +0 -28
  281. package/packages/mailx-imap/providers/gmail-api.d.ts +0 -8
  282. package/packages/mailx-imap/providers/gmail-api.d.ts.map +0 -1
  283. package/packages/mailx-imap/providers/gmail-api.js +0 -8
  284. package/packages/mailx-imap/providers/gmail-api.js.map +0 -1
  285. package/packages/mailx-imap/providers/gmail-api.ts +0 -8
  286. package/packages/mailx-imap/providers/outlook-api.ts +0 -7
  287. package/packages/mailx-imap/providers/types.d.ts +0 -9
  288. package/packages/mailx-imap/providers/types.d.ts.map +0 -1
  289. package/packages/mailx-imap/providers/types.js +0 -9
  290. package/packages/mailx-imap/providers/types.js.map +0 -1
  291. package/packages/mailx-imap/providers/types.ts +0 -9
  292. package/packages/mailx-imap/tsconfig.json +0 -9
  293. package/packages/mailx-imap/tsconfig.tsbuildinfo +0 -1
  294. package/packages/mailx-send/.gitattributes +0 -10
  295. package/packages/mailx-send/cli-queue.d.ts.map +0 -1
  296. package/packages/mailx-send/cli-queue.js.map +0 -1
  297. package/packages/mailx-send/cli-queue.ts +0 -62
  298. package/packages/mailx-send/cli-send.d.ts.map +0 -1
  299. package/packages/mailx-send/cli-send.js.map +0 -1
  300. package/packages/mailx-send/cli-send.ts +0 -83
  301. package/packages/mailx-send/cli.d.ts.map +0 -1
  302. package/packages/mailx-send/cli.js.map +0 -1
  303. package/packages/mailx-send/cli.ts +0 -126
  304. package/packages/mailx-send/index.d.ts.map +0 -1
  305. package/packages/mailx-send/index.js.map +0 -1
  306. package/packages/mailx-send/index.ts +0 -333
  307. package/packages/mailx-send/mailsend/cli.d.ts.map +0 -1
  308. package/packages/mailx-send/mailsend/cli.js.map +0 -1
  309. package/packages/mailx-send/mailsend/cli.ts +0 -81
  310. package/packages/mailx-send/mailsend/index.d.ts.map +0 -1
  311. package/packages/mailx-send/mailsend/index.js.map +0 -1
  312. package/packages/mailx-send/mailsend/index.ts +0 -333
  313. package/packages/mailx-send/mailsend/tsconfig.json +0 -21
  314. package/packages/mailx-send/package-lock.json +0 -65
  315. package/packages/mailx-send/tsconfig.json +0 -21
  316. package/packages/mailx-server/.gitattributes +0 -10
  317. package/packages/mailx-server/index.d.ts.map +0 -1
  318. package/packages/mailx-server/index.js.map +0 -1
  319. package/packages/mailx-server/index.ts +0 -429
  320. package/packages/mailx-server/tsconfig.json +0 -9
  321. package/packages/mailx-settings/.gitattributes +0 -10
  322. package/packages/mailx-settings/cloud.d.ts.map +0 -1
  323. package/packages/mailx-settings/cloud.js.map +0 -1
  324. package/packages/mailx-settings/cloud.ts +0 -388
  325. package/packages/mailx-settings/index.d.ts.map +0 -1
  326. package/packages/mailx-settings/index.js.map +0 -1
  327. package/packages/mailx-settings/index.ts +0 -892
  328. package/packages/mailx-settings/tsconfig.json +0 -9
  329. package/packages/mailx-store/.gitattributes +0 -10
  330. package/packages/mailx-store/db.d.ts.map +0 -1
  331. package/packages/mailx-store/db.js.map +0 -1
  332. package/packages/mailx-store/db.ts +0 -2007
  333. package/packages/mailx-store/file-store.d.ts.map +0 -1
  334. package/packages/mailx-store/file-store.js.map +0 -1
  335. package/packages/mailx-store/file-store.ts +0 -82
  336. package/packages/mailx-store/index.d.ts.map +0 -1
  337. package/packages/mailx-store/index.js.map +0 -1
  338. package/packages/mailx-store/index.ts +0 -7
  339. package/packages/mailx-store/tsconfig.json +0 -9
  340. package/packages/mailx-types/.gitattributes +0 -10
  341. package/packages/mailx-types/index.d.ts.map +0 -1
  342. package/packages/mailx-types/index.js.map +0 -1
  343. package/packages/mailx-types/index.ts +0 -498
  344. package/packages/mailx-types/tsconfig.json +0 -9
package/bin/mailx.ts CHANGED
@@ -1,21 +1,21 @@
1
1
  #!/usr/bin/env node
2
2
  /**
3
- * mailx -- email client
3
+ * rmfmail -- email client
4
4
  *
5
5
  * Usage:
6
- * mailx Start service + open in msger (IPC, no TCP)
7
- * mailx --server Start Express HTTP server (dev/remote)
8
- * mailx --no-browser Start server only (headless)
9
- * mailx --verbose Show console output (default: log file only)
10
- * mailx --email <addr> First-time setup with email (skips prompt)
11
- * mailx --import <file> Import accounts.jsonc into GDrive and merge
12
- * mailx -v / --version Show version and exit
13
- * mailx -kill Kill running mailx processes
14
- * mailx -setup Interactive first-time setup (CLI)
15
- * mailx -test Test IMAP/SMTP connectivity
16
- * mailx -rebuild Wipe local cache, re-sync from IMAP
17
- * mailx -repair Re-sync metadata (fix corrupt subjects) keeping .eml files
18
- * mailx -reauth Clear cached OAuth tokens; next start re-consents
6
+ * rmfmail Start service + open in msger (IPC, no TCP)
7
+ * rmfmail --server Start Express HTTP server (dev/remote)
8
+ * rmfmail --no-browser Start server only (headless)
9
+ * rmfmail --verbose Show console output (default: log file only)
10
+ * rmfmail --email <addr> First-time setup with email (skips prompt)
11
+ * rmfmail --import <file> Import accounts.jsonc into GDrive and merge
12
+ * rmfmail -v / --version Show version and exit
13
+ * rmfmail -kill Kill running rmfmail processes
14
+ * rmfmail -setup Interactive first-time setup (CLI)
15
+ * rmfmail -test Test IMAP/SMTP connectivity
16
+ * rmfmail -rebuild Wipe local cache, re-sync from IMAP
17
+ * rmfmail -repair Re-sync metadata (fix corrupt subjects) keeping .eml files
18
+ * rmfmail -reauth Clear cached OAuth tokens; next start re-consents
19
19
  * (use when new Google scopes have been added)
20
20
  */
21
21
 
@@ -26,7 +26,7 @@ import net from "node:net";
26
26
  import { ports } from "@bobfrankston/miscinfo";
27
27
  import { showMessageBox, showService, setAppName, setAppIcon } from "@bobfrankston/mailx-host";
28
28
 
29
- setAppName("mailx");
29
+ setAppName("rmfmail");
30
30
  // Prefer the .ico (Windows Explorer / taskbar-pin shortcut uses the embedded
31
31
  // icon resource of the pinned exe, or a Windows icon resource referenced
32
32
  // via PKEY_AppUserModel_RelaunchIconResource — PNG can't play either role).
@@ -51,7 +51,7 @@ const __selfVersion: string = (() => {
51
51
  try { return JSON.parse(fs.readFileSync(path.join(__selfRoot, "package.json"), "utf-8")).version || "unknown"; }
52
52
  catch { return "unknown"; }
53
53
  })();
54
- const __instanceFile = path.join(process.env.USERPROFILE || process.env.HOME || ".", ".mailx", "instance.json");
54
+ const __instanceFile = path.join(process.env.USERPROFILE || process.env.HOME || ".", ".rmfmail", "instance.json");
55
55
 
56
56
  function readInstanceFile(): { pid: number; version: string; startedAt: number } | null {
57
57
  try {
@@ -73,8 +73,8 @@ function clearInstanceFile(): void {
73
73
  function pidAlive(pid: number): boolean {
74
74
  try { process.kill(pid, 0); return true; } catch { return false; }
75
75
  }
76
- /** True only if `pid` is alive AND its command line looks like a mailx node
77
- * process. Windows reuses PIDs aggressively — a mailx that exited without
76
+ /** True only if `pid` is alive AND its command line looks like a rmfmail node
77
+ * process. Windows reuses PIDs aggressively — a rmfmail that exited without
78
78
  * running its cleanup handler can leave behind an instance.json whose PID
79
79
  * has since been recycled by some other app (e.g. Creative Cloud UI Helper),
80
80
  * making bare pidAlive() return true and wedging every subsequent `mailx`
@@ -89,7 +89,7 @@ function pidIsMailx(pid: number): boolean {
89
89
  `powershell -NoProfile -Command "(Get-CimInstance Win32_Process -Filter \\"ProcessId=${pid}\\").CommandLine"`,
90
90
  { encoding: "utf-8", stdio: ["ignore", "pipe", "ignore"], windowsHide: true },
91
91
  ).toString();
92
- return /mailx[\\\/](?:bin|packages|app)|mailx-server/i.test(out);
92
+ return /(?:rmfmail|mailx)[\\\/](?:bin|packages|app)|mailx-server/i.test(out);
93
93
  } catch { return false; }
94
94
  }
95
95
 
@@ -105,7 +105,7 @@ if (!isDaemon && !__isCommandInvocation) {
105
105
  const inst = readInstanceFile();
106
106
  if (inst && pidIsMailx(inst.pid)) {
107
107
  if (inst.version !== __selfVersion) {
108
- console.log(`mailx: upgrading running daemon (PID ${inst.pid}) from v${inst.version} → v${__selfVersion}`);
108
+ console.log(`rmfmail: upgrading running daemon (PID ${inst.pid}) from v${inst.version} → v${__selfVersion}`);
109
109
  try { process.kill(inst.pid, "SIGTERM"); } catch { /* already gone */ }
110
110
  // Give it ~1.5s to exit gracefully, then verify
111
111
  const deadline = Date.now() + 2000;
@@ -120,7 +120,7 @@ if (!isDaemon && !__isCommandInvocation) {
120
120
  } else {
121
121
  // Same version already running — nothing to do. Print so the user
122
122
  // knows why `mailx` seems to have done nothing.
123
- console.log(`mailx v${__selfVersion} is already running (PID ${inst.pid}). Use mailx -kill to stop it.`);
123
+ console.log(`rmfmail v${__selfVersion} is already running (PID ${inst.pid}). Use rmfmail -kill to stop it.`);
124
124
  process.exit(0);
125
125
  }
126
126
  } else if (inst) {
@@ -158,12 +158,12 @@ for (const arg of args) {
158
158
  const flag = arg.replace(/^--?/, "");
159
159
  if (arg.startsWith("-") && !knownFlags.includes(flag)) {
160
160
  console.error(`Unknown option: ${arg}`);
161
- console.error("Usage: mailx [-verbose] [-kill] [-rebuild] [-v] [-setup]");
161
+ console.error("Usage: rmfmail [-verbose] [-kill] [-rebuild] [-v] [-setup]");
162
162
  process.exit(1);
163
163
  }
164
164
  }
165
165
 
166
- function log(...msg: any[]): void { if (verbose) console.log("[mailx]", ...msg); }
166
+ function log(...msg: any[]): void { if (verbose) console.log("[rmfmail]", ...msg); }
167
167
 
168
168
  /** Detect whether we're running with administrator / root privileges.
169
169
  * Windows: `net session` requires admin — succeeds silently when elevated,
@@ -190,12 +190,12 @@ function isElevated(): boolean {
190
190
  * safety. Caller decides what to do with "Continue anyway". */
191
191
  async function warnElevated(): Promise<string> {
192
192
  const res = await showMessageBox({
193
- title: "mailx — elevated run not recommended",
193
+ title: "rmfmail — elevated run not recommended",
194
194
  message:
195
- "mailx is running with Administrator privileges.\n\n" +
195
+ "rmfmail is running with Administrator privileges.\n\n" +
196
196
  "This can corrupt the per-user WebView2 profile at\n" +
197
197
  "%LOCALAPPDATA%\\msger\\webview2\\ and create admin-owned files\n" +
198
- "under ~/.mailx/ that later non-admin runs can't write to\n" +
198
+ "under ~/.rmfmail/ that later non-admin runs can't write to\n" +
199
199
  "(SQLite db, tokens, config).\n\n" +
200
200
  "Quit, relaunch from a normal shell, and only use admin if\n" +
201
201
  "you specifically know you need it. To bypass this warning\n" +
@@ -207,9 +207,9 @@ async function warnElevated(): Promise<string> {
207
207
  return res.button;
208
208
  }
209
209
 
210
- // Kill any running mailx server
210
+ // Kill any running rmfmail server
211
211
  if (hasFlag("kill")) {
212
- log("Killing mailx processes...");
212
+ log("Killing rmfmail processes...");
213
213
  const { execSync } = await import("node:child_process");
214
214
  let killed = 0;
215
215
 
@@ -230,30 +230,33 @@ if (hasFlag("kill")) {
230
230
  }
231
231
  } catch { /* no process on port */ }
232
232
 
233
- // Kill any node.exe running mailx (server or IPC service)
233
+ // Kill any node.exe running rmfmail (server or IPC service). Match
234
+ // the legacy `mailx` path too — source tree dir is still
235
+ // `Y:\dev\email\mailx\` and per-app exes from older installs are
236
+ // under `%LOCALAPPDATA%\mailx\` until those get cleaned up.
234
237
  try {
235
238
  const ps = execSync(
236
- `powershell -NoProfile -Command "Get-CimInstance Win32_Process -Filter \\"name='node.exe'\\" | Where-Object { $_.CommandLine -match 'mailx-server|mailx\\\\packages|mailx\\\\bin' } | Select-Object -ExpandProperty ProcessId"`,
239
+ `powershell -NoProfile -Command "Get-CimInstance Win32_Process -Filter \\"name='node.exe'\\" | Where-Object { $_.CommandLine -match '(rmfmail|mailx)-server|(rmfmail|mailx)\\\\packages|(rmfmail|mailx)\\\\bin' } | Select-Object -ExpandProperty ProcessId"`,
237
240
  { encoding: "utf-8" }
238
241
  ).trim();
239
242
  for (const pid of ps.split("\n").map(s => s.trim()).filter(s => /^\d+$/.test(s))) {
240
- try { execSync(`taskkill /F /PID ${pid}`, { stdio: "pipe" }); console.log(`Killed PID ${pid} (mailx node process)`); killed++; } catch { /* */ }
243
+ try { execSync(`taskkill /F /PID ${pid}`, { stdio: "pipe" }); console.log(`Killed PID ${pid} (rmfmail node process)`); killed++; } catch { /* */ }
241
244
  }
242
245
  } catch { /* */ }
243
246
 
244
247
  // Kill orphaned msgernative.exe windows. When the node process dies
245
248
  // without cascade-killing its WebView child (old crash, forced
246
249
  // taskkill, etc.), the msgernative.exe stays on screen and looks
247
- // like a live mailx. mailx -kill should leave no trace.
248
- // Scoped to exes launched for mailx by filtering CommandLine — don't
249
- // touch msger windows started by other apps (msga, bbs, etc.).
250
+ // like a live rmfmail. rmfmail -kill should leave no trace.
251
+ // Scoped to exes launched for rmfmail by filtering CommandLine —
252
+ // don't touch msger windows started by other apps (msga, bbs, etc.).
250
253
  try {
251
254
  const ps = execSync(
252
- `powershell -NoProfile -Command "Get-CimInstance Win32_Process -Filter \\"name='msgernative.exe'\\" | Where-Object { $_.CommandLine -match 'mailx' -or $_.Path -match 'mailx' } | Select-Object -ExpandProperty ProcessId"`,
255
+ `powershell -NoProfile -Command "Get-CimInstance Win32_Process -Filter \\"name='msgernative.exe'\\" | Where-Object { $_.CommandLine -match 'rmfmail|mailx' -or $_.Path -match 'rmfmail|mailx' } | Select-Object -ExpandProperty ProcessId"`,
253
256
  { encoding: "utf-8" }
254
257
  ).trim();
255
258
  for (const pid of ps.split("\n").map(s => s.trim()).filter(s => /^\d+$/.test(s))) {
256
- try { execSync(`taskkill /F /PID ${pid}`, { stdio: "pipe" }); console.log(`Killed PID ${pid} (mailx msgernative/WebView)`); killed++; } catch { /* */ }
259
+ try { execSync(`taskkill /F /PID ${pid}`, { stdio: "pipe" }); console.log(`Killed PID ${pid} (rmfmail msgernative/WebView)`); killed++; } catch { /* */ }
257
260
  }
258
261
  } catch { /* */ }
259
262
  } else {
@@ -261,7 +264,7 @@ if (hasFlag("kill")) {
261
264
  }
262
265
 
263
266
  // Clean up stale SQLite WAL/SHM files
264
- const mailxDir = path.join(process.env.USERPROFILE || process.env.HOME || ".", ".mailx");
267
+ const mailxDir = path.join(process.env.USERPROFILE || process.env.HOME || ".", ".rmfmail");
265
268
  for (const ext of ["mailx.db-shm", "mailx.db-wal"]) {
266
269
  const p = path.join(mailxDir, ext);
267
270
  try { fs.unlinkSync(p); log(`Cleaned ${ext}`); } catch { /* */ }
@@ -274,7 +277,7 @@ if (hasFlag("kill")) {
274
277
  // is the user's escape hatch; leave no lock behind.
275
278
  clearInstanceFile();
276
279
 
277
- if (killed === 0) console.log("No mailx processes found");
280
+ if (killed === 0) console.log("No rmfmail processes found");
278
281
  process.exit(0);
279
282
  }
280
283
 
@@ -306,7 +309,7 @@ if (hasFlag("reauth")) {
306
309
  }
307
310
  console.log(cleared === 0
308
311
  ? "No cached tokens found."
309
- : `Cleared ${cleared} cached token(s). Next 'mailx' start will open a browser OAuth consent so the new scopes (tasks, full contacts) get granted.`);
312
+ : `Cleared ${cleared} cached token(s). Next 'rmfmail' start will open a browser OAuth consent so the new scopes (tasks, full contacts) get granted.`);
310
313
  process.exit(0);
311
314
  }
312
315
 
@@ -316,7 +319,7 @@ if (rebuildMode) {
316
319
  const dbDir = getConfigDir();
317
320
  const storePath = getStorePath();
318
321
 
319
- console.log("Rebuilding mailx local cache...");
322
+ console.log("Rebuilding rmfmail local cache...");
320
323
  console.log(" Accounts and settings will be preserved.");
321
324
 
322
325
  // Remove DB files
@@ -331,7 +334,7 @@ if (rebuildMode) {
331
334
  console.log(` Deleted message store`);
332
335
  }
333
336
 
334
- console.log(" Rebuild complete. Run 'mailx' to start fresh.");
337
+ console.log(" Rebuild complete. Run 'rmfmail' to start fresh.");
335
338
  process.exit(0);
336
339
  }
337
340
 
@@ -342,11 +345,11 @@ if (repairMode) {
342
345
  const dbPath = path.join(dbDir, "mailx.db");
343
346
 
344
347
  if (!fs.existsSync(dbPath)) {
345
- console.error("No database found. Run 'mailx' first to create one.");
348
+ console.error("No database found. Run 'rmfmail' first to create one.");
346
349
  process.exit(1);
347
350
  }
348
351
 
349
- console.log("Repairing mailx metadata...");
352
+ console.log("Repairing rmfmail metadata...");
350
353
  console.log(" Message bodies (.eml files) will be preserved.");
351
354
  console.log(" Clearing message metadata for re-sync...");
352
355
 
@@ -364,7 +367,7 @@ if (repairMode) {
364
367
  db.close();
365
368
 
366
369
  console.log(` Cleared ${count} message entries. Folder sync state reset.`);
367
- console.log(" Run 'mailx' to re-sync from IMAP with correct encoding.");
370
+ console.log(" Run 'rmfmail' to re-sync from IMAP with correct encoding.");
368
371
  process.exit(0);
369
372
  }
370
373
 
@@ -372,9 +375,9 @@ if (repairMode) {
372
375
  if (importMode) {
373
376
  const importPath = args.find(a => !a.startsWith("-"));
374
377
  if (!importPath) {
375
- console.error("Usage: mailx --import <path-to-accounts.jsonc>");
378
+ console.error("Usage: rmfmail --import <path-to-accounts.jsonc>");
376
379
  console.error(" Reads accounts from a local file and saves to Google Drive.");
377
- console.error(" Example: mailx --import ~/OneDrive/home/.mailx/accounts.jsonc");
380
+ console.error(" Example: rmfmail --import ~/OneDrive/home/.rmfmail/accounts.jsonc");
378
381
  process.exit(1);
379
382
  }
380
383
  const { parse: parseJsonc } = await import("jsonc-parser");
@@ -411,7 +414,7 @@ if (importMode) {
411
414
  const wrapper: any = { accounts: merged };
412
415
  if (data?.name) wrapper.name = data.name;
413
416
  await saveAccounts(merged);
414
- console.log(`Saved ${merged.length} account(s). Run 'mailx' to start.`);
417
+ console.log(`Saved ${merged.length} account(s). Run 'rmfmail' to start.`);
415
418
  process.exit(0);
416
419
  }
417
420
 
@@ -429,8 +432,8 @@ if (hasFlag("v") || hasFlag("version")) {
429
432
  };
430
433
  try {
431
434
  const pkg = JSON.parse(fs.readFileSync(`${root}/package.json`, "utf-8"));
432
- console.log(`\x1b[1;97;44m mailx v${pkg.version} \x1b[0m`);
433
- } catch { console.log("mailx (version unknown)"); }
435
+ console.log(`\x1b[1;97;44m rmfmail v${pkg.version} \x1b[0m`);
436
+ } catch { console.log("rmfmail (version unknown)"); }
434
437
  console.log(` node ${process.version}`);
435
438
  console.log(` iflow-direct ${ver("@bobfrankston/iflow-direct")}`);
436
439
  console.log(` miscinfo ${ver("@bobfrankston/miscinfo")}`);
@@ -474,10 +477,10 @@ interface AccountInput {
474
477
  smtp?: { host: string; port?: number };
475
478
  }
476
479
 
477
- /** Check if mailx is configured (has local config or accounts) */
480
+ /** Check if rmfmail is configured (has local config or accounts) */
478
481
  function hasConfig(): boolean {
479
482
  const home = process.env.USERPROFILE || process.env.HOME || "";
480
- const mailxDir = path.join(home, ".mailx");
483
+ const mailxDir = path.join(home, ".rmfmail");
481
484
  for (const f of ["config.jsonc", "accounts.jsonc", "settings.jsonc"]) {
482
485
  if (fs.existsSync(path.join(mailxDir, f))) return true;
483
486
  }
@@ -591,10 +594,10 @@ async function promptForAccount(intro?: string): Promise<AccountInput | null> {
591
594
  * Returns true if an account was added (caller should proceed to launch UI),
592
595
  * false if the user skipped (UI's in-browser setup form will take over). */
593
596
  async function runSetup(providedEmail?: string): Promise<boolean> {
594
- console.log("\nmailx — first-time setup\n");
597
+ console.log("\nrmfmail— first-time setup\n");
595
598
 
596
599
  const home = process.env.USERPROFILE || process.env.HOME || "";
597
- const mailxDir = path.join(home, ".mailx");
600
+ const mailxDir = path.join(home, ".rmfmail");
598
601
  fs.mkdirSync(mailxDir, { recursive: true });
599
602
 
600
603
  // Use --email flag or prompt interactively
@@ -622,12 +625,12 @@ async function runSetup(providedEmail?: string): Promise<boolean> {
622
625
  // For Google-hosted accounts, check Drive for existing settings first
623
626
  let driveFolderId: string | null = null;
624
627
  if (isGoogle) {
625
- console.log("\nChecking Google Drive for existing mailx settings...");
628
+ console.log("\nChecking Google Drive for existing rmfmail settings...");
626
629
  try {
627
630
  const { gDriveFindOrCreateFolder, getCloudProvider } = await import("@bobfrankston/mailx-settings/cloud.js");
628
631
  driveFolderId = await gDriveFindOrCreateFolder();
629
632
  if (driveFolderId) {
630
- console.log(` Drive folder: My Drive/mailx/ (${driveFolderId})`);
633
+ console.log(` Drive folder: My Drive/rmfmail/ (${driveFolderId})`);
631
634
  const gdrive = getCloudProvider("gdrive", driveFolderId);
632
635
  if (gdrive) {
633
636
  // Read accounts.jsonc (canonical) — ignore legacy settings.jsonc
@@ -637,18 +640,18 @@ async function runSetup(providedEmail?: string): Promise<boolean> {
637
640
  const data = parseJsonc(existing);
638
641
  const accts = data?.accounts || (Array.isArray(data) ? data : []);
639
642
  if (accts.length > 0) {
640
- console.log(`\nFound ${accts.length} existing account(s) on Google Drive (My Drive/mailx/accounts.jsonc):`);
643
+ console.log(`\nFound ${accts.length} existing account(s) on Google Drive (My Drive/rmfmail/accounts.jsonc):`);
641
644
  for (const a of accts) console.log(` • ${a.label || a.name || a.email}`);
642
645
  // Save config pointing to Drive — no prompts needed
643
- const config = { sharedDir: { provider: "gdrive", path: "mailx", folderId: driveFolderId } };
646
+ const config = { sharedDir: { provider: "gdrive", path: "rmfmail", folderId: driveFolderId } };
644
647
  fs.writeFileSync(path.join(mailxDir, "config.jsonc"), JSON.stringify(config, null, 2));
645
- console.log("Local config created. Starting mailx...\n");
648
+ console.log("Local config created. Starting rmfmail...\n");
646
649
  return true;
647
650
  }
648
651
  }
649
652
  }
650
653
  // No existing accounts — save Drive config for later
651
- const config = { sharedDir: { provider: "gdrive", path: "mailx", folderId: driveFolderId } };
654
+ const config = { sharedDir: { provider: "gdrive", path: "rmfmail", folderId: driveFolderId } };
652
655
  fs.writeFileSync(path.join(mailxDir, "config.jsonc"), JSON.stringify(config, null, 2));
653
656
  } else {
654
657
  console.log(" Could not access Google Drive (OAuth not granted or token expired).");
@@ -696,13 +699,13 @@ async function runSetup(providedEmail?: string): Promise<boolean> {
696
699
  console.log(` Skipping Drive sync (no folder ID). Local copy at ${localAccountsPath}.`);
697
700
  }
698
701
 
699
- console.log("Setup complete. Starting mailx...\n");
702
+ console.log("Setup complete. Starting rmfmail...\n");
700
703
  return true;
701
704
  }
702
705
 
703
706
  /** Test account connectivity — IMAP connect, SMTP send, sync round-trip */
704
707
  async function runTest(): Promise<void> {
705
- console.log("\nmailx — connection test\n");
708
+ console.log("\nrmfmail— connection test\n");
706
709
 
707
710
  // Start server in-process to access settings
708
711
  console.log("Loading settings...");
@@ -711,7 +714,7 @@ async function runTest(): Promise<void> {
711
714
  const settings = loadSettings();
712
715
 
713
716
  if (settings.accounts.length === 0) {
714
- console.log("No accounts configured. Run: mailx -setup");
717
+ console.log("No accounts configured. Run: rmfmail -setup");
715
718
  process.exit(1);
716
719
  }
717
720
 
@@ -771,12 +774,12 @@ async function runTest(): Promise<void> {
771
774
  console.log(` SMTP: OK`);
772
775
 
773
776
  // Send test message to self
774
- const testSubject = `mailx test — ${new Date().toLocaleString()}`;
777
+ const testSubject = `rmfmail test — ${new Date().toLocaleString()}`;
775
778
  await transport.sendMail({
776
779
  from: `${account.name} <${account.email}>`,
777
780
  to: account.email,
778
781
  subject: testSubject,
779
- text: `This is a test message from mailx -test.\nSent: ${new Date().toISOString()}\nAccount: ${account.id}`,
782
+ text: `This is a test message from rmfmail -test.\nSent: ${new Date().toISOString()}\nAccount: ${account.id}`,
780
783
  });
781
784
  console.log(` SEND: OK — test message sent to ${account.email}`);
782
785
  console.log(` Subject: "${testSubject}"`);
@@ -803,7 +806,7 @@ async function registerClient(settings: any): Promise<void> {
803
806
  if (info.mode === "local" || !info.provider || info.provider === "local") return;
804
807
 
805
808
  // Device ID: stable per machine, stored locally
806
- const deviceIdPath = path.join(os.homedir(), ".mailx", "device-id");
809
+ const deviceIdPath = path.join(os.homedir(), ".rmfmail", "device-id");
807
810
  let deviceId: string;
808
811
  if (fs.existsSync(deviceIdPath)) {
809
812
  deviceId = fs.readFileSync(deviceIdPath, "utf-8").trim();
@@ -859,7 +862,7 @@ async function main(): Promise<void> {
859
862
 
860
863
  // Refuse to run elevated unless explicitly opted in. An elevated mailx
861
864
  // can poison %LOCALAPPDATA%\msger\webview2\ (see msger/notes.md WebView2
862
- // profile playbook) and create admin-owned files under ~/.mailx/ that
865
+ // profile playbook) and create admin-owned files under ~/.rmfmail/ that
863
866
  // later non-admin runs can't write to. `net session` requires admin on
864
867
  // Windows; succeeds → admin, fails → non-admin. Linux/Mac use process
865
868
  // uid (0 = root). --allow-elevated bypasses for scripted admin use.
@@ -883,7 +886,7 @@ async function main(): Promise<void> {
883
886
  const account = await promptForAccount();
884
887
  if (account) {
885
888
  const home = process.env.USERPROFILE || process.env.HOME || "";
886
- const mailxDir = path.join(home, ".mailx");
889
+ const mailxDir = path.join(home, ".rmfmail");
887
890
  const settingsPath = path.join(mailxDir, "settings.jsonc");
888
891
  let settings: any;
889
892
  try { settings = JSON.parse(fs.readFileSync(settingsPath, "utf-8").replace(/\r/g, "").replace(/\/\/.*/g, "")); } catch { settings = { accounts: [] }; }
@@ -891,7 +894,7 @@ async function main(): Promise<void> {
891
894
  settings.accounts.push(account);
892
895
  fs.mkdirSync(mailxDir, { recursive: true });
893
896
  fs.writeFileSync(settingsPath, JSON.stringify(settings, null, 2));
894
- console.log(`Added ${account.email} to settings. Restart mailx to connect.`);
897
+ console.log(`Added ${account.email} to settings. Restart rmfmail to connect.`);
895
898
  }
896
899
  process.exit(0);
897
900
  }
@@ -903,7 +906,7 @@ async function main(): Promise<void> {
903
906
  // takes over in that case.
904
907
  const hasTty = setupMode ? !!process.stdin.isTTY : (process.stdin.isTTY === true);
905
908
  if (setupMode || !hasConfig()) {
906
- if (!setupMode) console.log("No mailx configuration found.");
909
+ if (!setupMode) console.log("No rmfmail configuration found.");
907
910
  // -email or -mail flag skips the interactive prompt
908
911
  const emailFlag = args.findIndex(a => a === "-email" || a === "--email" || a === "-mail" || a === "--mail");
909
912
  const emailArg = args.find(a => a.startsWith("-email=") || a.startsWith("--email=") || a.startsWith("-mail=") || a.startsWith("--mail="))?.split("=")[1]
@@ -914,14 +917,14 @@ async function main(): Promise<void> {
914
917
  console.log("No TTY and no -email flag — skipping CLI setup; in-browser setup form will appear.");
915
918
  // Ensure the data dir exists so the UI can write its config.
916
919
  const home = process.env.USERPROFILE || process.env.HOME || "";
917
- fs.mkdirSync(path.join(home, ".mailx"), { recursive: true });
920
+ fs.mkdirSync(path.join(home, ".rmfmail"), { recursive: true });
918
921
  }
919
922
  }
920
923
 
921
924
  // Redirect console to log file — keep terminal clean
922
925
  if (!verbose) {
923
926
  const home = process.env.USERPROFILE || process.env.HOME || ".";
924
- const logDir = path.join(home, ".mailx", "logs");
927
+ const logDir = path.join(home, ".rmfmail", "logs");
925
928
  fs.mkdirSync(logDir, { recursive: true });
926
929
  // Prune logs older than LOG_RETENTION_DAYS on startup. Keep it simple:
927
930
  // scan the dir, stat, delete. Cheap even with years of history.
@@ -961,7 +964,7 @@ async function main(): Promise<void> {
961
964
  }
962
965
 
963
966
  // IPC service mode — no HTTP server
964
- console.log("Starting mailx service...");
967
+ console.log("Starting rmfmail service...");
965
968
  const { MailxDB } = await import("@bobfrankston/mailx-store");
966
969
  const { ImapManager } = await import("@bobfrankston/mailx-imap");
967
970
  const { MailxService } = await import("@bobfrankston/mailx-service");
@@ -986,14 +989,14 @@ async function main(): Promise<void> {
986
989
  const sendingDir = path.join(getConfigDir(), "sending");
987
990
  fs.mkdirSync(sendingDir, { recursive: true });
988
991
  const readmePath = path.join(sendingDir, "README.md");
989
- const readmeBody = `# \`~/.mailx/sending/\` and \`~/.mailx/outbox/\` — outgoing-mail staging
992
+ const readmeBody = `# \`~/.rmfmail/sending/\` and \`~/.rmfmail/outbox/\` — outgoing-mail staging
990
993
 
991
- Auto-generated by mailx on startup. Manual recovery reference for when mailx is broken or you need to feed an outgoing message into another mail program.
994
+ Auto-generated by rmfmail on startup. Manual recovery reference for when rmfmail is broken or you need to feed an outgoing message into another mail program.
992
995
 
993
996
  ## Layout
994
997
 
995
998
  \`\`\`
996
- ~/.mailx/
999
+ ~/.rmfmail/
997
1000
  ├── outbox/<account>/
998
1001
  │ └── *.ltr ← THE QUEUE. Worker scans every 10s, sends, deletes on success.
999
1002
  └── sending/<account>/
@@ -1002,13 +1005,13 @@ Auto-generated by mailx on startup. Manual recovery reference for when mailx is
1002
1005
  └── sent/ ← Audit trail of successfully sent messages.
1003
1006
  \`\`\`
1004
1007
 
1005
- In-flight files are atomically renamed to \`<file>.sending-<host>-<pid>\` while the worker is processing them — same-machine claim so two mailx instances don't double-send. Stale claims (dead PIDs on this host) are recovered on the next tick.
1008
+ In-flight files are atomically renamed to \`<file>.sending-<host>-<pid>\` while the worker is processing them — same-machine claim so two rmfmail instances don't double-send. Stale claims (dead PIDs on this host) are recovered on the next tick.
1006
1009
 
1007
1010
  ## Manual fallback
1008
1011
 
1009
- - **mailx is dead, need to send a draft** — most recent file in \`sending/<account>/editing/\` is a complete RFC 822 message; copy the body into another mail client and resend.
1012
+ - **rmfmail is dead, need to send a draft** — most recent file in \`sending/<account>/editing/\` is a complete RFC 822 message; copy the body into another mail client and resend.
1010
1013
  - **Feed a raw .eml to mailx** — drop into \`sending/<account>/queued/\`. Picked up within 10s.
1011
- - **mailx says queued but server doesn't have it** — look in \`outbox/<account>/\`. \`.ltr\` still there → worker hasn't sent yet (check \`~/.mailx/logs/\`). \`.sending-<host>-<pid>\` → in flight. Gone → success.
1014
+ - **rmfmail says queued but server doesn't have it** — look in \`outbox/<account>/\`. \`.ltr\` still there → worker hasn't sent yet (check \`~/.rmfmail/logs/\`). \`.sending-<host>-<pid>\` → in flight. Gone → success.
1012
1015
 
1013
1016
  ## Format
1014
1017
 
@@ -1080,15 +1083,15 @@ RFC 5322 with CRLF line endings. Bodies are quoted-printable encoded (readable i
1080
1083
  const __mailxJs = path.join(import.meta.dirname, "mailx.js");
1081
1084
  const __relaunchCommand = `"${process.execPath}" "${__mailxJs}"`;
1082
1085
  const handle = showService({
1083
- title: `mailx v${rootPkgVersion}`,
1086
+ title: `rmfmail v${rootPkgVersion}`,
1084
1087
  url: "index.html",
1085
1088
  contentDir: clientDir,
1086
1089
  initScript: mailxapiScript,
1087
1090
  icon: __iconPathRuntime,
1088
1091
  relaunchIcon: __iconPathPin,
1089
1092
  relaunchCommand: __relaunchCommand,
1090
- relaunchDisplayName: "mailx",
1091
- aumid: "com.frankston.mailx",
1093
+ relaunchDisplayName: "rmfmail",
1094
+ aumid: "com.frankston.rmfmail",
1092
1095
  size: savedGeometry
1093
1096
  ? { width: savedGeometry.width, height: savedGeometry.height }
1094
1097
  : { width: 1400, height: 900 },
@@ -1166,7 +1169,7 @@ RFC 5322 with CRLF line endings. Bodies are quoted-printable encoded (readable i
1166
1169
  try {
1167
1170
  clearInstanceFile();
1168
1171
  const { spawn: spawnChild } = await import("child_process");
1169
- const child = spawnChild("mailx", [], { detached: true, stdio: "ignore", shell: true, windowsHide: true });
1172
+ const child = spawnChild("rmfmail", [], { detached: true, stdio: "ignore", shell: true, windowsHide: true });
1170
1173
  child.unref();
1171
1174
  console.log(" [restart] Spawned fresh daemon; shutting down current");
1172
1175
  // Give the spawn a moment to take hold before we start
@@ -1185,10 +1188,10 @@ RFC 5322 with CRLF line endings. Bodies are quoted-printable encoded (readable i
1185
1188
  try {
1186
1189
  const { execSync, spawn: spawnChild } = await import("child_process");
1187
1190
  console.log(" [update] Installing latest version...");
1188
- execSync("npm install -g @bobfrankston/mailx", { encoding: "utf-8", timeout: 120_000, stdio: "inherit", windowsHide: true });
1191
+ execSync("npm install -g @bobfrankston/rmfmail", { encoding: "utf-8", timeout: 120_000, stdio: "inherit", windowsHide: true });
1189
1192
  console.log(" [update] Install complete — relaunching");
1190
1193
  // Spawn the new version detached so it outlives this process
1191
- const child = spawnChild("mailx", [], { detached: true, stdio: "ignore", shell: true, windowsHide: true });
1194
+ const child = spawnChild("rmfmail", [], { detached: true, stdio: "ignore", shell: true, windowsHide: true });
1192
1195
  child.unref();
1193
1196
  gracefulShutdown("Update applied");
1194
1197
  } catch (e: any) {
@@ -3,7 +3,7 @@
3
3
  <head>
4
4
  <meta charset="UTF-8">
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
- <title>mailx</title>
6
+ <title>rmfmail</title>
7
7
  <link rel="icon" type="image/svg+xml" href="favicon.svg">
8
8
  <link rel="stylesheet" href="styles/variables.css">
9
9
  <link rel="stylesheet" href="styles/components.css">
@@ -96,12 +96,12 @@
96
96
  <label class="tb-menu-item" title="Right-click in compose editor → Proofread"><input type="checkbox" id="opt-ai-proofread"> AI proofread (off by default)</label>
97
97
  <hr class="tb-menu-sep">
98
98
  <button class="tb-menu-item" id="btn-edit-jsonc" title="Edit accounts.jsonc / allowlist.jsonc / contacts.jsonc">Edit config files...</button>
99
- <button class="tb-menu-item" id="btn-about" title="Show version and build info">About mailx...</button>
99
+ <button class="tb-menu-item" id="btn-about" title="Show version and build info">About rmfmail...</button>
100
100
  </div>
101
101
  </div>
102
102
  <button class="tb-btn" id="btn-tb-delete" title="Delete selected (Del)">🗑</button>
103
103
  <button class="tb-btn" id="btn-tb-spam" title="Mark as spam — move to Junk">⚠</button>
104
- <span id="app-version" class="app-version">mailx</span>
104
+ <span id="app-version" class="app-version">rmfmail</span>
105
105
  </div>
106
106
  <div class="toolbar-right">
107
107
  <button class="tb-btn" id="btn-sync" title="Sync all folders (F5)">
@@ -213,13 +213,13 @@
213
213
  <span id="status-diag" class="status-diag" hidden title=""></span>
214
214
  <span id="status-pending"></span>
215
215
  <span id="status-queue"></span>
216
- <span class="app-version" id="status-version">mailx</span>
216
+ <span class="app-version" id="status-version">rmfmail</span>
217
217
  </footer>
218
218
 
219
219
  <div id="startup-overlay" class="startup-overlay">
220
220
  <div class="startup-content">
221
221
  <div class="startup-spinner"></div>
222
- <div id="startup-status">Initializing mailx...</div>
222
+ <div id="startup-status">Initializing rmfmail...</div>
223
223
  </div>
224
224
  </div>
225
225
  </body>