imapkit 4.0.2 → 4.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (485) hide show
  1. package/README.md +32 -19
  2. package/bin/imapkit.js +12 -16
  3. package/dist/cjs/addressparser.d.ts +21 -0
  4. package/dist/cjs/addressparser.js +277 -0
  5. package/dist/cjs/arguments.d.ts +31 -0
  6. package/{lib → dist/cjs}/arguments.js +9 -21
  7. package/dist/cjs/bodystructure.d.ts +25 -0
  8. package/dist/cjs/bodystructure.js +150 -0
  9. package/dist/cjs/cert.d.ts +2 -0
  10. package/dist/cjs/cert.js +7 -0
  11. package/dist/cjs/command-states.d.ts +36 -0
  12. package/dist/cjs/command-states.js +102 -0
  13. package/dist/cjs/commands/append.d.ts +88 -0
  14. package/dist/cjs/commands/append.js +299 -0
  15. package/dist/cjs/commands/capability.d.ts +2 -0
  16. package/dist/cjs/commands/capability.js +44 -0
  17. package/dist/cjs/commands/check.d.ts +2 -0
  18. package/dist/cjs/commands/check.js +28 -0
  19. package/dist/cjs/commands/close.d.ts +2 -0
  20. package/dist/cjs/commands/close.js +35 -0
  21. package/dist/cjs/commands/copy.d.ts +30 -0
  22. package/dist/cjs/commands/copy.js +107 -0
  23. package/dist/cjs/commands/create.d.ts +2 -0
  24. package/dist/cjs/commands/create.js +53 -0
  25. package/dist/cjs/commands/delete.d.ts +2 -0
  26. package/dist/cjs/commands/delete.js +63 -0
  27. package/dist/cjs/commands/examine.d.ts +2 -0
  28. package/dist/cjs/commands/examine.js +19 -0
  29. package/dist/cjs/commands/expunge.d.ts +2 -0
  30. package/dist/cjs/commands/expunge.js +32 -0
  31. package/dist/cjs/commands/fetch.d.ts +23 -0
  32. package/dist/cjs/commands/fetch.js +208 -0
  33. package/dist/cjs/commands/handlers/fetch.d.ts +12 -0
  34. package/dist/cjs/commands/handlers/fetch.js +195 -0
  35. package/dist/cjs/commands/handlers/flags.d.ts +17 -0
  36. package/dist/cjs/commands/handlers/flags.js +39 -0
  37. package/dist/cjs/commands/handlers/search.d.ts +85 -0
  38. package/dist/cjs/commands/handlers/search.js +504 -0
  39. package/dist/cjs/commands/handlers/status.d.ts +34 -0
  40. package/dist/cjs/commands/handlers/status.js +81 -0
  41. package/dist/cjs/commands/handlers/store.d.ts +3 -0
  42. package/dist/cjs/commands/handlers/store.js +117 -0
  43. package/dist/cjs/commands/index.d.ts +2 -0
  44. package/dist/cjs/commands/index.js +61 -0
  45. package/dist/cjs/commands/list.d.ts +2 -0
  46. package/dist/cjs/commands/list.js +86 -0
  47. package/dist/cjs/commands/login.d.ts +2 -0
  48. package/dist/cjs/commands/login.js +62 -0
  49. package/dist/cjs/commands/logout.d.ts +2 -0
  50. package/dist/cjs/commands/logout.js +40 -0
  51. package/dist/cjs/commands/lsub.d.ts +2 -0
  52. package/dist/cjs/commands/lsub.js +79 -0
  53. package/dist/cjs/commands/noop.d.ts +2 -0
  54. package/dist/cjs/commands/noop.js +28 -0
  55. package/dist/cjs/commands/rename.d.ts +2 -0
  56. package/dist/cjs/commands/rename.js +98 -0
  57. package/dist/cjs/commands/search.d.ts +10 -0
  58. package/dist/cjs/commands/search.js +71 -0
  59. package/dist/cjs/commands/select.d.ts +19 -0
  60. package/dist/cjs/commands/select.js +230 -0
  61. package/dist/cjs/commands/status.d.ts +2 -0
  62. package/dist/cjs/commands/status.js +57 -0
  63. package/dist/cjs/commands/store.d.ts +10 -0
  64. package/dist/cjs/commands/store.js +134 -0
  65. package/dist/cjs/commands/subscribe.d.ts +2 -0
  66. package/dist/cjs/commands/subscribe.js +51 -0
  67. package/dist/cjs/commands/uid-copy.d.ts +2 -0
  68. package/dist/cjs/commands/uid-copy.js +19 -0
  69. package/dist/cjs/commands/uid-fetch.d.ts +3 -0
  70. package/dist/cjs/commands/uid-fetch.js +17 -0
  71. package/dist/cjs/commands/uid-search.d.ts +3 -0
  72. package/dist/cjs/commands/uid-search.js +17 -0
  73. package/dist/cjs/commands/uid-store.d.ts +3 -0
  74. package/dist/cjs/commands/uid-store.js +17 -0
  75. package/dist/cjs/commands/unsubscribe.d.ts +2 -0
  76. package/dist/cjs/commands/unsubscribe.js +50 -0
  77. package/dist/cjs/dates.d.ts +64 -0
  78. package/dist/cjs/dates.js +124 -0
  79. package/dist/cjs/deflate-layer.d.ts +83 -0
  80. package/dist/cjs/deflate-layer.js +232 -0
  81. package/dist/cjs/encoded-words.d.ts +15 -0
  82. package/dist/cjs/encoded-words.js +85 -0
  83. package/dist/cjs/envelope.d.ts +33 -0
  84. package/dist/cjs/envelope.js +86 -0
  85. package/dist/cjs/esearch.d.ts +96 -0
  86. package/dist/cjs/esearch.js +190 -0
  87. package/dist/cjs/framing.d.ts +66 -0
  88. package/{lib → dist/cjs}/framing.js +9 -26
  89. package/dist/cjs/index.d.ts +9 -0
  90. package/dist/cjs/index.js +56 -0
  91. package/dist/cjs/list-extensions.d.ts +50 -0
  92. package/dist/cjs/list-extensions.js +35 -0
  93. package/dist/cjs/load-plugins.d.ts +21 -0
  94. package/dist/cjs/load-plugins.js +89 -0
  95. package/dist/cjs/mailbox-name.d.ts +26 -0
  96. package/dist/cjs/mailbox-name.js +127 -0
  97. package/dist/cjs/mimeparser.d.ts +137 -0
  98. package/dist/cjs/mimeparser.js +727 -0
  99. package/dist/cjs/mock-client.d.ts +39 -0
  100. package/dist/cjs/mock-client.js +236 -0
  101. package/dist/cjs/numbers.d.ts +28 -0
  102. package/dist/cjs/numbers.js +52 -0
  103. package/dist/cjs/package.json +3 -0
  104. package/dist/cjs/plugins/acl.d.ts +2 -0
  105. package/dist/cjs/plugins/acl.js +888 -0
  106. package/dist/cjs/plugins/appendlimit.d.ts +16 -0
  107. package/dist/cjs/plugins/appendlimit.js +87 -0
  108. package/dist/cjs/plugins/auth-plain.d.ts +2 -0
  109. package/dist/cjs/plugins/auth-plain.js +89 -0
  110. package/dist/cjs/plugins/binary.d.ts +30 -0
  111. package/dist/cjs/plugins/binary.js +247 -0
  112. package/dist/cjs/plugins/catenate.d.ts +14 -0
  113. package/dist/cjs/plugins/catenate.js +250 -0
  114. package/dist/cjs/plugins/compress.d.ts +7 -0
  115. package/dist/cjs/plugins/compress.js +79 -0
  116. package/dist/cjs/plugins/condstore.d.ts +5 -0
  117. package/dist/cjs/plugins/condstore.js +492 -0
  118. package/dist/cjs/plugins/context-search.d.ts +8 -0
  119. package/dist/cjs/plugins/context-search.js +304 -0
  120. package/dist/cjs/plugins/context-sort.d.ts +6 -0
  121. package/dist/cjs/plugins/context-sort.js +32 -0
  122. package/dist/cjs/plugins/create-special-use.d.ts +7 -0
  123. package/dist/cjs/plugins/create-special-use.js +101 -0
  124. package/dist/cjs/plugins/enable.d.ts +23 -0
  125. package/dist/cjs/plugins/enable.js +127 -0
  126. package/dist/cjs/plugins/esearch.d.ts +6 -0
  127. package/dist/cjs/plugins/esearch.js +142 -0
  128. package/dist/cjs/plugins/esort.d.ts +6 -0
  129. package/dist/cjs/plugins/esort.js +60 -0
  130. package/dist/cjs/plugins/id.d.ts +5 -0
  131. package/dist/cjs/plugins/id.js +123 -0
  132. package/dist/cjs/plugins/idle.d.ts +5 -0
  133. package/dist/cjs/plugins/idle.js +85 -0
  134. package/dist/cjs/plugins/imap4rev2.d.ts +6 -0
  135. package/dist/cjs/plugins/imap4rev2.js +184 -0
  136. package/dist/cjs/plugins/index.d.ts +2 -0
  137. package/dist/cjs/plugins/index.js +119 -0
  138. package/dist/cjs/plugins/list-extended.d.ts +2 -0
  139. package/dist/cjs/plugins/list-extended.js +235 -0
  140. package/dist/cjs/plugins/list-status.d.ts +6 -0
  141. package/dist/cjs/plugins/list-status.js +42 -0
  142. package/dist/cjs/plugins/literalminus.d.ts +8 -0
  143. package/dist/cjs/plugins/literalminus.js +32 -0
  144. package/dist/cjs/plugins/literalplus.d.ts +6 -0
  145. package/dist/cjs/plugins/literalplus.js +30 -0
  146. package/dist/cjs/plugins/logindisabled.d.ts +5 -0
  147. package/dist/cjs/plugins/logindisabled.js +54 -0
  148. package/dist/cjs/plugins/messagelimit.d.ts +19 -0
  149. package/dist/cjs/plugins/messagelimit.js +227 -0
  150. package/dist/cjs/plugins/metadata-server.d.ts +7 -0
  151. package/dist/cjs/plugins/metadata-server.js +24 -0
  152. package/dist/cjs/plugins/metadata.d.ts +11 -0
  153. package/dist/cjs/plugins/metadata.js +436 -0
  154. package/dist/cjs/plugins/move.d.ts +11 -0
  155. package/dist/cjs/plugins/move.js +96 -0
  156. package/dist/cjs/plugins/multiappend.d.ts +12 -0
  157. package/dist/cjs/plugins/multiappend.js +38 -0
  158. package/dist/cjs/plugins/multisearch.d.ts +6 -0
  159. package/dist/cjs/plugins/multisearch.js +263 -0
  160. package/dist/cjs/plugins/namespace.d.ts +5 -0
  161. package/dist/cjs/plugins/namespace.js +57 -0
  162. package/dist/cjs/plugins/notify.d.ts +2 -0
  163. package/dist/cjs/plugins/notify.js +628 -0
  164. package/dist/cjs/plugins/oauthbearer.d.ts +32 -0
  165. package/dist/cjs/plugins/oauthbearer.js +202 -0
  166. package/dist/cjs/plugins/objectid.d.ts +23 -0
  167. package/dist/cjs/plugins/objectid.js +221 -0
  168. package/dist/cjs/plugins/partial.d.ts +6 -0
  169. package/dist/cjs/plugins/partial.js +78 -0
  170. package/dist/cjs/plugins/preview.d.ts +31 -0
  171. package/dist/cjs/plugins/preview.js +378 -0
  172. package/dist/cjs/plugins/qresync.d.ts +11 -0
  173. package/dist/cjs/plugins/qresync.js +473 -0
  174. package/dist/cjs/plugins/quota.d.ts +18 -0
  175. package/dist/cjs/plugins/quota.js +254 -0
  176. package/dist/cjs/plugins/replace.d.ts +14 -0
  177. package/dist/cjs/plugins/replace.js +130 -0
  178. package/dist/cjs/plugins/sasl-ir.d.ts +5 -0
  179. package/dist/cjs/plugins/sasl-ir.js +24 -0
  180. package/dist/cjs/plugins/savedate.d.ts +17 -0
  181. package/dist/cjs/plugins/savedate.js +64 -0
  182. package/dist/cjs/plugins/savelimit.d.ts +10 -0
  183. package/dist/cjs/plugins/savelimit.js +30 -0
  184. package/dist/cjs/plugins/searchres.d.ts +6 -0
  185. package/dist/cjs/plugins/searchres.js +91 -0
  186. package/dist/cjs/plugins/sort-display.d.ts +11 -0
  187. package/dist/cjs/plugins/sort-display.js +37 -0
  188. package/dist/cjs/plugins/sort.d.ts +11 -0
  189. package/dist/cjs/plugins/sort.js +125 -0
  190. package/dist/cjs/plugins/special-use.d.ts +10 -0
  191. package/dist/cjs/plugins/special-use.js +95 -0
  192. package/dist/cjs/plugins/starttls.d.ts +5 -0
  193. package/dist/cjs/plugins/starttls.js +55 -0
  194. package/dist/cjs/plugins/status-size.d.ts +7 -0
  195. package/dist/cjs/plugins/status-size.js +30 -0
  196. package/dist/cjs/plugins/thread-orderedsubject.d.ts +11 -0
  197. package/dist/cjs/plugins/thread-orderedsubject.js +28 -0
  198. package/dist/cjs/plugins/thread-references.d.ts +11 -0
  199. package/dist/cjs/plugins/thread-references.js +28 -0
  200. package/dist/cjs/plugins/uidonly.d.ts +15 -0
  201. package/dist/cjs/plugins/uidonly.js +126 -0
  202. package/dist/cjs/plugins/uidplus.d.ts +15 -0
  203. package/dist/cjs/plugins/uidplus.js +119 -0
  204. package/dist/cjs/plugins/unauthenticate.d.ts +7 -0
  205. package/dist/cjs/plugins/unauthenticate.js +32 -0
  206. package/dist/cjs/plugins/unselect.d.ts +5 -0
  207. package/dist/cjs/plugins/unselect.js +36 -0
  208. package/dist/cjs/plugins/utf8-accept.d.ts +6 -0
  209. package/dist/cjs/plugins/utf8-accept.js +72 -0
  210. package/dist/cjs/plugins/x-gm-ext-1.d.ts +26 -0
  211. package/dist/cjs/plugins/x-gm-ext-1.js +422 -0
  212. package/dist/cjs/plugins/xoauth2.d.ts +2 -0
  213. package/dist/cjs/plugins/xoauth2.js +155 -0
  214. package/dist/cjs/plugins/xtoybird.d.ts +2 -0
  215. package/dist/cjs/plugins/xtoybird.js +236 -0
  216. package/dist/cjs/server.d.ts +876 -0
  217. package/dist/cjs/server.js +2597 -0
  218. package/dist/cjs/smtp-listener.d.ts +13 -0
  219. package/dist/cjs/smtp-listener.js +47 -0
  220. package/dist/cjs/sorting.d.ts +77 -0
  221. package/dist/cjs/sorting.js +290 -0
  222. package/dist/cjs/threading.d.ts +30 -0
  223. package/dist/cjs/threading.js +318 -0
  224. package/dist/cjs/types.d.ts +327 -0
  225. package/dist/cjs/types.js +3 -0
  226. package/dist/cjs/utf8-session.d.ts +17 -0
  227. package/dist/cjs/utf8-session.js +148 -0
  228. package/dist/cjs/vanished.d.ts +21 -0
  229. package/dist/cjs/vanished.js +55 -0
  230. package/dist/esm/addressparser.d.ts +21 -0
  231. package/{lib → dist/esm}/addressparser.js +102 -123
  232. package/dist/esm/arguments.d.ts +31 -0
  233. package/dist/esm/arguments.js +96 -0
  234. package/dist/esm/bodystructure.d.ts +25 -0
  235. package/{lib → dist/esm}/bodystructure.js +17 -33
  236. package/dist/esm/cert.d.ts +2 -0
  237. package/dist/esm/cert.js +4 -0
  238. package/dist/esm/command-states.d.ts +36 -0
  239. package/{lib → dist/esm}/command-states.js +4 -16
  240. package/dist/esm/commands/append.d.ts +88 -0
  241. package/{lib → dist/esm}/commands/append.js +47 -85
  242. package/dist/esm/commands/capability.d.ts +2 -0
  243. package/dist/esm/commands/capability.js +29 -0
  244. package/dist/esm/commands/check.d.ts +2 -0
  245. package/dist/esm/commands/check.js +13 -0
  246. package/dist/esm/commands/close.d.ts +2 -0
  247. package/dist/esm/commands/close.js +20 -0
  248. package/dist/esm/commands/copy.d.ts +30 -0
  249. package/{lib → dist/esm}/commands/copy.js +31 -55
  250. package/dist/esm/commands/create.d.ts +2 -0
  251. package/{lib → dist/esm}/commands/create.js +25 -39
  252. package/dist/esm/commands/delete.d.ts +2 -0
  253. package/{lib → dist/esm}/commands/delete.js +25 -41
  254. package/dist/esm/commands/examine.d.ts +2 -0
  255. package/dist/esm/commands/examine.js +4 -0
  256. package/dist/esm/commands/expunge.d.ts +2 -0
  257. package/dist/esm/commands/expunge.js +17 -0
  258. package/dist/esm/commands/fetch.d.ts +23 -0
  259. package/{lib → dist/esm}/commands/fetch.js +34 -75
  260. package/dist/esm/commands/handlers/fetch.d.ts +12 -0
  261. package/{lib → dist/esm}/commands/handlers/fetch.js +11 -42
  262. package/dist/esm/commands/handlers/flags.d.ts +17 -0
  263. package/{lib → dist/esm}/commands/handlers/flags.js +3 -11
  264. package/dist/esm/commands/handlers/search.d.ts +85 -0
  265. package/{lib → dist/esm}/commands/handlers/search.js +33 -71
  266. package/dist/esm/commands/handlers/status.d.ts +34 -0
  267. package/{lib → dist/esm}/commands/handlers/status.js +1 -9
  268. package/dist/esm/commands/handlers/store.d.ts +3 -0
  269. package/{lib → dist/esm}/commands/handlers/store.js +20 -44
  270. package/dist/esm/commands/index.d.ts +2 -0
  271. package/dist/esm/commands/index.js +55 -0
  272. package/dist/esm/commands/list.d.ts +2 -0
  273. package/dist/esm/commands/list.js +71 -0
  274. package/dist/esm/commands/login.d.ts +2 -0
  275. package/{lib → dist/esm}/commands/login.js +24 -44
  276. package/dist/esm/commands/logout.d.ts +2 -0
  277. package/dist/esm/commands/logout.js +25 -0
  278. package/dist/esm/commands/lsub.d.ts +2 -0
  279. package/dist/esm/commands/lsub.js +64 -0
  280. package/dist/esm/commands/noop.d.ts +2 -0
  281. package/dist/esm/commands/noop.js +13 -0
  282. package/dist/esm/commands/rename.d.ts +2 -0
  283. package/{lib → dist/esm}/commands/rename.js +32 -51
  284. package/dist/esm/commands/search.d.ts +10 -0
  285. package/dist/esm/commands/search.js +54 -0
  286. package/dist/esm/commands/select.d.ts +19 -0
  287. package/dist/esm/commands/select.js +214 -0
  288. package/dist/esm/commands/status.d.ts +2 -0
  289. package/{lib → dist/esm}/commands/status.js +18 -39
  290. package/dist/esm/commands/store.d.ts +10 -0
  291. package/{lib → dist/esm}/commands/store.js +39 -73
  292. package/dist/esm/commands/subscribe.d.ts +2 -0
  293. package/{lib → dist/esm}/commands/subscribe.js +22 -39
  294. package/dist/esm/commands/uid-copy.d.ts +2 -0
  295. package/dist/esm/commands/uid-copy.js +4 -0
  296. package/dist/esm/commands/uid-fetch.d.ts +3 -0
  297. package/dist/esm/commands/uid-fetch.js +3 -0
  298. package/dist/esm/commands/uid-search.d.ts +3 -0
  299. package/dist/esm/commands/uid-search.js +3 -0
  300. package/dist/esm/commands/uid-store.d.ts +3 -0
  301. package/dist/esm/commands/uid-store.js +3 -0
  302. package/dist/esm/commands/unsubscribe.d.ts +2 -0
  303. package/{lib → dist/esm}/commands/unsubscribe.js +22 -37
  304. package/dist/esm/dates.d.ts +64 -0
  305. package/{lib → dist/esm}/dates.js +6 -14
  306. package/dist/esm/deflate-layer.d.ts +83 -0
  307. package/{lib → dist/esm}/deflate-layer.js +9 -26
  308. package/dist/esm/encoded-words.d.ts +15 -0
  309. package/{lib → dist/esm}/encoded-words.js +9 -25
  310. package/dist/esm/envelope.d.ts +33 -0
  311. package/{lib → dist/esm}/envelope.js +8 -19
  312. package/dist/esm/esearch.d.ts +96 -0
  313. package/{lib → dist/esm}/esearch.js +12 -39
  314. package/dist/esm/framing.d.ts +66 -0
  315. package/dist/esm/framing.js +82 -0
  316. package/dist/esm/index.d.ts +9 -0
  317. package/dist/esm/index.js +6 -0
  318. package/dist/esm/list-extensions.d.ts +50 -0
  319. package/{lib → dist/esm}/list-extensions.js +1 -4
  320. package/dist/esm/load-plugins.d.ts +21 -0
  321. package/{lib → dist/esm}/load-plugins.js +9 -43
  322. package/dist/esm/mailbox-name.d.ts +26 -0
  323. package/{lib → dist/esm}/mailbox-name.js +5 -26
  324. package/dist/esm/mimeparser.d.ts +137 -0
  325. package/{lib → dist/esm}/mimeparser.js +74 -152
  326. package/dist/esm/mock-client.d.ts +39 -0
  327. package/{lib → dist/esm}/mock-client.js +26 -40
  328. package/dist/esm/numbers.d.ts +28 -0
  329. package/{lib → dist/esm}/numbers.js +1 -8
  330. package/dist/esm/package.json +3 -0
  331. package/dist/esm/plugins/acl.d.ts +2 -0
  332. package/{lib → dist/esm}/plugins/acl.js +146 -240
  333. package/dist/esm/plugins/appendlimit.d.ts +16 -0
  334. package/{lib → dist/esm}/plugins/appendlimit.js +5 -16
  335. package/dist/esm/plugins/auth-plain.d.ts +2 -0
  336. package/{lib → dist/esm}/plugins/auth-plain.js +11 -31
  337. package/dist/esm/plugins/binary.d.ts +30 -0
  338. package/{lib → dist/esm}/plugins/binary.js +17 -43
  339. package/dist/esm/plugins/catenate.d.ts +14 -0
  340. package/{lib → dist/esm}/plugins/catenate.js +19 -40
  341. package/dist/esm/plugins/compress.d.ts +7 -0
  342. package/dist/esm/plugins/compress.js +61 -0
  343. package/dist/esm/plugins/condstore.d.ts +5 -0
  344. package/{lib → dist/esm}/plugins/condstore.js +66 -152
  345. package/dist/esm/plugins/context-search.d.ts +8 -0
  346. package/{lib → dist/esm}/plugins/context-search.js +53 -88
  347. package/dist/esm/plugins/context-sort.d.ts +6 -0
  348. package/{lib → dist/esm}/plugins/context-sort.js +4 -9
  349. package/dist/esm/plugins/create-special-use.d.ts +7 -0
  350. package/{lib → dist/esm}/plugins/create-special-use.js +33 -55
  351. package/dist/esm/plugins/enable.d.ts +23 -0
  352. package/dist/esm/plugins/enable.js +111 -0
  353. package/dist/esm/plugins/esearch.d.ts +6 -0
  354. package/{lib → dist/esm}/plugins/esearch.js +13 -42
  355. package/dist/esm/plugins/esort.d.ts +6 -0
  356. package/{lib → dist/esm}/plugins/esort.js +7 -25
  357. package/dist/esm/plugins/id.d.ts +5 -0
  358. package/dist/esm/plugins/id.js +108 -0
  359. package/dist/esm/plugins/idle.d.ts +5 -0
  360. package/dist/esm/plugins/idle.js +70 -0
  361. package/dist/esm/plugins/imap4rev2.d.ts +6 -0
  362. package/{lib → dist/esm}/plugins/imap4rev2.js +24 -60
  363. package/dist/esm/plugins/index.d.ts +2 -0
  364. package/dist/esm/plugins/index.js +113 -0
  365. package/dist/esm/plugins/list-extended.d.ts +2 -0
  366. package/{lib → dist/esm}/plugins/list-extended.js +28 -66
  367. package/dist/esm/plugins/list-status.d.ts +6 -0
  368. package/{lib → dist/esm}/plugins/list-status.js +5 -12
  369. package/dist/esm/plugins/literalminus.d.ts +8 -0
  370. package/{lib → dist/esm}/plugins/literalminus.js +2 -5
  371. package/dist/esm/plugins/literalplus.d.ts +6 -0
  372. package/{lib → dist/esm}/plugins/literalplus.js +2 -5
  373. package/dist/esm/plugins/logindisabled.d.ts +5 -0
  374. package/dist/esm/plugins/logindisabled.js +39 -0
  375. package/dist/esm/plugins/messagelimit.d.ts +19 -0
  376. package/{lib → dist/esm}/plugins/messagelimit.js +18 -41
  377. package/dist/esm/plugins/metadata-server.d.ts +7 -0
  378. package/{lib → dist/esm}/plugins/metadata-server.js +3 -7
  379. package/dist/esm/plugins/metadata.d.ts +11 -0
  380. package/dist/esm/plugins/metadata.js +421 -0
  381. package/dist/esm/plugins/move.d.ts +11 -0
  382. package/{lib → dist/esm}/plugins/move.js +37 -66
  383. package/dist/esm/plugins/multiappend.d.ts +12 -0
  384. package/{lib → dist/esm}/plugins/multiappend.js +2 -5
  385. package/dist/esm/plugins/multisearch.d.ts +6 -0
  386. package/{lib → dist/esm}/plugins/multisearch.js +24 -48
  387. package/dist/esm/plugins/namespace.d.ts +5 -0
  388. package/dist/esm/plugins/namespace.js +42 -0
  389. package/dist/esm/plugins/notify.d.ts +2 -0
  390. package/{lib → dist/esm}/plugins/notify.js +90 -134
  391. package/dist/esm/plugins/oauthbearer.d.ts +32 -0
  392. package/{lib → dist/esm}/plugins/oauthbearer.js +18 -48
  393. package/dist/esm/plugins/objectid.d.ts +23 -0
  394. package/{lib → dist/esm}/plugins/objectid.js +21 -58
  395. package/dist/esm/plugins/partial.d.ts +6 -0
  396. package/{lib → dist/esm}/plugins/partial.js +7 -15
  397. package/dist/esm/plugins/preview.d.ts +31 -0
  398. package/{lib → dist/esm}/plugins/preview.js +28 -66
  399. package/dist/esm/plugins/qresync.d.ts +11 -0
  400. package/{lib → dist/esm}/plugins/qresync.js +64 -134
  401. package/dist/esm/plugins/quota.d.ts +18 -0
  402. package/{lib → dist/esm}/plugins/quota.js +89 -135
  403. package/dist/esm/plugins/replace.d.ts +14 -0
  404. package/{lib → dist/esm}/plugins/replace.js +21 -51
  405. package/dist/esm/plugins/sasl-ir.d.ts +5 -0
  406. package/{lib → dist/esm}/plugins/sasl-ir.js +3 -6
  407. package/dist/esm/plugins/savedate.d.ts +17 -0
  408. package/{lib → dist/esm}/plugins/savedate.js +5 -15
  409. package/dist/esm/plugins/savelimit.d.ts +10 -0
  410. package/{lib → dist/esm}/plugins/savelimit.js +3 -6
  411. package/dist/esm/plugins/searchres.d.ts +6 -0
  412. package/{lib → dist/esm}/plugins/searchres.js +13 -22
  413. package/dist/esm/plugins/sort-display.d.ts +11 -0
  414. package/{lib → dist/esm}/plugins/sort-display.js +6 -10
  415. package/dist/esm/plugins/sort.d.ts +11 -0
  416. package/{lib → dist/esm}/plugins/sort.js +24 -46
  417. package/dist/esm/plugins/special-use.d.ts +10 -0
  418. package/{lib → dist/esm}/plugins/special-use.js +9 -24
  419. package/dist/esm/plugins/starttls.d.ts +5 -0
  420. package/{lib → dist/esm}/plugins/starttls.js +20 -37
  421. package/dist/esm/plugins/status-size.d.ts +7 -0
  422. package/{lib → dist/esm}/plugins/status-size.js +4 -11
  423. package/dist/esm/plugins/thread-orderedsubject.d.ts +11 -0
  424. package/{lib → dist/esm}/plugins/thread-orderedsubject.js +3 -6
  425. package/dist/esm/plugins/thread-references.d.ts +11 -0
  426. package/{lib → dist/esm}/plugins/thread-references.js +3 -6
  427. package/dist/esm/plugins/uidonly.d.ts +15 -0
  428. package/{lib → dist/esm}/plugins/uidonly.js +11 -35
  429. package/dist/esm/plugins/uidplus.d.ts +15 -0
  430. package/{lib → dist/esm}/plugins/uidplus.js +25 -45
  431. package/dist/esm/plugins/unauthenticate.d.ts +7 -0
  432. package/dist/esm/plugins/unauthenticate.js +17 -0
  433. package/dist/esm/plugins/unselect.d.ts +5 -0
  434. package/dist/esm/plugins/unselect.js +21 -0
  435. package/dist/esm/plugins/utf8-accept.d.ts +6 -0
  436. package/{lib → dist/esm}/plugins/utf8-accept.js +10 -21
  437. package/dist/esm/plugins/x-gm-ext-1.d.ts +26 -0
  438. package/{lib → dist/esm}/plugins/x-gm-ext-1.js +48 -100
  439. package/dist/esm/plugins/xoauth2.d.ts +2 -0
  440. package/dist/esm/plugins/xoauth2.js +140 -0
  441. package/dist/esm/plugins/xtoybird.d.ts +2 -0
  442. package/dist/esm/plugins/xtoybird.js +218 -0
  443. package/dist/esm/server.d.ts +876 -0
  444. package/dist/esm/server.js +2543 -0
  445. package/dist/esm/smtp-listener.d.ts +13 -0
  446. package/{lib → dist/esm}/smtp-listener.js +5 -12
  447. package/dist/esm/sorting.d.ts +77 -0
  448. package/{lib → dist/esm}/sorting.js +40 -53
  449. package/dist/esm/threading.d.ts +30 -0
  450. package/{lib → dist/esm}/threading.js +29 -70
  451. package/dist/esm/types.d.ts +327 -0
  452. package/dist/esm/types.js +2 -0
  453. package/dist/esm/utf8-session.d.ts +17 -0
  454. package/{lib → dist/esm}/utf8-session.js +15 -25
  455. package/dist/esm/vanished.d.ts +21 -0
  456. package/{lib → dist/esm}/vanished.js +16 -21
  457. package/dist/plugin-help.json +298 -0
  458. package/package.json +54 -11
  459. package/lib/commands/capability.js +0 -47
  460. package/lib/commands/check.js +0 -21
  461. package/lib/commands/close.js +0 -30
  462. package/lib/commands/examine.js +0 -7
  463. package/lib/commands/expunge.js +0 -27
  464. package/lib/commands/list.js +0 -100
  465. package/lib/commands/logout.js +0 -41
  466. package/lib/commands/lsub.js +0 -87
  467. package/lib/commands/noop.js +0 -21
  468. package/lib/commands/search.js +0 -76
  469. package/lib/commands/select.js +0 -289
  470. package/lib/commands/uid copy.js +0 -7
  471. package/lib/commands/uid fetch.js +0 -5
  472. package/lib/commands/uid search.js +0 -5
  473. package/lib/commands/uid store.js +0 -5
  474. package/lib/plugins/compress.js +0 -76
  475. package/lib/plugins/enable.js +0 -155
  476. package/lib/plugins/id.js +0 -138
  477. package/lib/plugins/idle.js +0 -105
  478. package/lib/plugins/logindisabled.js +0 -50
  479. package/lib/plugins/metadata.js +0 -475
  480. package/lib/plugins/namespace.js +0 -67
  481. package/lib/plugins/unauthenticate.js +0 -28
  482. package/lib/plugins/unselect.js +0 -36
  483. package/lib/plugins/xoauth2.js +0 -188
  484. package/lib/plugins/xtoybird.js +0 -282
  485. package/lib/server.js +0 -2880
