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
@@ -0,0 +1,55 @@
1
+ // Built-in command handlers by command name
2
+ import appendCommand from './append.js';
3
+ import capabilityCommand from './capability.js';
4
+ import checkCommand from './check.js';
5
+ import closeCommand from './close.js';
6
+ import copyCommand from './copy.js';
7
+ import createCommand from './create.js';
8
+ import deleteCommand from './delete.js';
9
+ import examineCommand from './examine.js';
10
+ import expungeCommand from './expunge.js';
11
+ import fetchCommand from './fetch.js';
12
+ import listCommand from './list.js';
13
+ import loginCommand from './login.js';
14
+ import logoutCommand from './logout.js';
15
+ import lsubCommand from './lsub.js';
16
+ import noopCommand from './noop.js';
17
+ import renameCommand from './rename.js';
18
+ import searchCommand from './search.js';
19
+ import selectCommand from './select.js';
20
+ import statusCommand from './status.js';
21
+ import storeCommand from './store.js';
22
+ import subscribeCommand from './subscribe.js';
23
+ import uidCopyCommand from './uid-copy.js';
24
+ import uidFetchCommand from './uid-fetch.js';
25
+ import uidSearchCommand from './uid-search.js';
26
+ import uidStoreCommand from './uid-store.js';
27
+ import unsubscribeCommand from './unsubscribe.js';
28
+ export const commands = {
29
+ APPEND: appendCommand,
30
+ CAPABILITY: capabilityCommand,
31
+ CHECK: checkCommand,
32
+ CLOSE: closeCommand,
33
+ COPY: copyCommand,
34
+ CREATE: createCommand,
35
+ DELETE: deleteCommand,
36
+ EXAMINE: examineCommand,
37
+ EXPUNGE: expungeCommand,
38
+ FETCH: fetchCommand,
39
+ LIST: listCommand,
40
+ LOGIN: loginCommand,
41
+ LOGOUT: logoutCommand,
42
+ LSUB: lsubCommand,
43
+ NOOP: noopCommand,
44
+ RENAME: renameCommand,
45
+ SEARCH: searchCommand,
46
+ SELECT: selectCommand,
47
+ STATUS: statusCommand,
48
+ STORE: storeCommand,
49
+ SUBSCRIBE: subscribeCommand,
50
+ 'UID COPY': uidCopyCommand,
51
+ 'UID FETCH': uidFetchCommand,
52
+ 'UID SEARCH': uidSearchCommand,
53
+ 'UID STORE': uidStoreCommand,
54
+ UNSUBSCRIBE: unsubscribeCommand
55
+ };
@@ -0,0 +1,2 @@
1
+ import type { Callback, IMAPConnection, ParsedCommand } from '../types.js';
2
+ export default function listCommand(connection: IMAPConnection, parsed: ParsedCommand, data: string, callback: Callback): void;
@@ -0,0 +1,71 @@
1
+ export default function listCommand(connection, parsed, data, callback) {
2
+ let folders;
3
+ if (!parsed.attributes ||
4
+ parsed.attributes.length !== 2 ||
5
+ !parsed.attributes[0] ||
6
+ ['STRING', 'LITERAL', 'ATOM'].indexOf(parsed.attributes[0].type) < 0 ||
7
+ !parsed.attributes[1] ||
8
+ ['STRING', 'LITERAL', 'ATOM'].indexOf(parsed.attributes[1].type) < 0) {
9
+ connection.send({
10
+ tag: parsed.tag,
11
+ command: 'BAD',
12
+ attributes: [
13
+ {
14
+ type: 'TEXT',
15
+ value: 'LIST expects 2 string arguments'
16
+ }
17
+ ]
18
+ }, 'INVALID COMMAND', parsed, data);
19
+ return callback();
20
+ }
21
+ if (!parsed.attributes[1].value) {
22
+ // empty reference lists separator only
23
+ const namespace = connection.server.storage[parsed.attributes[1].value || connection.server.referenceNamespace];
24
+ if (namespace) {
25
+ connection.send({
26
+ tag: '*',
27
+ command: 'LIST',
28
+ attributes: [
29
+ [
30
+ {
31
+ type: 'ATOM',
32
+ value: '\\Noselect'
33
+ }
34
+ ],
35
+ namespace.separator,
36
+ ''
37
+ ]
38
+ }, 'LIST ITEM', parsed, data);
39
+ }
40
+ }
41
+ else {
42
+ folders = connection.server.matchFolders(parsed.attributes[0].value, parsed.attributes[1].value, (path) => connection.exportMailboxName(path));
43
+ folders.forEach((folder) => {
44
+ connection.send({
45
+ tag: '*',
46
+ command: 'LIST',
47
+ attributes: [
48
+ folder.flags.map((flag) => {
49
+ return {
50
+ type: 'ATOM',
51
+ value: flag
52
+ };
53
+ }),
54
+ connection.server.getSeparator(folder),
55
+ connection.exportMailboxName(folder.path)
56
+ ]
57
+ }, 'LIST ITEM', parsed, data, folder);
58
+ });
59
+ }
60
+ connection.send({
61
+ tag: parsed.tag,
62
+ command: 'OK',
63
+ attributes: [
64
+ {
65
+ type: 'TEXT',
66
+ value: 'Completed'
67
+ }
68
+ ]
69
+ }, 'LIST', parsed, data);
70
+ return callback();
71
+ }
@@ -0,0 +1,2 @@
1
+ import type { Callback, IMAPConnection, ParsedCommand } from '../types.js';
2
+ export default function loginCommand(connection: IMAPConnection, parsed: ParsedCommand, data: string, callback: Callback): void;
@@ -1,67 +1,47 @@
1
- 'use strict';
2
-
3
- module.exports = function (connection, parsed, data, callback) {
1
+ export default function loginCommand(connection, parsed, data, callback) {
4
2
  // LOGIN expects 2 string params - username and password
5
- if (
6
- !parsed.attributes ||
3
+ if (!parsed.attributes ||
7
4
  parsed.attributes.length !== 2 ||
8
5
  !parsed.attributes[0] ||
9
6
  !parsed.attributes[1] ||
10
7
  ['STRING', 'LITERAL', 'ATOM'].indexOf(parsed.attributes[0].type) < 0 ||
11
- ['STRING', 'LITERAL', 'ATOM'].indexOf(parsed.attributes[1].type) < 0
12
- ) {
13
- connection.send(
14
- {
15
- tag: parsed.tag,
16
- command: 'BAD',
17
- attributes: [
18
- {
19
- type: 'TEXT',
20
- value: 'LOGIN takes 2 string arguments'
21
- }
22
- ]
23
- },
24
- 'INVALID COMMAND',
25
- parsed,
26
- data
27
- );
8
+ ['STRING', 'LITERAL', 'ATOM'].indexOf(parsed.attributes[1].type) < 0) {
9
+ connection.send({
10
+ tag: parsed.tag,
11
+ command: 'BAD',
12
+ attributes: [
13
+ {
14
+ type: 'TEXT',
15
+ value: 'LOGIN takes 2 string arguments'
16
+ }
17
+ ]
18
+ }, 'INVALID COMMAND', parsed, data);
28
19
  return callback();
29
20
  }
30
-
31
21
  // User names are unicode strings everywhere (LOGIN, SASL, ACL identifiers). LOGIN does not take UTF-8
32
22
  // user names or passwords, a client MUST use AUTHENTICATE for these (RFC 6855 and RFC 9755 section 5)
33
23
  if (parsed.attributes.some(attr => /[\x80-\xff]/.test(attr.value))) {
34
24
  connection.sendStatus(parsed, data, 'BAD', 'LOGIN does not take UTF-8 user names or passwords, use AUTHENTICATE (RFC 9755 section 5)');
35
25
  return callback();
36
26
  }
37
-
38
27
  const user = connection.server.getUser(parsed.attributes[0].value);
39
-
40
28
  if (!user || user.password !== parsed.attributes[1].value) {
41
29
  // RFC 5530 section 3: unknown user or bad password
42
30
  connection.sendStatus(parsed, data, 'NO', 'Login failed: authentication failure', 'AUTHENTICATIONFAILED', 'LOGIN FAILED');
43
31
  return callback();
44
32
  }
45
-
46
33
  connection.state = 'Authenticated';
47
34
  // the authenticated user, for plugins that tell users apart (e.g. ACL)
48
35
  connection.username = parsed.attributes[0].value;
49
-
50
- connection.send(
51
- {
52
- tag: parsed.tag,
53
- command: 'OK',
54
- attributes: [
55
- {
56
- type: 'TEXT',
57
- value: 'User logged in'
58
- }
59
- ]
60
- },
61
- 'LOGIN SUCCESS',
62
- parsed,
63
- data
64
- );
65
-
36
+ connection.send({
37
+ tag: parsed.tag,
38
+ command: 'OK',
39
+ attributes: [
40
+ {
41
+ type: 'TEXT',
42
+ value: 'User logged in'
43
+ }
44
+ ]
45
+ }, 'LOGIN SUCCESS', parsed, data);
66
46
  callback();
67
- };
47
+ }
@@ -0,0 +1,2 @@
1
+ import type { Callback, IMAPConnection, ParsedCommand } from '../types.js';
2
+ export default function logoutCommand(connection: IMAPConnection, parsed: ParsedCommand, data: string, callback: Callback): void;
@@ -0,0 +1,25 @@
1
+ export default function logoutCommand(connection, parsed, data, callback) {
2
+ connection.state = 'Logout';
3
+ connection.send({
4
+ tag: '*',
5
+ command: 'BYE',
6
+ attributes: [
7
+ {
8
+ type: 'TEXT',
9
+ value: 'LOGOUT received'
10
+ }
11
+ ]
12
+ }, 'LOGOUT UNTAGGED', parsed, data);
13
+ connection.send({
14
+ tag: parsed.tag,
15
+ command: 'OK',
16
+ attributes: [
17
+ {
18
+ type: 'TEXT',
19
+ value: 'Completed'
20
+ }
21
+ ]
22
+ }, 'LOGOUT COMPLETED', parsed, data);
23
+ connection.end();
24
+ callback();
25
+ }
@@ -0,0 +1,2 @@
1
+ import type { Callback, IMAPConnection, ParsedCommand } from '../types.js';
2
+ export default function lsubCommand(connection: IMAPConnection, parsed: ParsedCommand, data: string, callback: Callback): void;
@@ -0,0 +1,64 @@
1
+ export default function lsubCommand(connection, parsed, data, callback) {
2
+ if (!parsed.attributes ||
3
+ parsed.attributes.length !== 2 ||
4
+ !parsed.attributes[0] ||
5
+ ['STRING', 'LITERAL', 'ATOM'].indexOf(parsed.attributes[0].type) < 0 ||
6
+ !parsed.attributes[1] ||
7
+ ['STRING', 'LITERAL', 'ATOM'].indexOf(parsed.attributes[1].type) < 0) {
8
+ connection.send({
9
+ tag: parsed.tag,
10
+ command: 'BAD',
11
+ attributes: [
12
+ {
13
+ type: 'TEXT',
14
+ value: 'LSUB expects 2 string arguments'
15
+ }
16
+ ]
17
+ }, 'INVALID COMMAND', parsed, data);
18
+ return callback();
19
+ }
20
+ const server = connection.server;
21
+ const match = parsed.attributes[1].value;
22
+ const folders = server.matchFolders(parsed.attributes[0].value, match, (path) => connection.exportMailboxName(path), server.getSubscriptionTree());
23
+ folders.forEach((folder) => {
24
+ let flags;
25
+ if (folder.subscribed) {
26
+ // the subscription list holds names, a subscribed name is listed even if the mailbox does not exist.
27
+ // \Noselect has a special meaning in LSUB (RFC 5258 section 3.1), so it is not listed for these
28
+ flags = folder.flags.filter((flag) => flag !== '\\Noselect');
29
+ }
30
+ else if (match.substr(-1) === '%') {
31
+ // RFC 3501 section 6.3.9: with "%" a level that is not subscribed but has subscribed names
32
+ // below it is listed with \Noselect
33
+ flags = ['\\Noselect'];
34
+ }
35
+ else {
36
+ return;
37
+ }
38
+ connection.send({
39
+ tag: '*',
40
+ command: 'LSUB',
41
+ attributes: [
42
+ flags.map((flag) => {
43
+ return {
44
+ type: 'ATOM',
45
+ value: flag
46
+ };
47
+ }),
48
+ server.getSeparator(folder),
49
+ connection.exportMailboxName(folder.path)
50
+ ]
51
+ }, 'LSUB ITEM', parsed, data, folder);
52
+ });
53
+ connection.send({
54
+ tag: parsed.tag,
55
+ command: 'OK',
56
+ attributes: [
57
+ {
58
+ type: 'TEXT',
59
+ value: 'Completed'
60
+ }
61
+ ]
62
+ }, 'LSUB', parsed, data);
63
+ return callback();
64
+ }
@@ -0,0 +1,2 @@
1
+ import type { Callback, IMAPConnection, ParsedCommand } from '../types.js';
2
+ export default function noopCommand(connection: IMAPConnection, parsed: ParsedCommand, data: string, callback: Callback): void;
@@ -0,0 +1,13 @@
1
+ export default function noopCommand(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
+ }, 'NOOP completed', parsed, data);
12
+ callback();
13
+ }
@@ -0,0 +1,2 @@
1
+ import type { Callback, IMAPConnection, ParsedCommand } from '../types.js';
2
+ export default function renameCommand(connection: IMAPConnection, parsed: ParsedCommand, data: string, callback: Callback): void;
@@ -1,58 +1,42 @@
1
- 'use strict';
2
-
3
- module.exports = function (connection, parsed, data, callback) {
4
- if (
5
- !parsed.attributes ||
1
+ export default function renameCommand(connection, parsed, data, callback) {
2
+ if (!parsed.attributes ||
6
3
  parsed.attributes.length !== 2 ||
7
4
  !parsed.attributes[0] ||
8
5
  ['STRING', 'LITERAL', 'ATOM'].indexOf(parsed.attributes[0].type) < 0 ||
9
6
  !parsed.attributes[1] ||
10
- ['STRING', 'LITERAL', 'ATOM'].indexOf(parsed.attributes[1].type) < 0
11
- ) {
12
- connection.send(
13
- {
14
- tag: parsed.tag,
15
- command: 'BAD',
16
- attributes: [
17
- {
18
- type: 'TEXT',
19
- value: 'RENAME expects mailbox source and destination names'
20
- }
21
- ]
22
- },
23
- 'INVALID COMMAND',
24
- parsed,
25
- data
26
- );
7
+ ['STRING', 'LITERAL', 'ATOM'].indexOf(parsed.attributes[1].type) < 0) {
8
+ connection.send({
9
+ tag: parsed.tag,
10
+ command: 'BAD',
11
+ attributes: [
12
+ {
13
+ type: 'TEXT',
14
+ value: 'RENAME expects mailbox source and destination names'
15
+ }
16
+ ]
17
+ }, 'INVALID COMMAND', parsed, data);
27
18
  return callback();
28
19
  }
29
-
30
20
  const source = parsed.attributes[0].value;
31
21
  const destination = parsed.attributes[1].value;
32
-
33
22
  const server = connection.server;
34
23
  const mailbox = server.getMailbox(source);
35
24
  const target = server.getMailbox(destination);
36
-
37
25
  const sendError = (code, message) => {
38
26
  connection.sendStatus(parsed, data, 'NO', message, code, 'RENAME FAILED');
39
27
  return callback();
40
28
  };
41
-
42
29
  // check everything that can be checked up front, so that a failed RENAME never loses the source
43
30
  if (!mailbox || mailbox.flags.indexOf('\\Noselect') >= 0) {
44
31
  return sendError('NONEXISTENT', 'Mailbox does not exist');
45
32
  }
46
-
47
33
  if (target && target.flags.indexOf('\\Noselect') < 0) {
48
34
  return sendError('ALREADYEXISTS', 'Mailbox already exists');
49
35
  }
50
-
51
36
  const separator = server.getSeparator(mailbox);
52
37
  if (destination.substr(0, mailbox.path.length + separator.length) === mailbox.path + separator) {
53
38
  return sendError('CANNOT', 'Can not move a mailbox into itself');
54
39
  }
55
-
56
40
  const oldPath = mailbox.path;
57
41
  let newPath;
58
42
  try {
@@ -60,15 +44,17 @@ module.exports = function (connection, parsed, data, callback) {
60
44
  // Renaming INBOX moves its messages to the new mailbox and leaves INBOX empty (RFC 3501 section 6.3.5)
61
45
  const newMailbox = server.createMailbox(destination);
62
46
  newPath = newMailbox.path;
63
- mailbox.messages.forEach(message => {
47
+ mailbox.messages.forEach((message) => {
64
48
  server.copyMessage(newMailbox, message);
65
49
  });
66
50
  connection.expungeSpecificMessages(mailbox, () => true);
67
- } else {
51
+ }
52
+ else {
68
53
  server.deleteMailbox(source, true);
69
54
  try {
70
55
  server.createMailbox(destination, mailbox);
71
- } catch (E) {
56
+ }
57
+ catch (E) {
72
58
  // put the source mailbox back where it was
73
59
  server.createMailbox(source, mailbox);
74
60
  server.indexFolders();
@@ -77,26 +63,21 @@ module.exports = function (connection, parsed, data, callback) {
77
63
  server.indexFolders();
78
64
  newPath = mailbox.path;
79
65
  }
80
- } catch (E) {
66
+ }
67
+ catch (err) {
68
+ const E = err;
81
69
  return sendError(E.code, E.message);
82
70
  }
83
71
  server.mailboxChanged('rename', newPath, { oldPath });
84
-
85
- connection.send(
86
- {
87
- tag: parsed.tag,
88
- command: 'OK',
89
- attributes: [
90
- {
91
- type: 'TEXT',
92
- value: 'RENAME completed'
93
- }
94
- ]
95
- },
96
- 'RENAME',
97
- parsed,
98
- data,
99
- mailbox
100
- );
72
+ connection.send({
73
+ tag: parsed.tag,
74
+ command: 'OK',
75
+ attributes: [
76
+ {
77
+ type: 'TEXT',
78
+ value: 'RENAME completed'
79
+ }
80
+ ]
81
+ }, 'RENAME', parsed, data, mailbox);
101
82
  return callback();
102
- };
83
+ }
@@ -0,0 +1,10 @@
1
+ import type { Callback, IMAPConnection, ParsedCommand } from '../types.js';
2
+ /**
3
+ * Shared implementation of SEARCH and UID SEARCH
4
+ *
5
+ * @param {Boolean} isUid If true, the response lists UIDs instead of sequence numbers
6
+ */
7
+ declare function processSearch(isUid: boolean, connection: IMAPConnection, parsed: ParsedCommand, data: string, callback: Callback): void;
8
+ declare const searchCommand: (connection: IMAPConnection, parsed: ParsedCommand, data: string, callback: Callback) => void;
9
+ export default searchCommand;
10
+ export { processSearch };
@@ -0,0 +1,54 @@
1
+ import makeSearch from './handlers/search.js';
2
+ import { criteriaValues, sendSearchError } from './handlers/search.js';
3
+ /**
4
+ * Shared implementation of SEARCH and UID SEARCH
5
+ *
6
+ * @param {Boolean} isUid If true, the response lists UIDs instead of sequence numbers
7
+ */
8
+ function processSearch(isUid, connection, parsed, data, callback) {
9
+ const command = isUid ? 'UID SEARCH' : 'SEARCH';
10
+ if (!parsed.attributes || !parsed.attributes.length) {
11
+ connection.send({
12
+ tag: parsed.tag,
13
+ command: 'BAD',
14
+ attributes: [
15
+ {
16
+ type: 'TEXT',
17
+ value: command + ' expects search criteria, empty query given'
18
+ }
19
+ ]
20
+ }, command + ' FAILED', parsed, data);
21
+ return callback();
22
+ }
23
+ let searchResult;
24
+ try {
25
+ searchResult = makeSearch(connection, connection.getSessionMessages(), criteriaValues(parsed.attributes));
26
+ }
27
+ catch (E) {
28
+ sendSearchError(connection, parsed, data, E, command + ' FAILED');
29
+ return callback();
30
+ }
31
+ // RFC 3501 7.2.5: the SEARCH response is sent even when nothing matched. Plugins get the
32
+ // search result, so they can extend the response or replace it (e.g. ESEARCH)
33
+ connection.send({
34
+ tag: '*',
35
+ command: 'SEARCH',
36
+ attributes: searchResult.list.map(item => {
37
+ return isUid ? item.uid : searchResult.numbers[item.uid];
38
+ })
39
+ }, command, parsed, data, searchResult);
40
+ connection.send({
41
+ tag: parsed.tag,
42
+ command: 'OK',
43
+ attributes: [
44
+ {
45
+ type: 'TEXT',
46
+ value: command + ' completed'
47
+ }
48
+ ]
49
+ }, command, parsed, data);
50
+ return callback();
51
+ }
52
+ const searchCommand = (connection, parsed, data, callback) => processSearch(false, connection, parsed, data, callback);
53
+ export default searchCommand;
54
+ export { processSearch };
@@ -0,0 +1,19 @@
1
+ import type { Callback, IMAPConnection, ParsedCommand } from '../types.js';
2
+ export default function selectCommand(connection: IMAPConnection, parsed: ParsedCommand, data: string, callback: Callback): void;
3
+ /**
4
+ * Starts a SELECT or EXAMINE, also one that is going to fail: ENABLE is not allowed once a mailbox has been selected
5
+ * (RFC 5161 section 3.1), and the selected mailbox gets closed. CLOSED marks where the responses for the new mailbox
6
+ * start (RFC 7162 section 3.2.11, RFC 9051 sections 6.3.2 and 7.1)
7
+ *
8
+ * @param {Object} connection IMAP connection
9
+ * @param {Object} parsed Parsed command
10
+ * @param {String} data Raw command
11
+ */
12
+ declare function beginSelect(connection: IMAPConnection, parsed: ParsedCommand, data: string): void;
13
+ /**
14
+ * Shared implementation of SELECT and EXAMINE
15
+ *
16
+ * @param {Boolean} readOnly If true, the mailbox is opened read-only (EXAMINE)
17
+ */
18
+ declare function selectMailbox(connection: IMAPConnection, parsed: ParsedCommand, data: string, callback: Callback, readOnly: boolean): void;
19
+ export { selectMailbox, beginSelect };