imapkit 4.0.3 → 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 +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 +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,113 @@
1
+ // Built-in plugins by name (the file name without extension), see load-plugins.ts
2
+ import aclPlugin from './acl.js';
3
+ import appendlimitPlugin from './appendlimit.js';
4
+ import authPlainPlugin from './auth-plain.js';
5
+ import binaryPlugin from './binary.js';
6
+ import catenatePlugin from './catenate.js';
7
+ import compressPlugin from './compress.js';
8
+ import condstorePlugin from './condstore.js';
9
+ import contextSearchPlugin from './context-search.js';
10
+ import contextSortPlugin from './context-sort.js';
11
+ import createSpecialUsePlugin from './create-special-use.js';
12
+ import enablePlugin from './enable.js';
13
+ import esearchPlugin from './esearch.js';
14
+ import esortPlugin from './esort.js';
15
+ import idPlugin from './id.js';
16
+ import idlePlugin from './idle.js';
17
+ import imap4rev2Plugin from './imap4rev2.js';
18
+ import listExtendedPlugin from './list-extended.js';
19
+ import listStatusPlugin from './list-status.js';
20
+ import literalminusPlugin from './literalminus.js';
21
+ import literalplusPlugin from './literalplus.js';
22
+ import logindisabledPlugin from './logindisabled.js';
23
+ import messagelimitPlugin from './messagelimit.js';
24
+ import metadataPlugin from './metadata.js';
25
+ import metadataServerPlugin from './metadata-server.js';
26
+ import movePlugin from './move.js';
27
+ import multiappendPlugin from './multiappend.js';
28
+ import multisearchPlugin from './multisearch.js';
29
+ import namespacePlugin from './namespace.js';
30
+ import notifyPlugin from './notify.js';
31
+ import oauthbearerPlugin from './oauthbearer.js';
32
+ import objectidPlugin from './objectid.js';
33
+ import partialPlugin from './partial.js';
34
+ import previewPlugin from './preview.js';
35
+ import qresyncPlugin from './qresync.js';
36
+ import quotaPlugin from './quota.js';
37
+ import replacePlugin from './replace.js';
38
+ import saslIrPlugin from './sasl-ir.js';
39
+ import savedatePlugin from './savedate.js';
40
+ import savelimitPlugin from './savelimit.js';
41
+ import searchresPlugin from './searchres.js';
42
+ import sortPlugin from './sort.js';
43
+ import sortDisplayPlugin from './sort-display.js';
44
+ import specialUsePlugin from './special-use.js';
45
+ import starttlsPlugin from './starttls.js';
46
+ import statusSizePlugin from './status-size.js';
47
+ import threadOrderedsubjectPlugin from './thread-orderedsubject.js';
48
+ import threadReferencesPlugin from './thread-references.js';
49
+ import uidonlyPlugin from './uidonly.js';
50
+ import uidplusPlugin from './uidplus.js';
51
+ import unauthenticatePlugin from './unauthenticate.js';
52
+ import unselectPlugin from './unselect.js';
53
+ import utf8AcceptPlugin from './utf8-accept.js';
54
+ import xGmExt1Plugin from './x-gm-ext-1.js';
55
+ import xoauth2Plugin from './xoauth2.js';
56
+ import xtoybirdPlugin from './xtoybird.js';
57
+ export const plugins = {
58
+ acl: aclPlugin,
59
+ appendlimit: appendlimitPlugin,
60
+ 'auth-plain': authPlainPlugin,
61
+ binary: binaryPlugin,
62
+ catenate: catenatePlugin,
63
+ compress: compressPlugin,
64
+ condstore: condstorePlugin,
65
+ 'context-search': contextSearchPlugin,
66
+ 'context-sort': contextSortPlugin,
67
+ 'create-special-use': createSpecialUsePlugin,
68
+ enable: enablePlugin,
69
+ esearch: esearchPlugin,
70
+ esort: esortPlugin,
71
+ id: idPlugin,
72
+ idle: idlePlugin,
73
+ imap4rev2: imap4rev2Plugin,
74
+ 'list-extended': listExtendedPlugin,
75
+ 'list-status': listStatusPlugin,
76
+ literalminus: literalminusPlugin,
77
+ literalplus: literalplusPlugin,
78
+ logindisabled: logindisabledPlugin,
79
+ messagelimit: messagelimitPlugin,
80
+ metadata: metadataPlugin,
81
+ 'metadata-server': metadataServerPlugin,
82
+ move: movePlugin,
83
+ multiappend: multiappendPlugin,
84
+ multisearch: multisearchPlugin,
85
+ namespace: namespacePlugin,
86
+ notify: notifyPlugin,
87
+ oauthbearer: oauthbearerPlugin,
88
+ objectid: objectidPlugin,
89
+ partial: partialPlugin,
90
+ preview: previewPlugin,
91
+ qresync: qresyncPlugin,
92
+ quota: quotaPlugin,
93
+ replace: replacePlugin,
94
+ 'sasl-ir': saslIrPlugin,
95
+ savedate: savedatePlugin,
96
+ savelimit: savelimitPlugin,
97
+ searchres: searchresPlugin,
98
+ sort: sortPlugin,
99
+ 'sort-display': sortDisplayPlugin,
100
+ 'special-use': specialUsePlugin,
101
+ starttls: starttlsPlugin,
102
+ 'status-size': statusSizePlugin,
103
+ 'thread-orderedsubject': threadOrderedsubjectPlugin,
104
+ 'thread-references': threadReferencesPlugin,
105
+ uidonly: uidonlyPlugin,
106
+ uidplus: uidplusPlugin,
107
+ unauthenticate: unauthenticatePlugin,
108
+ unselect: unselectPlugin,
109
+ 'utf8-accept': utf8AcceptPlugin,
110
+ 'x-gm-ext-1': xGmExt1Plugin,
111
+ xoauth2: xoauth2Plugin,
112
+ xtoybird: xtoybirdPlugin
113
+ };
@@ -0,0 +1,2 @@
1
+ import type { IMAPServer } from '../types.js';
2
+ export default function listExtendedPlugin(server: IMAPServer): void;
@@ -1,17 +1,12 @@
1
- 'use strict';
2
-
3
- const { isDeepStrictEqual } = require('util');
4
- const { getListExtensions } = require('../list-extensions');
5
-
1
+ import { isDeepStrictEqual } from 'node:util';
2
+ import { getListExtensions } from '../list-extensions.js';
6
3
  /**
7
4
  * @help Adds LIST-EXTENDED [RFC5258] capability: selection options
8
5
  * @help SUBSCRIBED, REMOTE and RECURSIVEMATCH, return options SUBSCRIBED
9
6
  * @help and CHILDREN, multiple mailbox patterns and CHILDINFO.
10
7
  * @help \Noselect mailboxes are listed as \NonExistent
11
8
  */
