@wirecat/mail-cli 0.5.0 → 0.7.0

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 (296) hide show
  1. package/CHANGELOG.md +149 -0
  2. package/README.md +48 -13
  3. package/dist/bin/mail.js +2 -2
  4. package/dist/bundle/{all-profiles-GR5JXYEQ.js → all-profiles-SI67TKZM.js} +9 -9
  5. package/dist/bundle/{anthropic-REBXE65F.js → anthropic-DALMLC3Y.js} +6 -6
  6. package/dist/bundle/{app-server-QJ7ICQXZ.js → app-server-XOH327Z2.js} +46 -46
  7. package/dist/bundle/{bun-WAX4QHW5.js → bun-ORL67CJ6.js} +2 -2
  8. package/dist/bundle/{bun-sqlite-5S7TQ4SG.js → bun-sqlite-DGXFNFHI.js} +5 -5
  9. package/dist/bundle/{chunk-ZD3WUGR2.js → chunk-23IEVVL2.js} +4 -4
  10. package/dist/bundle/{chunk-B5WSIWY5.js → chunk-2M4K7HYR.js} +17 -17
  11. package/dist/bundle/{chunk-IWDOGGMY.js → chunk-35KD2CI2.js} +501 -301
  12. package/dist/bundle/{chunk-7A7BHABA.js → chunk-3GZK5GTU.js} +1 -1
  13. package/dist/bundle/{chunk-JJBQPA7D.js → chunk-3TYEJRMZ.js} +4 -4
  14. package/dist/bundle/{chunk-M6BDHZON.js → chunk-45KA5667.js} +26 -13
  15. package/dist/bundle/{chunk-LOA4X6JW.js → chunk-4NYWHINR.js} +6 -6
  16. package/dist/bundle/{dist-KJOAJ6NF.js → chunk-4ULY3GDL.js} +16 -116
  17. package/dist/bundle/{chunk-2FXVBCA3.js → chunk-5BSEGMNE.js} +4 -4
  18. package/dist/bundle/{chunk-HCMUGUAG.js → chunk-5JEYIHS6.js} +3 -3
  19. package/dist/bundle/{chunk-QXOSGGKS.js → chunk-6LK7KTWB.js} +1 -1
  20. package/dist/bundle/{chunk-ESNNQA7D.js → chunk-6RMMAUUW.js} +28 -28
  21. package/dist/bundle/{chunk-VXAZZGXE.js → chunk-6XNPXAJU.js} +33 -27
  22. package/dist/bundle/{chunk-5INWLYBD.js → chunk-73OJJGZE.js} +14 -3
  23. package/dist/bundle/{chunk-4XJ4AM3K.js → chunk-7K6KJWTO.js} +12 -12
  24. package/dist/bundle/{chunk-KIDF77MA.js → chunk-AP7V256W.js} +1 -1
  25. package/dist/bundle/{chunk-4BMNP2FT.js → chunk-BEMLGWY4.js} +1 -1
  26. package/dist/bundle/{chunk-BFJV4FWJ.js → chunk-BGUMGCUY.js} +2 -2
  27. package/dist/bundle/{chunk-5BVIWP3S.js → chunk-BM445GYF.js} +2 -2
  28. package/dist/bundle/{chunk-F3NYA4KN.js → chunk-CAKBG5FC.js} +6 -6
  29. package/dist/bundle/{chunk-EB3R2PV3.js → chunk-DKQWTQVY.js} +23 -23
  30. package/dist/bundle/{chunk-6TY3DGCC.js → chunk-DXGMPMFP.js} +4 -4
  31. package/dist/bundle/{chunk-LFRHIXCF.js → chunk-E3DRM6YP.js} +3 -3
  32. package/dist/bundle/{chunk-FSUNGHRI.js → chunk-EYT33MM3.js} +47 -46
  33. package/dist/bundle/{chunk-DXDQOZ2P.js → chunk-FPOGVDLS.js} +2 -2
  34. package/dist/bundle/{chunk-S677WGOQ.js → chunk-FTFNWGIR.js} +8 -8
  35. package/dist/bundle/{chunk-TI6VBZKJ.js → chunk-FUB3X25H.js} +4 -4
  36. package/dist/bundle/{chunk-7JCRQX56.js → chunk-GJUUTUK4.js} +8 -8
  37. package/dist/bundle/{chunk-BLS5YG77.js → chunk-HFJNEXU7.js} +2 -2
  38. package/dist/bundle/{chunk-YKPBC3NL.js → chunk-HV3EIYX4.js} +1 -1
  39. package/dist/bundle/{chunk-EL554DV2.js → chunk-IYZHM3ZN.js} +3 -3
  40. package/dist/bundle/{chunk-6EO7GVYJ.js → chunk-JFMUI4H6.js} +1 -1
  41. package/dist/bundle/{chunk-2YQNBIDQ.js → chunk-LZ5J3UXD.js} +4 -4
  42. package/dist/bundle/{chunk-WNCCYHRV.js → chunk-M2JCUVCJ.js} +116 -95
  43. package/dist/bundle/{chunk-7F3NDIYL.js → chunk-MCJ7LKYR.js} +6 -6
  44. package/dist/bundle/{chunk-VDAIJM5L.js → chunk-MHQKHWCJ.js} +88 -34
  45. package/dist/bundle/{chunk-SQ7KOBRA.js → chunk-MMXMVGA6.js} +10 -8
  46. package/dist/bundle/{chunk-AFCGOZR7.js → chunk-NNIXREJH.js} +7 -7
  47. package/dist/bundle/{chunk-LQ37ALDJ.js → chunk-NXJLC2WK.js} +8 -8
  48. package/dist/bundle/{chunk-6GE3EADU.js → chunk-OHTR4WFO.js} +2 -2
  49. package/dist/bundle/{chunk-PJCTWPJB.js → chunk-PDL4UREY.js} +8 -8
  50. package/dist/bundle/{chunk-J3QXTBD2.js → chunk-Q2C3VMSU.js} +20 -18
  51. package/dist/bundle/{chunk-SWJAG5IE.js → chunk-Q44AYEOB.js} +2 -2
  52. package/dist/bundle/{chunk-P7P5MNAU.js → chunk-QZBT6BOU.js} +1 -1
  53. package/dist/bundle/{chunk-IBYTYIYO.js → chunk-R5MML3FC.js} +61 -54
  54. package/dist/bundle/{chunk-CEAANMJ2.js → chunk-RQVWZBW3.js} +3 -3
  55. package/dist/bundle/{chunk-5CXAH4Y6.js → chunk-S4YUR4S3.js} +656 -572
  56. package/dist/bundle/{chunk-QX7RCLRS.js → chunk-SQLCCKEL.js} +1 -1
  57. package/dist/bundle/chunk-U6UJ3HRS.js +58 -0
  58. package/dist/bundle/{chunk-YRGBZZUW.js → chunk-V4TDG4KF.js} +14 -14
  59. package/dist/bundle/{chunk-5FK6RD4M.js → chunk-VBOMKZ4E.js} +73 -57
  60. package/dist/bundle/{chunk-MQUJEQTU.js → chunk-VKPWP3AK.js} +2 -2
  61. package/dist/bundle/{chunk-7XNPSIWD.js → chunk-VNJMO5F6.js} +2 -2
  62. package/dist/bundle/{chunk-MMDCL42A.js → chunk-VSHJWTX5.js} +12 -6
  63. package/dist/bundle/{chunk-2MRECWJZ.js → chunk-XQJWMBDY.js} +6 -6
  64. package/dist/bundle/{chunk-2U4IANVV.js → chunk-ZKCNMW7G.js} +2 -2
  65. package/dist/bundle/{chunk-LNS27BTB.js → chunk-ZKZABB4K.js} +3 -3
  66. package/dist/bundle/{chunk-WNI5BZFB.js → chunk-ZNGQ3NZ4.js} +9 -9
  67. package/dist/bundle/command-contract-CB5BII3S.js +34 -0
  68. package/dist/bundle/{decode-D7BDVIVB.js → decode-KOBURZIQ.js} +5 -5
  69. package/dist/bundle/{dispatch-EUKKT3PD.js → dispatch-GDAH4JHS.js} +8 -8
  70. package/dist/bundle/dist-T7HMT675.js +134 -0
  71. package/dist/bundle/{echarts-IVRX7XHP.js → echarts-LEWTQO6H.js} +2 -2
  72. package/dist/bundle/{embed-X527RBTG.js → embed-PUFE4BSQ.js} +6 -6
  73. package/dist/bundle/{embedder-F4PSJS6S.js → embedder-3G4BQQ6X.js} +9 -9
  74. package/dist/bundle/{failure-OAIC5VAP.js → failure-6COJAO7T.js} +2 -2
  75. package/dist/bundle/{first-run-M5CIX6NA.js → first-run-FLXOC53U.js} +11 -11
  76. package/dist/bundle/first-screen-VUZEDSQW.js +32 -0
  77. package/dist/bundle/{instructions-UX36BT5F.js → instructions-HGSXDCBT.js} +1 -1
  78. package/dist/bundle/mail.js +12 -11
  79. package/dist/bundle/{mcp-L7SRVDRN.js → mcp-GAPDLFWA.js} +2 -2
  80. package/dist/bundle/{node-OXT7WE2T.js → node-5Z7PS4F5.js} +2 -2
  81. package/dist/bundle/{node-sqlite-X2PSEHA4.js → node-sqlite-OAW7APIX.js} +5 -5
  82. package/dist/bundle/{oauth-MYK4BSYN.js → oauth-ZFZWPAJN.js} +7 -7
  83. package/dist/bundle/{open-GONIP2DH.js → open-ZQMBZVH4.js} +4 -4
  84. package/dist/bundle/{openai-YJFNUOQT.js → openai-XT2RIXAK.js} +14 -14
  85. package/dist/bundle/{process-7IEUUSRK.js → process-VVEQIHPE.js} +1 -1
  86. package/dist/bundle/{program-Q73TTG3E.js → program-RD3BBDNY.js} +21470 -7075
  87. package/dist/bundle/{prompt-SKQ72KN7.js → prompt-PU7GE4Z4.js} +5 -5
  88. package/dist/bundle/{recognize-GC7CU2DB.js → recognize-AG4A3KUK.js} +4 -4
  89. package/dist/bundle/{remote-UEXFZP2I.js → remote-D6TQ6T7F.js} +7 -7
  90. package/dist/bundle/{rerank-2U2NDEZP.js → rerank-GO24HJPF.js} +7 -7
  91. package/dist/bundle/{serve-OOGKFEWL.js → serve-WCHJAH6G.js} +9 -9
  92. package/dist/bundle/server-5KJJ3D6P.js +63 -0
  93. package/dist/bundle/{server-FZ3LFQTF.js → server-CAVNBG3P.js} +38 -38
  94. package/dist/bundle/{sqlite-runtime-GIQSW6LJ.js → sqlite-runtime-ANXC4AW2.js} +5 -5
  95. package/dist/bundle/{state-EMFXPQVZ.js → state-EGJ66A62.js} +6 -6
  96. package/dist/bundle/{store-BDU4UPNK.js → store-OON7FCMQ.js} +15 -15
  97. package/dist/bundle/{store-LDI62AUG.js → store-SBFA444C.js} +13 -13
  98. package/dist/bundle/store-maintenance-command-UEOJLYMJ.js +52 -0
  99. package/dist/commands/attachments.d.ts +3 -0
  100. package/dist/commands/attachments.d.ts.map +1 -0
  101. package/dist/commands/attachments.js +97 -0
  102. package/dist/commands/attachments.js.map +1 -0
  103. package/dist/commands/context.d.ts +21 -6
  104. package/dist/commands/context.d.ts.map +1 -1
  105. package/dist/commands/context.js +58 -7
  106. package/dist/commands/context.js.map +1 -1
  107. package/dist/commands/drafts-send.d.ts +7 -0
  108. package/dist/commands/drafts-send.d.ts.map +1 -0
  109. package/dist/commands/drafts-send.js +58 -0
  110. package/dist/commands/drafts-send.js.map +1 -0
  111. package/dist/commands/drafts.d.ts +3 -0
  112. package/dist/commands/drafts.d.ts.map +1 -0
  113. package/dist/commands/drafts.js +243 -0
  114. package/dist/commands/drafts.js.map +1 -0
  115. package/dist/commands/export.d.ts +3 -0
  116. package/dist/commands/export.d.ts.map +1 -0
  117. package/dist/commands/export.js +278 -0
  118. package/dist/commands/export.js.map +1 -0
  119. package/dist/commands/folders.d.ts.map +1 -1
  120. package/dist/commands/folders.js +120 -2
  121. package/dist/commands/folders.js.map +1 -1
  122. package/dist/commands/messages.d.ts +25 -0
  123. package/dist/commands/messages.d.ts.map +1 -0
  124. package/dist/commands/messages.js +506 -0
  125. package/dist/commands/messages.js.map +1 -0
  126. package/dist/commands/read.d.ts +4 -1
  127. package/dist/commands/read.d.ts.map +1 -1
  128. package/dist/commands/read.js +14 -3
  129. package/dist/commands/read.js.map +1 -1
  130. package/dist/commands/rules.d.ts +3 -0
  131. package/dist/commands/rules.d.ts.map +1 -0
  132. package/dist/commands/rules.js +292 -0
  133. package/dist/commands/rules.js.map +1 -0
  134. package/dist/commands/send.d.ts +39 -0
  135. package/dist/commands/send.d.ts.map +1 -0
  136. package/dist/commands/send.js +309 -0
  137. package/dist/commands/send.js.map +1 -0
  138. package/dist/commands/server-search.d.ts +8 -0
  139. package/dist/commands/server-search.d.ts.map +1 -0
  140. package/dist/commands/server-search.js +38 -0
  141. package/dist/commands/server-search.js.map +1 -0
  142. package/dist/commands/session-start.d.ts.map +1 -1
  143. package/dist/commands/session-start.js +107 -10
  144. package/dist/commands/session-start.js.map +1 -1
  145. package/dist/commands/session.d.ts.map +1 -1
  146. package/dist/commands/session.js +72 -9
  147. package/dist/commands/session.js.map +1 -1
  148. package/dist/commands/stats.d.ts +3 -0
  149. package/dist/commands/stats.d.ts.map +1 -0
  150. package/dist/commands/stats.js +89 -0
  151. package/dist/commands/stats.js.map +1 -0
  152. package/dist/commands/status.js +2 -2
  153. package/dist/commands/status.js.map +1 -1
  154. package/dist/commands/sync.d.ts +6 -0
  155. package/dist/commands/sync.d.ts.map +1 -1
  156. package/dist/commands/sync.js +28 -20
  157. package/dist/commands/sync.js.map +1 -1
  158. package/dist/commands/tags.d.ts +3 -0
  159. package/dist/commands/tags.d.ts.map +1 -0
  160. package/dist/commands/tags.js +144 -0
  161. package/dist/commands/tags.js.map +1 -0
  162. package/dist/config.d.ts +15 -0
  163. package/dist/config.d.ts.map +1 -1
  164. package/dist/config.js +52 -1
  165. package/dist/config.js.map +1 -1
  166. package/dist/export/format.d.ts +19 -0
  167. package/dist/export/format.d.ts.map +1 -0
  168. package/dist/export/format.js +40 -0
  169. package/dist/export/format.js.map +1 -0
  170. package/dist/export/journal.d.ts +32 -0
  171. package/dist/export/journal.d.ts.map +1 -0
  172. package/dist/export/journal.js +84 -0
  173. package/dist/export/journal.js.map +1 -0
  174. package/dist/export/write.d.ts +14 -0
  175. package/dist/export/write.d.ts.map +1 -0
  176. package/dist/export/write.js +42 -0
  177. package/dist/export/write.js.map +1 -0
  178. package/dist/identity.d.ts.map +1 -1
  179. package/dist/identity.js +3 -0
  180. package/dist/identity.js.map +1 -1
  181. package/dist/mail/backend.d.ts +104 -2
  182. package/dist/mail/backend.d.ts.map +1 -1
  183. package/dist/mail/backend.js +4 -1
  184. package/dist/mail/backend.js.map +1 -1
  185. package/dist/mail/changes.d.ts +91 -0
  186. package/dist/mail/changes.d.ts.map +1 -0
  187. package/dist/mail/changes.js +198 -0
  188. package/dist/mail/changes.js.map +1 -0
  189. package/dist/mail/cleanup.d.ts +41 -0
  190. package/dist/mail/cleanup.d.ts.map +1 -0
  191. package/dist/mail/cleanup.js +119 -0
  192. package/dist/mail/cleanup.js.map +1 -0
  193. package/dist/mail/compose.d.ts +73 -0
  194. package/dist/mail/compose.d.ts.map +1 -0
  195. package/dist/mail/compose.js +110 -0
  196. package/dist/mail/compose.js.map +1 -0
  197. package/dist/mail/doctor.d.ts +67 -0
  198. package/dist/mail/doctor.d.ts.map +1 -0
  199. package/dist/mail/doctor.js +115 -0
  200. package/dist/mail/doctor.js.map +1 -0
  201. package/dist/mail/drafts.d.ts +54 -0
  202. package/dist/mail/drafts.d.ts.map +1 -0
  203. package/dist/mail/drafts.js +104 -0
  204. package/dist/mail/drafts.js.map +1 -0
  205. package/dist/mail/imap/connection.d.ts +13 -3
  206. package/dist/mail/imap/connection.d.ts.map +1 -1
  207. package/dist/mail/imap/connection.js +87 -18
  208. package/dist/mail/imap/connection.js.map +1 -1
  209. package/dist/mail/imap/index.d.ts +3 -3
  210. package/dist/mail/imap/index.d.ts.map +1 -1
  211. package/dist/mail/imap/index.js +14 -4
  212. package/dist/mail/imap/index.js.map +1 -1
  213. package/dist/mail/imap/messages.d.ts +5 -6
  214. package/dist/mail/imap/messages.d.ts.map +1 -1
  215. package/dist/mail/imap/messages.js +14 -28
  216. package/dist/mail/imap/messages.js.map +1 -1
  217. package/dist/mail/imap/read.d.ts.map +1 -1
  218. package/dist/mail/imap/read.js +27 -13
  219. package/dist/mail/imap/read.js.map +1 -1
  220. package/dist/mail/imap/search.d.ts +14 -0
  221. package/dist/mail/imap/search.d.ts.map +1 -0
  222. package/dist/mail/imap/search.js +55 -0
  223. package/dist/mail/imap/search.js.map +1 -0
  224. package/dist/mail/imap/write.d.ts +5 -0
  225. package/dist/mail/imap/write.d.ts.map +1 -0
  226. package/dist/mail/imap/write.js +93 -0
  227. package/dist/mail/imap/write.js.map +1 -0
  228. package/dist/mail/organise.d.ts +116 -0
  229. package/dist/mail/organise.d.ts.map +1 -0
  230. package/dist/mail/organise.js +531 -0
  231. package/dist/mail/organise.js.map +1 -0
  232. package/dist/mail/rethread.d.ts +1 -2
  233. package/dist/mail/rethread.d.ts.map +1 -1
  234. package/dist/mail/rethread.js +8 -3
  235. package/dist/mail/rethread.js.map +1 -1
  236. package/dist/mail/rules/apply.d.ts +40 -0
  237. package/dist/mail/rules/apply.d.ts.map +1 -0
  238. package/dist/mail/rules/apply.js +114 -0
  239. package/dist/mail/rules/apply.js.map +1 -0
  240. package/dist/mail/rules/file.d.ts +9 -0
  241. package/dist/mail/rules/file.d.ts.map +1 -0
  242. package/dist/mail/rules/file.js +51 -0
  243. package/dist/mail/rules/file.js.map +1 -0
  244. package/dist/mail/rules/filters.d.ts +11 -0
  245. package/dist/mail/rules/filters.d.ts.map +1 -0
  246. package/dist/mail/rules/filters.js +150 -0
  247. package/dist/mail/rules/filters.js.map +1 -0
  248. package/dist/mail/rules/folders.d.ts +11 -0
  249. package/dist/mail/rules/folders.d.ts.map +1 -0
  250. package/dist/mail/rules/folders.js +17 -0
  251. package/dist/mail/rules/folders.js.map +1 -0
  252. package/dist/mail/rules/query.d.ts +15 -0
  253. package/dist/mail/rules/query.d.ts.map +1 -0
  254. package/dist/mail/rules/query.js +103 -0
  255. package/dist/mail/rules/query.js.map +1 -0
  256. package/dist/mail/rules/store.d.ts +9 -0
  257. package/dist/mail/rules/store.d.ts.map +1 -0
  258. package/dist/mail/rules/store.js +17 -0
  259. package/dist/mail/rules/store.js.map +1 -0
  260. package/dist/mail/save.d.ts +9 -0
  261. package/dist/mail/save.d.ts.map +1 -0
  262. package/dist/mail/save.js +50 -0
  263. package/dist/mail/save.js.map +1 -0
  264. package/dist/mail/send.d.ts +67 -0
  265. package/dist/mail/send.d.ts.map +1 -0
  266. package/dist/mail/send.js +173 -0
  267. package/dist/mail/send.js.map +1 -0
  268. package/dist/mail/smtp.d.ts +4 -0
  269. package/dist/mail/smtp.d.ts.map +1 -0
  270. package/dist/mail/smtp.js +133 -0
  271. package/dist/mail/smtp.js.map +1 -0
  272. package/dist/oauth.d.ts +74 -0
  273. package/dist/oauth.d.ts.map +1 -0
  274. package/dist/oauth.js +230 -0
  275. package/dist/oauth.js.map +1 -0
  276. package/dist/program.d.ts.map +1 -1
  277. package/dist/program.js +26 -4
  278. package/dist/program.js.map +1 -1
  279. package/dist/providers.d.ts +96 -9
  280. package/dist/providers.d.ts.map +1 -1
  281. package/dist/providers.js +69 -16
  282. package/dist/providers.js.map +1 -1
  283. package/dist/reasons.d.ts +9 -0
  284. package/dist/reasons.d.ts.map +1 -0
  285. package/dist/reasons.js +27 -0
  286. package/dist/reasons.js.map +1 -0
  287. package/dist/version.d.ts +1 -1
  288. package/dist/version.js +1 -1
  289. package/package.json +7 -5
  290. package/skills/mail-cli/SKILL.md +30 -3
  291. package/dist/bundle/chunk-YD5WV757.js +0 -27
  292. package/dist/bundle/command-contract-GPUED3GT.js +0 -34
  293. package/dist/bundle/first-screen-M7MT776O.js +0 -32
  294. package/dist/bundle/server-4JMHDHZ7.js +0 -63
  295. package/dist/bundle/store-maintenance-command-OFRPORN2.js +0 -52
  296. /package/dist/bundle/{chunk-NPGVOZVK.js → chunk-WJWLHLQ7.js} +0 -0
