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,214 @@
1
+ export default function selectCommand(connection, parsed, data, callback) {
2
+ return selectMailbox(connection, parsed, data, callback, false);
3
+ }
4
+ /**
5
+ * Starts a SELECT or EXAMINE, also one that is going to fail: ENABLE is not allowed once a mailbox has been selected
6
+ * (RFC 5161 section 3.1), and the selected mailbox gets closed. CLOSED marks where the responses for the new mailbox
7
+ * start (RFC 7162 section 3.2.11, RFC 9051 sections 6.3.2 and 7.1)
8
+ *
9
+ * @param {Object} connection IMAP connection
10
+ * @param {Object} parsed Parsed command
11
+ * @param {String} data Raw command
12
+ */
13
+ function beginSelect(connection, parsed, data) {
14
+ connection.everSelected = true;
15
+ if (connection.state === 'Selected' && connection.server.closedChecks.some(check => check(connection))) {
16
+ connection.send({
17
+ tag: '*',
18
+ command: 'OK',
19
+ attributes: [
20
+ { type: 'SECTION', section: [{ type: 'ATOM', value: 'CLOSED' }] },
21
+ { type: 'TEXT', value: 'Previous mailbox closed' }
22
+ ]
23
+ }, 'CLOSED', parsed, data);
24
+ }
25
+ }
26
+ /**
27
+ * Shared implementation of SELECT and EXAMINE
28
+ *
29
+ * @param {Boolean} readOnly If true, the mailbox is opened read-only (EXAMINE)
30
+ */
31
+ function selectMailbox(connection, parsed, data, callback, readOnly) {
32
+ const command = readOnly ? 'EXAMINE' : 'SELECT';
33
+ if (!parsed.attributes || parsed.attributes.length !== 1 || !parsed.attributes[0] || ['STRING', 'LITERAL', 'ATOM'].indexOf(parsed.attributes[0].type) < 0) {
34
+ connection.send({
35
+ tag: parsed.tag,
36
+ command: 'BAD',
37
+ attributes: [
38
+ {
39
+ type: 'TEXT',
40
+ value: command + ' expects 1 mailbox argument'
41
+ }
42
+ ]
43
+ }, 'INVALID COMMAND', parsed, data);
44
+ return callback();
45
+ }
46
+ const path = parsed.attributes[0].value;
47
+ beginSelect(connection, parsed, data);
48
+ const mailbox = connection.server.getMailbox(path);
49
+ if (!mailbox || mailbox.flags.indexOf('\\Noselect') >= 0) {
50
+ // a failed SELECT leaves no mailbox selected (RFC 3501 section 6.3.1)
51
+ connection.closeMailbox();
52
+ connection.sendStatus(parsed, data, 'NO', 'Mailbox does not exist', 'NONEXISTENT', command + ' FAILED');
53
+ return callback();
54
+ }
55
+ connection.state = 'Selected';
56
+ connection.selectedMailbox = mailbox;
57
+ connection.readOnly = readOnly;
58
+ connection.notificationQueue = [];
59
+ // \Recent is a session flag: a read-write session takes over the messages
60
+ // that no other session has seen yet (RFC 3501 section 2.3.2)
61
+ const recent = new Set();
62
+ connection.recent = recent;
63
+ mailbox.messages.forEach((message) => {
64
+ if (message.recent) {
65
+ recent.add(message);
66
+ if (!readOnly) {
67
+ delete message.recent;
68
+ }
69
+ }
70
+ });
71
+ const status = connection.server.getStatus(mailbox);
72
+ const permanentFlags = status.permanentFlags.map((flag) => {
73
+ return {
74
+ type: 'ATOM',
75
+ value: flag
76
+ };
77
+ });
78
+ connection.send({
79
+ tag: '*',
80
+ command: 'FLAGS',
81
+ attributes: [permanentFlags]
82
+ }, command + ' FLAGS', parsed, data);
83
+ if (mailbox.allowPermanentFlags) {
84
+ permanentFlags.push({
85
+ type: 'TEXT',
86
+ value: '\\*'
87
+ });
88
+ }
89
+ connection.send({
90
+ tag: '*',
91
+ command: 'OK',
92
+ attributes: [
93
+ {
94
+ type: 'SECTION',
95
+ section: [
96
+ {
97
+ type: 'ATOM',
98
+ value: 'PERMANENTFLAGS'
99
+ },
100
+ // nothing can be changed in a read-only mailbox
101
+ readOnly ? [] : permanentFlags
102
+ ]
103
+ },
104
+ {
105
+ type: 'TEXT',
106
+ value: readOnly ? 'No permanent flags permitted' : 'Flags permitted'
107
+ }
108
+ ]
109
+ }, command + ' PERMANENTFLAGS', parsed, data);
110
+ connection.send({
111
+ tag: '*',
112
+ attributes: [
113
+ mailbox.messages.length,
114
+ {
115
+ type: 'ATOM',
116
+ value: 'EXISTS'
117
+ }
118
+ ]
119
+ }, command + ' EXISTS', parsed, data);
120
+ connection.send({
121
+ tag: '*',
122
+ attributes: [
123
+ connection.recent.size,
124
+ {
125
+ type: 'ATOM',
126
+ value: 'RECENT'
127
+ }
128
+ ]
129
+ }, command + ' RECENT', parsed, data);
130
+ const firstUnseen = mailbox.messages.findIndex((message) => message.flags.indexOf('\\Seen') < 0);
131
+ if (firstUnseen >= 0) {
132
+ connection.send({
133
+ tag: '*',
134
+ command: 'OK',
135
+ attributes: [
136
+ {
137
+ type: 'SECTION',
138
+ section: [
139
+ {
140
+ type: 'ATOM',
141
+ value: 'UNSEEN'
142
+ },
143
+ firstUnseen + 1
144
+ ]
145
+ },
146
+ {
147
+ type: 'TEXT',
148
+ value: 'First unseen message'
149
+ }
150
+ ]
151
+ }, command + ' UNSEEN', parsed, data);
152
+ }
153
+ connection.send({
154
+ tag: '*',
155
+ command: 'OK',
156
+ attributes: [
157
+ {
158
+ type: 'SECTION',
159
+ section: [
160
+ {
161
+ type: 'ATOM',
162
+ value: 'UIDVALIDITY'
163
+ },
164
+ mailbox.uidvalidity
165
+ ]
166
+ },
167
+ {
168
+ type: 'TEXT',
169
+ value: 'UIDs valid'
170
+ }
171
+ ]
172
+ }, command + ' UIDVALIDITY', parsed, data);
173
+ connection.send({
174
+ tag: '*',
175
+ command: 'OK',
176
+ attributes: [
177
+ {
178
+ type: 'SECTION',
179
+ section: [
180
+ {
181
+ type: 'ATOM',
182
+ value: 'UIDNEXT'
183
+ },
184
+ mailbox.uidnext
185
+ ]
186
+ },
187
+ {
188
+ type: 'TEXT',
189
+ value: 'Predicted next UID'
190
+ }
191
+ ]
192
+ }, command + ' UIDNEXT', parsed, data);
193
+ connection.send({
194
+ tag: parsed.tag,
195
+ command: 'OK',
196
+ attributes: [
197
+ {
198
+ type: 'SECTION',
199
+ section: [
200
+ {
201
+ type: 'ATOM',
202
+ value: readOnly ? 'READ-ONLY' : 'READ-WRITE'
203
+ }
204
+ ]
205
+ },
206
+ {
207
+ type: 'TEXT',
208
+ value: 'Completed'
209
+ }
210
+ ]
211
+ }, command, parsed, data);
212
+ return callback();
213
+ }
214
+ export { selectMailbox, beginSelect };
@@ -0,0 +1,2 @@
1
+ import type { Callback, IMAPConnection, ParsedCommand } from '../types.js';
2
+ export default function statusCommand(connection: IMAPConnection, parsed: ParsedCommand, data: string, callback: Callback): void;
@@ -1,63 +1,42 @@
1
- 'use strict';
2
-
3
- const { parseStatusItems, sendStatus } = require('./handlers/status');
4
-
5
- module.exports = function (connection, parsed, data, callback) {
6
- if (
7
- !parsed.attributes ||
1
+ import { parseStatusItems, sendStatus } from './handlers/status.js';
2
+ export default function statusCommand(connection, parsed, data, callback) {
3
+ if (!parsed.attributes ||
8
4
  parsed.attributes.length !== 2 ||
9
5
  !parsed.attributes[0] ||
10
6
  ['STRING', 'LITERAL', 'ATOM'].indexOf(parsed.attributes[0].type) < 0 ||
11
7
  !Array.isArray(parsed.attributes[1]) ||
12
- !parsed.attributes[1].length
13
- ) {
14
- connection.send(
15
- {
16
- tag: parsed.tag,
17
- command: 'BAD',
18
- attributes: [
19
- {
20
- type: 'TEXT',
21
- value: 'STATUS expects mailbox argument and a list of status items'
22
- }
23
- ]
24
- },
25
- 'INVALID COMMAND',
26
- parsed,
27
- data
28
- );
8
+ !parsed.attributes[1].length) {
9
+ connection.send({
10
+ tag: parsed.tag,
11
+ command: 'BAD',
12
+ attributes: [
13
+ {
14
+ type: 'TEXT',
15
+ value: 'STATUS expects mailbox argument and a list of status items'
16
+ }
17
+ ]
18
+ }, 'INVALID COMMAND', parsed, data);
29
19
  return callback();
30
20
  }
31
-
32
21
  const path = parsed.attributes[0].value;
33
-
34
22
  // invalid arguments are BAD even for a mailbox that does not exist
35
23
  let items;
36
24
  try {
37
25
  items = parseStatusItems(connection.server, parsed.attributes[1], connection);
38
- } catch (err) {
26
+ }
27
+ catch (err) {
39
28
  connection.sendStatus(parsed, data, 'BAD', err.message, false, 'STATUS FAILED');
40
29
  return callback();
41
30
  }
42
-
43
31
  const mailbox = connection.server.getMailbox(path);
44
-
45
32
  if (!mailbox || mailbox.flags.indexOf('\\Noselect') >= 0) {
46
33
  connection.sendStatus(parsed, data, 'NO', 'Mailbox does not exist', 'NONEXISTENT', 'STATUS FAILED');
47
34
  return callback();
48
35
  }
49
-
50
36
  sendStatus(connection, path, mailbox, items, parsed, data);
51
-
52
37
  // RFC 3501 section 6.3.10 and RFC 9051 section 6.3.11: STATUS SHOULD NOT be used on the selected mailbox. It
53
38
  // works, but the client gets the CLIENTBUG response code (RFC 5530 section 3) like RFC 9051 section 7.1 shows
54
39
  const clientBug = connection.state === 'Selected' && connection.selectedMailbox === mailbox;
55
- connection.sendStatus(
56
- parsed,
57
- data,
58
- 'OK',
59
- clientBug ? 'Status completed, STATUS SHOULD NOT be used on the selected mailbox' : 'Status completed',
60
- clientBug && 'CLIENTBUG'
61
- );
40
+ connection.sendStatus(parsed, data, 'OK', clientBug ? 'Status completed, STATUS SHOULD NOT be used on the selected mailbox' : 'Status completed', clientBug && 'CLIENTBUG');
62
41
  return callback();
63
- };
42
+ }
@@ -0,0 +1,10 @@
1
+ import type { Callback, IMAPConnection, ParsedCommand } from '../types.js';
2
+ /**
3
+ * Shared implementation of STORE and UID STORE
4
+ *
5
+ * @param {Boolean} isUid If true, the sequence set lists UIDs
6
+ */
7
+ declare function processStore(isUid: boolean, connection: IMAPConnection, parsed: ParsedCommand, data: string, callback: Callback): void;
8
+ declare const storeCommand: (connection: IMAPConnection, parsed: ParsedCommand, data: string, callback: Callback) => void;
9
+ export default storeCommand;
10
+ export { processStore };
@@ -1,8 +1,5 @@
1
- 'use strict';
2
-
3
- const storeHandlers = require('./handlers/store');
4
- const { restoreNilAtoms, isAtom } = require('../arguments');
5
-
1
+ import storeHandlers from './handlers/store.js';
2
+ import { restoreNilAtoms, isAtom } from '../arguments.js';
6
3
  /**
7
4
  * Returns the handler of a STORE data item, plugins first
8
5
  *
@@ -14,7 +11,6 @@ function getStoreHandler(connection, name) {
14
11
  name = String(name).toUpperCase();
15
12
  return connection.server.storeHandlers[name] || storeHandlers[name];
16
13
  }
17
-
18
14
  /**
19
15
  * Shared implementation of STORE and UID STORE
20
16
  *
@@ -22,7 +18,6 @@ function getStoreHandler(connection, name) {
22
18
  */
23
19
  function processStore(isUid, connection, parsed, data, callback) {
24
20
  const command = isUid ? 'UID STORE' : 'STORE';
25
-
26
21
  // a store handler with `astringValues` takes astrings, like the labels of X-GM-LABELS: these can be literals,
27
22
  // and NIL is a name there. Flags are atoms (RFC 3501 section 9: flag-list)
28
23
  const itemArgument = parsed.attributes && parsed.attributes[1];
@@ -30,122 +25,93 @@ function processStore(isUid, connection, parsed, data, callback) {
30
25
  const astringValues = !!(itemHandler && itemHandler.astringValues);
31
26
  const valueTypes = astringValues ? ['ATOM', 'STRING', 'LITERAL'] : ['ATOM', 'STRING'];
32
27
  if (astringValues) {
33
- restoreNilAtoms(parsed, data, path => path[0] === 2);
28
+ restoreNilAtoms(parsed, data, (path) => path[0] === 2);
34
29
  }
35
-
36
- if (
37
- !parsed.attributes ||
30
+ if (!parsed.attributes ||
38
31
  parsed.attributes.length !== 3 ||
39
32
  !parsed.attributes[0] ||
40
33
  ['ATOM', 'SEQUENCE'].indexOf(parsed.attributes[0].type) < 0 ||
41
34
  !parsed.attributes[1] ||
42
35
  ['ATOM'].indexOf(parsed.attributes[1].type) < 0 ||
43
36
  !parsed.attributes[2] ||
44
- !(valueTypes.indexOf(parsed.attributes[2].type) >= 0 || Array.isArray(parsed.attributes[2]))
45
- ) {
46
- connection.send(
47
- {
48
- tag: parsed.tag,
49
- command: 'BAD',
50
- attributes: [
51
- {
52
- type: 'TEXT',
53
- value: command + ' expects sequence set, item name and item value'
54
- }
55
- ]
56
- },
57
- 'INVALID COMMAND',
58
- parsed,
59
- data
60
- );
37
+ !(valueTypes.indexOf(parsed.attributes[2].type) >= 0 || Array.isArray(parsed.attributes[2]))) {
38
+ connection.send({
39
+ tag: parsed.tag,
40
+ command: 'BAD',
41
+ attributes: [
42
+ {
43
+ type: 'TEXT',
44
+ value: command + ' expects sequence set, item name and item value'
45
+ }
46
+ ]
47
+ }, 'INVALID COMMAND', parsed, data);
61
48
  return callback();
62
49
  }
63
-
64
50
  // A mailbox opened with EXAMINE is read-only (RFC 3501 6.3.2), so its flags can not be changed
65
51
  if (connection.refuseReadOnly(parsed, data, command + ' FAILED')) {
66
52
  return callback();
67
53
  }
68
-
69
54
  const range = connection.limitRange(parsed, connection.getCommandRange(parsed.attributes[0].value, isUid));
70
55
  const itemName = (parsed.attributes[1].value || '').toUpperCase();
71
56
  const itemValue = [].concat(parsed.attributes[2] || []);
72
57
  const affected = [];
73
58
  // if the sequence set includes a message that another session expunged without this session being told yet
74
59
  let hasExpunged = false;
75
-
76
60
  try {
77
61
  itemValue.forEach((item, i) => {
78
62
  if (!item || valueTypes.indexOf(item.type) < 0) {
79
63
  throw new Error('Invalid item value #' + (i + 1));
80
64
  }
81
65
  });
82
-
83
66
  const handler = itemHandler || getStoreHandler(connection, itemName);
84
67
  if (!handler) {
85
68
  throw new Error('Invalid STORE argument ' + itemName);
86
69
  }
87
-
88
70
  range.forEach(rangeMessage => {
89
71
  if (rangeMessage[1].ghost) {
90
72
  // RFC 2180 section 4.2: the flags of an expunged message are not stored
91
73
  hasExpunged = true;
92
74
  return;
93
75
  }
94
-
95
76
  for (let i = 0, len = connection.server.storeFilters.length; i < len; i++) {
96
77
  if (!connection.server.storeFilters[i](connection, rangeMessage[1], parsed, rangeMessage[0])) {
97
78
  return;
98
79
  }
99
80
  }
100
-
101
81
  handler(connection, rangeMessage[1], itemValue, rangeMessage[0], parsed, data);
102
-
103
82
  affected.push(rangeMessage[1]);
104
83
  });
105
- } catch (E) {
106
- connection.send(
107
- {
108
- tag: parsed.tag,
109
- command: 'BAD',
110
- attributes: [
111
- {
112
- type: 'TEXT',
113
- value: E.message
114
- }
115
- ]
116
- },
117
- command + ' FAILED',
118
- parsed,
119
- data
120
- );
84
+ }
85
+ catch (err) {
86
+ const E = err;
87
+ connection.send({
88
+ tag: parsed.tag,
89
+ command: 'BAD',
90
+ attributes: [
91
+ {
92
+ type: 'TEXT',
93
+ value: E.message
94
+ }
95
+ ]
96
+ }, command + ' FAILED', parsed, data);
121
97
  return callback();
122
98
  }
123
-
124
99
  // RFC 2180 sections 4.2.2 and 4.2.3: when the set includes expunged messages, the others are stored and get
125
100
  // their FETCH responses, and the tagged NO tells the client to issue NOOP. With .SILENT the result is OK as
126
101
  // long as the other messages were stored (section 4.2.1)
127
102
  const failed = hasExpunged && !/\.SILENT$/.test(itemName);
128
-
129
- connection.send(
130
- {
131
- tag: parsed.tag,
132
- command: failed ? 'NO' : 'OK',
133
- attributes: [].concat(failed ? { type: 'SECTION', section: [{ type: 'ATOM', value: 'EXPUNGEISSUED' }] } : [], {
134
- type: 'TEXT',
135
- value: failed ? 'Some of the messages no longer exist' : command + ' completed'
136
- })
137
- },
138
- command + (failed ? ' FAILED' : ' COMPLETE'),
139
- parsed,
140
- data,
141
- affected
142
- );
143
-
103
+ connection.send({
104
+ tag: parsed.tag,
105
+ command: failed ? 'NO' : 'OK',
106
+ attributes: [].concat(failed ? { type: 'SECTION', section: [{ type: 'ATOM', value: 'EXPUNGEISSUED' }] } : [], {
107
+ type: 'TEXT',
108
+ value: failed ? 'Some of the messages no longer exist' : command + ' completed'
109
+ })
110
+ }, command + (failed ? ' FAILED' : ' COMPLETE'), parsed, data, affected);
144
111
  // other sessions that have the mailbox selected learn about the new flags (RFC 3501 section 5.2)
145
112
  connection.notifyFlagChanges(affected);
146
-
147
113
  callback();
148
114
  }
149
-
150
- module.exports = (connection, parsed, data, callback) => processStore(false, connection, parsed, data, callback);
151
- module.exports.processStore = processStore;
115
+ const storeCommand = (connection, parsed, data, callback) => processStore(false, connection, parsed, data, callback);
116
+ export default storeCommand;
117
+ export { processStore };
@@ -0,0 +1,2 @@
1
+ import type { Callback, IMAPConnection, ParsedCommand } from '../types.js';
2
+ export default function subscribeCommand(connection: IMAPConnection, parsed: ParsedCommand, data: string, callback: Callback): void;
@@ -1,53 +1,36 @@
1
- 'use strict';
2
-
3
- module.exports = function (connection, parsed, data, callback) {
1
+ export default function subscribeCommand(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: 'SUBSCRIBE 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: 'SUBSCRIBE 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
  const mailbox = connection.server.getMailbox(path);
26
-
27
17
  if (!mailbox || mailbox.flags.indexOf('\\Noselect') >= 0) {
28
18
  connection.sendStatus(parsed, data, 'NO', 'Mailbox does not exist', 'NONEXISTENT', 'SUBSCRIBE FAILED');
29
19
  return callback();
30
20
  }
31
-
32
21
  if (!mailbox.subscribed) {
33
22
  mailbox.subscribed = true;
34
23
  connection.server.mailboxChanged('subscribe', mailbox.path);
35
24
  }
36
-
37
- connection.send(
38
- {
39
- tag: parsed.tag,
40
- command: 'OK',
41
- attributes: [
42
- {
43
- type: 'TEXT',
44
- value: 'SUBSCRIBE completed'
45
- }
46
- ]
47
- },
48
- 'SUBSCRIBE',
49
- parsed,
50
- data
51
- );
25
+ connection.send({
26
+ tag: parsed.tag,
27
+ command: 'OK',
28
+ attributes: [
29
+ {
30
+ type: 'TEXT',
31
+ value: 'SUBSCRIBE completed'
32
+ }
33
+ ]
34
+ }, 'SUBSCRIBE', parsed, data);
52
35
  return callback();
53
- };
36
+ }
@@ -0,0 +1,2 @@
1
+ import type { Callback, IMAPConnection, ParsedCommand } from '../types.js';
2
+ export default function uidCopyCommand(connection: IMAPConnection, parsed: ParsedCommand, data: string, callback: Callback): void;
@@ -0,0 +1,4 @@
1
+ import { copyMessages } from './copy.js';
2
+ export default function uidCopyCommand(connection, parsed, data, callback) {
3
+ return copyMessages(connection, parsed, data, callback, true);
4
+ }
@@ -0,0 +1,3 @@
1
+ import type { Callback, IMAPConnection, ParsedCommand } from '../types.js';
2
+ declare const uidFetchCommand: (connection: IMAPConnection, parsed: ParsedCommand, data: string, callback: Callback) => void;
3
+ export default uidFetchCommand;
@@ -0,0 +1,3 @@
1
+ import { processFetch } from './fetch.js';
2
+ const uidFetchCommand = (connection, parsed, data, callback) => processFetch(true, connection, parsed, data, callback);
3
+ export default uidFetchCommand;
@@ -0,0 +1,3 @@
1
+ import type { Callback, IMAPConnection, ParsedCommand } from '../types.js';
2
+ declare const uidSearchCommand: (connection: IMAPConnection, parsed: ParsedCommand, data: string, callback: Callback) => void;
3
+ export default uidSearchCommand;
@@ -0,0 +1,3 @@
1
+ import { processSearch } from './search.js';
2
+ const uidSearchCommand = (connection, parsed, data, callback) => processSearch(true, connection, parsed, data, callback);
3
+ export default uidSearchCommand;
@@ -0,0 +1,3 @@
1
+ import type { Callback, IMAPConnection, ParsedCommand } from '../types.js';
2
+ declare const uidStoreCommand: (connection: IMAPConnection, parsed: ParsedCommand, data: string, callback: Callback) => void;
3
+ export default uidStoreCommand;
@@ -0,0 +1,3 @@
1
+ import { processStore } from './store.js';
2
+ const uidStoreCommand = (connection, parsed, data, callback) => processStore(true, connection, parsed, data, callback);
3
+ export default uidStoreCommand;
@@ -0,0 +1,2 @@
1
+ import type { Callback, IMAPConnection, ParsedCommand } from '../types.js';
2
+ export default function unsubscribeCommand(connection: IMAPConnection, parsed: ParsedCommand, data: string, callback: Callback): void;