imapkit 4.0.3 → 4.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (485) hide show
  1. package/README.md +32 -19
  2. package/bin/imapkit.js +12 -16
  3. package/dist/cjs/addressparser.d.ts +21 -0
  4. package/dist/cjs/addressparser.js +277 -0
  5. package/dist/cjs/arguments.d.ts +31 -0
  6. package/{lib → dist/cjs}/arguments.js +9 -21
  7. package/dist/cjs/bodystructure.d.ts +25 -0
  8. package/dist/cjs/bodystructure.js +150 -0
  9. package/dist/cjs/cert.d.ts +2 -0
  10. package/dist/cjs/cert.js +7 -0
  11. package/dist/cjs/command-states.d.ts +36 -0
  12. package/dist/cjs/command-states.js +102 -0
  13. package/dist/cjs/commands/append.d.ts +88 -0
  14. package/dist/cjs/commands/append.js +299 -0
  15. package/dist/cjs/commands/capability.d.ts +2 -0
  16. package/dist/cjs/commands/capability.js +44 -0
  17. package/dist/cjs/commands/check.d.ts +2 -0
  18. package/dist/cjs/commands/check.js +28 -0
  19. package/dist/cjs/commands/close.d.ts +2 -0
  20. package/dist/cjs/commands/close.js +35 -0
  21. package/dist/cjs/commands/copy.d.ts +30 -0
  22. package/dist/cjs/commands/copy.js +107 -0
  23. package/dist/cjs/commands/create.d.ts +2 -0
  24. package/dist/cjs/commands/create.js +53 -0
  25. package/dist/cjs/commands/delete.d.ts +2 -0
  26. package/dist/cjs/commands/delete.js +63 -0
  27. package/dist/cjs/commands/examine.d.ts +2 -0
  28. package/dist/cjs/commands/examine.js +19 -0
  29. package/dist/cjs/commands/expunge.d.ts +2 -0
  30. package/dist/cjs/commands/expunge.js +32 -0
  31. package/dist/cjs/commands/fetch.d.ts +23 -0
  32. package/dist/cjs/commands/fetch.js +208 -0
  33. package/dist/cjs/commands/handlers/fetch.d.ts +12 -0
  34. package/dist/cjs/commands/handlers/fetch.js +195 -0
  35. package/dist/cjs/commands/handlers/flags.d.ts +17 -0
  36. package/dist/cjs/commands/handlers/flags.js +39 -0
  37. package/dist/cjs/commands/handlers/search.d.ts +85 -0
  38. package/dist/cjs/commands/handlers/search.js +504 -0
  39. package/dist/cjs/commands/handlers/status.d.ts +34 -0
  40. package/dist/cjs/commands/handlers/status.js +81 -0
  41. package/dist/cjs/commands/handlers/store.d.ts +3 -0
  42. package/dist/cjs/commands/handlers/store.js +117 -0
  43. package/dist/cjs/commands/index.d.ts +2 -0
  44. package/dist/cjs/commands/index.js +61 -0
  45. package/dist/cjs/commands/list.d.ts +2 -0
  46. package/dist/cjs/commands/list.js +86 -0
  47. package/dist/cjs/commands/login.d.ts +2 -0
  48. package/dist/cjs/commands/login.js +62 -0
  49. package/dist/cjs/commands/logout.d.ts +2 -0
  50. package/dist/cjs/commands/logout.js +40 -0
  51. package/dist/cjs/commands/lsub.d.ts +2 -0
  52. package/dist/cjs/commands/lsub.js +79 -0
  53. package/dist/cjs/commands/noop.d.ts +2 -0
  54. package/dist/cjs/commands/noop.js +28 -0
  55. package/dist/cjs/commands/rename.d.ts +2 -0
  56. package/dist/cjs/commands/rename.js +98 -0
  57. package/dist/cjs/commands/search.d.ts +10 -0
  58. package/dist/cjs/commands/search.js +71 -0
  59. package/dist/cjs/commands/select.d.ts +19 -0
  60. package/dist/cjs/commands/select.js +230 -0
  61. package/dist/cjs/commands/status.d.ts +2 -0
  62. package/dist/cjs/commands/status.js +57 -0
  63. package/dist/cjs/commands/store.d.ts +10 -0
  64. package/dist/cjs/commands/store.js +134 -0
  65. package/dist/cjs/commands/subscribe.d.ts +2 -0
  66. package/dist/cjs/commands/subscribe.js +51 -0
  67. package/dist/cjs/commands/uid-copy.d.ts +2 -0
  68. package/dist/cjs/commands/uid-copy.js +19 -0
  69. package/dist/cjs/commands/uid-fetch.d.ts +3 -0
  70. package/dist/cjs/commands/uid-fetch.js +17 -0
  71. package/dist/cjs/commands/uid-search.d.ts +3 -0
  72. package/dist/cjs/commands/uid-search.js +17 -0
  73. package/dist/cjs/commands/uid-store.d.ts +3 -0
  74. package/dist/cjs/commands/uid-store.js +17 -0
  75. package/dist/cjs/commands/unsubscribe.d.ts +2 -0
  76. package/dist/cjs/commands/unsubscribe.js +50 -0
  77. package/dist/cjs/dates.d.ts +64 -0
  78. package/dist/cjs/dates.js +124 -0
  79. package/dist/cjs/deflate-layer.d.ts +83 -0
  80. package/dist/cjs/deflate-layer.js +232 -0
  81. package/dist/cjs/encoded-words.d.ts +15 -0
  82. package/dist/cjs/encoded-words.js +85 -0
  83. package/dist/cjs/envelope.d.ts +33 -0
  84. package/dist/cjs/envelope.js +86 -0
  85. package/dist/cjs/esearch.d.ts +96 -0
  86. package/dist/cjs/esearch.js +190 -0
  87. package/dist/cjs/framing.d.ts +66 -0
  88. package/{lib → dist/cjs}/framing.js +9 -26
  89. package/dist/cjs/index.d.ts +9 -0
  90. package/dist/cjs/index.js +56 -0
  91. package/dist/cjs/list-extensions.d.ts +50 -0
  92. package/dist/cjs/list-extensions.js +35 -0
  93. package/dist/cjs/load-plugins.d.ts +21 -0
  94. package/dist/cjs/load-plugins.js +89 -0
  95. package/dist/cjs/mailbox-name.d.ts +26 -0
  96. package/dist/cjs/mailbox-name.js +127 -0
  97. package/dist/cjs/mimeparser.d.ts +137 -0
  98. package/dist/cjs/mimeparser.js +727 -0
  99. package/dist/cjs/mock-client.d.ts +39 -0
  100. package/dist/cjs/mock-client.js +236 -0
  101. package/dist/cjs/numbers.d.ts +28 -0
  102. package/dist/cjs/numbers.js +52 -0
  103. package/dist/cjs/package.json +3 -0
  104. package/dist/cjs/plugins/acl.d.ts +2 -0
  105. package/dist/cjs/plugins/acl.js +888 -0
  106. package/dist/cjs/plugins/appendlimit.d.ts +16 -0
  107. package/dist/cjs/plugins/appendlimit.js +87 -0
  108. package/dist/cjs/plugins/auth-plain.d.ts +2 -0
  109. package/dist/cjs/plugins/auth-plain.js +89 -0
  110. package/dist/cjs/plugins/binary.d.ts +30 -0
  111. package/dist/cjs/plugins/binary.js +247 -0
  112. package/dist/cjs/plugins/catenate.d.ts +14 -0
  113. package/dist/cjs/plugins/catenate.js +250 -0
  114. package/dist/cjs/plugins/compress.d.ts +7 -0
  115. package/dist/cjs/plugins/compress.js +79 -0
  116. package/dist/cjs/plugins/condstore.d.ts +5 -0
  117. package/dist/cjs/plugins/condstore.js +492 -0
  118. package/dist/cjs/plugins/context-search.d.ts +8 -0
  119. package/dist/cjs/plugins/context-search.js +304 -0
  120. package/dist/cjs/plugins/context-sort.d.ts +6 -0
  121. package/dist/cjs/plugins/context-sort.js +32 -0
  122. package/dist/cjs/plugins/create-special-use.d.ts +7 -0
  123. package/dist/cjs/plugins/create-special-use.js +101 -0
  124. package/dist/cjs/plugins/enable.d.ts +23 -0
  125. package/dist/cjs/plugins/enable.js +127 -0
  126. package/dist/cjs/plugins/esearch.d.ts +6 -0
  127. package/dist/cjs/plugins/esearch.js +142 -0
  128. package/dist/cjs/plugins/esort.d.ts +6 -0
  129. package/dist/cjs/plugins/esort.js +60 -0
  130. package/dist/cjs/plugins/id.d.ts +5 -0
  131. package/dist/cjs/plugins/id.js +123 -0
  132. package/dist/cjs/plugins/idle.d.ts +5 -0
  133. package/dist/cjs/plugins/idle.js +85 -0
  134. package/dist/cjs/plugins/imap4rev2.d.ts +6 -0
  135. package/dist/cjs/plugins/imap4rev2.js +184 -0
  136. package/dist/cjs/plugins/index.d.ts +2 -0
  137. package/dist/cjs/plugins/index.js +119 -0
  138. package/dist/cjs/plugins/list-extended.d.ts +2 -0
  139. package/dist/cjs/plugins/list-extended.js +235 -0
  140. package/dist/cjs/plugins/list-status.d.ts +6 -0
  141. package/dist/cjs/plugins/list-status.js +42 -0
  142. package/dist/cjs/plugins/literalminus.d.ts +8 -0
  143. package/dist/cjs/plugins/literalminus.js +32 -0
  144. package/dist/cjs/plugins/literalplus.d.ts +6 -0
  145. package/dist/cjs/plugins/literalplus.js +30 -0
  146. package/dist/cjs/plugins/logindisabled.d.ts +5 -0
  147. package/dist/cjs/plugins/logindisabled.js +54 -0
  148. package/dist/cjs/plugins/messagelimit.d.ts +19 -0
  149. package/dist/cjs/plugins/messagelimit.js +227 -0
  150. package/dist/cjs/plugins/metadata-server.d.ts +7 -0
  151. package/dist/cjs/plugins/metadata-server.js +24 -0
  152. package/dist/cjs/plugins/metadata.d.ts +11 -0
  153. package/dist/cjs/plugins/metadata.js +436 -0
  154. package/dist/cjs/plugins/move.d.ts +11 -0
  155. package/dist/cjs/plugins/move.js +96 -0
  156. package/dist/cjs/plugins/multiappend.d.ts +12 -0
  157. package/dist/cjs/plugins/multiappend.js +38 -0
  158. package/dist/cjs/plugins/multisearch.d.ts +6 -0
  159. package/dist/cjs/plugins/multisearch.js +263 -0
  160. package/dist/cjs/plugins/namespace.d.ts +5 -0
  161. package/dist/cjs/plugins/namespace.js +57 -0
  162. package/dist/cjs/plugins/notify.d.ts +2 -0
  163. package/dist/cjs/plugins/notify.js +628 -0
  164. package/dist/cjs/plugins/oauthbearer.d.ts +32 -0
  165. package/dist/cjs/plugins/oauthbearer.js +202 -0
  166. package/dist/cjs/plugins/objectid.d.ts +23 -0
  167. package/dist/cjs/plugins/objectid.js +221 -0
  168. package/dist/cjs/plugins/partial.d.ts +6 -0
  169. package/dist/cjs/plugins/partial.js +78 -0
  170. package/dist/cjs/plugins/preview.d.ts +31 -0
  171. package/dist/cjs/plugins/preview.js +378 -0
  172. package/dist/cjs/plugins/qresync.d.ts +11 -0
  173. package/dist/cjs/plugins/qresync.js +473 -0
  174. package/dist/cjs/plugins/quota.d.ts +18 -0
  175. package/dist/cjs/plugins/quota.js +254 -0
  176. package/dist/cjs/plugins/replace.d.ts +14 -0
  177. package/dist/cjs/plugins/replace.js +130 -0
  178. package/dist/cjs/plugins/sasl-ir.d.ts +5 -0
  179. package/dist/cjs/plugins/sasl-ir.js +24 -0
  180. package/dist/cjs/plugins/savedate.d.ts +17 -0
  181. package/dist/cjs/plugins/savedate.js +64 -0
  182. package/dist/cjs/plugins/savelimit.d.ts +10 -0
  183. package/dist/cjs/plugins/savelimit.js +30 -0
  184. package/dist/cjs/plugins/searchres.d.ts +6 -0
  185. package/dist/cjs/plugins/searchres.js +91 -0
  186. package/dist/cjs/plugins/sort-display.d.ts +11 -0
  187. package/dist/cjs/plugins/sort-display.js +37 -0
  188. package/dist/cjs/plugins/sort.d.ts +11 -0
  189. package/dist/cjs/plugins/sort.js +125 -0
  190. package/dist/cjs/plugins/special-use.d.ts +10 -0
  191. package/dist/cjs/plugins/special-use.js +95 -0
  192. package/dist/cjs/plugins/starttls.d.ts +5 -0
  193. package/dist/cjs/plugins/starttls.js +55 -0
  194. package/dist/cjs/plugins/status-size.d.ts +7 -0
  195. package/dist/cjs/plugins/status-size.js +30 -0
  196. package/dist/cjs/plugins/thread-orderedsubject.d.ts +11 -0
  197. package/dist/cjs/plugins/thread-orderedsubject.js +28 -0
  198. package/dist/cjs/plugins/thread-references.d.ts +11 -0
  199. package/dist/cjs/plugins/thread-references.js +28 -0
  200. package/dist/cjs/plugins/uidonly.d.ts +15 -0
  201. package/dist/cjs/plugins/uidonly.js +126 -0
  202. package/dist/cjs/plugins/uidplus.d.ts +15 -0
  203. package/dist/cjs/plugins/uidplus.js +119 -0
  204. package/dist/cjs/plugins/unauthenticate.d.ts +7 -0
  205. package/dist/cjs/plugins/unauthenticate.js +32 -0
  206. package/dist/cjs/plugins/unselect.d.ts +5 -0
  207. package/dist/cjs/plugins/unselect.js +36 -0
  208. package/dist/cjs/plugins/utf8-accept.d.ts +6 -0
  209. package/dist/cjs/plugins/utf8-accept.js +72 -0
  210. package/dist/cjs/plugins/x-gm-ext-1.d.ts +26 -0
  211. package/dist/cjs/plugins/x-gm-ext-1.js +422 -0
  212. package/dist/cjs/plugins/xoauth2.d.ts +2 -0
  213. package/dist/cjs/plugins/xoauth2.js +155 -0
  214. package/dist/cjs/plugins/xtoybird.d.ts +2 -0
  215. package/dist/cjs/plugins/xtoybird.js +236 -0
  216. package/dist/cjs/server.d.ts +876 -0
  217. package/dist/cjs/server.js +2597 -0
  218. package/dist/cjs/smtp-listener.d.ts +13 -0
  219. package/dist/cjs/smtp-listener.js +47 -0
  220. package/dist/cjs/sorting.d.ts +77 -0
  221. package/dist/cjs/sorting.js +290 -0
  222. package/dist/cjs/threading.d.ts +30 -0
  223. package/dist/cjs/threading.js +318 -0
  224. package/dist/cjs/types.d.ts +327 -0
  225. package/dist/cjs/types.js +3 -0
  226. package/dist/cjs/utf8-session.d.ts +17 -0
  227. package/dist/cjs/utf8-session.js +148 -0
  228. package/dist/cjs/vanished.d.ts +21 -0
  229. package/dist/cjs/vanished.js +55 -0
  230. package/dist/esm/addressparser.d.ts +21 -0
  231. package/{lib → dist/esm}/addressparser.js +102 -123
  232. package/dist/esm/arguments.d.ts +31 -0
  233. package/dist/esm/arguments.js +96 -0
  234. package/dist/esm/bodystructure.d.ts +25 -0
  235. package/{lib → dist/esm}/bodystructure.js +17 -33
  236. package/dist/esm/cert.d.ts +2 -0
  237. package/dist/esm/cert.js +4 -0
  238. package/dist/esm/command-states.d.ts +36 -0
  239. package/{lib → dist/esm}/command-states.js +4 -16
  240. package/dist/esm/commands/append.d.ts +88 -0
  241. package/{lib → dist/esm}/commands/append.js +47 -85
  242. package/dist/esm/commands/capability.d.ts +2 -0
  243. package/dist/esm/commands/capability.js +29 -0
  244. package/dist/esm/commands/check.d.ts +2 -0
  245. package/dist/esm/commands/check.js +13 -0
  246. package/dist/esm/commands/close.d.ts +2 -0
  247. package/dist/esm/commands/close.js +20 -0
  248. package/dist/esm/commands/copy.d.ts +30 -0
  249. package/{lib → dist/esm}/commands/copy.js +31 -55
  250. package/dist/esm/commands/create.d.ts +2 -0
  251. package/{lib → dist/esm}/commands/create.js +25 -39
  252. package/dist/esm/commands/delete.d.ts +2 -0
  253. package/{lib → dist/esm}/commands/delete.js +25 -41
  254. package/dist/esm/commands/examine.d.ts +2 -0
  255. package/dist/esm/commands/examine.js +4 -0
  256. package/dist/esm/commands/expunge.d.ts +2 -0
  257. package/dist/esm/commands/expunge.js +17 -0
  258. package/dist/esm/commands/fetch.d.ts +23 -0
  259. package/{lib → dist/esm}/commands/fetch.js +33 -74
  260. package/dist/esm/commands/handlers/fetch.d.ts +12 -0
  261. package/{lib → dist/esm}/commands/handlers/fetch.js +11 -42
  262. package/dist/esm/commands/handlers/flags.d.ts +17 -0
  263. package/{lib → dist/esm}/commands/handlers/flags.js +3 -11
  264. package/dist/esm/commands/handlers/search.d.ts +85 -0
  265. package/{lib → dist/esm}/commands/handlers/search.js +33 -71
  266. package/dist/esm/commands/handlers/status.d.ts +34 -0
  267. package/{lib → dist/esm}/commands/handlers/status.js +1 -9
  268. package/dist/esm/commands/handlers/store.d.ts +3 -0
  269. package/{lib → dist/esm}/commands/handlers/store.js +20 -44
  270. package/dist/esm/commands/index.d.ts +2 -0
  271. package/dist/esm/commands/index.js +55 -0
  272. package/dist/esm/commands/list.d.ts +2 -0
  273. package/dist/esm/commands/list.js +71 -0
  274. package/dist/esm/commands/login.d.ts +2 -0
  275. package/{lib → dist/esm}/commands/login.js +24 -44
  276. package/dist/esm/commands/logout.d.ts +2 -0
  277. package/dist/esm/commands/logout.js +25 -0
  278. package/dist/esm/commands/lsub.d.ts +2 -0
  279. package/dist/esm/commands/lsub.js +64 -0
  280. package/dist/esm/commands/noop.d.ts +2 -0
  281. package/dist/esm/commands/noop.js +13 -0
  282. package/dist/esm/commands/rename.d.ts +2 -0
  283. package/{lib → dist/esm}/commands/rename.js +32 -51
  284. package/dist/esm/commands/search.d.ts +10 -0
  285. package/dist/esm/commands/search.js +54 -0
  286. package/dist/esm/commands/select.d.ts +19 -0
  287. package/dist/esm/commands/select.js +214 -0
  288. package/dist/esm/commands/status.d.ts +2 -0
  289. package/{lib → dist/esm}/commands/status.js +18 -39
  290. package/dist/esm/commands/store.d.ts +10 -0
  291. package/{lib → dist/esm}/commands/store.js +39 -73
  292. package/dist/esm/commands/subscribe.d.ts +2 -0
  293. package/{lib → dist/esm}/commands/subscribe.js +22 -39
  294. package/dist/esm/commands/uid-copy.d.ts +2 -0
  295. package/dist/esm/commands/uid-copy.js +4 -0
  296. package/dist/esm/commands/uid-fetch.d.ts +3 -0
  297. package/dist/esm/commands/uid-fetch.js +3 -0
  298. package/dist/esm/commands/uid-search.d.ts +3 -0
  299. package/dist/esm/commands/uid-search.js +3 -0
  300. package/dist/esm/commands/uid-store.d.ts +3 -0
  301. package/dist/esm/commands/uid-store.js +3 -0
  302. package/dist/esm/commands/unsubscribe.d.ts +2 -0
  303. package/{lib → dist/esm}/commands/unsubscribe.js +22 -37
  304. package/dist/esm/dates.d.ts +64 -0
  305. package/{lib → dist/esm}/dates.js +6 -14
  306. package/dist/esm/deflate-layer.d.ts +83 -0
  307. package/{lib → dist/esm}/deflate-layer.js +9 -26
  308. package/dist/esm/encoded-words.d.ts +15 -0
  309. package/{lib → dist/esm}/encoded-words.js +9 -25
  310. package/dist/esm/envelope.d.ts +33 -0
  311. package/{lib → dist/esm}/envelope.js +8 -19
  312. package/dist/esm/esearch.d.ts +96 -0
  313. package/{lib → dist/esm}/esearch.js +12 -39
  314. package/dist/esm/framing.d.ts +66 -0
  315. package/dist/esm/framing.js +82 -0
  316. package/dist/esm/index.d.ts +9 -0
  317. package/dist/esm/index.js +6 -0
  318. package/dist/esm/list-extensions.d.ts +50 -0
  319. package/{lib → dist/esm}/list-extensions.js +1 -4
  320. package/dist/esm/load-plugins.d.ts +21 -0
  321. package/{lib → dist/esm}/load-plugins.js +9 -43
  322. package/dist/esm/mailbox-name.d.ts +26 -0
  323. package/{lib → dist/esm}/mailbox-name.js +5 -26
  324. package/dist/esm/mimeparser.d.ts +137 -0
  325. package/{lib → dist/esm}/mimeparser.js +74 -152
  326. package/dist/esm/mock-client.d.ts +39 -0
  327. package/{lib → dist/esm}/mock-client.js +26 -40
  328. package/dist/esm/numbers.d.ts +28 -0
  329. package/{lib → dist/esm}/numbers.js +1 -8
  330. package/dist/esm/package.json +3 -0
  331. package/dist/esm/plugins/acl.d.ts +2 -0
  332. package/{lib → dist/esm}/plugins/acl.js +146 -240
  333. package/dist/esm/plugins/appendlimit.d.ts +16 -0
  334. package/{lib → dist/esm}/plugins/appendlimit.js +5 -16
  335. package/dist/esm/plugins/auth-plain.d.ts +2 -0
  336. package/{lib → dist/esm}/plugins/auth-plain.js +11 -31
  337. package/dist/esm/plugins/binary.d.ts +30 -0
  338. package/{lib → dist/esm}/plugins/binary.js +17 -43
  339. package/dist/esm/plugins/catenate.d.ts +14 -0
  340. package/{lib → dist/esm}/plugins/catenate.js +19 -40
  341. package/dist/esm/plugins/compress.d.ts +7 -0
  342. package/dist/esm/plugins/compress.js +61 -0
  343. package/dist/esm/plugins/condstore.d.ts +5 -0
  344. package/{lib → dist/esm}/plugins/condstore.js +66 -152
  345. package/dist/esm/plugins/context-search.d.ts +8 -0
  346. package/{lib → dist/esm}/plugins/context-search.js +53 -88
  347. package/dist/esm/plugins/context-sort.d.ts +6 -0
  348. package/{lib → dist/esm}/plugins/context-sort.js +4 -9
  349. package/dist/esm/plugins/create-special-use.d.ts +7 -0
  350. package/{lib → dist/esm}/plugins/create-special-use.js +33 -55
  351. package/dist/esm/plugins/enable.d.ts +23 -0
  352. package/dist/esm/plugins/enable.js +111 -0
  353. package/dist/esm/plugins/esearch.d.ts +6 -0
  354. package/{lib → dist/esm}/plugins/esearch.js +13 -42
  355. package/dist/esm/plugins/esort.d.ts +6 -0
  356. package/{lib → dist/esm}/plugins/esort.js +7 -25
  357. package/dist/esm/plugins/id.d.ts +5 -0
  358. package/dist/esm/plugins/id.js +108 -0
  359. package/dist/esm/plugins/idle.d.ts +5 -0
  360. package/dist/esm/plugins/idle.js +70 -0
  361. package/dist/esm/plugins/imap4rev2.d.ts +6 -0
  362. package/{lib → dist/esm}/plugins/imap4rev2.js +24 -60
  363. package/dist/esm/plugins/index.d.ts +2 -0
  364. package/dist/esm/plugins/index.js +113 -0
  365. package/dist/esm/plugins/list-extended.d.ts +2 -0
  366. package/{lib → dist/esm}/plugins/list-extended.js +28 -66
  367. package/dist/esm/plugins/list-status.d.ts +6 -0
  368. package/{lib → dist/esm}/plugins/list-status.js +5 -12
  369. package/dist/esm/plugins/literalminus.d.ts +8 -0
  370. package/{lib → dist/esm}/plugins/literalminus.js +2 -5
  371. package/dist/esm/plugins/literalplus.d.ts +6 -0
  372. package/{lib → dist/esm}/plugins/literalplus.js +2 -5
  373. package/dist/esm/plugins/logindisabled.d.ts +5 -0
  374. package/dist/esm/plugins/logindisabled.js +39 -0
  375. package/dist/esm/plugins/messagelimit.d.ts +19 -0
  376. package/{lib → dist/esm}/plugins/messagelimit.js +18 -41
  377. package/dist/esm/plugins/metadata-server.d.ts +7 -0
  378. package/{lib → dist/esm}/plugins/metadata-server.js +3 -7
  379. package/dist/esm/plugins/metadata.d.ts +11 -0
  380. package/dist/esm/plugins/metadata.js +421 -0
  381. package/dist/esm/plugins/move.d.ts +11 -0
  382. package/{lib → dist/esm}/plugins/move.js +37 -66
  383. package/dist/esm/plugins/multiappend.d.ts +12 -0
  384. package/{lib → dist/esm}/plugins/multiappend.js +2 -5
  385. package/dist/esm/plugins/multisearch.d.ts +6 -0
  386. package/{lib → dist/esm}/plugins/multisearch.js +24 -48
  387. package/dist/esm/plugins/namespace.d.ts +5 -0
  388. package/dist/esm/plugins/namespace.js +42 -0
  389. package/dist/esm/plugins/notify.d.ts +2 -0
  390. package/{lib → dist/esm}/plugins/notify.js +90 -134
  391. package/dist/esm/plugins/oauthbearer.d.ts +32 -0
  392. package/{lib → dist/esm}/plugins/oauthbearer.js +18 -48
  393. package/dist/esm/plugins/objectid.d.ts +23 -0
  394. package/{lib → dist/esm}/plugins/objectid.js +21 -58
  395. package/dist/esm/plugins/partial.d.ts +6 -0
  396. package/{lib → dist/esm}/plugins/partial.js +7 -15
  397. package/dist/esm/plugins/preview.d.ts +31 -0
  398. package/{lib → dist/esm}/plugins/preview.js +28 -66
  399. package/dist/esm/plugins/qresync.d.ts +11 -0
  400. package/{lib → dist/esm}/plugins/qresync.js +64 -134
  401. package/dist/esm/plugins/quota.d.ts +18 -0
  402. package/{lib → dist/esm}/plugins/quota.js +89 -135
  403. package/dist/esm/plugins/replace.d.ts +14 -0
  404. package/{lib → dist/esm}/plugins/replace.js +21 -51
  405. package/dist/esm/plugins/sasl-ir.d.ts +5 -0
  406. package/{lib → dist/esm}/plugins/sasl-ir.js +3 -6
  407. package/dist/esm/plugins/savedate.d.ts +17 -0
  408. package/{lib → dist/esm}/plugins/savedate.js +5 -15
  409. package/dist/esm/plugins/savelimit.d.ts +10 -0
  410. package/{lib → dist/esm}/plugins/savelimit.js +3 -6
  411. package/dist/esm/plugins/searchres.d.ts +6 -0
  412. package/{lib → dist/esm}/plugins/searchres.js +13 -22
  413. package/dist/esm/plugins/sort-display.d.ts +11 -0
  414. package/{lib → dist/esm}/plugins/sort-display.js +6 -10
  415. package/dist/esm/plugins/sort.d.ts +11 -0
  416. package/{lib → dist/esm}/plugins/sort.js +24 -46
  417. package/dist/esm/plugins/special-use.d.ts +10 -0
  418. package/{lib → dist/esm}/plugins/special-use.js +9 -24
  419. package/dist/esm/plugins/starttls.d.ts +5 -0
  420. package/{lib → dist/esm}/plugins/starttls.js +20 -37
  421. package/dist/esm/plugins/status-size.d.ts +7 -0
  422. package/{lib → dist/esm}/plugins/status-size.js +4 -11
  423. package/dist/esm/plugins/thread-orderedsubject.d.ts +11 -0
  424. package/{lib → dist/esm}/plugins/thread-orderedsubject.js +3 -6
  425. package/dist/esm/plugins/thread-references.d.ts +11 -0
  426. package/{lib → dist/esm}/plugins/thread-references.js +3 -6
  427. package/dist/esm/plugins/uidonly.d.ts +15 -0
  428. package/{lib → dist/esm}/plugins/uidonly.js +11 -35
  429. package/dist/esm/plugins/uidplus.d.ts +15 -0
  430. package/{lib → dist/esm}/plugins/uidplus.js +25 -45
  431. package/dist/esm/plugins/unauthenticate.d.ts +7 -0
  432. package/dist/esm/plugins/unauthenticate.js +17 -0
  433. package/dist/esm/plugins/unselect.d.ts +5 -0
  434. package/dist/esm/plugins/unselect.js +21 -0
  435. package/dist/esm/plugins/utf8-accept.d.ts +6 -0
  436. package/{lib → dist/esm}/plugins/utf8-accept.js +10 -21
  437. package/dist/esm/plugins/x-gm-ext-1.d.ts +26 -0
  438. package/{lib → dist/esm}/plugins/x-gm-ext-1.js +48 -100
  439. package/dist/esm/plugins/xoauth2.d.ts +2 -0
  440. package/dist/esm/plugins/xoauth2.js +140 -0
  441. package/dist/esm/plugins/xtoybird.d.ts +2 -0
  442. package/dist/esm/plugins/xtoybird.js +218 -0
  443. package/dist/esm/server.d.ts +876 -0
  444. package/dist/esm/server.js +2543 -0
  445. package/dist/esm/smtp-listener.d.ts +13 -0
  446. package/{lib → dist/esm}/smtp-listener.js +5 -12
  447. package/dist/esm/sorting.d.ts +77 -0
  448. package/{lib → dist/esm}/sorting.js +40 -53
  449. package/dist/esm/threading.d.ts +30 -0
  450. package/{lib → dist/esm}/threading.js +29 -70
  451. package/dist/esm/types.d.ts +327 -0
  452. package/dist/esm/types.js +2 -0
  453. package/dist/esm/utf8-session.d.ts +17 -0
  454. package/{lib → dist/esm}/utf8-session.js +15 -25
  455. package/dist/esm/vanished.d.ts +21 -0
  456. package/{lib → dist/esm}/vanished.js +16 -21
  457. package/dist/plugin-help.json +298 -0
  458. package/package.json +54 -11
  459. package/lib/commands/capability.js +0 -47
  460. package/lib/commands/check.js +0 -21
  461. package/lib/commands/close.js +0 -30
  462. package/lib/commands/examine.js +0 -7
  463. package/lib/commands/expunge.js +0 -27
  464. package/lib/commands/list.js +0 -100
  465. package/lib/commands/logout.js +0 -41
  466. package/lib/commands/lsub.js +0 -87
  467. package/lib/commands/noop.js +0 -21
  468. package/lib/commands/search.js +0 -76
  469. package/lib/commands/select.js +0 -289
  470. package/lib/commands/uid copy.js +0 -7
  471. package/lib/commands/uid fetch.js +0 -5
  472. package/lib/commands/uid search.js +0 -5
  473. package/lib/commands/uid store.js +0 -5
  474. package/lib/plugins/compress.js +0 -76
  475. package/lib/plugins/enable.js +0 -155
  476. package/lib/plugins/id.js +0 -138
  477. package/lib/plugins/idle.js +0 -105
  478. package/lib/plugins/logindisabled.js +0 -50
  479. package/lib/plugins/metadata.js +0 -475
  480. package/lib/plugins/namespace.js +0 -67
  481. package/lib/plugins/unauthenticate.js +0 -28
  482. package/lib/plugins/unselect.js +0 -36
  483. package/lib/plugins/xoauth2.js +0 -188
  484. package/lib/plugins/xtoybird.js +0 -282
  485. package/lib/server.js +0 -2880
