imapkit 4.0.2 → 4.1.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 (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 +277 -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 +102 -123
  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 +34 -75
  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 +54 -11
  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
@@ -1,9 +1,6 @@
1
- 'use strict';
2
-
3
- const imapHandler = require('imap-handler');
4
- const { normalizeSystemFlag, checkSystemFlags } = require('./handlers/flags');
5
- const { restoreNilAtoms, isAstring } = require('../arguments');
6
-
1
+ import imapHandler from 'imap-handler';
2
+ import { normalizeSystemFlag, checkSystemFlags } from './handlers/flags.js';
3
+ import { restoreNilAtoms, isAstring } from '../arguments.js';
7
4
  /**
8
5
  * Creates an error that refuses an APPEND like command
9
6
  *
@@ -20,9 +17,7 @@ function appendError(text, code, codeArgs, response) {
20
17
  err.responseCodeArgs = codeArgs || [];
21
18
  return err;
22
19
  }
23
-
24
- const badArgument = text => appendError(text, false, false, 'BAD');
25
-
20
+ const badArgument = (text) => appendError(text, false, false, 'BAD');
26
21
  /**
27
22
  * Parses a flag list, flags are atoms, and \Recent or unknown system flags can not be set (RFC 3501 section 9)
28
23
  *
@@ -40,11 +35,11 @@ function parseFlags(connection, list) {
40
35
  checkSystemFlags(connection, value);
41
36
  return value;
42
37
  });
43
- } catch {
38
+ }
39
+ catch {
44
40
  throw badArgument('Invalid flags argument');
45
41
  }
46
42
  }
47
-
48
43
  /**
49
44
  * Parses the messages of an APPEND like command. RFC 3502 and RFC 4466 section 3:
50
45
  * append-message = [SP flag-list] [SP date-time] SP append-data, where append-data is a literal
@@ -59,14 +54,11 @@ function parseFlags(connection, list) {
59
54
  function parseMessages(connection, args, maxMessages) {
60
55
  const server = connection.server;
61
56
  const messages = [];
62
-
63
57
  for (let i = 0; i < args.length;) {
64
58
  const message = { flags: [], internaldate: false, raw: false };
65
-
66
59
  if (Array.isArray(args[i])) {
67
60
  message.flags = parseFlags(connection, args[i++]);
68
61
  }
69
-
70
62
  // date-time is always a quoted string, a literal here is the message
71
63
  if (args[i] && args[i].type === 'STRING') {
72
64
  if (!server.validateInternalDate(args[i].value)) {
@@ -74,36 +66,33 @@ function parseMessages(connection, args, maxMessages) {
74
66
  }
75
67
  message.internaldate = args[i++].value;
76
68
  }
77
-
78
69
  const appendData = args[i++];
79
70
  const label = appendData && appendData.type === 'ATOM' ? String(appendData.value).toUpperCase() : '';
80
71
  if (appendData && appendData.type === 'LITERAL') {
81
72
  message.raw = appendData.value;
82
- } else if (appendData && appendData.type === 'LITERAL8' && server.appendLiteral8) {
73
+ }
74
+ else if (appendData && appendData.type === 'LITERAL8' && server.appendLiteral8) {
83
75
  // RFC 3516 section 4.4: the message as a literal8, server.appendLiteral8 (BINARY) stores it
84
76
  message.raw = appendData.value;
85
77
  message.literal8 = true;
86
- } else if (label && Object.hasOwn(server.appendDataHandlers, label) && i < args.length) {
78
+ }
79
+ else if (label && Object.hasOwn(server.appendDataHandlers, label) && i < args.length) {
87
80
  message.resolve = server.appendDataHandlers[label](connection, args[i++]);
88
- } else {
81
+ }
82
+ else {
89
83
  throw badArgument('Invalid message source argument');
90
84
  }
91
-
92
85
  messages.push(message);
93
86
  }
94
-
95
87
  if (!messages.length) {
96
88
  throw badArgument('Missing message argument');
97
89
  }
98
-
99
90
  if (messages.length > maxMessages) {
100
91
  // only a single message unless MULTIAPPEND is supported (RFC 4466 section 3)
101
92
  throw badArgument('Only a single message can be appended');
102
93
  }
103
-
104
94
  return messages;
105
95
  }
106
-
107
96
  /**
108
97
  * Sends the response for an error from appendError()
109
98
  *
@@ -122,19 +111,12 @@ function sendAppendError(connection, parsed, data, err, description) {
122
111
  });
123
112
  }
124
113
  attributes.push({ type: 'TEXT', value: err.message });
125
-
126
- connection.send(
127
- {
128
- tag: parsed.tag,
129
- command: err.imapResponse,
130
- attributes
131
- },
132
- err.imapResponse === 'BAD' ? 'INVALID COMMAND' : description,
133
- parsed,
134
- data
135
- );
114
+ connection.send({
115
+ tag: parsed.tag,
116
+ command: err.imapResponse,
117
+ attributes
118
+ }, err.imapResponse === 'BAD' ? 'INVALID COMMAND' : description, parsed, data);
136
119
  }
137
-
138
120
  /**
139
121
  * Finds the target mailbox name of an APPEND or REPLACE command when a literal of a message (or of a CATENATE TEXT
140
122
  * part) is announced. Only the start of the command up to the mailbox argument is parsed, so the data of earlier
@@ -152,27 +134,25 @@ function getPendingTarget(connection, command, line) {
152
134
  return false;
153
135
  }
154
136
  const mailboxPosition = options.mailboxArguments[0];
155
-
156
137
  // the literal of a CATENATE URL is not a message part
157
138
  if (/[ (]URL $/i.test(line.slice(-5))) {
158
139
  return false;
159
140
  }
160
-
161
141
  // an open CATENATE list is closed for parsing
162
- const parse = text => {
142
+ const parse = (text) => {
163
143
  text = text.replace(/ $/, '');
164
144
  for (const suffix of ['', ')']) {
165
145
  try {
166
146
  const parsed = imapHandler.parser(text + suffix);
167
- restoreNilAtoms(parsed, text, path => path.length === 1 && path[0] === mailboxPosition);
147
+ restoreNilAtoms(parsed, text, (path) => path.length === 1 && path[0] === mailboxPosition);
168
148
  return parsed.attributes || [];
169
- } catch {
149
+ }
150
+ catch {
170
151
  // try the next suffix
171
152
  }
172
153
  }
173
154
  return [];
174
155
  };
175
-
176
156
  // the command up to the first literal, or up to the end of it when that literal is the mailbox name
177
157
  const literal = line.match(/(~?)\{(\d+)\+?\}\r\n/);
178
158
  let attributes = parse(literal ? line.substr(0, literal.index) : line);
@@ -186,12 +166,12 @@ function getPendingTarget(connection, command, line) {
186
166
  }
187
167
  try {
188
168
  return connection.importMailboxName(pathArg.value);
189
- } catch {
169
+ }
170
+ catch {
190
171
  // the command handler refuses the name
191
172
  return false;
192
173
  }
193
174
  }
194
-
195
175
  /**
196
176
  * A literal filter (`server.literalFilters`) that refuses the message of an APPEND or REPLACE to a mailbox that does
197
177
  * not exist before the client sends it, by not sending a continuation request (RFC 3502 section 6.3.11 example A004,
@@ -206,7 +186,6 @@ function refuseMissingTarget(connection, command, line) {
206
186
  const path = !connection.isBusy() && getPendingTarget(connection, command, line);
207
187
  return path !== false && connection.server.targetRefusal(path);
208
188
  }
209
-
210
189
  /**
211
190
  * Prepares the messages of an APPEND like command (APPEND, REPLACE): parses the arguments, checks
212
191
  * the target mailbox, builds the message sources and runs `server.appendChecks` through
@@ -232,28 +211,30 @@ function prepareAppend(connection, parsed, data, pathArg, args, options) {
232
211
  throw badArgument('Invalid mailbox argument');
233
212
  }
234
213
  const messages = parseMessages(connection, args, maxMessages);
235
-
236
214
  // getTargetMailbox sends the NO response itself
237
215
  const mailbox = connection.getTargetMailbox(pathArg.value, parsed, data, description);
238
216
  if (!mailbox) {
239
217
  return false;
240
218
  }
241
-
242
219
  messages.forEach(message => {
243
220
  if (message.resolve) {
244
221
  message.raw = message.resolve();
245
- } else if (message.literal8) {
222
+ }
223
+ else if (message.literal8) {
224
+ // literal8 is only set when server.appendLiteral8 exists, and then raw holds the literal
246
225
  message.raw = connection.server.appendLiteral8(message.raw);
247
226
  }
248
227
  });
249
-
228
+ // every message source is built now
229
+ const prepared = messages;
250
230
  // checkAppend sends the NO response itself
251
- if (!connection.checkAppend(mailbox, messages, parsed, data, description, { command: options.command, replaced: options.replaced })) {
231
+ if (!connection.checkAppend(mailbox, prepared, parsed, data, description, { command: options.command, replaced: options.replaced })) {
252
232
  return false;
253
233
  }
254
-
255
- return { mailbox, messages };
256
- } catch (err) {
234
+ return { mailbox, messages: prepared };
235
+ }
236
+ catch (error) {
237
+ const err = error;
257
238
  if (!err.imapResponse) {
258
239
  throw err;
259
240
  }
@@ -261,7 +242,6 @@ function prepareAppend(connection, parsed, data, pathArg, args, options) {
261
242
  return false;
262
243
  }
263
244
  }
264
-
265
245
  /**
266
246
  * Stores prepared messages. The sessions that have the target mailbox selected get EXISTS updates
267
247
  *
@@ -270,44 +250,26 @@ function prepareAppend(connection, parsed, data, pathArg, args, options) {
270
250
  * @return {Object} `{ mailbox, message, messages }`, message is the last stored message
271
251
  */
272
252
  function storeMessages(connection, prepared) {
273
- const messages = prepared.messages.map(
274
- message => connection.server.appendMessage(prepared.mailbox, message.flags, message.internaldate, message.raw).message
275
- );
253
+ const messages = prepared.messages.map(message => connection.server.appendMessage(prepared.mailbox, message.flags, message.internaldate, message.raw).message);
276
254
  return { mailbox: prepared.mailbox, message: messages[messages.length - 1], messages };
277
255
  }
278
-
279
- module.exports = function (connection, parsed, data, callback) {
256
+ export default function appendCommand(connection, parsed, data, callback) {
280
257
  const args = [].concat(parsed.attributes || []);
281
-
282
258
  const prepared = prepareAppend(connection, parsed, data, args.shift(), args, { command: 'APPEND' });
283
259
  if (!prepared) {
284
260
  return callback();
285
261
  }
286
-
287
262
  const appendResult = storeMessages(connection, prepared);
288
-
289
- connection.send(
290
- {
291
- tag: parsed.tag,
292
- command: 'OK',
293
- attributes: [
294
- {
295
- type: 'TEXT',
296
- value: 'APPEND Completed'
297
- }
298
- ]
299
- },
300
- 'APPEND',
301
- parsed,
302
- data,
303
- appendResult
304
- );
263
+ connection.send({
264
+ tag: parsed.tag,
265
+ command: 'OK',
266
+ attributes: [
267
+ {
268
+ type: 'TEXT',
269
+ value: 'APPEND Completed'
270
+ }
271
+ ]
272
+ }, 'APPEND', parsed, data, appendResult);
305
273
  callback();
306
- };
307
-
308
- module.exports.appendError = appendError;
309
- module.exports.badArgument = badArgument;
310
- module.exports.prepareAppend = prepareAppend;
311
- module.exports.storeMessages = storeMessages;
312
- module.exports.getPendingTarget = getPendingTarget;
313
- module.exports.refuseMissingTarget = refuseMissingTarget;
274
+ }
275
+ export { appendError, badArgument, prepareAppend, storeMessages, getPendingTarget, refuseMissingTarget };
@@ -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,29 @@
1
+ export default function capabilityCommand(connection, parsed, data, callback) {
2
+ const capabilities = ['IMAP4rev1'];
3
+ Object.keys(connection.server.capabilities).forEach(key => {
4
+ if (connection.server.capabilities[key](connection)) {
5
+ capabilities.push(key);
6
+ }
7
+ });
8
+ connection.send({
9
+ tag: '*',
10
+ command: 'CAPABILITY',
11
+ attributes: capabilities.map(capability => {
12
+ return {
13
+ type: 'TEXT',
14
+ value: capability
15
+ };
16
+ })
17
+ }, 'CAPABILITY LIST', parsed, data, capabilities);
18
+ connection.send({
19
+ tag: parsed.tag,
20
+ command: 'OK',
21
+ attributes: [
22
+ {
23
+ type: 'TEXT',
24
+ value: 'Completed'
25
+ }
26
+ ]
27
+ }, 'CAPABILITY COMPLETED', parsed, data, capabilities);
28
+ callback();
29
+ }
@@ -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,13 @@
1
+ export default function checkCommand(connection, parsed, data, callback) {
2
+ connection.send({
3
+ tag: parsed.tag,
4
+ command: 'OK',
5
+ attributes: [
6
+ {
7
+ type: 'TEXT',
8
+ value: 'Completed'
9
+ }
10
+ ]
11
+ }, 'CHECK', parsed, data);
12
+ callback();
13
+ }
@@ -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,20 @@
1
+ export default function closeCommand(connection, parsed, data, callback) {
2
+ // a read-only mailbox is closed without removing anything
3
+ if (connection.canExpunge()) {
4
+ connection.expungeDeleted(connection.selectedMailbox, true);
5
+ }
6
+ // CLOSE does not send pending EXPUNGE or EXISTS responses (RFC 3501 section 6.4.2)
7
+ connection.notificationQueue = [];
8
+ connection.send({
9
+ tag: parsed.tag,
10
+ command: 'OK',
11
+ attributes: [
12
+ {
13
+ type: 'TEXT',
14
+ value: 'Mailbox closed'
15
+ }
16
+ ]
17
+ }, 'CLOSE', parsed, data);
18
+ connection.closeMailbox();
19
+ return callback();
20
+ }
@@ -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 };
@@ -1,9 +1,6 @@
1
- 'use strict';
2
-
3
- module.exports = function (connection, parsed, data, callback) {
1
+ export default function copyCommand(connection, parsed, data, callback) {
4
2
  return copyMessages(connection, parsed, data, callback, false);
5
- };
6
-
3
+ }
7
4
  /**
8
5
  * Shared implementation of COPY and UID COPY
9
6
  *
@@ -11,58 +8,41 @@ module.exports = function (connection, parsed, data, callback) {
11
8
  */
