imapkit 4.0.2 → 4.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (485) hide show
  1. package/README.md +32 -19
  2. package/bin/imapkit.js +12 -16
  3. package/dist/cjs/addressparser.d.ts +21 -0
  4. package/dist/cjs/addressparser.js +277 -0
  5. package/dist/cjs/arguments.d.ts +31 -0
  6. package/{lib → dist/cjs}/arguments.js +9 -21
  7. package/dist/cjs/bodystructure.d.ts +25 -0
  8. package/dist/cjs/bodystructure.js +150 -0
  9. package/dist/cjs/cert.d.ts +2 -0
  10. package/dist/cjs/cert.js +7 -0
  11. package/dist/cjs/command-states.d.ts +36 -0
  12. package/dist/cjs/command-states.js +102 -0
  13. package/dist/cjs/commands/append.d.ts +88 -0
  14. package/dist/cjs/commands/append.js +299 -0
  15. package/dist/cjs/commands/capability.d.ts +2 -0
  16. package/dist/cjs/commands/capability.js +44 -0
  17. package/dist/cjs/commands/check.d.ts +2 -0
  18. package/dist/cjs/commands/check.js +28 -0
  19. package/dist/cjs/commands/close.d.ts +2 -0
  20. package/dist/cjs/commands/close.js +35 -0
  21. package/dist/cjs/commands/copy.d.ts +30 -0
  22. package/dist/cjs/commands/copy.js +107 -0
  23. package/dist/cjs/commands/create.d.ts +2 -0
  24. package/dist/cjs/commands/create.js +53 -0
  25. package/dist/cjs/commands/delete.d.ts +2 -0
  26. package/dist/cjs/commands/delete.js +63 -0
  27. package/dist/cjs/commands/examine.d.ts +2 -0
  28. package/dist/cjs/commands/examine.js +19 -0
  29. package/dist/cjs/commands/expunge.d.ts +2 -0
  30. package/dist/cjs/commands/expunge.js +32 -0
  31. package/dist/cjs/commands/fetch.d.ts +23 -0
  32. package/dist/cjs/commands/fetch.js +208 -0
  33. package/dist/cjs/commands/handlers/fetch.d.ts +12 -0
  34. package/dist/cjs/commands/handlers/fetch.js +195 -0
  35. package/dist/cjs/commands/handlers/flags.d.ts +17 -0
  36. package/dist/cjs/commands/handlers/flags.js +39 -0
  37. package/dist/cjs/commands/handlers/search.d.ts +85 -0
  38. package/dist/cjs/commands/handlers/search.js +504 -0
  39. package/dist/cjs/commands/handlers/status.d.ts +34 -0
  40. package/dist/cjs/commands/handlers/status.js +81 -0
  41. package/dist/cjs/commands/handlers/store.d.ts +3 -0
  42. package/dist/cjs/commands/handlers/store.js +117 -0
  43. package/dist/cjs/commands/index.d.ts +2 -0
  44. package/dist/cjs/commands/index.js +61 -0
  45. package/dist/cjs/commands/list.d.ts +2 -0
  46. package/dist/cjs/commands/list.js +86 -0
  47. package/dist/cjs/commands/login.d.ts +2 -0
  48. package/dist/cjs/commands/login.js +62 -0
  49. package/dist/cjs/commands/logout.d.ts +2 -0
  50. package/dist/cjs/commands/logout.js +40 -0
  51. package/dist/cjs/commands/lsub.d.ts +2 -0
  52. package/dist/cjs/commands/lsub.js +79 -0
  53. package/dist/cjs/commands/noop.d.ts +2 -0
  54. package/dist/cjs/commands/noop.js +28 -0
  55. package/dist/cjs/commands/rename.d.ts +2 -0
  56. package/dist/cjs/commands/rename.js +98 -0
  57. package/dist/cjs/commands/search.d.ts +10 -0
  58. package/dist/cjs/commands/search.js +71 -0
  59. package/dist/cjs/commands/select.d.ts +19 -0
  60. package/dist/cjs/commands/select.js +230 -0
  61. package/dist/cjs/commands/status.d.ts +2 -0
  62. package/dist/cjs/commands/status.js +57 -0
  63. package/dist/cjs/commands/store.d.ts +10 -0
  64. package/dist/cjs/commands/store.js +134 -0
  65. package/dist/cjs/commands/subscribe.d.ts +2 -0
  66. package/dist/cjs/commands/subscribe.js +51 -0
  67. package/dist/cjs/commands/uid-copy.d.ts +2 -0
  68. package/dist/cjs/commands/uid-copy.js +19 -0
  69. package/dist/cjs/commands/uid-fetch.d.ts +3 -0
  70. package/dist/cjs/commands/uid-fetch.js +17 -0
  71. package/dist/cjs/commands/uid-search.d.ts +3 -0
  72. package/dist/cjs/commands/uid-search.js +17 -0
  73. package/dist/cjs/commands/uid-store.d.ts +3 -0
  74. package/dist/cjs/commands/uid-store.js +17 -0
  75. package/dist/cjs/commands/unsubscribe.d.ts +2 -0
  76. package/dist/cjs/commands/unsubscribe.js +50 -0
  77. package/dist/cjs/dates.d.ts +64 -0
  78. package/dist/cjs/dates.js +124 -0
  79. package/dist/cjs/deflate-layer.d.ts +83 -0
  80. package/dist/cjs/deflate-layer.js +232 -0
  81. package/dist/cjs/encoded-words.d.ts +15 -0
  82. package/dist/cjs/encoded-words.js +85 -0
  83. package/dist/cjs/envelope.d.ts +33 -0
  84. package/dist/cjs/envelope.js +86 -0
  85. package/dist/cjs/esearch.d.ts +96 -0
  86. package/dist/cjs/esearch.js +190 -0
  87. package/dist/cjs/framing.d.ts +66 -0
  88. package/{lib → dist/cjs}/framing.js +9 -26
  89. package/dist/cjs/index.d.ts +9 -0
  90. package/dist/cjs/index.js +56 -0
  91. package/dist/cjs/list-extensions.d.ts +50 -0
  92. package/dist/cjs/list-extensions.js +35 -0
  93. package/dist/cjs/load-plugins.d.ts +21 -0
  94. package/dist/cjs/load-plugins.js +89 -0
  95. package/dist/cjs/mailbox-name.d.ts +26 -0
  96. package/dist/cjs/mailbox-name.js +127 -0
  97. package/dist/cjs/mimeparser.d.ts +137 -0
  98. package/dist/cjs/mimeparser.js +727 -0
  99. package/dist/cjs/mock-client.d.ts +39 -0
  100. package/dist/cjs/mock-client.js +236 -0
  101. package/dist/cjs/numbers.d.ts +28 -0
  102. package/dist/cjs/numbers.js +52 -0
  103. package/dist/cjs/package.json +3 -0
  104. package/dist/cjs/plugins/acl.d.ts +2 -0
  105. package/dist/cjs/plugins/acl.js +888 -0
  106. package/dist/cjs/plugins/appendlimit.d.ts +16 -0
  107. package/dist/cjs/plugins/appendlimit.js +87 -0
  108. package/dist/cjs/plugins/auth-plain.d.ts +2 -0
  109. package/dist/cjs/plugins/auth-plain.js +89 -0
  110. package/dist/cjs/plugins/binary.d.ts +30 -0
  111. package/dist/cjs/plugins/binary.js +247 -0
  112. package/dist/cjs/plugins/catenate.d.ts +14 -0
  113. package/dist/cjs/plugins/catenate.js +250 -0
  114. package/dist/cjs/plugins/compress.d.ts +7 -0
  115. package/dist/cjs/plugins/compress.js +79 -0
  116. package/dist/cjs/plugins/condstore.d.ts +5 -0
  117. package/dist/cjs/plugins/condstore.js +492 -0
  118. package/dist/cjs/plugins/context-search.d.ts +8 -0
  119. package/dist/cjs/plugins/context-search.js +304 -0
  120. package/dist/cjs/plugins/context-sort.d.ts +6 -0
  121. package/dist/cjs/plugins/context-sort.js +32 -0
  122. package/dist/cjs/plugins/create-special-use.d.ts +7 -0
  123. package/dist/cjs/plugins/create-special-use.js +101 -0
  124. package/dist/cjs/plugins/enable.d.ts +23 -0
  125. package/dist/cjs/plugins/enable.js +127 -0
  126. package/dist/cjs/plugins/esearch.d.ts +6 -0
  127. package/dist/cjs/plugins/esearch.js +142 -0
  128. package/dist/cjs/plugins/esort.d.ts +6 -0
  129. package/dist/cjs/plugins/esort.js +60 -0
  130. package/dist/cjs/plugins/id.d.ts +5 -0
  131. package/dist/cjs/plugins/id.js +123 -0
  132. package/dist/cjs/plugins/idle.d.ts +5 -0
  133. package/dist/cjs/plugins/idle.js +85 -0
  134. package/dist/cjs/plugins/imap4rev2.d.ts +6 -0
  135. package/dist/cjs/plugins/imap4rev2.js +184 -0
  136. package/dist/cjs/plugins/index.d.ts +2 -0
  137. package/dist/cjs/plugins/index.js +119 -0
  138. package/dist/cjs/plugins/list-extended.d.ts +2 -0
  139. package/dist/cjs/plugins/list-extended.js +235 -0
  140. package/dist/cjs/plugins/list-status.d.ts +6 -0
  141. package/dist/cjs/plugins/list-status.js +42 -0
  142. package/dist/cjs/plugins/literalminus.d.ts +8 -0
  143. package/dist/cjs/plugins/literalminus.js +32 -0
  144. package/dist/cjs/plugins/literalplus.d.ts +6 -0
  145. package/dist/cjs/plugins/literalplus.js +30 -0
  146. package/dist/cjs/plugins/logindisabled.d.ts +5 -0
  147. package/dist/cjs/plugins/logindisabled.js +54 -0
  148. package/dist/cjs/plugins/messagelimit.d.ts +19 -0
  149. package/dist/cjs/plugins/messagelimit.js +227 -0
  150. package/dist/cjs/plugins/metadata-server.d.ts +7 -0
  151. package/dist/cjs/plugins/metadata-server.js +24 -0
  152. package/dist/cjs/plugins/metadata.d.ts +11 -0
  153. package/dist/cjs/plugins/metadata.js +436 -0
  154. package/dist/cjs/plugins/move.d.ts +11 -0
  155. package/dist/cjs/plugins/move.js +96 -0
  156. package/dist/cjs/plugins/multiappend.d.ts +12 -0
  157. package/dist/cjs/plugins/multiappend.js +38 -0
  158. package/dist/cjs/plugins/multisearch.d.ts +6 -0
  159. package/dist/cjs/plugins/multisearch.js +263 -0
  160. package/dist/cjs/plugins/namespace.d.ts +5 -0
  161. package/dist/cjs/plugins/namespace.js +57 -0
  162. package/dist/cjs/plugins/notify.d.ts +2 -0
  163. package/dist/cjs/plugins/notify.js +628 -0
  164. package/dist/cjs/plugins/oauthbearer.d.ts +32 -0
  165. package/dist/cjs/plugins/oauthbearer.js +202 -0
  166. package/dist/cjs/plugins/objectid.d.ts +23 -0
  167. package/dist/cjs/plugins/objectid.js +221 -0
  168. package/dist/cjs/plugins/partial.d.ts +6 -0
  169. package/dist/cjs/plugins/partial.js +78 -0
  170. package/dist/cjs/plugins/preview.d.ts +31 -0
  171. package/dist/cjs/plugins/preview.js +378 -0
  172. package/dist/cjs/plugins/qresync.d.ts +11 -0
  173. package/dist/cjs/plugins/qresync.js +473 -0
  174. package/dist/cjs/plugins/quota.d.ts +18 -0
  175. package/dist/cjs/plugins/quota.js +254 -0
  176. package/dist/cjs/plugins/replace.d.ts +14 -0
  177. package/dist/cjs/plugins/replace.js +130 -0
  178. package/dist/cjs/plugins/sasl-ir.d.ts +5 -0
  179. package/dist/cjs/plugins/sasl-ir.js +24 -0
  180. package/dist/cjs/plugins/savedate.d.ts +17 -0
  181. package/dist/cjs/plugins/savedate.js +64 -0
  182. package/dist/cjs/plugins/savelimit.d.ts +10 -0
  183. package/dist/cjs/plugins/savelimit.js +30 -0
  184. package/dist/cjs/plugins/searchres.d.ts +6 -0
  185. package/dist/cjs/plugins/searchres.js +91 -0
  186. package/dist/cjs/plugins/sort-display.d.ts +11 -0
  187. package/dist/cjs/plugins/sort-display.js +37 -0
  188. package/dist/cjs/plugins/sort.d.ts +11 -0
  189. package/dist/cjs/plugins/sort.js +125 -0
  190. package/dist/cjs/plugins/special-use.d.ts +10 -0
  191. package/dist/cjs/plugins/special-use.js +95 -0
  192. package/dist/cjs/plugins/starttls.d.ts +5 -0
  193. package/dist/cjs/plugins/starttls.js +55 -0
  194. package/dist/cjs/plugins/status-size.d.ts +7 -0
  195. package/dist/cjs/plugins/status-size.js +30 -0
  196. package/dist/cjs/plugins/thread-orderedsubject.d.ts +11 -0
  197. package/dist/cjs/plugins/thread-orderedsubject.js +28 -0
  198. package/dist/cjs/plugins/thread-references.d.ts +11 -0
  199. package/dist/cjs/plugins/thread-references.js +28 -0
  200. package/dist/cjs/plugins/uidonly.d.ts +15 -0
  201. package/dist/cjs/plugins/uidonly.js +126 -0
  202. package/dist/cjs/plugins/uidplus.d.ts +15 -0
  203. package/dist/cjs/plugins/uidplus.js +119 -0
  204. package/dist/cjs/plugins/unauthenticate.d.ts +7 -0
  205. package/dist/cjs/plugins/unauthenticate.js +32 -0
  206. package/dist/cjs/plugins/unselect.d.ts +5 -0
  207. package/dist/cjs/plugins/unselect.js +36 -0
  208. package/dist/cjs/plugins/utf8-accept.d.ts +6 -0
  209. package/dist/cjs/plugins/utf8-accept.js +72 -0
  210. package/dist/cjs/plugins/x-gm-ext-1.d.ts +26 -0
  211. package/dist/cjs/plugins/x-gm-ext-1.js +422 -0
  212. package/dist/cjs/plugins/xoauth2.d.ts +2 -0
  213. package/dist/cjs/plugins/xoauth2.js +155 -0
  214. package/dist/cjs/plugins/xtoybird.d.ts +2 -0
  215. package/dist/cjs/plugins/xtoybird.js +236 -0
  216. package/dist/cjs/server.d.ts +876 -0
  217. package/dist/cjs/server.js +2597 -0
  218. package/dist/cjs/smtp-listener.d.ts +13 -0
  219. package/dist/cjs/smtp-listener.js +47 -0
  220. package/dist/cjs/sorting.d.ts +77 -0
  221. package/dist/cjs/sorting.js +290 -0
  222. package/dist/cjs/threading.d.ts +30 -0
  223. package/dist/cjs/threading.js +318 -0
  224. package/dist/cjs/types.d.ts +327 -0
  225. package/dist/cjs/types.js +3 -0
  226. package/dist/cjs/utf8-session.d.ts +17 -0
  227. package/dist/cjs/utf8-session.js +148 -0
  228. package/dist/cjs/vanished.d.ts +21 -0
  229. package/dist/cjs/vanished.js +55 -0
  230. package/dist/esm/addressparser.d.ts +21 -0
  231. package/{lib → dist/esm}/addressparser.js +102 -123
  232. package/dist/esm/arguments.d.ts +31 -0
  233. package/dist/esm/arguments.js +96 -0
  234. package/dist/esm/bodystructure.d.ts +25 -0
  235. package/{lib → dist/esm}/bodystructure.js +17 -33
  236. package/dist/esm/cert.d.ts +2 -0
  237. package/dist/esm/cert.js +4 -0
  238. package/dist/esm/command-states.d.ts +36 -0
  239. package/{lib → dist/esm}/command-states.js +4 -16
  240. package/dist/esm/commands/append.d.ts +88 -0
  241. package/{lib → dist/esm}/commands/append.js +47 -85
  242. package/dist/esm/commands/capability.d.ts +2 -0
  243. package/dist/esm/commands/capability.js +29 -0
  244. package/dist/esm/commands/check.d.ts +2 -0
  245. package/dist/esm/commands/check.js +13 -0
  246. package/dist/esm/commands/close.d.ts +2 -0
  247. package/dist/esm/commands/close.js +20 -0
  248. package/dist/esm/commands/copy.d.ts +30 -0
  249. package/{lib → dist/esm}/commands/copy.js +31 -55
  250. package/dist/esm/commands/create.d.ts +2 -0
  251. package/{lib → dist/esm}/commands/create.js +25 -39
  252. package/dist/esm/commands/delete.d.ts +2 -0
  253. package/{lib → dist/esm}/commands/delete.js +25 -41
  254. package/dist/esm/commands/examine.d.ts +2 -0
  255. package/dist/esm/commands/examine.js +4 -0
  256. package/dist/esm/commands/expunge.d.ts +2 -0
  257. package/dist/esm/commands/expunge.js +17 -0
  258. package/dist/esm/commands/fetch.d.ts +23 -0
  259. package/{lib → dist/esm}/commands/fetch.js +34 -75
  260. package/dist/esm/commands/handlers/fetch.d.ts +12 -0
  261. package/{lib → dist/esm}/commands/handlers/fetch.js +11 -42
  262. package/dist/esm/commands/handlers/flags.d.ts +17 -0
  263. package/{lib → dist/esm}/commands/handlers/flags.js +3 -11
  264. package/dist/esm/commands/handlers/search.d.ts +85 -0
  265. package/{lib → dist/esm}/commands/handlers/search.js +33 -71
  266. package/dist/esm/commands/handlers/status.d.ts +34 -0
  267. package/{lib → dist/esm}/commands/handlers/status.js +1 -9
  268. package/dist/esm/commands/handlers/store.d.ts +3 -0
  269. package/{lib → dist/esm}/commands/handlers/store.js +20 -44
  270. package/dist/esm/commands/index.d.ts +2 -0
  271. package/dist/esm/commands/index.js +55 -0
  272. package/dist/esm/commands/list.d.ts +2 -0
  273. package/dist/esm/commands/list.js +71 -0
  274. package/dist/esm/commands/login.d.ts +2 -0
  275. package/{lib → dist/esm}/commands/login.js +24 -44
  276. package/dist/esm/commands/logout.d.ts +2 -0
  277. package/dist/esm/commands/logout.js +25 -0
  278. package/dist/esm/commands/lsub.d.ts +2 -0
  279. package/dist/esm/commands/lsub.js +64 -0
  280. package/dist/esm/commands/noop.d.ts +2 -0
  281. package/dist/esm/commands/noop.js +13 -0
  282. package/dist/esm/commands/rename.d.ts +2 -0
  283. package/{lib → dist/esm}/commands/rename.js +32 -51
  284. package/dist/esm/commands/search.d.ts +10 -0
  285. package/dist/esm/commands/search.js +54 -0
  286. package/dist/esm/commands/select.d.ts +19 -0
  287. package/dist/esm/commands/select.js +214 -0
  288. package/dist/esm/commands/status.d.ts +2 -0
  289. package/{lib → dist/esm}/commands/status.js +18 -39
  290. package/dist/esm/commands/store.d.ts +10 -0
  291. package/{lib → dist/esm}/commands/store.js +39 -73
  292. package/dist/esm/commands/subscribe.d.ts +2 -0
  293. package/{lib → dist/esm}/commands/subscribe.js +22 -39
  294. package/dist/esm/commands/uid-copy.d.ts +2 -0
  295. package/dist/esm/commands/uid-copy.js +4 -0
  296. package/dist/esm/commands/uid-fetch.d.ts +3 -0
  297. package/dist/esm/commands/uid-fetch.js +3 -0
  298. package/dist/esm/commands/uid-search.d.ts +3 -0
  299. package/dist/esm/commands/uid-search.js +3 -0
  300. package/dist/esm/commands/uid-store.d.ts +3 -0
  301. package/dist/esm/commands/uid-store.js +3 -0
  302. package/dist/esm/commands/unsubscribe.d.ts +2 -0
  303. package/{lib → dist/esm}/commands/unsubscribe.js +22 -37
  304. package/dist/esm/dates.d.ts +64 -0
  305. package/{lib → dist/esm}/dates.js +6 -14
  306. package/dist/esm/deflate-layer.d.ts +83 -0
  307. package/{lib → dist/esm}/deflate-layer.js +9 -26
  308. package/dist/esm/encoded-words.d.ts +15 -0
  309. package/{lib → dist/esm}/encoded-words.js +9 -25
  310. package/dist/esm/envelope.d.ts +33 -0
  311. package/{lib → dist/esm}/envelope.js +8 -19
  312. package/dist/esm/esearch.d.ts +96 -0
  313. package/{lib → dist/esm}/esearch.js +12 -39
  314. package/dist/esm/framing.d.ts +66 -0
  315. package/dist/esm/framing.js +82 -0
  316. package/dist/esm/index.d.ts +9 -0
  317. package/dist/esm/index.js +6 -0
  318. package/dist/esm/list-extensions.d.ts +50 -0
  319. package/{lib → dist/esm}/list-extensions.js +1 -4
  320. package/dist/esm/load-plugins.d.ts +21 -0
  321. package/{lib → dist/esm}/load-plugins.js +9 -43
  322. package/dist/esm/mailbox-name.d.ts +26 -0
  323. package/{lib → dist/esm}/mailbox-name.js +5 -26
  324. package/dist/esm/mimeparser.d.ts +137 -0
  325. package/{lib → dist/esm}/mimeparser.js +74 -152
  326. package/dist/esm/mock-client.d.ts +39 -0
  327. package/{lib → dist/esm}/mock-client.js +26 -40
  328. package/dist/esm/numbers.d.ts +28 -0
  329. package/{lib → dist/esm}/numbers.js +1 -8
  330. package/dist/esm/package.json +3 -0
  331. package/dist/esm/plugins/acl.d.ts +2 -0
  332. package/{lib → dist/esm}/plugins/acl.js +146 -240
  333. package/dist/esm/plugins/appendlimit.d.ts +16 -0
  334. package/{lib → dist/esm}/plugins/appendlimit.js +5 -16
  335. package/dist/esm/plugins/auth-plain.d.ts +2 -0
  336. package/{lib → dist/esm}/plugins/auth-plain.js +11 -31
  337. package/dist/esm/plugins/binary.d.ts +30 -0
  338. package/{lib → dist/esm}/plugins/binary.js +17 -43
  339. package/dist/esm/plugins/catenate.d.ts +14 -0
  340. package/{lib → dist/esm}/plugins/catenate.js +19 -40
  341. package/dist/esm/plugins/compress.d.ts +7 -0
  342. package/dist/esm/plugins/compress.js +61 -0
  343. package/dist/esm/plugins/condstore.d.ts +5 -0
  344. package/{lib → dist/esm}/plugins/condstore.js +66 -152
  345. package/dist/esm/plugins/context-search.d.ts +8 -0
  346. package/{lib → dist/esm}/plugins/context-search.js +53 -88
  347. package/dist/esm/plugins/context-sort.d.ts +6 -0
  348. package/{lib → dist/esm}/plugins/context-sort.js +4 -9
  349. package/dist/esm/plugins/create-special-use.d.ts +7 -0
  350. package/{lib → dist/esm}/plugins/create-special-use.js +33 -55
  351. package/dist/esm/plugins/enable.d.ts +23 -0
  352. package/dist/esm/plugins/enable.js +111 -0
  353. package/dist/esm/plugins/esearch.d.ts +6 -0
  354. package/{lib → dist/esm}/plugins/esearch.js +13 -42
  355. package/dist/esm/plugins/esort.d.ts +6 -0
  356. package/{lib → dist/esm}/plugins/esort.js +7 -25
  357. package/dist/esm/plugins/id.d.ts +5 -0
  358. package/dist/esm/plugins/id.js +108 -0
  359. package/dist/esm/plugins/idle.d.ts +5 -0
  360. package/dist/esm/plugins/idle.js +70 -0
  361. package/dist/esm/plugins/imap4rev2.d.ts +6 -0
  362. package/{lib → dist/esm}/plugins/imap4rev2.js +24 -60
  363. package/dist/esm/plugins/index.d.ts +2 -0
  364. package/dist/esm/plugins/index.js +113 -0
  365. package/dist/esm/plugins/list-extended.d.ts +2 -0
  366. package/{lib → dist/esm}/plugins/list-extended.js +28 -66
  367. package/dist/esm/plugins/list-status.d.ts +6 -0
  368. package/{lib → dist/esm}/plugins/list-status.js +5 -12
  369. package/dist/esm/plugins/literalminus.d.ts +8 -0
  370. package/{lib → dist/esm}/plugins/literalminus.js +2 -5
  371. package/dist/esm/plugins/literalplus.d.ts +6 -0
  372. package/{lib → dist/esm}/plugins/literalplus.js +2 -5
  373. package/dist/esm/plugins/logindisabled.d.ts +5 -0
  374. package/dist/esm/plugins/logindisabled.js +39 -0
  375. package/dist/esm/plugins/messagelimit.d.ts +19 -0
  376. package/{lib → dist/esm}/plugins/messagelimit.js +18 -41
  377. package/dist/esm/plugins/metadata-server.d.ts +7 -0
  378. package/{lib → dist/esm}/plugins/metadata-server.js +3 -7
  379. package/dist/esm/plugins/metadata.d.ts +11 -0
  380. package/dist/esm/plugins/metadata.js +421 -0
  381. package/dist/esm/plugins/move.d.ts +11 -0
  382. package/{lib → dist/esm}/plugins/move.js +37 -66
  383. package/dist/esm/plugins/multiappend.d.ts +12 -0
  384. package/{lib → dist/esm}/plugins/multiappend.js +2 -5
  385. package/dist/esm/plugins/multisearch.d.ts +6 -0
  386. package/{lib → dist/esm}/plugins/multisearch.js +24 -48
  387. package/dist/esm/plugins/namespace.d.ts +5 -0
  388. package/dist/esm/plugins/namespace.js +42 -0
  389. package/dist/esm/plugins/notify.d.ts +2 -0
  390. package/{lib → dist/esm}/plugins/notify.js +90 -134
  391. package/dist/esm/plugins/oauthbearer.d.ts +32 -0
  392. package/{lib → dist/esm}/plugins/oauthbearer.js +18 -48
  393. package/dist/esm/plugins/objectid.d.ts +23 -0
  394. package/{lib → dist/esm}/plugins/objectid.js +21 -58
  395. package/dist/esm/plugins/partial.d.ts +6 -0
  396. package/{lib → dist/esm}/plugins/partial.js +7 -15
  397. package/dist/esm/plugins/preview.d.ts +31 -0
  398. package/{lib → dist/esm}/plugins/preview.js +28 -66
  399. package/dist/esm/plugins/qresync.d.ts +11 -0
  400. package/{lib → dist/esm}/plugins/qresync.js +64 -134
  401. package/dist/esm/plugins/quota.d.ts +18 -0
  402. package/{lib → dist/esm}/plugins/quota.js +89 -135
  403. package/dist/esm/plugins/replace.d.ts +14 -0
  404. package/{lib → dist/esm}/plugins/replace.js +21 -51
  405. package/dist/esm/plugins/sasl-ir.d.ts +5 -0
  406. package/{lib → dist/esm}/plugins/sasl-ir.js +3 -6
  407. package/dist/esm/plugins/savedate.d.ts +17 -0
  408. package/{lib → dist/esm}/plugins/savedate.js +5 -15
  409. package/dist/esm/plugins/savelimit.d.ts +10 -0
  410. package/{lib → dist/esm}/plugins/savelimit.js +3 -6
  411. package/dist/esm/plugins/searchres.d.ts +6 -0
  412. package/{lib → dist/esm}/plugins/searchres.js +13 -22
  413. package/dist/esm/plugins/sort-display.d.ts +11 -0
  414. package/{lib → dist/esm}/plugins/sort-display.js +6 -10
  415. package/dist/esm/plugins/sort.d.ts +11 -0
  416. package/{lib → dist/esm}/plugins/sort.js +24 -46
  417. package/dist/esm/plugins/special-use.d.ts +10 -0
  418. package/{lib → dist/esm}/plugins/special-use.js +9 -24
  419. package/dist/esm/plugins/starttls.d.ts +5 -0
  420. package/{lib → dist/esm}/plugins/starttls.js +20 -37
  421. package/dist/esm/plugins/status-size.d.ts +7 -0
  422. package/{lib → dist/esm}/plugins/status-size.js +4 -11
  423. package/dist/esm/plugins/thread-orderedsubject.d.ts +11 -0
  424. package/{lib → dist/esm}/plugins/thread-orderedsubject.js +3 -6
  425. package/dist/esm/plugins/thread-references.d.ts +11 -0
  426. package/{lib → dist/esm}/plugins/thread-references.js +3 -6
  427. package/dist/esm/plugins/uidonly.d.ts +15 -0
  428. package/{lib → dist/esm}/plugins/uidonly.js +11 -35
  429. package/dist/esm/plugins/uidplus.d.ts +15 -0
  430. package/{lib → dist/esm}/plugins/uidplus.js +25 -45
  431. package/dist/esm/plugins/unauthenticate.d.ts +7 -0
  432. package/dist/esm/plugins/unauthenticate.js +17 -0
  433. package/dist/esm/plugins/unselect.d.ts +5 -0
  434. package/dist/esm/plugins/unselect.js +21 -0
  435. package/dist/esm/plugins/utf8-accept.d.ts +6 -0
  436. package/{lib → dist/esm}/plugins/utf8-accept.js +10 -21
  437. package/dist/esm/plugins/x-gm-ext-1.d.ts +26 -0
  438. package/{lib → dist/esm}/plugins/x-gm-ext-1.js +48 -100
  439. package/dist/esm/plugins/xoauth2.d.ts +2 -0
  440. package/dist/esm/plugins/xoauth2.js +140 -0
  441. package/dist/esm/plugins/xtoybird.d.ts +2 -0
  442. package/dist/esm/plugins/xtoybird.js +218 -0
  443. package/dist/esm/server.d.ts +876 -0
  444. package/dist/esm/server.js +2543 -0
  445. package/dist/esm/smtp-listener.d.ts +13 -0
  446. package/{lib → dist/esm}/smtp-listener.js +5 -12
  447. package/dist/esm/sorting.d.ts +77 -0
  448. package/{lib → dist/esm}/sorting.js +40 -53
  449. package/dist/esm/threading.d.ts +30 -0
  450. package/{lib → dist/esm}/threading.js +29 -70
  451. package/dist/esm/types.d.ts +327 -0
  452. package/dist/esm/types.js +2 -0
  453. package/dist/esm/utf8-session.d.ts +17 -0
  454. package/{lib → dist/esm}/utf8-session.js +15 -25
  455. package/dist/esm/vanished.d.ts +21 -0
  456. package/{lib → dist/esm}/vanished.js +16 -21
  457. package/dist/plugin-help.json +298 -0
  458. package/package.json +54 -11
  459. package/lib/commands/capability.js +0 -47
  460. package/lib/commands/check.js +0 -21
  461. package/lib/commands/close.js +0 -30
  462. package/lib/commands/examine.js +0 -7
  463. package/lib/commands/expunge.js +0 -27
  464. package/lib/commands/list.js +0 -100
  465. package/lib/commands/logout.js +0 -41
  466. package/lib/commands/lsub.js +0 -87
  467. package/lib/commands/noop.js +0 -21
  468. package/lib/commands/search.js +0 -76
  469. package/lib/commands/select.js +0 -289
  470. package/lib/commands/uid copy.js +0 -7
  471. package/lib/commands/uid fetch.js +0 -5
  472. package/lib/commands/uid search.js +0 -5
  473. package/lib/commands/uid store.js +0 -5
  474. package/lib/plugins/compress.js +0 -76
  475. package/lib/plugins/enable.js +0 -155
  476. package/lib/plugins/id.js +0 -138
  477. package/lib/plugins/idle.js +0 -105
  478. package/lib/plugins/logindisabled.js +0 -50
  479. package/lib/plugins/metadata.js +0 -475
  480. package/lib/plugins/namespace.js +0 -67
  481. package/lib/plugins/unauthenticate.js +0 -28
  482. package/lib/plugins/unselect.js +0 -36
  483. package/lib/plugins/xoauth2.js +0 -188
  484. package/lib/plugins/xtoybird.js +0 -282
  485. package/lib/server.js +0 -2880