@@ -1,42 +1,32 @@
1
- 'use strict';
2
-
3
- module.exports = function (connection, parsed, data, callback) {
1
+ export default function deleteCommand(connection, parsed, data, callback) {
4
2
  if (!parsed.attributes || parsed.attributes.length !== 1 || !parsed.attributes[0] || ['STRING', 'LITERAL', 'ATOM'].indexOf(parsed.attributes[0].type) < 0) {
5
- connection.send(
6
- {
7
- tag: parsed.tag,
8
- command: 'BAD',
9
- attributes: [
10
- {
11
- type: 'TEXT',
12
- value: 'DELETE expects mailbox name'
13
- }
14
- ]
15
- },
16
- 'INVALID COMMAND',
17
- parsed,
18
- data
19
- );
3
+ connection.send({
4
+ tag: parsed.tag,
5
+ command: 'BAD',
6
+ attributes: [
7
+ {
8
+ type: 'TEXT',
9
+ value: 'DELETE expects mailbox name'
10
+ }
11
+ ]
12
+ }, 'INVALID COMMAND', parsed, data);
20
13
  return callback();
21
14
  }
22
-
23
15
  const path = parsed.attributes[0].value;
24
-
25
16
  const mailbox = connection.server.getMailbox(path);
26
-
27
17
  if (!mailbox) {
28
18
  connection.sendStatus(parsed, data, 'NO', 'Mailbox does not exist', 'NONEXISTENT', 'DELETE FAILED');
29
19
  return callback();
30
20
  }
31
-
32
21
  try {
33
22
  connection.server.deleteMailbox(path);
34
- } catch (E) {
23
+ }
24
+ catch (err) {
25
+ const E = err;
35
26
  connection.sendStatus(parsed, data, 'NO', E.message, E.code, 'DELETE FAILED');
36
27
  return callback();
37
28
  }
38
29
  connection.server.mailboxChanged('delete', mailbox.path, { mailbox });
39
-
40
30
  // RFC 2180 section 3.3: the other sessions that have the mailbox selected are disconnected with an untagged
41
31
  // BYE (RFC 2683 section 3.1.2), as they can not be told about the deletion in any other way
42
32
  connection.server.connections.forEach(other => {
@@ -44,21 +34,15 @@ module.exports = function (connection, parsed, data, callback) {
44
34
  other.bye('Selected mailbox was deleted', 'MAILBOX DELETED');
45
35
  }
46
36
  });
47
-
48
- connection.send(
49
- {
50
- tag: parsed.tag,
51
- command: 'OK',
52
- attributes: [
53
- {
54
- type: 'TEXT',
55
- value: 'DELETE completed'
56
- }
57
- ]
58
- },
59
- 'DELETE',
60
- parsed,
61
- data
62
- );
37
+ connection.send({
38
+ tag: parsed.tag,
39
+ command: 'OK',
40
+ attributes: [
41
+ {
42
+ type: 'TEXT',
43
+ value: 'DELETE completed'
44
+ }
45
+ ]
46
+ }, 'DELETE', parsed, data);
63
47
  return callback();
64
- };
48
+ }
@@ -0,0 +1,2 @@
1
+ import type { Callback, IMAPConnection, ParsedCommand } from '../types.js';
2
+ export default function examineCommand(connection: IMAPConnection, parsed: ParsedCommand, data: string, callback: Callback): void;
@@ -0,0 +1,4 @@
1
+ import { selectMailbox } from './select.js';
2
+ export default function examineCommand(connection, parsed, data, callback) {
3
+ return selectMailbox(connection, parsed, data, callback, true);
4
+ }
@@ -0,0 +1,2 @@
1
+ import type { Callback, IMAPConnection, ParsedCommand } from '../types.js';
2
+ export default function expungeCommand(connection: IMAPConnection, parsed: ParsedCommand, data: string, callback: Callback): void;
@@ -0,0 +1,17 @@
1
+ export default function expungeCommand(connection, parsed, data, callback) {
2
+ if (connection.refuseReadOnly(parsed, data, 'EXPUNGE FAILED')) {
3
+ return callback();
4
+ }
5
+ connection.expungeDeleted(connection.selectedMailbox, false, true);
6
+ connection.send({
7
+ tag: parsed.tag,
8
+ command: 'OK',
9
+ attributes: [
10
+ {
11
+ type: 'TEXT',
12
+ value: 'EXPUNGE Completed'
13
+ }
14
+ ]
15
+ }, 'EXPUNGE', parsed, data);
16
+ callback();
17
+ }
@@ -0,0 +1,23 @@
1
+ import type { Attribute, Callback, FetchHandler, IMAPConnection, Message, ParsedCommand } from '../types.js';
2
+ declare const macros: Record<string, string[]>;
3
+ /**
4
+ * Builds the data list of a FETCH response for a message, without any side effects like setting \Seen
5
+ *
6
+ * @param {Object} connection IMAP connection
7
+ * @param {Object} message Message object
8
+ * @param {Array} params Fetch items
9
+ * @param {Array} [handlers] Handlers from getHandlers
10
+ * @param {Array} [names] Names from responseNames
11
+ * @return {Array} FETCH data items
12
+ * @throws {Error} for an unknown item or invalid item arguments
13
+ */
14
+ declare function fetchResponse(connection: IMAPConnection, message: Message, params: Attribute[], handlers?: FetchHandler[], names?: Attribute[]): Attribute[];
15
+ /**
16
+ * Shared implementation of FETCH and UID FETCH
17
+ *
18
+ * @param {Boolean} isUid If true, the sequence set lists UIDs and UID is always included in the response
19
+ */
20
+ declare function processFetch(isUid: boolean, connection: IMAPConnection, parsed: ParsedCommand, data: string, callback: Callback): void;
21
+ declare const fetchCommand: (connection: IMAPConnection, parsed: ParsedCommand, data: string, callback: Callback) => void;
22
+ export default fetchCommand;
23
+ export { processFetch, macros, fetchResponse };
@@ -1,13 +1,9 @@
1
- 'use strict';
2
-
3
- const fetchHandlers = require('./handlers/fetch');
4
-
1
+ import fetchHandlers from './handlers/fetch.js';
5
2
  const macros = {
6
3
  ALL: ['FLAGS', 'INTERNALDATE', 'RFC822.SIZE', 'ENVELOPE'],
7
4
  FAST: ['FLAGS', 'INTERNALDATE', 'RFC822.SIZE'],
8
5
  FULL: ['FLAGS', 'INTERNALDATE', 'RFC822.SIZE', 'ENVELOPE', 'BODY']
9
6
  };