12
9
  function copyMessages(connection, parsed, data, callback, isUid) {
13
10
  const command = isUid ? 'UID COPY' : 'COPY';
14
-
15
- if (
16
- !parsed.attributes ||
11
+ if (!parsed.attributes ||
17
12
  parsed.attributes.length !== 2 ||
18
13
  !parsed.attributes[0] ||
19
14
  ['ATOM', 'SEQUENCE'].indexOf(parsed.attributes[0].type) < 0 ||
20
15
  !parsed.attributes[1] ||
21
- ['ATOM', 'STRING', 'LITERAL'].indexOf(parsed.attributes[1].type) < 0
22
- ) {
23
- connection.send(
24
- {
25
- tag: parsed.tag,
26
- command: 'BAD',
27
- attributes: [
28
- {
29
- type: 'TEXT',
30
- value: command + ' expects sequence set and a mailbox name'
31
- }
32
- ]
33
- },
34
- 'INVALID COMMAND',
35
- parsed,
36
- data
37
- );
16
+ ['ATOM', 'STRING', 'LITERAL'].indexOf(parsed.attributes[1].type) < 0) {
17
+ connection.send({
18
+ tag: parsed.tag,
19
+ command: 'BAD',
20
+ attributes: [
21
+ {
22
+ type: 'TEXT',
23
+ value: command + ' expects sequence set and a mailbox name'
24
+ }
25
+ ]
26
+ }, 'INVALID COMMAND', parsed, data);
38
27
  return callback();
39
28
  }
40
-
41
29
  const result = copyToMailbox(connection, parsed, data, isUid, command + ' FAIL');
42
30
  if (!result) {
43
31
  return callback();
44
32
  }
45
-
46
33
  // the result is the extra context info for UIDPLUS
47
- connection.send(
48
- {
49
- tag: parsed.tag,
50
- command: 'OK',
51
- attributes: [
52
- {
53
- type: 'TEXT',
54
- value: command + ' Completed'
55
- }
56
- ]
57
- },
58
- command,
59
- parsed,
60
- data,
61
- result
62
- );
34
+ connection.send({
35
+ tag: parsed.tag,
36
+ command: 'OK',
37
+ attributes: [
38
+ {
39
+ type: 'TEXT',
40
+ value: command + ' Completed'
41
+ }
42
+ ]
43
+ }, command, parsed, data, result);
63
44
  callback();
64
45
  }
65
-
66
46
  /**
67
47
  * Copies messages from the selected mailbox to another one, the copy step of COPY and MOVE.
68
48
  * Sends a tagged NO and returns false if the target mailbox can not be used.
@@ -76,33 +56,31 @@ function copyMessages(connection, parsed, data, callback, isUid) {
76
56
  * @return {Object|false} `{ mailbox, sourceUids, targetUids, messages }`, where messages lists the copied source messages
77
57
  */
78
58
  function copyToMailbox(connection, parsed, data, isUid, failDescription, isMove) {
79
- const range = connection.limitRange(parsed, connection.getCommandRange(parsed.attributes[0].value, isUid));
80
- const mailbox = connection.getTargetMailbox(parsed.attributes[1].value, parsed, data, failDescription);
59
+ // the command handler checked the arguments
60
+ const attributes = parsed.attributes;
61
+ const range = connection.limitRange(parsed, connection.getCommandRange(attributes[0].value, isUid));
62
+ const mailbox = connection.getTargetMailbox(attributes[1].value, parsed, data, failDescription);
81
63
  if (!mailbox) {
82
64
  return false;
83
65
  }
84
-
85
66
  const messages = range.map(rangeMessage => rangeMessage[1]);
86
- if (messages.some(message => message.ghost)) {
67
+ if (messages.some((message) => message.ghost)) {
87
68
  // RFC 2180 section 4.4.1: nothing is copied when the set includes a message that another session expunged,
88
69
  // the pending EXPUNGE responses go out before the NO
89
70
  connection.sendStatus(parsed, data, 'NO', 'Some of the requested messages no longer exist', 'EXPUNGEISSUED', failDescription);
90
71
  return false;
91
72
  }
92
-
93
73
  if (!connection.checkAppend(mailbox, messages, parsed, data, failDescription, { move: !!isMove, source: connection.selectedMailbox })) {
94
74
  return false;
95
75
  }
96
-
97
76
  const sourceUids = [];
98
77
  const targetUids = [];
99
78
  // a range that is processed from the highest UID down (parsed.highestFirst) is still copied in UID order,
100
79
  // so the new UIDs follow the order of the source UIDs (RFC 9738 section 3.1 MOVE example)
101
- (parsed.highestFirst ? messages.slice().reverse() : messages).forEach(message => {
80
+ (parsed.highestFirst ? messages.slice().reverse() : messages).forEach((message) => {
102
81
  sourceUids.push(message.uid);
103
82
  targetUids.push(connection.server.copyMessage(mailbox, message).message.uid);
104
83
  });
105
-
106
84
  return {
107
85
  mailbox,
108
86
  sourceUids,
@@ -110,6 +88,4 @@ function copyToMailbox(connection, parsed, data, isUid, failDescription, isMove)
110
88
  messages
111
89
  };
112
90
  }
113
-
114
- module.exports.copyMessages = copyMessages;
115
- module.exports.copyToMailbox = copyToMailbox;
91
+ export { copyMessages, copyToMailbox };
@@ -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;
@@ -1,52 +1,38 @@
1
- 'use strict';
2
-
3
- module.exports = function (connection, parsed, data, callback) {
1
+ export default function createCommand(connection, parsed, data, callback) {
4
2
  if (!parsed.attributes || parsed.attributes.length !== 1 || !parsed.attributes[0] || ['STRING', 'LITERAL', 'ATOM'].indexOf(parsed.attributes[0].type) < 0) {
5
- connection.send(
6
- {
7
- tag: parsed.tag,
8
- command: 'BAD',
9
- attributes: [
10
- {
11
- type: 'TEXT',
12
- value: 'CREATE expects mailbox name'
13
- }
14
- ]
15
- },
16
- 'INVALID COMMAND',
17
- parsed,
18
- data
19
- );
3
+ connection.send({
4
+ tag: parsed.tag,
5
+ command: 'BAD',
6
+ attributes: [
7
+ {
8
+ type: 'TEXT',
9
+ value: 'CREATE expects mailbox name'
10
+ }
11
+ ]
12
+ }, 'INVALID COMMAND', parsed, data);
20
13
  return callback();
21
14
  }
22
-
23
15
  const path = parsed.attributes[0].value;
24
-
25
16
  let mailbox;
26
17
  try {
27
18
  mailbox = connection.server.createMailbox(path);
28
- } catch (E) {
19
+ }
20
+ catch (err) {
21
+ const E = err;
29
22
  // RFC 5530 response codes, e.g. [ALREADYEXISTS]
30
23
  connection.sendStatus(parsed, data, 'NO', E.message, E.code, 'CREATE FAILED');
31
24
  return callback();
32
25
  }
33
26
  connection.server.mailboxChanged('create', mailbox.path);
34
-
35
- connection.send(
36
- {
37
- tag: parsed.tag,
38
- command: 'OK',
39
- attributes: [
40
- {
41
- type: 'TEXT',
42
- value: 'CREATE completed'
43
- }
44
- ]
45
- },
46
- 'CREATE',
47
- parsed,
48
- data,
49
- mailbox
50
- );
27
+ connection.send({
28
+ tag: parsed.tag,
29
+ command: 'OK',
30
+ attributes: [
31
+ {
32
+ type: 'TEXT',
33
+ value: 'CREATE completed'
34
+ }
35
+ ]
36
+ }, 'CREATE', parsed, data, mailbox);
51
37
  return callback();
52
- };
38
+ }
@@ -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;