imapkit 4.0.3 → 4.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (485) hide show
  1. package/README.md +32 -19
  2. package/bin/imapkit.js +12 -16
  3. package/dist/cjs/addressparser.d.ts +21 -0
  4. package/dist/cjs/addressparser.js +271 -0
  5. package/dist/cjs/arguments.d.ts +31 -0
  6. package/{lib → dist/cjs}/arguments.js +9 -21
  7. package/dist/cjs/bodystructure.d.ts +25 -0
  8. package/dist/cjs/bodystructure.js +150 -0
  9. package/dist/cjs/cert.d.ts +2 -0
  10. package/dist/cjs/cert.js +7 -0
  11. package/dist/cjs/command-states.d.ts +36 -0
  12. package/dist/cjs/command-states.js +102 -0
  13. package/dist/cjs/commands/append.d.ts +88 -0
  14. package/dist/cjs/commands/append.js +299 -0
  15. package/dist/cjs/commands/capability.d.ts +2 -0
  16. package/dist/cjs/commands/capability.js +44 -0
  17. package/dist/cjs/commands/check.d.ts +2 -0
  18. package/dist/cjs/commands/check.js +28 -0
  19. package/dist/cjs/commands/close.d.ts +2 -0
  20. package/dist/cjs/commands/close.js +35 -0
  21. package/dist/cjs/commands/copy.d.ts +30 -0
  22. package/dist/cjs/commands/copy.js +107 -0
  23. package/dist/cjs/commands/create.d.ts +2 -0
  24. package/dist/cjs/commands/create.js +53 -0
  25. package/dist/cjs/commands/delete.d.ts +2 -0
  26. package/dist/cjs/commands/delete.js +63 -0
  27. package/dist/cjs/commands/examine.d.ts +2 -0
  28. package/dist/cjs/commands/examine.js +19 -0
  29. package/dist/cjs/commands/expunge.d.ts +2 -0
  30. package/dist/cjs/commands/expunge.js +32 -0
  31. package/dist/cjs/commands/fetch.d.ts +23 -0
  32. package/dist/cjs/commands/fetch.js +208 -0
  33. package/dist/cjs/commands/handlers/fetch.d.ts +12 -0
  34. package/dist/cjs/commands/handlers/fetch.js +195 -0
  35. package/dist/cjs/commands/handlers/flags.d.ts +17 -0
  36. package/dist/cjs/commands/handlers/flags.js +39 -0
  37. package/dist/cjs/commands/handlers/search.d.ts +85 -0
  38. package/dist/cjs/commands/handlers/search.js +504 -0
  39. package/dist/cjs/commands/handlers/status.d.ts +34 -0
  40. package/dist/cjs/commands/handlers/status.js +81 -0
  41. package/dist/cjs/commands/handlers/store.d.ts +3 -0
  42. package/dist/cjs/commands/handlers/store.js +117 -0
  43. package/dist/cjs/commands/index.d.ts +2 -0
  44. package/dist/cjs/commands/index.js +61 -0
  45. package/dist/cjs/commands/list.d.ts +2 -0
  46. package/dist/cjs/commands/list.js +86 -0
  47. package/dist/cjs/commands/login.d.ts +2 -0
  48. package/dist/cjs/commands/login.js +62 -0
  49. package/dist/cjs/commands/logout.d.ts +2 -0
  50. package/dist/cjs/commands/logout.js +40 -0
  51. package/dist/cjs/commands/lsub.d.ts +2 -0
  52. package/dist/cjs/commands/lsub.js +79 -0
  53. package/dist/cjs/commands/noop.d.ts +2 -0
  54. package/dist/cjs/commands/noop.js +28 -0
  55. package/dist/cjs/commands/rename.d.ts +2 -0
  56. package/dist/cjs/commands/rename.js +98 -0
  57. package/dist/cjs/commands/search.d.ts +10 -0
  58. package/dist/cjs/commands/search.js +71 -0
  59. package/dist/cjs/commands/select.d.ts +19 -0
  60. package/dist/cjs/commands/select.js +230 -0
  61. package/dist/cjs/commands/status.d.ts +2 -0
  62. package/dist/cjs/commands/status.js +57 -0
  63. package/dist/cjs/commands/store.d.ts +10 -0
  64. package/dist/cjs/commands/store.js +134 -0
  65. package/dist/cjs/commands/subscribe.d.ts +2 -0
  66. package/dist/cjs/commands/subscribe.js +51 -0
  67. package/dist/cjs/commands/uid-copy.d.ts +2 -0
  68. package/dist/cjs/commands/uid-copy.js +19 -0
  69. package/dist/cjs/commands/uid-fetch.d.ts +3 -0
  70. package/dist/cjs/commands/uid-fetch.js +17 -0
  71. package/dist/cjs/commands/uid-search.d.ts +3 -0
  72. package/dist/cjs/commands/uid-search.js +17 -0
  73. package/dist/cjs/commands/uid-store.d.ts +3 -0
  74. package/dist/cjs/commands/uid-store.js +17 -0
  75. package/dist/cjs/commands/unsubscribe.d.ts +2 -0
  76. package/dist/cjs/commands/unsubscribe.js +50 -0
  77. package/dist/cjs/dates.d.ts +64 -0
  78. package/dist/cjs/dates.js +124 -0
  79. package/dist/cjs/deflate-layer.d.ts +83 -0
  80. package/dist/cjs/deflate-layer.js +232 -0
  81. package/dist/cjs/encoded-words.d.ts +15 -0
  82. package/dist/cjs/encoded-words.js +85 -0
  83. package/dist/cjs/envelope.d.ts +33 -0
  84. package/dist/cjs/envelope.js +86 -0
  85. package/dist/cjs/esearch.d.ts +96 -0
  86. package/dist/cjs/esearch.js +190 -0
  87. package/dist/cjs/framing.d.ts +66 -0
  88. package/{lib → dist/cjs}/framing.js +9 -26
  89. package/dist/cjs/index.d.ts +9 -0
  90. package/dist/cjs/index.js +56 -0
  91. package/dist/cjs/list-extensions.d.ts +50 -0
  92. package/dist/cjs/list-extensions.js +35 -0
  93. package/dist/cjs/load-plugins.d.ts +21 -0
  94. package/dist/cjs/load-plugins.js +89 -0
  95. package/dist/cjs/mailbox-name.d.ts +26 -0
  96. package/dist/cjs/mailbox-name.js +127 -0
  97. package/dist/cjs/mimeparser.d.ts +137 -0
  98. package/dist/cjs/mimeparser.js +727 -0
  99. package/dist/cjs/mock-client.d.ts +39 -0
  100. package/dist/cjs/mock-client.js +236 -0
  101. package/dist/cjs/numbers.d.ts +28 -0
  102. package/dist/cjs/numbers.js +52 -0
  103. package/dist/cjs/package.json +3 -0
  104. package/dist/cjs/plugins/acl.d.ts +2 -0
  105. package/dist/cjs/plugins/acl.js +888 -0
  106. package/dist/cjs/plugins/appendlimit.d.ts +16 -0
  107. package/dist/cjs/plugins/appendlimit.js +87 -0
  108. package/dist/cjs/plugins/auth-plain.d.ts +2 -0
  109. package/dist/cjs/plugins/auth-plain.js +89 -0
  110. package/dist/cjs/plugins/binary.d.ts +30 -0
  111. package/dist/cjs/plugins/binary.js +247 -0
  112. package/dist/cjs/plugins/catenate.d.ts +14 -0
  113. package/dist/cjs/plugins/catenate.js +250 -0
  114. package/dist/cjs/plugins/compress.d.ts +7 -0
  115. package/dist/cjs/plugins/compress.js +79 -0
  116. package/dist/cjs/plugins/condstore.d.ts +5 -0
  117. package/dist/cjs/plugins/condstore.js +492 -0
  118. package/dist/cjs/plugins/context-search.d.ts +8 -0
  119. package/dist/cjs/plugins/context-search.js +304 -0
  120. package/dist/cjs/plugins/context-sort.d.ts +6 -0
  121. package/dist/cjs/plugins/context-sort.js +32 -0
  122. package/dist/cjs/plugins/create-special-use.d.ts +7 -0
  123. package/dist/cjs/plugins/create-special-use.js +101 -0
  124. package/dist/cjs/plugins/enable.d.ts +23 -0
  125. package/dist/cjs/plugins/enable.js +127 -0
  126. package/dist/cjs/plugins/esearch.d.ts +6 -0
  127. package/dist/cjs/plugins/esearch.js +142 -0
  128. package/dist/cjs/plugins/esort.d.ts +6 -0
  129. package/dist/cjs/plugins/esort.js +60 -0
  130. package/dist/cjs/plugins/id.d.ts +5 -0
  131. package/dist/cjs/plugins/id.js +123 -0
  132. package/dist/cjs/plugins/idle.d.ts +5 -0
  133. package/dist/cjs/plugins/idle.js +85 -0
  134. package/dist/cjs/plugins/imap4rev2.d.ts +6 -0
  135. package/dist/cjs/plugins/imap4rev2.js +184 -0
  136. package/dist/cjs/plugins/index.d.ts +2 -0
  137. package/dist/cjs/plugins/index.js +119 -0
  138. package/dist/cjs/plugins/list-extended.d.ts +2 -0
  139. package/dist/cjs/plugins/list-extended.js +235 -0
  140. package/dist/cjs/plugins/list-status.d.ts +6 -0
  141. package/dist/cjs/plugins/list-status.js +42 -0
  142. package/dist/cjs/plugins/literalminus.d.ts +8 -0
  143. package/dist/cjs/plugins/literalminus.js +32 -0
  144. package/dist/cjs/plugins/literalplus.d.ts +6 -0
  145. package/dist/cjs/plugins/literalplus.js +30 -0
  146. package/dist/cjs/plugins/logindisabled.d.ts +5 -0
  147. package/dist/cjs/plugins/logindisabled.js +54 -0
  148. package/dist/cjs/plugins/messagelimit.d.ts +19 -0
  149. package/dist/cjs/plugins/messagelimit.js +227 -0
  150. package/dist/cjs/plugins/metadata-server.d.ts +7 -0
  151. package/dist/cjs/plugins/metadata-server.js +24 -0
  152. package/dist/cjs/plugins/metadata.d.ts +11 -0
  153. package/dist/cjs/plugins/metadata.js +436 -0
  154. package/dist/cjs/plugins/move.d.ts +11 -0
  155. package/dist/cjs/plugins/move.js +96 -0
  156. package/dist/cjs/plugins/multiappend.d.ts +12 -0
  157. package/dist/cjs/plugins/multiappend.js +38 -0
  158. package/dist/cjs/plugins/multisearch.d.ts +6 -0
  159. package/dist/cjs/plugins/multisearch.js +263 -0
  160. package/dist/cjs/plugins/namespace.d.ts +5 -0
  161. package/dist/cjs/plugins/namespace.js +57 -0
  162. package/dist/cjs/plugins/notify.d.ts +2 -0
  163. package/dist/cjs/plugins/notify.js +628 -0
  164. package/dist/cjs/plugins/oauthbearer.d.ts +32 -0
  165. package/dist/cjs/plugins/oauthbearer.js +202 -0
  166. package/dist/cjs/plugins/objectid.d.ts +23 -0
  167. package/dist/cjs/plugins/objectid.js +221 -0
  168. package/dist/cjs/plugins/partial.d.ts +6 -0
  169. package/dist/cjs/plugins/partial.js +78 -0
  170. package/dist/cjs/plugins/preview.d.ts +31 -0
  171. package/dist/cjs/plugins/preview.js +378 -0
  172. package/dist/cjs/plugins/qresync.d.ts +11 -0
  173. package/dist/cjs/plugins/qresync.js +473 -0
  174. package/dist/cjs/plugins/quota.d.ts +18 -0
  175. package/dist/cjs/plugins/quota.js +254 -0
  176. package/dist/cjs/plugins/replace.d.ts +14 -0
  177. package/dist/cjs/plugins/replace.js +130 -0
  178. package/dist/cjs/plugins/sasl-ir.d.ts +5 -0
  179. package/dist/cjs/plugins/sasl-ir.js +24 -0
  180. package/dist/cjs/plugins/savedate.d.ts +17 -0
  181. package/dist/cjs/plugins/savedate.js +64 -0
  182. package/dist/cjs/plugins/savelimit.d.ts +10 -0
  183. package/dist/cjs/plugins/savelimit.js +30 -0
  184. package/dist/cjs/plugins/searchres.d.ts +6 -0
  185. package/dist/cjs/plugins/searchres.js +91 -0
  186. package/dist/cjs/plugins/sort-display.d.ts +11 -0
  187. package/dist/cjs/plugins/sort-display.js +37 -0
  188. package/dist/cjs/plugins/sort.d.ts +11 -0
  189. package/dist/cjs/plugins/sort.js +125 -0
  190. package/dist/cjs/plugins/special-use.d.ts +10 -0
  191. package/dist/cjs/plugins/special-use.js +95 -0
  192. package/dist/cjs/plugins/starttls.d.ts +5 -0
  193. package/dist/cjs/plugins/starttls.js +55 -0
  194. package/dist/cjs/plugins/status-size.d.ts +7 -0
  195. package/dist/cjs/plugins/status-size.js +30 -0
  196. package/dist/cjs/plugins/thread-orderedsubject.d.ts +11 -0
  197. package/dist/cjs/plugins/thread-orderedsubject.js +28 -0
  198. package/dist/cjs/plugins/thread-references.d.ts +11 -0
  199. package/dist/cjs/plugins/thread-references.js +28 -0
  200. package/dist/cjs/plugins/uidonly.d.ts +15 -0
  201. package/dist/cjs/plugins/uidonly.js +126 -0
  202. package/dist/cjs/plugins/uidplus.d.ts +15 -0
  203. package/dist/cjs/plugins/uidplus.js +119 -0
  204. package/dist/cjs/plugins/unauthenticate.d.ts +7 -0
  205. package/dist/cjs/plugins/unauthenticate.js +32 -0
  206. package/dist/cjs/plugins/unselect.d.ts +5 -0
  207. package/dist/cjs/plugins/unselect.js +36 -0
  208. package/dist/cjs/plugins/utf8-accept.d.ts +6 -0
  209. package/dist/cjs/plugins/utf8-accept.js +72 -0
  210. package/dist/cjs/plugins/x-gm-ext-1.d.ts +26 -0
  211. package/dist/cjs/plugins/x-gm-ext-1.js +422 -0
  212. package/dist/cjs/plugins/xoauth2.d.ts +2 -0
  213. package/dist/cjs/plugins/xoauth2.js +155 -0
  214. package/dist/cjs/plugins/xtoybird.d.ts +2 -0
  215. package/dist/cjs/plugins/xtoybird.js +236 -0
  216. package/dist/cjs/server.d.ts +876 -0
  217. package/dist/cjs/server.js +2597 -0
  218. package/dist/cjs/smtp-listener.d.ts +13 -0
  219. package/dist/cjs/smtp-listener.js +47 -0
  220. package/dist/cjs/sorting.d.ts +77 -0
  221. package/dist/cjs/sorting.js +290 -0
  222. package/dist/cjs/threading.d.ts +30 -0
  223. package/dist/cjs/threading.js +318 -0
  224. package/dist/cjs/types.d.ts +327 -0
  225. package/dist/cjs/types.js +3 -0
  226. package/dist/cjs/utf8-session.d.ts +17 -0
  227. package/dist/cjs/utf8-session.js +148 -0
  228. package/dist/cjs/vanished.d.ts +21 -0
  229. package/dist/cjs/vanished.js +55 -0
  230. package/dist/esm/addressparser.d.ts +21 -0
  231. package/{lib → dist/esm}/addressparser.js +106 -133
  232. package/dist/esm/arguments.d.ts +31 -0
  233. package/dist/esm/arguments.js +96 -0
  234. package/dist/esm/bodystructure.d.ts +25 -0
  235. package/{lib → dist/esm}/bodystructure.js +17 -33
  236. package/dist/esm/cert.d.ts +2 -0
  237. package/dist/esm/cert.js +4 -0
  238. package/dist/esm/command-states.d.ts +36 -0
  239. package/{lib → dist/esm}/command-states.js +4 -16
  240. package/dist/esm/commands/append.d.ts +88 -0
  241. package/{lib → dist/esm}/commands/append.js +47 -85
  242. package/dist/esm/commands/capability.d.ts +2 -0
  243. package/dist/esm/commands/capability.js +29 -0
  244. package/dist/esm/commands/check.d.ts +2 -0
  245. package/dist/esm/commands/check.js +13 -0
  246. package/dist/esm/commands/close.d.ts +2 -0
  247. package/dist/esm/commands/close.js +20 -0
  248. package/dist/esm/commands/copy.d.ts +30 -0
  249. package/{lib → dist/esm}/commands/copy.js +31 -55
  250. package/dist/esm/commands/create.d.ts +2 -0
  251. package/{lib → dist/esm}/commands/create.js +25 -39
  252. package/dist/esm/commands/delete.d.ts +2 -0
  253. package/{lib → dist/esm}/commands/delete.js +25 -41
  254. package/dist/esm/commands/examine.d.ts +2 -0
  255. package/dist/esm/commands/examine.js +4 -0
  256. package/dist/esm/commands/expunge.d.ts +2 -0
  257. package/dist/esm/commands/expunge.js +17 -0
  258. package/dist/esm/commands/fetch.d.ts +23 -0
  259. package/{lib → dist/esm}/commands/fetch.js +33 -74
  260. package/dist/esm/commands/handlers/fetch.d.ts +12 -0
  261. package/{lib → dist/esm}/commands/handlers/fetch.js +11 -42
  262. package/dist/esm/commands/handlers/flags.d.ts +17 -0
  263. package/{lib → dist/esm}/commands/handlers/flags.js +3 -11
  264. package/dist/esm/commands/handlers/search.d.ts +85 -0
  265. package/{lib → dist/esm}/commands/handlers/search.js +33 -71
  266. package/dist/esm/commands/handlers/status.d.ts +34 -0
  267. package/{lib → dist/esm}/commands/handlers/status.js +1 -9
  268. package/dist/esm/commands/handlers/store.d.ts +3 -0
  269. package/{lib → dist/esm}/commands/handlers/store.js +20 -44
  270. package/dist/esm/commands/index.d.ts +2 -0
  271. package/dist/esm/commands/index.js +55 -0
  272. package/dist/esm/commands/list.d.ts +2 -0
  273. package/dist/esm/commands/list.js +71 -0
  274. package/dist/esm/commands/login.d.ts +2 -0
  275. package/{lib → dist/esm}/commands/login.js +24 -44
  276. package/dist/esm/commands/logout.d.ts +2 -0
  277. package/dist/esm/commands/logout.js +25 -0
  278. package/dist/esm/commands/lsub.d.ts +2 -0
  279. package/dist/esm/commands/lsub.js +64 -0
  280. package/dist/esm/commands/noop.d.ts +2 -0
  281. package/dist/esm/commands/noop.js +13 -0
  282. package/dist/esm/commands/rename.d.ts +2 -0
  283. package/{lib → dist/esm}/commands/rename.js +32 -51
  284. package/dist/esm/commands/search.d.ts +10 -0
  285. package/dist/esm/commands/search.js +54 -0
  286. package/dist/esm/commands/select.d.ts +19 -0
  287. package/dist/esm/commands/select.js +214 -0
  288. package/dist/esm/commands/status.d.ts +2 -0
  289. package/{lib → dist/esm}/commands/status.js +18 -39
  290. package/dist/esm/commands/store.d.ts +10 -0
  291. package/{lib → dist/esm}/commands/store.js +39 -73
  292. package/dist/esm/commands/subscribe.d.ts +2 -0
  293. package/{lib → dist/esm}/commands/subscribe.js +22 -39
  294. package/dist/esm/commands/uid-copy.d.ts +2 -0
  295. package/dist/esm/commands/uid-copy.js +4 -0
  296. package/dist/esm/commands/uid-fetch.d.ts +3 -0
  297. package/dist/esm/commands/uid-fetch.js +3 -0
  298. package/dist/esm/commands/uid-search.d.ts +3 -0
  299. package/dist/esm/commands/uid-search.js +3 -0
  300. package/dist/esm/commands/uid-store.d.ts +3 -0
  301. package/dist/esm/commands/uid-store.js +3 -0
  302. package/dist/esm/commands/unsubscribe.d.ts +2 -0
  303. package/{lib → dist/esm}/commands/unsubscribe.js +22 -37
  304. package/dist/esm/dates.d.ts +64 -0
  305. package/{lib → dist/esm}/dates.js +6 -14
  306. package/dist/esm/deflate-layer.d.ts +83 -0
  307. package/{lib → dist/esm}/deflate-layer.js +9 -26
  308. package/dist/esm/encoded-words.d.ts +15 -0
  309. package/{lib → dist/esm}/encoded-words.js +9 -25
  310. package/dist/esm/envelope.d.ts +33 -0
  311. package/{lib → dist/esm}/envelope.js +8 -19
  312. package/dist/esm/esearch.d.ts +96 -0
  313. package/{lib → dist/esm}/esearch.js +12 -39
  314. package/dist/esm/framing.d.ts +66 -0
  315. package/dist/esm/framing.js +82 -0
  316. package/dist/esm/index.d.ts +9 -0
  317. package/dist/esm/index.js +6 -0
  318. package/dist/esm/list-extensions.d.ts +50 -0
  319. package/{lib → dist/esm}/list-extensions.js +1 -4
  320. package/dist/esm/load-plugins.d.ts +21 -0
  321. package/{lib → dist/esm}/load-plugins.js +9 -43
  322. package/dist/esm/mailbox-name.d.ts +26 -0
  323. package/{lib → dist/esm}/mailbox-name.js +5 -26
  324. package/dist/esm/mimeparser.d.ts +137 -0
  325. package/{lib → dist/esm}/mimeparser.js +74 -152
  326. package/dist/esm/mock-client.d.ts +39 -0
  327. package/{lib → dist/esm}/mock-client.js +26 -40
  328. package/dist/esm/numbers.d.ts +28 -0
  329. package/{lib → dist/esm}/numbers.js +1 -8
  330. package/dist/esm/package.json +3 -0
  331. package/dist/esm/plugins/acl.d.ts +2 -0
  332. package/{lib → dist/esm}/plugins/acl.js +146 -240
  333. package/dist/esm/plugins/appendlimit.d.ts +16 -0
  334. package/{lib → dist/esm}/plugins/appendlimit.js +5 -16
  335. package/dist/esm/plugins/auth-plain.d.ts +2 -0
  336. package/{lib → dist/esm}/plugins/auth-plain.js +11 -31
  337. package/dist/esm/plugins/binary.d.ts +30 -0
  338. package/{lib → dist/esm}/plugins/binary.js +17 -43
  339. package/dist/esm/plugins/catenate.d.ts +14 -0
  340. package/{lib → dist/esm}/plugins/catenate.js +19 -40
  341. package/dist/esm/plugins/compress.d.ts +7 -0
  342. package/dist/esm/plugins/compress.js +61 -0
  343. package/dist/esm/plugins/condstore.d.ts +5 -0
  344. package/{lib → dist/esm}/plugins/condstore.js +66 -152
  345. package/dist/esm/plugins/context-search.d.ts +8 -0
  346. package/{lib → dist/esm}/plugins/context-search.js +53 -88
  347. package/dist/esm/plugins/context-sort.d.ts +6 -0
  348. package/{lib → dist/esm}/plugins/context-sort.js +4 -9
  349. package/dist/esm/plugins/create-special-use.d.ts +7 -0
  350. package/{lib → dist/esm}/plugins/create-special-use.js +33 -55
  351. package/dist/esm/plugins/enable.d.ts +23 -0
  352. package/dist/esm/plugins/enable.js +111 -0
  353. package/dist/esm/plugins/esearch.d.ts +6 -0
  354. package/{lib → dist/esm}/plugins/esearch.js +13 -42
  355. package/dist/esm/plugins/esort.d.ts +6 -0
  356. package/{lib → dist/esm}/plugins/esort.js +7 -25
  357. package/dist/esm/plugins/id.d.ts +5 -0
  358. package/dist/esm/plugins/id.js +108 -0
  359. package/dist/esm/plugins/idle.d.ts +5 -0
  360. package/dist/esm/plugins/idle.js +70 -0
  361. package/dist/esm/plugins/imap4rev2.d.ts +6 -0
  362. package/{lib → dist/esm}/plugins/imap4rev2.js +24 -60
  363. package/dist/esm/plugins/index.d.ts +2 -0
  364. package/dist/esm/plugins/index.js +113 -0
  365. package/dist/esm/plugins/list-extended.d.ts +2 -0
  366. package/{lib → dist/esm}/plugins/list-extended.js +28 -66
  367. package/dist/esm/plugins/list-status.d.ts +6 -0
  368. package/{lib → dist/esm}/plugins/list-status.js +5 -12
  369. package/dist/esm/plugins/literalminus.d.ts +8 -0
  370. package/{lib → dist/esm}/plugins/literalminus.js +2 -5
  371. package/dist/esm/plugins/literalplus.d.ts +6 -0
  372. package/{lib → dist/esm}/plugins/literalplus.js +2 -5
  373. package/dist/esm/plugins/logindisabled.d.ts +5 -0
  374. package/dist/esm/plugins/logindisabled.js +39 -0
  375. package/dist/esm/plugins/messagelimit.d.ts +19 -0
  376. package/{lib → dist/esm}/plugins/messagelimit.js +18 -41
  377. package/dist/esm/plugins/metadata-server.d.ts +7 -0
  378. package/{lib → dist/esm}/plugins/metadata-server.js +3 -7
  379. package/dist/esm/plugins/metadata.d.ts +11 -0
  380. package/dist/esm/plugins/metadata.js +421 -0
  381. package/dist/esm/plugins/move.d.ts +11 -0
  382. package/{lib → dist/esm}/plugins/move.js +37 -66
  383. package/dist/esm/plugins/multiappend.d.ts +12 -0
  384. package/{lib → dist/esm}/plugins/multiappend.js +2 -5
  385. package/dist/esm/plugins/multisearch.d.ts +6 -0
  386. package/{lib → dist/esm}/plugins/multisearch.js +24 -48
  387. package/dist/esm/plugins/namespace.d.ts +5 -0
  388. package/dist/esm/plugins/namespace.js +42 -0
  389. package/dist/esm/plugins/notify.d.ts +2 -0
  390. package/{lib → dist/esm}/plugins/notify.js +90 -134
  391. package/dist/esm/plugins/oauthbearer.d.ts +32 -0
  392. package/{lib → dist/esm}/plugins/oauthbearer.js +18 -48
  393. package/dist/esm/plugins/objectid.d.ts +23 -0
  394. package/{lib → dist/esm}/plugins/objectid.js +21 -58
  395. package/dist/esm/plugins/partial.d.ts +6 -0
  396. package/{lib → dist/esm}/plugins/partial.js +7 -15
  397. package/dist/esm/plugins/preview.d.ts +31 -0
  398. package/{lib → dist/esm}/plugins/preview.js +28 -66
  399. package/dist/esm/plugins/qresync.d.ts +11 -0
  400. package/{lib → dist/esm}/plugins/qresync.js +64 -134
  401. package/dist/esm/plugins/quota.d.ts +18 -0
  402. package/{lib → dist/esm}/plugins/quota.js +89 -135
  403. package/dist/esm/plugins/replace.d.ts +14 -0
  404. package/{lib → dist/esm}/plugins/replace.js +21 -51
  405. package/dist/esm/plugins/sasl-ir.d.ts +5 -0
  406. package/{lib → dist/esm}/plugins/sasl-ir.js +3 -6
  407. package/dist/esm/plugins/savedate.d.ts +17 -0
  408. package/{lib → dist/esm}/plugins/savedate.js +5 -15
  409. package/dist/esm/plugins/savelimit.d.ts +10 -0
  410. package/{lib → dist/esm}/plugins/savelimit.js +3 -6
  411. package/dist/esm/plugins/searchres.d.ts +6 -0
  412. package/{lib → dist/esm}/plugins/searchres.js +13 -22
  413. package/dist/esm/plugins/sort-display.d.ts +11 -0
  414. package/{lib → dist/esm}/plugins/sort-display.js +6 -10
  415. package/dist/esm/plugins/sort.d.ts +11 -0
  416. package/{lib → dist/esm}/plugins/sort.js +24 -46
  417. package/dist/esm/plugins/special-use.d.ts +10 -0
  418. package/{lib → dist/esm}/plugins/special-use.js +9 -24
  419. package/dist/esm/plugins/starttls.d.ts +5 -0
  420. package/{lib → dist/esm}/plugins/starttls.js +20 -37
  421. package/dist/esm/plugins/status-size.d.ts +7 -0
  422. package/{lib → dist/esm}/plugins/status-size.js +4 -11
  423. package/dist/esm/plugins/thread-orderedsubject.d.ts +11 -0
  424. package/{lib → dist/esm}/plugins/thread-orderedsubject.js +3 -6
  425. package/dist/esm/plugins/thread-references.d.ts +11 -0
  426. package/{lib → dist/esm}/plugins/thread-references.js +3 -6
  427. package/dist/esm/plugins/uidonly.d.ts +15 -0
  428. package/{lib → dist/esm}/plugins/uidonly.js +11 -35
  429. package/dist/esm/plugins/uidplus.d.ts +15 -0
  430. package/{lib → dist/esm}/plugins/uidplus.js +25 -45
  431. package/dist/esm/plugins/unauthenticate.d.ts +7 -0
  432. package/dist/esm/plugins/unauthenticate.js +17 -0
  433. package/dist/esm/plugins/unselect.d.ts +5 -0
  434. package/dist/esm/plugins/unselect.js +21 -0
  435. package/dist/esm/plugins/utf8-accept.d.ts +6 -0
  436. package/{lib → dist/esm}/plugins/utf8-accept.js +10 -21
  437. package/dist/esm/plugins/x-gm-ext-1.d.ts +26 -0
  438. package/{lib → dist/esm}/plugins/x-gm-ext-1.js +48 -100
  439. package/dist/esm/plugins/xoauth2.d.ts +2 -0
  440. package/dist/esm/plugins/xoauth2.js +140 -0
  441. package/dist/esm/plugins/xtoybird.d.ts +2 -0
  442. package/dist/esm/plugins/xtoybird.js +218 -0
  443. package/dist/esm/server.d.ts +876 -0
  444. package/dist/esm/server.js +2543 -0
  445. package/dist/esm/smtp-listener.d.ts +13 -0
  446. package/{lib → dist/esm}/smtp-listener.js +5 -12
  447. package/dist/esm/sorting.d.ts +77 -0
  448. package/{lib → dist/esm}/sorting.js +40 -53
  449. package/dist/esm/threading.d.ts +30 -0
  450. package/{lib → dist/esm}/threading.js +29 -70
  451. package/dist/esm/types.d.ts +327 -0
  452. package/dist/esm/types.js +2 -0
  453. package/dist/esm/utf8-session.d.ts +17 -0
  454. package/{lib → dist/esm}/utf8-session.js +15 -25
  455. package/dist/esm/vanished.d.ts +21 -0
  456. package/{lib → dist/esm}/vanished.js +16 -21
  457. package/dist/plugin-help.json +298 -0
  458. package/package.json +55 -12
  459. package/lib/commands/capability.js +0 -47
  460. package/lib/commands/check.js +0 -21
  461. package/lib/commands/close.js +0 -30
  462. package/lib/commands/examine.js +0 -7
  463. package/lib/commands/expunge.js +0 -27
  464. package/lib/commands/list.js +0 -100
  465. package/lib/commands/logout.js +0 -41
  466. package/lib/commands/lsub.js +0 -87
  467. package/lib/commands/noop.js +0 -21
  468. package/lib/commands/search.js +0 -76
  469. package/lib/commands/select.js +0 -289
  470. package/lib/commands/uid copy.js +0 -7
  471. package/lib/commands/uid fetch.js +0 -5
  472. package/lib/commands/uid search.js +0 -5
  473. package/lib/commands/uid store.js +0 -5
  474. package/lib/plugins/compress.js +0 -76
  475. package/lib/plugins/enable.js +0 -155
  476. package/lib/plugins/id.js +0 -138
  477. package/lib/plugins/idle.js +0 -105
  478. package/lib/plugins/logindisabled.js +0 -50
  479. package/lib/plugins/metadata.js +0 -475
  480. package/lib/plugins/namespace.js +0 -67
  481. package/lib/plugins/unauthenticate.js +0 -28
  482. package/lib/plugins/unselect.js +0 -36
  483. package/lib/plugins/xoauth2.js +0 -188
  484. package/lib/plugins/xtoybird.js +0 -282
  485. package/lib/server.js +0 -2880