12
-
13
- const { isAstring } = require('../arguments');
14
-
9
+ import { isAstring } from '../arguments.js';
15
10
  /**
16
11
  * Checks if a LIST command uses the extended syntax (RFC 5258 section 1): selection options before
17
12
  * the reference, a list of patterns, or more than 2 arguments (return options)
@@ -19,32 +14,27 @@ const { isAstring } = require('../arguments');
19
14
  * @param {Array} args Command arguments
20
15
  * @return {Boolean} true for an extended LIST command
21
16
  */
22
- const isExtended = args => Array.isArray(args[0]) || Array.isArray(args[1]) || args.length > 2;
23
-
24
- module.exports = function (server) {
17
+ const isExtended = (args) => Array.isArray(args[0]) || Array.isArray(args[1]) || args.length > 2;
18
+ export default function listExtendedPlugin(server) {
25
19
  const extensions = getListExtensions(server);
26
20
  if (extensions.enabled) {
27
21
  // already loaded by LIST-STATUS
28
22
  return;
29
23
  }
30
24
  extensions.enabled = true;
31
-
32
25
  server.registerCapability('LIST-EXTENDED');
33
-
34
26
  // RFC 5258 section 3.1. There are no remote mailboxes, so REMOTE changes nothing
35
27
  extensions.selectionOptions.SUBSCRIBED = {
36
28
  type: 'base',
37
29
  returnOption: 'SUBSCRIBED',
38
30
  includeNonExistent: true,
39
- match: folder => !!folder.subscribed
31
+ match: (folder) => !!folder.subscribed
40
32
  };
41
33
  extensions.selectionOptions.REMOTE = { type: 'independent' };
42
34
  extensions.selectionOptions.RECURSIVEMATCH = { type: 'modifier' };
43
-
44
35
  // RFC 5258 section 3.2. Children attributes are always returned, so CHILDREN needs no handling
45
36
  extensions.returnOptions.SUBSCRIBED = {};
46
37
  extensions.returnOptions.CHILDREN = {};
47
-
48
38
  /**
49
39
  * Parses selection or return options (RFC 5258 section 6, option-extension = tag [SP option-value])
50
40
  *
@@ -62,22 +52,22 @@ module.exports = function (server) {
62
52
  throw new Error('Invalid ' + kind + ' option');
63
53
  }
64
54
  const name = item.value.toUpperCase();
55
+ // only return options take a value (parse)
65
56
  const option = registry[name];
66
57
  if (!option) {
67
58
  // RFC 5258 section 3: "A server MUST respond to options it does not recognize with a BAD response"
68
59
  throw new Error('Unknown ' + kind + ' option ' + name);
69
60
  }
70
-
71
61
  let value = true;
72
62
  if (option.parse) {
73
63
  if (!Array.isArray(list[i + 1])) {
74
64
  throw new Error(name + ' ' + kind + ' option requires a value');
75
65
  }
76
66
  value = option.parse(list[++i], connection);
77
- } else if (Array.isArray(list[i + 1])) {
67
+ }
68
+ else if (Array.isArray(list[i + 1])) {
78
69
  throw new Error(name + ' ' + kind + ' option takes no value');
79
70
  }
80
-
81
71
  // RFC 5258 section 3: a repeated option counts once, so it can not have different values
82
72
  if (options.has(name) && !isDeepStrictEqual(options.get(name), value)) {
83
73
  throw new Error(name + ' ' + kind + ' option is repeated with a different value');
@@ -86,7 +76,6 @@ module.exports = function (server) {
86
76
  }
87
77
  return options;
88
78
  };
89
-
90
79
  /**
91
80
  * Parses the arguments of an extended LIST command:
92
81
  * list = "LIST" [SP list-select-opts] SP mailbox SP mbox-or-pat [SP list-return-opts]
@@ -99,26 +88,21 @@ module.exports = function (server) {
99
88
  let selection = new Map();
100
89
  let returns = new Map();
101
90
  let pos = 0;
102
-
103
91
  if (Array.isArray(args[0])) {
104
92
  selection = parseOptions(args[0], extensions.selectionOptions, 'selection', connection);
105
93
  pos++;
106
94
  }
107
-
108
95
  const reference = args[pos];
109
96
  let patterns = args[pos + 1];
110
97
  const rest = args.slice(pos + 2);
111
-
112
98
  if (!isAstring(reference)) {
113
99
  throw new Error('LIST expects a reference name');
114
100
  }
115
-
116
101
  // patterns = "(" list-mailbox *(SP list-mailbox) ")"
117
102
  patterns = Array.isArray(patterns) ? patterns : [patterns];
118
103
  if (!patterns.length || !patterns.every(isAstring)) {
119
104
  throw new Error('LIST expects a mailbox pattern or a list of patterns');
120
105
  }
121
-
122
106
  // list-return-opts = "RETURN" SP "(" [return-option *(SP return-option)] ")"
123
107
  if (rest.length) {
124
108
  if (rest.length !== 2 || !rest[0] || rest[0].type !== 'ATOM' || rest[0].value.toUpperCase() !== 'RETURN' || !Array.isArray(rest[1])) {
@@ -126,13 +110,11 @@ module.exports = function (server) {
126
110
  }
127
111
  returns = parseOptions(rest[1], extensions.returnOptions, 'return', connection);
128
112
  }
129
-
130
113
  // RFC 5258 section 3.1: RECURSIVEMATCH (any list-select-mod-opt) needs a list-select-base-opt
131
114
  const types = [...selection.keys()].map(name => extensions.selectionOptions[name].type);
132
115
  if (types.includes('modifier') && !types.includes('base')) {
133
116
  throw new Error('RECURSIVEMATCH must be used together with a selection option like SUBSCRIBED');
134
117
  }
135
-
136
118
  // a selection option implies its return option, eg. SUBSCRIBED
137
119
  selection.forEach((value, name) => {
138
120
  const implied = extensions.selectionOptions[name].returnOption;
@@ -140,73 +122,64 @@ module.exports = function (server) {
140
122
  returns.set(implied, true);
141
123
  }
142
124
  });
143
-
144
125
  return {
145
126
  selection,
146
127
  reference: reference.value,
147
128
  // RFC 5258 section 3: an empty pattern is ignored in an extended LIST command
148
- patterns: patterns.map(pattern => pattern.value).filter(pattern => pattern),
129
+ patterns: patterns.map(pattern => pattern.value).filter((pattern) => pattern),
149
130
  returns
150
131
  };
151
132
  };
152
-
153
- const exists = folder => folder.flags.indexOf('\\Noselect') < 0;
154
-
133
+ const exists = (folder) => folder.flags.indexOf('\\Noselect') < 0;
155
134
  /**
156
135
  * Mailbox attributes for an extended LIST response. \NonExistent replaces \Noselect (RFC 5258
157
136
  * section 3, \NonExistent implies \Noselect), children attributes are computed (RFC 5258 section 4),
158
137
  * \Subscribed is only listed with the SUBSCRIBED return option (RFC 5258 section 3.2)
159
138
  */
160
- const getAttributes = (folder, isExisting, hasChildren, returns) =>
161
- server
162
- .listAttributes(folder, { exists: isExisting, subscribed: returns.has('SUBSCRIBED') && folder.subscribed, hasChildren })
163
- .map(flag => ({ type: 'ATOM', value: flag }));
164
-
139
+ const getAttributes = (folder, isExisting, hasChildren, returns) => server
140
+ .listAttributes(folder, { exists: isExisting, subscribed: returns.has('SUBSCRIBED') && folder.subscribed, hasChildren })
141
+ .map(flag => ({ type: 'ATOM', value: flag }));
165
142
  const listHandler = server.getCommandHandler('LIST');
166
-
167
143
  server.setCommandHandler('LIST', (connection, parsed, data, callback) => {
168
144
  const args = parsed.attributes || [];
169
145
  if (!isExtended(args)) {
170
146
  // RFC 3501 LIST
171
147
  return listHandler(connection, parsed, data, callback);
172
148
  }
173
-
174
149
  let request;
175
150
  try {
176
151
  request = parseArguments(args, connection);
177
- } catch (err) {
152
+ }
153
+ catch (err) {
178
154
  connection.sendStatus(parsed, data, 'BAD', err.message, false, 'INVALID COMMAND');
179
155
  return callback();
180
156
  }
181
-
182
157
  const selection = [...request.selection.keys()].map(name => ({ name, ...extensions.selectionOptions[name] }));
183
158
  const filters = selection.filter(option => option.match);
184
159
  const includeNonExistent = selection.some(option => option.includeNonExistent);
185
160
  const recursive = request.selection.has('RECURSIVEMATCH');
186
161
  // RFC 5258 section 6: CHILDINFO lists the list-select-base-opt options, always quoted
187
162
  const childInfo = selection.filter(option => option.type === 'base').map(option => ({ type: 'STRING', value: option.name }));
188
-
189
163
  // does a mailbox satisfy the selection criteria. Without options that means an existing mailbox
190
- const matches = folder => (includeNonExistent || exists(folder)) && filters.every(option => option.match(folder, connection));
191
-
164
+ // the match functions also get the subscribed names that are not mailboxes
165
+ const matches = (folder) => (includeNonExistent || exists(folder)) && filters.every(option => option.match(folder, connection));
192
166
  // RFC 5258 section 3.1: SUBSCRIBED lists subscribed names, also the ones that are not mailboxes
193
167
  let folders = server.folderCache;
194
168
  if (includeNonExistent) {
195
169
  folders = Object.assign(Object.create(null), folders, server.getSubscriptionTree());
196
170
  }
197
-
198
171
  // RFC 5258 section 3: a mailbox that matches several patterns is listed once
199
172
  const candidates = new Set();
200
- request.patterns.forEach(pattern => {
201
- server.matchFolders(request.reference, pattern, path => connection.exportMailboxName(path), folders).forEach(folder => candidates.add(folder));
173
+ request.patterns.forEach((pattern) => {
174
+ server
175
+ .matchFolders(request.reference, pattern, (path) => connection.exportMailboxName(path), folders)
176
+ .forEach(folder => candidates.add(folder));
202
177
  });
203
-
204
178
  candidates.forEach(folder => {
205
179
  const isExisting = exists(folder);
206
180
  const isMatch = matches(folder);
207
181
  const descendants = server.getDescendants(folder.path, folders);
208
182
  const hasChildren = descendants.some(exists);
209
-
210
183
  let hasChildInfo = false;
211
184
  if (recursive) {
212
185
  // RFC 5258 section 3.5: a matching mailbox gets CHILDINFO if a descendant matches as well.
@@ -214,14 +187,12 @@ module.exports = function (server) {
214
187
  // listed itself (redundant CHILDINFO SHOULD be suppressed)
215
188
  hasChildInfo = descendants.some(descendant => matches(descendant) && (isMatch || !candidates.has(descendant)));
216
189
  }
217
-
218
190
  // RFC 5258 section 3.5: without selection filters a mailbox that does not exist but has
219
191
  // existing descendants is listed as "\NonExistent \HasChildren"
220
192
  const listed = isMatch || hasChildInfo || (!filters.length && !isExisting && hasChildren);
221
193
  if (!listed) {
222
194
  return;
223
195
  }
224
-
225
196
  const attributes = [
226
197
  getAttributes(folder, isExisting, hasChildren, request.returns),
227
198
  server.getSeparator(folder),
@@ -231,19 +202,11 @@ module.exports = function (server) {
231
202
  // mbox-list-extended = "(" mbox-list-extended-item *(SP mbox-list-extended-item) ")"
232
203
  attributes.push([{ type: 'STRING', value: 'CHILDINFO' }, childInfo]);
233
204
  }
234
-
235
- connection.send(
236
- {
237
- tag: '*',
238
- command: 'LIST',
239
- attributes
240
- },
241
- 'LIST ITEM',
242
- parsed,
243
- data,
244
- folder
245
- );
246
-
205
+ connection.send({
206
+ tag: '*',
207
+ command: 'LIST',
208
+ attributes
209
+ }, 'LIST ITEM', parsed, data, folder);
247
210
  request.returns.forEach((value, name) => {
248
211
  const option = extensions.returnOptions[name];
249
212
  if (option.onItem) {
@@ -251,8 +214,7 @@ module.exports = function (server) {
251
214
  }
252
215
  });
253
216
  });
254
-
255
217
  connection.sendStatus(parsed, data, 'OK', 'Completed', false, 'LIST');
256
218
  return callback();
257
219
  });
258
- };
220
+ }
@@ -0,0 +1,6 @@
1
+ import type { IMAPServer } from '../types.js';
2
+ /**
3
+ * @help Adds LIST-STATUS [RFC5819] capability, the STATUS return option
4
+ * @help of LIST. Loads LIST-EXTENDED as well
5
+ */
6
+ export default function listStatusPlugin(server: IMAPServer): void;
@@ -1,24 +1,17 @@
1
- 'use strict';
2
-
3
- const { getListExtensions } = require('../list-extensions');
4
- const { parseStatusItems, sendStatus } = require('../commands/handlers/status');
5
- const listExtended = require('./list-extended');
6
-
1
+ import { getListExtensions } from '../list-extensions.js';
2
+ import { parseStatusItems, sendStatus } from '../commands/handlers/status.js';
3
+ import listExtended from './list-extended.js';
7
4
  /**
8
5
  * @help Adds LIST-STATUS [RFC5819] capability, the STATUS return option
9
6
  * @help of LIST. Loads LIST-EXTENDED as well
10
7
  */
11
-
12
- module.exports = function (server) {
8
+ export default function listStatusPlugin(server) {
13
9
  // the STATUS return option needs the extended LIST syntax (RFC 5819 section 4)
14
10
  listExtended(server);
15
-
16
11
  server.registerCapability('LIST-STATUS');
17
-
18
12
  // status-option = "STATUS" SP "(" status-att *(SP status-att) ")"
19
13
  getListExtensions(server).returnOptions.STATUS = {
20
14
  parse: (list, connection) => parseStatusItems(server, list, connection),
21
-
22
15
  // RFC 5819 section 2: a STATUS response follows the LIST response of every selectable mailbox
23
16
  // that matches the selection criteria. Mailboxes listed only for CHILDINFO or as \NonExistent
24
17
  // get none. The selected mailbox is no exception (RFC 9051 section 6.3.11)
@@ -28,4 +21,4 @@ module.exports = function (server) {
28
21
  }
29
22
  }
30
23
  };
31
- };
24
+ }
@@ -0,0 +1,8 @@
1
+ import type { IMAPServer } from '../types.js';
2
+ /**
3
+ * @help Enables LITERAL- [RFC7888] capability
4
+ * @help Non-synchronizing literals up to 4096 octets, a larger
5
+ * @help one is dropped and answered with BAD [TOOBIG]
6
+ * @help Can not be loaded with LITERAL+
7
+ */
8
+ export default function literalminusPlugin(server: IMAPServer): void;
@@ -1,13 +1,10 @@
1
- 'use strict';
2
-
3
1
  /**
4
2
  * @help Enables LITERAL- [RFC7888] capability
5
3
  * @help Non-synchronizing literals up to 4096 octets, a larger
6
4
  * @help one is dropped and answered with BAD [TOOBIG]
7
5
  * @help Can not be loaded with LITERAL+
8
6
  */
9
-
10
- module.exports = function (server) {
7
+ export default function literalminusPlugin(server) {
11
8
  // RFC 7888 section 5: servers MUST NOT advertise both LITERAL+ and LITERAL-
12
9
  if (server.capabilities['LITERAL+']) {
13
10
  throw new Error('LITERAL- can not be enabled together with LITERAL+');
@@ -17,4 +14,4 @@ module.exports = function (server) {
17
14
  server.impliedLiteralMinus = false;
18
15
  server.literalPlus = true;
19
16
  server.nonSyncLiteralLimit = 4096;
20
- };
17
+ }
@@ -0,0 +1,6 @@
1
+ import type { IMAPServer } from '../types.js';
2
+ /**
3
+ * @help Enables LITERAL+ [RFC7888] capability
4
+ * @help Can not be loaded with LITERAL-
5
+ */
6
+ export default function literalplusPlugin(server: IMAPServer): void;
@@ -1,11 +1,8 @@
1
- 'use strict';
2
-
3
1
  /**
4
2
  * @help Enables LITERAL+ [RFC7888] capability
5
3
  * @help Can not be loaded with LITERAL-
6
4
  */
7
-
8
- module.exports = function (server) {
5
+ export default function literalplusPlugin(server) {
9
6
  // RFC 7888 section 5: servers MUST NOT advertise both LITERAL+ and LITERAL-. IMAP4rev2 adds LITERAL- only
10
7
  // when LITERAL+ is not loaded, LITERAL+ replaces it then, as it allows more (RFC 9051 section 4.3)
11
8
  if (server.capabilities['LITERAL-'] && !server.impliedLiteralMinus) {
@@ -15,4 +12,4 @@ module.exports = function (server) {
15
12
  server.registerCapability('LITERAL+');
16
13
  server.literalPlus = true;
17
14
  server.nonSyncLiteralLimit = Infinity;
18
- };
15
+ }
@@ -0,0 +1,5 @@
1
+ import type { IMAPServer } from '../types.js';
2
+ /**
3
+ * @help Disables LOGIN support for unencrypted connections
4
+ */
5
+ export default function logindisabledPlugin(server: IMAPServer): void;
@@ -0,0 +1,39 @@
1
+ /**
2
+ * @help Disables LOGIN support for unencrypted connections
3
+ */
4
+ export default function logindisabledPlugin(server) {
5
+ server.registerCapability('LOGINDISABLED', (connection) => {
6
+ return !connection.secureConnection && connection.state === 'Not Authenticated';
7
+ });
8
+ // Retrieve actual LOGIN handler
9
+ // Will be run if conditions are met
10
+ const oldHandler = server.getCommandHandler('LOGIN');
11
+ // Override LOGIN
12
+ server.setCommandHandler('LOGIN', (connection, parsed, data, callback) => {
13
+ // If the connection is unsecure, do not allow LOGIN
14
+ if (!connection.secureConnection) {
15
+ connection.send({
16
+ tag: parsed.tag,
17
+ command: 'NO',
18
+ attributes: [
19
+ {
20
+ type: 'SECTION',
21
+ section: [
22
+ {
23
+ type: 'ATOM',
24
+ value: 'PRIVACYREQUIRED'
25
+ }
26
+ ]
27
+ },
28
+ {
29
+ type: 'TEXT',
30
+ value: 'Run STARTTLS first'
31
+ }
32
+ ]
33
+ }, 'LOGIN FAILED', parsed, data);
34
+ return callback();
35
+ }
36
+ // Reroute command to actual LOGIN handler
37
+ oldHandler(connection, parsed, data, callback);
38
+ });
39
+ }
@@ -0,0 +1,19 @@
1
+ import type { IMAPServer } from '../types.js';
2
+ /**
3
+ * Reads the limit from the "messageLimit" server option
4
+ *
5
+ * @param {Object} server IMAPServer
6
+ * @param {String} name Capability name for the error message
7
+ * @return {Number} limit
8
+ */
9
+ declare function getLimit(server: IMAPServer, name: string): any;
10
+ /**
11
+ * Refuses COPY and APPEND of more messages than the limit, shared with the SAVELIMIT plugin. COPY and
12
+ * MULTIAPPEND APPEND are atomic, so nothing is copied or appended (RFC 9738 section 3.1)
13
+ *
14
+ * @param {Object} server IMAPServer
15
+ * @param {Number} limit Message limit
16
+ */
17
+ declare function addSaveLimit(server: IMAPServer, limit: number): void;
18
+ export default function messagelimitPlugin(server: IMAPServer): void;
19
+ export { getLimit, addSaveLimit };