imapkit 4.0.3 → 4.1.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 (485) hide show
  1. package/README.md +32 -19
  2. package/bin/imapkit.js +12 -16
  3. package/dist/cjs/addressparser.d.ts +21 -0
  4. package/dist/cjs/addressparser.js +271 -0
  5. package/dist/cjs/arguments.d.ts +31 -0
  6. package/{lib → dist/cjs}/arguments.js +9 -21
  7. package/dist/cjs/bodystructure.d.ts +25 -0
  8. package/dist/cjs/bodystructure.js +150 -0
  9. package/dist/cjs/cert.d.ts +2 -0
  10. package/dist/cjs/cert.js +7 -0
  11. package/dist/cjs/command-states.d.ts +36 -0
  12. package/dist/cjs/command-states.js +102 -0
  13. package/dist/cjs/commands/append.d.ts +88 -0
  14. package/dist/cjs/commands/append.js +299 -0
  15. package/dist/cjs/commands/capability.d.ts +2 -0
  16. package/dist/cjs/commands/capability.js +44 -0
  17. package/dist/cjs/commands/check.d.ts +2 -0
  18. package/dist/cjs/commands/check.js +28 -0
  19. package/dist/cjs/commands/close.d.ts +2 -0
  20. package/dist/cjs/commands/close.js +35 -0
  21. package/dist/cjs/commands/copy.d.ts +30 -0
  22. package/dist/cjs/commands/copy.js +107 -0
  23. package/dist/cjs/commands/create.d.ts +2 -0
  24. package/dist/cjs/commands/create.js +53 -0
  25. package/dist/cjs/commands/delete.d.ts +2 -0
  26. package/dist/cjs/commands/delete.js +63 -0
  27. package/dist/cjs/commands/examine.d.ts +2 -0
  28. package/dist/cjs/commands/examine.js +19 -0
  29. package/dist/cjs/commands/expunge.d.ts +2 -0
  30. package/dist/cjs/commands/expunge.js +32 -0
  31. package/dist/cjs/commands/fetch.d.ts +23 -0
  32. package/dist/cjs/commands/fetch.js +208 -0
  33. package/dist/cjs/commands/handlers/fetch.d.ts +12 -0
  34. package/dist/cjs/commands/handlers/fetch.js +195 -0
  35. package/dist/cjs/commands/handlers/flags.d.ts +17 -0
  36. package/dist/cjs/commands/handlers/flags.js +39 -0
  37. package/dist/cjs/commands/handlers/search.d.ts +85 -0
  38. package/dist/cjs/commands/handlers/search.js +504 -0
  39. package/dist/cjs/commands/handlers/status.d.ts +34 -0
  40. package/dist/cjs/commands/handlers/status.js +81 -0
  41. package/dist/cjs/commands/handlers/store.d.ts +3 -0
  42. package/dist/cjs/commands/handlers/store.js +117 -0
  43. package/dist/cjs/commands/index.d.ts +2 -0
  44. package/dist/cjs/commands/index.js +61 -0
  45. package/dist/cjs/commands/list.d.ts +2 -0
  46. package/dist/cjs/commands/list.js +86 -0
  47. package/dist/cjs/commands/login.d.ts +2 -0
  48. package/dist/cjs/commands/login.js +62 -0
  49. package/dist/cjs/commands/logout.d.ts +2 -0
  50. package/dist/cjs/commands/logout.js +40 -0
  51. package/dist/cjs/commands/lsub.d.ts +2 -0
  52. package/dist/cjs/commands/lsub.js +79 -0
  53. package/dist/cjs/commands/noop.d.ts +2 -0
  54. package/dist/cjs/commands/noop.js +28 -0
  55. package/dist/cjs/commands/rename.d.ts +2 -0
  56. package/dist/cjs/commands/rename.js +98 -0
  57. package/dist/cjs/commands/search.d.ts +10 -0
  58. package/dist/cjs/commands/search.js +71 -0
  59. package/dist/cjs/commands/select.d.ts +19 -0
  60. package/dist/cjs/commands/select.js +230 -0
  61. package/dist/cjs/commands/status.d.ts +2 -0
  62. package/dist/cjs/commands/status.js +57 -0
  63. package/dist/cjs/commands/store.d.ts +10 -0
  64. package/dist/cjs/commands/store.js +134 -0
  65. package/dist/cjs/commands/subscribe.d.ts +2 -0
  66. package/dist/cjs/commands/subscribe.js +51 -0
  67. package/dist/cjs/commands/uid-copy.d.ts +2 -0
  68. package/dist/cjs/commands/uid-copy.js +19 -0
  69. package/dist/cjs/commands/uid-fetch.d.ts +3 -0
  70. package/dist/cjs/commands/uid-fetch.js +17 -0
  71. package/dist/cjs/commands/uid-search.d.ts +3 -0
  72. package/dist/cjs/commands/uid-search.js +17 -0
  73. package/dist/cjs/commands/uid-store.d.ts +3 -0
  74. package/dist/cjs/commands/uid-store.js +17 -0
  75. package/dist/cjs/commands/unsubscribe.d.ts +2 -0
  76. package/dist/cjs/commands/unsubscribe.js +50 -0
  77. package/dist/cjs/dates.d.ts +64 -0
  78. package/dist/cjs/dates.js +124 -0
  79. package/dist/cjs/deflate-layer.d.ts +83 -0
  80. package/dist/cjs/deflate-layer.js +232 -0
  81. package/dist/cjs/encoded-words.d.ts +15 -0
  82. package/dist/cjs/encoded-words.js +85 -0
  83. package/dist/cjs/envelope.d.ts +33 -0
  84. package/dist/cjs/envelope.js +86 -0
  85. package/dist/cjs/esearch.d.ts +96 -0
  86. package/dist/cjs/esearch.js +190 -0
  87. package/dist/cjs/framing.d.ts +66 -0
  88. package/{lib → dist/cjs}/framing.js +9 -26
  89. package/dist/cjs/index.d.ts +9 -0
  90. package/dist/cjs/index.js +56 -0
  91. package/dist/cjs/list-extensions.d.ts +50 -0
  92. package/dist/cjs/list-extensions.js +35 -0
  93. package/dist/cjs/load-plugins.d.ts +21 -0
  94. package/dist/cjs/load-plugins.js +89 -0
  95. package/dist/cjs/mailbox-name.d.ts +26 -0
  96. package/dist/cjs/mailbox-name.js +127 -0
  97. package/dist/cjs/mimeparser.d.ts +137 -0
  98. package/dist/cjs/mimeparser.js +727 -0
  99. package/dist/cjs/mock-client.d.ts +39 -0
  100. package/dist/cjs/mock-client.js +236 -0
  101. package/dist/cjs/numbers.d.ts +28 -0
  102. package/dist/cjs/numbers.js +52 -0
  103. package/dist/cjs/package.json +3 -0
  104. package/dist/cjs/plugins/acl.d.ts +2 -0
  105. package/dist/cjs/plugins/acl.js +888 -0
  106. package/dist/cjs/plugins/appendlimit.d.ts +16 -0
  107. package/dist/cjs/plugins/appendlimit.js +87 -0
  108. package/dist/cjs/plugins/auth-plain.d.ts +2 -0
  109. package/dist/cjs/plugins/auth-plain.js +89 -0
  110. package/dist/cjs/plugins/binary.d.ts +30 -0
  111. package/dist/cjs/plugins/binary.js +247 -0
  112. package/dist/cjs/plugins/catenate.d.ts +14 -0
  113. package/dist/cjs/plugins/catenate.js +250 -0
  114. package/dist/cjs/plugins/compress.d.ts +7 -0
  115. package/dist/cjs/plugins/compress.js +79 -0
  116. package/dist/cjs/plugins/condstore.d.ts +5 -0
  117. package/dist/cjs/plugins/condstore.js +492 -0
  118. package/dist/cjs/plugins/context-search.d.ts +8 -0
  119. package/dist/cjs/plugins/context-search.js +304 -0
  120. package/dist/cjs/plugins/context-sort.d.ts +6 -0
  121. package/dist/cjs/plugins/context-sort.js +32 -0
  122. package/dist/cjs/plugins/create-special-use.d.ts +7 -0
  123. package/dist/cjs/plugins/create-special-use.js +101 -0
  124. package/dist/cjs/plugins/enable.d.ts +23 -0
  125. package/dist/cjs/plugins/enable.js +127 -0
  126. package/dist/cjs/plugins/esearch.d.ts +6 -0
  127. package/dist/cjs/plugins/esearch.js +142 -0
  128. package/dist/cjs/plugins/esort.d.ts +6 -0
  129. package/dist/cjs/plugins/esort.js +60 -0
  130. package/dist/cjs/plugins/id.d.ts +5 -0
  131. package/dist/cjs/plugins/id.js +123 -0
  132. package/dist/cjs/plugins/idle.d.ts +5 -0
  133. package/dist/cjs/plugins/idle.js +85 -0
  134. package/dist/cjs/plugins/imap4rev2.d.ts +6 -0
  135. package/dist/cjs/plugins/imap4rev2.js +184 -0
  136. package/dist/cjs/plugins/index.d.ts +2 -0
  137. package/dist/cjs/plugins/index.js +119 -0
  138. package/dist/cjs/plugins/list-extended.d.ts +2 -0
  139. package/dist/cjs/plugins/list-extended.js +235 -0
  140. package/dist/cjs/plugins/list-status.d.ts +6 -0
  141. package/dist/cjs/plugins/list-status.js +42 -0
  142. package/dist/cjs/plugins/literalminus.d.ts +8 -0
  143. package/dist/cjs/plugins/literalminus.js +32 -0
  144. package/dist/cjs/plugins/literalplus.d.ts +6 -0
  145. package/dist/cjs/plugins/literalplus.js +30 -0
  146. package/dist/cjs/plugins/logindisabled.d.ts +5 -0
  147. package/dist/cjs/plugins/logindisabled.js +54 -0
  148. package/dist/cjs/plugins/messagelimit.d.ts +19 -0
  149. package/dist/cjs/plugins/messagelimit.js +227 -0
  150. package/dist/cjs/plugins/metadata-server.d.ts +7 -0
  151. package/dist/cjs/plugins/metadata-server.js +24 -0
  152. package/dist/cjs/plugins/metadata.d.ts +11 -0
  153. package/dist/cjs/plugins/metadata.js +436 -0
  154. package/dist/cjs/plugins/move.d.ts +11 -0
  155. package/dist/cjs/plugins/move.js +96 -0
  156. package/dist/cjs/plugins/multiappend.d.ts +12 -0
  157. package/dist/cjs/plugins/multiappend.js +38 -0
  158. package/dist/cjs/plugins/multisearch.d.ts +6 -0
  159. package/dist/cjs/plugins/multisearch.js +263 -0
  160. package/dist/cjs/plugins/namespace.d.ts +5 -0
  161. package/dist/cjs/plugins/namespace.js +57 -0
  162. package/dist/cjs/plugins/notify.d.ts +2 -0
  163. package/dist/cjs/plugins/notify.js +628 -0
  164. package/dist/cjs/plugins/oauthbearer.d.ts +32 -0
  165. package/dist/cjs/plugins/oauthbearer.js +202 -0
  166. package/dist/cjs/plugins/objectid.d.ts +23 -0
  167. package/dist/cjs/plugins/objectid.js +221 -0
  168. package/dist/cjs/plugins/partial.d.ts +6 -0
  169. package/dist/cjs/plugins/partial.js +78 -0
  170. package/dist/cjs/plugins/preview.d.ts +31 -0
  171. package/dist/cjs/plugins/preview.js +378 -0
  172. package/dist/cjs/plugins/qresync.d.ts +11 -0
  173. package/dist/cjs/plugins/qresync.js +473 -0
  174. package/dist/cjs/plugins/quota.d.ts +18 -0
  175. package/dist/cjs/plugins/quota.js +254 -0
  176. package/dist/cjs/plugins/replace.d.ts +14 -0
  177. package/dist/cjs/plugins/replace.js +130 -0
  178. package/dist/cjs/plugins/sasl-ir.d.ts +5 -0
  179. package/dist/cjs/plugins/sasl-ir.js +24 -0
  180. package/dist/cjs/plugins/savedate.d.ts +17 -0
  181. package/dist/cjs/plugins/savedate.js +64 -0
  182. package/dist/cjs/plugins/savelimit.d.ts +10 -0
  183. package/dist/cjs/plugins/savelimit.js +30 -0
  184. package/dist/cjs/plugins/searchres.d.ts +6 -0
  185. package/dist/cjs/plugins/searchres.js +91 -0
  186. package/dist/cjs/plugins/sort-display.d.ts +11 -0
  187. package/dist/cjs/plugins/sort-display.js +37 -0
  188. package/dist/cjs/plugins/sort.d.ts +11 -0
  189. package/dist/cjs/plugins/sort.js +125 -0
  190. package/dist/cjs/plugins/special-use.d.ts +10 -0
  191. package/dist/cjs/plugins/special-use.js +95 -0
  192. package/dist/cjs/plugins/starttls.d.ts +5 -0
  193. package/dist/cjs/plugins/starttls.js +55 -0
  194. package/dist/cjs/plugins/status-size.d.ts +7 -0
  195. package/dist/cjs/plugins/status-size.js +30 -0
  196. package/dist/cjs/plugins/thread-orderedsubject.d.ts +11 -0
  197. package/dist/cjs/plugins/thread-orderedsubject.js +28 -0
  198. package/dist/cjs/plugins/thread-references.d.ts +11 -0
  199. package/dist/cjs/plugins/thread-references.js +28 -0
  200. package/dist/cjs/plugins/uidonly.d.ts +15 -0
  201. package/dist/cjs/plugins/uidonly.js +126 -0
  202. package/dist/cjs/plugins/uidplus.d.ts +15 -0
  203. package/dist/cjs/plugins/uidplus.js +119 -0
  204. package/dist/cjs/plugins/unauthenticate.d.ts +7 -0
  205. package/dist/cjs/plugins/unauthenticate.js +32 -0
  206. package/dist/cjs/plugins/unselect.d.ts +5 -0
  207. package/dist/cjs/plugins/unselect.js +36 -0
  208. package/dist/cjs/plugins/utf8-accept.d.ts +6 -0
  209. package/dist/cjs/plugins/utf8-accept.js +72 -0
  210. package/dist/cjs/plugins/x-gm-ext-1.d.ts +26 -0
  211. package/dist/cjs/plugins/x-gm-ext-1.js +422 -0
  212. package/dist/cjs/plugins/xoauth2.d.ts +2 -0
  213. package/dist/cjs/plugins/xoauth2.js +155 -0
  214. package/dist/cjs/plugins/xtoybird.d.ts +2 -0
  215. package/dist/cjs/plugins/xtoybird.js +236 -0
  216. package/dist/cjs/server.d.ts +876 -0
  217. package/dist/cjs/server.js +2597 -0
  218. package/dist/cjs/smtp-listener.d.ts +13 -0
  219. package/dist/cjs/smtp-listener.js +47 -0
  220. package/dist/cjs/sorting.d.ts +77 -0
  221. package/dist/cjs/sorting.js +290 -0
  222. package/dist/cjs/threading.d.ts +30 -0
  223. package/dist/cjs/threading.js +318 -0
  224. package/dist/cjs/types.d.ts +327 -0
  225. package/dist/cjs/types.js +3 -0
  226. package/dist/cjs/utf8-session.d.ts +17 -0
  227. package/dist/cjs/utf8-session.js +148 -0
  228. package/dist/cjs/vanished.d.ts +21 -0
  229. package/dist/cjs/vanished.js +55 -0
  230. package/dist/esm/addressparser.d.ts +21 -0
  231. package/{lib → dist/esm}/addressparser.js +106 -133
  232. package/dist/esm/arguments.d.ts +31 -0
  233. package/dist/esm/arguments.js +96 -0
  234. package/dist/esm/bodystructure.d.ts +25 -0
  235. package/{lib → dist/esm}/bodystructure.js +17 -33
  236. package/dist/esm/cert.d.ts +2 -0
  237. package/dist/esm/cert.js +4 -0
  238. package/dist/esm/command-states.d.ts +36 -0
  239. package/{lib → dist/esm}/command-states.js +4 -16
  240. package/dist/esm/commands/append.d.ts +88 -0
  241. package/{lib → dist/esm}/commands/append.js +47 -85
  242. package/dist/esm/commands/capability.d.ts +2 -0
  243. package/dist/esm/commands/capability.js +29 -0
  244. package/dist/esm/commands/check.d.ts +2 -0
  245. package/dist/esm/commands/check.js +13 -0
  246. package/dist/esm/commands/close.d.ts +2 -0
  247. package/dist/esm/commands/close.js +20 -0
  248. package/dist/esm/commands/copy.d.ts +30 -0
  249. package/{lib → dist/esm}/commands/copy.js +31 -55
  250. package/dist/esm/commands/create.d.ts +2 -0
  251. package/{lib → dist/esm}/commands/create.js +25 -39
  252. package/dist/esm/commands/delete.d.ts +2 -0
  253. package/{lib → dist/esm}/commands/delete.js +25 -41
  254. package/dist/esm/commands/examine.d.ts +2 -0
  255. package/dist/esm/commands/examine.js +4 -0
  256. package/dist/esm/commands/expunge.d.ts +2 -0
  257. package/dist/esm/commands/expunge.js +17 -0
  258. package/dist/esm/commands/fetch.d.ts +23 -0
  259. package/{lib → dist/esm}/commands/fetch.js +33 -74
  260. package/dist/esm/commands/handlers/fetch.d.ts +12 -0
  261. package/{lib → dist/esm}/commands/handlers/fetch.js +11 -42
  262. package/dist/esm/commands/handlers/flags.d.ts +17 -0
  263. package/{lib → dist/esm}/commands/handlers/flags.js +3 -11
  264. package/dist/esm/commands/handlers/search.d.ts +85 -0
  265. package/{lib → dist/esm}/commands/handlers/search.js +33 -71
  266. package/dist/esm/commands/handlers/status.d.ts +34 -0
  267. package/{lib → dist/esm}/commands/handlers/status.js +1 -9
  268. package/dist/esm/commands/handlers/store.d.ts +3 -0
  269. package/{lib → dist/esm}/commands/handlers/store.js +20 -44
  270. package/dist/esm/commands/index.d.ts +2 -0
  271. package/dist/esm/commands/index.js +55 -0
  272. package/dist/esm/commands/list.d.ts +2 -0
  273. package/dist/esm/commands/list.js +71 -0
  274. package/dist/esm/commands/login.d.ts +2 -0
  275. package/{lib → dist/esm}/commands/login.js +24 -44
  276. package/dist/esm/commands/logout.d.ts +2 -0
  277. package/dist/esm/commands/logout.js +25 -0
  278. package/dist/esm/commands/lsub.d.ts +2 -0
  279. package/dist/esm/commands/lsub.js +64 -0
  280. package/dist/esm/commands/noop.d.ts +2 -0
  281. package/dist/esm/commands/noop.js +13 -0
  282. package/dist/esm/commands/rename.d.ts +2 -0
  283. package/{lib → dist/esm}/commands/rename.js +32 -51
  284. package/dist/esm/commands/search.d.ts +10 -0
  285. package/dist/esm/commands/search.js +54 -0
  286. package/dist/esm/commands/select.d.ts +19 -0
  287. package/dist/esm/commands/select.js +214 -0
  288. package/dist/esm/commands/status.d.ts +2 -0
  289. package/{lib → dist/esm}/commands/status.js +18 -39
  290. package/dist/esm/commands/store.d.ts +10 -0
  291. package/{lib → dist/esm}/commands/store.js +39 -73
  292. package/dist/esm/commands/subscribe.d.ts +2 -0
  293. package/{lib → dist/esm}/commands/subscribe.js +22 -39
  294. package/dist/esm/commands/uid-copy.d.ts +2 -0
  295. package/dist/esm/commands/uid-copy.js +4 -0
  296. package/dist/esm/commands/uid-fetch.d.ts +3 -0
  297. package/dist/esm/commands/uid-fetch.js +3 -0
  298. package/dist/esm/commands/uid-search.d.ts +3 -0
  299. package/dist/esm/commands/uid-search.js +3 -0
  300. package/dist/esm/commands/uid-store.d.ts +3 -0
  301. package/dist/esm/commands/uid-store.js +3 -0
  302. package/dist/esm/commands/unsubscribe.d.ts +2 -0
  303. package/{lib → dist/esm}/commands/unsubscribe.js +22 -37
  304. package/dist/esm/dates.d.ts +64 -0
  305. package/{lib → dist/esm}/dates.js +6 -14
  306. package/dist/esm/deflate-layer.d.ts +83 -0
  307. package/{lib → dist/esm}/deflate-layer.js +9 -26
  308. package/dist/esm/encoded-words.d.ts +15 -0
  309. package/{lib → dist/esm}/encoded-words.js +9 -25
  310. package/dist/esm/envelope.d.ts +33 -0
  311. package/{lib → dist/esm}/envelope.js +8 -19
  312. package/dist/esm/esearch.d.ts +96 -0
  313. package/{lib → dist/esm}/esearch.js +12 -39
  314. package/dist/esm/framing.d.ts +66 -0
  315. package/dist/esm/framing.js +82 -0
  316. package/dist/esm/index.d.ts +9 -0
  317. package/dist/esm/index.js +6 -0
  318. package/dist/esm/list-extensions.d.ts +50 -0
  319. package/{lib → dist/esm}/list-extensions.js +1 -4
  320. package/dist/esm/load-plugins.d.ts +21 -0
  321. package/{lib → dist/esm}/load-plugins.js +9 -43
  322. package/dist/esm/mailbox-name.d.ts +26 -0
  323. package/{lib → dist/esm}/mailbox-name.js +5 -26
  324. package/dist/esm/mimeparser.d.ts +137 -0
  325. package/{lib → dist/esm}/mimeparser.js +74 -152
  326. package/dist/esm/mock-client.d.ts +39 -0
  327. package/{lib → dist/esm}/mock-client.js +26 -40
  328. package/dist/esm/numbers.d.ts +28 -0
  329. package/{lib → dist/esm}/numbers.js +1 -8
  330. package/dist/esm/package.json +3 -0
  331. package/dist/esm/plugins/acl.d.ts +2 -0
  332. package/{lib → dist/esm}/plugins/acl.js +146 -240
  333. package/dist/esm/plugins/appendlimit.d.ts +16 -0
  334. package/{lib → dist/esm}/plugins/appendlimit.js +5 -16
  335. package/dist/esm/plugins/auth-plain.d.ts +2 -0
  336. package/{lib → dist/esm}/plugins/auth-plain.js +11 -31
  337. package/dist/esm/plugins/binary.d.ts +30 -0
  338. package/{lib → dist/esm}/plugins/binary.js +17 -43
  339. package/dist/esm/plugins/catenate.d.ts +14 -0
  340. package/{lib → dist/esm}/plugins/catenate.js +19 -40
  341. package/dist/esm/plugins/compress.d.ts +7 -0
  342. package/dist/esm/plugins/compress.js +61 -0
  343. package/dist/esm/plugins/condstore.d.ts +5 -0
  344. package/{lib → dist/esm}/plugins/condstore.js +66 -152
  345. package/dist/esm/plugins/context-search.d.ts +8 -0
  346. package/{lib → dist/esm}/plugins/context-search.js +53 -88
  347. package/dist/esm/plugins/context-sort.d.ts +6 -0
  348. package/{lib → dist/esm}/plugins/context-sort.js +4 -9
  349. package/dist/esm/plugins/create-special-use.d.ts +7 -0
  350. package/{lib → dist/esm}/plugins/create-special-use.js +33 -55
  351. package/dist/esm/plugins/enable.d.ts +23 -0
  352. package/dist/esm/plugins/enable.js +111 -0
  353. package/dist/esm/plugins/esearch.d.ts +6 -0
  354. package/{lib → dist/esm}/plugins/esearch.js +13 -42
  355. package/dist/esm/plugins/esort.d.ts +6 -0
  356. package/{lib → dist/esm}/plugins/esort.js +7 -25
  357. package/dist/esm/plugins/id.d.ts +5 -0
  358. package/dist/esm/plugins/id.js +108 -0
  359. package/dist/esm/plugins/idle.d.ts +5 -0
  360. package/dist/esm/plugins/idle.js +70 -0
  361. package/dist/esm/plugins/imap4rev2.d.ts +6 -0
  362. package/{lib → dist/esm}/plugins/imap4rev2.js +24 -60
  363. package/dist/esm/plugins/index.d.ts +2 -0
  364. package/dist/esm/plugins/index.js +113 -0
  365. package/dist/esm/plugins/list-extended.d.ts +2 -0
  366. package/{lib → dist/esm}/plugins/list-extended.js +28 -66
  367. package/dist/esm/plugins/list-status.d.ts +6 -0
  368. package/{lib → dist/esm}/plugins/list-status.js +5 -12
  369. package/dist/esm/plugins/literalminus.d.ts +8 -0
  370. package/{lib → dist/esm}/plugins/literalminus.js +2 -5
  371. package/dist/esm/plugins/literalplus.d.ts +6 -0
  372. package/{lib → dist/esm}/plugins/literalplus.js +2 -5
  373. package/dist/esm/plugins/logindisabled.d.ts +5 -0
  374. package/dist/esm/plugins/logindisabled.js +39 -0
  375. package/dist/esm/plugins/messagelimit.d.ts +19 -0
  376. package/{lib → dist/esm}/plugins/messagelimit.js +18 -41
  377. package/dist/esm/plugins/metadata-server.d.ts +7 -0
  378. package/{lib → dist/esm}/plugins/metadata-server.js +3 -7
  379. package/dist/esm/plugins/metadata.d.ts +11 -0
  380. package/dist/esm/plugins/metadata.js +421 -0
  381. package/dist/esm/plugins/move.d.ts +11 -0
  382. package/{lib → dist/esm}/plugins/move.js +37 -66
  383. package/dist/esm/plugins/multiappend.d.ts +12 -0
  384. package/{lib → dist/esm}/plugins/multiappend.js +2 -5
  385. package/dist/esm/plugins/multisearch.d.ts +6 -0
  386. package/{lib → dist/esm}/plugins/multisearch.js +24 -48
  387. package/dist/esm/plugins/namespace.d.ts +5 -0
  388. package/dist/esm/plugins/namespace.js +42 -0
  389. package/dist/esm/plugins/notify.d.ts +2 -0
  390. package/{lib → dist/esm}/plugins/notify.js +90 -134
  391. package/dist/esm/plugins/oauthbearer.d.ts +32 -0
  392. package/{lib → dist/esm}/plugins/oauthbearer.js +18 -48
  393. package/dist/esm/plugins/objectid.d.ts +23 -0
  394. package/{lib → dist/esm}/plugins/objectid.js +21 -58
  395. package/dist/esm/plugins/partial.d.ts +6 -0
  396. package/{lib → dist/esm}/plugins/partial.js +7 -15
  397. package/dist/esm/plugins/preview.d.ts +31 -0
  398. package/{lib → dist/esm}/plugins/preview.js +28 -66
  399. package/dist/esm/plugins/qresync.d.ts +11 -0
  400. package/{lib → dist/esm}/plugins/qresync.js +64 -134
  401. package/dist/esm/plugins/quota.d.ts +18 -0
  402. package/{lib → dist/esm}/plugins/quota.js +89 -135
  403. package/dist/esm/plugins/replace.d.ts +14 -0
  404. package/{lib → dist/esm}/plugins/replace.js +21 -51
  405. package/dist/esm/plugins/sasl-ir.d.ts +5 -0
  406. package/{lib → dist/esm}/plugins/sasl-ir.js +3 -6
  407. package/dist/esm/plugins/savedate.d.ts +17 -0
  408. package/{lib → dist/esm}/plugins/savedate.js +5 -15
  409. package/dist/esm/plugins/savelimit.d.ts +10 -0
  410. package/{lib → dist/esm}/plugins/savelimit.js +3 -6
  411. package/dist/esm/plugins/searchres.d.ts +6 -0
  412. package/{lib → dist/esm}/plugins/searchres.js +13 -22
  413. package/dist/esm/plugins/sort-display.d.ts +11 -0
  414. package/{lib → dist/esm}/plugins/sort-display.js +6 -10
  415. package/dist/esm/plugins/sort.d.ts +11 -0
  416. package/{lib → dist/esm}/plugins/sort.js +24 -46
  417. package/dist/esm/plugins/special-use.d.ts +10 -0
  418. package/{lib → dist/esm}/plugins/special-use.js +9 -24
  419. package/dist/esm/plugins/starttls.d.ts +5 -0
  420. package/{lib → dist/esm}/plugins/starttls.js +20 -37
  421. package/dist/esm/plugins/status-size.d.ts +7 -0
  422. package/{lib → dist/esm}/plugins/status-size.js +4 -11
  423. package/dist/esm/plugins/thread-orderedsubject.d.ts +11 -0
  424. package/{lib → dist/esm}/plugins/thread-orderedsubject.js +3 -6
  425. package/dist/esm/plugins/thread-references.d.ts +11 -0
  426. package/{lib → dist/esm}/plugins/thread-references.js +3 -6
  427. package/dist/esm/plugins/uidonly.d.ts +15 -0
  428. package/{lib → dist/esm}/plugins/uidonly.js +11 -35
  429. package/dist/esm/plugins/uidplus.d.ts +15 -0
  430. package/{lib → dist/esm}/plugins/uidplus.js +25 -45
  431. package/dist/esm/plugins/unauthenticate.d.ts +7 -0
  432. package/dist/esm/plugins/unauthenticate.js +17 -0
  433. package/dist/esm/plugins/unselect.d.ts +5 -0
  434. package/dist/esm/plugins/unselect.js +21 -0
  435. package/dist/esm/plugins/utf8-accept.d.ts +6 -0
  436. package/{lib → dist/esm}/plugins/utf8-accept.js +10 -21
  437. package/dist/esm/plugins/x-gm-ext-1.d.ts +26 -0
  438. package/{lib → dist/esm}/plugins/x-gm-ext-1.js +48 -100
  439. package/dist/esm/plugins/xoauth2.d.ts +2 -0
  440. package/dist/esm/plugins/xoauth2.js +140 -0
  441. package/dist/esm/plugins/xtoybird.d.ts +2 -0
  442. package/dist/esm/plugins/xtoybird.js +218 -0
  443. package/dist/esm/server.d.ts +876 -0
  444. package/dist/esm/server.js +2543 -0
  445. package/dist/esm/smtp-listener.d.ts +13 -0
  446. package/{lib → dist/esm}/smtp-listener.js +5 -12
  447. package/dist/esm/sorting.d.ts +77 -0
  448. package/{lib → dist/esm}/sorting.js +40 -53
  449. package/dist/esm/threading.d.ts +30 -0
  450. package/{lib → dist/esm}/threading.js +29 -70
  451. package/dist/esm/types.d.ts +327 -0
  452. package/dist/esm/types.js +2 -0
  453. package/dist/esm/utf8-session.d.ts +17 -0
  454. package/{lib → dist/esm}/utf8-session.js +15 -25
  455. package/dist/esm/vanished.d.ts +21 -0
  456. package/{lib → dist/esm}/vanished.js +16 -21
  457. package/dist/plugin-help.json +298 -0
  458. package/package.json +55 -12
  459. package/lib/commands/capability.js +0 -47
  460. package/lib/commands/check.js +0 -21
  461. package/lib/commands/close.js +0 -30
  462. package/lib/commands/examine.js +0 -7
  463. package/lib/commands/expunge.js +0 -27
  464. package/lib/commands/list.js +0 -100
  465. package/lib/commands/logout.js +0 -41
  466. package/lib/commands/lsub.js +0 -87
  467. package/lib/commands/noop.js +0 -21
  468. package/lib/commands/search.js +0 -76
  469. package/lib/commands/select.js +0 -289
  470. package/lib/commands/uid copy.js +0 -7
  471. package/lib/commands/uid fetch.js +0 -5
  472. package/lib/commands/uid search.js +0 -5
  473. package/lib/commands/uid store.js +0 -5
  474. package/lib/plugins/compress.js +0 -76
  475. package/lib/plugins/enable.js +0 -155
  476. package/lib/plugins/id.js +0 -138
  477. package/lib/plugins/idle.js +0 -105
  478. package/lib/plugins/logindisabled.js +0 -50
  479. package/lib/plugins/metadata.js +0 -475
  480. package/lib/plugins/namespace.js +0 -67
  481. package/lib/plugins/unauthenticate.js +0 -28
  482. package/lib/plugins/unselect.js +0 -36
  483. package/lib/plugins/xoauth2.js +0 -188
  484. package/lib/plugins/xtoybird.js +0 -282
  485. package/lib/server.js +0 -2880
