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.
- package/README.md +32 -19
- package/bin/imapkit.js +12 -16
- package/dist/cjs/addressparser.d.ts +21 -0
- package/dist/cjs/addressparser.js +277 -0
- package/dist/cjs/arguments.d.ts +31 -0
- package/{lib → dist/cjs}/arguments.js +9 -21
- package/dist/cjs/bodystructure.d.ts +25 -0
- package/dist/cjs/bodystructure.js +150 -0
- package/dist/cjs/cert.d.ts +2 -0
- package/dist/cjs/cert.js +7 -0
- package/dist/cjs/command-states.d.ts +36 -0
- package/dist/cjs/command-states.js +102 -0
- package/dist/cjs/commands/append.d.ts +88 -0
- package/dist/cjs/commands/append.js +299 -0
- package/dist/cjs/commands/capability.d.ts +2 -0
- package/dist/cjs/commands/capability.js +44 -0
- package/dist/cjs/commands/check.d.ts +2 -0
- package/dist/cjs/commands/check.js +28 -0
- package/dist/cjs/commands/close.d.ts +2 -0
- package/dist/cjs/commands/close.js +35 -0
- package/dist/cjs/commands/copy.d.ts +30 -0
- package/dist/cjs/commands/copy.js +107 -0
- package/dist/cjs/commands/create.d.ts +2 -0
- package/dist/cjs/commands/create.js +53 -0
- package/dist/cjs/commands/delete.d.ts +2 -0
- package/dist/cjs/commands/delete.js +63 -0
- package/dist/cjs/commands/examine.d.ts +2 -0
- package/dist/cjs/commands/examine.js +19 -0
- package/dist/cjs/commands/expunge.d.ts +2 -0
- package/dist/cjs/commands/expunge.js +32 -0
- package/dist/cjs/commands/fetch.d.ts +23 -0
- package/dist/cjs/commands/fetch.js +208 -0
- package/dist/cjs/commands/handlers/fetch.d.ts +12 -0
- package/dist/cjs/commands/handlers/fetch.js +195 -0
- package/dist/cjs/commands/handlers/flags.d.ts +17 -0
- package/dist/cjs/commands/handlers/flags.js +39 -0
- package/dist/cjs/commands/handlers/search.d.ts +85 -0
- package/dist/cjs/commands/handlers/search.js +504 -0
- package/dist/cjs/commands/handlers/status.d.ts +34 -0
- package/dist/cjs/commands/handlers/status.js +81 -0
- package/dist/cjs/commands/handlers/store.d.ts +3 -0
- package/dist/cjs/commands/handlers/store.js +117 -0
- package/dist/cjs/commands/index.d.ts +2 -0
- package/dist/cjs/commands/index.js +61 -0
- package/dist/cjs/commands/list.d.ts +2 -0
- package/dist/cjs/commands/list.js +86 -0
- package/dist/cjs/commands/login.d.ts +2 -0
- package/dist/cjs/commands/login.js +62 -0
- package/dist/cjs/commands/logout.d.ts +2 -0
- package/dist/cjs/commands/logout.js +40 -0
- package/dist/cjs/commands/lsub.d.ts +2 -0
- package/dist/cjs/commands/lsub.js +79 -0
- package/dist/cjs/commands/noop.d.ts +2 -0
- package/dist/cjs/commands/noop.js +28 -0
- package/dist/cjs/commands/rename.d.ts +2 -0
- package/dist/cjs/commands/rename.js +98 -0
- package/dist/cjs/commands/search.d.ts +10 -0
- package/dist/cjs/commands/search.js +71 -0
- package/dist/cjs/commands/select.d.ts +19 -0
- package/dist/cjs/commands/select.js +230 -0
- package/dist/cjs/commands/status.d.ts +2 -0
- package/dist/cjs/commands/status.js +57 -0
- package/dist/cjs/commands/store.d.ts +10 -0
- package/dist/cjs/commands/store.js +134 -0
- package/dist/cjs/commands/subscribe.d.ts +2 -0
- package/dist/cjs/commands/subscribe.js +51 -0
- package/dist/cjs/commands/uid-copy.d.ts +2 -0
- package/dist/cjs/commands/uid-copy.js +19 -0
- package/dist/cjs/commands/uid-fetch.d.ts +3 -0
- package/dist/cjs/commands/uid-fetch.js +17 -0
- package/dist/cjs/commands/uid-search.d.ts +3 -0
- package/dist/cjs/commands/uid-search.js +17 -0
- package/dist/cjs/commands/uid-store.d.ts +3 -0
- package/dist/cjs/commands/uid-store.js +17 -0
- package/dist/cjs/commands/unsubscribe.d.ts +2 -0
- package/dist/cjs/commands/unsubscribe.js +50 -0
- package/dist/cjs/dates.d.ts +64 -0
- package/dist/cjs/dates.js +124 -0
- package/dist/cjs/deflate-layer.d.ts +83 -0
- package/dist/cjs/deflate-layer.js +232 -0
- package/dist/cjs/encoded-words.d.ts +15 -0
- package/dist/cjs/encoded-words.js +85 -0
- package/dist/cjs/envelope.d.ts +33 -0
- package/dist/cjs/envelope.js +86 -0
- package/dist/cjs/esearch.d.ts +96 -0
- package/dist/cjs/esearch.js +190 -0
- package/dist/cjs/framing.d.ts +66 -0
- package/{lib → dist/cjs}/framing.js +9 -26
- package/dist/cjs/index.d.ts +9 -0
- package/dist/cjs/index.js +56 -0
- package/dist/cjs/list-extensions.d.ts +50 -0
- package/dist/cjs/list-extensions.js +35 -0
- package/dist/cjs/load-plugins.d.ts +21 -0
- package/dist/cjs/load-plugins.js +89 -0
- package/dist/cjs/mailbox-name.d.ts +26 -0
- package/dist/cjs/mailbox-name.js +127 -0
- package/dist/cjs/mimeparser.d.ts +137 -0
- package/dist/cjs/mimeparser.js +727 -0
- package/dist/cjs/mock-client.d.ts +39 -0
- package/dist/cjs/mock-client.js +236 -0
- package/dist/cjs/numbers.d.ts +28 -0
- package/dist/cjs/numbers.js +52 -0
- package/dist/cjs/package.json +3 -0
- package/dist/cjs/plugins/acl.d.ts +2 -0
- package/dist/cjs/plugins/acl.js +888 -0
- package/dist/cjs/plugins/appendlimit.d.ts +16 -0
- package/dist/cjs/plugins/appendlimit.js +87 -0
- package/dist/cjs/plugins/auth-plain.d.ts +2 -0
- package/dist/cjs/plugins/auth-plain.js +89 -0
- package/dist/cjs/plugins/binary.d.ts +30 -0
- package/dist/cjs/plugins/binary.js +247 -0
- package/dist/cjs/plugins/catenate.d.ts +14 -0
- package/dist/cjs/plugins/catenate.js +250 -0
- package/dist/cjs/plugins/compress.d.ts +7 -0
- package/dist/cjs/plugins/compress.js +79 -0
- package/dist/cjs/plugins/condstore.d.ts +5 -0
- package/dist/cjs/plugins/condstore.js +492 -0
- package/dist/cjs/plugins/context-search.d.ts +8 -0
- package/dist/cjs/plugins/context-search.js +304 -0
- package/dist/cjs/plugins/context-sort.d.ts +6 -0
- package/dist/cjs/plugins/context-sort.js +32 -0
- package/dist/cjs/plugins/create-special-use.d.ts +7 -0
- package/dist/cjs/plugins/create-special-use.js +101 -0
- package/dist/cjs/plugins/enable.d.ts +23 -0
- package/dist/cjs/plugins/enable.js +127 -0
- package/dist/cjs/plugins/esearch.d.ts +6 -0
- package/dist/cjs/plugins/esearch.js +142 -0
- package/dist/cjs/plugins/esort.d.ts +6 -0
- package/dist/cjs/plugins/esort.js +60 -0
- package/dist/cjs/plugins/id.d.ts +5 -0
- package/dist/cjs/plugins/id.js +123 -0
- package/dist/cjs/plugins/idle.d.ts +5 -0
- package/dist/cjs/plugins/idle.js +85 -0
- package/dist/cjs/plugins/imap4rev2.d.ts +6 -0
- package/dist/cjs/plugins/imap4rev2.js +184 -0
- package/dist/cjs/plugins/index.d.ts +2 -0
- package/dist/cjs/plugins/index.js +119 -0
- package/dist/cjs/plugins/list-extended.d.ts +2 -0
- package/dist/cjs/plugins/list-extended.js +235 -0
- package/dist/cjs/plugins/list-status.d.ts +6 -0
- package/dist/cjs/plugins/list-status.js +42 -0
- package/dist/cjs/plugins/literalminus.d.ts +8 -0
- package/dist/cjs/plugins/literalminus.js +32 -0
- package/dist/cjs/plugins/literalplus.d.ts +6 -0
- package/dist/cjs/plugins/literalplus.js +30 -0
- package/dist/cjs/plugins/logindisabled.d.ts +5 -0
- package/dist/cjs/plugins/logindisabled.js +54 -0
- package/dist/cjs/plugins/messagelimit.d.ts +19 -0
- package/dist/cjs/plugins/messagelimit.js +227 -0
- package/dist/cjs/plugins/metadata-server.d.ts +7 -0
- package/dist/cjs/plugins/metadata-server.js +24 -0
- package/dist/cjs/plugins/metadata.d.ts +11 -0
- package/dist/cjs/plugins/metadata.js +436 -0
- package/dist/cjs/plugins/move.d.ts +11 -0
- package/dist/cjs/plugins/move.js +96 -0
- package/dist/cjs/plugins/multiappend.d.ts +12 -0
- package/dist/cjs/plugins/multiappend.js +38 -0
- package/dist/cjs/plugins/multisearch.d.ts +6 -0
- package/dist/cjs/plugins/multisearch.js +263 -0
- package/dist/cjs/plugins/namespace.d.ts +5 -0
- package/dist/cjs/plugins/namespace.js +57 -0
- package/dist/cjs/plugins/notify.d.ts +2 -0
- package/dist/cjs/plugins/notify.js +628 -0
- package/dist/cjs/plugins/oauthbearer.d.ts +32 -0
- package/dist/cjs/plugins/oauthbearer.js +202 -0
- package/dist/cjs/plugins/objectid.d.ts +23 -0
- package/dist/cjs/plugins/objectid.js +221 -0
- package/dist/cjs/plugins/partial.d.ts +6 -0
- package/dist/cjs/plugins/partial.js +78 -0
- package/dist/cjs/plugins/preview.d.ts +31 -0
- package/dist/cjs/plugins/preview.js +378 -0
- package/dist/cjs/plugins/qresync.d.ts +11 -0
- package/dist/cjs/plugins/qresync.js +473 -0
- package/dist/cjs/plugins/quota.d.ts +18 -0
- package/dist/cjs/plugins/quota.js +254 -0
- package/dist/cjs/plugins/replace.d.ts +14 -0
- package/dist/cjs/plugins/replace.js +130 -0
- package/dist/cjs/plugins/sasl-ir.d.ts +5 -0
- package/dist/cjs/plugins/sasl-ir.js +24 -0
- package/dist/cjs/plugins/savedate.d.ts +17 -0
- package/dist/cjs/plugins/savedate.js +64 -0
- package/dist/cjs/plugins/savelimit.d.ts +10 -0
- package/dist/cjs/plugins/savelimit.js +30 -0
- package/dist/cjs/plugins/searchres.d.ts +6 -0
- package/dist/cjs/plugins/searchres.js +91 -0
- package/dist/cjs/plugins/sort-display.d.ts +11 -0
- package/dist/cjs/plugins/sort-display.js +37 -0
- package/dist/cjs/plugins/sort.d.ts +11 -0
- package/dist/cjs/plugins/sort.js +125 -0
- package/dist/cjs/plugins/special-use.d.ts +10 -0
- package/dist/cjs/plugins/special-use.js +95 -0
- package/dist/cjs/plugins/starttls.d.ts +5 -0
- package/dist/cjs/plugins/starttls.js +55 -0
- package/dist/cjs/plugins/status-size.d.ts +7 -0
- package/dist/cjs/plugins/status-size.js +30 -0
- package/dist/cjs/plugins/thread-orderedsubject.d.ts +11 -0
- package/dist/cjs/plugins/thread-orderedsubject.js +28 -0
- package/dist/cjs/plugins/thread-references.d.ts +11 -0
- package/dist/cjs/plugins/thread-references.js +28 -0
- package/dist/cjs/plugins/uidonly.d.ts +15 -0
- package/dist/cjs/plugins/uidonly.js +126 -0
- package/dist/cjs/plugins/uidplus.d.ts +15 -0
- package/dist/cjs/plugins/uidplus.js +119 -0
- package/dist/cjs/plugins/unauthenticate.d.ts +7 -0
- package/dist/cjs/plugins/unauthenticate.js +32 -0
- package/dist/cjs/plugins/unselect.d.ts +5 -0
- package/dist/cjs/plugins/unselect.js +36 -0
- package/dist/cjs/plugins/utf8-accept.d.ts +6 -0
- package/dist/cjs/plugins/utf8-accept.js +72 -0
- package/dist/cjs/plugins/x-gm-ext-1.d.ts +26 -0
- package/dist/cjs/plugins/x-gm-ext-1.js +422 -0
- package/dist/cjs/plugins/xoauth2.d.ts +2 -0
- package/dist/cjs/plugins/xoauth2.js +155 -0
- package/dist/cjs/plugins/xtoybird.d.ts +2 -0
- package/dist/cjs/plugins/xtoybird.js +236 -0
- package/dist/cjs/server.d.ts +876 -0
- package/dist/cjs/server.js +2597 -0
- package/dist/cjs/smtp-listener.d.ts +13 -0
- package/dist/cjs/smtp-listener.js +47 -0
- package/dist/cjs/sorting.d.ts +77 -0
- package/dist/cjs/sorting.js +290 -0
- package/dist/cjs/threading.d.ts +30 -0
- package/dist/cjs/threading.js +318 -0
- package/dist/cjs/types.d.ts +327 -0
- package/dist/cjs/types.js +3 -0
- package/dist/cjs/utf8-session.d.ts +17 -0
- package/dist/cjs/utf8-session.js +148 -0
- package/dist/cjs/vanished.d.ts +21 -0
- package/dist/cjs/vanished.js +55 -0
- package/dist/esm/addressparser.d.ts +21 -0
- package/{lib → dist/esm}/addressparser.js +102 -123
- package/dist/esm/arguments.d.ts +31 -0
- package/dist/esm/arguments.js +96 -0
- package/dist/esm/bodystructure.d.ts +25 -0
- package/{lib → dist/esm}/bodystructure.js +17 -33
- package/dist/esm/cert.d.ts +2 -0
- package/dist/esm/cert.js +4 -0
- package/dist/esm/command-states.d.ts +36 -0
- package/{lib → dist/esm}/command-states.js +4 -16
- package/dist/esm/commands/append.d.ts +88 -0
- package/{lib → dist/esm}/commands/append.js +47 -85
- package/dist/esm/commands/capability.d.ts +2 -0
- package/dist/esm/commands/capability.js +29 -0
- package/dist/esm/commands/check.d.ts +2 -0
- package/dist/esm/commands/check.js +13 -0
- package/dist/esm/commands/close.d.ts +2 -0
- package/dist/esm/commands/close.js +20 -0
- package/dist/esm/commands/copy.d.ts +30 -0
- package/{lib → dist/esm}/commands/copy.js +31 -55
- package/dist/esm/commands/create.d.ts +2 -0
- package/{lib → dist/esm}/commands/create.js +25 -39
- package/dist/esm/commands/delete.d.ts +2 -0
- package/{lib → dist/esm}/commands/delete.js +25 -41
- package/dist/esm/commands/examine.d.ts +2 -0
- package/dist/esm/commands/examine.js +4 -0
- package/dist/esm/commands/expunge.d.ts +2 -0
- package/dist/esm/commands/expunge.js +17 -0
- package/dist/esm/commands/fetch.d.ts +23 -0
- package/{lib → dist/esm}/commands/fetch.js +33 -74
- package/dist/esm/commands/handlers/fetch.d.ts +12 -0
- package/{lib → dist/esm}/commands/handlers/fetch.js +11 -42
- package/dist/esm/commands/handlers/flags.d.ts +17 -0
- package/{lib → dist/esm}/commands/handlers/flags.js +3 -11
- package/dist/esm/commands/handlers/search.d.ts +85 -0
- package/{lib → dist/esm}/commands/handlers/search.js +33 -71
- package/dist/esm/commands/handlers/status.d.ts +34 -0
- package/{lib → dist/esm}/commands/handlers/status.js +1 -9
- package/dist/esm/commands/handlers/store.d.ts +3 -0
- package/{lib → dist/esm}/commands/handlers/store.js +20 -44
- package/dist/esm/commands/index.d.ts +2 -0
- package/dist/esm/commands/index.js +55 -0
- package/dist/esm/commands/list.d.ts +2 -0
- package/dist/esm/commands/list.js +71 -0
- package/dist/esm/commands/login.d.ts +2 -0
- package/{lib → dist/esm}/commands/login.js +24 -44
- package/dist/esm/commands/logout.d.ts +2 -0
- package/dist/esm/commands/logout.js +25 -0
- package/dist/esm/commands/lsub.d.ts +2 -0
- package/dist/esm/commands/lsub.js +64 -0
- package/dist/esm/commands/noop.d.ts +2 -0
- package/dist/esm/commands/noop.js +13 -0
- package/dist/esm/commands/rename.d.ts +2 -0
- package/{lib → dist/esm}/commands/rename.js +32 -51
- package/dist/esm/commands/search.d.ts +10 -0
- package/dist/esm/commands/search.js +54 -0
- package/dist/esm/commands/select.d.ts +19 -0
- package/dist/esm/commands/select.js +214 -0
- package/dist/esm/commands/status.d.ts +2 -0
- package/{lib → dist/esm}/commands/status.js +18 -39
- package/dist/esm/commands/store.d.ts +10 -0
- package/{lib → dist/esm}/commands/store.js +39 -73
- package/dist/esm/commands/subscribe.d.ts +2 -0
- package/{lib → dist/esm}/commands/subscribe.js +22 -39
- package/dist/esm/commands/uid-copy.d.ts +2 -0
- package/dist/esm/commands/uid-copy.js +4 -0
- package/dist/esm/commands/uid-fetch.d.ts +3 -0
- package/dist/esm/commands/uid-fetch.js +3 -0
- package/dist/esm/commands/uid-search.d.ts +3 -0
- package/dist/esm/commands/uid-search.js +3 -0
- package/dist/esm/commands/uid-store.d.ts +3 -0
- package/dist/esm/commands/uid-store.js +3 -0
- package/dist/esm/commands/unsubscribe.d.ts +2 -0
- package/{lib → dist/esm}/commands/unsubscribe.js +22 -37
- package/dist/esm/dates.d.ts +64 -0
- package/{lib → dist/esm}/dates.js +6 -14
- package/dist/esm/deflate-layer.d.ts +83 -0
- package/{lib → dist/esm}/deflate-layer.js +9 -26
- package/dist/esm/encoded-words.d.ts +15 -0
- package/{lib → dist/esm}/encoded-words.js +9 -25
- package/dist/esm/envelope.d.ts +33 -0
- package/{lib → dist/esm}/envelope.js +8 -19
- package/dist/esm/esearch.d.ts +96 -0
- package/{lib → dist/esm}/esearch.js +12 -39
- package/dist/esm/framing.d.ts +66 -0
- package/dist/esm/framing.js +82 -0
- package/dist/esm/index.d.ts +9 -0
- package/dist/esm/index.js +6 -0
- package/dist/esm/list-extensions.d.ts +50 -0
- package/{lib → dist/esm}/list-extensions.js +1 -4
- package/dist/esm/load-plugins.d.ts +21 -0
- package/{lib → dist/esm}/load-plugins.js +9 -43
- package/dist/esm/mailbox-name.d.ts +26 -0
- package/{lib → dist/esm}/mailbox-name.js +5 -26
- package/dist/esm/mimeparser.d.ts +137 -0
- package/{lib → dist/esm}/mimeparser.js +74 -152
- package/dist/esm/mock-client.d.ts +39 -0
- package/{lib → dist/esm}/mock-client.js +26 -40
- package/dist/esm/numbers.d.ts +28 -0
- package/{lib → dist/esm}/numbers.js +1 -8
- package/dist/esm/package.json +3 -0
- package/dist/esm/plugins/acl.d.ts +2 -0
- package/{lib → dist/esm}/plugins/acl.js +146 -240
- package/dist/esm/plugins/appendlimit.d.ts +16 -0
- package/{lib → dist/esm}/plugins/appendlimit.js +5 -16
- package/dist/esm/plugins/auth-plain.d.ts +2 -0
- package/{lib → dist/esm}/plugins/auth-plain.js +11 -31
- package/dist/esm/plugins/binary.d.ts +30 -0
- package/{lib → dist/esm}/plugins/binary.js +17 -43
- package/dist/esm/plugins/catenate.d.ts +14 -0
- package/{lib → dist/esm}/plugins/catenate.js +19 -40
- package/dist/esm/plugins/compress.d.ts +7 -0
- package/dist/esm/plugins/compress.js +61 -0
- package/dist/esm/plugins/condstore.d.ts +5 -0
- package/{lib → dist/esm}/plugins/condstore.js +66 -152
- package/dist/esm/plugins/context-search.d.ts +8 -0
- package/{lib → dist/esm}/plugins/context-search.js +53 -88
- package/dist/esm/plugins/context-sort.d.ts +6 -0
- package/{lib → dist/esm}/plugins/context-sort.js +4 -9
- package/dist/esm/plugins/create-special-use.d.ts +7 -0
- package/{lib → dist/esm}/plugins/create-special-use.js +33 -55
- package/dist/esm/plugins/enable.d.ts +23 -0
- package/dist/esm/plugins/enable.js +111 -0
- package/dist/esm/plugins/esearch.d.ts +6 -0
- package/{lib → dist/esm}/plugins/esearch.js +13 -42
- package/dist/esm/plugins/esort.d.ts +6 -0
- package/{lib → dist/esm}/plugins/esort.js +7 -25
- package/dist/esm/plugins/id.d.ts +5 -0
- package/dist/esm/plugins/id.js +108 -0
- package/dist/esm/plugins/idle.d.ts +5 -0
- package/dist/esm/plugins/idle.js +70 -0
- package/dist/esm/plugins/imap4rev2.d.ts +6 -0
- package/{lib → dist/esm}/plugins/imap4rev2.js +24 -60
- package/dist/esm/plugins/index.d.ts +2 -0
- package/dist/esm/plugins/index.js +113 -0
- package/dist/esm/plugins/list-extended.d.ts +2 -0
- package/{lib → dist/esm}/plugins/list-extended.js +28 -66
- package/dist/esm/plugins/list-status.d.ts +6 -0
- package/{lib → dist/esm}/plugins/list-status.js +5 -12
- package/dist/esm/plugins/literalminus.d.ts +8 -0
- package/{lib → dist/esm}/plugins/literalminus.js +2 -5
- package/dist/esm/plugins/literalplus.d.ts +6 -0
- package/{lib → dist/esm}/plugins/literalplus.js +2 -5
- package/dist/esm/plugins/logindisabled.d.ts +5 -0
- package/dist/esm/plugins/logindisabled.js +39 -0
- package/dist/esm/plugins/messagelimit.d.ts +19 -0
- package/{lib → dist/esm}/plugins/messagelimit.js +18 -41
- package/dist/esm/plugins/metadata-server.d.ts +7 -0
- package/{lib → dist/esm}/plugins/metadata-server.js +3 -7
- package/dist/esm/plugins/metadata.d.ts +11 -0
- package/dist/esm/plugins/metadata.js +421 -0
- package/dist/esm/plugins/move.d.ts +11 -0
- package/{lib → dist/esm}/plugins/move.js +37 -66
- package/dist/esm/plugins/multiappend.d.ts +12 -0
- package/{lib → dist/esm}/plugins/multiappend.js +2 -5
- package/dist/esm/plugins/multisearch.d.ts +6 -0
- package/{lib → dist/esm}/plugins/multisearch.js +24 -48
- package/dist/esm/plugins/namespace.d.ts +5 -0
- package/dist/esm/plugins/namespace.js +42 -0
- package/dist/esm/plugins/notify.d.ts +2 -0
- package/{lib → dist/esm}/plugins/notify.js +90 -134
- package/dist/esm/plugins/oauthbearer.d.ts +32 -0
- package/{lib → dist/esm}/plugins/oauthbearer.js +18 -48
- package/dist/esm/plugins/objectid.d.ts +23 -0
- package/{lib → dist/esm}/plugins/objectid.js +21 -58
- package/dist/esm/plugins/partial.d.ts +6 -0
- package/{lib → dist/esm}/plugins/partial.js +7 -15
- package/dist/esm/plugins/preview.d.ts +31 -0
- package/{lib → dist/esm}/plugins/preview.js +28 -66
- package/dist/esm/plugins/qresync.d.ts +11 -0
- package/{lib → dist/esm}/plugins/qresync.js +64 -134
- package/dist/esm/plugins/quota.d.ts +18 -0
- package/{lib → dist/esm}/plugins/quota.js +89 -135
- package/dist/esm/plugins/replace.d.ts +14 -0
- package/{lib → dist/esm}/plugins/replace.js +21 -51
- package/dist/esm/plugins/sasl-ir.d.ts +5 -0
- package/{lib → dist/esm}/plugins/sasl-ir.js +3 -6
- package/dist/esm/plugins/savedate.d.ts +17 -0
- package/{lib → dist/esm}/plugins/savedate.js +5 -15
- package/dist/esm/plugins/savelimit.d.ts +10 -0
- package/{lib → dist/esm}/plugins/savelimit.js +3 -6
- package/dist/esm/plugins/searchres.d.ts +6 -0
- package/{lib → dist/esm}/plugins/searchres.js +13 -22
- package/dist/esm/plugins/sort-display.d.ts +11 -0
- package/{lib → dist/esm}/plugins/sort-display.js +6 -10
- package/dist/esm/plugins/sort.d.ts +11 -0
- package/{lib → dist/esm}/plugins/sort.js +24 -46
- package/dist/esm/plugins/special-use.d.ts +10 -0
- package/{lib → dist/esm}/plugins/special-use.js +9 -24
- package/dist/esm/plugins/starttls.d.ts +5 -0
- package/{lib → dist/esm}/plugins/starttls.js +20 -37
- package/dist/esm/plugins/status-size.d.ts +7 -0
- package/{lib → dist/esm}/plugins/status-size.js +4 -11
- package/dist/esm/plugins/thread-orderedsubject.d.ts +11 -0
- package/{lib → dist/esm}/plugins/thread-orderedsubject.js +3 -6
- package/dist/esm/plugins/thread-references.d.ts +11 -0
- package/{lib → dist/esm}/plugins/thread-references.js +3 -6
- package/dist/esm/plugins/uidonly.d.ts +15 -0
- package/{lib → dist/esm}/plugins/uidonly.js +11 -35
- package/dist/esm/plugins/uidplus.d.ts +15 -0
- package/{lib → dist/esm}/plugins/uidplus.js +25 -45
- package/dist/esm/plugins/unauthenticate.d.ts +7 -0
- package/dist/esm/plugins/unauthenticate.js +17 -0
- package/dist/esm/plugins/unselect.d.ts +5 -0
- package/dist/esm/plugins/unselect.js +21 -0
- package/dist/esm/plugins/utf8-accept.d.ts +6 -0
- package/{lib → dist/esm}/plugins/utf8-accept.js +10 -21
- package/dist/esm/plugins/x-gm-ext-1.d.ts +26 -0
- package/{lib → dist/esm}/plugins/x-gm-ext-1.js +48 -100
- package/dist/esm/plugins/xoauth2.d.ts +2 -0
- package/dist/esm/plugins/xoauth2.js +140 -0
- package/dist/esm/plugins/xtoybird.d.ts +2 -0
- package/dist/esm/plugins/xtoybird.js +218 -0
- package/dist/esm/server.d.ts +876 -0
- package/dist/esm/server.js +2543 -0
- package/dist/esm/smtp-listener.d.ts +13 -0
- package/{lib → dist/esm}/smtp-listener.js +5 -12
- package/dist/esm/sorting.d.ts +77 -0
- package/{lib → dist/esm}/sorting.js +40 -53
- package/dist/esm/threading.d.ts +30 -0
- package/{lib → dist/esm}/threading.js +29 -70
- package/dist/esm/types.d.ts +327 -0
- package/dist/esm/types.js +2 -0
- package/dist/esm/utf8-session.d.ts +17 -0
- package/{lib → dist/esm}/utf8-session.js +15 -25
- package/dist/esm/vanished.d.ts +21 -0
- package/{lib → dist/esm}/vanished.js +16 -21
- package/dist/plugin-help.json +298 -0
- package/package.json +54 -11
- package/lib/commands/capability.js +0 -47
- package/lib/commands/check.js +0 -21
- package/lib/commands/close.js +0 -30
- package/lib/commands/examine.js +0 -7
- package/lib/commands/expunge.js +0 -27
- package/lib/commands/list.js +0 -100
- package/lib/commands/logout.js +0 -41
- package/lib/commands/lsub.js +0 -87
- package/lib/commands/noop.js +0 -21
- package/lib/commands/search.js +0 -76
- package/lib/commands/select.js +0 -289
- package/lib/commands/uid copy.js +0 -7
- package/lib/commands/uid fetch.js +0 -5
- package/lib/commands/uid search.js +0 -5
- package/lib/commands/uid store.js +0 -5
- package/lib/plugins/compress.js +0 -76
- package/lib/plugins/enable.js +0 -155
- package/lib/plugins/id.js +0 -138
- package/lib/plugins/idle.js +0 -105
- package/lib/plugins/logindisabled.js +0 -50
- package/lib/plugins/metadata.js +0 -475
- package/lib/plugins/namespace.js +0 -67
- package/lib/plugins/unauthenticate.js +0 -28
- package/lib/plugins/unselect.js +0 -36
- package/lib/plugins/xoauth2.js +0 -188
- package/lib/plugins/xtoybird.js +0 -282
- package/lib/server.js +0 -2880
|
@@ -1,30 +1,22 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
1
|
/**
|
|
4
2
|
* @help Adds SEARCHRES [RFC5182] capability, loads ESEARCH as well
|
|
5
3
|
* @help SEARCH RETURN (SAVE) stores the result, "$" refers to it in place of a sequence set
|
|
6
4
|
*/
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
const { selectReturned } = require('../esearch');
|
|
10
|
-
|
|
5
|
+
import esearch from './esearch.js';
|
|
6
|
+
import { selectReturned } from '../esearch.js';
|
|
11
7
|
// Commands after which the search result variable is empty (RFC 5182 section 2.1). After CLOSE and
|
|
12
8
|
// UNSELECT no mailbox is selected, so "$" can not be used until the next SELECT or EXAMINE anyway
|
|
13
9
|
const RESET_COMMANDS = new Set(['SELECT', 'EXAMINE', 'CLOSE', 'UNSELECT']);
|
|
14
|
-
|
|
15
10
|
// SAVE also applies to commands based on SEARCH, like SORT (RFC 5182 section 1) with ESORT
|
|
16
11
|
// and to the ESEARCH command of MULTISEARCH, which leaves the messages to save in `parsed.searchresFound`
|
|
17
|
-
const isSearch = command => ['SEARCH', 'UID SEARCH', 'SORT', 'UID SORT', 'ESEARCH'].includes(command);
|
|
18
|
-
|
|
19
|
-
module.exports = function (server) {
|
|
12
|
+
const isSearch = (command) => ['SEARCH', 'UID SEARCH', 'SORT', 'UID SORT', 'ESEARCH'].includes(command);
|
|
13
|
+
export default function searchresPlugin(server) {
|
|
20
14
|
// a SEARCHRES server MUST also implement ESEARCH (RFC 5182 section 2.1)
|
|
21
15
|
esearch(server);
|
|
22
|
-
|
|
23
16
|
server.registerCapability('SEARCHRES');
|
|
24
17
|
// SAVE adds no data to the ESEARCH response
|
|
25
18
|
server.searchReturnOptions.set('SAVE', { data: false });
|
|
26
|
-
|
|
27
|
-
server.connectionHandlers.push(connection => {
|
|
19
|
+
server.connectionHandlers.push((connection) => {
|
|
28
20
|
// RFC 5182 section 3: sequence-set =/ seq-last-command, seq-last-command = "$". Dovecot only accepts
|
|
29
21
|
// "$" as the whole sequence set, not combined with numbers like "1,$", and neither does ImapKit
|
|
30
22
|
const getMessageRange = connection.getMessageRange;
|
|
@@ -45,38 +37,37 @@ module.exports = function (server) {
|
|
|
45
37
|
return result;
|
|
46
38
|
};
|
|
47
39
|
});
|
|
48
|
-
|
|
49
40
|
// RFC 8437 section 4.1: after UNAUTHENTICATE "$" represents the empty set
|
|
50
|
-
server.resetHandlers.push(connection => {
|
|
41
|
+
server.resetHandlers.push((connection) => {
|
|
51
42
|
connection.searchResult = null;
|
|
52
43
|
});
|
|
53
|
-
|
|
54
44
|
server.outputHandlers.push((connection, response, description, parsed, data, extra) => {
|
|
55
45
|
if (!parsed || !response || (response.tag !== parsed.tag && response.command !== 'SEARCH' && response.command !== 'SORT')) {
|
|
56
46
|
return;
|
|
57
47
|
}
|
|
58
48
|
const command = (parsed.command || '').toUpperCase();
|
|
59
49
|
const save = isSearch(command) && parsed.searchReturn && parsed.searchReturn.has('SAVE');
|
|
60
|
-
|
|
61
50
|
// the result of SEARCH, with MIN and/or MAX only these messages are saved (RFC 5182 section 2.4).
|
|
62
51
|
// It is stored once the tagged response tells if the command succeeded
|
|
63
|
-
if (save &&
|
|
52
|
+
if (save &&
|
|
53
|
+
response.tag === '*' &&
|
|
54
|
+
(response.command === 'SEARCH' || response.command === 'SORT') &&
|
|
55
|
+
description === command &&
|
|
56
|
+
extra &&
|
|
57
|
+
Array.isArray(extra.list)) {
|
|
64
58
|
parsed.searchresFound = selectReturned(extra.sorted || extra.list, parsed.searchReturn);
|
|
65
59
|
return;
|
|
66
60
|
}
|
|
67
|
-
|
|
68
61
|
if (response.tag !== parsed.tag) {
|
|
69
62
|
return;
|
|
70
63
|
}
|
|
71
|
-
|
|
72
64
|
if (RESET_COMMANDS.has(command)) {
|
|
73
65
|
connection.searchResult = null;
|
|
74
66
|
return;
|
|
75
67
|
}
|
|
76
|
-
|
|
77
68
|
// RFC 5182 section 2.1: an OK sets the variable, a NO empties it and a BAD leaves it as it was
|
|
78
69
|
if (save && response.command !== 'BAD') {
|
|
79
70
|
connection.searchResult = new Set(response.command === 'OK' ? parsed.searchresFound : []);
|
|
80
71
|
}
|
|
81
72
|
});
|
|
82
|
-
}
|
|
73
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { IMAPServer } from '../types.js';
|
|
2
|
+
/**
|
|
3
|
+
* @help Adds SORT=DISPLAY [RFC5957] capability, also loads SORT
|
|
4
|
+
*
|
|
5
|
+
* SORT=DISPLAY: https://tools.ietf.org/html/rfc5957
|
|
6
|
+
*
|
|
7
|
+
* Additional sort keys for SORT and UID SORT:
|
|
8
|
+
* - DISPLAYFROM
|
|
9
|
+
* - DISPLAYTO
|
|
10
|
+
*/
|
|
11
|
+
export default function sortDisplayPlugin(server: IMAPServer): void;
|
|
@@ -1,8 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
const { collationKey, displayAddress } = require('../sorting');
|
|
4
|
-
const sort = require('./sort');
|
|
5
|
-
|
|
1
|
+
import { collationKey, displayAddress } from '../sorting.js';
|
|
2
|
+
import sort from './sort.js';
|
|
6
3
|
/**
|
|
7
4
|
* @help Adds SORT=DISPLAY [RFC5957] capability, also loads SORT
|
|
8
5
|
*
|
|
@@ -12,12 +9,11 @@ const sort = require('./sort');
|
|
|
12
9
|
* - DISPLAYFROM
|
|
13
10
|
* - DISPLAYTO
|
|
14
11
|
*/
|
|
15
|
-
|
|
12
|
+
export default function sortDisplayPlugin(server) {
|
|
16
13
|
// RFC 5957 section 1: SORT=DISPLAY means the full SORT extension plus both sort keys
|
|
17
14
|
sort(server);
|
|
18
15
|
server.registerCapability('SORT=DISPLAY');
|
|
19
|
-
|
|
20
16
|
// RFC 5957 section 4: the DISPLAY sort value of the first address of env-from and env-to
|
|
21
|
-
server.sortKeys.DISPLAYFROM = message => collationKey(displayAddress(message, 'from'));
|
|
22
|
-
server.sortKeys.DISPLAYTO = message => collationKey(displayAddress(message, 'to'));
|
|
23
|
-
}
|
|
17
|
+
server.sortKeys.DISPLAYFROM = (message) => collationKey(displayAddress(message, 'from'));
|
|
18
|
+
server.sortKeys.DISPLAYTO = (message) => collationKey(displayAddress(message, 'to'));
|
|
19
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { IMAPServer } from '../types.js';
|
|
2
|
+
/**
|
|
3
|
+
* @help Adds SORT [RFC5256] capability
|
|
4
|
+
*
|
|
5
|
+
* SORT: https://tools.ietf.org/html/rfc5256
|
|
6
|
+
*
|
|
7
|
+
* Additional commands:
|
|
8
|
+
* - SORT
|
|
9
|
+
* - UID SORT
|
|
10
|
+
*/
|
|
11
|
+
export default function sortPlugin(server: IMAPServer): void;
|
|
@@ -1,9 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
const { getMessageData } = require('../mimeparser');
|
|
5
|
-
const { collationKey, baseSubject, arrivalTime, sentTime, addressMailbox, searchMessages } = require('../sorting');
|
|
6
|
-
|
|
1
|
+
import { states } from '../command-states.js';
|
|
2
|
+
import { getMessageData } from '../mimeparser.js';
|
|
3
|
+
import { collationKey, baseSubject, arrivalTime, sentTime, addressMailbox, searchMessages } from '../sorting.js';
|
|
7
4
|
/**
|
|
8
5
|
* @help Adds SORT [RFC5256] capability
|
|
9
6
|
*
|
|
@@ -13,28 +10,24 @@ const { collationKey, baseSubject, arrivalTime, sentTime, addressMailbox, search
|
|
|
13
10
|
* - SORT
|
|
14
11
|
* - UID SORT
|
|
15
12
|
*/
|
|
16
|
-
|
|
13
|
+
export default function sortPlugin(server) {
|
|
17
14
|
if (server.sortKeys) {
|
|
18
15
|
// already loaded, e.g. by the SORT=DISPLAY plugin
|
|
19
16
|
return;
|
|
20
17
|
}
|
|
21
|
-
|
|
22
18
|
server.registerCapability('SORT');
|
|
23
|
-
|
|
24
19
|
// RFC 5256 section 3: sort keys and the value of a message for each. A value is a number or the
|
|
25
20
|
// collation key of a string, see sorting.collationKey. SORT=DISPLAY adds its keys here
|
|
26
21
|
server.sortKeys = {
|
|
27
|
-
ARRIVAL: message => arrivalTime(message),
|
|
28
|
-
CC: message => collationKey(addressMailbox(message, 'cc')),
|
|
29
|
-
DATE: message => sentTime(message),
|
|
30
|
-
FROM: message => collationKey(addressMailbox(message, 'from')),
|
|
31
|
-
SIZE: message => getMessageData(message).raw.length,
|
|
32
|
-
SUBJECT: message => collationKey(baseSubject(getMessageData(message).tree.parsedHeader.subject).subject),
|
|
33
|
-
TO: message => collationKey(addressMailbox(message, 'to'))
|
|
22
|
+
ARRIVAL: (message) => arrivalTime(message),
|
|
23
|
+
CC: (message) => collationKey(addressMailbox(message, 'cc')),
|
|
24
|
+
DATE: (message) => sentTime(message),
|
|
25
|
+
FROM: (message) => collationKey(addressMailbox(message, 'from')),
|
|
26
|
+
SIZE: (message) => getMessageData(message).raw.length,
|
|
27
|
+
SUBJECT: (message) => collationKey(baseSubject(getMessageData(message).tree.parsedHeader.subject).subject),
|
|
28
|
+
TO: (message) => collationKey(addressMailbox(message, 'to'))
|
|
34
29
|
};
|
|
35
|
-
|
|
36
30
|
const compareValues = (a, b) => (Buffer.isBuffer(a) ? Buffer.compare(a, b) : a - b);
|
|
37
|
-
|
|
38
31
|
/**
|
|
39
32
|
* Returns a comparator of messages for parsed sort criteria: ascending order, REVERSE turns one
|
|
40
33
|
* criterion around, and mailbox order (the sequence number) breaks ties (RFC 5256 section 3).
|
|
@@ -43,14 +36,11 @@ module.exports = function (server) {
|
|
|
43
36
|
* @param {Array} criteria List of `{ key, reverse }`
|
|
44
37
|
* @return {Function} comparator for two messages of the same mailbox
|
|
45
38
|
*/
|
|
46
|
-
server.sortComparator = criteria => {
|
|
39
|
+
server.sortComparator = (criteria) => {
|
|
47
40
|
const cache = new WeakMap();
|
|
48
|
-
const getValues = message => {
|
|
41
|
+
const getValues = (message) => {
|
|
49
42
|
if (!cache.has(message)) {
|
|
50
|
-
cache.set(
|
|
51
|
-
message,
|
|
52
|
-
criteria.map(criterion => server.sortKeys[criterion.key](message))
|
|
53
|
-
);
|
|
43
|
+
cache.set(message, criteria.map((criterion) => server.sortKeys[criterion.key](message)));
|
|
54
44
|
}
|
|
55
45
|
return cache.get(message);
|
|
56
46
|
};
|
|
@@ -67,16 +57,13 @@ module.exports = function (server) {
|
|
|
67
57
|
return a.uid - b.uid;
|
|
68
58
|
};
|
|
69
59
|
};
|
|
70
|
-
|
|
71
60
|
const sortHandler = (isUid, connection, parsed, data, callback) => {
|
|
72
61
|
const command = isUid ? 'UID SORT' : 'SORT';
|
|
73
62
|
const attributes = parsed.attributes || [];
|
|
74
|
-
|
|
75
|
-
const fail = text => {
|
|
63
|
+
const fail = (text) => {
|
|
76
64
|
connection.sendStatus(parsed, data, 'BAD', text, false, command + ' FAILED');
|
|
77
65
|
return callback();
|
|
78
66
|
};
|
|
79
|
-
|
|
80
67
|
// RFC 5256 section 5: sort-criteria = "(" sort-criterion *(SP sort-criterion) ")",
|
|
81
68
|
// sort-criterion = ["REVERSE" SP] sort-key
|
|
82
69
|
if (!Array.isArray(attributes[0]) || !attributes[0].length) {
|
|
@@ -99,34 +86,25 @@ module.exports = function (server) {
|
|
|
99
86
|
if (reverse) {
|
|
100
87
|
return fail('REVERSE must be followed by a sort key');
|
|
101
88
|
}
|
|
102
|
-
|
|
103
89
|
const result = searchMessages(connection, parsed, data, attributes.slice(1));
|
|
104
90
|
if (!result) {
|
|
105
91
|
return callback();
|
|
106
92
|
}
|
|
107
|
-
|
|
108
93
|
const compare = server.sortComparator(criteria);
|
|
109
94
|
const sorted = result.list.slice().sort(compare);
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
parsed,
|
|
119
|
-
data,
|
|
120
|
-
// the search result, for CONDSTORE to append the highest mod-sequence (RFC 7162 section 3.1.9), with the
|
|
121
|
-
// sorted messages and the comparator for ESORT and CONTEXT=SORT
|
|
122
|
-
Object.assign(result, { sorted, compare })
|
|
123
|
-
);
|
|
95
|
+
connection.send({
|
|
96
|
+
tag: '*',
|
|
97
|
+
command: 'SORT',
|
|
98
|
+
attributes: sorted.map(message => (isUid ? message.uid : result.numbers[message.uid]))
|
|
99
|
+
}, command, parsed, data,
|
|
100
|
+
// the search result, for CONDSTORE to append the highest mod-sequence (RFC 7162 section 3.1.9), with the
|
|
101
|
+
// sorted messages and the comparator for ESORT and CONTEXT=SORT
|
|
102
|
+
Object.assign(result, { sorted, compare }));
|
|
124
103
|
connection.sendStatus(parsed, data, 'OK', command + ' completed', false, command);
|
|
125
104
|
return callback();
|
|
126
105
|
};
|
|
127
|
-
|
|
128
106
|
// RFC 5256 section 3: EXPUNGE responses are not permitted while responding to SORT, but are during UID SORT.
|
|
129
107
|
// The search criteria start after the sort criteria and the charset
|
|
130
108
|
server.setCommandHandler('SORT', sortHandler.bind(null, false), { states: states.SELECTED, searchCriteria: 2, noExpunge: true });
|
|
131
109
|
server.setCommandHandler('UID SORT', sortHandler.bind(null, true), { states: states.SELECTED, searchCriteria: 2 });
|
|
132
|
-
}
|
|
110
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { IMAPServer } from '../types.js';
|
|
2
|
+
/**
|
|
3
|
+
* @help Enables SPECIAL-USE [RFC6154] capability
|
|
4
|
+
* @help Mailboxes need to have a "special-use"
|
|
5
|
+
* @help property (String or Array) that will be used
|
|
6
|
+
* @help as extra flag for LIST and LSUB responses.
|
|
7
|
+
* @help With LIST-EXTENDED the SPECIAL-USE selection and
|
|
8
|
+
* @help return options work with the other LIST options
|
|
9
|
+
*/
|
|
10
|
+
export default function specialUsePlugin(server: IMAPServer): void;
|
|
@@ -1,7 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
const { getListExtensions } = require('../list-extensions');
|
|
4
|
-
|
|
1
|
+
import { getListExtensions } from '../list-extensions.js';
|
|
5
2
|
/**
|
|
6
3
|
* @help Enables SPECIAL-USE [RFC6154] capability
|
|
7
4
|
* @help Mailboxes need to have a "special-use"
|
|
@@ -10,32 +7,26 @@ const { getListExtensions } = require('../list-extensions');
|
|
|
10
7
|
* @help With LIST-EXTENDED the SPECIAL-USE selection and
|
|
11
8
|
* @help return options work with the other LIST options
|
|
12
9
|
*/
|
|
13
|
-
|
|
14
|
-
module.exports = function (server) {
|
|
10
|
+
export default function specialUsePlugin(server) {
|
|
15
11
|
// Register capability
|
|
16
12
|
server.registerCapability('SPECIAL-USE');
|
|
17
|
-
|
|
18
|
-
const getSpecialUse = folder => [].concat((folder && folder['special-use']) || []);
|
|
19
|
-
|
|
13
|
+
const getSpecialUse = (folder) => [].concat((folder && folder['special-use']) || []);
|
|
20
14
|
// RFC 6154 section 2: with LIST-EXTENDED, SPECIAL-USE is a list-select-independent-opt that
|
|
21
15
|
// implies the SPECIAL-USE return option. The LIST-EXTENDED plugin may be loaded before or after this one
|
|
22
16
|
const listExtensions = getListExtensions(server);
|
|
23
17
|
listExtensions.selectionOptions['SPECIAL-USE'] = {
|
|
24
18
|
type: 'independent',
|
|
25
19
|
returnOption: 'SPECIAL-USE',
|
|
26
|
-
match: folder => folder.flags.indexOf('\\Noselect') < 0 && getSpecialUse(folder).length > 0
|
|
20
|
+
match: (folder) => folder.flags.indexOf('\\Noselect') < 0 && getSpecialUse(folder).length > 0
|
|
27
21
|
};
|
|
28
22
|
// special-use attributes are always included, so the return option needs no extra handling
|
|
29
23
|
listExtensions.returnOptions['SPECIAL-USE'] = {};
|
|
30
|
-
|
|
31
24
|
const listHandler = server.getCommandHandler('LIST');
|
|
32
|
-
|
|
33
25
|
server.setCommandHandler('LIST', (connection, parsed, data, callback) => {
|
|
34
26
|
if (listExtensions.enabled) {
|
|
35
27
|
// LIST-EXTENDED handles the options
|
|
36
28
|
return listHandler(connection, parsed, data, callback);
|
|
37
29
|
}
|
|
38
|
-
|
|
39
30
|
// without LIST-EXTENDED only the SPECIAL-USE options are understood
|
|
40
31
|
let i;
|
|
41
32
|
if (parsed.attributes && Array.isArray(parsed.attributes[0])) {
|
|
@@ -50,30 +41,24 @@ module.exports = function (server) {
|
|
|
50
41
|
parsed.attributes.splice(0, 1);
|
|
51
42
|
}
|
|
52
43
|
}
|
|
53
|
-
|
|
54
|
-
if (
|
|
55
|
-
parsed.attributes &&
|
|
44
|
+
if (parsed.attributes &&
|
|
56
45
|
parsed.attributes[2] &&
|
|
57
46
|
parsed.attributes[2].type === 'ATOM' &&
|
|
58
47
|
parsed.attributes[2].value.toUpperCase() === 'RETURN' &&
|
|
59
|
-
Array.isArray(parsed.attributes[3])
|
|
60
|
-
) {
|
|
48
|
+
Array.isArray(parsed.attributes[3])) {
|
|
61
49
|
for (i = parsed.attributes[3].length - 1; i >= 0; i--) {
|
|
62
50
|
if (parsed.attributes[3][i] && parsed.attributes[3][i].type === 'ATOM' && parsed.attributes[3][i].value.toUpperCase() === 'SPECIAL-USE') {
|
|
63
51
|
// special-use attributes are always included, so the return option needs no extra handling
|
|
64
52
|
parsed.attributes[3].splice(i, 1);
|
|
65
53
|
}
|
|
66
54
|
}
|
|
67
|
-
|
|
68
55
|
// Remove RETURN (List) if no members were left
|
|
69
56
|
if (!parsed.attributes[3].length) {
|
|
70
57
|
parsed.attributes.splice(2, 2);
|
|
71
58
|
}
|
|
72
59
|
}
|
|
73
|
-
|
|
74
60
|
listHandler(connection, parsed, data, callback);
|
|
75
61
|
});
|
|
76
|
-
|
|
77
62
|
server.outputHandlers.push((connection, response, description, parsed, data, folder) => {
|
|
78
63
|
const specialUseList = getSpecialUse(folder).map(specialUse => {
|
|
79
64
|
return {
|
|
@@ -81,15 +66,15 @@ module.exports = function (server) {
|
|
|
81
66
|
value: specialUse
|
|
82
67
|
};
|
|
83
68
|
});
|
|
84
|
-
|
|
85
69
|
if ((description === 'LIST ITEM' || description === 'LSUB ITEM') && folder && response.attributes && Array.isArray(response.attributes[0])) {
|
|
86
70
|
if (specialUseList.length) {
|
|
87
71
|
// special-use attributes are added to the other mailbox attributes, also with RETURN (SPECIAL-USE)
|
|
88
72
|
response.attributes[0] = response.attributes[0].concat(specialUseList);
|
|
89
|
-
}
|
|
73
|
+
}
|
|
74
|
+
else if (parsed.listSpecialUseOnly) {
|
|
90
75
|
// Do not show this response
|
|
91
76
|
response.skipResponse = true;
|
|
92
77
|
}
|
|
93
78
|
}
|
|
94
79
|
});
|
|
95
|
-
}
|
|
80
|
+
}
|
|
@@ -1,57 +1,40 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
1
|
/**
|
|
4
2
|
* @help Adds STARTTLS command
|
|
5
3
|
*/
|
|
6
|
-
|
|
7
|
-
module.exports = function (server) {
|
|
4
|
+
export default function starttlsPlugin(server) {
|
|
8
5
|
// Register capability, usable with unsecure connection
|
|
9
|
-
server.registerCapability('STARTTLS', connection => {
|
|
6
|
+
server.registerCapability('STARTTLS', (connection) => {
|
|
10
7
|
return !connection.secureConnection;
|
|
11
8
|
});
|
|
12
|
-
|
|
13
9
|
// Add STARTTLS command
|
|
14
10
|
server.setCommandHandler('STARTTLS', (connection, parsed, data, callback) => {
|
|
15
11
|
// only works in insecure setting
|
|
16
12
|
if (connection.secureConnection) {
|
|
17
13
|
return sendError('Connection is already secured', connection, parsed, data, callback);
|
|
18
14
|
}
|
|
19
|
-
|
|
20
|
-
connection.send(
|
|
21
|
-
{
|
|
22
|
-
tag: parsed.tag,
|
|
23
|
-
command: 'OK',
|
|
24
|
-
attributes: [
|
|
25
|
-
{
|
|
26
|
-
type: 'TEXT',
|
|
27
|
-
value: 'Server ready to start TLS negotiation'
|
|
28
|
-
}
|
|
29
|
-
]
|
|
30
|
-
},
|
|
31
|
-
'STARTTLS INIT',
|
|
32
|
-
parsed,
|
|
33
|
-
data
|
|
34
|
-
);
|
|
35
|
-
|
|
36
|
-
connection.upgradeConnection(callback);
|
|
37
|
-
});
|
|
38
|
-
};
|
|
39
|
-
|
|
40
|
-
function sendError(message, connection, parsed, data, callback) {
|
|
41
|
-
connection.send(
|
|
42
|
-
{
|
|
15
|
+
connection.send({
|
|
43
16
|
tag: parsed.tag,
|
|
44
|
-
command: '
|
|
17
|
+
command: 'OK',
|
|
45
18
|
attributes: [
|
|
46
19
|
{
|
|
47
20
|
type: 'TEXT',
|
|
48
|
-
value:
|
|
21
|
+
value: 'Server ready to start TLS negotiation'
|
|
49
22
|
}
|
|
50
23
|
]
|
|
51
|
-
},
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
24
|
+
}, 'STARTTLS INIT', parsed, data);
|
|
25
|
+
connection.upgradeConnection(callback);
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
function sendError(message, connection, parsed, data, callback) {
|
|
29
|
+
connection.send({
|
|
30
|
+
tag: parsed.tag,
|
|
31
|
+
command: 'BAD',
|
|
32
|
+
attributes: [
|
|
33
|
+
{
|
|
34
|
+
type: 'TEXT',
|
|
35
|
+
value: message
|
|
36
|
+
}
|
|
37
|
+
]
|
|
38
|
+
}, 'INVALID COMMAND', parsed, data);
|
|
56
39
|
return callback();
|
|
57
40
|
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { IMAPServer } from '../types.js';
|
|
2
|
+
/**
|
|
3
|
+
* @help Adds STATUS=SIZE [RFC8438] capability. The SIZE status item
|
|
4
|
+
* @help is the sum of the RFC822.SIZE values of the messages, it can
|
|
5
|
+
* @help also be used with LIST-STATUS
|
|
6
|
+
*/
|
|
7
|
+
export default function statusSizePlugin(server: IMAPServer): void;
|
|
@@ -1,19 +1,12 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
const fetchHandlers = require('../commands/handlers/fetch');
|
|
4
|
-
|
|
1
|
+
import fetchHandlers from '../commands/handlers/fetch.js';
|
|
5
2
|
/**
|
|
6
3
|
* @help Adds STATUS=SIZE [RFC8438] capability. The SIZE status item
|
|
7
4
|
* @help is the sum of the RFC822.SIZE values of the messages, it can
|
|
8
5
|
* @help also be used with LIST-STATUS
|
|
9
6
|
*/
|
|
10
|
-
|
|
11
|
-
module.exports = function (server) {
|
|
7
|
+
export default function statusSizePlugin(server) {
|
|
12
8
|
server.registerCapability('STATUS=SIZE');
|
|
13
|
-
|
|
14
9
|
server.allowedStatus.push('SIZE');
|
|
15
|
-
|
|
16
10
|
// RFC 8438 section 3: at least the sum of the RFC822.SIZE values of all messages in the mailbox
|
|
17
|
-
server.statusHandlers.SIZE = (connection, mailbox) =>
|
|
18
|
-
|
|
19
|
-
};
|
|
11
|
+
server.statusHandlers.SIZE = (connection, mailbox) => mailbox.messages.reduce((size, message) => size + fetchHandlers['RFC822.SIZE'](connection, message), 0);
|
|
12
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { IMAPServer } from '../types.js';
|
|
2
|
+
/**
|
|
3
|
+
* @help Adds THREAD=ORDEREDSUBJECT [RFC5256] capability
|
|
4
|
+
*
|
|
5
|
+
* THREAD: https://tools.ietf.org/html/rfc5256
|
|
6
|
+
*
|
|
7
|
+
* Additional commands:
|
|
8
|
+
* - THREAD ORDEREDSUBJECT
|
|
9
|
+
* - UID THREAD ORDEREDSUBJECT
|
|
10
|
+
*/
|
|
11
|
+
export default function threadOrderedsubjectPlugin(server: IMAPServer): void;
|
|
@@ -1,7 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
const { addThreadAlgorithm } = require('../threading');
|
|
4
|
-
|
|
1
|
+
import { addThreadAlgorithm } from '../threading.js';
|
|
5
2
|
/**
|
|
6
3
|
* @help Adds THREAD=ORDEREDSUBJECT [RFC5256] capability
|
|
7
4
|
*
|
|
@@ -11,6 +8,6 @@ const { addThreadAlgorithm } = require('../threading');
|
|
|
11
8
|
* - THREAD ORDEREDSUBJECT
|
|
12
9
|
* - UID THREAD ORDEREDSUBJECT
|
|
13
10
|
*/
|
|
14
|
-
|
|
11
|
+
export default function threadOrderedsubjectPlugin(server) {
|
|
15
12
|
addThreadAlgorithm(server, 'ORDEREDSUBJECT');
|
|
16
|
-
}
|
|
13
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { IMAPServer } from '../types.js';
|
|
2
|
+
/**
|
|
3
|
+
* @help Adds THREAD=REFERENCES [RFC5256] capability
|
|
4
|
+
*
|
|
5
|
+
* THREAD: https://tools.ietf.org/html/rfc5256
|
|
6
|
+
*
|
|
7
|
+
* Additional commands:
|
|
8
|
+
* - THREAD REFERENCES
|
|
9
|
+
* - UID THREAD REFERENCES
|
|
10
|
+
*/
|
|
11
|
+
export default function threadReferencesPlugin(server: IMAPServer): void;
|
|
@@ -1,7 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
const { addThreadAlgorithm } = require('../threading');
|
|
4
|
-
|
|
1
|
+
import { addThreadAlgorithm } from '../threading.js';
|
|
5
2
|
/**
|
|
6
3
|
* @help Adds THREAD=REFERENCES [RFC5256] capability
|
|
7
4
|
*
|
|
@@ -11,6 +8,6 @@ const { addThreadAlgorithm } = require('../threading');
|
|
|
11
8
|
* - THREAD REFERENCES
|
|
12
9
|
* - UID THREAD REFERENCES
|
|
13
10
|
*/
|
|
14
|
-
|
|
11
|
+
export default function threadReferencesPlugin(server) {
|
|
15
12
|
addThreadAlgorithm(server, 'REFERENCES');
|
|
16
|
-
}
|
|
13
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { IMAPServer } from '../types.js';
|
|
2
|
+
/**
|
|
3
|
+
* @help Adds UIDONLY [RFC9586] capability, loads ENABLE as well
|
|
4
|
+
* @help After ENABLE UIDONLY: FETCH, STORE, SEARCH, COPY, MOVE, SORT, THREAD, REPLACE and
|
|
5
|
+
* @help message numbers in UID SEARCH (SORT, THREAD) criteria are refused with BAD [UIDREQUIRED],
|
|
6
|
+
* @help UIDFETCH responses replace FETCH responses and VANISHED replaces EXPUNGE.
|
|
7
|
+
* @help Load UIDPLUS for COPYUID and UID EXPUNGE
|
|
8
|
+
*
|
|
9
|
+
* UIDONLY: https://www.rfc-editor.org/rfc/rfc9586
|
|
10
|
+
*/
|
|
11
|
+
declare function uidonlyPlugin(server: IMAPServer): void;
|
|
12
|
+
declare namespace uidonlyPlugin {
|
|
13
|
+
var requires: string[];
|
|
14
|
+
}
|
|
15
|
+
export default uidonlyPlugin;
|