10
-
11
7
  /**
12
8
  * Returns the item names as they appear in a FETCH response, without .PEEK and only with the origin
13
9
  * octet of a partial range (RFC 3501 section 7.4.2)
@@ -16,7 +12,7 @@ const macros = {
16
12
  * @return {Array} names
17
13
  */
18
14
  function responseNames(params) {
19
- return params.map(param => {
15
+ return params.map((param) => {
20
16
  const name = Object.assign({}, param, { value: param.value.replace(/\.PEEK\b/i, '') });
21
17
  if (name.partial) {
22
18
  name.partial = name.partial.slice(0, 1);
@@ -24,7 +20,6 @@ function responseNames(params) {
24
20
  return name;
25
21
  });
26
22
  }
27
-
28
23
  /**
29
24
  * Returns the handlers of fetch items
30
25
  *
@@ -43,7 +38,6 @@ function getHandlers(connection, params) {
43
38
  return handler;
44
39
  });
45
40
  }
46
-
47
41
  /**
48
42
  * Builds the data list of a FETCH response for a message, without any side effects like setting \Seen
49
43
  *
@@ -56,13 +50,12 @@ function getHandlers(connection, params) {
56
50
  * @throws {Error} for an unknown item or invalid item arguments
57
51
  */
58
52
  function fetchResponse(connection, message, params, handlers, names) {
59
- handlers = handlers || getHandlers(connection, params);
60
- names = names || responseNames(params);
53
+ const itemHandlers = handlers || getHandlers(connection, params);
54
+ const itemNames = names || responseNames(params);
61
55
  const response = [];
62
- params.forEach((param, i) => response.push(names[i], handlers[i](connection, message, param)));
56
+ params.forEach((param, i) => response.push(itemNames[i], itemHandlers[i](connection, message, param)));
63
57
  return response;
64
58
  }
65
-
66
59
  /**
67
60
  * Shared implementation of FETCH and UID FETCH
68
61
  *
@@ -70,99 +63,76 @@ function fetchResponse(connection, message, params, handlers, names) {
70
63
  */
71
64
  function processFetch(isUid, connection, parsed, data, callback) {
72
65
  const command = isUid ? 'UID FETCH' : 'FETCH';
73
-
74
- if (
75
- !parsed.attributes ||
66
+ if (!parsed.attributes ||
76
67
  parsed.attributes.length !== 2 ||
77
68
  !parsed.attributes[0] ||
78
69
  ['ATOM', 'SEQUENCE'].indexOf(parsed.attributes[0].type) < 0 ||
79
70
  !parsed.attributes[1] ||
80
- (['ATOM'].indexOf(parsed.attributes[1].type) < 0 && !Array.isArray(parsed.attributes[1]))
81
- ) {
82
- connection.send(
83
- {
84
- tag: parsed.tag,
85
- command: 'BAD',
86
- attributes: [
87
- {
88
- type: 'TEXT',
89
- value: command + ' expects sequence set and message item names'
90
- }
91
- ]
92
- },
93
- 'INVALID COMMAND',
94
- parsed,
95
- data
96
- );
71
+ (['ATOM'].indexOf(parsed.attributes[1].type) < 0 && !Array.isArray(parsed.attributes[1]))) {
72
+ connection.send({
73
+ tag: parsed.tag,
74
+ command: 'BAD',
75
+ attributes: [
76
+ {
77
+ type: 'TEXT',
78
+ value: command + ' expects sequence set and message item names'
79
+ }
80
+ ]
81
+ }, 'INVALID COMMAND', parsed, data);
97
82
  return callback();
98
83
  }
99
-
100
84
  const range = connection.limitRange(parsed, connection.getCommandRange(parsed.attributes[0].value, isUid));
101
85
  let params = [].concat(parsed.attributes[1] || []);
102
-
103
86
  if (parsed.attributes[1].type === 'ATOM' && Object.prototype.hasOwnProperty.call(macros, parsed.attributes[1].value.toUpperCase())) {
104
87
  params = macros[parsed.attributes[1].value.toUpperCase()].slice();
105
88
  }
106
-
107
89
  // messages that get \Seen set by this FETCH
108
90
  const seen = [];
109
91
  // untagged FETCH responses and their messages
110
92
  const responses = [];
111
93
  const messages = [];
112
-
113
94
  try {
114
95
  let uidExist = false;
115
96
  let flagsExist = false;
116
97
  let forceSeen = false;
117
-
118
98
  params.forEach((param, i) => {
119
99
  if (!param || (typeof param !== 'string' && param.type !== 'ATOM')) {
120
100
  throw new Error('Invalid FETCH argument #' + (i + 1));
121
101
  }
122
-
123
102
  if (typeof param === 'string') {
124
103
  param = params[i] = {
125
104
  type: 'ATOM',
126
105
  value: param
127
106
  };
128
107
  }
129
-
130
108
  const key = param.value.toUpperCase();
131
-
132
109
  if (key === 'FLAGS') {
133
110
  flagsExist = true;
134
111
  }
135
-
136
112
  if (key === 'UID') {
137
113
  uidExist = true;
138
114
  }
139
-
140
115
  // RFC 3501 6.4.5: BODY[<section>] and items whose handler is marked with setsSeen set \Seen
141
116
  const handler = connection.server.fetchHandlers[key] || fetchHandlers[key];
142
117
  if (connection.canSetSeen() && ((key === 'BODY' && param.section) || (handler && handler.setsSeen))) {
143
118
  forceSeen = true;
144
119
  }
145
120
  });
146
-
147
121
  if (forceSeen && !flagsExist) {
148
122
  params.push({
149
123
  type: 'ATOM',
150
124
  value: 'FLAGS'
151
125
  });
152
126
  }
153
-
154
127
  if (isUid && !uidExist) {
155
128
  params.push({
156
129
  type: 'ATOM',
157
130
  value: 'UID'
158
131
  });
159
132
  }
160
-
161
133
  const handlers = getHandlers(connection, params);
162
-
163
134
  // item names as they appear in the response
164
135
  const names = responseNames(params);
165
-
166
136
  // nothing is sent before every message is done, so a failing item leaves no partial output
167
137
  range.forEach(rangeMessage => {
168
138
  for (let i = 0, len = connection.server.fetchFilters.length; i < len; i++) {
@@ -170,14 +140,11 @@ function processFetch(isUid, connection, parsed, data, callback) {
170
140
  return;
171
141
  }
172
142
  }
173
-
174
143
  if (forceSeen && rangeMessage[1].flags.indexOf('\\Seen') < 0) {
175
144
  rangeMessage[1].flags.push('\\Seen');
176
145
  seen.push(rangeMessage[1]);
177
146
  }
178
-
179
147
  const response = fetchResponse(connection, rangeMessage[1], params, handlers, names);
180
-
181
148
  messages.push(rangeMessage[1]);
182
149
  responses.push({
183
150
  tag: '*',
@@ -191,39 +158,31 @@ function processFetch(isUid, connection, parsed, data, callback) {
191
158
  ]
192
159
  });
193
160
  });
194
- } catch (E) {
161
+ }
162
+ catch (err) {
163
+ const E = err;
195
164
  // the failed FETCH did not set \Seen after all
196
165
  seen.forEach(message => connection.server.removeFlag(message.flags, '\\Seen'));
197
166
  // a handler can fail with NO and a response code, e.g. NO [UNKNOWN-CTE] (RFC 3516 section 4.3)
198
167
  connection.sendStatus(parsed, data, E.imapResponse === 'NO' ? 'NO' : 'BAD', E.message, E.code, command + ' FAILED');
199
168
  return callback();
200
169
  }
201
-
202
170
  // the message goes with its response, for output handlers
203
171
  responses.forEach((response, i) => connection.send(response, command, parsed, data, messages[i]));
204
-
205
- connection.send(
206
- {
207
- tag: parsed.tag,
208
- command: 'OK',
209
- attributes: [
210
- {
211
- type: 'TEXT',
212
- value: command + ' Completed'
213
- }
214
- ]
215
- },
216
- command,
217
- parsed,
218
- data
219
- );
220
-
172
+ connection.send({
173
+ tag: parsed.tag,
174
+ command: 'OK',
175
+ attributes: [
176
+ {
177
+ type: 'TEXT',
178
+ value: command + ' Completed'
179
+ }
180
+ ]
181
+ }, command, parsed, data);
221
182
  // other sessions that have the mailbox selected learn about the new flags (RFC 3501 section 5.2)
222
183
  connection.notifyFlagChanges(seen);
223
184
  return callback();
224
185
  }
225
-
226
- module.exports = (connection, parsed, data, callback) => processFetch(false, connection, parsed, data, callback);
227
- module.exports.processFetch = processFetch;
228
- module.exports.macros = macros;
229
- module.exports.fetchResponse = fetchResponse;
186
+ const fetchCommand = (connection, parsed, data, callback) => processFetch(false, connection, parsed, data, callback);
187
+ export default fetchCommand;
188
+ export { processFetch, macros, fetchResponse };
@@ -0,0 +1,12 @@
1
+ import type { FetchHandler } from '../../types.js';
2
+ declare const fetchHandlers: Record<string, FetchHandler>;
3
+ export default fetchHandlers;
4
+ /**
5
+ * Applies the partial range of a BODY[]<start.length> or BINARY[]<start.length> item
6
+ *
7
+ * @param {String} value Section contents
8
+ * @param {Array} [partial] Parsed partial range
9
+ * @return {String} The requested slice, or the whole value without a range
10
+ */
11
+ declare function applyPartial(value: string, partial: number[] | null | undefined): string;
12
+ export { applyPartial };
@@ -1,20 +1,13 @@
1
- 'use strict';
2
-
1
+ import { getMessageData, resolveNode, embeddedMessage, headerSection, render } from '../../mimeparser.js';
2
+ import bodystructure from '../../bodystructure.js';
3
+ import envelope from '../../envelope.js';
3
4
  const fetchHandlers = {};
4
- const mimeParser = require('../../mimeparser');
5
- const bodystructure = require('../../bodystructure');
6
- const envelope = require('../../envelope');
7
-
8
- const { getMessageData, resolveNode, embeddedMessage, headerSection, render } = mimeParser;
9
-
10
- module.exports = fetchHandlers;
5
+ export default fetchHandlers;
11
6
  // not an IMAP item, so not enumerable among the handlers
12
7
  Object.defineProperty(fetchHandlers, 'applyPartial', { value: applyPartial });
13
-
14
8
  fetchHandlers.UID = function (connection, message) {
15
9
  return message.uid;
16
10
  };
17
-
18
11
  fetchHandlers.FLAGS = function (connection, message) {
19
12
  return connection.getFlags(message).map(flag => {
20
13
  return {
@@ -23,7 +16,6 @@ fetchHandlers.FLAGS = function (connection, message) {
23
16
  };
24
17
  });
25
18
  };
26
-
27
19
  fetchHandlers.BODYSTRUCTURE = function (connection, message) {
28
20
  return bodystructure(getMessageData(message).tree, {
29
21
  upperCaseKeys: true,
@@ -31,18 +23,15 @@ fetchHandlers.BODYSTRUCTURE = function (connection, message) {
31
23
  messageGlobal: connection.messageGlobal
32
24
  });
33
25
  };
34
-
35
26
  fetchHandlers.ENVELOPE = function (connection, message) {
36
27
  return envelope(getMessageData(message).tree.parsedHeader);
37
28
  };
38
-
39
29
  fetchHandlers['BODY.PEEK'] = function (connection, message, query) {
40
30
  if (!query.section) {
41
31
  throw new Error('BODY.PEEK requires ans argument list');
42
32
  }
43
33
  return fetchHandlers.BODY(connection, message, query);
44
34
  };
45
-
46
35
  /**
47
36
  * Lists the header field names of a HEADER.FIELDS or HEADER.FIELDS.NOT section
48
37
  */
@@ -50,7 +39,7 @@ function getFieldNames(query, key) {
50
39
  if (query.section.length !== 2 || !Array.isArray(query.section[1]) || !query.section[1].length) {
51
40
  throw new Error(key + ' expects a list of header fields');
52
41
  }
53
- return query.section[1].map(queryKey => {
42
+ return query.section[1].map((queryKey) => {
54
43
  if (['ATOM', 'STRING', 'LITERAL'].indexOf(queryKey.type) < 0) {
55
44
  throw new Error('Invalid header field name in list');
56
45
  }
@@ -58,7 +47,6 @@ function getFieldNames(query, key) {
58
47
  return queryKey.value.toUpperCase();
59
48
  });
60
49
  }
61
-
62
50
  /**
63
51
  * Returns the contents of a BODY[<section>]
64
52
  *
@@ -71,11 +59,9 @@ function getSection(data, query, global) {
71
59
  if (!query.section.length) {
72
60
  return data.raw;
73
61
  }
74
-
75
62
  if (query.section[0].type !== 'ATOM') {
76
63
  throw new Error('Invalid BODY[<section>] identifier' + (query.section[0].value ? ' ' + query.section[0].type : ''));
77
64
  }
78
-
79
65
  // RFC 3501 9: section-part = nz-number *("." nz-number), optionally followed by a section-msgtext
80
66
  // (or MIME for a part)
81
67
  const match = (query.section[0].value || '')
@@ -84,41 +70,33 @@ function getSection(data, query, global) {
84
70
  if (!match || (match[2] === 'MIME' && !match[1])) {
85
71
  throw new Error('Invalid BODY[<section>] identifier ' + query.section[0].value);
86
72
  }
87
-
88
73
  const path = match[1] || '';
89
74
  const key = match[2] || '';
90
- let fields;
91
-
75
+ let fields = [];
92
76
  if (['HEADER.FIELDS', 'HEADER.FIELDS.NOT'].indexOf(key) >= 0) {
93
77
  fields = getFieldNames(query, key);
94
- } else if (query.section.length > 1) {
78
+ }
79
+ else if (query.section.length > 1) {
95
80
  throw new Error((key || 'Part number') + ' does not take any arguments');
96
81
  }
97
-
98
82
  // RFC 3501 6.4.5: a part that does not exist is returned as an empty string
99
83
  const node = path ? resolveNode(data.tree, path, global) : data.tree;
100
84
  if (!node) {
101
85
  return '';
102
86
  }
103
-
104
87
  // HEADER and TEXT with a part number refer to the encapsulated message of a message/rfc822 part
105
88
  // (and message/global in IMAP4rev2, RFC 9051 section 6.4.5.1), not to the part itself
106
89
  const message = path ? embeddedMessage(node, global) : node;
107
-
108
90
  switch (key) {
109
91
  case '':
110
92
  // BODY[1.2.3] is a part without its MIME header
111
93
  return render(node, true);
112
-
113
94
  case 'MIME':
114
95
  return headerSection(node);
115
-
116
96
  case 'TEXT':
117
97
  return message ? render(message, true) : '';
118
-
119
98
  case 'HEADER':
120
99
  return message ? headerSection(message) : '';
121
-
122
100
  default: {
123
101
  // HEADER.FIELDS and HEADER.FIELDS.NOT
124
102
  if (!message) {
@@ -126,8 +104,8 @@ function getSection(data, query, global) {
126
104
  }
127
105
  const wanted = key === 'HEADER.FIELDS';
128
106
  let value = '';
129
- (message.header || []).forEach(line => {
130
- const name = line.split(':').shift().toUpperCase().trim();
107
+ (message.header || []).forEach((line) => {
108
+ const name = line.split(':')[0].toUpperCase().trim();
131
109
  if (fields.indexOf(name) >= 0 === wanted) {
132
110
  value += line + '\r\n';
133
111
  }
@@ -136,7 +114,6 @@ function getSection(data, query, global) {
136
114
  }
137
115
  }
138
116
  }
139
-
140
117
  /**
141
118
  * Applies the partial range of a BODY[]<start.length> or BINARY[]<start.length> item
142
119
  *
@@ -154,10 +131,8 @@ function applyPartial(value, partial) {
154
131
  }
155
132
  return value.substr(partial[0], partial[1]);
156
133
  }
157
-
158
134
  fetchHandlers.BODY = function (connection, message, query) {
159
135
  const data = getMessageData(message);
160
-
161
136
  if (!query.section) {
162
137
  if (query.partial) {
163
138
  throw new Error('BODY without a section does not take a partial range');
@@ -168,38 +143,31 @@ fetchHandlers.BODY = function (connection, message, query) {
168
143
  messageGlobal: connection.messageGlobal
169
144
  });
170
145
  }
171
-
172
146
  return {
173
147
  type: 'LITERAL',
174
148
  value: applyPartial(getSection(data, query, connection.messageGlobal), query.partial)
175
149
  };
176
150
  };
177
-
178
151
  fetchHandlers.INTERNALDATE = function (connection, message) {
179
152
  return message.internaldate;
180
153
  };
181
-
182
154
  fetchHandlers.RFC822 = function (connection, message) {
183
155
  return {
184
156
  type: 'LITERAL',
185
157
  value: getMessageData(message).raw
186
158
  };
187
159
  };
188
-
189
160
  // RFC 3501 6.4.5: RFC822 and RFC822.TEXT set \Seen, RFC822.HEADER is BODY.PEEK[HEADER] and does not
190
161
  fetchHandlers.RFC822.setsSeen = true;
191
-
192
162
  fetchHandlers['RFC822.SIZE'] = function (connection, message) {
193
163
  return getMessageData(message).raw.length;
194
164
  };
195
-
196
165
  fetchHandlers['RFC822.HEADER'] = function (connection, message) {
197
166
  return {
198
167
  type: 'LITERAL',
199
168
  value: headerSection(getMessageData(message).tree)
200
169
  };
201
170
  };
202
-
203
171
  fetchHandlers['RFC822.TEXT'] = function (connection, message) {
204
172
  return {
205
173
  type: 'LITERAL',
@@ -207,3 +175,4 @@ fetchHandlers['RFC822.TEXT'] = function (connection, message) {
207
175
  };
208
176
  };
209
177
  fetchHandlers['RFC822.TEXT'].setsSeen = true;
178
+ export { applyPartial };
@@ -0,0 +1,17 @@
1
+ import type { IMAPConnection } from '../../types.js';
2
+ declare const INVALID_KEYWORD_CHAR: RegExp;
3
+ /**
4
+ * System flags are case-insensitive, so "\seen" becomes "\Seen"
5
+ *
6
+ * @param {String} flag Flag value
7
+ * @return {String} Normalized flag
8
+ */
9
+ declare function normalizeSystemFlag(flag: string): string;
10
+ /**
11
+ * Throws if a flag can not be stored: an unknown system flag (including \Recent) or an invalid keyword
12
+ *
13
+ * @param {Object} connection IMAP connection
14
+ * @param {String} flag Normalized flag value
15
+ */
16
+ declare function checkSystemFlags(connection: IMAPConnection, flag: string): void;
17
+ export { INVALID_KEYWORD_CHAR, normalizeSystemFlag, checkSystemFlags };
@@ -1,11 +1,8 @@
1
- 'use strict';
2
-
3
1
  // RFC 3501 9: flag-keyword = atom = 1*ATOM-CHAR, so a keyword can not contain atom-specials:
4
2
  // "(" / ")" / "{" / SP / CTL / list-wildcards / quoted-specials / resp-specials. 8-bit octets are
5
3
  // allowed, the parser accepts them in atoms as well
6
4
  // eslint-disable-next-line no-control-regex
7
5
  const INVALID_KEYWORD_CHAR = /[\x00-\x1f\x7f (){%*"\\\]]/;
8
-
9
6
  /**
10
7
  * System flags are case-insensitive, so "\seen" becomes "\Seen"
11
8
  *
@@ -18,7 +15,6 @@ function normalizeSystemFlag(flag) {
18
15
  }
19
16
  return flag;
20
17
  }
21
-
22
18
  /**
23
19
  * Throws if a flag can not be stored: an unknown system flag (including \Recent) or an invalid keyword
24
20
  *
@@ -30,13 +26,9 @@ function checkSystemFlags(connection, flag) {
30
26
  if (connection.server.systemFlags.indexOf(flag) < 0) {
31
27
  throw new Error('Invalid system flag ' + flag);
32
28
  }
33
- } else if (!flag || INVALID_KEYWORD_CHAR.test(flag)) {
29
+ }
30
+ else if (!flag || INVALID_KEYWORD_CHAR.test(flag)) {
34
31
  throw new Error('Invalid flag keyword ' + JSON.stringify(flag));
35
32
  }
36
33
  }
37
-
38
- module.exports = {
39
- INVALID_KEYWORD_CHAR,
40
- normalizeSystemFlag,
41
- checkSystemFlags
42
- };
34
+ export { INVALID_KEYWORD_CHAR, normalizeSystemFlag, checkSystemFlags };