@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
@@ -1,442 +0,0 @@
1
- /**
2
- * @bobfrankston/mailx-imap
3
- * Multi-account IMAP management wrapping iflow.
4
- * Syncs messages to local store, emits events for new mail.
5
- */
6
- import type { TransportFactory } from "@bobfrankston/tcp-transport";
7
- import { MailxDB, FileMessageStore } from "@bobfrankston/mailx-store";
8
- import type { AccountConfig, MessageEnvelope, EmailAddress, Folder } from "@bobfrankston/mailx-types";
9
- import { EventEmitter } from "node:events";
10
- /** Events emitted by the IMAP manager */
11
- export interface ImapManagerEvents {
12
- newMessage: (accountId: string, folderId: number, envelope: MessageEnvelope) => void;
13
- syncProgress: (accountId: string, phase: string, progress: number) => void;
14
- syncComplete: (accountId: string) => void;
15
- syncError: (accountId: string, error: string) => void;
16
- folderCountsChanged: (accountId: string, counts: Record<number, {
17
- total: number;
18
- unread: number;
19
- }>) => void;
20
- accountError: (accountId: string, error: string, hint: string, isOAuth: boolean) => void;
21
- configChanged: (filename: string) => void;
22
- /** Fired after a message body has been written to the local store — lets
23
- * the UI flip a row's "not-downloaded" indicator without re-rendering. */
24
- bodyCached: (accountId: string, uid: number) => void;
25
- syncActionFailed: (accountId: string, action: string, uid: number, error: string) => void;
26
- /** Fired whenever the outbox queue depth or state changes (file added,
27
- * file sent and removed, retry attempted). Lets the UI show a persistent
28
- * queue-status indicator without polling. Aggregate status across all
29
- * accounts is included so the listener doesn't have to reassemble it. */
30
- outboxStatus: (status: OutboxStatus) => void;
31
- /** Per-account health counter update. Fires when an inactivity timeout,
32
- * connection-cap hit, or rate-limit wait happens. */
33
- diagnostics: (accountId: string, snapshot: AccountDiagnostics) => void;
34
- }
35
- /** Per-account diagnostic counters — tracks "something's wrong" events the
36
- * user should be able to see without opening the log. */
37
- export interface AccountDiagnostics {
38
- accountId: string;
39
- inactivityTimeouts: number;
40
- connCapHits: number;
41
- rateLimitWaits: number;
42
- lastTimeoutAt: number;
43
- lastCommand: string;
44
- lastError: string;
45
- }
46
- /** Per-account outbox queue breakdown, plus totals for the UI. */
47
- export interface OutboxStatus {
48
- total: number;
49
- retrying: number;
50
- claimed: number;
51
- oldestAgeSec: number;
52
- maxAttempts: number;
53
- perAccount: Record<string, {
54
- total: number;
55
- retrying: number;
56
- claimed: number;
57
- }>;
58
- }
59
- export declare class ImapManager extends EventEmitter {
60
- private configs;
61
- private watchers;
62
- private fetchClients;
63
- private db;
64
- private bodyStore;
65
- private syncIntervals;
66
- /** Track which accounts have already shown an error banner — only emit once per session */
67
- private accountErrorShown;
68
- private syncing;
69
- private inboxSyncing;
70
- /** Use native IMAP client instead of imapflow. Set to true to enable. */
71
- useNativeClient: boolean;
72
- /** Per-account health counters. Incremented when the server misbehaves
73
- * in ways that suggest a problem the user should know about (inactivity
74
- * timeouts, connection-cap hits, rate-limit waits). Surfaced via a
75
- * `diagnostics` event + `getDiagnostics` IPC so the UI can show a ⚠
76
- * badge instead of burying the issue in the log. */
77
- private diagnostics;
78
- private getDiagnosticsEntry;
79
- /** Classify an error message and bump the relevant counter; emit the
80
- * updated diagnostics snapshot. Call this from every catch in the sync
81
- * paths so the UI can count "something's wrong" in real time. */
82
- private recordError;
83
- /** Public read for the IPC surface: snapshot of all account diagnostics. */
84
- getDiagnosticsSnapshot(): AccountDiagnostics[];
85
- private transportFactory;
86
- constructor(db: MailxDB, transportFactory: TransportFactory);
87
- /** Get OAuth access token for an account (for SMTP auth) */
88
- getOAuthToken(accountId: string): Promise<string | null>;
89
- /** Accounts currently re-authenticating — all operations skip these */
90
- private reauthenticating;
91
- /** Last reauth attempt timestamp per account — prevents reauth loops (5 min cooldown) */
92
- private lastReauthAttempt;
93
- /** Force re-authentication for an OAuth account — deletes cached IMAP token, triggers browser consent */
94
- reauthenticate(accountId: string): Promise<boolean>;
95
- /** Delete a message directly on the IMAP server (for stuck outbox messages not in local DB) */
96
- deleteOnServer(accountId: string, folderPath: string, uid: number): Promise<void>;
97
- /** Search messages on the IMAP server — returns matching UIDs */
98
- searchOnServer(accountId: string, mailboxPath: string, criteria: any): Promise<number[]>;
99
- /** Server-side search that also materializes any UIDs we don't yet have
100
- * locally. Returns the full result after upsert, so the caller can
101
- * render hits that fall outside the history window. The fetch loop
102
- * can be long for big hit-sets, so this runs on the slow lane and
103
- * yields between chunks (each chunk is a separate withConnection)
104
- * so an interactive body fetch can interleave. */
105
- searchAndFetchOnServer(accountId: string, folderId: number, mailboxPath: string, criteria: any): Promise<number[]>;
106
- /** Create a fresh IMAP client for an account (public access for API endpoints) */
107
- createPublicClient(accountId: string): Promise<any>;
108
- /** Persistent operational connections — one per account, reused for all operations.
109
- * Body fetch, sync, prefetch, outbox-append, flag/move all serialize through
110
- * this single client per account via withConnection(). The priority lane
111
- * in the queue lets interactive clicks jump ahead of background prefetch. */
112
- private opsClients;
113
- /** Two-lane operation queue per account — interactive ops (body fetch on
114
- * click, flag toggle) drain before background ops (sync, prefetch). FIFO
115
- * within each lane. The single ops connection means there's never a race
116
- * on which folder is SELECTed; commands run strictly sequentially. */
117
- private opsQueues;
118
- /** Per-host semaphore — caps simultaneous IMAP socket opens to one server.
119
- * Defensive guardrail: with the single-ops-per-account model an individual
120
- * user's mailx never hits more than (#accounts × 2) sockets per host, well
121
- * under any reasonable server cap. Exists for the multi-account-on-one-host
122
- * case (e.g. bobma + bobma2 both on imap.iecc.com). */
123
- private hostSemaphores;
124
- private static readonly HOST_PERMITS;
125
- /** Get (or create) the persistent operational connection for an account.
126
- * logout() is wrapped as a no-op so legacy callers don't close it. */
127
- private getOpsClient;
128
- /** Run an operation on the account's connection — queued, sequential, no concurrency */
129
- /** Run an operation against the account's single ops connection. Tasks
130
- * queue strictly sequentially per account — only one IMAP command in
131
- * flight at a time. This eliminates the SELECT-races and "stale client
132
- * recovery" paths the old multi-client design needed.
133
- *
134
- * Default lane is `fast` — covers virtually everything (body fetch,
135
- * flag toggle, move, incremental sync). Pass `slow: true` only for
136
- * operations the caller knows will take a long time and shouldn't
137
- * block the user (multi-folder prefetch batches, large backfills).
138
- * When both lanes have tasks, fast drains first.
139
- *
140
- * Within a lane, FIFO. The running task always finishes — IMAP can't
141
- * preempt a command mid-flight. */
142
- withConnection<T>(accountId: string, fn: (client: any) => Promise<T>, opts?: {
143
- slow?: boolean;
144
- timeoutMs?: number;
145
- }): Promise<T>;
146
- /** Run the next queued task. Fast lane drains before slow.
147
- * Idempotent — safe to call after each task completes; the running
148
- * flag prevents reentrant draining. */
149
- private drainOpsQueue;
150
- /** Acquire one slot of the per-host connection semaphore. Returns a release
151
- * function — call exactly once when the socket is closed. Used by
152
- * newClient to cap simultaneous IMAP connections to a single server
153
- * across all mailx accounts. */
154
- private acquireHostSlot;
155
- /** Open IMAP clients per account, used to trace who's opening sockets
156
- * when we hit the Dovecot per-user+IP connection cap. */
157
- private openClients;
158
- /** Create a new IMAP client (internal — callers use getOpsClient or withConnection).
159
- * Acquires one slot of the per-host semaphore before constructing the
160
- * client; the slot is released when logout() or destroy() runs.
161
- * `purpose` is a short tag printed alongside the `[conn+]` log so we can
162
- * tell which code path (ops/idle/etc.) opened each connection. */
163
- private newClient;
164
- /** Force-close every IMAP socket for an account — ops + any lingering
165
- * ones in openClients (e.g. an IDLE watcher in flight). Used during
166
- * account removal and disconnectOps so the server's connection slots
167
- * free immediately rather than waiting for socket idle timeouts. */
168
- closeAllClients(accountId: string): Promise<void>;
169
- /** Disconnect the persistent operational connection for an account */
170
- disconnectOps(accountId: string): Promise<void>;
171
- /** Legacy entry: returns the shared persistent ops client. Most callers
172
- * should be using `withConnection()` instead — that gives proper
173
- * queueing and lets fast operations jump ahead of slow ones. */
174
- createClientWithLimit(accountId: string): Promise<any>;
175
- /** Disposable fresh client — only used by the IDLE watcher, which holds
176
- * its own socket so the fast/slow ops queue isn't blocked by IDLE
177
- * parking the connection in a wait-for-server state. */
178
- private createClient;
179
- private trackLogout;
180
- /** Number of registered IMAP accounts */
181
- getAccountCount(): number;
182
- /** Register an account */
183
- addAccount(account: AccountConfig): Promise<void>;
184
- /** Check if an account uses Gmail (should use API instead of IMAP) */
185
- private isGmailAccount;
186
- /** Get a Gmail API provider for an account (reuses tokenProvider from IMAP config) */
187
- private getGmailProvider;
188
- /** Convert ProviderMessage to the shape expected by storeMessages/upsertMessage */
189
- private providerMsgToLocal;
190
- /** Sync folder list for an account */
191
- syncFolders(accountId: string, client?: any): Promise<Folder[]>;
192
- /** Store a batch of messages to DB immediately — used by onChunk for incremental sync */
193
- private storeMessages;
194
- /** Sync messages for a specific folder */
195
- syncFolder(accountId: string, folderId: number, client?: any): Promise<number>;
196
- /** Sync all folders for all accounts */
197
- syncAll(): Promise<void>;
198
- private _syncAll;
199
- /** Sync a single account — manages its own connection lifecycle */
200
- private syncAccount;
201
- /** Sync a Gmail account via REST API — no IMAP connections */
202
- private syncAccountViaApi;
203
- /** Sync a single folder via Gmail/Outlook API */
204
- private syncFolderViaApi;
205
- /** Store API-fetched messages to DB */
206
- private storeApiMessages;
207
- /** Kill and recreate the persistent ops connection */
208
- private reconnectOps;
209
- /** Handle sync errors — classify and emit appropriate UI events.
210
- * The connection-cap branch was removed: with the unified ops queue +
211
- * per-host semaphore, mailx alone can't exceed the server cap. If the
212
- * cap *is* hit, that means another client (Thunderbird, phone, sibling
213
- * process) is holding slots — punishing mailx with a multi-minute
214
- * blackout doesn't help the user, the next sync tick will retry. */
215
- private handleSyncError;
216
- /** Fetch ONLY new messages above highestUid for one account's INBOX —
217
- * the IDLE callback's hot path. Skips gap detection, backfill, and the
218
- * server reconcile (each of which fetches a full UID list — multi-second
219
- * on a large mailbox). The 5-minute STATUS poll path still runs full
220
- * `syncFolder` so deletions and gaps eventually reconcile. */
221
- syncInboxNewOnly(accountId: string): Promise<void>;
222
- /** Sync just INBOX for each account (fast check for new mail) */
223
- syncInbox(): Promise<void>;
224
- /** Quick inbox check — per-account lightweight probe.
225
- * If the probe value changed since last time, triggers an inbox sync.
226
- * The marker is only advanced after a successful sync so that a failed
227
- * sync doesn't eat the "new mail" signal and make us stop retrying. */
228
- private lastInboxMarker;
229
- private quickCheckRunning;
230
- /** Shared quick-check skeleton: probe → compare → sync-if-changed → advance marker.
231
- * `probe` returns the current marker value; `sync` runs only when it differs
232
- * from the previously stored value. Marker is advanced only after sync resolves. */
233
- private quickCheck;
234
- /** Check a single account's inbox — uses its own connection, never blocked by sync */
235
- quickInboxCheckAccount(accountId: string): Promise<void>;
236
- private quickImapCheck;
237
- private quickGmailCheck;
238
- /** Check all accounts (used by legacy callers) */
239
- quickInboxCheck(): Promise<void>;
240
- /** Start periodic sync */
241
- startPeriodicSync(intervalMinutes: number): void;
242
- /** Stop periodic sync */
243
- stopPeriodicSync(): void;
244
- /** Check if an account is OAuth (Gmail/Outlook — generous connection limits) */
245
- isOAuthAccount(accountId: string): boolean;
246
- /** Start IMAP IDLE watchers for INBOX on each account */
247
- startWatching(): Promise<void>;
248
- /** Stop all IDLE watchers */
249
- stopWatching(): Promise<void>;
250
- /** Unlink the on-disk body file for a message by reading its `body_path`
251
- * from the DB. Safe to call either before or after `db.deleteMessage`
252
- * — read body_path first, store it, then unlink whenever. */
253
- private unlinkBodyFile;
254
- /** Fetch a single message body on demand, caching in the store.
255
- *
256
- * Cache lookup is folder-agnostic: when a UID exists in multiple folders
257
- * (Gmail labels, copy-instead-of-move) the prefetcher may have populated
258
- * body_path on only one row. Looking up by (account, uid) without the
259
- * folder filter finds the cached `.eml` regardless of which folder
260
- * context the UI passed.
261
- *
262
- * Server fetch goes through the unified ops queue on the fast lane —
263
- * the user clicked, they're waiting, this jumps ahead of any background
264
- * prefetch sitting in the slow lane. */
265
- fetchMessageBody(accountId: string, folderId: number, uid: number): Promise<Buffer | null>;
266
- /** Fetch message body via Gmail/Outlook API.
267
- * Throws `MessageNotFoundError` when the server says the message is gone
268
- * (deleted from another device, for example). The caller uses that to
269
- * delete the stale row locally instead of showing a generic error. */
270
- private fetchMessageBodyViaApi;
271
- /** Background body prefetch — download bodies for messages that don't have them.
272
- * Server-side deletions (isNotFound) aren't errors here: we delete the
273
- * stale row locally and keep going. Only unrelated errors (network,
274
- * auth, rate limits) count against the error budget, and the budget is
275
- * generous so a few transient failures don't kill the whole run. */
276
- /** Guard against concurrent prefetchBodies for the same account — mirror of
277
- * `sendingAccounts`. Without this, every periodic-sync tick spawns a new
278
- * prefetch session alongside any still in flight, blowing through Gmail's
279
- * per-minute quota and racing on disk writes. One prefetch per account. */
280
- private prefetchingAccounts;
281
- /** Per-folder error cooldowns — `accountId:folderPath` → [timestamps].
282
- * Used to skip folders that repeatedly time out (Dovecot on slow shared
283
- * hosting SELECTs big `_Spam` / archive folders at 300s+ latency; the
284
- * prefetch error budget was burning out on a handful of bad folders
285
- * before the INBOX could finish). A folder with 2+ errors in the last
286
- * 15 minutes is skipped until the cooldown passes. User-reported via
287
- * log analysis 2026-04-23: bobma prefetch timing out on Added2.organizations,
288
- * Added2.technews, _Spam, "Prefirst.Jerry's Retreat", Added2.zines. */
289
- private folderErrorCooldown;
290
- private readonly FOLDER_ERROR_WINDOW_MS;
291
- private readonly FOLDER_ERROR_THRESHOLD;
292
- private shouldSkipFolder;
293
- private recordFolderError;
294
- private clearFolderErrors;
295
- private prefetchBodies;
296
- private _prefetchBodies;
297
- /** Get the body store for direct access */
298
- getBodyStore(): FileMessageStore;
299
- /** Bulk trash messages — local-first, single IMAP connection for all */
300
- trashMessages(accountId: string, messages: {
301
- uid: number;
302
- folderId: number;
303
- }[]): Promise<void>;
304
- /** Bulk move messages — queues the IMAP action only. The service layer
305
- * (MailxService.moveMessages) owns the local DB mutation via
306
- * updateMessageFolder; this method used to ALSO deleteMessage here,
307
- * which wiped the row the service just updated — the message vanished
308
- * on the next reconcile and "spam folder empty" was the symptom. */
309
- moveMessages(accountId: string, messages: {
310
- uid: number;
311
- folderId: number;
312
- }[], targetFolderId: number): Promise<void>;
313
- /** Debounced sync actions — batches rapid local changes into one IMAP operation */
314
- private syncActionTimers;
315
- private debounceSyncActions;
316
- /** Move a message to Trash (delete) — local-first, queues IMAP sync */
317
- trashMessage(accountId: string, folderId: number, uid: number): Promise<void>;
318
- /** Move a message between folders — queues IMAP sync only. Service
319
- * layer owns the local DB update (see MailxService.moveMessage). */
320
- moveMessage(accountId: string, uid: number, fromFolderId: number, toFolderId: number): Promise<void>;
321
- /** Move message across accounts using iflow's moveMessageToServer */
322
- moveMessageCrossAccount(fromAccountId: string, uid: number, fromFolderId: number, toAccountId: string, toFolderId: number): Promise<void>;
323
- /** Undelete — move from Trash back to original folder */
324
- undeleteMessage(accountId: string, uid: number, originalFolderId: number): Promise<void>;
325
- /** Update flags — local-first, queues IMAP sync */
326
- updateFlagsLocal(accountId: string, uid: number, folderId: number, flags: string[]): Promise<void>;
327
- /** Process pending sync actions for an account */
328
- processSyncActions(accountId: string): Promise<void>;
329
- /** Find a folder by specialUse, case-insensitive */
330
- private findFolder;
331
- /** Optimistic local-first Sent insert: write a row into the local DB's
332
- * Sent folder the moment the user hits Send, so the list reflects it
333
- * immediately instead of waiting for SMTP + IMAP-APPEND + syncFolder
334
- * (five server round-trips against a Dovecot that caps at 20 conns).
335
- *
336
- * Uses a synthetic negative UID so it can't collide with a real APPENDUID
337
- * (which is always positive). When the real sync eventually picks the
338
- * message up in Sent with the server's UID, `db.upsertMessage` spots
339
- * the Message-ID match and rebinds the existing row's UID — no duplicate.
340
- * Negative UID also makes the row render pink (getMessages flags uid<0
341
- * as pending) so the user sees it's not-yet-reconciled.
342
- *
343
- * Best-effort — any failure path (no Sent folder yet, parse error, store
344
- * write error) is logged and swallowed; the send itself is unaffected. */
345
- insertOptimisticSentRow(accountId: string, envelope: {
346
- messageId: string;
347
- inReplyTo: string;
348
- references: string[];
349
- subject: string;
350
- from: EmailAddress;
351
- to: EmailAddress[];
352
- cc: EmailAddress[];
353
- bcc: EmailAddress[];
354
- date: number;
355
- }, rawMessage: string): Promise<void>;
356
- /** Copy sent message to the Sent folder via IMAP APPEND */
357
- copyToSent(accountId: string, rawMessage: string | Buffer): Promise<void>;
358
- /** Save a draft to the Drafts folder via IMAP APPEND.
359
- * Returns the UID of the saved draft (for replacing on next save). */
360
- saveDraft(accountId: string, rawMessage: string | Buffer, previousDraftUid?: number, draftId?: string): Promise<number | null>;
361
- /** Delete a draft (or all drafts with a stable X-Mailx-Draft-ID) after successful send.
362
- * Tries the specific UID first, then falls back to searchByHeader so orphaned copies
363
- * from earlier failed autosaves are cleaned up at the same time. */
364
- deleteDraft(accountId: string, draftUid: number, draftId?: string): Promise<void>;
365
- /** Queue outgoing message locally — never fails, worker handles IMAP+SMTP.
366
- * Single path: write `~/.mailx/outbox/<acct>/*.ltr` synchronously, then
367
- * kick processLocalQueue. The file IS the queue — durable across crashes,
368
- * visible in the filesystem, consumed by the existing outbox worker that
369
- * handles both IMAP-APPEND (non-Gmail) and direct SMTP (Gmail). The old
370
- * sync_actions "send" branch was removed because it duplicated the same
371
- * work and risked double-send when both paths fired on the same message. */
372
- queueOutgoingLocal(accountId: string, rawMessage: string): void;
373
- /** Scan the local outbox + sending/queued dirs and return counts + age.
374
- * Cheap — a handful of readdir + head-read per file. Called by both the
375
- * polling UI (status bar) and emitted as an event after queue mutations. */
376
- getOutboxStatus(): OutboxStatus;
377
- /** Emit outboxStatus now. Call after any queue mutation. */
378
- private emitOutboxStatus;
379
- /** Guard against concurrent processSendActions for the same account */
380
- private sendingAccounts;
381
- /** Process local send actions — APPEND to Outbox, which the outbox worker then sends */
382
- private processSendActions;
383
- private _processSendActions;
384
- private outboxInterval;
385
- private readonly hostname;
386
- /** Ensure Outbox folder exists, create if needed */
387
- private ensureOutbox;
388
- /** Save a copy of outgoing mail — label is a subdirectory (editing/queued/sent) */
389
- private saveSendingCopy;
390
- /** Queue a message for sending. Tries IMAP Outbox, falls back to local file. */
391
- queueOutgoing(accountId: string, rawMessage: string | Buffer): Promise<void>;
392
- /** Process local file queue — scan both outbox/ (IMAP-unreachable fallback)
393
- * and sending/<acct>/queued/ (manual drop-in, crash recovery). The earlier
394
- * double-send bug was caused by queueOutgoing() WRITING a debug copy to
395
- * sending/queued/ on every send — that write is gone now, so scanning the
396
- * directory is safe again. Any legitimate files that land there (crash
397
- * recovery, manual drop) will get sent. */
398
- private processLocalQueue;
399
- /** Send a raw RFC 2822 message via SMTP for a given account.
400
- * Uses @bobfrankston/smtp-direct with the same TransportFactory as IMAP —
401
- * same TCP byte-stream interface, no nodemailer dependency. */
402
- private sendRawViaSMTP;
403
- /** Process Outbox — send pending messages with flag-based interlock.
404
- * Each per-UID step is its own withConnection({slow}) call so the queue
405
- * yields between messages: a click-to-view body in the middle of a
406
- * 10-message outbox drain doesn't wait for all 10 to finish. */
407
- processOutbox(accountId: string): Promise<void>;
408
- /** Start background Outbox worker — runs immediately then every 10 seconds */
409
- private outboxBackoff;
410
- private outboxBackoffDelay;
411
- startOutboxWorker(): void;
412
- /** Stop Outbox worker */
413
- stopOutboxWorker(): void;
414
- private configWatchers;
415
- private cloudPollTimers;
416
- /** Watch the local config files for external changes. On change, emit
417
- * configChanged so the UI can show a "restart to apply" banner. Uses
418
- * a debounce to coalesce rapid writes from save tools. */
419
- watchConfigFiles(): void;
420
- /** Stop all config file watchers */
421
- stopWatchingConfig(): void;
422
- /** Per-account in-flight guard so concurrent calls (startup + periodic
423
- * timer + manual button) share one round-trip instead of stacking. */
424
- private contactsSyncing;
425
- /** Get an OAuth token for Google APIs (contacts, calendar, etc.)
426
- * Uses the SAME token as IMAP — scopes are combined in one grant */
427
- private getContactsToken;
428
- /** Sync contacts from Google People API. Incremental: persists
429
- * `nextSyncToken` per account in the kv table (`scope='contacts'`,
430
- * `key=accountId`) so subsequent calls only fetch changed/deleted rows.
431
- * First-ever call passes `requestSyncToken=true` so Google returns a
432
- * token to use next time; without that, the first response has no
433
- * `nextSyncToken` and incremental never kicks in. Returns the number of
434
- * contacts added or removed in this run. */
435
- syncGoogleContacts(accountId: string): Promise<number>;
436
- private syncGoogleContactsImpl;
437
- /** Sync contacts for all OAuth accounts */
438
- syncAllContacts(): Promise<void>;
439
- /** Shut down all watchers and timers */
440
- shutdown(): Promise<void>;
441
- }
442
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"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"}