@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
@@ -0,0 +1,461 @@
1
+ /**
2
+ * SQLite metadata index for mailx.
3
+ * Stores message headers, folder structure, sync state.
4
+ * Message bodies are NOT here -- they live in the MessageStore backend.
5
+ */
6
+ import Database from "better-sqlite3";
7
+ import * as path from "node:path";
8
+ import * as fs from "node:fs";
9
+ const SCHEMA = `
10
+ CREATE TABLE IF NOT EXISTS accounts (
11
+ id TEXT PRIMARY KEY,
12
+ name TEXT NOT NULL,
13
+ email TEXT NOT NULL,
14
+ config_json TEXT NOT NULL,
15
+ last_sync INTEGER DEFAULT 0
16
+ );
17
+
18
+ CREATE TABLE IF NOT EXISTS folders (
19
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
20
+ account_id TEXT NOT NULL REFERENCES accounts(id),
21
+ path TEXT NOT NULL,
22
+ name TEXT NOT NULL,
23
+ special_use TEXT,
24
+ delimiter TEXT DEFAULT '/',
25
+ total_count INTEGER DEFAULT 0,
26
+ unread_count INTEGER DEFAULT 0,
27
+ uidvalidity INTEGER DEFAULT 0,
28
+ highest_modseq TEXT DEFAULT '0',
29
+ UNIQUE(account_id, path)
30
+ );
31
+
32
+ CREATE TABLE IF NOT EXISTS messages (
33
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
34
+ account_id TEXT NOT NULL,
35
+ folder_id INTEGER NOT NULL REFERENCES folders(id),
36
+ uid INTEGER NOT NULL,
37
+ message_id TEXT,
38
+ in_reply_to TEXT,
39
+ refs TEXT,
40
+ date INTEGER NOT NULL,
41
+ subject TEXT DEFAULT '',
42
+ from_address TEXT DEFAULT '',
43
+ from_name TEXT DEFAULT '',
44
+ to_json TEXT DEFAULT '[]',
45
+ cc_json TEXT DEFAULT '[]',
46
+ flags_json TEXT DEFAULT '[]',
47
+ size INTEGER DEFAULT 0,
48
+ has_attachments INTEGER DEFAULT 0,
49
+ preview TEXT DEFAULT '',
50
+ body_path TEXT,
51
+ cached_at INTEGER NOT NULL,
52
+ UNIQUE(account_id, folder_id, uid)
53
+ );
54
+
55
+ CREATE INDEX IF NOT EXISTS idx_messages_folder_date
56
+ ON messages(account_id, folder_id, date DESC);
57
+
58
+ CREATE INDEX IF NOT EXISTS idx_messages_message_id
59
+ ON messages(message_id);
60
+
61
+ CREATE TABLE IF NOT EXISTS queue (
62
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
63
+ status TEXT NOT NULL DEFAULT 'pending',
64
+ created_at INTEGER NOT NULL,
65
+ send_after INTEGER NOT NULL,
66
+ attempts INTEGER DEFAULT 0,
67
+ last_attempt INTEGER DEFAULT 0,
68
+ error TEXT,
69
+ from_account TEXT NOT NULL,
70
+ to_json TEXT NOT NULL,
71
+ cc_json TEXT DEFAULT '[]',
72
+ bcc_json TEXT DEFAULT '[]',
73
+ subject TEXT DEFAULT '',
74
+ body_html TEXT DEFAULT '',
75
+ body_text TEXT DEFAULT '',
76
+ in_reply_to TEXT,
77
+ refs TEXT
78
+ );
79
+
80
+ CREATE TABLE IF NOT EXISTS contacts (
81
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
82
+ source TEXT NOT NULL DEFAULT 'sent',
83
+ google_id TEXT,
84
+ name TEXT DEFAULT '',
85
+ email TEXT NOT NULL,
86
+ organization TEXT DEFAULT '',
87
+ last_used INTEGER DEFAULT 0,
88
+ use_count INTEGER DEFAULT 0,
89
+ updated_at INTEGER NOT NULL,
90
+ UNIQUE(email)
91
+ );
92
+
93
+ CREATE INDEX IF NOT EXISTS idx_contacts_email ON contacts(email);
94
+ CREATE INDEX IF NOT EXISTS idx_contacts_name ON contacts(name);
95
+
96
+ CREATE VIRTUAL TABLE IF NOT EXISTS messages_fts USING fts5(
97
+ subject, from_name, from_address, to_text, cc_text, body_text,
98
+ content=messages, content_rowid=id
99
+ );
100
+
101
+ CREATE TABLE IF NOT EXISTS sync_actions (
102
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
103
+ account_id TEXT NOT NULL,
104
+ action TEXT NOT NULL,
105
+ uid INTEGER,
106
+ folder_id INTEGER,
107
+ target_folder_id INTEGER,
108
+ flags_json TEXT,
109
+ raw_message TEXT,
110
+ created_at INTEGER NOT NULL,
111
+ attempts INTEGER DEFAULT 0,
112
+ last_error TEXT,
113
+ UNIQUE(account_id, action, uid, folder_id)
114
+ );
115
+ `;
116
+ export class MailxDB {
117
+ db;
118
+ constructor(dbDir) {
119
+ fs.mkdirSync(dbDir, { recursive: true });
120
+ const dbPath = path.join(dbDir, "mailx.db");
121
+ this.db = new Database(dbPath);
122
+ this.db.pragma("journal_mode = WAL");
123
+ this.db.pragma("foreign_keys = ON");
124
+ this.db.exec(SCHEMA);
125
+ }
126
+ close() {
127
+ this.db.close();
128
+ }
129
+ // ── Accounts ──
130
+ upsertAccount(id, name, email, configJson) {
131
+ this.db.prepare(`
132
+ INSERT INTO accounts (id, name, email, config_json)
133
+ VALUES (?, ?, ?, ?)
134
+ ON CONFLICT(id) DO UPDATE SET name=?, email=?, config_json=?
135
+ `).run(id, name, email, configJson, name, email, configJson);
136
+ }
137
+ getAccounts() {
138
+ return this.db.prepare("SELECT id, name, email, last_sync as lastSync FROM accounts").all();
139
+ }
140
+ updateLastSync(accountId, timestamp) {
141
+ this.db.prepare("UPDATE accounts SET last_sync = ? WHERE id = ?").run(timestamp, accountId);
142
+ }
143
+ // ── Folders ──
144
+ upsertFolder(accountId, folderPath, name, specialUse, delimiter) {
145
+ const existing = this.db.prepare("SELECT id FROM folders WHERE account_id = ? AND path = ?").get(accountId, folderPath);
146
+ if (existing) {
147
+ this.db.prepare("UPDATE folders SET name = ?, special_use = ?, delimiter = ? WHERE id = ?").run(name, specialUse, delimiter, existing.id);
148
+ return existing.id;
149
+ }
150
+ const result = this.db.prepare("INSERT INTO folders (account_id, path, name, special_use, delimiter) VALUES (?, ?, ?, ?, ?)").run(accountId, folderPath, name, specialUse, delimiter);
151
+ return Number(result.lastInsertRowid);
152
+ }
153
+ getFolders(accountId) {
154
+ const rows = this.db.prepare("SELECT * FROM folders WHERE account_id = ? ORDER BY path").all(accountId);
155
+ return rows.map(r => ({
156
+ id: r.id,
157
+ accountId: r.account_id,
158
+ path: r.path,
159
+ name: r.name,
160
+ specialUse: r.special_use,
161
+ delimiter: r.delimiter,
162
+ totalCount: r.total_count,
163
+ unreadCount: r.unread_count,
164
+ children: []
165
+ }));
166
+ }
167
+ deleteFolder(folderId) {
168
+ this.db.prepare("DELETE FROM messages WHERE folder_id = ?").run(folderId);
169
+ this.db.prepare("DELETE FROM folders WHERE id = ?").run(folderId);
170
+ }
171
+ updateFolderCounts(folderId, total, unread) {
172
+ this.db.prepare("UPDATE folders SET total_count = ?, unread_count = ? WHERE id = ?").run(total, unread, folderId);
173
+ }
174
+ updateFolderSync(folderId, uidvalidity, highestModseq) {
175
+ this.db.prepare("UPDATE folders SET uidvalidity = ?, highest_modseq = ? WHERE id = ?").run(uidvalidity, highestModseq, folderId);
176
+ }
177
+ getFolderSync(folderId) {
178
+ const row = this.db.prepare("SELECT uidvalidity, highest_modseq as highestModseq FROM folders WHERE id = ?").get(folderId);
179
+ return row || { uidvalidity: 0, highestModseq: "0" };
180
+ }
181
+ // ── Messages ──
182
+ upsertMessage(msg) {
183
+ const existing = this.db.prepare("SELECT id FROM messages WHERE account_id = ? AND folder_id = ? AND uid = ?").get(msg.accountId, msg.folderId, msg.uid);
184
+ if (existing) {
185
+ this.db.prepare(`
186
+ UPDATE messages SET flags_json = ?, preview = ?, body_path = ?, cached_at = ?
187
+ WHERE id = ?
188
+ `).run(JSON.stringify(msg.flags), msg.preview, msg.bodyPath, Date.now(), existing.id);
189
+ return existing.id;
190
+ }
191
+ const toText = msg.to.map(a => `${a.name} ${a.address}`).join(" ");
192
+ const ccText = msg.cc.map(a => `${a.name} ${a.address}`).join(" ");
193
+ const result = this.db.prepare(`
194
+ INSERT INTO messages (
195
+ account_id, folder_id, uid, message_id, in_reply_to, refs,
196
+ date, subject, from_address, from_name, to_json, cc_json,
197
+ flags_json, size, has_attachments, preview, body_path, cached_at
198
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
199
+ `).run(msg.accountId, msg.folderId, msg.uid, msg.messageId, msg.inReplyTo, JSON.stringify(msg.references), msg.date, msg.subject, msg.from.address, msg.from.name, JSON.stringify(msg.to), JSON.stringify(msg.cc), JSON.stringify(msg.flags), msg.size, msg.hasAttachments ? 1 : 0, msg.preview, msg.bodyPath, Date.now());
200
+ const rowId = Number(result.lastInsertRowid);
201
+ // Index for full-text search
202
+ try {
203
+ this.db.prepare("INSERT INTO messages_fts (rowid, subject, from_name, from_address, to_text, cc_text, body_text) VALUES (?, ?, ?, ?, ?, ?, ?)").run(rowId, msg.subject, msg.from.name, msg.from.address, toText, ccText, msg.preview);
204
+ }
205
+ catch { /* FTS insert may fail on rebuild, non-fatal */ }
206
+ return rowId;
207
+ }
208
+ getMessages(query) {
209
+ const page = query.page || 1;
210
+ const pageSize = query.pageSize || 50;
211
+ const offset = (page - 1) * pageSize;
212
+ const sort = query.sort || "date";
213
+ const sortDir = query.sortDir || "desc";
214
+ const sortCol = sort === "from" ? "from_name" : sort === "subject" ? "subject" : "date";
215
+ let where = "account_id = ? AND folder_id = ?";
216
+ const params = [query.accountId, query.folderId];
217
+ if (query.search) {
218
+ where += " AND (subject LIKE ? OR from_name LIKE ? OR from_address LIKE ?)";
219
+ const term = `%${query.search}%`;
220
+ params.push(term, term, term);
221
+ }
222
+ const total = this.db.prepare(`SELECT COUNT(*) as cnt FROM messages WHERE ${where}`).get(...params).cnt;
223
+ const rows = this.db.prepare(`SELECT * FROM messages WHERE ${where} ORDER BY ${sortCol} ${sortDir} LIMIT ? OFFSET ?`).all(...params, pageSize, offset);
224
+ const items = rows.map(r => ({
225
+ id: r.id,
226
+ accountId: r.account_id,
227
+ folderId: r.folder_id,
228
+ uid: r.uid,
229
+ messageId: r.message_id || "",
230
+ inReplyTo: r.in_reply_to || "",
231
+ references: JSON.parse(r.refs || "[]"),
232
+ date: r.date,
233
+ subject: r.subject,
234
+ from: { name: r.from_name, address: r.from_address },
235
+ to: JSON.parse(r.to_json),
236
+ cc: JSON.parse(r.cc_json),
237
+ flags: JSON.parse(r.flags_json),
238
+ size: r.size,
239
+ hasAttachments: !!r.has_attachments,
240
+ preview: r.preview
241
+ }));
242
+ return { items, total, page, pageSize };
243
+ }
244
+ getMessageByUid(accountId, uid) {
245
+ const r = this.db.prepare("SELECT * FROM messages WHERE account_id = ? AND uid = ?").get(accountId, uid);
246
+ if (!r)
247
+ return null;
248
+ return {
249
+ id: r.id,
250
+ accountId: r.account_id,
251
+ folderId: r.folder_id,
252
+ uid: r.uid,
253
+ messageId: r.message_id || "",
254
+ inReplyTo: r.in_reply_to || "",
255
+ references: JSON.parse(r.refs || "[]"),
256
+ date: r.date,
257
+ subject: r.subject,
258
+ from: { name: r.from_name, address: r.from_address },
259
+ to: JSON.parse(r.to_json),
260
+ cc: JSON.parse(r.cc_json),
261
+ flags: JSON.parse(r.flags_json),
262
+ size: r.size,
263
+ hasAttachments: !!r.has_attachments,
264
+ preview: r.preview
265
+ };
266
+ }
267
+ getMessageBodyPath(accountId, uid) {
268
+ const r = this.db.prepare("SELECT body_path FROM messages WHERE account_id = ? AND uid = ?").get(accountId, uid);
269
+ return r?.body_path || "";
270
+ }
271
+ updateMessageFlags(accountId, uid, flags) {
272
+ this.db.prepare("UPDATE messages SET flags_json = ? WHERE account_id = ? AND uid = ?").run(JSON.stringify(flags), accountId, uid);
273
+ }
274
+ getHighestUid(accountId, folderId) {
275
+ const r = this.db.prepare("SELECT MAX(uid) as maxUid FROM messages WHERE account_id = ? AND folder_id = ?").get(accountId, folderId);
276
+ return r?.maxUid || 0;
277
+ }
278
+ /** Get all UIDs for a folder */
279
+ getUidsForFolder(accountId, folderId) {
280
+ const rows = this.db.prepare("SELECT uid FROM messages WHERE account_id = ? AND folder_id = ?").all(accountId, folderId);
281
+ return rows.map(r => r.uid);
282
+ }
283
+ /** Delete a message by account + UID */
284
+ deleteMessage(accountId, uid) {
285
+ this.db.prepare("DELETE FROM messages WHERE account_id = ? AND uid = ?").run(accountId, uid);
286
+ }
287
+ /** Bulk insert within a transaction for sync performance */
288
+ beginTransaction() { this.db.exec("BEGIN"); }
289
+ commitTransaction() { this.db.exec("COMMIT"); }
290
+ rollbackTransaction() { this.db.exec("ROLLBACK"); }
291
+ // ── Contacts ──
292
+ /** Record an address used in sent mail */
293
+ recordSentAddress(name, email) {
294
+ const now = Date.now();
295
+ const existing = this.db.prepare("SELECT id FROM contacts WHERE email = ?").get(email);
296
+ if (existing) {
297
+ this.db.prepare("UPDATE contacts SET name = CASE WHEN ? != '' THEN ? ELSE name END, last_used = ?, use_count = use_count + 1, updated_at = ? WHERE email = ?").run(name, name, now, now, email);
298
+ }
299
+ else {
300
+ this.db.prepare("INSERT INTO contacts (source, name, email, last_used, use_count, updated_at) VALUES ('sent', ?, ?, ?, 1, ?)").run(name, email, now, now);
301
+ }
302
+ }
303
+ /** Seed contacts from all message senders in the DB */
304
+ seedContactsFromMessages() {
305
+ const now = Date.now();
306
+ const rows = this.db.prepare(`SELECT from_name, from_address, COUNT(*) as cnt, MAX(date) as last
307
+ FROM messages
308
+ WHERE from_address != ''
309
+ GROUP BY from_address`).all();
310
+ let added = 0;
311
+ for (const r of rows) {
312
+ const existing = this.db.prepare("SELECT id FROM contacts WHERE email = ?").get(r.from_address);
313
+ if (!existing) {
314
+ this.db.prepare("INSERT INTO contacts (source, name, email, last_used, use_count, updated_at) VALUES ('received', ?, ?, ?, ?, ?)").run(r.from_name || "", r.from_address, r.last, r.cnt, now);
315
+ added++;
316
+ }
317
+ }
318
+ return added;
319
+ }
320
+ /** Search contacts by name or email prefix */
321
+ searchContacts(query, limit = 10) {
322
+ const q = `%${query}%`;
323
+ const rows = this.db.prepare(`SELECT name, email, source, use_count FROM contacts
324
+ WHERE email LIKE ? OR name LIKE ?
325
+ ORDER BY use_count DESC, last_used DESC
326
+ LIMIT ?`).all(q, q, limit);
327
+ return rows.map(r => ({ name: r.name, email: r.email, source: r.source, useCount: r.use_count }));
328
+ }
329
+ // ── Search ──
330
+ /** Full-text search across all messages. Supports qualifiers: from:, to:, subject: */
331
+ searchMessages(query, page = 1, pageSize = 50) {
332
+ // Parse qualifiers
333
+ let ftsQuery = "";
334
+ const parts = query.match(/(?:[^\s"]+|"[^"]*")+/g) || [];
335
+ for (const part of parts) {
336
+ const fromMatch = part.match(/^from:(.+)$/i);
337
+ const toMatch = part.match(/^to:(.+)$/i);
338
+ const subjectMatch = part.match(/^subject:(.+)$/i);
339
+ if (fromMatch) {
340
+ const term = fromMatch[1].replace(/"/g, "");
341
+ ftsQuery += `(from_name:${term} OR from_address:${term}) `;
342
+ }
343
+ else if (toMatch) {
344
+ const term = toMatch[1].replace(/"/g, "");
345
+ ftsQuery += `(to_text:${term} OR cc_text:${term}) `;
346
+ }
347
+ else if (subjectMatch) {
348
+ const term = subjectMatch[1].replace(/"/g, "");
349
+ ftsQuery += `subject:${term} `;
350
+ }
351
+ else {
352
+ // Unqualified — search everything
353
+ ftsQuery += `${part}* `;
354
+ }
355
+ }
356
+ ftsQuery = ftsQuery.trim();
357
+ if (!ftsQuery)
358
+ return { items: [], total: 0, page, pageSize };
359
+ const offset = (page - 1) * pageSize;
360
+ try {
361
+ const countRow = this.db.prepare("SELECT COUNT(*) as cnt FROM messages_fts WHERE messages_fts MATCH ?").get(ftsQuery);
362
+ const total = countRow?.cnt || 0;
363
+ const rows = this.db.prepare(`SELECT m.* FROM messages m
364
+ JOIN messages_fts fts ON m.id = fts.rowid
365
+ WHERE messages_fts MATCH ?
366
+ ORDER BY m.date DESC
367
+ LIMIT ? OFFSET ?`).all(ftsQuery, pageSize, offset);
368
+ const items = rows.map(r => ({
369
+ id: r.id,
370
+ accountId: r.account_id,
371
+ folderId: r.folder_id,
372
+ uid: r.uid,
373
+ messageId: r.message_id || "",
374
+ inReplyTo: r.in_reply_to || "",
375
+ references: JSON.parse(r.refs || "[]"),
376
+ date: r.date,
377
+ subject: r.subject,
378
+ from: { name: r.from_name, address: r.from_address },
379
+ to: JSON.parse(r.to_json),
380
+ cc: JSON.parse(r.cc_json),
381
+ flags: JSON.parse(r.flags_json),
382
+ size: r.size,
383
+ hasAttachments: !!r.has_attachments,
384
+ preview: r.preview
385
+ }));
386
+ return { items, total, page, pageSize };
387
+ }
388
+ catch (e) {
389
+ console.error(`Search error: ${e.message}`);
390
+ return { items: [], total: 0, page, pageSize };
391
+ }
392
+ }
393
+ /** Rebuild FTS index from existing messages */
394
+ rebuildSearchIndex() {
395
+ // Drop and recreate in case schema changed
396
+ try {
397
+ this.db.exec("DROP TABLE IF EXISTS messages_fts");
398
+ }
399
+ catch { /* ignore */ }
400
+ this.db.exec(`CREATE VIRTUAL TABLE IF NOT EXISTS messages_fts USING fts5(
401
+ subject, from_name, from_address, to_text, cc_text, body_text,
402
+ content=messages, content_rowid=id
403
+ )`);
404
+ const rows = this.db.prepare("SELECT id, subject, from_name, from_address, to_json, cc_json, preview FROM messages").all();
405
+ let count = 0;
406
+ for (const r of rows) {
407
+ const to = JSON.parse(r.to_json || "[]");
408
+ const cc = JSON.parse(r.cc_json || "[]");
409
+ const toText = to.map((a) => `${a.name} ${a.address}`).join(" ");
410
+ const ccText = cc.map((a) => `${a.name} ${a.address}`).join(" ");
411
+ try {
412
+ this.db.prepare("INSERT INTO messages_fts (rowid, subject, from_name, from_address, to_text, cc_text, body_text) VALUES (?, ?, ?, ?, ?, ?, ?)").run(r.id, r.subject, r.from_name, r.from_address, toText, ccText, r.preview);
413
+ count++;
414
+ }
415
+ catch { /* skip duplicates */ }
416
+ }
417
+ return count;
418
+ }
419
+ // ── Sync Actions ──
420
+ /** Queue a local action for later sync to IMAP */
421
+ queueSyncAction(accountId, action, uid, folderId, extra) {
422
+ try {
423
+ this.db.prepare(`INSERT OR REPLACE INTO sync_actions (account_id, action, uid, folder_id, target_folder_id, flags_json, raw_message, created_at)
424
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?)`).run(accountId, action, uid, folderId, extra?.targetFolderId || null, extra?.flags ? JSON.stringify(extra.flags) : null, extra?.rawMessage || null, Date.now());
425
+ }
426
+ catch { /* UNIQUE constraint — already queued */ }
427
+ }
428
+ /** Get all pending sync actions for an account */
429
+ getPendingSyncActions(accountId) {
430
+ const rows = this.db.prepare("SELECT * FROM sync_actions WHERE account_id = ? ORDER BY created_at").all(accountId);
431
+ return rows.map(r => ({
432
+ id: r.id,
433
+ action: r.action,
434
+ uid: r.uid,
435
+ folderId: r.folder_id,
436
+ targetFolderId: r.target_folder_id,
437
+ flags: r.flags_json ? JSON.parse(r.flags_json) : [],
438
+ rawMessage: r.raw_message,
439
+ attempts: r.attempts,
440
+ }));
441
+ }
442
+ /** Remove a completed sync action */
443
+ completeSyncAction(id) {
444
+ this.db.prepare("DELETE FROM sync_actions WHERE id = ?").run(id);
445
+ }
446
+ /** Mark a sync action as failed */
447
+ failSyncAction(id, error) {
448
+ this.db.prepare("UPDATE sync_actions SET attempts = attempts + 1, last_error = ? WHERE id = ?").run(error, id);
449
+ }
450
+ /** Count pending sync actions for an account */
451
+ getPendingSyncCount(accountId) {
452
+ const r = this.db.prepare("SELECT COUNT(*) as cnt FROM sync_actions WHERE account_id = ?").get(accountId);
453
+ return r?.cnt || 0;
454
+ }
455
+ /** Count total pending sync actions across all accounts */
456
+ getTotalPendingSyncCount() {
457
+ const r = this.db.prepare("SELECT COUNT(*) as cnt FROM sync_actions").get();
458
+ return r?.cnt || 0;
459
+ }
460
+ }
461
+ //# sourceMappingURL=db.js.map
@@ -0,0 +1,22 @@
1
+ /**
2
+ * File-per-message body storage backend.
3
+ * Messages stored as: {basePath}/{accountId}/{folderName}/{uid}.eml
4
+ * Legacy: also checks {basePath}/{accountId}/{folderId}/{uid}.eml
5
+ */
6
+ import type { MessageStore } from "@bobfrankston/mailx-types";
7
+ export declare class FileMessageStore implements MessageStore {
8
+ private basePath;
9
+ private folderNames;
10
+ constructor(basePath: string);
11
+ /** Register folder ID → path mapping for human-readable directory names */
12
+ registerFolder(folderId: number, folderPath: string): void;
13
+ private folderDir;
14
+ private messagePath;
15
+ /** Check legacy path (numeric folder ID) */
16
+ private legacyPath;
17
+ putMessage(accountId: string, folderId: number, uid: number, raw: Buffer): Promise<string>;
18
+ getMessage(accountId: string, folderId: number, uid: number): Promise<Buffer>;
19
+ deleteMessage(accountId: string, folderId: number, uid: number): Promise<void>;
20
+ hasMessage(accountId: string, folderId: number, uid: number): Promise<boolean>;
21
+ }
22
+ //# sourceMappingURL=file-store.d.ts.map
@@ -0,0 +1,59 @@
1
+ /**
2
+ * File-per-message body storage backend.
3
+ * Messages stored as: {basePath}/{accountId}/{folderName}/{uid}.eml
4
+ * Legacy: also checks {basePath}/{accountId}/{folderId}/{uid}.eml
5
+ */
6
+ import * as fs from "node:fs";
7
+ import * as path from "node:path";
8
+ /** Sanitize folder path for use as directory name — replace delimiters with _ */
9
+ function sanitizeFolderName(folderPath) {
10
+ return folderPath.replace(/[\/\\.:]/g, "_");
11
+ }
12
+ export class FileMessageStore {
13
+ basePath;
14
+ folderNames = new Map();
15
+ constructor(basePath) {
16
+ this.basePath = basePath;
17
+ fs.mkdirSync(basePath, { recursive: true });
18
+ }
19
+ /** Register folder ID → path mapping for human-readable directory names */
20
+ registerFolder(folderId, folderPath) {
21
+ this.folderNames.set(folderId, sanitizeFolderName(folderPath));
22
+ }
23
+ folderDir(accountId, folderId) {
24
+ const name = this.folderNames.get(folderId) || String(folderId);
25
+ return path.join(this.basePath, accountId, name);
26
+ }
27
+ messagePath(accountId, folderId, uid) {
28
+ return path.join(this.folderDir(accountId, folderId), `${uid}.eml`);
29
+ }
30
+ /** Check legacy path (numeric folder ID) */
31
+ legacyPath(accountId, folderId, uid) {
32
+ return path.join(this.basePath, accountId, String(folderId), `${uid}.eml`);
33
+ }
34
+ async putMessage(accountId, folderId, uid, raw) {
35
+ const filePath = this.messagePath(accountId, folderId, uid);
36
+ fs.mkdirSync(path.dirname(filePath), { recursive: true });
37
+ fs.writeFileSync(filePath, raw);
38
+ return filePath;
39
+ }
40
+ async getMessage(accountId, folderId, uid) {
41
+ const filePath = this.messagePath(accountId, folderId, uid);
42
+ if (fs.existsSync(filePath))
43
+ return fs.readFileSync(filePath);
44
+ // Fallback to legacy path
45
+ const legacy = this.legacyPath(accountId, folderId, uid);
46
+ return fs.readFileSync(legacy);
47
+ }
48
+ async deleteMessage(accountId, folderId, uid) {
49
+ for (const p of [this.messagePath(accountId, folderId, uid), this.legacyPath(accountId, folderId, uid)]) {
50
+ if (fs.existsSync(p))
51
+ fs.unlinkSync(p);
52
+ }
53
+ }
54
+ async hasMessage(accountId, folderId, uid) {
55
+ return fs.existsSync(this.messagePath(accountId, folderId, uid)) ||
56
+ fs.existsSync(this.legacyPath(accountId, folderId, uid));
57
+ }
58
+ }
59
+ //# sourceMappingURL=file-store.js.map
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @bobfrankston/mailx-store
3
+ * Two-layer storage: SQLite metadata index + pluggable body backend.
4
+ */
5
+ export { MailxDB } from "./db.js";
6
+ export { FileMessageStore } from "./file-store.js";
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @bobfrankston/mailx-store
3
+ * Two-layer storage: SQLite metadata index + pluggable body backend.
4
+ */
5
+ export { MailxDB } from "./db.js";
6
+ export { FileMessageStore } from "./file-store.js";
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,19 @@
1
+ {
2
+ "name": "@bobfrankston/mailx-store",
3
+ "version": "0.1.0",
4
+ "type": "module",
5
+ "main": "index.js",
6
+ "types": "index.d.ts",
7
+ "scripts": {
8
+ "build": "tsc"
9
+ },
10
+ "license": "ISC",
11
+ "dependencies": {
12
+ "@bobfrankston/mailx-types": "file:../mailx-types",
13
+ "@bobfrankston/mailx-settings": "file:../mailx-settings",
14
+ "better-sqlite3": "^11.7.0"
15
+ },
16
+ "devDependencies": {
17
+ "@types/better-sqlite3": "^7.6.12"
18
+ }
19
+ }
@@ -0,0 +1 @@
1
+ {"root":["./db.ts","./file-store.ts","./index.ts"],"version":"5.9.2"}