@@ -0,0 +1,13 @@
1
+ import { SMTPServer } from 'smtp-server';
2
+ import type { IMAPServer } from './types.js';
3
+ /**
4
+ * Starts an SMTP server that appends every received message to the INBOX
5
+ * of the given ImapKit IMAP server. Any sender, recipient and credentials
6
+ * are accepted.
7
+ *
8
+ * @param {Number} smtpPort - port to listen on for SMTP commands
9
+ * @param {Object} imapServer - the ImapKit IMAP server
10
+ * @param {Function} [callback] - function executed when SMTP server is listening
11
+ * @return {SMTPServer} the SMTP server instance, use `close()` to stop it
12
+ */
13
+ export declare function startSMTPServer(smtpPort: number, imapServer: IMAPServer, callback?: (() => void) | null): SMTPServer;
@@ -1,7 +1,4 @@
1
- 'use strict';
2
-
3
- const { SMTPServer } = require('smtp-server');
4
-
1
+ import { SMTPServer } from 'smtp-server';
5
2
  /**
6
3
  * Starts an SMTP server that appends every received message to the INBOX
7
4
  * of the given ImapKit IMAP server. Any sender, recipient and credentials
@@ -12,9 +9,8 @@ const { SMTPServer } = require('smtp-server');
12
9
  * @param {Function} [callback] - function executed when SMTP server is listening
13
10
  * @return {SMTPServer} the SMTP server instance, use `close()` to stop it
14
11
  */
