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,8 +1,5 @@
1
- 'use strict';
2
-
3
- const { copyToMailbox } = require('../commands/copy');
4
- const { states } = require('../command-states');
5
-
1
+ import { copyToMailbox } from '../commands/copy.js';
2
+ import { states } from '../command-states.js';
6
3
  /**
7
4
  * @help Adds MOVE [RFC6851] capability
8
5
  *
@@ -12,9 +9,8 @@ const { states } = require('../command-states');
12
9
  * - MOVE
13
10
  * - UID MOVE
14
11
  */
15
- module.exports = function (server) {
12
+ export default function movePlugin(server) {
16
13
  server.registerCapability('MOVE');
17
-
18
14
  const moveHandler = function (uidMode, connection, parsed, data, callback) {
19
15
  function uidify(str) {
20
16
  if (uidMode) {
@@ -22,89 +18,64 @@ module.exports = function (server) {
22
18
  }
23
19
  return str;
24
20
  }
25
-
26
- if (
27
- !parsed.attributes ||
21
+ if (!parsed.attributes ||
28
22
  parsed.attributes.length !== 2 ||
29
23
  !parsed.attributes[0] ||
30
24
  ['ATOM', 'SEQUENCE'].indexOf(parsed.attributes[0].type) < 0 ||
31
25
  !parsed.attributes[1] ||
32
- ['ATOM', 'STRING', 'LITERAL'].indexOf(parsed.attributes[1].type) < 0
33
- ) {
34
- connection.send(
35
- {
36
- tag: parsed.tag,
37
- command: 'BAD',
38
- attributes: [
39
- {
40
- type: 'TEXT',
41
- value: uidify('MOVE expects sequence set and a mailbox name')
42
- }
43
- ]
44
- },
45
- 'INVALID COMMAND',
46
- parsed,
47
- data
48
- );
26
+ ['ATOM', 'STRING', 'LITERAL'].indexOf(parsed.attributes[1].type) < 0) {
27
+ connection.send({
28
+ tag: parsed.tag,
29
+ command: 'BAD',
30
+ attributes: [
31
+ {
32
+ type: 'TEXT',
33
+ value: uidify('MOVE expects sequence set and a mailbox name')
34
+ }
35
+ ]
36
+ }, 'INVALID COMMAND', parsed, data);
49
37
  return callback();
50
38
  }
51
-
52
39
  // MOVE expunges messages from the source mailbox, which is not allowed after EXAMINE
53
40
  if (connection.refuseReadOnly(parsed, data, uidify('MOVE FAIL'))) {
54
41
  return callback();
55
42
  }
56
-
57
43
  const result = copyToMailbox(connection, parsed, data, uidMode, uidify('MOVE FAIL'), true);
58
44
  if (!result) {
59
45
  return callback();
60
46
  }
61
-
62
47
  // Hook for UIDPLUS to generate the untagged COPYUID response (that wants
63
48
  // to happen prior to the EXPUNGEs). If the UIDPLUS extension is not
64
49
  // active, this will not happen.
65
- connection.send(
66
- {
67
- tag: '*',
68
- command: 'OK',
69
- attributes: [
70
- {
71
- type: 'TEXT',
72
- value: 'Copied'
73
- }
74
- ],
75
- skipResponse: true
76
- },
77
- uidify('MOVE COPYUID'),
78
- parsed,
79
- data,
80
- result
81
- );
82
-
50
+ connection.send({
51
+ tag: '*',
52
+ command: 'OK',
53
+ attributes: [
54
+ {
55
+ type: 'TEXT',
56
+ value: 'Copied'
57
+ }
58
+ ],
59
+ skipResponse: true
60
+ }, uidify('MOVE COPYUID'), parsed, data, result);
83
61
  // Expunge the messages from the source folder. When moving into the selected mailbox,
84
62
  // the copies were already announced with EXISTS responses
85
63
  connection.expungeSpecificMessages(connection.selectedMailbox, result.messages, false, true, !!parsed.highestFirst);
86
-
87
- connection.send(
88
- {
89
- tag: parsed.tag,
90
- command: 'OK',
91
- attributes: [
92
- {
93
- type: 'TEXT',
94
- value: 'Done'
95
- }
96
- ]
97
- },
98
- uidify('MOVE OK'),
99
- parsed,
100
- data
101
- );
64
+ connection.send({
65
+ tag: parsed.tag,
66
+ command: 'OK',
67
+ attributes: [
68
+ {
69
+ type: 'TEXT',
70
+ value: 'Done'
71
+ }
72
+ ]
73
+ }, uidify('MOVE OK'), parsed, data);
102
74
  callback();
103
75
  };
104
-
105
76
  // RFC 6851 section 3.1: valid only in the selected state, the second argument is the target mailbox
106
77
  // MOVE takes a sequence set of message numbers, UID MOVE of UIDs
107
78
  const options = { states: states.SELECTED, mailboxArguments: [1] };
108
79
  server.setCommandHandler('MOVE', moveHandler.bind(null, false), Object.assign({ sequenceSet: 0 }, options));
109
80
  server.setCommandHandler('UID MOVE', moveHandler.bind(null, true), options);
110
- };
81
+ }
@@ -0,0 +1,12 @@
1
+ import type { IMAPServer } from '../types.js';
2
+ /**
3
+ * @help Adds MULTIAPPEND [RFC3502] capability
4
+ * @help With UIDPLUS, APPENDUID lists the UIDs of all messages
5
+ *
6
+ * MULTIAPPEND: https://www.rfc-editor.org/rfc/rfc3502
7
+ *
8
+ * APPEND takes several messages, which are appended all or nothing. A zero-length
9
+ * message literal cancels the whole APPEND with NO. With UIDPLUS, APPENDUID lists the
10
+ * UIDs of all appended messages as a UID set.
11
+ */
12
+ export default function multiappendPlugin(server: IMAPServer): void;
@@ -1,5 +1,3 @@
1
- 'use strict';
2
-
3
1
  /**
4
2
  * @help Adds MULTIAPPEND [RFC3502] capability
5
3
  * @help With UIDPLUS, APPENDUID lists the UIDs of all messages
@@ -10,10 +8,9 @@
10
8
  * message literal cancels the whole APPEND with NO. With UIDPLUS, APPENDUID lists the
11
9
  * UIDs of all appended messages as a UID set.
12
10
  */
13
- module.exports = function (server) {
11
+ export default function multiappendPlugin(server) {
14
12
  server.registerCapability('MULTIAPPEND');
15
13
  server.multiAppend = true;
16
-
17
14
  // RFC 3502 section 6.3.11: "A zero-length message literal argument is an error, and MUST return a NO.
18
15
  // This can be used to cancel the append." Nothing is stored when any message fails
19
16
  server.appendChecks.push((connection, mailbox, messages, options) => {
@@ -23,4 +20,4 @@ module.exports = function (server) {
23
20
  }
24
21
  return false;
25
22
  });
26
- };
23
+ }
@@ -0,0 +1,6 @@
1
+ /**
2
+ * @help Adds MULTISEARCH [RFC7377] capability, loads ESEARCH as well
3
+ * @help ESEARCH IN (mailboxes "a" subtree "b" personal ...) RETURN (...) searches several mailboxes, also in the authenticated state
4
+ */
5
+ import type { IMAPServer } from '../types.js';
6
+ export default function multisearchPlugin(server: IMAPServer): void;
@@ -1,17 +1,13 @@
1
- 'use strict';
2
-
3
1
  /**
4
2
  * @help Adds MULTISEARCH [RFC7377] capability, loads ESEARCH as well
5
3
  * @help ESEARCH IN (mailboxes "a" subtree "b" personal ...) RETURN (...) searches several mailboxes, also in the authenticated state
6
4
  */
7
-
8
- const esearch = require('./esearch');
9
- const { buildEsearchResponse, selectReturned } = require('../esearch');
10
- const makeSearch = require('../commands/handlers/search');
11
- const { badError, criteriaValues, sendSearchError } = makeSearch;
12
- const { states } = require('../command-states');
13
- const { isAtom, isAstring } = require('../arguments');
14
-
5
+ import esearch from './esearch.js';
6
+ import { buildEsearchResponse, selectReturned } from '../esearch.js';
7
+ import makeSearch from '../commands/handlers/search.js';
8
+ import { badError, criteriaValues, sendSearchError } from '../commands/handlers/search.js';
9
+ import { states } from '../command-states.js';
10
+ import { isAtom, isAstring } from '../arguments.js';
15
11
  // RFC 5465 section 6 filter-mailboxes, as changed by RFC 7377 section 2.2. The value tells if a mailbox name
16
12
  // or a list of names follows (one-or-more-mailbox)
17
13
  const FILTERS = {
@@ -23,7 +19,6 @@ const FILTERS = {
23
19
  'SUBTREE-ONE': true,
24
20
  MAILBOXES: true
25
21
  };
26
-
27
22
  /**
28
23
  * Parses the source options (RFC 7377 section 4): esearch-source-opts = "IN" SP "(" source-mbox [SP "(" scope-options ")"] ")",
29
24
  * source-mbox = filter-mailboxes *(SP filter-mailboxes)
@@ -62,43 +57,37 @@ function parseSources(connection, list) {
62
57
  }
63
58
  return sources;
64
59
  }
65
-
66
60
  /**
67
61
  * Parses the arguments of ESEARCH (RFC 7377 section 4): esearch = "ESEARCH" [SP esearch-source-opts] [SP search-return-opts] SP search-program
68
62
  *
69
63
  * @return {Object} `{ sources, attributes }`, sources is null when IN was not used, attributes hold the result options and the search program
70
64
  */
71
65
  function splitArguments(connection, attributes) {
72
- attributes = attributes || [];
73
- if (isAtom(attributes[0], 'IN')) {
74
- return { sources: parseSources(connection, attributes[1]), attributes: attributes.slice(2) };
66
+ const args = attributes || [];
67
+ if (isAtom(args[0], 'IN')) {
68
+ return { sources: parseSources(connection, args[1]), attributes: args.slice(2) };
75
69
  }
76
- return { sources: null, attributes };
70
+ return { sources: null, attributes: args };
77
71
  }
78
-
79
- module.exports = function (server) {
72
+ export default function multisearchPlugin(server) {
80
73
  // RFC 7377 section 2.1: the ESEARCH command answers with ESEARCH responses (RFC 4731)
81
74
  esearch(server);
82
-
83
75
  server.registerCapability('MULTISEARCH');
84
-
85
- const isSelectable = mailbox => !!mailbox && mailbox.flags.indexOf('\\Noselect') < 0;
86
-
76
+ const isSelectable = (mailbox) => !!mailbox && mailbox.flags.indexOf('\\Noselect') < 0;
87
77
  // every mailbox, INBOX first
88
78
  const allMailboxes = () => {
89
79
  const list = Object.keys(server.folderCache).map(path => server.folderCache[path]);
90
80
  return list.sort((a, b) => (a.path === 'INBOX' ? -1 : b.path === 'INBOX' ? 1 : 0));
91
81
  };
92
-
93
82
  // a mailbox and the mailboxes below it, `depth` levels down (RFC 7377 section 2.2). Visited
94
83
  // mailboxes are not walked again, which also defends against loops in the hierarchy
95
84
  const walkSubtree = (mailbox, depth, visit) => {
96
85
  if (!visit(mailbox) || !depth || !mailbox.folders) {
97
86
  return;
98
87
  }
99
- Object.keys(mailbox.folders).forEach(name => walkSubtree(mailbox.folders[name], depth - 1, visit));
88
+ const folders = mailbox.folders;
89
+ Object.keys(folders).forEach(name => walkSubtree(folders[name], depth - 1, visit));
100
90
  };
101
-
102
91
  /**
103
92
  * Resolves the source options to the mailboxes to search, in the order they were given. Mailboxes
104
93
  * that do not exist, are not selectable or that the user may not search (server.searchAccessChecks, ACL)
@@ -139,12 +128,12 @@ module.exports = function (server) {
139
128
  .forEach(mailbox => add(mailbox, false));
140
129
  break;
141
130
  case 'MAILBOXES':
142
- source.names.forEach(name => add(server.getMailbox(name), true));
131
+ source.names.forEach((name) => add(server.getMailbox(name), true));
143
132
  break;
144
133
  default: {
145
134
  const depth = source.filter === 'SUBTREE' ? Infinity : 1;
146
135
  const visited = new Set();
147
- source.names.forEach(name => {
136
+ source.names.forEach((name) => {
148
137
  const mailbox = server.getMailbox(name);
149
138
  if (mailbox) {
150
139
  walkSubtree(mailbox, depth, child => {
@@ -163,13 +152,11 @@ module.exports = function (server) {
163
152
  });
164
153
  return result;
165
154
  };
166
-
167
155
  const handler = (connection, parsed, data, callback) => {
168
156
  const fail = (status, text) => {
169
157
  connection.sendStatus(parsed, data, status, text, false, 'ESEARCH FAILED');
170
158
  return callback();
171
159
  };
172
-
173
160
  let sources;
174
161
  let options = new Map();
175
162
  let params;
@@ -185,10 +172,10 @@ module.exports = function (server) {
185
172
  throw badError('ESEARCH expects search criteria');
186
173
  }
187
174
  params = criteriaValues(attributes);
188
- } catch (E) {
175
+ }
176
+ catch (E) {
189
177
  return fail('BAD', E.message);
190
178
  }
191
-
192
179
  const onlySelected = sources.every(source => source.filter === 'SELECTED');
193
180
  // RFC 7377 section 2.2: "selected" needs the selected state
194
181
  if (sources.some(source => source.filter === 'SELECTED') && !connection.selectedMailbox) {
@@ -202,12 +189,11 @@ module.exports = function (server) {
202
189
  if (options.has('UPDATE') && !connection.selectedMailbox) {
203
190
  return fail('BAD', 'UPDATE needs a selected mailbox');
204
191
  }
205
-
206
192
  const mailboxes = resolveMailboxes(connection, sources);
207
193
  const results = [];
208
194
  try {
209
195
  // the criteria are checked even when no mailbox is searched
210
- const searchMailbox = mailbox => {
196
+ const searchMailbox = (mailbox) => {
211
197
  if (mailbox && mailbox === connection.selectedMailbox) {
212
198
  return makeSearch(connection, connection.getSessionMessages(), params);
213
199
  }
@@ -218,11 +204,11 @@ module.exports = function (server) {
218
204
  searchMailbox(connection.selectedMailbox || null);
219
205
  }
220
206
  mailboxes.forEach(mailbox => results.push({ mailbox, result: searchMailbox(mailbox) }));
221
- } catch (E) {
207
+ }
208
+ catch (E) {
222
209
  sendSearchError(connection, parsed, data, E, 'ESEARCH FAILED');
223
210
  return callback();
224
211
  }
225
-
226
212
  const silent = server.isSilentReturn(options);
227
213
  results.forEach(({ mailbox, result }) => {
228
214
  // RFC 7377 section 2.1: one ESEARCH response per mailbox with matches, always with UIDs and the
@@ -230,15 +216,8 @@ module.exports = function (server) {
230
216
  if (!result.list.length || silent) {
231
217
  return;
232
218
  }
233
- connection.send(
234
- buildEsearchResponse(parsed.tag, true, result, options, mailbox),
235
- 'ESEARCH',
236
- parsed,
237
- data,
238
- Object.assign({}, result, { list: selectReturned(result.list, options) })
239
- );
219
+ connection.send(buildEsearchResponse(parsed.tag, true, result, options, mailbox), 'ESEARCH', parsed, data, Object.assign({}, result, { list: selectReturned(result.list, options) }));
240
220
  });
241
-
242
221
  const selected = results.find(entry => entry.mailbox === connection.selectedMailbox);
243
222
  if (options.has('SAVE')) {
244
223
  // SEARCHRES stores it once the tagged response tells if the command succeeded
@@ -247,16 +226,13 @@ module.exports = function (server) {
247
226
  if (options.has('UPDATE') && selected) {
248
227
  server.addSearchContext(connection, parsed, data, selected.result, true, selected.mailbox);
249
228
  }
250
-
251
229
  connection.sendStatus(parsed, data, 'OK', 'ESEARCH completed', false, 'ESEARCH');
252
230
  return callback();
253
231
  };
254
-
255
232
  // RFC 7377 section 4: command-auth =/ esearch, command-select =/ esearch
256
233
  server.setCommandHandler('ESEARCH', handler, { states: states.AUTHENTICATED, searchCriteria: 0 });
257
-
258
234
  // RFC 3501 section 5.5: sequence numbers can only be in the search program
259
- server.connectionHandlers.push(connection => {
235
+ server.connectionHandlers.push((connection) => {
260
236
  // the source options are taken off here, the ESEARCH plugin takes off the result options
261
237
  const usesSequenceNumbers = connection.usesSequenceNumbers;
262
238
  connection.usesSequenceNumbers = function (parsed) {
@@ -266,4 +242,4 @@ module.exports = function (server) {
266
242
  return usesSequenceNumbers.call(this, parsed);
267
243
  };
268
244
  });
269
- };
245
+ }
@@ -0,0 +1,5 @@
1
+ import type { IMAPServer } from '../types.js';
2
+ /**
3
+ * @help Adds NAMESPACE [RFC2342] capability
4
+ */
5
+ export default function namespacePlugin(server: IMAPServer): void;
@@ -0,0 +1,42 @@
1
+ import { states } from '../command-states.js';
2
+ /**
3
+ * @help Adds NAMESPACE [RFC2342] capability
4
+ */
5
+ export default function namespacePlugin(server) {
6
+ // Register capability, always usable
7
+ server.registerCapability('NAMESPACE');
8
+ // Add NAMESPACE command
9
+ server.setCommandHandler('NAMESPACE', (connection, parsed, data, callback) => {
10
+ const list = {
11
+ personal: [],
12
+ user: [],
13
+ shared: []
14
+ };
15
+ Object.keys(server.storage).forEach(key => {
16
+ const ns = server.storage[key];
17
+ // INBOX is a mailbox, not a namespace
18
+ if (key === 'INBOX' || !ns) {
19
+ return;
20
+ }
21
+ if (Object.hasOwn(list, ns.type)) {
22
+ list[ns.type].push([connection.exportMailboxName(key), ns.separator]);
23
+ }
24
+ });
25
+ connection.send({
26
+ tag: '*',
27
+ command: 'NAMESPACE',
28
+ attributes: [list.personal.length ? list.personal : null, list.user.length ? list.user : null, list.shared.length ? list.shared : null]
29
+ }, 'NAMESPACE', parsed, data, list);
30
+ connection.send({
31
+ tag: parsed.tag,
32
+ command: 'OK',
33
+ attributes: [
34
+ {
35
+ type: 'TEXT',
36
+ value: 'Completed'
37
+ }
38
+ ]
39
+ }, 'NAMESPACE', parsed, data, list);
40
+ return callback();
41
+ }, { states: states.AUTHENTICATED, noArguments: true });
42
+ }
@@ -0,0 +1,2 @@
1
+ import type { IMAPServer } from '../types.js';
2
+ export default function notifyPlugin(server: IMAPServer): void;