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