@@ -0,0 +1,119 @@
1
+ "use strict";
2
+ // Built-in plugins by name (the file name without extension), see load-plugins.ts
3
+ var __importDefault = (this && this.__importDefault) || function (mod) {
4
+ return (mod && mod.__esModule) ? mod : { "default": mod };
5
+ };
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.plugins = void 0;
8
+ const acl_js_1 = __importDefault(require("./acl.js"));
9
+ const appendlimit_js_1 = __importDefault(require("./appendlimit.js"));
10
+ const auth_plain_js_1 = __importDefault(require("./auth-plain.js"));
11
+ const binary_js_1 = __importDefault(require("./binary.js"));
12
+ const catenate_js_1 = __importDefault(require("./catenate.js"));
13
+ const compress_js_1 = __importDefault(require("./compress.js"));
14
+ const condstore_js_1 = __importDefault(require("./condstore.js"));
15
+ const context_search_js_1 = __importDefault(require("./context-search.js"));
16
+ const context_sort_js_1 = __importDefault(require("./context-sort.js"));
17
+ const create_special_use_js_1 = __importDefault(require("./create-special-use.js"));
18
+ const enable_js_1 = __importDefault(require("./enable.js"));
19
+ const esearch_js_1 = __importDefault(require("./esearch.js"));
20
+ const esort_js_1 = __importDefault(require("./esort.js"));
21
+ const id_js_1 = __importDefault(require("./id.js"));
22
+ const idle_js_1 = __importDefault(require("./idle.js"));
23
+ const imap4rev2_js_1 = __importDefault(require("./imap4rev2.js"));
24
+ const list_extended_js_1 = __importDefault(require("./list-extended.js"));
25
+ const list_status_js_1 = __importDefault(require("./list-status.js"));
26
+ const literalminus_js_1 = __importDefault(require("./literalminus.js"));
27
+ const literalplus_js_1 = __importDefault(require("./literalplus.js"));
28
+ const logindisabled_js_1 = __importDefault(require("./logindisabled.js"));
29
+ const messagelimit_js_1 = __importDefault(require("./messagelimit.js"));
30
+ const metadata_js_1 = __importDefault(require("./metadata.js"));
31
+ const metadata_server_js_1 = __importDefault(require("./metadata-server.js"));
32
+ const move_js_1 = __importDefault(require("./move.js"));
33
+ const multiappend_js_1 = __importDefault(require("./multiappend.js"));
34
+ const multisearch_js_1 = __importDefault(require("./multisearch.js"));
35
+ const namespace_js_1 = __importDefault(require("./namespace.js"));
36
+ const notify_js_1 = __importDefault(require("./notify.js"));
37
+ const oauthbearer_js_1 = __importDefault(require("./oauthbearer.js"));
38
+ const objectid_js_1 = __importDefault(require("./objectid.js"));
39
+ const partial_js_1 = __importDefault(require("./partial.js"));
40
+ const preview_js_1 = __importDefault(require("./preview.js"));
41
+ const qresync_js_1 = __importDefault(require("./qresync.js"));
42
+ const quota_js_1 = __importDefault(require("./quota.js"));
43
+ const replace_js_1 = __importDefault(require("./replace.js"));
44
+ const sasl_ir_js_1 = __importDefault(require("./sasl-ir.js"));
45
+ const savedate_js_1 = __importDefault(require("./savedate.js"));
46
+ const savelimit_js_1 = __importDefault(require("./savelimit.js"));
47
+ const searchres_js_1 = __importDefault(require("./searchres.js"));
48
+ const sort_js_1 = __importDefault(require("./sort.js"));
49
+ const sort_display_js_1 = __importDefault(require("./sort-display.js"));
50
+ const special_use_js_1 = __importDefault(require("./special-use.js"));
51
+ const starttls_js_1 = __importDefault(require("./starttls.js"));
52
+ const status_size_js_1 = __importDefault(require("./status-size.js"));
53
+ const thread_orderedsubject_js_1 = __importDefault(require("./thread-orderedsubject.js"));
54
+ const thread_references_js_1 = __importDefault(require("./thread-references.js"));
55
+ const uidonly_js_1 = __importDefault(require("./uidonly.js"));
56
+ const uidplus_js_1 = __importDefault(require("./uidplus.js"));
57
+ const unauthenticate_js_1 = __importDefault(require("./unauthenticate.js"));
58
+ const unselect_js_1 = __importDefault(require("./unselect.js"));
59
+ const utf8_accept_js_1 = __importDefault(require("./utf8-accept.js"));
60
+ const x_gm_ext_1_js_1 = __importDefault(require("./x-gm-ext-1.js"));
61
+ const xoauth2_js_1 = __importDefault(require("./xoauth2.js"));
62
+ const xtoybird_js_1 = __importDefault(require("./xtoybird.js"));
63
+ exports.plugins = {
64
+ acl: acl_js_1.default,
65
+ appendlimit: appendlimit_js_1.default,
66
+ 'auth-plain': auth_plain_js_1.default,
67
+ binary: binary_js_1.default,
68
+ catenate: catenate_js_1.default,
69
+ compress: compress_js_1.default,
70
+ condstore: condstore_js_1.default,
71
+ 'context-search': context_search_js_1.default,
72
+ 'context-sort': context_sort_js_1.default,
73
+ 'create-special-use': create_special_use_js_1.default,
74
+ enable: enable_js_1.default,
75
+ esearch: esearch_js_1.default,
76
+ esort: esort_js_1.default,
77
+ id: id_js_1.default,
78
+ idle: idle_js_1.default,
79
+ imap4rev2: imap4rev2_js_1.default,
80
+ 'list-extended': list_extended_js_1.default,
81
+ 'list-status': list_status_js_1.default,
82
+ literalminus: literalminus_js_1.default,
83
+ literalplus: literalplus_js_1.default,
84
+ logindisabled: logindisabled_js_1.default,
85
+ messagelimit: messagelimit_js_1.default,
86
+ metadata: metadata_js_1.default,
87
+ 'metadata-server': metadata_server_js_1.default,
88
+ move: move_js_1.default,
89
+ multiappend: multiappend_js_1.default,
90
+ multisearch: multisearch_js_1.default,
91
+ namespace: namespace_js_1.default,
92
+ notify: notify_js_1.default,
93
+ oauthbearer: oauthbearer_js_1.default,
94
+ objectid: objectid_js_1.default,
95
+ partial: partial_js_1.default,
96
+ preview: preview_js_1.default,
97
+ qresync: qresync_js_1.default,
98
+ quota: quota_js_1.default,
99
+ replace: replace_js_1.default,
100
+ 'sasl-ir': sasl_ir_js_1.default,
101
+ savedate: savedate_js_1.default,
102
+ savelimit: savelimit_js_1.default,
103
+ searchres: searchres_js_1.default,
104
+ sort: sort_js_1.default,
105
+ 'sort-display': sort_display_js_1.default,
106
+ 'special-use': special_use_js_1.default,
107
+ starttls: starttls_js_1.default,
108
+ 'status-size': status_size_js_1.default,
109
+ 'thread-orderedsubject': thread_orderedsubject_js_1.default,
110
+ 'thread-references': thread_references_js_1.default,
111
+ uidonly: uidonly_js_1.default,
112
+ uidplus: uidplus_js_1.default,
113
+ unauthenticate: unauthenticate_js_1.default,
114
+ unselect: unselect_js_1.default,
115
+ 'utf8-accept': utf8_accept_js_1.default,
116
+ 'x-gm-ext-1': x_gm_ext_1_js_1.default,
117
+ xoauth2: xoauth2_js_1.default,
118
+ xtoybird: xtoybird_js_1.default
119
+ };
@@ -0,0 +1,2 @@
1
+ import type { IMAPServer } from '../types.js';
2
+ export default function listExtendedPlugin(server: IMAPServer): void;
@@ -0,0 +1,235 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.default = listExtendedPlugin;
4
+ const node_util_1 = require("node:util");
5
+ const list_extensions_js_1 = require("../list-extensions.js");
6
+ /**
7
+ * @help Adds LIST-EXTENDED [RFC5258] capability: selection options
8
+ * @help SUBSCRIBED, REMOTE and RECURSIVEMATCH, return options SUBSCRIBED
9
+ * @help and CHILDREN, multiple mailbox patterns and CHILDINFO.
10
+ * @help \Noselect mailboxes are listed as \NonExistent
11
+ */
12
+ const arguments_js_1 = require("../arguments.js");
13
+ /**
14
+ * Checks if a LIST command uses the extended syntax (RFC 5258 section 1): selection options before
15
+ * the reference, a list of patterns, or more than 2 arguments (return options)
16
+ *
17
+ * @param {Array} args Command arguments
18
+ * @return {Boolean} true for an extended LIST command
19
+ */
20
+ const isExtended = (args) => Array.isArray(args[0]) || Array.isArray(args[1]) || args.length > 2;
21
+ function listExtendedPlugin(server) {
22
+ const extensions = (0, list_extensions_js_1.getListExtensions)(server);
23
+ if (extensions.enabled) {
24
+ // already loaded by LIST-STATUS
25
+ return;
26
+ }
27
+ extensions.enabled = true;
28
+ server.registerCapability('LIST-EXTENDED');
29
+ // RFC 5258 section 3.1. There are no remote mailboxes, so REMOTE changes nothing
30
+ extensions.selectionOptions.SUBSCRIBED = {
31
+ type: 'base',
32
+ returnOption: 'SUBSCRIBED',
33
+ includeNonExistent: true,
34
+ match: (folder) => !!folder.subscribed
35
+ };
36
+ extensions.selectionOptions.REMOTE = { type: 'independent' };
37
+ extensions.selectionOptions.RECURSIVEMATCH = { type: 'modifier' };
38
+ // RFC 5258 section 3.2. Children attributes are always returned, so CHILDREN needs no handling
39
+ extensions.returnOptions.SUBSCRIBED = {};
40
+ extensions.returnOptions.CHILDREN = {};
41
+ /**
42
+ * Parses selection or return options (RFC 5258 section 6, option-extension = tag [SP option-value])
43
+ *
44
+ * @param {Array} list Parsed option list
45
+ * @param {Object} registry Known options
46
+ * @param {String} kind "selection" or "return", for error messages
47
+ * @param {Object} connection IMAPConnection instance
48
+ * @return {Map} option name to value (true for options without a value)
49
+ */
50
+ const parseOptions = (list, registry, kind, connection) => {
51
+ const options = new Map();
52
+ for (let i = 0; i < list.length; i++) {
53
+ const item = list[i];
54
+ if (!item || item.type !== 'ATOM') {
55
+ throw new Error('Invalid ' + kind + ' option');
56
+ }
57
+ const name = item.value.toUpperCase();
58
+ // only return options take a value (parse)
59
+ const option = registry[name];
60
+ if (!option) {
61
+ // RFC 5258 section 3: "A server MUST respond to options it does not recognize with a BAD response"
62
+ throw new Error('Unknown ' + kind + ' option ' + name);
63
+ }
64
+ let value = true;
65
+ if (option.parse) {
66
+ if (!Array.isArray(list[i + 1])) {
67
+ throw new Error(name + ' ' + kind + ' option requires a value');
68
+ }
69
+ value = option.parse(list[++i], connection);
70
+ }
71
+ else if (Array.isArray(list[i + 1])) {
72
+ throw new Error(name + ' ' + kind + ' option takes no value');
73
+ }
74
+ // RFC 5258 section 3: a repeated option counts once, so it can not have different values
75
+ if (options.has(name) && !(0, node_util_1.isDeepStrictEqual)(options.get(name), value)) {
76
+ throw new Error(name + ' ' + kind + ' option is repeated with a different value');
77
+ }
78
+ options.set(name, value);
79
+ }
80
+ return options;
81
+ };
82
+ /**
83
+ * Parses the arguments of an extended LIST command:
84
+ * list = "LIST" [SP list-select-opts] SP mailbox SP mbox-or-pat [SP list-return-opts]
85
+ *
86
+ * @param {Array} args Command arguments
87
+ * @param {Object} connection IMAPConnection instance
88
+ * @return {Object} `{ selection, reference, patterns, returns }`
89
+ */
90
+ const parseArguments = (args, connection) => {
91
+ let selection = new Map();
92
+ let returns = new Map();
93
+ let pos = 0;
94
+ if (Array.isArray(args[0])) {
95
+ selection = parseOptions(args[0], extensions.selectionOptions, 'selection', connection);
96
+ pos++;
97
+ }
98
+ const reference = args[pos];
99
+ let patterns = args[pos + 1];
100
+ const rest = args.slice(pos + 2);
101
+ if (!(0, arguments_js_1.isAstring)(reference)) {
102
+ throw new Error('LIST expects a reference name');
103
+ }
104
+ // patterns = "(" list-mailbox *(SP list-mailbox) ")"
105
+ patterns = Array.isArray(patterns) ? patterns : [patterns];
106
+ if (!patterns.length || !patterns.every(arguments_js_1.isAstring)) {
107
+ throw new Error('LIST expects a mailbox pattern or a list of patterns');
108
+ }
109
+ // list-return-opts = "RETURN" SP "(" [return-option *(SP return-option)] ")"
110
+ if (rest.length) {
111
+ if (rest.length !== 2 || !rest[0] || rest[0].type !== 'ATOM' || rest[0].value.toUpperCase() !== 'RETURN' || !Array.isArray(rest[1])) {
112
+ throw new Error('LIST expects RETURN and a list of return options after the patterns');
113
+ }
114
+ returns = parseOptions(rest[1], extensions.returnOptions, 'return', connection);
115
+ }
116
+ // RFC 5258 section 3.1: RECURSIVEMATCH (any list-select-mod-opt) needs a list-select-base-opt
117
+ const types = [...selection.keys()].map(name => extensions.selectionOptions[name].type);
118
+ if (types.includes('modifier') && !types.includes('base')) {
119
+ throw new Error('RECURSIVEMATCH must be used together with a selection option like SUBSCRIBED');
120
+ }
121
+ // a selection option implies its return option, eg. SUBSCRIBED
122
+ selection.forEach((value, name) => {
123
+ const implied = extensions.selectionOptions[name].returnOption;
124
+ if (implied && !returns.has(implied)) {
125
+ returns.set(implied, true);
126
+ }
127
+ });
128
+ return {
129
+ selection,
130
+ reference: reference.value,
131
+ // RFC 5258 section 3: an empty pattern is ignored in an extended LIST command
132
+ patterns: patterns.map(pattern => pattern.value).filter((pattern) => pattern),
133
+ returns
134
+ };
135
+ };
136
+ const exists = (folder) => folder.flags.indexOf('\\Noselect') < 0;
137
+ /**
138
+ * Mailbox attributes for an extended LIST response. \NonExistent replaces \Noselect (RFC 5258
139
+ * section 3, \NonExistent implies \Noselect), children attributes are computed (RFC 5258 section 4),
140
+ * \Subscribed is only listed with the SUBSCRIBED return option (RFC 5258 section 3.2)
141
+ */
142
+ const getAttributes = (folder, isExisting, hasChildren, returns) => server
143
+ .listAttributes(folder, { exists: isExisting, subscribed: returns.has('SUBSCRIBED') && folder.subscribed, hasChildren })
144
+ .map(flag => ({ type: 'ATOM', value: flag }));
145
+ const listHandler = server.getCommandHandler('LIST');
146
+ server.setCommandHandler('LIST', (connection, parsed, data, callback) => {
147
+ const args = parsed.attributes || [];
148
+ if (!isExtended(args)) {
149
+ // RFC 3501 LIST
150
+ return listHandler(connection, parsed, data, callback);
151
+ }
152
+ let request;
153
+ try {
154
+ request = parseArguments(args, connection);
155
+ }
156
+ catch (err) {
157
+ connection.sendStatus(parsed, data, 'BAD', err.message, false, 'INVALID COMMAND');
158
+ return callback();
159
+ }
160
+ const selection = [...request.selection.keys()].map(name => ({ name, ...extensions.selectionOptions[name] }));
161
+ const filters = selection.filter(option => option.match);
162
+ const includeNonExistent = selection.some(option => option.includeNonExistent);
163
+ const recursive = request.selection.has('RECURSIVEMATCH');
164
+ // RFC 5258 section 6: CHILDINFO lists the list-select-base-opt options, always quoted
165
+ const childInfo = selection.filter(option => option.type === 'base').map(option => ({ type: 'STRING', value: option.name }));
166
+ // does a mailbox satisfy the selection criteria. Without options that means an existing mailbox
167
+ // the match functions also get the subscribed names that are not mailboxes
168
+ const matches = (folder) => (includeNonExistent || exists(folder)) && filters.every(option => option.match(folder, connection));
169
+ // RFC 5258 section 3.1: SUBSCRIBED lists subscribed names, also the ones that are not mailboxes
170
+ let folders = server.folderCache;
171
+ if (includeNonExistent) {
172
+ folders = Object.assign(Object.create(null), folders, server.getSubscriptionTree());
173
+ }
174
+ // RFC 5258 section 3: a mailbox that matches several patterns is listed once
175
+ const candidates = new Set();
176
+ request.patterns.forEach((pattern) => {
177
+ server
178
+ .matchFolders(request.reference, pattern, (path) => connection.exportMailboxName(path), folders)
179
+ .forEach(folder => candidates.add(folder));
180
+ });
181
+ candidates.forEach(folder => {
182
+ const isExisting = exists(folder);
183
+ const isMatch = matches(folder);
184
+ const descendants = server.getDescendants(folder.path, folders);
185
+ const hasChildren = descendants.some(exists);
186
+ let hasChildInfo = false;
187
+ if (recursive) {
188
+ // RFC 5258 section 3.5: a matching mailbox gets CHILDINFO if a descendant matches as well.
189
+ // A mailbox that does not match is only listed for a matching descendant that is not
190
+ // listed itself (redundant CHILDINFO SHOULD be suppressed)
191
+ hasChildInfo = descendants.some(descendant => matches(descendant) && (isMatch || !candidates.has(descendant)));
192
+ }
193
+ // RFC 5258 section 3.5: without selection filters a mailbox that does not exist but has
194
+ // existing descendants is listed as "\NonExistent \HasChildren"
195
+ const listed = isMatch || hasChildInfo || (!filters.length && !isExisting && hasChildren);
196
+ if (!listed) {
197
+ return;
198
+ }
199
+ const attributes = [
200
+ getAttributes(folder, isExisting, hasChildren, request.returns),
201
+ server.getSeparator(folder),
202
+ connection.exportMailboxName(folder.path)
203
+ ];
204
+ if (hasChildInfo) {
205
+ // mbox-list-extended = "(" mbox-list-extended-item *(SP mbox-list-extended-item) ")"
206
+ attributes.push([{ type: 'STRING', value: 'CHILDINFO' }, childInfo]);
207
+ }
208
+ connection.send({
209
+ tag: '*',
210
+ command: 'LIST',
211
+ attributes
212
+ }, 'LIST ITEM', parsed, data, folder);
213
+ request.returns.forEach((value, name) => {
214
+ const option = extensions.returnOptions[name];
215
+ if (option.onItem) {
216
+ option.onItem(connection, folder, value, { matched: isMatch, exists: isExisting }, parsed, data);
217
+ }
218
+ });
219
+ });
220
+ connection.sendStatus(parsed, data, 'OK', 'Completed', false, 'LIST');
221
+ return callback();
222
+ });
223
+ }
224
+ {
225
+ const defaultExport = exports.default;
226
+ if (defaultExport && (typeof defaultExport === 'function' || typeof defaultExport === 'object')) {
227
+ for (const key of Object.keys(exports)) {
228
+ if (key !== 'default' && !(key in defaultExport)) {
229
+ defaultExport[key] = exports[key];
230
+ }
231
+ }
232
+ Object.defineProperty(defaultExport, 'default', { value: defaultExport, enumerable: false, writable: true, configurable: true });
233
+ module.exports = defaultExport;
234
+ }
235
+ }
@@ -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;
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.default = listStatusPlugin;
7
+ const list_extensions_js_1 = require("../list-extensions.js");
8
+ const status_js_1 = require("../commands/handlers/status.js");
9
+ const list_extended_js_1 = __importDefault(require("./list-extended.js"));
10
+ /**
11
+ * @help Adds LIST-STATUS [RFC5819] capability, the STATUS return option
12
+ * @help of LIST. Loads LIST-EXTENDED as well
13
+ */
14
+ function listStatusPlugin(server) {
15
+ // the STATUS return option needs the extended LIST syntax (RFC 5819 section 4)
16
+ (0, list_extended_js_1.default)(server);
17
+ server.registerCapability('LIST-STATUS');
18
+ // status-option = "STATUS" SP "(" status-att *(SP status-att) ")"
19
+ (0, list_extensions_js_1.getListExtensions)(server).returnOptions.STATUS = {
20
+ parse: (list, connection) => (0, status_js_1.parseStatusItems)(server, list, connection),
21
+ // RFC 5819 section 2: a STATUS response follows the LIST response of every selectable mailbox
22
+ // that matches the selection criteria. Mailboxes listed only for CHILDINFO or as \NonExistent
23
+ // get none. The selected mailbox is no exception (RFC 9051 section 6.3.11)
24
+ onItem: (connection, folder, items, info, parsed, data) => {
25
+ if (info.matched && info.exists) {
26
+ (0, status_js_1.sendStatus)(connection, folder.path, folder, items, parsed, data);
27
+ }
28
+ }
29
+ };
30
+ }
31
+ {
32
+ const defaultExport = exports.default;
33
+ if (defaultExport && (typeof defaultExport === 'function' || typeof defaultExport === 'object')) {
34
+ for (const key of Object.keys(exports)) {
35
+ if (key !== 'default' && !(key in defaultExport)) {
36
+ defaultExport[key] = exports[key];
37
+ }
38
+ }
39
+ Object.defineProperty(defaultExport, 'default', { value: defaultExport, enumerable: false, writable: true, configurable: true });
40
+ module.exports = defaultExport;
41
+ }
42
+ }
@@ -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;
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.default = literalminusPlugin;
4
+ /**
5
+ * @help Enables LITERAL- [RFC7888] capability
6
+ * @help Non-synchronizing literals up to 4096 octets, a larger
7
+ * @help one is dropped and answered with BAD [TOOBIG]
8
+ * @help Can not be loaded with LITERAL+
9
+ */
10
+ function literalminusPlugin(server) {
11
+ // RFC 7888 section 5: servers MUST NOT advertise both LITERAL+ and LITERAL-
12
+ if (server.capabilities['LITERAL+']) {
13
+ throw new Error('LITERAL- can not be enabled together with LITERAL+');
14
+ }
15
+ server.registerCapability('LITERAL-');
16
+ // loaded by name, LITERAL+ can not replace it any more (see IMAP4rev2)
17
+ server.impliedLiteralMinus = false;
18
+ server.literalPlus = true;
19
+ server.nonSyncLiteralLimit = 4096;
20
+ }
21
+ {
22
+ const defaultExport = exports.default;
23
+ if (defaultExport && (typeof defaultExport === 'function' || typeof defaultExport === 'object')) {
24
+ for (const key of Object.keys(exports)) {
25
+ if (key !== 'default' && !(key in defaultExport)) {
26
+ defaultExport[key] = exports[key];
27
+ }
28
+ }
29
+ Object.defineProperty(defaultExport, 'default', { value: defaultExport, enumerable: false, writable: true, configurable: true });
30
+ module.exports = defaultExport;
31
+ }
32
+ }
@@ -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;
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.default = literalplusPlugin;
4
+ /**
5
+ * @help Enables LITERAL+ [RFC7888] capability
6
+ * @help Can not be loaded with LITERAL-
7
+ */
8
+ function literalplusPlugin(server) {
9
+ // RFC 7888 section 5: servers MUST NOT advertise both LITERAL+ and LITERAL-. IMAP4rev2 adds LITERAL- only
10
+ // when LITERAL+ is not loaded, LITERAL+ replaces it then, as it allows more (RFC 9051 section 4.3)
11
+ if (server.capabilities['LITERAL-'] && !server.impliedLiteralMinus) {
12
+ throw new Error('LITERAL+ can not be enabled together with LITERAL-');
13
+ }
14
+ delete server.capabilities['LITERAL-'];
15
+ server.registerCapability('LITERAL+');
16
+ server.literalPlus = true;
17
+ server.nonSyncLiteralLimit = Infinity;
18
+ }
19
+ {
20
+ const defaultExport = exports.default;
21
+ if (defaultExport && (typeof defaultExport === 'function' || typeof defaultExport === 'object')) {
22
+ for (const key of Object.keys(exports)) {
23
+ if (key !== 'default' && !(key in defaultExport)) {
24
+ defaultExport[key] = exports[key];
25
+ }
26
+ }
27
+ Object.defineProperty(defaultExport, 'default', { value: defaultExport, enumerable: false, writable: true, configurable: true });
28
+ module.exports = defaultExport;
29
+ }
30
+ }
@@ -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,54 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.default = logindisabledPlugin;
4
+ /**
5
+ * @help Disables LOGIN support for unencrypted connections
6
+ */
7
+ function logindisabledPlugin(server) {
8
+ server.registerCapability('LOGINDISABLED', (connection) => {
9
+ return !connection.secureConnection && connection.state === 'Not Authenticated';
10
+ });
11
+ // Retrieve actual LOGIN handler
12
+ // Will be run if conditions are met
13
+ const oldHandler = server.getCommandHandler('LOGIN');
14
+ // Override LOGIN
15
+ server.setCommandHandler('LOGIN', (connection, parsed, data, callback) => {
16
+ // If the connection is unsecure, do not allow LOGIN
17
+ if (!connection.secureConnection) {
18
+ connection.send({
19
+ tag: parsed.tag,
20
+ command: 'NO',
21
+ attributes: [
22
+ {
23
+ type: 'SECTION',
24
+ section: [
25
+ {
26
+ type: 'ATOM',
27
+ value: 'PRIVACYREQUIRED'
28
+ }
29
+ ]
30
+ },
31
+ {
32
+ type: 'TEXT',
33
+ value: 'Run STARTTLS first'
34
+ }
35
+ ]
36
+ }, 'LOGIN FAILED', parsed, data);
37
+ return callback();
38
+ }
39
+ // Reroute command to actual LOGIN handler
40
+ oldHandler(connection, parsed, data, callback);
41
+ });
42
+ }
43
+ {
44
+ const defaultExport = exports.default;
45
+ if (defaultExport && (typeof defaultExport === 'function' || typeof defaultExport === 'object')) {
46
+ for (const key of Object.keys(exports)) {
47
+ if (key !== 'default' && !(key in defaultExport)) {
48
+ defaultExport[key] = exports[key];
49
+ }
50
+ }
51
+ Object.defineProperty(defaultExport, 'default', { value: defaultExport, enumerable: false, writable: true, configurable: true });
52
+ module.exports = defaultExport;
53
+ }
54
+ }
@@ -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 };