@bobfrankston/mailx 1.0.1

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 (519) hide show
  1. package/.tswalk.json +3366 -0
  2. package/README.md +160 -0
  3. package/bin/mailx.js +58 -0
  4. package/client/app.js +431 -0
  5. package/client/components/folder-tree.js +286 -0
  6. package/client/components/message-list.js +230 -0
  7. package/client/components/message-viewer.js +161 -0
  8. package/client/compose/compose.css +197 -0
  9. package/client/compose/compose.html +45 -0
  10. package/client/compose/compose.js +335 -0
  11. package/client/favicon.svg +11 -0
  12. package/client/index.html +100 -0
  13. package/client/lib/api-client.js +67 -0
  14. package/client/package.json +9 -0
  15. package/client/styles/components.css +361 -0
  16. package/client/styles/layout.css +69 -0
  17. package/launch.ps1 +20 -0
  18. package/launcher/Cargo.lock +3167 -0
  19. package/launcher/Cargo.toml +13 -0
  20. package/launcher/build.cmd +4 -0
  21. package/launcher/build.rs +8 -0
  22. package/launcher/mailx.ico +0 -0
  23. package/launcher/release.cmd +4 -0
  24. package/launcher/src/main.rs +371 -0
  25. package/mailx.cmd +2 -0
  26. package/mailx.db +0 -0
  27. package/mailx.db-shm +0 -0
  28. package/mailx.db-wal +0 -0
  29. package/mailx.json +9 -0
  30. package/package.json +51 -0
  31. package/packages/mailx-api/index.d.ts +9 -0
  32. package/packages/mailx-api/index.js +375 -0
  33. package/packages/mailx-api/node_modules/nodemailer/.ncurc.js +9 -0
  34. package/packages/mailx-api/node_modules/nodemailer/.prettierignore +8 -0
  35. package/packages/mailx-api/node_modules/nodemailer/.prettierrc +12 -0
  36. package/packages/mailx-api/node_modules/nodemailer/.prettierrc.js +10 -0
  37. package/packages/mailx-api/node_modules/nodemailer/.release-please-config.json +9 -0
  38. package/packages/mailx-api/node_modules/nodemailer/LICENSE +16 -0
  39. package/packages/mailx-api/node_modules/nodemailer/README.md +86 -0
  40. package/packages/mailx-api/node_modules/nodemailer/SECURITY.txt +22 -0
  41. package/packages/mailx-api/node_modules/nodemailer/eslint.config.js +88 -0
  42. package/packages/mailx-api/node_modules/nodemailer/lib/addressparser/index.js +383 -0
  43. package/packages/mailx-api/node_modules/nodemailer/lib/base64/index.js +139 -0
  44. package/packages/mailx-api/node_modules/nodemailer/lib/dkim/index.js +253 -0
  45. package/packages/mailx-api/node_modules/nodemailer/lib/dkim/message-parser.js +155 -0
  46. package/packages/mailx-api/node_modules/nodemailer/lib/dkim/relaxed-body.js +154 -0
  47. package/packages/mailx-api/node_modules/nodemailer/lib/dkim/sign.js +117 -0
  48. package/packages/mailx-api/node_modules/nodemailer/lib/fetch/cookies.js +281 -0
  49. package/packages/mailx-api/node_modules/nodemailer/lib/fetch/index.js +280 -0
  50. package/packages/mailx-api/node_modules/nodemailer/lib/json-transport/index.js +82 -0
  51. package/packages/mailx-api/node_modules/nodemailer/lib/mail-composer/index.js +629 -0
  52. package/packages/mailx-api/node_modules/nodemailer/lib/mailer/index.js +441 -0
  53. package/packages/mailx-api/node_modules/nodemailer/lib/mailer/mail-message.js +316 -0
  54. package/packages/mailx-api/node_modules/nodemailer/lib/mime-funcs/index.js +625 -0
  55. package/packages/mailx-api/node_modules/nodemailer/lib/mime-funcs/mime-types.js +2113 -0
  56. package/packages/mailx-api/node_modules/nodemailer/lib/mime-node/index.js +1316 -0
  57. package/packages/mailx-api/node_modules/nodemailer/lib/mime-node/last-newline.js +33 -0
  58. package/packages/mailx-api/node_modules/nodemailer/lib/mime-node/le-unix.js +43 -0
  59. package/packages/mailx-api/node_modules/nodemailer/lib/mime-node/le-windows.js +52 -0
  60. package/packages/mailx-api/node_modules/nodemailer/lib/nodemailer.js +157 -0
  61. package/packages/mailx-api/node_modules/nodemailer/lib/punycode/index.js +460 -0
  62. package/packages/mailx-api/node_modules/nodemailer/lib/qp/index.js +227 -0
  63. package/packages/mailx-api/node_modules/nodemailer/lib/sendmail-transport/index.js +210 -0
  64. package/packages/mailx-api/node_modules/nodemailer/lib/ses-transport/index.js +234 -0
  65. package/packages/mailx-api/node_modules/nodemailer/lib/shared/index.js +754 -0
  66. package/packages/mailx-api/node_modules/nodemailer/lib/smtp-connection/data-stream.js +108 -0
  67. package/packages/mailx-api/node_modules/nodemailer/lib/smtp-connection/http-proxy-client.js +143 -0
  68. package/packages/mailx-api/node_modules/nodemailer/lib/smtp-connection/index.js +1870 -0
  69. package/packages/mailx-api/node_modules/nodemailer/lib/smtp-pool/index.js +652 -0
  70. package/packages/mailx-api/node_modules/nodemailer/lib/smtp-pool/pool-resource.js +259 -0
  71. package/packages/mailx-api/node_modules/nodemailer/lib/smtp-transport/index.js +421 -0
  72. package/packages/mailx-api/node_modules/nodemailer/lib/stream-transport/index.js +135 -0
  73. package/packages/mailx-api/node_modules/nodemailer/lib/well-known/index.js +47 -0
  74. package/packages/mailx-api/node_modules/nodemailer/lib/well-known/services.json +611 -0
  75. package/packages/mailx-api/node_modules/nodemailer/lib/xoauth2/index.js +427 -0
  76. package/packages/mailx-api/node_modules/nodemailer/package.json +47 -0
  77. package/packages/mailx-api/package.json +24 -0
  78. package/packages/mailx-api/tsconfig.tsbuildinfo +1 -0
  79. package/packages/mailx-compose/index.d.ts +21 -0
  80. package/packages/mailx-compose/index.js +61 -0
  81. package/packages/mailx-compose/package.json +14 -0
  82. package/packages/mailx-imap/index.d.ts +105 -0
  83. package/packages/mailx-imap/index.js +1026 -0
  84. package/packages/mailx-imap/node_modules/nodemailer/.ncurc.js +9 -0
  85. package/packages/mailx-imap/node_modules/nodemailer/.prettierignore +8 -0
  86. package/packages/mailx-imap/node_modules/nodemailer/.prettierrc +12 -0
  87. package/packages/mailx-imap/node_modules/nodemailer/.prettierrc.js +10 -0
  88. package/packages/mailx-imap/node_modules/nodemailer/.release-please-config.json +9 -0
  89. package/packages/mailx-imap/node_modules/nodemailer/LICENSE +16 -0
  90. package/packages/mailx-imap/node_modules/nodemailer/README.md +86 -0
  91. package/packages/mailx-imap/node_modules/nodemailer/SECURITY.txt +22 -0
  92. package/packages/mailx-imap/node_modules/nodemailer/eslint.config.js +88 -0
  93. package/packages/mailx-imap/node_modules/nodemailer/lib/addressparser/index.js +383 -0
  94. package/packages/mailx-imap/node_modules/nodemailer/lib/base64/index.js +139 -0
  95. package/packages/mailx-imap/node_modules/nodemailer/lib/dkim/index.js +253 -0
  96. package/packages/mailx-imap/node_modules/nodemailer/lib/dkim/message-parser.js +155 -0
  97. package/packages/mailx-imap/node_modules/nodemailer/lib/dkim/relaxed-body.js +154 -0
  98. package/packages/mailx-imap/node_modules/nodemailer/lib/dkim/sign.js +117 -0
  99. package/packages/mailx-imap/node_modules/nodemailer/lib/fetch/cookies.js +281 -0
  100. package/packages/mailx-imap/node_modules/nodemailer/lib/fetch/index.js +280 -0
  101. package/packages/mailx-imap/node_modules/nodemailer/lib/json-transport/index.js +82 -0
  102. package/packages/mailx-imap/node_modules/nodemailer/lib/mail-composer/index.js +629 -0
  103. package/packages/mailx-imap/node_modules/nodemailer/lib/mailer/index.js +441 -0
  104. package/packages/mailx-imap/node_modules/nodemailer/lib/mailer/mail-message.js +316 -0
  105. package/packages/mailx-imap/node_modules/nodemailer/lib/mime-funcs/index.js +625 -0
  106. package/packages/mailx-imap/node_modules/nodemailer/lib/mime-funcs/mime-types.js +2113 -0
  107. package/packages/mailx-imap/node_modules/nodemailer/lib/mime-node/index.js +1316 -0
  108. package/packages/mailx-imap/node_modules/nodemailer/lib/mime-node/last-newline.js +33 -0
  109. package/packages/mailx-imap/node_modules/nodemailer/lib/mime-node/le-unix.js +43 -0
  110. package/packages/mailx-imap/node_modules/nodemailer/lib/mime-node/le-windows.js +52 -0
  111. package/packages/mailx-imap/node_modules/nodemailer/lib/nodemailer.js +157 -0
  112. package/packages/mailx-imap/node_modules/nodemailer/lib/punycode/index.js +460 -0
  113. package/packages/mailx-imap/node_modules/nodemailer/lib/qp/index.js +227 -0
  114. package/packages/mailx-imap/node_modules/nodemailer/lib/sendmail-transport/index.js +210 -0
  115. package/packages/mailx-imap/node_modules/nodemailer/lib/ses-transport/index.js +234 -0
  116. package/packages/mailx-imap/node_modules/nodemailer/lib/shared/index.js +754 -0
  117. package/packages/mailx-imap/node_modules/nodemailer/lib/smtp-connection/data-stream.js +108 -0
  118. package/packages/mailx-imap/node_modules/nodemailer/lib/smtp-connection/http-proxy-client.js +143 -0
  119. package/packages/mailx-imap/node_modules/nodemailer/lib/smtp-connection/index.js +1870 -0
  120. package/packages/mailx-imap/node_modules/nodemailer/lib/smtp-pool/index.js +652 -0
  121. package/packages/mailx-imap/node_modules/nodemailer/lib/smtp-pool/pool-resource.js +259 -0
  122. package/packages/mailx-imap/node_modules/nodemailer/lib/smtp-transport/index.js +421 -0
  123. package/packages/mailx-imap/node_modules/nodemailer/lib/stream-transport/index.js +135 -0
  124. package/packages/mailx-imap/node_modules/nodemailer/lib/well-known/index.js +47 -0
  125. package/packages/mailx-imap/node_modules/nodemailer/lib/well-known/services.json +611 -0
  126. package/packages/mailx-imap/node_modules/nodemailer/lib/xoauth2/index.js +427 -0
  127. package/packages/mailx-imap/node_modules/nodemailer/package.json +47 -0
  128. package/packages/mailx-imap/package.json +19 -0
  129. package/packages/mailx-imap/tsconfig.tsbuildinfo +1 -0
  130. package/packages/mailx-send/README.md +217 -0
  131. package/packages/mailx-send/cli-queue.d.ts +11 -0
  132. package/packages/mailx-send/cli-queue.js +59 -0
  133. package/packages/mailx-send/cli-send.d.ts +17 -0
  134. package/packages/mailx-send/cli-send.js +75 -0
  135. package/packages/mailx-send/cli.d.ts +22 -0
  136. package/packages/mailx-send/cli.js +115 -0
  137. package/packages/mailx-send/index.d.ts +77 -0
  138. package/packages/mailx-send/index.js +264 -0
  139. package/packages/mailx-send/mailsend/README.md +133 -0
  140. package/packages/mailx-send/mailsend/cli.d.ts +12 -0
  141. package/packages/mailx-send/mailsend/cli.js +70 -0
  142. package/packages/mailx-send/mailsend/index.d.ts +77 -0
  143. package/packages/mailx-send/mailsend/index.js +264 -0
  144. package/packages/mailx-send/mailsend/node_modules/.package-lock.json +49 -0
  145. package/packages/mailx-send/mailsend/node_modules/@types/node/LICENSE +21 -0
  146. package/packages/mailx-send/mailsend/node_modules/@types/node/README.md +15 -0
  147. package/packages/mailx-send/mailsend/node_modules/@types/node/assert/strict.d.ts +111 -0
  148. package/packages/mailx-send/mailsend/node_modules/@types/node/assert.d.ts +1078 -0
  149. package/packages/mailx-send/mailsend/node_modules/@types/node/async_hooks.d.ts +603 -0
  150. package/packages/mailx-send/mailsend/node_modules/@types/node/buffer.buffer.d.ts +472 -0
  151. package/packages/mailx-send/mailsend/node_modules/@types/node/buffer.d.ts +1934 -0
  152. package/packages/mailx-send/mailsend/node_modules/@types/node/child_process.d.ts +1476 -0
  153. package/packages/mailx-send/mailsend/node_modules/@types/node/cluster.d.ts +578 -0
  154. package/packages/mailx-send/mailsend/node_modules/@types/node/compatibility/disposable.d.ts +14 -0
  155. package/packages/mailx-send/mailsend/node_modules/@types/node/compatibility/index.d.ts +9 -0
  156. package/packages/mailx-send/mailsend/node_modules/@types/node/compatibility/indexable.d.ts +20 -0
  157. package/packages/mailx-send/mailsend/node_modules/@types/node/compatibility/iterators.d.ts +20 -0
  158. package/packages/mailx-send/mailsend/node_modules/@types/node/console.d.ts +452 -0
  159. package/packages/mailx-send/mailsend/node_modules/@types/node/constants.d.ts +21 -0
  160. package/packages/mailx-send/mailsend/node_modules/@types/node/crypto.d.ts +4545 -0
  161. package/packages/mailx-send/mailsend/node_modules/@types/node/dgram.d.ts +600 -0
  162. package/packages/mailx-send/mailsend/node_modules/@types/node/diagnostics_channel.d.ts +578 -0
  163. package/packages/mailx-send/mailsend/node_modules/@types/node/dns/promises.d.ts +503 -0
  164. package/packages/mailx-send/mailsend/node_modules/@types/node/dns.d.ts +923 -0
  165. package/packages/mailx-send/mailsend/node_modules/@types/node/domain.d.ts +170 -0
  166. package/packages/mailx-send/mailsend/node_modules/@types/node/events.d.ts +976 -0
  167. package/packages/mailx-send/mailsend/node_modules/@types/node/fs/promises.d.ts +1295 -0
  168. package/packages/mailx-send/mailsend/node_modules/@types/node/fs.d.ts +4461 -0
  169. package/packages/mailx-send/mailsend/node_modules/@types/node/globals.d.ts +172 -0
  170. package/packages/mailx-send/mailsend/node_modules/@types/node/globals.typedarray.d.ts +38 -0
  171. package/packages/mailx-send/mailsend/node_modules/@types/node/http.d.ts +2089 -0
  172. package/packages/mailx-send/mailsend/node_modules/@types/node/http2.d.ts +2644 -0
  173. package/packages/mailx-send/mailsend/node_modules/@types/node/https.d.ts +579 -0
  174. package/packages/mailx-send/mailsend/node_modules/@types/node/index.d.ts +97 -0
  175. package/packages/mailx-send/mailsend/node_modules/@types/node/inspector.d.ts +253 -0
  176. package/packages/mailx-send/mailsend/node_modules/@types/node/inspector.generated.d.ts +4052 -0
  177. package/packages/mailx-send/mailsend/node_modules/@types/node/module.d.ts +891 -0
  178. package/packages/mailx-send/mailsend/node_modules/@types/node/net.d.ts +1057 -0
  179. package/packages/mailx-send/mailsend/node_modules/@types/node/os.d.ts +506 -0
  180. package/packages/mailx-send/mailsend/node_modules/@types/node/package.json +145 -0
  181. package/packages/mailx-send/mailsend/node_modules/@types/node/path.d.ts +200 -0
  182. package/packages/mailx-send/mailsend/node_modules/@types/node/perf_hooks.d.ts +968 -0
  183. package/packages/mailx-send/mailsend/node_modules/@types/node/process.d.ts +2084 -0
  184. package/packages/mailx-send/mailsend/node_modules/@types/node/punycode.d.ts +117 -0
  185. package/packages/mailx-send/mailsend/node_modules/@types/node/querystring.d.ts +152 -0
  186. package/packages/mailx-send/mailsend/node_modules/@types/node/readline/promises.d.ts +161 -0
  187. package/packages/mailx-send/mailsend/node_modules/@types/node/readline.d.ts +594 -0
  188. package/packages/mailx-send/mailsend/node_modules/@types/node/repl.d.ts +428 -0
  189. package/packages/mailx-send/mailsend/node_modules/@types/node/sea.d.ts +153 -0
  190. package/packages/mailx-send/mailsend/node_modules/@types/node/sqlite.d.ts +721 -0
  191. package/packages/mailx-send/mailsend/node_modules/@types/node/stream/consumers.d.ts +38 -0
  192. package/packages/mailx-send/mailsend/node_modules/@types/node/stream/promises.d.ts +90 -0
  193. package/packages/mailx-send/mailsend/node_modules/@types/node/stream/web.d.ts +622 -0
  194. package/packages/mailx-send/mailsend/node_modules/@types/node/stream.d.ts +1664 -0
  195. package/packages/mailx-send/mailsend/node_modules/@types/node/string_decoder.d.ts +67 -0
  196. package/packages/mailx-send/mailsend/node_modules/@types/node/test.d.ts +2163 -0
  197. package/packages/mailx-send/mailsend/node_modules/@types/node/timers/promises.d.ts +108 -0
  198. package/packages/mailx-send/mailsend/node_modules/@types/node/timers.d.ts +287 -0
  199. package/packages/mailx-send/mailsend/node_modules/@types/node/tls.d.ts +1319 -0
  200. package/packages/mailx-send/mailsend/node_modules/@types/node/trace_events.d.ts +197 -0
  201. package/packages/mailx-send/mailsend/node_modules/@types/node/ts5.6/buffer.buffer.d.ts +468 -0
  202. package/packages/mailx-send/mailsend/node_modules/@types/node/ts5.6/globals.typedarray.d.ts +34 -0
  203. package/packages/mailx-send/mailsend/node_modules/@types/node/ts5.6/index.d.ts +97 -0
  204. package/packages/mailx-send/mailsend/node_modules/@types/node/tty.d.ts +208 -0
  205. package/packages/mailx-send/mailsend/node_modules/@types/node/url.d.ts +984 -0
  206. package/packages/mailx-send/mailsend/node_modules/@types/node/util.d.ts +2606 -0
  207. package/packages/mailx-send/mailsend/node_modules/@types/node/v8.d.ts +920 -0
  208. package/packages/mailx-send/mailsend/node_modules/@types/node/vm.d.ts +1000 -0
  209. package/packages/mailx-send/mailsend/node_modules/@types/node/wasi.d.ts +181 -0
  210. package/packages/mailx-send/mailsend/node_modules/@types/node/web-globals/abortcontroller.d.ts +34 -0
  211. package/packages/mailx-send/mailsend/node_modules/@types/node/web-globals/domexception.d.ts +68 -0
  212. package/packages/mailx-send/mailsend/node_modules/@types/node/web-globals/events.d.ts +97 -0
  213. package/packages/mailx-send/mailsend/node_modules/@types/node/web-globals/fetch.d.ts +55 -0
  214. package/packages/mailx-send/mailsend/node_modules/@types/node/web-globals/navigator.d.ts +22 -0
  215. package/packages/mailx-send/mailsend/node_modules/@types/node/web-globals/storage.d.ts +24 -0
  216. package/packages/mailx-send/mailsend/node_modules/@types/node/worker_threads.d.ts +784 -0
  217. package/packages/mailx-send/mailsend/node_modules/@types/node/zlib.d.ts +747 -0
  218. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/LICENSE +21 -0
  219. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/README.md +15 -0
  220. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/index.d.ts +82 -0
  221. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/addressparser/index.d.ts +31 -0
  222. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/base64/index.d.ts +22 -0
  223. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/dkim/index.d.ts +45 -0
  224. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/dkim/message-parser.d.ts +75 -0
  225. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/dkim/relaxed-body.d.ts +75 -0
  226. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/dkim/sign.d.ts +21 -0
  227. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/fetch/cookies.d.ts +54 -0
  228. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/fetch/index.d.ts +38 -0
  229. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/json-transport/index.d.ts +53 -0
  230. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/mail-composer/index.d.ts +25 -0
  231. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/mailer/index.d.ts +283 -0
  232. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/mailer/mail-message.d.ts +32 -0
  233. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/mime-funcs/index.d.ts +87 -0
  234. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/mime-funcs/mime-types.d.ts +2 -0
  235. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/mime-node/index.d.ts +224 -0
  236. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/mime-node/last-newline.d.ts +9 -0
  237. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/qp/index.d.ts +23 -0
  238. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/sendmail-transport/index.d.ts +53 -0
  239. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/sendmail-transport/le-unix.d.ts +7 -0
  240. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/sendmail-transport/le-windows.d.ts +7 -0
  241. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/ses-transport/index.d.ts +146 -0
  242. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/shared/index.d.ts +58 -0
  243. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/smtp-connection/data-stream.d.ts +11 -0
  244. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/smtp-connection/http-proxy-client.d.ts +16 -0
  245. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/smtp-connection/index.d.ts +270 -0
  246. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/smtp-pool/index.d.ts +93 -0
  247. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/smtp-pool/pool-resource.d.ts +66 -0
  248. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/smtp-transport/index.d.ts +115 -0
  249. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/stream-transport/index.d.ts +59 -0
  250. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/well-known/index.d.ts +6 -0
  251. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/xoauth2/index.d.ts +114 -0
  252. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/package.json +38 -0
  253. package/packages/mailx-send/mailsend/node_modules/nodemailer/.ncurc.js +9 -0
  254. package/packages/mailx-send/mailsend/node_modules/nodemailer/.prettierignore +8 -0
  255. package/packages/mailx-send/mailsend/node_modules/nodemailer/.prettierrc +12 -0
  256. package/packages/mailx-send/mailsend/node_modules/nodemailer/.prettierrc.js +10 -0
  257. package/packages/mailx-send/mailsend/node_modules/nodemailer/.release-please-config.json +9 -0
  258. package/packages/mailx-send/mailsend/node_modules/nodemailer/LICENSE +16 -0
  259. package/packages/mailx-send/mailsend/node_modules/nodemailer/README.md +86 -0
  260. package/packages/mailx-send/mailsend/node_modules/nodemailer/SECURITY.txt +22 -0
  261. package/packages/mailx-send/mailsend/node_modules/nodemailer/eslint.config.js +88 -0
  262. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/addressparser/index.js +383 -0
  263. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/base64/index.js +139 -0
  264. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/dkim/index.js +253 -0
  265. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/dkim/message-parser.js +155 -0
  266. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/dkim/relaxed-body.js +154 -0
  267. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/dkim/sign.js +117 -0
  268. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/fetch/cookies.js +281 -0
  269. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/fetch/index.js +280 -0
  270. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/json-transport/index.js +82 -0
  271. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/mail-composer/index.js +629 -0
  272. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/mailer/index.js +441 -0
  273. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/mailer/mail-message.js +316 -0
  274. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/mime-funcs/index.js +625 -0
  275. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/mime-funcs/mime-types.js +2113 -0
  276. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/mime-node/index.js +1316 -0
  277. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/mime-node/last-newline.js +33 -0
  278. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/mime-node/le-unix.js +43 -0
  279. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/mime-node/le-windows.js +52 -0
  280. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/nodemailer.js +157 -0
  281. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/punycode/index.js +460 -0
  282. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/qp/index.js +227 -0
  283. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/sendmail-transport/index.js +210 -0
  284. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/ses-transport/index.js +234 -0
  285. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/shared/index.js +754 -0
  286. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/smtp-connection/data-stream.js +108 -0
  287. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/smtp-connection/http-proxy-client.js +143 -0
  288. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/smtp-connection/index.js +1870 -0
  289. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/smtp-pool/index.js +652 -0
  290. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/smtp-pool/pool-resource.js +259 -0
  291. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/smtp-transport/index.js +421 -0
  292. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/stream-transport/index.js +135 -0
  293. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/well-known/index.js +47 -0
  294. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/well-known/services.json +611 -0
  295. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/xoauth2/index.js +427 -0
  296. package/packages/mailx-send/mailsend/node_modules/nodemailer/package.json +47 -0
  297. package/packages/mailx-send/mailsend/node_modules/undici-types/LICENSE +21 -0
  298. package/packages/mailx-send/mailsend/node_modules/undici-types/README.md +6 -0
  299. package/packages/mailx-send/mailsend/node_modules/undici-types/agent.d.ts +31 -0
  300. package/packages/mailx-send/mailsend/node_modules/undici-types/api.d.ts +43 -0
  301. package/packages/mailx-send/mailsend/node_modules/undici-types/balanced-pool.d.ts +29 -0
  302. package/packages/mailx-send/mailsend/node_modules/undici-types/cache.d.ts +36 -0
  303. package/packages/mailx-send/mailsend/node_modules/undici-types/client.d.ts +108 -0
  304. package/packages/mailx-send/mailsend/node_modules/undici-types/connector.d.ts +34 -0
  305. package/packages/mailx-send/mailsend/node_modules/undici-types/content-type.d.ts +21 -0
  306. package/packages/mailx-send/mailsend/node_modules/undici-types/cookies.d.ts +28 -0
  307. package/packages/mailx-send/mailsend/node_modules/undici-types/diagnostics-channel.d.ts +66 -0
  308. package/packages/mailx-send/mailsend/node_modules/undici-types/dispatcher.d.ts +256 -0
  309. package/packages/mailx-send/mailsend/node_modules/undici-types/env-http-proxy-agent.d.ts +21 -0
  310. package/packages/mailx-send/mailsend/node_modules/undici-types/errors.d.ts +149 -0
  311. package/packages/mailx-send/mailsend/node_modules/undici-types/eventsource.d.ts +61 -0
  312. package/packages/mailx-send/mailsend/node_modules/undici-types/fetch.d.ts +209 -0
  313. package/packages/mailx-send/mailsend/node_modules/undici-types/file.d.ts +39 -0
  314. package/packages/mailx-send/mailsend/node_modules/undici-types/filereader.d.ts +54 -0
  315. package/packages/mailx-send/mailsend/node_modules/undici-types/formdata.d.ts +108 -0
  316. package/packages/mailx-send/mailsend/node_modules/undici-types/global-dispatcher.d.ts +9 -0
  317. package/packages/mailx-send/mailsend/node_modules/undici-types/global-origin.d.ts +7 -0
  318. package/packages/mailx-send/mailsend/node_modules/undici-types/handlers.d.ts +15 -0
  319. package/packages/mailx-send/mailsend/node_modules/undici-types/header.d.ts +4 -0
  320. package/packages/mailx-send/mailsend/node_modules/undici-types/index.d.ts +71 -0
  321. package/packages/mailx-send/mailsend/node_modules/undici-types/interceptors.d.ts +17 -0
  322. package/packages/mailx-send/mailsend/node_modules/undici-types/mock-agent.d.ts +50 -0
  323. package/packages/mailx-send/mailsend/node_modules/undici-types/mock-client.d.ts +25 -0
  324. package/packages/mailx-send/mailsend/node_modules/undici-types/mock-errors.d.ts +12 -0
  325. package/packages/mailx-send/mailsend/node_modules/undici-types/mock-interceptor.d.ts +93 -0
  326. package/packages/mailx-send/mailsend/node_modules/undici-types/mock-pool.d.ts +25 -0
  327. package/packages/mailx-send/mailsend/node_modules/undici-types/package.json +55 -0
  328. package/packages/mailx-send/mailsend/node_modules/undici-types/patch.d.ts +33 -0
  329. package/packages/mailx-send/mailsend/node_modules/undici-types/pool-stats.d.ts +19 -0
  330. package/packages/mailx-send/mailsend/node_modules/undici-types/pool.d.ts +39 -0
  331. package/packages/mailx-send/mailsend/node_modules/undici-types/proxy-agent.d.ts +28 -0
  332. package/packages/mailx-send/mailsend/node_modules/undici-types/readable.d.ts +65 -0
  333. package/packages/mailx-send/mailsend/node_modules/undici-types/retry-agent.d.ts +8 -0
  334. package/packages/mailx-send/mailsend/node_modules/undici-types/retry-handler.d.ts +116 -0
  335. package/packages/mailx-send/mailsend/node_modules/undici-types/util.d.ts +18 -0
  336. package/packages/mailx-send/mailsend/node_modules/undici-types/webidl.d.ts +228 -0
  337. package/packages/mailx-send/mailsend/node_modules/undici-types/websocket.d.ts +150 -0
  338. package/packages/mailx-send/mailsend/package.json +26 -0
  339. package/packages/mailx-send/node_modules/.package-lock.json +49 -0
  340. package/packages/mailx-send/node_modules/@types/node/LICENSE +21 -0
  341. package/packages/mailx-send/node_modules/@types/node/README.md +15 -0
  342. package/packages/mailx-send/node_modules/@types/node/assert/strict.d.ts +111 -0
  343. package/packages/mailx-send/node_modules/@types/node/assert.d.ts +1078 -0
  344. package/packages/mailx-send/node_modules/@types/node/async_hooks.d.ts +603 -0
  345. package/packages/mailx-send/node_modules/@types/node/buffer.buffer.d.ts +472 -0
  346. package/packages/mailx-send/node_modules/@types/node/buffer.d.ts +1934 -0
  347. package/packages/mailx-send/node_modules/@types/node/child_process.d.ts +1476 -0
  348. package/packages/mailx-send/node_modules/@types/node/cluster.d.ts +578 -0
  349. package/packages/mailx-send/node_modules/@types/node/compatibility/disposable.d.ts +14 -0
  350. package/packages/mailx-send/node_modules/@types/node/compatibility/index.d.ts +9 -0
  351. package/packages/mailx-send/node_modules/@types/node/compatibility/indexable.d.ts +20 -0
  352. package/packages/mailx-send/node_modules/@types/node/compatibility/iterators.d.ts +20 -0
  353. package/packages/mailx-send/node_modules/@types/node/console.d.ts +452 -0
  354. package/packages/mailx-send/node_modules/@types/node/constants.d.ts +21 -0
  355. package/packages/mailx-send/node_modules/@types/node/crypto.d.ts +4545 -0
  356. package/packages/mailx-send/node_modules/@types/node/dgram.d.ts +600 -0
  357. package/packages/mailx-send/node_modules/@types/node/diagnostics_channel.d.ts +578 -0
  358. package/packages/mailx-send/node_modules/@types/node/dns/promises.d.ts +503 -0
  359. package/packages/mailx-send/node_modules/@types/node/dns.d.ts +923 -0
  360. package/packages/mailx-send/node_modules/@types/node/domain.d.ts +170 -0
  361. package/packages/mailx-send/node_modules/@types/node/events.d.ts +976 -0
  362. package/packages/mailx-send/node_modules/@types/node/fs/promises.d.ts +1295 -0
  363. package/packages/mailx-send/node_modules/@types/node/fs.d.ts +4461 -0
  364. package/packages/mailx-send/node_modules/@types/node/globals.d.ts +172 -0
  365. package/packages/mailx-send/node_modules/@types/node/globals.typedarray.d.ts +38 -0
  366. package/packages/mailx-send/node_modules/@types/node/http.d.ts +2089 -0
  367. package/packages/mailx-send/node_modules/@types/node/http2.d.ts +2644 -0
  368. package/packages/mailx-send/node_modules/@types/node/https.d.ts +579 -0
  369. package/packages/mailx-send/node_modules/@types/node/index.d.ts +97 -0
  370. package/packages/mailx-send/node_modules/@types/node/inspector.d.ts +253 -0
  371. package/packages/mailx-send/node_modules/@types/node/inspector.generated.d.ts +4052 -0
  372. package/packages/mailx-send/node_modules/@types/node/module.d.ts +891 -0
  373. package/packages/mailx-send/node_modules/@types/node/net.d.ts +1057 -0
  374. package/packages/mailx-send/node_modules/@types/node/os.d.ts +506 -0
  375. package/packages/mailx-send/node_modules/@types/node/package.json +145 -0
  376. package/packages/mailx-send/node_modules/@types/node/path.d.ts +200 -0
  377. package/packages/mailx-send/node_modules/@types/node/perf_hooks.d.ts +968 -0
  378. package/packages/mailx-send/node_modules/@types/node/process.d.ts +2084 -0
  379. package/packages/mailx-send/node_modules/@types/node/punycode.d.ts +117 -0
  380. package/packages/mailx-send/node_modules/@types/node/querystring.d.ts +152 -0
  381. package/packages/mailx-send/node_modules/@types/node/readline/promises.d.ts +161 -0
  382. package/packages/mailx-send/node_modules/@types/node/readline.d.ts +594 -0
  383. package/packages/mailx-send/node_modules/@types/node/repl.d.ts +428 -0
  384. package/packages/mailx-send/node_modules/@types/node/sea.d.ts +153 -0
  385. package/packages/mailx-send/node_modules/@types/node/sqlite.d.ts +721 -0
  386. package/packages/mailx-send/node_modules/@types/node/stream/consumers.d.ts +38 -0
  387. package/packages/mailx-send/node_modules/@types/node/stream/promises.d.ts +90 -0
  388. package/packages/mailx-send/node_modules/@types/node/stream/web.d.ts +622 -0
  389. package/packages/mailx-send/node_modules/@types/node/stream.d.ts +1664 -0
  390. package/packages/mailx-send/node_modules/@types/node/string_decoder.d.ts +67 -0
  391. package/packages/mailx-send/node_modules/@types/node/test.d.ts +2163 -0
  392. package/packages/mailx-send/node_modules/@types/node/timers/promises.d.ts +108 -0
  393. package/packages/mailx-send/node_modules/@types/node/timers.d.ts +287 -0
  394. package/packages/mailx-send/node_modules/@types/node/tls.d.ts +1319 -0
  395. package/packages/mailx-send/node_modules/@types/node/trace_events.d.ts +197 -0
  396. package/packages/mailx-send/node_modules/@types/node/ts5.6/buffer.buffer.d.ts +468 -0
  397. package/packages/mailx-send/node_modules/@types/node/ts5.6/globals.typedarray.d.ts +34 -0
  398. package/packages/mailx-send/node_modules/@types/node/ts5.6/index.d.ts +97 -0
  399. package/packages/mailx-send/node_modules/@types/node/tty.d.ts +208 -0
  400. package/packages/mailx-send/node_modules/@types/node/url.d.ts +984 -0
  401. package/packages/mailx-send/node_modules/@types/node/util.d.ts +2606 -0
  402. package/packages/mailx-send/node_modules/@types/node/v8.d.ts +920 -0
  403. package/packages/mailx-send/node_modules/@types/node/vm.d.ts +1000 -0
  404. package/packages/mailx-send/node_modules/@types/node/wasi.d.ts +181 -0
  405. package/packages/mailx-send/node_modules/@types/node/web-globals/abortcontroller.d.ts +34 -0
  406. package/packages/mailx-send/node_modules/@types/node/web-globals/domexception.d.ts +68 -0
  407. package/packages/mailx-send/node_modules/@types/node/web-globals/events.d.ts +97 -0
  408. package/packages/mailx-send/node_modules/@types/node/web-globals/fetch.d.ts +55 -0
  409. package/packages/mailx-send/node_modules/@types/node/web-globals/navigator.d.ts +22 -0
  410. package/packages/mailx-send/node_modules/@types/node/web-globals/storage.d.ts +24 -0
  411. package/packages/mailx-send/node_modules/@types/node/worker_threads.d.ts +784 -0
  412. package/packages/mailx-send/node_modules/@types/node/zlib.d.ts +747 -0
  413. package/packages/mailx-send/node_modules/nodemailer/.ncurc.js +9 -0
  414. package/packages/mailx-send/node_modules/nodemailer/.prettierignore +8 -0
  415. package/packages/mailx-send/node_modules/nodemailer/.prettierrc +12 -0
  416. package/packages/mailx-send/node_modules/nodemailer/.prettierrc.js +10 -0
  417. package/packages/mailx-send/node_modules/nodemailer/.release-please-config.json +9 -0
  418. package/packages/mailx-send/node_modules/nodemailer/LICENSE +16 -0
  419. package/packages/mailx-send/node_modules/nodemailer/README.md +86 -0
  420. package/packages/mailx-send/node_modules/nodemailer/SECURITY.txt +22 -0
  421. package/packages/mailx-send/node_modules/nodemailer/eslint.config.js +88 -0
  422. package/packages/mailx-send/node_modules/nodemailer/lib/addressparser/index.js +383 -0
  423. package/packages/mailx-send/node_modules/nodemailer/lib/base64/index.js +139 -0
  424. package/packages/mailx-send/node_modules/nodemailer/lib/dkim/index.js +253 -0
  425. package/packages/mailx-send/node_modules/nodemailer/lib/dkim/message-parser.js +155 -0
  426. package/packages/mailx-send/node_modules/nodemailer/lib/dkim/relaxed-body.js +154 -0
  427. package/packages/mailx-send/node_modules/nodemailer/lib/dkim/sign.js +117 -0
  428. package/packages/mailx-send/node_modules/nodemailer/lib/fetch/cookies.js +281 -0
  429. package/packages/mailx-send/node_modules/nodemailer/lib/fetch/index.js +280 -0
  430. package/packages/mailx-send/node_modules/nodemailer/lib/json-transport/index.js +82 -0
  431. package/packages/mailx-send/node_modules/nodemailer/lib/mail-composer/index.js +629 -0
  432. package/packages/mailx-send/node_modules/nodemailer/lib/mailer/index.js +441 -0
  433. package/packages/mailx-send/node_modules/nodemailer/lib/mailer/mail-message.js +316 -0
  434. package/packages/mailx-send/node_modules/nodemailer/lib/mime-funcs/index.js +625 -0
  435. package/packages/mailx-send/node_modules/nodemailer/lib/mime-funcs/mime-types.js +2113 -0
  436. package/packages/mailx-send/node_modules/nodemailer/lib/mime-node/index.js +1316 -0
  437. package/packages/mailx-send/node_modules/nodemailer/lib/mime-node/last-newline.js +33 -0
  438. package/packages/mailx-send/node_modules/nodemailer/lib/mime-node/le-unix.js +43 -0
  439. package/packages/mailx-send/node_modules/nodemailer/lib/mime-node/le-windows.js +52 -0
  440. package/packages/mailx-send/node_modules/nodemailer/lib/nodemailer.js +157 -0
  441. package/packages/mailx-send/node_modules/nodemailer/lib/punycode/index.js +460 -0
  442. package/packages/mailx-send/node_modules/nodemailer/lib/qp/index.js +227 -0
  443. package/packages/mailx-send/node_modules/nodemailer/lib/sendmail-transport/index.js +210 -0
  444. package/packages/mailx-send/node_modules/nodemailer/lib/ses-transport/index.js +234 -0
  445. package/packages/mailx-send/node_modules/nodemailer/lib/shared/index.js +754 -0
  446. package/packages/mailx-send/node_modules/nodemailer/lib/smtp-connection/data-stream.js +108 -0
  447. package/packages/mailx-send/node_modules/nodemailer/lib/smtp-connection/http-proxy-client.js +143 -0
  448. package/packages/mailx-send/node_modules/nodemailer/lib/smtp-connection/index.js +1870 -0
  449. package/packages/mailx-send/node_modules/nodemailer/lib/smtp-pool/index.js +652 -0
  450. package/packages/mailx-send/node_modules/nodemailer/lib/smtp-pool/pool-resource.js +259 -0
  451. package/packages/mailx-send/node_modules/nodemailer/lib/smtp-transport/index.js +421 -0
  452. package/packages/mailx-send/node_modules/nodemailer/lib/stream-transport/index.js +135 -0
  453. package/packages/mailx-send/node_modules/nodemailer/lib/well-known/index.js +47 -0
  454. package/packages/mailx-send/node_modules/nodemailer/lib/well-known/services.json +611 -0
  455. package/packages/mailx-send/node_modules/nodemailer/lib/xoauth2/index.js +427 -0
  456. package/packages/mailx-send/node_modules/nodemailer/package.json +47 -0
  457. package/packages/mailx-send/node_modules/undici-types/LICENSE +21 -0
  458. package/packages/mailx-send/node_modules/undici-types/README.md +6 -0
  459. package/packages/mailx-send/node_modules/undici-types/agent.d.ts +31 -0
  460. package/packages/mailx-send/node_modules/undici-types/api.d.ts +43 -0
  461. package/packages/mailx-send/node_modules/undici-types/balanced-pool.d.ts +29 -0
  462. package/packages/mailx-send/node_modules/undici-types/cache.d.ts +36 -0
  463. package/packages/mailx-send/node_modules/undici-types/client.d.ts +108 -0
  464. package/packages/mailx-send/node_modules/undici-types/connector.d.ts +34 -0
  465. package/packages/mailx-send/node_modules/undici-types/content-type.d.ts +21 -0
  466. package/packages/mailx-send/node_modules/undici-types/cookies.d.ts +28 -0
  467. package/packages/mailx-send/node_modules/undici-types/diagnostics-channel.d.ts +66 -0
  468. package/packages/mailx-send/node_modules/undici-types/dispatcher.d.ts +256 -0
  469. package/packages/mailx-send/node_modules/undici-types/env-http-proxy-agent.d.ts +21 -0
  470. package/packages/mailx-send/node_modules/undici-types/errors.d.ts +149 -0
  471. package/packages/mailx-send/node_modules/undici-types/eventsource.d.ts +61 -0
  472. package/packages/mailx-send/node_modules/undici-types/fetch.d.ts +209 -0
  473. package/packages/mailx-send/node_modules/undici-types/file.d.ts +39 -0
  474. package/packages/mailx-send/node_modules/undici-types/filereader.d.ts +54 -0
  475. package/packages/mailx-send/node_modules/undici-types/formdata.d.ts +108 -0
  476. package/packages/mailx-send/node_modules/undici-types/global-dispatcher.d.ts +9 -0
  477. package/packages/mailx-send/node_modules/undici-types/global-origin.d.ts +7 -0
  478. package/packages/mailx-send/node_modules/undici-types/handlers.d.ts +15 -0
  479. package/packages/mailx-send/node_modules/undici-types/header.d.ts +4 -0
  480. package/packages/mailx-send/node_modules/undici-types/index.d.ts +71 -0
  481. package/packages/mailx-send/node_modules/undici-types/interceptors.d.ts +17 -0
  482. package/packages/mailx-send/node_modules/undici-types/mock-agent.d.ts +50 -0
  483. package/packages/mailx-send/node_modules/undici-types/mock-client.d.ts +25 -0
  484. package/packages/mailx-send/node_modules/undici-types/mock-errors.d.ts +12 -0
  485. package/packages/mailx-send/node_modules/undici-types/mock-interceptor.d.ts +93 -0
  486. package/packages/mailx-send/node_modules/undici-types/mock-pool.d.ts +25 -0
  487. package/packages/mailx-send/node_modules/undici-types/package.json +55 -0
  488. package/packages/mailx-send/node_modules/undici-types/patch.d.ts +33 -0
  489. package/packages/mailx-send/node_modules/undici-types/pool-stats.d.ts +19 -0
  490. package/packages/mailx-send/node_modules/undici-types/pool.d.ts +39 -0
  491. package/packages/mailx-send/node_modules/undici-types/proxy-agent.d.ts +28 -0
  492. package/packages/mailx-send/node_modules/undici-types/readable.d.ts +65 -0
  493. package/packages/mailx-send/node_modules/undici-types/retry-agent.d.ts +8 -0
  494. package/packages/mailx-send/node_modules/undici-types/retry-handler.d.ts +116 -0
  495. package/packages/mailx-send/node_modules/undici-types/util.d.ts +18 -0
  496. package/packages/mailx-send/node_modules/undici-types/webidl.d.ts +228 -0
  497. package/packages/mailx-send/node_modules/undici-types/websocket.d.ts +150 -0
  498. package/packages/mailx-send/package.json +27 -0
  499. package/packages/mailx-server/index.d.ts +8 -0
  500. package/packages/mailx-server/index.js +217 -0
  501. package/packages/mailx-server/package.json +25 -0
  502. package/packages/mailx-server/tsconfig.tsbuildinfo +1 -0
  503. package/packages/mailx-settings/index.d.ts +64 -0
  504. package/packages/mailx-settings/index.js +218 -0
  505. package/packages/mailx-settings/package.json +16 -0
  506. package/packages/mailx-settings/tsconfig.tsbuildinfo +1 -0
  507. package/packages/mailx-store/db.d.ts +100 -0
  508. package/packages/mailx-store/db.js +461 -0
  509. package/packages/mailx-store/file-store.d.ts +22 -0
  510. package/packages/mailx-store/file-store.js +59 -0
  511. package/packages/mailx-store/index.d.ts +7 -0
  512. package/packages/mailx-store/index.js +7 -0
  513. package/packages/mailx-store/package.json +19 -0
  514. package/packages/mailx-store/tsconfig.tsbuildinfo +1 -0
  515. package/packages/mailx-types/index.d.ts +195 -0
  516. package/packages/mailx-types/index.js +7 -0
  517. package/packages/mailx-types/package.json +12 -0
  518. package/packages/mailx-types/tsconfig.tsbuildinfo +1 -0
  519. package/tsconfig.base.json +28 -0