@@ -0,0 +1,299 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.badArgument = void 0;
7
+ exports.default = appendCommand;
8
+ exports.appendError = appendError;
9
+ exports.prepareAppend = prepareAppend;
10
+ exports.storeMessages = storeMessages;
11
+ exports.getPendingTarget = getPendingTarget;
12
+ exports.refuseMissingTarget = refuseMissingTarget;
13
+ const imap_handler_1 = __importDefault(require("imap-handler"));
14
+ const flags_js_1 = require("./handlers/flags.js");
15
+ const arguments_js_1 = require("../arguments.js");
16
+ /**
17
+ * Creates an error that refuses an APPEND like command
18
+ *
19
+ * @param {String} text Human readable text
20
+ * @param {String} [code] Response code, e.g. "TOOBIG"
21
+ * @param {Array} [codeArgs] Arguments of the response code, as response attributes
22
+ * @param {String} [response] "NO" (default) or "BAD"
23
+ * @return {Error} Error object
24
+ */
25
+ function appendError(text, code, codeArgs, response) {
26
+ const err = new Error(text);
27
+ err.imapResponse = response || 'NO';
28
+ err.responseCode = code || false;
29
+ err.responseCodeArgs = codeArgs || [];
30
+ return err;
31
+ }
32
+ const badArgument = (text) => appendError(text, false, false, 'BAD');
33
+ exports.badArgument = badArgument;
34
+ /**
35
+ * Parses a flag list, flags are atoms, and \Recent or unknown system flags can not be set (RFC 3501 section 9)
36
+ *
37
+ * @param {Object} connection IMAPConnection
38
+ * @param {Array} list Parsed flag list
39
+ * @return {Array} Flags
40
+ */
41
+ function parseFlags(connection, list) {
42
+ try {
43
+ return list.map(flag => {
44
+ if (!flag || flag.type !== 'ATOM') {
45
+ throw new Error('Invalid flags argument');
46
+ }
47
+ const value = (0, flags_js_1.normalizeSystemFlag)(flag.value);
48
+ (0, flags_js_1.checkSystemFlags)(connection, value);
49
+ return value;
50
+ });
51
+ }
52
+ catch {
53
+ throw badArgument('Invalid flags argument');
54
+ }
55
+ }
56
+ /**
57
+ * Parses the messages of an APPEND like command. RFC 3502 and RFC 4466 section 3:
58
+ * append-message = [SP flag-list] [SP date-time] SP append-data, where append-data is a literal
59
+ * or an extension (label SP value) from `server.appendDataHandlers`, e.g. CATENATE (RFC 4469)
60
+ *
61
+ * @param {Object} connection IMAPConnection
62
+ * @param {Array} args Parsed arguments after the mailbox name
63
+ * @param {Number} maxMessages Largest number of messages allowed
64
+ * @return {Array} Messages `{ flags, internaldate, raw, resolve, literal8 }`, resolve builds the message source
65
+ * of an append-data extension. Throws a BAD error if the arguments break the grammar
66
+ */
67
+ function parseMessages(connection, args, maxMessages) {
68
+ const server = connection.server;
69
+ const messages = [];
70
+ for (let i = 0; i < args.length;) {
71
+ const message = { flags: [], internaldate: false, raw: false };
72
+ if (Array.isArray(args[i])) {
73
+ message.flags = parseFlags(connection, args[i++]);
74
+ }
75
+ // date-time is always a quoted string, a literal here is the message
76
+ if (args[i] && args[i].type === 'STRING') {
77
+ if (!server.validateInternalDate(args[i].value)) {
78
+ throw badArgument('Invalid internaldate argument');
79
+ }
80
+ message.internaldate = args[i++].value;
81
+ }
82
+ const appendData = args[i++];
83
+ const label = appendData && appendData.type === 'ATOM' ? String(appendData.value).toUpperCase() : '';
84
+ if (appendData && appendData.type === 'LITERAL') {
85
+ message.raw = appendData.value;
86
+ }
87
+ else if (appendData && appendData.type === 'LITERAL8' && server.appendLiteral8) {
88
+ // RFC 3516 section 4.4: the message as a literal8, server.appendLiteral8 (BINARY) stores it
89
+ message.raw = appendData.value;
90
+ message.literal8 = true;
91
+ }
92
+ else if (label && Object.hasOwn(server.appendDataHandlers, label) && i < args.length) {
93
+ message.resolve = server.appendDataHandlers[label](connection, args[i++]);
94
+ }
95
+ else {
96
+ throw badArgument('Invalid message source argument');
97
+ }
98
+ messages.push(message);
99
+ }
100
+ if (!messages.length) {
101
+ throw badArgument('Missing message argument');
102
+ }
103
+ if (messages.length > maxMessages) {
104
+ // only a single message unless MULTIAPPEND is supported (RFC 4466 section 3)
105
+ throw badArgument('Only a single message can be appended');
106
+ }
107
+ return messages;
108
+ }
109
+ /**
110
+ * Sends the response for an error from appendError()
111
+ *
112
+ * @param {Object} connection IMAPConnection
113
+ * @param {Object} parsed Parsed command
114
+ * @param {String} data Raw command
115
+ * @param {Error} err Error object
116
+ * @param {String} description Description of a NO response
117
+ */
118
+ function sendAppendError(connection, parsed, data, err, description) {
119
+ const attributes = [];
120
+ if (err.responseCode) {
121
+ attributes.push({
122
+ type: 'SECTION',
123
+ section: [{ type: 'ATOM', value: err.responseCode }].concat(err.responseCodeArgs)
124
+ });
125
+ }
126
+ attributes.push({ type: 'TEXT', value: err.message });
127
+ connection.send({
128
+ tag: parsed.tag,
129
+ command: err.imapResponse,
130
+ attributes
131
+ }, err.imapResponse === 'BAD' ? 'INVALID COMMAND' : description, parsed, data);
132
+ }
133
+ /**
134
+ * Finds the target mailbox name of an APPEND or REPLACE command when a literal of a message (or of a CATENATE TEXT
135
+ * part) is announced. Only the start of the command up to the mailbox argument is parsed, so the data of earlier
136
+ * literals is not parsed again for every message of a MULTIAPPEND
137
+ *
138
+ * @param {Object} connection IMAPConnection
139
+ * @param {String} command Upper case command name
140
+ * @param {String} line Command received so far, up to the literal size marker
141
+ * @return {String|Boolean} storage name of the mailbox, or false if the literal is not a message or the name is not
142
+ * known yet or not valid
143
+ */
144
+ function getPendingTarget(connection, command, line) {
145
+ const options = connection.server.getCommandOptions(command);
146
+ if (!options.appendMessage) {
147
+ return false;
148
+ }
149
+ const mailboxPosition = options.mailboxArguments[0];
150
+ // the literal of a CATENATE URL is not a message part
151
+ if (/[ (]URL $/i.test(line.slice(-5))) {
152
+ return false;
153
+ }
154
+ // an open CATENATE list is closed for parsing
155
+ const parse = (text) => {
156
+ text = text.replace(/ $/, '');
157
+ for (const suffix of ['', ')']) {
158
+ try {
159
+ const parsed = imap_handler_1.default.parser(text + suffix);
160
+ (0, arguments_js_1.restoreNilAtoms)(parsed, text, (path) => path.length === 1 && path[0] === mailboxPosition);
161
+ return parsed.attributes || [];
162
+ }
163
+ catch {
164
+ // try the next suffix
165
+ }
166
+ }
167
+ return [];
168
+ };
169
+ // the command up to the first literal, or up to the end of it when that literal is the mailbox name
170
+ const literal = line.match(/(~?)\{(\d+)\+?\}\r\n/);
171
+ let attributes = parse(literal ? line.substr(0, literal.index) : line);
172
+ if (attributes.length <= mailboxPosition && literal && !literal[1]) {
173
+ attributes = parse(line.substr(0, literal.index + literal[0].length + Number(literal[2])));
174
+ }
175
+ // a literal8 can not be a mailbox name, the command handler refuses it
176
+ const pathArg = attributes[mailboxPosition];
177
+ if (!(0, arguments_js_1.isAstring)(pathArg)) {
178
+ return false;
179
+ }
180
+ try {
181
+ return connection.importMailboxName(pathArg.value);
182
+ }
183
+ catch {
184
+ // the command handler refuses the name
185
+ return false;
186
+ }
187
+ }
188
+ /**
189
+ * A literal filter (`server.literalFilters`) that refuses the message of an APPEND or REPLACE to a mailbox that does
190
+ * not exist before the client sends it, by not sending a continuation request (RFC 3502 section 6.3.11 example A004,
191
+ * RFC 3501 section 6.3.11: TRYCREATE). Not while earlier commands are still waiting, these could create the mailbox
192
+ *
193
+ * @param {Object} connection IMAPConnection
194
+ * @param {String} command Upper case command name
195
+ * @param {String} line Command received so far, up to the literal size marker
196
+ * @return {Object|Boolean} `{ command, code, text }` to refuse the literal, or false
197
+ */
198
+ function refuseMissingTarget(connection, command, line) {
199
+ const path = !connection.isBusy() && getPendingTarget(connection, command, line);
200
+ return path !== false && connection.server.targetRefusal(path);
201
+ }
202
+ /**
203
+ * Prepares the messages of an APPEND like command (APPEND, REPLACE): parses the arguments, checks
204
+ * the target mailbox, builds the message sources and runs `server.appendChecks` through
205
+ * IMAPConnection#checkAppend. Nothing is stored yet, so a failure leaves every mailbox as it was
206
+ * (RFC 3502 section 6.3.11). The error response is sent here.
207
+ *
208
+ * The checks get the built messages (with `raw`) of the whole command and the options as
209
+ * `{ command, replaced }`, `replaced` is the message that REPLACE removes.
210
+ *
211
+ * @param {Object} connection IMAPConnection
212
+ * @param {Object} parsed Parsed command
213
+ * @param {String} data Raw command
214
+ * @param {Object} pathArg Parsed mailbox name argument
215
+ * @param {Array} args Parsed arguments after the mailbox name
216
+ * @param {Object} options `{ command, maxMessages, replaced }`
217
+ * @return {Object|Boolean} `{ mailbox, messages }` or false if an error response was sent
218
+ */
219
+ function prepareAppend(connection, parsed, data, pathArg, args, options) {
220
+ const description = options.command + ' FAILED';
221
+ const maxMessages = options.maxMessages || (connection.server.multiAppend ? Infinity : 1);
222
+ try {
223
+ if (!pathArg || ['STRING', 'ATOM', 'LITERAL'].indexOf(pathArg.type) < 0) {
224
+ throw badArgument('Invalid mailbox argument');
225
+ }
226
+ const messages = parseMessages(connection, args, maxMessages);
227
+ // getTargetMailbox sends the NO response itself
228
+ const mailbox = connection.getTargetMailbox(pathArg.value, parsed, data, description);
229
+ if (!mailbox) {
230
+ return false;
231
+ }
232
+ messages.forEach(message => {
233
+ if (message.resolve) {
234
+ message.raw = message.resolve();
235
+ }
236
+ else if (message.literal8) {
237
+ // literal8 is only set when server.appendLiteral8 exists, and then raw holds the literal
238
+ message.raw = connection.server.appendLiteral8(message.raw);
239
+ }
240
+ });
241
+ // every message source is built now
242
+ const prepared = messages;
243
+ // checkAppend sends the NO response itself
244
+ if (!connection.checkAppend(mailbox, prepared, parsed, data, description, { command: options.command, replaced: options.replaced })) {
245
+ return false;
246
+ }
247
+ return { mailbox, messages: prepared };
248
+ }
249
+ catch (error) {
250
+ const err = error;
251
+ if (!err.imapResponse) {
252
+ throw err;
253
+ }
254
+ sendAppendError(connection, parsed, data, err, description);
255
+ return false;
256
+ }
257
+ }
258
+ /**
259
+ * Stores prepared messages. The sessions that have the target mailbox selected get EXISTS updates
260
+ *
261
+ * @param {Object} connection IMAPConnection
262
+ * @param {Object} prepared Result of prepareAppend()
263
+ * @return {Object} `{ mailbox, message, messages }`, message is the last stored message
264
+ */
265
+ function storeMessages(connection, prepared) {
266
+ const messages = prepared.messages.map(message => connection.server.appendMessage(prepared.mailbox, message.flags, message.internaldate, message.raw).message);
267
+ return { mailbox: prepared.mailbox, message: messages[messages.length - 1], messages };
268
+ }
269
+ function appendCommand(connection, parsed, data, callback) {
270
+ const args = [].concat(parsed.attributes || []);
271
+ const prepared = prepareAppend(connection, parsed, data, args.shift(), args, { command: 'APPEND' });
272
+ if (!prepared) {
273
+ return callback();
274
+ }
275
+ const appendResult = storeMessages(connection, prepared);
276
+ connection.send({
277
+ tag: parsed.tag,
278
+ command: 'OK',
279
+ attributes: [
280
+ {
281
+ type: 'TEXT',
282
+ value: 'APPEND Completed'
283
+ }
284
+ ]
285
+ }, 'APPEND', parsed, data, appendResult);
286
+ callback();
287
+ }
288
+ {
289
+ const defaultExport = exports.default;
290
+ if (defaultExport && (typeof defaultExport === 'function' || typeof defaultExport === 'object')) {
291
+ for (const key of Object.keys(exports)) {
292
+ if (key !== 'default' && !(key in defaultExport)) {
293
+ defaultExport[key] = exports[key];
294
+ }
295
+ }
296
+ Object.defineProperty(defaultExport, 'default', { value: defaultExport, enumerable: false, writable: true, configurable: true });
297
+ module.exports = defaultExport;
298
+ }
299
+ }
@@ -0,0 +1,2 @@
1
+ import type { Callback, IMAPConnection, ParsedCommand } from '../types.js';
2
+ export default function capabilityCommand(connection: IMAPConnection, parsed: ParsedCommand, data: string, callback: Callback): void;
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.default = capabilityCommand;
4
+ function capabilityCommand(connection, parsed, data, callback) {
5
+ const capabilities = ['IMAP4rev1'];
6
+ Object.keys(connection.server.capabilities).forEach(key => {
7
+ if (connection.server.capabilities[key](connection)) {
8
+ capabilities.push(key);
9
+ }
10
+ });
11
+ connection.send({
12
+ tag: '*',
13
+ command: 'CAPABILITY',
14
+ attributes: capabilities.map(capability => {
15
+ return {
16
+ type: 'TEXT',
17
+ value: capability
18
+ };
19
+ })
20
+ }, 'CAPABILITY LIST', parsed, data, capabilities);
21
+ connection.send({
22
+ tag: parsed.tag,
23
+ command: 'OK',
24
+ attributes: [
25
+ {
26
+ type: 'TEXT',
27
+ value: 'Completed'
28
+ }
29
+ ]
30
+ }, 'CAPABILITY COMPLETED', parsed, data, capabilities);
31
+ callback();
32
+ }
33
+ {
34
+ const defaultExport = exports.default;
35
+ if (defaultExport && (typeof defaultExport === 'function' || typeof defaultExport === 'object')) {
36
+ for (const key of Object.keys(exports)) {
37
+ if (key !== 'default' && !(key in defaultExport)) {
38
+ defaultExport[key] = exports[key];
39
+ }
40
+ }
41
+ Object.defineProperty(defaultExport, 'default', { value: defaultExport, enumerable: false, writable: true, configurable: true });
42
+ module.exports = defaultExport;
43
+ }
44
+ }
@@ -0,0 +1,2 @@
1
+ import type { Callback, IMAPConnection, ParsedCommand } from '../types.js';
2
+ export default function checkCommand(connection: IMAPConnection, parsed: ParsedCommand, data: string, callback: Callback): void;
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.default = checkCommand;
4
+ function checkCommand(connection, parsed, data, callback) {
5
+ connection.send({
6
+ tag: parsed.tag,
7
+ command: 'OK',
8
+ attributes: [
9
+ {
10
+ type: 'TEXT',
11
+ value: 'Completed'
12
+ }
13
+ ]
14
+ }, 'CHECK', parsed, data);
15
+ callback();
16
+ }
17
+ {
18
+ const defaultExport = exports.default;
19
+ if (defaultExport && (typeof defaultExport === 'function' || typeof defaultExport === 'object')) {
20
+ for (const key of Object.keys(exports)) {
21
+ if (key !== 'default' && !(key in defaultExport)) {
22
+ defaultExport[key] = exports[key];
23
+ }
24
+ }
25
+ Object.defineProperty(defaultExport, 'default', { value: defaultExport, enumerable: false, writable: true, configurable: true });
26
+ module.exports = defaultExport;
27
+ }
28
+ }
@@ -0,0 +1,2 @@
1
+ import type { Callback, IMAPConnection, ParsedCommand } from '../types.js';
2
+ export default function closeCommand(connection: IMAPConnection, parsed: ParsedCommand, data: string, callback: Callback): void;
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.default = closeCommand;
4
+ function closeCommand(connection, parsed, data, callback) {
5
+ // a read-only mailbox is closed without removing anything
6
+ if (connection.canExpunge()) {
7
+ connection.expungeDeleted(connection.selectedMailbox, true);
8
+ }
9
+ // CLOSE does not send pending EXPUNGE or EXISTS responses (RFC 3501 section 6.4.2)
10
+ connection.notificationQueue = [];
11
+ connection.send({
12
+ tag: parsed.tag,
13
+ command: 'OK',
14
+ attributes: [
15
+ {
16
+ type: 'TEXT',
17
+ value: 'Mailbox closed'
18
+ }
19
+ ]
20
+ }, 'CLOSE', parsed, data);
21
+ connection.closeMailbox();
22
+ return callback();
23
+ }
24
+ {
25
+ const defaultExport = exports.default;
26
+ if (defaultExport && (typeof defaultExport === 'function' || typeof defaultExport === 'object')) {
27
+ for (const key of Object.keys(exports)) {
28
+ if (key !== 'default' && !(key in defaultExport)) {
29
+ defaultExport[key] = exports[key];
30
+ }
31
+ }
32
+ Object.defineProperty(defaultExport, 'default', { value: defaultExport, enumerable: false, writable: true, configurable: true });
33
+ module.exports = defaultExport;
34
+ }
35
+ }
@@ -0,0 +1,30 @@
1
+ import type { Callback, IMAPConnection, Mailbox, Message, ParsedCommand } from '../types.js';
2
+ /** The result of copyToMailbox(), the extra context of the tagged OK (UIDPLUS) */
3
+ export interface CopyResult {
4
+ mailbox: Mailbox;
5
+ sourceUids: number[];
6
+ targetUids: number[];
7
+ /** the copied source messages */
8
+ messages: Message[];
9
+ }
10
+ export default function copyCommand(connection: IMAPConnection, parsed: ParsedCommand, data: string, callback: Callback): void;
11
+ /**
12
+ * Shared implementation of COPY and UID COPY
13
+ *
14
+ * @param {Boolean} isUid If true, the sequence set holds UID values
15
+ */
16
+ declare function copyMessages(connection: IMAPConnection, parsed: ParsedCommand, data: string, callback: Callback, isUid: boolean): void;
17
+ /**
18
+ * Copies messages from the selected mailbox to another one, the copy step of COPY and MOVE.
19
+ * Sends a tagged NO and returns false if the target mailbox can not be used.
20
+ *
21
+ * @param {Object} connection IMAP connection
22
+ * @param {Object} parsed Parsed command, with the sequence set and the mailbox name as arguments
23
+ * @param {String} data Raw command
24
+ * @param {Boolean} isUid If true, the sequence set holds UID values
25
+ * @param {String} failDescription Description for the failure response
26
+ * @param {Boolean} [isMove] If true, the messages are moved, the caller expunges them afterwards
27
+ * @return {Object|false} `{ mailbox, sourceUids, targetUids, messages }`, where messages lists the copied source messages
28
+ */
29
+ declare function copyToMailbox(connection: IMAPConnection, parsed: ParsedCommand, data: string, isUid: boolean, failDescription: string, isMove?: boolean): CopyResult | false;
30
+ export { copyMessages, copyToMailbox };
@@ -0,0 +1,107 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.default = copyCommand;
4
+ exports.copyMessages = copyMessages;
5
+ exports.copyToMailbox = copyToMailbox;
6
+ function copyCommand(connection, parsed, data, callback) {
7
+ return copyMessages(connection, parsed, data, callback, false);
8
+ }
9
+ /**
10
+ * Shared implementation of COPY and UID COPY
11
+ *
12
+ * @param {Boolean} isUid If true, the sequence set holds UID values
13
+ */
14
+ function copyMessages(connection, parsed, data, callback, isUid) {
15
+ const command = isUid ? 'UID COPY' : 'COPY';
16
+ if (!parsed.attributes ||
17
+ parsed.attributes.length !== 2 ||
18
+ !parsed.attributes[0] ||
19
+ ['ATOM', 'SEQUENCE'].indexOf(parsed.attributes[0].type) < 0 ||
20
+ !parsed.attributes[1] ||
21
+ ['ATOM', 'STRING', 'LITERAL'].indexOf(parsed.attributes[1].type) < 0) {
22
+ connection.send({
23
+ tag: parsed.tag,
24
+ command: 'BAD',
25
+ attributes: [
26
+ {
27
+ type: 'TEXT',
28
+ value: command + ' expects sequence set and a mailbox name'
29
+ }
30
+ ]
31
+ }, 'INVALID COMMAND', parsed, data);
32
+ return callback();
33
+ }
34
+ const result = copyToMailbox(connection, parsed, data, isUid, command + ' FAIL');
35
+ if (!result) {
36
+ return callback();
37
+ }
38
+ // the result is the extra context info for UIDPLUS
39
+ connection.send({
40
+ tag: parsed.tag,
41
+ command: 'OK',
42
+ attributes: [
43
+ {
44
+ type: 'TEXT',
45
+ value: command + ' Completed'
46
+ }
47
+ ]
48
+ }, command, parsed, data, result);
49
+ callback();
50
+ }
51
+ /**
52
+ * Copies messages from the selected mailbox to another one, the copy step of COPY and MOVE.
53
+ * Sends a tagged NO and returns false if the target mailbox can not be used.
54
+ *
55
+ * @param {Object} connection IMAP connection
56
+ * @param {Object} parsed Parsed command, with the sequence set and the mailbox name as arguments
57
+ * @param {String} data Raw command
58
+ * @param {Boolean} isUid If true, the sequence set holds UID values
59
+ * @param {String} failDescription Description for the failure response
60
+ * @param {Boolean} [isMove] If true, the messages are moved, the caller expunges them afterwards
61
+ * @return {Object|false} `{ mailbox, sourceUids, targetUids, messages }`, where messages lists the copied source messages
62
+ */
63
+ function copyToMailbox(connection, parsed, data, isUid, failDescription, isMove) {
64
+ // the command handler checked the arguments
65
+ const attributes = parsed.attributes;
66
+ const range = connection.limitRange(parsed, connection.getCommandRange(attributes[0].value, isUid));
67
+ const mailbox = connection.getTargetMailbox(attributes[1].value, parsed, data, failDescription);
68
+ if (!mailbox) {
69
+ return false;
70
+ }
71
+ const messages = range.map(rangeMessage => rangeMessage[1]);
72
+ if (messages.some((message) => message.ghost)) {
73
+ // RFC 2180 section 4.4.1: nothing is copied when the set includes a message that another session expunged,
74
+ // the pending EXPUNGE responses go out before the NO
75
+ connection.sendStatus(parsed, data, 'NO', 'Some of the requested messages no longer exist', 'EXPUNGEISSUED', failDescription);
76
+ return false;
77
+ }
78
+ if (!connection.checkAppend(mailbox, messages, parsed, data, failDescription, { move: !!isMove, source: connection.selectedMailbox })) {
79
+ return false;
80
+ }
81
+ const sourceUids = [];
82
+ const targetUids = [];
83
+ // a range that is processed from the highest UID down (parsed.highestFirst) is still copied in UID order,
84
+ // so the new UIDs follow the order of the source UIDs (RFC 9738 section 3.1 MOVE example)
85
+ (parsed.highestFirst ? messages.slice().reverse() : messages).forEach((message) => {
86
+ sourceUids.push(message.uid);
87
+ targetUids.push(connection.server.copyMessage(mailbox, message).message.uid);
88
+ });
89
+ return {
90
+ mailbox,
91
+ sourceUids,
92
+ targetUids,
93
+ messages
94
+ };
95
+ }
96
+ {
97
+ const defaultExport = exports.default;
98
+ if (defaultExport && (typeof defaultExport === 'function' || typeof defaultExport === 'object')) {
99
+ for (const key of Object.keys(exports)) {
100
+ if (key !== 'default' && !(key in defaultExport)) {
101
+ defaultExport[key] = exports[key];
102
+ }
103
+ }
104
+ Object.defineProperty(defaultExport, 'default', { value: defaultExport, enumerable: false, writable: true, configurable: true });
105
+ module.exports = defaultExport;
106
+ }
107
+ }
@@ -0,0 +1,2 @@
1
+ import type { Callback, IMAPConnection, ParsedCommand } from '../types.js';
2
+ export default function createCommand(connection: IMAPConnection, parsed: ParsedCommand, data: string, callback: Callback): void;
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.default = createCommand;
4
+ function createCommand(connection, parsed, data, callback) {
5
+ if (!parsed.attributes || parsed.attributes.length !== 1 || !parsed.attributes[0] || ['STRING', 'LITERAL', 'ATOM'].indexOf(parsed.attributes[0].type) < 0) {
6
+ connection.send({
7
+ tag: parsed.tag,
8
+ command: 'BAD',
9
+ attributes: [
10
+ {
11
+ type: 'TEXT',
12
+ value: 'CREATE expects mailbox name'
13
+ }
14
+ ]
15
+ }, 'INVALID COMMAND', parsed, data);
16
+ return callback();
17
+ }
18
+ const path = parsed.attributes[0].value;
19
+ let mailbox;
20
+ try {
21
+ mailbox = connection.server.createMailbox(path);
22
+ }
23
+ catch (err) {
24
+ const E = err;
25
+ // RFC 5530 response codes, e.g. [ALREADYEXISTS]
26
+ connection.sendStatus(parsed, data, 'NO', E.message, E.code, 'CREATE FAILED');
27
+ return callback();
28
+ }
29
+ connection.server.mailboxChanged('create', mailbox.path);
30
+ connection.send({
31
+ tag: parsed.tag,
32
+ command: 'OK',
33
+ attributes: [
34
+ {
35
+ type: 'TEXT',
36
+ value: 'CREATE completed'
37
+ }
38
+ ]
39
+ }, 'CREATE', parsed, data, mailbox);
40
+ return callback();
41
+ }
42
+ {
43
+ const defaultExport = exports.default;
44
+ if (defaultExport && (typeof defaultExport === 'function' || typeof defaultExport === 'object')) {
45
+ for (const key of Object.keys(exports)) {
46
+ if (key !== 'default' && !(key in defaultExport)) {
47
+ defaultExport[key] = exports[key];
48
+ }
49
+ }
50
+ Object.defineProperty(defaultExport, 'default', { value: defaultExport, enumerable: false, writable: true, configurable: true });
51
+ module.exports = defaultExport;
52
+ }
53
+ }
@@ -0,0 +1,2 @@
1
+ import type { Callback, IMAPConnection, ParsedCommand } from '../types.js';
2
+ export default function deleteCommand(connection: IMAPConnection, parsed: ParsedCommand, data: string, callback: Callback): void;