@@ -15,25 +15,70 @@ const realTimer = (ms, fire) => {
15
15
  const timer = setTimeout(fire, ms);
16
16
  return () => clearTimeout(timer);
17
17
  };
18
- /** The connections of one source, opened on first use; the password never leaves this closure. */
19
- export const imapConnections = (endpoint, password, tuning = {}) => {
18
+ /** How long a LOGOUT may wait for its OK before the socket is cut. */
19
+ const LOGOUT_MS = 2_000;
20
+ /** LOGOUT waits behind a command the server has not answered, so a server that hangs gets its socket cut instead. */
21
+ const farewell = async (one, expireAfter) => {
22
+ let cancel = () => { };
23
+ const cut = new Promise((resolve) => {
24
+ cancel = expireAfter(LOGOUT_MS, resolve);
25
+ });
26
+ try {
27
+ await Promise.race([one.logout().catch(() => { }), cut]);
28
+ }
29
+ finally {
30
+ cancel();
31
+ one.close();
32
+ }
33
+ };
34
+ /** A line that broke or a command that timed out during a write leaves it unknown whether the server made the change. */
35
+ const writeError = (raw) => {
36
+ const error = mapImapError(raw);
37
+ if (error.code !== "network_error" && error.code !== "timeout")
38
+ return error;
39
+ return new CliError("outcome_unknown", `${error.message}; the server may have made the change — check the mailbox, or sync, before running it again`, { ...error.details, retryable: false });
40
+ };
41
+ const refusedLogin = (error) => error.authenticationFailed === true;
42
+ const oauthRefused = (credential) => new CliError("authentication_error", "the mail server refused the OAuth token even after a refresh; sign in again" +
43
+ (credential.signInCommand ? `: \`${credential.signInCommand}\`` : ""), { reason: "mail.oauth-refused" });
44
+ /**
45
+ * The connections of one source, opened on first use. Each login asks the credential, so a reconnect an hour later
46
+ * gets a refreshed token; the secret never leaves this closure.
47
+ */
48
+ export const imapConnections = (endpoint, credential, tuning = {}) => {
20
49
  const { connections, requestTimeoutMs, backoff, maxAttempts } = { ...IMAP_DEFAULTS, ...tuning };
21
50
  const { canRetry, timeLeftMs, signal, sleep = realSleep, random = Math.random, expireAfter = realTimer } = tuning;
22
51
  const clients = [];
52
+ const connecting = [];
23
53
  const validities = new Map();
24
54
  let closed = false;
25
- const connect = async (slot) => {
55
+ // Two calls on one slot share its login: a second client would replace the first in `clients`, and close never sees it.
56
+ const connect = (slot) => {
26
57
  if (closed)
27
- throw new CliError("cancelled", "the mail connection is already closed");
58
+ return Promise.reject(new CliError("cancelled", "the mail connection is already closed"));
28
59
  const existing = clients[slot];
29
60
  if (existing?.usable)
30
- return existing;
61
+ return Promise.resolve(existing);
62
+ const pending = connecting[slot];
63
+ if (pending)
64
+ return pending;
65
+ const attempt = login(slot).finally(() => {
66
+ if (connecting[slot] === attempt)
67
+ connecting[slot] = undefined;
68
+ });
69
+ connecting[slot] = attempt;
70
+ return attempt;
71
+ };
72
+ const open = async (refresh) => {
73
+ const given = await credential.login(refresh ? { refresh } : undefined);
31
74
  const next = new ImapFlow({
32
75
  host: endpoint.host,
33
76
  port: endpoint.port,
34
77
  secure: endpoint.security === "tls",
35
78
  doSTARTTLS: endpoint.security === "starttls",
36
- auth: { user: endpoint.login, pass: password },
79
+ auth: "pass" in given
80
+ ? { user: endpoint.login, pass: given.pass }
81
+ : { user: endpoint.login, accessToken: given.accessToken },
37
82
  logger: false,
38
83
  disableAutoIdle: true,
39
84
  connectionTimeout: 15000,
@@ -43,6 +88,24 @@ export const imapConnections = (endpoint, password, tuning = {}) => {
43
88
  // An 'error' event with no listener would end the process, and the failing call already rejects.
44
89
  next.on("error", () => { });
45
90
  await next.connect();
91
+ return next;
92
+ };
93
+ // A token can be revoked while it still looks fresh: one forced refresh, then the sign-in itself is gone.
94
+ const login = async (slot) => {
95
+ let next;
96
+ try {
97
+ next = await open(false);
98
+ }
99
+ catch (error) {
100
+ if (credential.kind !== "oauth" || !refusedLogin(error))
101
+ throw error;
102
+ try {
103
+ next = await open(true);
104
+ }
105
+ catch (again) {
106
+ throw refusedLogin(again) ? oauthRefused(credential) : again;
107
+ }
108
+ }
46
109
  // A close that ran while this one was logging in found nothing to close.
47
110
  if (closed) {
48
111
  next.close();
@@ -78,11 +141,11 @@ export const imapConnections = (endpoint, password, tuning = {}) => {
78
141
  cancel();
79
142
  }
80
143
  };
81
- const once = async (slot, folder, expected, work) => {
144
+ const once = async (slot, folder, expected, work, readOnly = true) => {
82
145
  const open = await limited(slot, connect(slot));
83
146
  if (folder === undefined)
84
147
  return limited(slot, work(open, ""));
85
- const lock = await limited(slot, open.getMailboxLock(folder, { readOnly: true }));
148
+ const lock = await limited(slot, open.getMailboxLock(folder, { readOnly }));
86
149
  try {
87
150
  // imapflow clears the selection when a SELECT fails or the server closes the mailbox, and a connection
88
151
  // in that state still counts as usable: a command sent on it fails with NoMailboxSelected.
@@ -129,6 +192,19 @@ export const imapConnections = (endpoint, password, tuning = {}) => {
129
192
  }
130
193
  }
131
194
  };
195
+ /** Only a failure after the command went out is an unknown outcome; one while connecting changed nothing. */
196
+ const sentOnce = async (attempt) => {
197
+ let went = false;
198
+ try {
199
+ return await attempt((work) => ((open, validity) => {
200
+ went = true;
201
+ return work(open, validity);
202
+ }));
203
+ }
204
+ catch (raw) {
205
+ throw went ? writeError(raw) : mapImapError(raw);
206
+ }
207
+ };
132
208
  const inFolder = (folder, work, expected, slot = 0) => retrying(slot, () => once(slot, folder, expected, work));
133
209
  const spread = async (folder, batches, work, expected, onError) => {
134
210
  const results = new Array(batches.length);
@@ -168,20 +244,13 @@ export const imapConnections = (endpoint, password, tuning = {}) => {
168
244
  validities,
169
245
  onServer: (work) => retrying(0, () => once(0, undefined, undefined, (open) => work(open))),
170
246
  inFolder,
247
+ writeIn: (folder, work, expected) => sentOnce((sent) => once(0, folder, expected, sent(work), false)),
248
+ writeOnServer: (work) => sentOnce((sent) => once(0, undefined, undefined, sent(work))),
171
249
  spread,
172
250
  close: async () => {
173
251
  closed = true;
174
252
  const open = clients.splice(0);
175
- await Promise.all(open.map(async (one) => {
176
- if (!one)
177
- return;
178
- try {
179
- await one.logout();
180
- }
181
- catch {
182
- one.close();
183
- }
184
- }));
253
+ await Promise.all(open.map((one) => one && farewell(one, expireAfter)));
185
254
  },
186
255
  };
187
256
  };
@@ -1 +1 @@
1
- {"version":3,"file":"connection.js","sourceRoot":"","sources":["../../../src/mail/imap/connection.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"connection.js","sourceRoot":"","sources":["../../../src/mail/imap/connection.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
- import type { MailBackend, MailEndpoint } from "../backend.js";
1
+ import type { MailBackend, MailCredential, MailEndpoint } from "../backend.js";
2
2
  import { type ImapTuning } from "./connection.js";
3
3
  export { IMAP_DEFAULTS, type ImapTuning } from "./connection.js";
4
4
  export { mapImapError } from "./errors.js";
5
- /** The IMAP adapter of the mail backend: read only, its connections opened on first use and closed by `close`. */
6
- export declare const imapBackend: (endpoint: MailEndpoint, password: string, tuning?: ImapTuning) => MailBackend;
5
+ /** The IMAP adapter of the mail backend, its connections opened on first use and closed by `close`. */
6
+ export declare const imapBackend: (endpoint: MailEndpoint, credential: MailCredential, tuning?: ImapTuning) => MailBackend;
7
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/mail/imap/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAE9D,OAAO,EAAE,KAAK,UAAU,EAAmB,MAAM,iBAAiB,CAAA;AAGlE,OAAO,EAAE,aAAa,EAAE,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAE1C,kHAAkH;AAClH,eAAO,MAAM,WAAW,aAAc,YAAY,YAAY,MAAM,WAAU,UAAU,KAAQ,WAG/F,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/mail/imap/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAG9E,OAAO,EAAE,KAAK,UAAU,EAAmB,MAAM,iBAAiB,CAAA;AAKlE,OAAO,EAAE,aAAa,EAAE,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAE1C,uGAAuG;AACvG,eAAO,MAAM,WAAW,aACZ,YAAY,cACV,cAAc,WAClB,UAAU,KACjB,WAUF,CAAA"}
@@ -1,11 +1,21 @@
1
+ import { smtpSubmit } from "../smtp.js";
1
2
  import { imapAccount } from "./account.js";
2
3
  import { imapConnections } from "./connection.js";
3
4
  import { imapReads } from "./read.js";
5
+ import { imapQuery } from "./search.js";
6
+ import { imapWrites } from "./write.js";
4
7
  export { IMAP_DEFAULTS } from "./connection.js";
5
8
  export { mapImapError } from "./errors.js";
6
- /** The IMAP adapter of the mail backend: read only, its connections opened on first use and closed by `close`. */
7
- export const imapBackend = (endpoint, password, tuning = {}) => {
8
- const pool = imapConnections(endpoint, password, tuning);
9
- return { ...imapReads(pool, tuning), ...imapAccount(pool, endpoint.login), close: pool.close };
9
+ /** The IMAP adapter of the mail backend, its connections opened on first use and closed by `close`. */
10
+ export const imapBackend = (endpoint, credential, tuning = {}) => {
11
+ const pool = imapConnections(endpoint, credential, tuning);
12
+ return {
13
+ ...imapReads(pool, tuning),
14
+ ...imapAccount(pool, endpoint.login),
15
+ serverQuery: imapQuery(pool),
16
+ writes: imapWrites(pool),
17
+ ...(endpoint.smtp ? { submit: smtpSubmit({ ...endpoint.smtp, login: endpoint.login }, credential, tuning) } : {}),
18
+ close: pool.close,
19
+ };
10
20
  };
11
21
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/mail/imap/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC1C,OAAO,EAAmB,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAClE,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AAErC,OAAO,EAAE,aAAa,EAAmB,MAAM,iBAAiB,CAAA;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAE1C,kHAAkH;AAClH,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,QAAsB,EAAE,QAAgB,EAAE,MAAM,GAAe,EAAE,EAAe,EAAE;IAC5G,MAAM,IAAI,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAA;IACxD,OAAO,EAAE,GAAG,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,GAAG,WAAW,CAAC,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAA;AAChG,CAAC,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/mail/imap/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC1C,OAAO,EAAmB,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAClE,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAEvC,OAAO,EAAE,aAAa,EAAmB,MAAM,iBAAiB,CAAA;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAE1C,uGAAuG;AACvG,MAAM,CAAC,MAAM,WAAW,GAAG,CACzB,QAAsB,EACtB,UAA0B,EAC1B,MAAM,GAAe,EAAE,EACV,EAAE;IACf,MAAM,IAAI,GAAG,eAAe,CAAC,QAAQ,EAAE,UAAU,EAAE,MAAM,CAAC,CAAA;IAC1D,OAAO;QACL,GAAG,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC;QAC1B,GAAG,WAAW,CAAC,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC;QACpC,WAAW,EAAE,SAAS,CAAC,IAAI,CAAC;QAC5B,MAAM,EAAE,UAAU,CAAC,IAAI,CAAC;QACxB,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,GAAG,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjH,KAAK,EAAE,IAAI,CAAC,KAAK;KAClB,CAAA;AACH,CAAC,CAAA"}
@@ -3,16 +3,15 @@ import type { FetchMessageObject, ListResponse } from "imapflow";
3
3
  /** cli-core's fields for the owner's rules and the probe, and the two that tie a reply to its thread. */
4
4
  export declare const HEADER_FIELDS: string[];
5
5
  export declare const quickOf: (message: FetchMessageObject, folder: string) => Quick;
6
- /** Without a stable id the Message-ID is the identity; without that, the UID, which means nothing without UIDVALIDITY. */
7
- export declare const idsOf: (messageId: string | undefined, folder: string, validity: string, uid: string, root?: string) => {
8
- messageId: string;
9
- threadId: string;
10
- };
11
6
  /** The ids of a message read as bytes, worked out as `listedOf` works them out from a listing. */
12
7
  export declare const rawIdsOf: (raw: Uint8Array, folder: string, validity: string, uid: string) => {
13
8
  messageId: string;
14
9
  threadId: string;
15
10
  };
16
- export declare const listedOf: (message: FetchMessageObject, folder: string, validity: string) => Listed;
11
+ /**
12
+ * `gmail`: the connection is Gmail's, so imapflow's emailId and threadId are X-GM-MSGID and X-GM-THRID, which stored
13
+ * Gmail mail is keyed on. Anywhere else the Message-ID is the id, as memo makes it.
14
+ */
15
+ export declare const listedOf: (message: FetchMessageObject, folder: string, validity: string, gmail: boolean) => Listed;
17
16
  export declare const roleOf: (entry: ListResponse) => string | null;
18
17
  //# sourceMappingURL=messages.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../../src/mail/imap/messages.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,MAAM,EAGX,KAAK,KAAK,EACX,MAAM,wBAAwB,CAAA;AAC/B,OAAO,KAAK,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAEhE,yGAAyG;AACzG,eAAO,MAAM,aAAa,UAAkE,CAAA;AA8B5F,eAAO,MAAM,OAAO,YAAa,kBAAkB,UAAU,MAAM,KAAG,KAYrE,CAAA;AAED,0HAA0H;AAC1H,eAAO,MAAM,KAAK,cAAe,MAAM,GAAG,SAAS,UAAU,MAAM,YAAY,MAAM,OAAO,MAAM,SAAS,MAAM;IAEtG,SAAS;IAAoB,QAAQ;CAC/C,CAAA;AAED,kGAAkG;AAClG,eAAO,MAAM,QAAQ,QAAS,UAAU,UAAU,MAAM,YAAY,MAAM,OAAO,MAAM;;;CAGtF,CAAA;AAED,eAAO,MAAM,QAAQ,YAAa,kBAAkB,UAAU,MAAM,YAAY,MAAM,KAAG,MAUxF,CAAA;AAED,eAAO,MAAM,MAAM,UAAW,YAAY,KAAG,MAAM,GAAG,IAGrD,CAAA"}
1
+ {"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../../src/mail/imap/messages.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,MAAM,EAGX,KAAK,KAAK,EACX,MAAM,wBAAwB,CAAA;AAC/B,OAAO,KAAK,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAEhE,yGAAyG;AACzG,eAAO,MAAM,aAAa,UAAkE,CAAA;AAoB5F,eAAO,MAAM,OAAO,YAAa,kBAAkB,UAAU,MAAM,KAAG,KAYrE,CAAA;AAED,kGAAkG;AAClG,eAAO,MAAM,QAAQ,QAAS,UAAU,UAAU,MAAM,YAAY,MAAM,OAAO,MAAM;;;CAC5B,CAAA;AAE3D;;;GAGG;AACH,eAAO,MAAM,QAAQ,YAAa,kBAAkB,UAAU,MAAM,YAAY,MAAM,SAAS,OAAO,KAAG,MAOxG,CAAA;AAED,eAAO,MAAM,MAAM,UAAW,YAAY,KAAG,MAAM,GAAG,IAGrD,CAAA"}
@@ -1,8 +1,6 @@
1
- import { createHash } from "node:crypto";
2
- import { headersOf, labelName, HEADER_FIELDS as MAIL_HEADER_FIELDS, } from "@wirecat/cli-core/mail";
1
+ import { decodedLabelName, headersOf, HEADER_FIELDS as MAIL_HEADER_FIELDS, mailIds, } from "@wirecat/cli-core/mail";
3
2
  /** cli-core's fields for the owner's rules and the probe, and the two that tie a reply to its thread. */
4
3
  export const HEADER_FIELDS = [...MAIL_HEADER_FIELDS.split(" "), "IN-REPLY-TO", "REFERENCES"];
5
- const digest = (id) => `imap:${createHash("sha256").update(id).digest("hex")}`;
6
4
  const headTextOf = (raw) => {
7
5
  const bytes = Buffer.from(raw.buffer, raw.byteOffset, raw.byteLength);
8
6
  const end = [bytes.indexOf("\r\n\r\n"), bytes.indexOf("\n\n")]
@@ -10,16 +8,12 @@ const headTextOf = (raw) => {
10
8
  .reduce((first, at) => Math.min(first, at), bytes.length);
11
9
  return bytes.subarray(0, end).toString("utf8");
12
10
  };
13
- const fieldOf = (head, name) => new RegExp(`^${name}:[ \\t]*(.*)$`, "im").exec(head.replace(/\r?\n[ \t]+/g, " "))?.[1]?.trim();
14
11
  /**
15
- * The first Message-ID of References is the thread's first email (RFC 5322 §3.6.4); a reply with only In-Reply-To
16
- * names its parent. A server without thread ids (Yandex, Mail.ru) then still keeps a conversation together.
12
+ * As memo names them, so the store's `label:Inbox` mailboxes keep matching; a flagged message is Starred anywhere.
13
+ * imapflow has decoded them already.
17
14
  */
18
- const threadRootOf = (head) => /<[^<>\s]+>/.exec(fieldOf(head, "references") ?? "")?.[0] ??
19
- /<[^<>\s]+>/.exec(fieldOf(head, "in-reply-to") ?? "")?.[0];
20
- /** As memo names them, so the store's `label:Inbox` mailboxes keep matching; a flagged message is Starred anywhere. */
21
15
  const labelsOf = (raw, flagged) => {
22
- const names = new Set([...(raw ?? [])].map(labelName));
16
+ const names = new Set([...(raw ?? [])].map(decodedLabelName));
23
17
  if (flagged)
24
18
  names.add("Starred");
25
19
  return [...names].sort();
@@ -37,26 +31,18 @@ export const quickOf = (message, folder) => {
37
31
  labels: labelsOf(message.labels, flags.has("\\Flagged")),
38
32
  };
39
33
  };
40
- /** Without a stable id the Message-ID is the identity; without that, the UID, which means nothing without UIDVALIDITY. */
41
- export const idsOf = (messageId, folder, validity, uid, root) => {
42
- const identity = messageId ?? `uid:${folder}:${validity}:${uid}`;
43
- return { messageId: digest(identity), threadId: digest(root ?? identity) };
44
- };
45
34
  /** The ids of a message read as bytes, worked out as `listedOf` works them out from a listing. */
46
- export const rawIdsOf = (raw, folder, validity, uid) => {
47
- const head = headTextOf(raw);
48
- return idsOf(fieldOf(head, "message-id") || undefined, folder, validity, uid, threadRootOf(head));
49
- };
50
- export const listedOf = (message, folder, validity) => {
35
+ export const rawIdsOf = (raw, folder, validity, uid) => mailIds({ head: headTextOf(raw), folder, validity, uid });
36
+ /**
37
+ * `gmail`: the connection is Gmail's, so imapflow's emailId and threadId are X-GM-MSGID and X-GM-THRID, which stored
38
+ * Gmail mail is keyed on. Anywhere else the Message-ID is the id, as memo makes it.
39
+ */
40
+ export const listedOf = (message, folder, validity, gmail) => {
51
41
  const head = message.headers ? message.headers.toString("utf8") : "";
52
- const ids = idsOf(message.envelope?.messageId, folder, validity, String(message.uid), threadRootOf(head));
53
- return {
54
- ...quickOf(message, folder),
55
- // Gmail's X-GM-MSGID and X-GM-THRID, or OBJECTID's: stored Gmail mail is keyed on them.
56
- ...(message.emailId ? { messageId: String(message.emailId) } : { messageId: ids.messageId }),
57
- threadId: message.threadId ? String(message.threadId) : ids.threadId,
58
- headers: headersOf(head),
59
- };
42
+ const ids = gmail && message.emailId && message.threadId
43
+ ? { messageId: String(message.emailId), threadId: String(message.threadId) }
44
+ : mailIds({ messageId: message.envelope?.messageId, head, folder, validity, uid: String(message.uid) });
45
+ return { ...quickOf(message, folder), ...ids, headers: headersOf(head) };
60
46
  };
61
47
  export const roleOf = (entry) => {
62
48
  if (entry.path.toUpperCase() === "INBOX")
@@ -1 +1 @@
1
- {"version":3,"file":"messages.js","sourceRoot":"","sources":["../../../src/mail/imap/messages.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"messages.js","sourceRoot":"","sources":["../../../src/mail/imap/messages.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"read.d.ts","sourceRoot":"","sources":["../../../src/mail/imap/read.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAmB,MAAM,wBAAwB,CAAA;AAEzE,OAAO,EAAE,KAAK,WAAW,EAAiB,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAwClF,KAAK,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,GAAG,YAAY,GAAG,QAAQ,GAAG,SAAS,GAAG,OAAO,GAAG,UAAU,CAAC,CAAC,GAC/G,IAAI,CAAC,UAAU,EAAE,MAAM,GAAG,UAAU,CAAC,CAAA;AAEvC,0FAA0F;AAC1F,eAAO,MAAM,SAAS,SAAU,WAAW,WAAU,UAAU,KAAQ,KAuJtE,CAAA"}
1
+ {"version":3,"file":"read.d.ts","sourceRoot":"","sources":["../../../src/mail/imap/read.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAU,UAAU,EAAmB,MAAM,wBAAwB,CAAA;AAEjF,OAAO,EAAE,KAAK,WAAW,EAAiB,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAsDlF,KAAK,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,GAAG,YAAY,GAAG,QAAQ,GAAG,SAAS,GAAG,OAAO,GAAG,UAAU,CAAC,CAAC,GAC/G,IAAI,CAAC,UAAU,EAAE,MAAM,GAAG,UAAU,CAAC,CAAA;AAEvC,0FAA0F;AAC1F,eAAO,MAAM,SAAS,SAAU,WAAW,WAAU,UAAU,KAAQ,KA0JtE,CAAA"}
@@ -39,6 +39,16 @@ const groupByFolder = (items) => {
39
39
  }
40
40
  return byFolder;
41
41
  };
42
+ /** imapflow asks a server with OBJECTID for EMAILID, not X-GM-MSGID: Gmail's stored mail would get new ids. */
43
+ const gmailOf = (open) => {
44
+ if (!open.capabilities.has("X-GM-EXT-1"))
45
+ return false;
46
+ if (open.capabilities.has("OBJECTID"))
47
+ throw new CliError("provider_error", "Gmail now announces OBJECTID; this mail build cannot read its X-GM-MSGID ids", {
48
+ reason: "mail.gmail-objectid",
49
+ });
50
+ return true;
51
+ };
42
52
  /** The calls cli-core's sync makes to read a folder; none of them changes the mailbox. */
43
53
  export const imapReads = (pool, tuning = {}) => {
44
54
  const { listSize, quickSize, fetchSize, fetchBytes } = { ...IMAP_DEFAULTS, ...tuning };
@@ -46,8 +56,8 @@ export const imapReads = (pool, tuning = {}) => {
46
56
  const search = async (since, folder) => {
47
57
  const found = await inFolder(folder, async (open, validity) => {
48
58
  const uids = await open.search({ since }, { uid: true });
49
- // Message ids come free with OBJECTID and Gmail's extensions; without them the envelope costs a read per message.
50
- const quick = !open.capabilities.has("OBJECTID") && !open.capabilities.has("X-GM-EXT-1");
59
+ // Only Gmail's ids come free; elsewhere the id is the Message-ID, and the envelope costs a read per message.
60
+ const quick = !open.capabilities.has("X-GM-EXT-1");
51
61
  return { ...(validity ? { validity } : {}), uids: (uids || []).map(String), ...(quick ? { quick } : {}) };
52
62
  });
53
63
  if (found.validity)
@@ -74,16 +84,20 @@ export const imapReads = (pool, tuning = {}) => {
74
84
  const searched = options?.searched ?? (await search(since, folder));
75
85
  const validity = validityOf(searched, folder);
76
86
  // A message the server answers with `NO [UNAVAILABLE]` is simply absent here; the sync asks for it again later.
77
- const listing = (batches) => spread(folder, batches, (open, batch) => open.fetchAll(batch.join(","), {
78
- uid: true,
79
- flags: true,
80
- internalDate: true,
81
- size: true,
82
- envelope: true,
83
- threadId: true,
84
- labels: true,
85
- headers: HEADER_FIELDS,
86
- }, { uid: true }), validity, (error) => {
87
+ const listing = (batches) => spread(folder, batches, async (open, batch) => {
88
+ const gmail = gmailOf(open);
89
+ const fetched = await open.fetchAll(batch.join(","), {
90
+ uid: true,
91
+ flags: true,
92
+ internalDate: true,
93
+ size: true,
94
+ envelope: true,
95
+ threadId: true,
96
+ labels: true,
97
+ headers: HEADER_FIELDS,
98
+ }, { uid: true });
99
+ return fetched.map((message) => listedOf(message, folder, validity, gmail));
100
+ }, validity, (error) => {
87
101
  const mapped = mapImapError(error);
88
102
  if (mapped.code !== "provider_unavailable")
89
103
  throw mapped;
@@ -103,7 +117,7 @@ export const imapReads = (pool, tuning = {}) => {
103
117
  for (const message of single)
104
118
  messages.push(message);
105
119
  }
106
- return messages.map((message) => listedOf(message, folder, validity));
120
+ return messages;
107
121
  },
108
122
  quick: async (_since, folder, { searched }) => {
109
123
  const validity = validityOf(searched, folder);
@@ -1 +1 @@
1
- {"version":3,"file":"read.js","sourceRoot":"","sources":["../../../src/mail/imap/read.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"read.js","sourceRoot":"","sources":["../../../src/mail/imap/read.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { MailCriteria, Searched } from "@wirecat/cli-core/mail";
2
+ import type { SearchObject } from "imapflow";
3
+ import type { Connections } from "./connection.js";
4
+ /** How a provider's server is searched: Gmail's own syntax as X-GM-RAW, or RFC 3501 SEARCH keys. */
5
+ export type SearchSyntax = "gmail" | "imap";
6
+ /**
7
+ * Gmail's search operators (https://support.google.com/mail/answer/7190). Gmail has no body-only operator, so a
8
+ * `body:` value is a plain word; `after:` and `before:` take days, which the criteria already widened.
9
+ */
10
+ export declare const gmailRawOf: (criteria: MailCriteria) => string;
11
+ export declare const imapSearchOf: (criteria: MailCriteria) => SearchObject;
12
+ /** The server's own search of one folder; nothing is marked read, since the folder opens read only. */
13
+ export declare const imapQuery: ({ inFolder, validities }: Connections) => (criteria: MailCriteria, folder: string, syntax: SearchSyntax) => Promise<Searched>;
14
+ //# sourceMappingURL=search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../../src/mail/imap/search.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AACpE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAC5C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAElD,oGAAoG;AACpG,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,MAAM,CAAA;AAS3C;;;GAGG;AACH,eAAO,MAAM,UAAU,aAAc,YAAY,KAAG,MAWvC,CAAA;AASb,eAAO,MAAM,YAAY,aAAc,YAAY,KAAG,YAYlD,CAAA;AAEJ,uGAAuG;AACvG,eAAO,MAAM,SAAS,6BACO,WAAW,gBACrB,YAAY,UAAU,MAAM,UAAU,YAAY,KAAG,OAAO,CAAC,QAAQ,CAarF,CAAA"}
@@ -0,0 +1,55 @@
1
+ import { CliError } from "@wirecat/cli-base";
2
+ const quoted = (value) => (/[\s"()]/.test(value) ? `"${value.replace(/"/g, " ").trim()}"` : value);
3
+ const gmailDay = (ms) => {
4
+ const at = new Date(ms);
5
+ return `${at.getUTCFullYear()}/${at.getUTCMonth() + 1}/${at.getUTCDate()}`;
6
+ };
7
+ /**
8
+ * Gmail's search operators (https://support.google.com/mail/answer/7190). Gmail has no body-only operator, so a
9
+ * `body:` value is a plain word; `after:` and `before:` take days, which the criteria already widened.
10
+ */
11
+ export const gmailRawOf = (criteria) => [
12
+ ...[...criteria.words, ...criteria.body].map(quoted),
13
+ ...criteria.from.map((value) => `from:${quoted(value)}`),
14
+ ...criteria.to.map((value) => `to:${quoted(value)}`),
15
+ ...criteria.cc.map((value) => `cc:${quoted(value)}`),
16
+ ...criteria.subject.map((value) => `subject:${quoted(value)}`),
17
+ ...(criteria.since === undefined ? [] : [`after:${gmailDay(criteria.since)}`]),
18
+ ...(criteria.before === undefined ? [] : [`before:${gmailDay(criteria.before)}`]),
19
+ ...(criteria.seen === undefined ? [] : [criteria.seen ? "is:read" : "is:unread"]),
20
+ ...(criteria.flagged ? ["is:starred"] : []),
21
+ ].join(" ");
22
+ /**
23
+ * One AND of every key. imapflow's query object holds each key once, so a second word or sender is nested in a
24
+ * one-branch `or`, which imapflow sends as a parenthesised list: RFC 3501's AND of search keys.
25
+ */
26
+ const allOf = ([first, ...rest]) => rest.length ? { ...first, or: [allOf(rest)] } : (first ?? {});
27
+ export const imapSearchOf = (criteria) => allOf([
28
+ ...criteria.words.map((text) => ({ text })),
29
+ ...criteria.from.map((from) => ({ from })),
30
+ ...criteria.to.map((to) => ({ to })),
31
+ ...criteria.cc.map((cc) => ({ cc })),
32
+ ...criteria.subject.map((subject) => ({ subject })),
33
+ ...criteria.body.map((body) => ({ body })),
34
+ ...(criteria.since === undefined ? [] : [{ since: new Date(criteria.since) }]),
35
+ ...(criteria.before === undefined ? [] : [{ before: new Date(criteria.before) }]),
36
+ ...(criteria.seen === undefined ? [] : [{ seen: criteria.seen }]),
37
+ ...(criteria.flagged === undefined ? [] : [{ flagged: criteria.flagged }]),
38
+ ]);
39
+ /** The server's own search of one folder; nothing is marked read, since the folder opens read only. */
40
+ export const imapQuery = ({ inFolder, validities }) => async (criteria, folder, syntax) => {
41
+ const query = syntax === "gmail" ? { gmraw: gmailRawOf(criteria) } : imapSearchOf(criteria);
42
+ const found = await inFolder(folder, async (open, validity) => {
43
+ // imapflow resolves a NO or BAD to SEARCH as false; read as no match, it would make the answer look complete.
44
+ const uids = await open.search(query, { uid: true });
45
+ if (uids === false)
46
+ throw new CliError("provider_error", `the mail server refused to search ${folder}`, {
47
+ reason: "mail.search-refused",
48
+ });
49
+ return { ...(validity ? { validity } : {}), uids: (uids ?? []).map(String) };
50
+ });
51
+ if (found.validity)
52
+ validities.set(folder, found.validity);
53
+ return found;
54
+ };
55
+ //# sourceMappingURL=search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.js","sourceRoot":"","sources":["../../../src/mail/imap/search.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { MailWrites } from "../backend.js";
2
+ import type { Connections } from "./connection.js";
3
+ /** Every change the mail commands make, over imapflow. Each is one command per folder, never repeated. */
4
+ export declare const imapWrites: (pool: Connections) => MailWrites;
5
+ //# sourceMappingURL=write.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"write.d.ts","sourceRoot":"","sources":["../../../src/mail/imap/write.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAsB,MAAM,eAAe,CAAA;AACnE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAclD,0GAA0G;AAC1G,eAAO,MAAM,UAAU,SAAU,WAAW,KAAG,UAyI9C,CAAA"}