package/README.md ADDED
@@ -0,0 +1,160 @@
1
+ # mailx — Email Client
2
+
3
+ A local-first email client with IMAP sync, full offline reading, and a standalone native app. Replaces Thunderbird/Outlook.
4
+
5
+ ## Quick Start
6
+
7
+ ```bash
8
+ npm start # Start server (auto-restarts on changes)
9
+ # Open http://localhost:9333 in browser
10
+
11
+ launch.ps1 # Or use the native WebView2 app
12
+ launch.ps1 -restart # Kill existing server and restart
13
+ ```
14
+
15
+ ## Setup
16
+
17
+ ### 1. Config Pointer (~/.mailx/config.json)
18
+
19
+ Points to the shared settings file and local store:
20
+
21
+ ```json
22
+ {
23
+ "settingsPath": "C:/Users/You/OneDrive/home/.mailx/settings.jsonc",
24
+ "storePath": "C:/Users/You/.mailx/mailxstore"
25
+ }
26
+ ```
27
+
28
+ - **settingsPath** — Path to shared settings (can be on OneDrive/Dropbox for multi-machine sync)
29
+ - **storePath** — Where cached message bodies are stored (local, not synced)
30
+
31
+ If `config.json` doesn't exist, settings default to `~/.mailx/settings.jsonc`.
32
+
33
+ ### 2. Settings File (settings.jsonc)
34
+
35
+ ```jsonc
36
+ {
37
+ "accounts": [
38
+ {
39
+ "id": "work", // Unique ID (internal)
40
+ "name": "Work Email", // Display name in UI
41
+ "email": "bob@example.com",
42
+ "imap": {
43
+ "host": "imap.example.com",
44
+ "port": 993,
45
+ "tls": true,
46
+ "auth": "password", // "password" or "oauth2"
47
+ "user": "bob",
48
+ "password": "secret"
49
+ },
50
+ "smtp": {
51
+ "host": "smtp.example.com",
52
+ "port": 587,
53
+ "tls": true,
54
+ "auth": "password",
55
+ "user": "bob",
56
+ "password": "secret"
57
+ },
58
+ "enabled": true
59
+ },
60
+ {
61
+ "id": "gmail",
62
+ "name": "Gmail",
63
+ "email": "bob@gmail.com",
64
+ "imap": {
65
+ "host": "imap.gmail.com", "port": 993, "tls": true,
66
+ "auth": "oauth2", "user": "bob@gmail.com"
67
+ },
68
+ "smtp": {
69
+ "host": "smtp.gmail.com", "port": 587, "tls": true,
70
+ "auth": "oauth2", "user": "bob@gmail.com"
71
+ },
72
+ "enabled": true
73
+ }
74
+ ],
75
+ "sync": {
76
+ "intervalMinutes": 5, // Full sync interval
77
+ "historyDays": 30 // Days of history (0 = all)
78
+ },
79
+ "ui": {
80
+ "theme": "dark",
81
+ "folderWidth": 220,
82
+ "listViewerSplit": 40,
83
+ "fontSize": 14
84
+ },
85
+ // Auto-populated when you click "Always allow from sender/domain"
86
+ "remoteAllowList": {
87
+ "senders": [],
88
+ "domains": []
89
+ }
90
+ }
91
+ ```
92
+
93
+ ### 3. Gmail OAuth
94
+
95
+ 1. [Google Cloud Console](https://console.cloud.google.com/) → create project
96
+ 2. Enable Gmail API (and People API for contacts)
97
+ 3. Create OAuth 2.0 credentials (Desktop app)
98
+ 4. Download `credentials.json` to the iflow package directory
99
+ 5. First connect opens browser for consent. Tokens cached and refresh automatically.
100
+
101
+ ## Usage
102
+
103
+ ### Reading Mail
104
+ - **Folder tree** (left) — click to view, expand/collapse subfolders
105
+ - **Message list** (center) — click to preview, scroll for more
106
+ - **Preview pane** (right) — shows message content
107
+ - **All Inboxes** — unified view across all accounts
108
+
109
+ ### Composing
110
+ - **Compose** — toolbar or Ctrl+N
111
+ - **Reply / Reply All / Forward** — Ctrl+R / Ctrl+Shift+R / toolbar
112
+ - **Send** — Ctrl+Enter
113
+ - **From field** — pick from dropdown or type any address
114
+ - **Address autocomplete** — type in To/Cc/Bcc, Tab accepts first match, Ctrl+K to trigger
115
+ - **Auto-save** — drafts saved every 5 seconds
116
+
117
+ ### Managing Messages
118
+ - **Delete** — Del, Ctrl+D, or trash button → moves to Trash
119
+ - **Undo delete** — Ctrl+Z within 30 seconds
120
+ - **Flag/unflag** — click the star ☆/★
121
+ - **Search** — type in search bar. Qualifiers: `from:name`, `to:name`, `subject:text`
122
+ - **Remote content** — blocked by default. Click "Load this time" or "Always from sender/domain"
123
+
124
+ ### View Options (View menu)
125
+ - **Two-line view** — From+Date on line 1, Subject on line 2
126
+ - **Preview pane** — toggle on/off
127
+ - **Flagged only** — show only starred messages
128
+
129
+ ### Keyboard Shortcuts
130
+ | Key | Action |
131
+ |-----|--------|
132
+ | Ctrl+N | New message |
133
+ | Ctrl+R | Reply |
134
+ | Ctrl+Shift+R | Reply All |
135
+ | Del / Ctrl+D | Delete |
136
+ | Ctrl+Z | Undo delete |
137
+ | Ctrl+K | Address completion |
138
+ | Ctrl+Enter | Send (compose) |
139
+ | Escape | Discard / Clear search |
140
+ | F5 | Sync |
141
+
142
+ ## Data Storage
143
+
144
+ | File | Location | Purpose |
145
+ |------|----------|---------|
146
+ | config.json | ~/.mailx/ | Points to settings file |
147
+ | settings.jsonc | OneDrive or ~/.mailx/ | Accounts, prefs (shared across machines) |
148
+ | mailx.db | ~/.mailx/ | SQLite — headers, contacts, sync state |
149
+ | mailxstore/ | ~/.mailx/ | Cached message bodies (.eml) |
150
+ | window.json | ~/.mailx/ | Window position (per machine) |
151
+ | mailx.log | project dir | Server log with timestamps |
152
+
153
+ ## Architecture
154
+
155
+ - **Local-first** — changes update local DB immediately, background worker syncs to IMAP
156
+ - **Offline reading** — full message bodies cached during sync
157
+ - **IMAP IDLE** — instant new mail notifications + 30s poll fallback
158
+ - **Outbox** — queued in IMAP Outbox folder with multi-machine interlock via flags
159
+ - **Remote content blocking** — HTML sanitized server-side, CSP in iframe, per-sender/domain allow-list
160
+ - **Search** — SQLite FTS5 full-text index with qualifiers
package/bin/mailx.js ADDED
@@ -0,0 +1,58 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * mailx launcher — starts the server and opens the browser.
4
+ * Usage: mailx [--external] [--no-browser]
5
+ */
6
+
7
+ import { spawn } from "node:child_process";
8
+ import { fileURLToPath } from "node:url";
9
+ import path from "node:path";
10
+ import net from "node:net";
11
+
12
+ const PORT = 9333;
13
+ const __dirname = path.dirname(fileURLToPath(import.meta.url));
14
+ const serverScript = path.join(__dirname, "..", "packages", "mailx-server", "index.js");
15
+
16
+ function isPortInUse(port) {
17
+ return new Promise((resolve) => {
18
+ const server = net.createServer();
19
+ server.once("error", () => resolve(true));
20
+ server.once("listening", () => { server.close(); resolve(false); });
21
+ server.listen(port, "127.0.0.1");
22
+ });
23
+ }
24
+
25
+ async function main() {
26
+ const args = process.argv.slice(2);
27
+ const noBrowser = args.includes("--no-browser");
28
+ const inUse = await isPortInUse(PORT);
29
+
30
+ if (inUse) {
31
+ console.log(`mailx server already running on port ${PORT}`);
32
+ } else {
33
+ console.log(`Starting mailx server on port ${PORT}...`);
34
+ const serverArgs = [serverScript, ...args.filter(a => a === "--external")];
35
+ const child = spawn(process.execPath, serverArgs, {
36
+ stdio: "inherit",
37
+ detached: false,
38
+ });
39
+ child.unref();
40
+
41
+ // Wait for server to be ready
42
+ for (let i = 0; i < 60; i++) {
43
+ await new Promise(r => setTimeout(r, 500));
44
+ if (await isPortInUse(PORT)) break;
45
+ }
46
+ }
47
+
48
+ if (!noBrowser) {
49
+ const url = `http://localhost:${PORT}`;
50
+ const { exec } = await import("node:child_process");
51
+ if (process.platform === "win32") exec(`start "" "${url}"`);
52
+ else if (process.platform === "darwin") exec(`open "${url}"`);
53
+ else exec(`xdg-open "${url}"`);
54
+ console.log(`Opened ${url}`);
55
+ }
56
+ }
57
+
58
+ main().catch(console.error);
package/client/app.js ADDED
@@ -0,0 +1,431 @@
1
+ /**
2
+ * mailx client entry point.
3
+ * Wires together all UI components and WebSocket connection.
4
+ */
5
+ import { initFolderTree, refreshFolderTree } from "./components/folder-tree.js";
6
+ import { initMessageList, loadMessages, loadUnifiedInbox, loadSearchResults, reloadCurrentFolder } from "./components/message-list.js";
7
+ import { showMessage, getCurrentMessage } from "./components/message-viewer.js";
8
+ import { connectWebSocket, onWsEvent, triggerSync, getAccounts } from "./lib/api-client.js";
9
+ // ── Wire up components ──
10
+ const folderTree = document.getElementById("folder-tree");
11
+ initFolderTree(folderTree, (accountId, folderId, folderName, specialUse) => {
12
+ loadMessages(accountId, folderId, 1, specialUse);
13
+ document.title = `mailx - ${folderName}`;
14
+ }, () => {
15
+ // Unified inbox handler
16
+ loadUnifiedInbox();
17
+ document.title = "mailx - All Inboxes";
18
+ });
19
+ initMessageList((accountId, uid) => {
20
+ showMessage(accountId, uid);
21
+ // Enable action buttons when a message is selected
22
+ for (const id of ["btn-reply", "btn-reply-all", "btn-forward", "btn-delete", "btn-flag"]) {
23
+ const btn = document.getElementById(id);
24
+ if (btn)
25
+ btn.disabled = false;
26
+ }
27
+ });
28
+ // ── Toolbar actions ──
29
+ document.getElementById("btn-sync")?.addEventListener("click", async () => {
30
+ const btn = document.getElementById("btn-sync");
31
+ btn.disabled = true;
32
+ btn.classList.add("syncing");
33
+ const statusSync = document.getElementById("status-sync");
34
+ if (statusSync)
35
+ statusSync.textContent = "Syncing...";
36
+ try {
37
+ await triggerSync();
38
+ // Button stays spinning — WebSocket syncProgress/folderCountsChanged will update UI
39
+ // Set a timeout to re-enable if no WebSocket response
40
+ setTimeout(() => {
41
+ btn.disabled = false;
42
+ btn.classList.remove("syncing");
43
+ refreshFolderTree();
44
+ reloadCurrentFolder();
45
+ if (statusSync && statusSync.textContent === "Syncing...") {
46
+ statusSync.textContent = `Synced ${new Date().toLocaleTimeString(undefined, { hour: "2-digit", minute: "2-digit", hour12: false })}`;
47
+ }
48
+ }, 30000);
49
+ }
50
+ catch (e) {
51
+ if (statusSync)
52
+ statusSync.textContent = `Sync error: ${e.message}`;
53
+ btn.disabled = false;
54
+ btn.classList.remove("syncing");
55
+ }
56
+ });
57
+ document.getElementById("btn-restart")?.addEventListener("click", async () => {
58
+ const statusSync = document.getElementById("status-sync");
59
+ if (statusSync)
60
+ statusSync.textContent = "Restarting...";
61
+ try {
62
+ await fetch("/api/restart", { method: "POST" });
63
+ }
64
+ catch { /* server is shutting down */ }
65
+ // Server broadcasts reload event; if missed, WebSocket reconnect will trigger page reload
66
+ });
67
+ async function openCompose(mode) {
68
+ const current = getCurrentMessage();
69
+ const accounts = await getAccounts();
70
+ const accountId = current?.accountId || accounts[0]?.id || "";
71
+ const msg = current?.message;
72
+ const rePrefix = /^(re|fwd?):\s*/i;
73
+ const cleanSubject = msg ? msg.subject.replace(rePrefix, "") : "";
74
+ const init = {
75
+ mode,
76
+ accountId,
77
+ to: [],
78
+ cc: [],
79
+ subject: "",
80
+ bodyHtml: "",
81
+ inReplyTo: "",
82
+ references: [],
83
+ accounts: accounts.map((a) => ({ id: a.id, name: a.name, email: a.email })),
84
+ };
85
+ if (msg && mode === "reply") {
86
+ init.to = [msg.from];
87
+ init.subject = `Re: ${cleanSubject}`;
88
+ init.bodyHtml = quoteBody(msg);
89
+ init.inReplyTo = msg.messageId;
90
+ init.references = [...(msg.references || []), msg.messageId];
91
+ }
92
+ else if (msg && mode === "replyAll") {
93
+ init.to = [msg.from, ...msg.to.filter((a) => a.address !== msg.from.address)];
94
+ init.cc = msg.cc || [];
95
+ init.subject = `Re: ${cleanSubject}`;
96
+ init.bodyHtml = quoteBody(msg);
97
+ init.inReplyTo = msg.messageId;
98
+ init.references = [...(msg.references || []), msg.messageId];
99
+ }
100
+ else if (msg && mode === "forward") {
101
+ init.subject = `Fwd: ${cleanSubject}`;
102
+ init.bodyHtml = forwardBody(msg);
103
+ }
104
+ // Store init data for compose window to pick up
105
+ sessionStorage.setItem("composeInit", JSON.stringify(init));
106
+ window.open("/compose/compose.html", "_blank", "width=800,height=600,menubar=no,toolbar=no,status=no");
107
+ }
108
+ function quoteBody(msg) {
109
+ const date = new Date(msg.date).toLocaleString();
110
+ const from = msg.from.name ? `${msg.from.name} &lt;${msg.from.address}&gt;` : msg.from.address;
111
+ const body = msg.bodyHtml || `<pre>${msg.bodyText || ""}</pre>`;
112
+ return `<br><div class="reply"><p>On ${date}, ${from} wrote:</p><blockquote>${body}</blockquote></div>`;
113
+ }
114
+ function forwardBody(msg) {
115
+ const date = new Date(msg.date).toLocaleString();
116
+ const from = msg.from.name ? `${msg.from.name} &lt;${msg.from.address}&gt;` : msg.from.address;
117
+ const to = msg.to.map((a) => a.name ? `${a.name} &lt;${a.address}&gt;` : a.address).join(", ");
118
+ const body = msg.bodyHtml || `<pre>${msg.bodyText || ""}</pre>`;
119
+ return `<br><div class="reply"><p>---------- Forwarded message ----------<br>From: ${from}<br>Date: ${date}<br>Subject: ${msg.subject}<br>To: ${to}</p>${body}</div>`;
120
+ }
121
+ let lastDeleted = null;
122
+ let undoTimeout = null;
123
+ async function deleteCurrentMessage() {
124
+ const current = getCurrentMessage();
125
+ if (!current)
126
+ return;
127
+ const { accountId, message } = current;
128
+ try {
129
+ const res = await fetch(`/api/message/${accountId}/${message.uid}`, { method: "DELETE" });
130
+ if (!res.ok) {
131
+ const err = await res.json().catch(() => ({ error: res.statusText }));
132
+ throw new Error(err.error || res.statusText);
133
+ }
134
+ lastDeleted = { accountId, uid: message.uid, folderId: message.folderId, subject: message.subject };
135
+ // Show undo notification in status bar
136
+ const statusSync = document.getElementById("status-sync");
137
+ if (statusSync)
138
+ statusSync.textContent = `Deleted "${message.subject.substring(0, 40)}" — Ctrl+Z to undo`;
139
+ // Clear undo after 30 seconds
140
+ if (undoTimeout)
141
+ clearTimeout(undoTimeout);
142
+ undoTimeout = setTimeout(() => {
143
+ lastDeleted = null;
144
+ if (statusSync?.textContent?.includes("Ctrl+Z"))
145
+ statusSync.textContent = "";
146
+ }, 30000);
147
+ // Clear the preview pane
148
+ const bodyEl = document.getElementById("mv-body");
149
+ const headerEl = document.getElementById("mv-header");
150
+ if (bodyEl)
151
+ bodyEl.innerHTML = `<div class="mv-empty">Select a message to read</div>`;
152
+ if (headerEl)
153
+ headerEl.hidden = true;
154
+ reloadCurrentFolder();
155
+ }
156
+ catch (e) {
157
+ console.error(`Delete failed: ${e.message}`);
158
+ }
159
+ }
160
+ async function undoDelete() {
161
+ if (!lastDeleted)
162
+ return;
163
+ const { accountId, uid, folderId } = lastDeleted;
164
+ try {
165
+ const res = await fetch(`/api/message/${accountId}/${uid}/undelete`, {
166
+ method: "POST",
167
+ headers: { "Content-Type": "application/json" },
168
+ body: JSON.stringify({ folderId }),
169
+ });
170
+ if (!res.ok) {
171
+ const err = await res.json().catch(() => ({ error: res.statusText }));
172
+ throw new Error(err.error || res.statusText);
173
+ }
174
+ const statusSync = document.getElementById("status-sync");
175
+ if (statusSync)
176
+ statusSync.textContent = "Message restored";
177
+ lastDeleted = null;
178
+ if (undoTimeout)
179
+ clearTimeout(undoTimeout);
180
+ reloadCurrentFolder();
181
+ }
182
+ catch (e) {
183
+ console.error(`Undo failed: ${e.message}`);
184
+ }
185
+ }
186
+ document.getElementById("btn-delete")?.addEventListener("click", deleteCurrentMessage);
187
+ document.getElementById("btn-compose")?.addEventListener("click", () => openCompose("new"));
188
+ document.getElementById("btn-reply")?.addEventListener("click", () => openCompose("reply"));
189
+ document.getElementById("btn-reply-all")?.addEventListener("click", () => openCompose("replyAll"));
190
+ document.getElementById("btn-forward")?.addEventListener("click", () => openCompose("forward"));
191
+ // ── Search ──
192
+ let searchTimeout;
193
+ const searchInput = document.getElementById("search-input");
194
+ searchInput?.addEventListener("input", () => {
195
+ clearTimeout(searchTimeout);
196
+ searchTimeout = setTimeout(() => {
197
+ const query = searchInput.value.trim();
198
+ if (query.length >= 2) {
199
+ loadSearchResults(query);
200
+ document.title = `mailx - Search: ${query}`;
201
+ }
202
+ else if (query.length === 0) {
203
+ // Clear search — reload current folder
204
+ reloadCurrentFolder();
205
+ }
206
+ }, 400);
207
+ });
208
+ // Enter triggers immediate search
209
+ searchInput?.addEventListener("keydown", (e) => {
210
+ if (e.key === "Enter") {
211
+ clearTimeout(searchTimeout);
212
+ const query = searchInput.value.trim();
213
+ if (query) {
214
+ loadSearchResults(query);
215
+ document.title = `mailx - Search: ${query}`;
216
+ }
217
+ }
218
+ if (e.key === "Escape") {
219
+ searchInput.value = "";
220
+ reloadCurrentFolder();
221
+ }
222
+ });
223
+ // ── Open links from email body in system browser ──
224
+ window.addEventListener("message", (e) => {
225
+ if (e.data?.type === "openLink" && e.data.url) {
226
+ window.open(e.data.url, "_blank", "noopener,noreferrer");
227
+ }
228
+ });
229
+ // ── Splitter drag ──
230
+ const splitter = document.getElementById("splitter-h");
231
+ if (splitter) {
232
+ // Restore saved position
233
+ const saved = localStorage.getItem("mailx-split");
234
+ if (saved)
235
+ document.documentElement.style.setProperty("--list-viewer-split", saved);
236
+ let dragging = false;
237
+ let startX;
238
+ let startSplit;
239
+ splitter.addEventListener("pointerdown", (e) => {
240
+ dragging = true;
241
+ startX = e.clientX;
242
+ const mainArea = document.querySelector(".main-area");
243
+ startSplit = mainArea.getBoundingClientRect().width * (parseFloat(getComputedStyle(document.documentElement).getPropertyValue("--list-viewer-split")) / 100);
244
+ splitter.setPointerCapture(e.pointerId);
245
+ });
246
+ splitter.addEventListener("pointermove", (e) => {
247
+ if (!dragging)
248
+ return;
249
+ const mainArea = document.querySelector(".main-area");
250
+ const totalWidth = mainArea.getBoundingClientRect().width;
251
+ const newSplit = ((startSplit + (e.clientX - startX)) / totalWidth) * 100;
252
+ const clamped = Math.max(15, Math.min(85, newSplit));
253
+ const val = `${clamped}%`;
254
+ document.documentElement.style.setProperty("--list-viewer-split", val);
255
+ localStorage.setItem("mailx-split", val);
256
+ });
257
+ splitter.addEventListener("pointerup", () => { dragging = false; });
258
+ }
259
+ // ── WebSocket for live updates ──
260
+ connectWebSocket();
261
+ onWsEvent((event) => {
262
+ const statusSync = document.getElementById("status-sync");
263
+ switch (event.type) {
264
+ case "connected":
265
+ if (statusSync)
266
+ statusSync.textContent = "Connected";
267
+ // Refresh folder counts on reconnect (non-disruptive)
268
+ refreshFolderTree();
269
+ break;
270
+ case "syncProgress":
271
+ if (statusSync)
272
+ statusSync.textContent = `Sync: ${event.phase} ${event.progress}%`;
273
+ break;
274
+ case "folderCountsChanged": {
275
+ refreshFolderTree();
276
+ // Only reload message list if user isn't reading a message
277
+ if (!getCurrentMessage())
278
+ reloadCurrentFolder();
279
+ // Sync finished — re-enable sync button
280
+ const syncBtn = document.getElementById("btn-sync");
281
+ if (syncBtn) {
282
+ syncBtn.disabled = false;
283
+ syncBtn.classList.remove("syncing");
284
+ }
285
+ if (statusSync)
286
+ statusSync.textContent = `Synced ${new Date().toLocaleTimeString(undefined, { hour: "2-digit", minute: "2-digit", hour12: false })}`;
287
+ break;
288
+ }
289
+ case "reload":
290
+ location.reload();
291
+ break;
292
+ case "error":
293
+ if (statusSync)
294
+ statusSync.textContent = `Error: ${event.message}`;
295
+ break;
296
+ }
297
+ });
298
+ // ── Keyboard shortcuts ──
299
+ document.addEventListener("keydown", (e) => {
300
+ // Ctrl+N or Ctrl+Shift+M = Compose
301
+ if ((e.ctrlKey && e.key === "n") || (e.ctrlKey && e.shiftKey && e.key === "M")) {
302
+ e.preventDefault();
303
+ openCompose("new");
304
+ }
305
+ // Ctrl+R = Reply
306
+ if (e.ctrlKey && e.key === "r" && !e.shiftKey) {
307
+ e.preventDefault();
308
+ openCompose("reply");
309
+ }
310
+ // Ctrl+Shift+R = Reply All
311
+ if (e.ctrlKey && e.shiftKey && e.key === "R") {
312
+ e.preventDefault();
313
+ openCompose("replyAll");
314
+ }
315
+ // Ctrl+D or Delete = Delete message
316
+ if ((e.ctrlKey && e.key === "d") || e.key === "Delete") {
317
+ e.preventDefault();
318
+ deleteCurrentMessage();
319
+ }
320
+ // Ctrl+Z = Undo delete
321
+ if (e.ctrlKey && e.key === "z") {
322
+ if (lastDeleted) {
323
+ e.preventDefault();
324
+ undoDelete();
325
+ }
326
+ }
327
+ // F5 = Sync
328
+ if (e.key === "F5") {
329
+ e.preventDefault();
330
+ document.getElementById("btn-sync")?.click();
331
+ }
332
+ });
333
+ // ── View menu ──
334
+ const viewBtn = document.getElementById("btn-view");
335
+ const viewDropdown = document.getElementById("view-dropdown");
336
+ const optTwoLine = document.getElementById("opt-two-line");
337
+ const optPreview = document.getElementById("opt-preview");
338
+ const optFlagged = document.getElementById("opt-flagged");
339
+ // Toggle dropdown
340
+ viewBtn?.addEventListener("click", (e) => {
341
+ e.stopPropagation();
342
+ if (viewDropdown)
343
+ viewDropdown.hidden = !viewDropdown.hidden;
344
+ });
345
+ document.addEventListener("click", () => {
346
+ if (viewDropdown)
347
+ viewDropdown.hidden = true;
348
+ });
349
+ // Restore saved view settings
350
+ const savedTwoLine = localStorage.getItem("mailx-two-line") === "true";
351
+ const savedPreview = localStorage.getItem("mailx-preview") !== "false"; // default true
352
+ const savedFlagged = localStorage.getItem("mailx-flagged") === "true";
353
+ if (optTwoLine)
354
+ optTwoLine.checked = savedTwoLine;
355
+ if (optPreview)
356
+ optPreview.checked = savedPreview;
357
+ if (optFlagged)
358
+ optFlagged.checked = savedFlagged;
359
+ if (savedTwoLine)
360
+ document.getElementById("message-list")?.classList.add("two-line");
361
+ if (!savedPreview)
362
+ document.querySelector(".main-area")?.classList.add("no-preview");
363
+ if (savedFlagged)
364
+ document.getElementById("ml-body")?.classList.add("flagged-only");
365
+ // Two-line toggle
366
+ optTwoLine?.addEventListener("change", () => {
367
+ const list = document.getElementById("message-list");
368
+ if (optTwoLine.checked) {
369
+ list?.classList.add("two-line");
370
+ }
371
+ else {
372
+ list?.classList.remove("two-line");
373
+ }
374
+ localStorage.setItem("mailx-two-line", String(optTwoLine.checked));
375
+ });
376
+ // Preview pane toggle
377
+ optPreview?.addEventListener("change", () => {
378
+ const main = document.querySelector(".main-area");
379
+ if (optPreview.checked) {
380
+ main?.classList.remove("no-preview");
381
+ }
382
+ else {
383
+ main?.classList.add("no-preview");
384
+ }
385
+ localStorage.setItem("mailx-preview", String(optPreview.checked));
386
+ });
387
+ // Flagged-only filter
388
+ optFlagged?.addEventListener("change", () => {
389
+ const body = document.getElementById("ml-body");
390
+ if (optFlagged.checked) {
391
+ body?.classList.add("flagged-only");
392
+ }
393
+ else {
394
+ body?.classList.remove("flagged-only");
395
+ }
396
+ localStorage.setItem("mailx-flagged", String(optFlagged.checked));
397
+ });
398
+ const isApp = typeof mailxapi !== "undefined" && mailxapi?.isApp;
399
+ fetch("/api/version").then(r => r.json()).then(d => {
400
+ const el = document.getElementById("app-version");
401
+ if (el)
402
+ el.textContent = `mailx s${d.server}/c${d.client}${isApp ? "" : " [browser]"}`;
403
+ }).catch(async () => {
404
+ // Server not running — try to start it if we're in the app
405
+ if (isApp) {
406
+ await mailxapi.ensureServer();
407
+ location.reload();
408
+ }
409
+ else {
410
+ const el = document.getElementById("app-version");
411
+ if (el)
412
+ el.textContent = "mailx [server offline]";
413
+ }
414
+ });
415
+ // ── Sync pending indicator ──
416
+ setInterval(async () => {
417
+ try {
418
+ const res = await fetch("/api/sync/pending");
419
+ if (!res.ok)
420
+ return;
421
+ const data = await res.json();
422
+ const el = document.getElementById("status-pending");
423
+ if (el) {
424
+ el.textContent = data.pending > 0 ? `↻ ${data.pending} pending` : "";
425
+ el.style.color = data.pending > 0 ? "oklch(0.75 0.15 60)" : "";
426
+ }
427
+ }
428
+ catch { /* offline */ }
429
+ }, 5000);
430
+ console.log("mailx client initialized");
431
+ //# sourceMappingURL=app.js.map