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