@@ -1,30 +1,22 @@
1
- 'use strict';
2
-
3
1
  /**
4
2
  * @help Adds SEARCHRES [RFC5182] capability, loads ESEARCH as well
5
3
  * @help SEARCH RETURN (SAVE) stores the result, "$" refers to it in place of a sequence set
6
4
  */
7
-
8
- const esearch = require('./esearch');
9
- const { selectReturned } = require('../esearch');
10
-
5
+ import esearch from './esearch.js';
6
+ import { selectReturned } from '../esearch.js';
11
7
  // Commands after which the search result variable is empty (RFC 5182 section 2.1). After CLOSE and
12
8
  // UNSELECT no mailbox is selected, so "$" can not be used until the next SELECT or EXAMINE anyway
13
9
  const RESET_COMMANDS = new Set(['SELECT', 'EXAMINE', 'CLOSE', 'UNSELECT']);
14
-
15
10
  // SAVE also applies to commands based on SEARCH, like SORT (RFC 5182 section 1) with ESORT
16
11
  // and to the ESEARCH command of MULTISEARCH, which leaves the messages to save in `parsed.searchresFound`
17
- const isSearch = command => ['SEARCH', 'UID SEARCH', 'SORT', 'UID SORT', 'ESEARCH'].includes(command);
18
-
19
- module.exports = function (server) {
12
+ const isSearch = (command) => ['SEARCH', 'UID SEARCH', 'SORT', 'UID SORT', 'ESEARCH'].includes(command);
13
+ export default function searchresPlugin(server) {
20
14
  // a SEARCHRES server MUST also implement ESEARCH (RFC 5182 section 2.1)
21
15
  esearch(server);
22
-
23
16
  server.registerCapability('SEARCHRES');
24
17
  // SAVE adds no data to the ESEARCH response
25
18
  server.searchReturnOptions.set('SAVE', { data: false });
26
-
27
- server.connectionHandlers.push(connection => {
19
+ server.connectionHandlers.push((connection) => {
28
20
  // RFC 5182 section 3: sequence-set =/ seq-last-command, seq-last-command = "$". Dovecot only accepts
29
21
  // "$" as the whole sequence set, not combined with numbers like "1,$", and neither does ImapKit
30
22
  const getMessageRange = connection.getMessageRange;
@@ -45,38 +37,37 @@ module.exports = function (server) {
45
37
  return result;
46
38
  };
47
39
  });
48
-
49
40
  // RFC 8437 section 4.1: after UNAUTHENTICATE "$" represents the empty set
50
- server.resetHandlers.push(connection => {
41
+ server.resetHandlers.push((connection) => {
51
42
  connection.searchResult = null;
52
43
  });
53
-
54
44
  server.outputHandlers.push((connection, response, description, parsed, data, extra) => {
55
45
  if (!parsed || !response || (response.tag !== parsed.tag && response.command !== 'SEARCH' && response.command !== 'SORT')) {
56
46
  return;
57
47
  }
58
48
  const command = (parsed.command || '').toUpperCase();
59
49
  const save = isSearch(command) && parsed.searchReturn && parsed.searchReturn.has('SAVE');
60
-
61
50
  // the result of SEARCH, with MIN and/or MAX only these messages are saved (RFC 5182 section 2.4).
62
51
  // It is stored once the tagged response tells if the command succeeded
63
- if (save && response.tag === '*' && ['SEARCH', 'SORT'].includes(response.command) && description === command && extra && Array.isArray(extra.list)) {
52
+ if (save &&
53
+ response.tag === '*' &&
54
+ (response.command === 'SEARCH' || response.command === 'SORT') &&
55
+ description === command &&
56
+ extra &&
57
+ Array.isArray(extra.list)) {
64
58
  parsed.searchresFound = selectReturned(extra.sorted || extra.list, parsed.searchReturn);
65
59
  return;
66
60
  }
67
-
68
61
  if (response.tag !== parsed.tag) {
69
62
  return;
70
63
  }
71
-
72
64
  if (RESET_COMMANDS.has(command)) {
73
65
  connection.searchResult = null;
74
66
  return;
75
67
  }
76
-
77
68
  // RFC 5182 section 2.1: an OK sets the variable, a NO empties it and a BAD leaves it as it was
78
69
  if (save && response.command !== 'BAD') {
79
70
  connection.searchResult = new Set(response.command === 'OK' ? parsed.searchresFound : []);
80
71
  }
81
72
  });
82
- };
73
+ }
@@ -0,0 +1,11 @@
1
+ import type { IMAPServer } from '../types.js';
2
+ /**
3
+ * @help Adds SORT=DISPLAY [RFC5957] capability, also loads SORT
4
+ *
5
+ * SORT=DISPLAY: https://tools.ietf.org/html/rfc5957
6
+ *
7
+ * Additional sort keys for SORT and UID SORT:
8
+ * - DISPLAYFROM
9
+ * - DISPLAYTO
10
+ */
11
+ export default function sortDisplayPlugin(server: IMAPServer): void;
@@ -1,8 +1,5 @@
1
- 'use strict';
2
-
3
- const { collationKey, displayAddress } = require('../sorting');
4
- const sort = require('./sort');
5
-
1
+ import { collationKey, displayAddress } from '../sorting.js';
2
+ import sort from './sort.js';
6
3
  /**
7
4
  * @help Adds SORT=DISPLAY [RFC5957] capability, also loads SORT
8
5
  *
@@ -12,12 +9,11 @@ const sort = require('./sort');
12
9
  * - DISPLAYFROM
13
10
  * - DISPLAYTO
14
11
  */
15
- module.exports = function (server) {
12
+ export default function sortDisplayPlugin(server) {
16
13
  // RFC 5957 section 1: SORT=DISPLAY means the full SORT extension plus both sort keys
17
14
  sort(server);
18
15
  server.registerCapability('SORT=DISPLAY');
19
-
20
16
  // RFC 5957 section 4: the DISPLAY sort value of the first address of env-from and env-to
21
- server.sortKeys.DISPLAYFROM = message => collationKey(displayAddress(message, 'from'));
22
- server.sortKeys.DISPLAYTO = message => collationKey(displayAddress(message, 'to'));
23
- };
17
+ server.sortKeys.DISPLAYFROM = (message) => collationKey(displayAddress(message, 'from'));
18
+ server.sortKeys.DISPLAYTO = (message) => collationKey(displayAddress(message, 'to'));
19
+ }
@@ -0,0 +1,11 @@
1
+ import type { IMAPServer } from '../types.js';
2
+ /**
3
+ * @help Adds SORT [RFC5256] capability
4
+ *
5
+ * SORT: https://tools.ietf.org/html/rfc5256
6
+ *
7
+ * Additional commands:
8
+ * - SORT
9
+ * - UID SORT
10
+ */
11
+ export default function sortPlugin(server: IMAPServer): void;
@@ -1,9 +1,6 @@
1
- 'use strict';
2
-
3
- const { states } = require('../command-states');
4
- const { getMessageData } = require('../mimeparser');
5
- const { collationKey, baseSubject, arrivalTime, sentTime, addressMailbox, searchMessages } = require('../sorting');
6
-
1
+ import { states } from '../command-states.js';
2
+ import { getMessageData } from '../mimeparser.js';
3
+ import { collationKey, baseSubject, arrivalTime, sentTime, addressMailbox, searchMessages } from '../sorting.js';
7
4
  /**
8
5
  * @help Adds SORT [RFC5256] capability
9
6
  *
@@ -13,28 +10,24 @@ const { collationKey, baseSubject, arrivalTime, sentTime, addressMailbox, search
13
10
  * - SORT
14
11
  * - UID SORT
15
12
  */
16
- module.exports = function (server) {
13
+ export default function sortPlugin(server) {
17
14
  if (server.sortKeys) {
18
15
  // already loaded, e.g. by the SORT=DISPLAY plugin
19
16
  return;
20
17
  }
21
-
22
18
  server.registerCapability('SORT');
23
-
24
19
  // RFC 5256 section 3: sort keys and the value of a message for each. A value is a number or the
25
20
  // collation key of a string, see sorting.collationKey. SORT=DISPLAY adds its keys here
26
21
  server.sortKeys = {
27
- ARRIVAL: message => arrivalTime(message),
28
- CC: message => collationKey(addressMailbox(message, 'cc')),
29
- DATE: message => sentTime(message),
30
- FROM: message => collationKey(addressMailbox(message, 'from')),
31
- SIZE: message => getMessageData(message).raw.length,
32
- SUBJECT: message => collationKey(baseSubject(getMessageData(message).tree.parsedHeader.subject).subject),
33
- TO: message => collationKey(addressMailbox(message, 'to'))
22
+ ARRIVAL: (message) => arrivalTime(message),
23
+ CC: (message) => collationKey(addressMailbox(message, 'cc')),
24
+ DATE: (message) => sentTime(message),
25
+ FROM: (message) => collationKey(addressMailbox(message, 'from')),
26
+ SIZE: (message) => getMessageData(message).raw.length,
27
+ SUBJECT: (message) => collationKey(baseSubject(getMessageData(message).tree.parsedHeader.subject).subject),
28
+ TO: (message) => collationKey(addressMailbox(message, 'to'))
34
29
  };
35
-
36
30
  const compareValues = (a, b) => (Buffer.isBuffer(a) ? Buffer.compare(a, b) : a - b);
37
-
38
31
  /**
39
32
  * Returns a comparator of messages for parsed sort criteria: ascending order, REVERSE turns one
40
33
  * criterion around, and mailbox order (the sequence number) breaks ties (RFC 5256 section 3).
@@ -43,14 +36,11 @@ module.exports = function (server) {
43
36
  * @param {Array} criteria List of `{ key, reverse }`
44
37
  * @return {Function} comparator for two messages of the same mailbox
45
38
  */
46
- server.sortComparator = criteria => {
39
+ server.sortComparator = (criteria) => {
47
40
  const cache = new WeakMap();
48
- const getValues = message => {
41
+ const getValues = (message) => {
49
42
  if (!cache.has(message)) {
50
- cache.set(
51
- message,
52
- criteria.map(criterion => server.sortKeys[criterion.key](message))
53
- );
43
+ cache.set(message, criteria.map((criterion) => server.sortKeys[criterion.key](message)));
54
44
  }
55
45
  return cache.get(message);
56
46
  };
@@ -67,16 +57,13 @@ module.exports = function (server) {
67
57
  return a.uid - b.uid;
68
58
  };
69
59
  };
70
-
71
60
  const sortHandler = (isUid, connection, parsed, data, callback) => {
72
61
  const command = isUid ? 'UID SORT' : 'SORT';
73
62
  const attributes = parsed.attributes || [];
74
-
75
- const fail = text => {
63
+ const fail = (text) => {
76
64
  connection.sendStatus(parsed, data, 'BAD', text, false, command + ' FAILED');
77
65
  return callback();
78
66
  };
79
-
80
67
  // RFC 5256 section 5: sort-criteria = "(" sort-criterion *(SP sort-criterion) ")",
81
68
  // sort-criterion = ["REVERSE" SP] sort-key
82
69
  if (!Array.isArray(attributes[0]) || !attributes[0].length) {
@@ -99,34 +86,25 @@ module.exports = function (server) {
99
86
  if (reverse) {
100
87
  return fail('REVERSE must be followed by a sort key');
101
88
  }
102
-
103
89
  const result = searchMessages(connection, parsed, data, attributes.slice(1));
104
90
  if (!result) {
105
91
  return callback();
106
92
  }
107
-
108
93
  const compare = server.sortComparator(criteria);
109
94
  const sorted = result.list.slice().sort(compare);
110
-
111
- connection.send(
112
- {
113
- tag: '*',
114
- command: 'SORT',
115
- attributes: sorted.map(message => (isUid ? message.uid : result.numbers[message.uid]))
116
- },
117
- command,
118
- parsed,
119
- data,
120
- // the search result, for CONDSTORE to append the highest mod-sequence (RFC 7162 section 3.1.9), with the
121
- // sorted messages and the comparator for ESORT and CONTEXT=SORT
122
- Object.assign(result, { sorted, compare })
123
- );
95
+ connection.send({
96
+ tag: '*',
97
+ command: 'SORT',
98
+ attributes: sorted.map(message => (isUid ? message.uid : result.numbers[message.uid]))
99
+ }, command, parsed, data,
100
+ // the search result, for CONDSTORE to append the highest mod-sequence (RFC 7162 section 3.1.9), with the
101
+ // sorted messages and the comparator for ESORT and CONTEXT=SORT
102
+ Object.assign(result, { sorted, compare }));
124
103
  connection.sendStatus(parsed, data, 'OK', command + ' completed', false, command);
125
104
  return callback();
126
105
  };
127
-
128
106
  // RFC 5256 section 3: EXPUNGE responses are not permitted while responding to SORT, but are during UID SORT.
129
107
  // The search criteria start after the sort criteria and the charset
130
108
  server.setCommandHandler('SORT', sortHandler.bind(null, false), { states: states.SELECTED, searchCriteria: 2, noExpunge: true });
131
109
  server.setCommandHandler('UID SORT', sortHandler.bind(null, true), { states: states.SELECTED, searchCriteria: 2 });
132
- };
110
+ }
@@ -0,0 +1,10 @@
1
+ import type { IMAPServer } from '../types.js';
2
+ /**
3
+ * @help Enables SPECIAL-USE [RFC6154] capability
4
+ * @help Mailboxes need to have a "special-use"
5
+ * @help property (String or Array) that will be used
6
+ * @help as extra flag for LIST and LSUB responses.
7
+ * @help With LIST-EXTENDED the SPECIAL-USE selection and
8
+ * @help return options work with the other LIST options
9
+ */
10
+ export default function specialUsePlugin(server: IMAPServer): void;
@@ -1,7 +1,4 @@
1
- 'use strict';
2
-
3
- const { getListExtensions } = require('../list-extensions');
4
-
1
+ import { getListExtensions } from '../list-extensions.js';
5
2
  /**
6
3
  * @help Enables SPECIAL-USE [RFC6154] capability
7
4
  * @help Mailboxes need to have a "special-use"
@@ -10,32 +7,26 @@ const { getListExtensions } = require('../list-extensions');
10
7
  * @help With LIST-EXTENDED the SPECIAL-USE selection and
11
8
  * @help return options work with the other LIST options
12
9
  */
13
-
14
- module.exports = function (server) {
10
+ export default function specialUsePlugin(server) {
15
11
  // Register capability
16
12
  server.registerCapability('SPECIAL-USE');
17
-
18
- const getSpecialUse = folder => [].concat((folder && folder['special-use']) || []);
19
-
13
+ const getSpecialUse = (folder) => [].concat((folder && folder['special-use']) || []);
20
14
  // RFC 6154 section 2: with LIST-EXTENDED, SPECIAL-USE is a list-select-independent-opt that
21
15
  // implies the SPECIAL-USE return option. The LIST-EXTENDED plugin may be loaded before or after this one
22
16
  const listExtensions = getListExtensions(server);
23
17
  listExtensions.selectionOptions['SPECIAL-USE'] = {
24
18
  type: 'independent',
25
19
  returnOption: 'SPECIAL-USE',
26
- match: folder => folder.flags.indexOf('\\Noselect') < 0 && getSpecialUse(folder).length > 0
20
+ match: (folder) => folder.flags.indexOf('\\Noselect') < 0 && getSpecialUse(folder).length > 0
27
21
  };
28
22
  // special-use attributes are always included, so the return option needs no extra handling
29
23
  listExtensions.returnOptions['SPECIAL-USE'] = {};
30
-
31
24
  const listHandler = server.getCommandHandler('LIST');
32
-
33
25
  server.setCommandHandler('LIST', (connection, parsed, data, callback) => {
34
26
  if (listExtensions.enabled) {
35
27
  // LIST-EXTENDED handles the options
36
28
  return listHandler(connection, parsed, data, callback);
37
29
  }
38
-
39
30
  // without LIST-EXTENDED only the SPECIAL-USE options are understood
40
31
  let i;
41
32
  if (parsed.attributes && Array.isArray(parsed.attributes[0])) {
@@ -50,30 +41,24 @@ module.exports = function (server) {
50
41
  parsed.attributes.splice(0, 1);
51
42
  }
52
43
  }
53
-
54
- if (
55
- parsed.attributes &&
44
+ if (parsed.attributes &&
56
45
  parsed.attributes[2] &&
57
46
  parsed.attributes[2].type === 'ATOM' &&
58
47
  parsed.attributes[2].value.toUpperCase() === 'RETURN' &&
59
- Array.isArray(parsed.attributes[3])
60
- ) {
48
+ Array.isArray(parsed.attributes[3])) {
61
49
  for (i = parsed.attributes[3].length - 1; i >= 0; i--) {
62
50
  if (parsed.attributes[3][i] && parsed.attributes[3][i].type === 'ATOM' && parsed.attributes[3][i].value.toUpperCase() === 'SPECIAL-USE') {
63
51
  // special-use attributes are always included, so the return option needs no extra handling
64
52
  parsed.attributes[3].splice(i, 1);
65
53
  }
66
54
  }
67
-
68
55
  // Remove RETURN (List) if no members were left
69
56
  if (!parsed.attributes[3].length) {
70
57
  parsed.attributes.splice(2, 2);
71
58
  }
72
59
  }
73
-
74
60
  listHandler(connection, parsed, data, callback);
75
61
  });
76
-
77
62
  server.outputHandlers.push((connection, response, description, parsed, data, folder) => {
78
63
  const specialUseList = getSpecialUse(folder).map(specialUse => {
79
64
  return {
@@ -81,15 +66,15 @@ module.exports = function (server) {
81
66
  value: specialUse
82
67
  };
83
68
  });
84
-
85
69
  if ((description === 'LIST ITEM' || description === 'LSUB ITEM') && folder && response.attributes && Array.isArray(response.attributes[0])) {
86
70
  if (specialUseList.length) {
87
71
  // special-use attributes are added to the other mailbox attributes, also with RETURN (SPECIAL-USE)
88
72
  response.attributes[0] = response.attributes[0].concat(specialUseList);
89
- } else if (parsed.listSpecialUseOnly) {
73
+ }
74
+ else if (parsed.listSpecialUseOnly) {
90
75
  // Do not show this response
91
76
  response.skipResponse = true;
92
77
  }
93
78
  }
94
79
  });
95
- };
80
+ }
@@ -0,0 +1,5 @@
1
+ import type { IMAPServer } from '../types.js';
2
+ /**
3
+ * @help Adds STARTTLS command
4
+ */
5
+ export default function starttlsPlugin(server: IMAPServer): void;
@@ -1,57 +1,40 @@
1
- 'use strict';
2
-
3
1
  /**
4
2
  * @help Adds STARTTLS command
5
3
  */
6
-
7
- module.exports = function (server) {
4
+ export default function starttlsPlugin(server) {
8
5
  // Register capability, usable with unsecure connection
9
- server.registerCapability('STARTTLS', connection => {
6
+ server.registerCapability('STARTTLS', (connection) => {
10
7
  return !connection.secureConnection;
11
8
  });
12
-
13
9
  // Add STARTTLS command
14
10
  server.setCommandHandler('STARTTLS', (connection, parsed, data, callback) => {
15
11
  // only works in insecure setting
16
12
  if (connection.secureConnection) {
17
13
  return sendError('Connection is already secured', connection, parsed, data, callback);
18
14
  }
19
-
20
- connection.send(
21
- {
22
- tag: parsed.tag,
23
- command: 'OK',
24
- attributes: [
25
- {
26
- type: 'TEXT',
27
- value: 'Server ready to start TLS negotiation'
28
- }
29
- ]
30
- },
31
- 'STARTTLS INIT',
32
- parsed,
33
- data
34
- );
35
-
36
- connection.upgradeConnection(callback);
37
- });
38
- };
39
-
40
- function sendError(message, connection, parsed, data, callback) {
41
- connection.send(
42
- {
15
+ connection.send({
43
16
  tag: parsed.tag,
44
- command: 'BAD',
17
+ command: 'OK',
45
18
  attributes: [
46
19
  {
47
20
  type: 'TEXT',
48
- value: message
21
+ value: 'Server ready to start TLS negotiation'
49
22
  }
50
23
  ]
51
- },
52
- 'INVALID COMMAND',
53
- parsed,
54
- data
55
- );
24
+ }, 'STARTTLS INIT', parsed, data);
25
+ connection.upgradeConnection(callback);
26
+ });
27
+ }
28
+ function sendError(message, connection, parsed, data, callback) {
29
+ connection.send({
30
+ tag: parsed.tag,
31
+ command: 'BAD',
32
+ attributes: [
33
+ {
34
+ type: 'TEXT',
35
+ value: message
36
+ }
37
+ ]
38
+ }, 'INVALID COMMAND', parsed, data);
56
39
  return callback();
57
40
  }
@@ -0,0 +1,7 @@
1
+ import type { IMAPServer } from '../types.js';
2
+ /**
3
+ * @help Adds STATUS=SIZE [RFC8438] capability. The SIZE status item
4
+ * @help is the sum of the RFC822.SIZE values of the messages, it can
5
+ * @help also be used with LIST-STATUS
6
+ */
7
+ export default function statusSizePlugin(server: IMAPServer): void;
@@ -1,19 +1,12 @@
1
- 'use strict';
2
-
3
- const fetchHandlers = require('../commands/handlers/fetch');
4
-
1
+ import fetchHandlers from '../commands/handlers/fetch.js';
5
2
  /**
6
3
  * @help Adds STATUS=SIZE [RFC8438] capability. The SIZE status item
7
4
  * @help is the sum of the RFC822.SIZE values of the messages, it can
8
5
  * @help also be used with LIST-STATUS
9
6
  */
10
-
11
- module.exports = function (server) {
7
+ export default function statusSizePlugin(server) {
12
8
  server.registerCapability('STATUS=SIZE');
13
-
14
9
  server.allowedStatus.push('SIZE');
15
-
16
10
  // RFC 8438 section 3: at least the sum of the RFC822.SIZE values of all messages in the mailbox
17
- server.statusHandlers.SIZE = (connection, mailbox) =>
18
- mailbox.messages.reduce((size, message) => size + fetchHandlers['RFC822.SIZE'](connection, message), 0);
19
- };
11
+ server.statusHandlers.SIZE = (connection, mailbox) => mailbox.messages.reduce((size, message) => size + fetchHandlers['RFC822.SIZE'](connection, message), 0);
12
+ }
@@ -0,0 +1,11 @@
1
+ import type { IMAPServer } from '../types.js';
2
+ /**
3
+ * @help Adds THREAD=ORDEREDSUBJECT [RFC5256] capability
4
+ *
5
+ * THREAD: https://tools.ietf.org/html/rfc5256
6
+ *
7
+ * Additional commands:
8
+ * - THREAD ORDEREDSUBJECT
9
+ * - UID THREAD ORDEREDSUBJECT
10
+ */
11
+ export default function threadOrderedsubjectPlugin(server: IMAPServer): void;
@@ -1,7 +1,4 @@
1
- 'use strict';
2
-
3
- const { addThreadAlgorithm } = require('../threading');
4
-
1
+ import { addThreadAlgorithm } from '../threading.js';
5
2
  /**
6
3
  * @help Adds THREAD=ORDEREDSUBJECT [RFC5256] capability
7
4
  *
@@ -11,6 +8,6 @@ const { addThreadAlgorithm } = require('../threading');
11
8
  * - THREAD ORDEREDSUBJECT
12
9
  * - UID THREAD ORDEREDSUBJECT
13
10
  */
14
- module.exports = function (server) {
11
+ export default function threadOrderedsubjectPlugin(server) {
15
12
  addThreadAlgorithm(server, 'ORDEREDSUBJECT');
16
- };
13
+ }
@@ -0,0 +1,11 @@
1
+ import type { IMAPServer } from '../types.js';
2
+ /**
3
+ * @help Adds THREAD=REFERENCES [RFC5256] capability
4
+ *
5
+ * THREAD: https://tools.ietf.org/html/rfc5256
6
+ *
7
+ * Additional commands:
8
+ * - THREAD REFERENCES
9
+ * - UID THREAD REFERENCES
10
+ */
11
+ export default function threadReferencesPlugin(server: IMAPServer): void;
@@ -1,7 +1,4 @@
1
- 'use strict';
2
-
3
- const { addThreadAlgorithm } = require('../threading');
4
-
1
+ import { addThreadAlgorithm } from '../threading.js';
5
2
  /**
6
3
  * @help Adds THREAD=REFERENCES [RFC5256] capability
7
4
  *
@@ -11,6 +8,6 @@ const { addThreadAlgorithm } = require('../threading');
11
8
  * - THREAD REFERENCES
12
9
  * - UID THREAD REFERENCES
13
10
  */
14
- module.exports = function (server) {
11
+ export default function threadReferencesPlugin(server) {
15
12
  addThreadAlgorithm(server, 'REFERENCES');
16
- };
13
+ }
@@ -0,0 +1,15 @@
1
+ import type { IMAPServer } from '../types.js';
2
+ /**
3
+ * @help Adds UIDONLY [RFC9586] capability, loads ENABLE as well
4
+ * @help After ENABLE UIDONLY: FETCH, STORE, SEARCH, COPY, MOVE, SORT, THREAD, REPLACE and
5
+ * @help message numbers in UID SEARCH (SORT, THREAD) criteria are refused with BAD [UIDREQUIRED],
6
+ * @help UIDFETCH responses replace FETCH responses and VANISHED replaces EXPUNGE.
7
+ * @help Load UIDPLUS for COPYUID and UID EXPUNGE
8
+ *
9
+ * UIDONLY: https://www.rfc-editor.org/rfc/rfc9586
10
+ */
11
+ declare function uidonlyPlugin(server: IMAPServer): void;
12
+ declare namespace uidonlyPlugin {
13
+ var requires: string[];
14
+ }
15
+ export default uidonlyPlugin;