15
- exports.startSMTPServer = function startSMTPServer(smtpPort, imapServer, callback) {
12
+ export function startSMTPServer(smtpPort, imapServer, callback) {
16
13
  const credentials = imapServer.getCredentials();
17
-
18
14
  const server = new SMTPServer({
19
15
  banner: 'ImapKit',
20
16
  key: credentials.key,
@@ -26,7 +22,7 @@ exports.startSMTPServer = function startSMTPServer(smtpPort, imapServer, callbac
26
22
  },
27
23
  onData(stream, session, done) {
28
24
  const chunks = [];
29
- stream.on('data', chunk => chunks.push(chunk));
25
+ stream.on('data', (chunk) => chunks.push(chunk));
30
26
  stream.on('error', done);
31
27
  stream.on('end', () => {
32
28
  // smtp-server has already removed the dot-stuffing (RFC 5321 section 4.5.2)
@@ -35,17 +31,14 @@ exports.startSMTPServer = function startSMTPServer(smtpPort, imapServer, callbac
35
31
  });
36
32
  }
37
33
  });
38
-
39
- server.on('error', err => {
34
+ server.on('error', (err) => {
40
35
  if (imapServer.options.debug) {
41
36
  console.error('SMTP server error: %s', err.message);
42
37
  }
43
38
  });
44
-
45
39
  server.listen(smtpPort, () => {
46
40
  console.log('Incoming SMTP server up and running on port %s', server.server.address().port);
47
41
  callback?.();
48
42
  });
49
-
50
43
  return server;
51
- };
44
+ }
@@ -0,0 +1,77 @@
1
+ import makeSearch from './commands/handlers/search.js';
2
+ import type { Attribute, IMAPConnection, Message, ParsedCommand } from './types.js';
3
+ /**
4
+ * Returns the i;unicode-casemap form of a string (RFC 5051 section 2): every character is titlecased
5
+ * and then decomposed (NFKD). Comparing the UTF-8 octets of the results is the collation that
6
+ * RFC 5256 section 7 requires for SORT and THREAD (I18NLEVEL=1, RFC 5255 section 4.5)
7
+ *
8
+ * @param {String} str Unicode string
9
+ * @return {Buffer} UTF-8 octets to compare with Buffer.compare
10
+ */
11
+ declare function collationKey(str: string): Buffer;
12
+ /**
13
+ * Extracts the base subject (RFC 5256 section 2.1) and tells if the subject marks a reply or a
14
+ * forward (RFC 5256 section 3, REFERENCES): the extraction removed a subj-refwd, a "(fwd)" trailer
15
+ * or a subj-fwd-hdr and subj-fwd-trl pair.
16
+ *
17
+ * @param {String} subject Subject header value as a binary string
18
+ * @return {Object} `{ subject, isReply }`, subject is the base subject as a Unicode string
19
+ */
20
+ declare function baseSubject(subject: string | undefined): {
21
+ subject: string;
22
+ isReply: boolean;
23
+ };
24
+ /**
25
+ * Internal date and time of a message in milliseconds (RFC 5256 ARRIVAL)
26
+ *
27
+ * @param {Object} message Message object
28
+ * @return {Number} timestamp, 0 if the internal date can not be parsed
29
+ */
30
+ declare function arrivalTime(message: Message): number;
31
+ /**
32
+ * Sent date of a message in milliseconds (RFC 5256 section 2.2): the Date header normalized to UTC.
33
+ * An invalid zone is read as UTC and an invalid time as 00:00:00, and if the header is missing or
34
+ * has no valid date, the internal date is used instead.
35
+ *
36
+ * @param {Object} message Message object
37
+ * @return {Number} timestamp
38
+ */
39
+ declare function sentTime(message: Message): number;
40
+ /**
41
+ * addr-mailbox of the first address in a header (RFC 5256 CC, FROM and TO), empty if there is none
42
+ *
43
+ * @param {Object} message Message object
44
+ * @param {String} header "from", "to" or "cc"
45
+ * @return {String} Unicode string
46
+ */
47
+ declare function addressMailbox(message: Message, header: string): string;
48
+ /**
49
+ * DISPLAY sort value of the first address in a header (RFC 5957 sections 3 and 4): the decoded
50
+ * addr-name, or addr-mailbox@addr-host, or addr-mailbox, or the empty string
51
+ *
52
+ * @param {Object} message Message object
53
+ * @param {String} header "from" or "to"
54
+ * @return {String} Unicode string
55
+ */
56
+ declare function displayAddress(message: Message, header: string): string;
57
+ /**
58
+ * Lists the Message IDs in a header value, normalized so that quoting does not matter (RFC 5256
59
+ * section 3, REFERENCES): comments and white space are dropped and a quoted id-left is unquoted.
60
+ * Only ids of the form "<" id-left "@" id-right ">" (RFC 5322 section 3.6.4) are valid.
61
+ *
62
+ * @param {String|Array} value Header value
63
+ * @return {Array} Message IDs
64
+ */
65
+ declare function parseMessageIds(value: string | string[] | undefined): string[];
66
+ /**
67
+ * Runs the search part of SORT and THREAD (RFC 5256 section 3): the charset is mandatory and the
68
+ * criteria follow it, both as in SEARCH. Sends a tagged BAD or NO response if the search fails.
69
+ *
70
+ * @param {Object} connection IMAP connection
71
+ * @param {Object} parsed Parsed command
72
+ * @param {String} data Raw command
73
+ * @param {Array} attributes Command arguments starting with the charset
74
+ * @return {Object|Boolean} `{ list, numbers }` like the SEARCH handler returns, or false after an error
75
+ */
76
+ declare function searchMessages(connection: IMAPConnection, parsed: ParsedCommand, data: string, attributes: Attribute[]): ReturnType<typeof makeSearch> | false;
77
+ export { collationKey, baseSubject, arrivalTime, sentTime, addressMailbox, displayAddress, parseMessageIds, searchMessages };
@@ -1,15 +1,11 @@
1
- 'use strict';
2
-
3
1
  // Message values for SORT and THREAD (RFC 5256): string collation, base subject, sent date,
4
2
  // addresses and Message IDs, and the search step that both commands start with
5
-
6
- const { getMessageData } = require('./mimeparser');
7
- const { processAddress } = require('./envelope');
8
- const { parseDateTime, parseHeaderDate, toTimestamp } = require('./dates');
9
- const makeSearch = require('./commands/handlers/search');
10
- const { badError, criteriaValues, sendSearchError } = makeSearch;
11
- const { decodeHeader } = require('./encoded-words');
12
-
3
+ import { getMessageData } from './mimeparser.js';
4
+ import { processAddress } from './envelope.js';
5
+ import { parseDateTime, parseHeaderDate, toTimestamp } from './dates.js';
6
+ import makeSearch from './commands/handlers/search.js';
7
+ import { badError, criteriaValues, sendSearchError } from './commands/handlers/search.js';
8
+ import { decodeHeader } from './encoded-words.js';
13
9
  // UnicodeData.txt titlecase mappings that differ from the single code point uppercase mapping
14
10
  // that String#toUpperCase gives: the Latin digraphs and the Greek letters with ypogegrammeni
15
11
  const TITLECASE = new Map([
@@ -30,7 +26,6 @@ for (const start of [0x1f80, 0x1f90, 0x1fa0]) {
30
26
  TITLECASE.set(start + i, start + i + 8);
31
27
  }
32
28
  }
33
-
34
29
  /**
35
30
  * Returns the i;unicode-casemap form of a string (RFC 5051 section 2): every character is titlecased
36
31
  * and then decomposed (NFKD). Comparing the UTF-8 octets of the results is the collation that
@@ -53,12 +48,10 @@ function collationKey(str) {
53
48
  }
54
49
  return Buffer.from(result.normalize('NFKD'), 'utf-8');
55
50
  }
56
-
57
51
  // RFC 5256 section 5: subj-refwd = ("re" / ("fw" ["d"])) *WSP [subj-blob] ":", subj-blob = "[" *BLOBCHAR "]" *WSP
58
52
  const SUBJ_BLOB = '\\[[^[\\]]*\\] *';
59
53
  const SUBJ_LEADER = new RegExp('^(?:' + SUBJ_BLOB + ')*(?:re|fwd?) *(?:' + SUBJ_BLOB + ')?:', 'i');
60
54
  const SUBJ_BLOB_PREFIX = new RegExp('^' + SUBJ_BLOB);
61
-
62
55
  /**
63
56
  * Extracts the base subject (RFC 5256 section 2.1) and tells if the subject marks a reply or a
64
57
  * forward (RFC 5256 section 3, REFERENCES): the extraction removed a subj-refwd, a "(fwd)" trailer
@@ -69,55 +62,54 @@ const SUBJ_BLOB_PREFIX = new RegExp('^' + SUBJ_BLOB);
69
62
  */
70
63
  function baseSubject(subject) {
71
64
  let isReply = false;
72
-
73
65
  // (1) decode encoded words, tabs and continuations become a space, runs of spaces one space
74
66
  let text = decodeHeader(subject)
75
67
  .replace(/\r?\n(?=[ \t])/g, '')
76
68
  .replace(/[\t\r\n]/g, ' ')
77
69
  .replace(/ {2,}/g, ' ');
78
-
79
70
  for (;;) {
80
71
  // (2) remove subj-trailer text until there is none
81
72
  let end = text.length;
82
73
  for (;;) {
83
74
  if (text.charAt(end - 1) === ' ') {
84
75
  end--;
85
- } else if (end >= 5 && text.substring(end - 5, end).toLowerCase() === '(fwd)') {
76
+ }
77
+ else if (end >= 5 && text.substring(end - 5, end).toLowerCase() === '(fwd)') {
86
78
  isReply = true;
87
79
  end -= 5;
88
- } else {
80
+ }
81
+ else {
89
82
  break;
90
83
  }
91
84
  }
92
85
  text = text.substring(0, end);
93
-
94
86
  // (3) remove subj-leader text, (4) remove a subj-blob prefix if a subj-base remains, (5) repeat
95
87
  for (;;) {
96
88
  let match;
97
89
  if (text.charAt(0) === ' ') {
98
90
  text = text.substr(1);
99
- } else if ((match = text.match(SUBJ_LEADER))) {
91
+ }
92
+ else if ((match = text.match(SUBJ_LEADER))) {
100
93
  isReply = true;
101
94
  text = text.substr(match[0].length);
102
- } else if ((match = text.match(SUBJ_BLOB_PREFIX)) && match[0].length < text.length) {
95
+ }
96
+ else if ((match = text.match(SUBJ_BLOB_PREFIX)) && match[0].length < text.length) {
103
97
  text = text.substr(match[0].length);
104
- } else {
98
+ }
99
+ else {
105
100
  break;
106
101
  }
107
102
  }
108
-
109
103
  // (6) unwrap "[fwd: ... ]" and start over from step (2)
110
104
  if (/^\[fwd:/i.test(text) && /\]$/.test(text)) {
111
105
  isReply = true;
112
106
  text = text.slice(5, -1);
113
107
  continue;
114
108
  }
115
-
116
109
  // (7) the remaining text is the base subject
117
110
  return { subject: text, isReply };
118
111
  }
119
112
  }
120
-
121
113
  /**
122
114
  * Internal date and time of a message in milliseconds (RFC 5256 ARRIVAL)
123
115
  *
@@ -128,7 +120,6 @@ function arrivalTime(message) {
128
120
  const date = parseDateTime(message.internaldate);
129
121
  return date ? toTimestamp(date) : 0;
130
122
  }
131
-
132
123
  /**
133
124
  * Sent date of a message in milliseconds (RFC 5256 section 2.2): the Date header normalized to UTC.
134
125
  * An invalid zone is read as UTC and an invalid time as 00:00:00, and if the header is missing or
@@ -142,12 +133,12 @@ function sentTime(message) {
142
133
  if (!date) {
143
134
  return arrivalTime(message);
144
135
  }
136
+ // the parsers set minutes and seconds together with hours
145
137
  if (date.hours === undefined || date.hours > 23 || date.minutes > 59 || date.seconds > 60) {
146
138
  Object.assign(date, { hours: 0, minutes: 0, seconds: 0 });
147
139
  }
148
140
  return toTimestamp(date);
149
141
  }
150
-
151
142
  /**
152
143
  * Returns the first address of an envelope address list, as [name, adl, mailbox, host]
153
144
  */
@@ -155,7 +146,6 @@ function firstAddress(message, header) {
155
146
  const list = processAddress(getMessageData(message).tree.parsedHeader[header]);
156
147
  return (list && list[0]) || null;
157
148
  }
158
-
159
149
  /**
160
150
  * addr-mailbox of the first address in a header (RFC 5256 CC, FROM and TO), empty if there is none
161
151
  *
@@ -167,7 +157,6 @@ function addressMailbox(message, header) {
167
157
  const address = firstAddress(message, header);
168
158
  return address && address[2] ? decodeHeader(address[2]) : '';
169
159
  }
170
-
171
160
  /**
172
161
  * DISPLAY sort value of the first address in a header (RFC 5957 sections 3 and 4): the decoded
173
162
  * addr-name, or addr-mailbox@addr-host, or addr-mailbox, or the empty string
@@ -184,7 +173,6 @@ function displayAddress(message, header) {
184
173
  }
185
174
  return decodeHeader(address[3] ? address[2] + '@' + address[3] : address[2]);
186
175
  }
187
-
188
176
  /**
189
177
  * Lists the Message IDs in a header value, normalized so that quoting does not matter (RFC 5256
190
178
  * section 3, REFERENCES): comments and white space are dropped and a quoted id-left is unquoted.
@@ -199,7 +187,6 @@ function parseMessageIds(value) {
199
187
  let depth = 0;
200
188
  let quoted = false;
201
189
  let current = null;
202
-
203
190
  for (let i = 0; i < str.length; i++) {
204
191
  const char = str.charAt(i);
205
192
  if (quoted) {
@@ -208,26 +195,35 @@ function parseMessageIds(value) {
208
195
  current += str.charAt(i + 1);
209
196
  }
210
197
  i++;
211
- } else if (char === '"') {
198
+ }
199
+ else if (char === '"') {
212
200
  quoted = false;
213
- } else if (current !== null) {
201
+ }
202
+ else if (current !== null) {
214
203
  current += char;
215
204
  }
216
- } else if (depth) {
205
+ }
206
+ else if (depth) {
217
207
  if (char === '\\') {
218
208
  i++;
219
- } else if (char === '(') {
209
+ }
210
+ else if (char === '(') {
220
211
  depth++;
221
- } else if (char === ')') {
212
+ }
213
+ else if (char === ')') {
222
214
  depth--;
223
215
  }
224
- } else if (char === '"') {
216
+ }
217
+ else if (char === '"') {
225
218
  quoted = true;
226
- } else if (char === '(') {
219
+ }
220
+ else if (char === '(') {
227
221
  depth++;
228
- } else if (char === '<') {
222
+ }
223
+ else if (char === '<') {
229
224
  current = '';
230
- } else if (char === '>') {
225
+ }
226
+ else if (char === '>') {
231
227
  if (current !== null) {
232
228
  const at = current.lastIndexOf('@');
233
229
  if (at > 0 && at < current.length - 1) {
@@ -235,13 +231,13 @@ function parseMessageIds(value) {
235
231
  }
236
232
  }
237
233
  current = null;
238
- } else if (current !== null && !/\s/.test(char)) {
234
+ }
235
+ else if (current !== null && !/\s/.test(char)) {
239
236
  current += char;
240
237
  }
241
238
  }
242
239
  return ids;
243
240
  }
244
-
245
241
  /**
246
242
  * Runs the search part of SORT and THREAD (RFC 5256 section 3): the charset is mandatory and the
247
243
  * criteria follow it, both as in SEARCH. Sends a tagged BAD or NO response if the search fails.
@@ -273,19 +269,10 @@ function searchMessages(connection, parsed, data, attributes) {
273
269
  }
274
270
  const params = ['CHARSET', charset.value].concat(criteria);
275
271
  return makeSearch(connection, connection.getSessionMessages(), params);
276
- } catch (E) {
272
+ }
273
+ catch (E) {
277
274
  sendSearchError(connection, parsed, data, E, command + ' FAILED');
278
275
  return false;
279
276
  }
280
277
  }
281
-
282
- module.exports = {
283
- collationKey,
284
- baseSubject,
285
- arrivalTime,
286
- sentTime,
287
- addressMailbox,
288
- displayAddress,
289
- parseMessageIds,
290
- searchMessages
291
- };
278
+ export { collationKey, baseSubject, arrivalTime, sentTime, addressMailbox, displayAddress, parseMessageIds, searchMessages };
@@ -0,0 +1,30 @@
1
+ import type { IMAPServer, Message } from './types.js';
2
+ /** A searched message with the values that threading looks at */
3
+ export interface ThreadEntry {
4
+ message: Message;
5
+ seq: number;
6
+ /** sent date, see sentTime() */
7
+ date: number;
8
+ /** the base subject as a binary string of its collation key, and if the subject marks a reply or forward */
9
+ subject: {
10
+ id: string;
11
+ isReply: boolean;
12
+ };
13
+ }
14
+ /** A node of a thread tree, a node without an entry is a dummy */
15
+ export interface ThreadNode {
16
+ entry: ThreadEntry | null;
17
+ parent: ThreadNode | null;
18
+ children: ThreadNode[];
19
+ }
20
+ /** A threading algorithm, returns the top level nodes */
21
+ export type ThreadAlgorithm = (entries: ThreadEntry[]) => ThreadNode[];
22
+ /**
23
+ * Adds the THREAD and UID THREAD commands, unless another algorithm plugin did already, and the
24
+ * THREAD=<algorithm> capability
25
+ *
26
+ * @param {Object} server IMAP server
27
+ * @param {String} algorithm "ORDEREDSUBJECT" or "REFERENCES"
28
+ */
29
+ declare function addThreadAlgorithm(server: IMAPServer, algorithm: string): void;
30
+ export { addThreadAlgorithm };