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.
- 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 +34 -75
- 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
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseStatusItems = parseStatusItems;
|
|
4
|
+
exports.sendStatus = sendStatus;
|
|
5
|
+
exports.statusResponse = statusResponse;
|
|
6
|
+
/**
|
|
7
|
+
* STATUS data items, shared by the STATUS command and the STATUS return option of LIST (LIST-STATUS,
|
|
8
|
+
* RFC 5819). A STATUS item can only be requested when it is listed in `server.allowedStatus`.
|
|
9
|
+
* Plugins add their items to `server.statusHandlers` (consulted before the built-in items) and to
|
|
10
|
+
* `server.allowedStatus`.
|
|
11
|
+
*/
|
|
12
|
+
const statusHandlers = {
|
|
13
|
+
MESSAGES: (connection, mailbox) => mailbox.messages.length,
|
|
14
|
+
RECENT: (connection, mailbox, status) => status.recent,
|
|
15
|
+
UIDNEXT: (connection, mailbox) => mailbox.uidnext,
|
|
16
|
+
UIDVALIDITY: (connection, mailbox) => mailbox.uidvalidity,
|
|
17
|
+
UNSEEN: (connection, mailbox, status) => status.unseen || 0,
|
|
18
|
+
// RFC 9051 section 6.3.11. Not in RFC 3501, QUOTA lists it in allowedStatus, IMAP4rev2 allows it per session
|
|
19
|
+
DELETED: (connection, mailbox, status) => status.flags['\\Deleted'] || 0
|
|
20
|
+
};
|
|
21
|
+
// RFC 3501 section 9 atom = 1*ATOM-CHAR
|
|
22
|
+
/**
|
|
23
|
+
* Validates a list of STATUS data item names (RFC 3501 section 9, "(" status-att *(SP status-att) ")")
|
|
24
|
+
*
|
|
25
|
+
* @param {Object} server IMAPServer instance
|
|
26
|
+
* @param {Array} list Parsed list of status items
|
|
27
|
+
* @param {Object} [connection] IMAP connection, its `disabledStatusItems` set lists items the session can not use,
|
|
28
|
+
* `addedStatusItems` the items only this session can use (DELETED after ENABLE IMAP4rev2)
|
|
29
|
+
* @return {Array} upper case item names
|
|
30
|
+
* @throws {Error} if the list is empty or has an invalid item, the message is for the BAD response
|
|
31
|
+
*/
|
|
32
|
+
function parseStatusItems(server, list, connection) {
|
|
33
|
+
if (!Array.isArray(list) || !list.length) {
|
|
34
|
+
throw new Error('Expecting a list of status items');
|
|
35
|
+
}
|
|
36
|
+
const disabled = connection && connection.disabledStatusItems;
|
|
37
|
+
const added = connection && connection.addedStatusItems;
|
|
38
|
+
return list.map((item, i) => {
|
|
39
|
+
const name = item && item.type === 'ATOM' && item.value.toUpperCase();
|
|
40
|
+
if (!name || (server.allowedStatus.indexOf(name) < 0 && !(added && added.has(name))) || (disabled && disabled.has(name))) {
|
|
41
|
+
throw new Error('Invalid status element (' + (i + 1) + ')');
|
|
42
|
+
}
|
|
43
|
+
return name;
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Sends an untagged STATUS response
|
|
48
|
+
*
|
|
49
|
+
* @param {Object} connection IMAPConnection instance
|
|
50
|
+
* @param {String} path Storage name of the mailbox
|
|
51
|
+
* @param {Object} mailbox Mailbox object
|
|
52
|
+
* @param {Array} items Upper case item names from parseStatusItems
|
|
53
|
+
* @param {Object} parsed Parsed command
|
|
54
|
+
* @param {Object} data Command data
|
|
55
|
+
*/
|
|
56
|
+
function sendStatus(connection, path, mailbox, items, parsed, data) {
|
|
57
|
+
connection.send(statusResponse(connection, path, mailbox, items), 'STATUS', parsed, data);
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Builds an untagged STATUS response
|
|
61
|
+
*
|
|
62
|
+
* @param {Object} connection IMAPConnection instance
|
|
63
|
+
* @param {String} path Storage name of the mailbox
|
|
64
|
+
* @param {Object} mailbox Mailbox object
|
|
65
|
+
* @param {Array} items Upper case item names
|
|
66
|
+
* @return {Object} STATUS response
|
|
67
|
+
*/
|
|
68
|
+
function statusResponse(connection, path, mailbox, items) {
|
|
69
|
+
const server = connection.server;
|
|
70
|
+
const status = server.getStatus(mailbox);
|
|
71
|
+
const list = [];
|
|
72
|
+
items.forEach(item => {
|
|
73
|
+
list.push({ type: 'ATOM', value: item }, (server.statusHandlers[item] || statusHandlers[item])(connection, mailbox, status));
|
|
74
|
+
});
|
|
75
|
+
return {
|
|
76
|
+
tag: '*',
|
|
77
|
+
command: 'STATUS',
|
|
78
|
+
// the mailbox name is converted for the session in IMAPConnection#send
|
|
79
|
+
attributes: [{ type: 'MAILBOX', value: path }, list]
|
|
80
|
+
};
|
|
81
|
+
}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const flags_js_1 = require("./flags.js");
|
|
4
|
+
const storeHandlers = {};
|
|
5
|
+
exports.default = storeHandlers;
|
|
6
|
+
function setFlags(connection, message, flags) {
|
|
7
|
+
// STORE runs in the Selected state
|
|
8
|
+
const mailbox = connection.selectedMailbox;
|
|
9
|
+
const messageFlags = [];
|
|
10
|
+
[].concat(flags).forEach(flag => {
|
|
11
|
+
flag = (0, flags_js_1.normalizeSystemFlag)(typeof flag === 'string' ? flag : String(flag.value || ''));
|
|
12
|
+
(0, flags_js_1.checkSystemFlags)(connection, flag);
|
|
13
|
+
// Ignore if it is not in allowed list and only permament flags are allowed to use
|
|
14
|
+
if (mailbox.permanentFlags.indexOf(flag) < 0 && !mailbox.allowPermanentFlags) {
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
if (messageFlags.indexOf(flag) < 0) {
|
|
18
|
+
messageFlags.push(flag);
|
|
19
|
+
}
|
|
20
|
+
});
|
|
21
|
+
message.flags = messageFlags;
|
|
22
|
+
connection.server.rememberFlags(mailbox, messageFlags);
|
|
23
|
+
}
|
|
24
|
+
function addFlags(connection, message, flags) {
|
|
25
|
+
const mailbox = connection.selectedMailbox;
|
|
26
|
+
[].concat(flags).forEach(flag => {
|
|
27
|
+
flag = (0, flags_js_1.normalizeSystemFlag)(typeof flag === 'string' ? flag : String(flag.value || ''));
|
|
28
|
+
(0, flags_js_1.checkSystemFlags)(connection, flag);
|
|
29
|
+
// Ignore if it is not in allowed list and only permament flags are allowed to use
|
|
30
|
+
if (mailbox.permanentFlags.indexOf(flag) < 0 && !mailbox.allowPermanentFlags) {
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
if (message.flags.indexOf(flag) < 0) {
|
|
34
|
+
message.flags.push(flag);
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
connection.server.rememberFlags(mailbox, message.flags);
|
|
38
|
+
}
|
|
39
|
+
function removeFlags(connection, message, flags) {
|
|
40
|
+
[].concat(flags).forEach(flag => {
|
|
41
|
+
flag = (0, flags_js_1.normalizeSystemFlag)(typeof flag === 'string' ? flag : String(flag.value || ''));
|
|
42
|
+
(0, flags_js_1.checkSystemFlags)(connection, flag);
|
|
43
|
+
if (message.flags.indexOf(flag) >= 0) {
|
|
44
|
+
for (let i = 0; i < message.flags.length; i++) {
|
|
45
|
+
if (message.flags[i] === flag) {
|
|
46
|
+
message.flags.splice(i, 1);
|
|
47
|
+
break;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
function sendUpdate(connection, parsed, data, index, message) {
|
|
54
|
+
const resp = [
|
|
55
|
+
{
|
|
56
|
+
type: 'ATOM',
|
|
57
|
+
value: 'FLAGS'
|
|
58
|
+
},
|
|
59
|
+
connection.getFlags(message).map(flag => {
|
|
60
|
+
return {
|
|
61
|
+
type: 'ATOM',
|
|
62
|
+
value: flag
|
|
63
|
+
};
|
|
64
|
+
})
|
|
65
|
+
];
|
|
66
|
+
if ((parsed.command || '').toUpperCase() === 'UID STORE') {
|
|
67
|
+
resp.push({
|
|
68
|
+
type: 'ATOM',
|
|
69
|
+
value: 'UID'
|
|
70
|
+
});
|
|
71
|
+
resp.push(message.uid);
|
|
72
|
+
}
|
|
73
|
+
connection.send({
|
|
74
|
+
tag: '*',
|
|
75
|
+
attributes: [
|
|
76
|
+
index,
|
|
77
|
+
{
|
|
78
|
+
type: 'ATOM',
|
|
79
|
+
value: 'FETCH'
|
|
80
|
+
},
|
|
81
|
+
resp
|
|
82
|
+
]
|
|
83
|
+
}, 'FLAG UPDATE', parsed, data, message);
|
|
84
|
+
}
|
|
85
|
+
storeHandlers.FLAGS = function (connection, message, flags, index, parsed, data) {
|
|
86
|
+
setFlags(connection, message, flags);
|
|
87
|
+
sendUpdate(connection, parsed, data, index, message);
|
|
88
|
+
};
|
|
89
|
+
storeHandlers['+FLAGS'] = function (connection, message, flags, index, parsed, data) {
|
|
90
|
+
addFlags(connection, message, flags);
|
|
91
|
+
sendUpdate(connection, parsed, data, index, message);
|
|
92
|
+
};
|
|
93
|
+
storeHandlers['-FLAGS'] = function (connection, message, flags, index, parsed, data) {
|
|
94
|
+
removeFlags(connection, message, flags);
|
|
95
|
+
sendUpdate(connection, parsed, data, index, message);
|
|
96
|
+
};
|
|
97
|
+
storeHandlers['FLAGS.SILENT'] = function (connection, message, flags) {
|
|
98
|
+
setFlags(connection, message, flags);
|
|
99
|
+
};
|
|
100
|
+
storeHandlers['+FLAGS.SILENT'] = function (connection, message, flags) {
|
|
101
|
+
addFlags(connection, message, flags);
|
|
102
|
+
};
|
|
103
|
+
storeHandlers['-FLAGS.SILENT'] = function (connection, message, flags) {
|
|
104
|
+
removeFlags(connection, message, flags);
|
|
105
|
+
};
|
|
106
|
+
{
|
|
107
|
+
const defaultExport = exports.default;
|
|
108
|
+
if (defaultExport && (typeof defaultExport === 'function' || typeof defaultExport === 'object')) {
|
|
109
|
+
for (const key of Object.keys(exports)) {
|
|
110
|
+
if (key !== 'default' && !(key in defaultExport)) {
|
|
111
|
+
defaultExport[key] = exports[key];
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
Object.defineProperty(defaultExport, 'default', { value: defaultExport, enumerable: false, writable: true, configurable: true });
|
|
115
|
+
module.exports = defaultExport;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Built-in command handlers by command name
|
|
3
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
4
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
5
|
+
};
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.commands = void 0;
|
|
8
|
+
const append_js_1 = __importDefault(require("./append.js"));
|
|
9
|
+
const capability_js_1 = __importDefault(require("./capability.js"));
|
|
10
|
+
const check_js_1 = __importDefault(require("./check.js"));
|
|
11
|
+
const close_js_1 = __importDefault(require("./close.js"));
|
|
12
|
+
const copy_js_1 = __importDefault(require("./copy.js"));
|
|
13
|
+
const create_js_1 = __importDefault(require("./create.js"));
|
|
14
|
+
const delete_js_1 = __importDefault(require("./delete.js"));
|
|
15
|
+
const examine_js_1 = __importDefault(require("./examine.js"));
|
|
16
|
+
const expunge_js_1 = __importDefault(require("./expunge.js"));
|
|
17
|
+
const fetch_js_1 = __importDefault(require("./fetch.js"));
|
|
18
|
+
const list_js_1 = __importDefault(require("./list.js"));
|
|
19
|
+
const login_js_1 = __importDefault(require("./login.js"));
|
|
20
|
+
const logout_js_1 = __importDefault(require("./logout.js"));
|
|
21
|
+
const lsub_js_1 = __importDefault(require("./lsub.js"));
|
|
22
|
+
const noop_js_1 = __importDefault(require("./noop.js"));
|
|
23
|
+
const rename_js_1 = __importDefault(require("./rename.js"));
|
|
24
|
+
const search_js_1 = __importDefault(require("./search.js"));
|
|
25
|
+
const select_js_1 = __importDefault(require("./select.js"));
|
|
26
|
+
const status_js_1 = __importDefault(require("./status.js"));
|
|
27
|
+
const store_js_1 = __importDefault(require("./store.js"));
|
|
28
|
+
const subscribe_js_1 = __importDefault(require("./subscribe.js"));
|
|
29
|
+
const uid_copy_js_1 = __importDefault(require("./uid-copy.js"));
|
|
30
|
+
const uid_fetch_js_1 = __importDefault(require("./uid-fetch.js"));
|
|
31
|
+
const uid_search_js_1 = __importDefault(require("./uid-search.js"));
|
|
32
|
+
const uid_store_js_1 = __importDefault(require("./uid-store.js"));
|
|
33
|
+
const unsubscribe_js_1 = __importDefault(require("./unsubscribe.js"));
|
|
34
|
+
exports.commands = {
|
|
35
|
+
APPEND: append_js_1.default,
|
|
36
|
+
CAPABILITY: capability_js_1.default,
|
|
37
|
+
CHECK: check_js_1.default,
|
|
38
|
+
CLOSE: close_js_1.default,
|
|
39
|
+
COPY: copy_js_1.default,
|
|
40
|
+
CREATE: create_js_1.default,
|
|
41
|
+
DELETE: delete_js_1.default,
|
|
42
|
+
EXAMINE: examine_js_1.default,
|
|
43
|
+
EXPUNGE: expunge_js_1.default,
|
|
44
|
+
FETCH: fetch_js_1.default,
|
|
45
|
+
LIST: list_js_1.default,
|
|
46
|
+
LOGIN: login_js_1.default,
|
|
47
|
+
LOGOUT: logout_js_1.default,
|
|
48
|
+
LSUB: lsub_js_1.default,
|
|
49
|
+
NOOP: noop_js_1.default,
|
|
50
|
+
RENAME: rename_js_1.default,
|
|
51
|
+
SEARCH: search_js_1.default,
|
|
52
|
+
SELECT: select_js_1.default,
|
|
53
|
+
STATUS: status_js_1.default,
|
|
54
|
+
STORE: store_js_1.default,
|
|
55
|
+
SUBSCRIBE: subscribe_js_1.default,
|
|
56
|
+
'UID COPY': uid_copy_js_1.default,
|
|
57
|
+
'UID FETCH': uid_fetch_js_1.default,
|
|
58
|
+
'UID SEARCH': uid_search_js_1.default,
|
|
59
|
+
'UID STORE': uid_store_js_1.default,
|
|
60
|
+
UNSUBSCRIBE: unsubscribe_js_1.default
|
|
61
|
+
};
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.default = listCommand;
|
|
4
|
+
function listCommand(connection, parsed, data, callback) {
|
|
5
|
+
let folders;
|
|
6
|
+
if (!parsed.attributes ||
|
|
7
|
+
parsed.attributes.length !== 2 ||
|
|
8
|
+
!parsed.attributes[0] ||
|
|
9
|
+
['STRING', 'LITERAL', 'ATOM'].indexOf(parsed.attributes[0].type) < 0 ||
|
|
10
|
+
!parsed.attributes[1] ||
|
|
11
|
+
['STRING', 'LITERAL', 'ATOM'].indexOf(parsed.attributes[1].type) < 0) {
|
|
12
|
+
connection.send({
|
|
13
|
+
tag: parsed.tag,
|
|
14
|
+
command: 'BAD',
|
|
15
|
+
attributes: [
|
|
16
|
+
{
|
|
17
|
+
type: 'TEXT',
|
|
18
|
+
value: 'LIST expects 2 string arguments'
|
|
19
|
+
}
|
|
20
|
+
]
|
|
21
|
+
}, 'INVALID COMMAND', parsed, data);
|
|
22
|
+
return callback();
|
|
23
|
+
}
|
|
24
|
+
if (!parsed.attributes[1].value) {
|
|
25
|
+
// empty reference lists separator only
|
|
26
|
+
const namespace = connection.server.storage[parsed.attributes[1].value || connection.server.referenceNamespace];
|
|
27
|
+
if (namespace) {
|
|
28
|
+
connection.send({
|
|
29
|
+
tag: '*',
|
|
30
|
+
command: 'LIST',
|
|
31
|
+
attributes: [
|
|
32
|
+
[
|
|
33
|
+
{
|
|
34
|
+
type: 'ATOM',
|
|
35
|
+
value: '\\Noselect'
|
|
36
|
+
}
|
|
37
|
+
],
|
|
38
|
+
namespace.separator,
|
|
39
|
+
''
|
|
40
|
+
]
|
|
41
|
+
}, 'LIST ITEM', parsed, data);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
folders = connection.server.matchFolders(parsed.attributes[0].value, parsed.attributes[1].value, (path) => connection.exportMailboxName(path));
|
|
46
|
+
folders.forEach((folder) => {
|
|
47
|
+
connection.send({
|
|
48
|
+
tag: '*',
|
|
49
|
+
command: 'LIST',
|
|
50
|
+
attributes: [
|
|
51
|
+
folder.flags.map((flag) => {
|
|
52
|
+
return {
|
|
53
|
+
type: 'ATOM',
|
|
54
|
+
value: flag
|
|
55
|
+
};
|
|
56
|
+
}),
|
|
57
|
+
connection.server.getSeparator(folder),
|
|
58
|
+
connection.exportMailboxName(folder.path)
|
|
59
|
+
]
|
|
60
|
+
}, 'LIST ITEM', parsed, data, folder);
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
connection.send({
|
|
64
|
+
tag: parsed.tag,
|
|
65
|
+
command: 'OK',
|
|
66
|
+
attributes: [
|
|
67
|
+
{
|
|
68
|
+
type: 'TEXT',
|
|
69
|
+
value: 'Completed'
|
|
70
|
+
}
|
|
71
|
+
]
|
|
72
|
+
}, 'LIST', parsed, data);
|
|
73
|
+
return callback();
|
|
74
|
+
}
|
|
75
|
+
{
|
|
76
|
+
const defaultExport = exports.default;
|
|
77
|
+
if (defaultExport && (typeof defaultExport === 'function' || typeof defaultExport === 'object')) {
|
|
78
|
+
for (const key of Object.keys(exports)) {
|
|
79
|
+
if (key !== 'default' && !(key in defaultExport)) {
|
|
80
|
+
defaultExport[key] = exports[key];
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
Object.defineProperty(defaultExport, 'default', { value: defaultExport, enumerable: false, writable: true, configurable: true });
|
|
84
|
+
module.exports = defaultExport;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.default = loginCommand;
|
|
4
|
+
function loginCommand(connection, parsed, data, callback) {
|
|
5
|
+
// LOGIN expects 2 string params - username and password
|
|
6
|
+
if (!parsed.attributes ||
|
|
7
|
+
parsed.attributes.length !== 2 ||
|
|
8
|
+
!parsed.attributes[0] ||
|
|
9
|
+
!parsed.attributes[1] ||
|
|
10
|
+
['STRING', 'LITERAL', 'ATOM'].indexOf(parsed.attributes[0].type) < 0 ||
|
|
11
|
+
['STRING', 'LITERAL', 'ATOM'].indexOf(parsed.attributes[1].type) < 0) {
|
|
12
|
+
connection.send({
|
|
13
|
+
tag: parsed.tag,
|
|
14
|
+
command: 'BAD',
|
|
15
|
+
attributes: [
|
|
16
|
+
{
|
|
17
|
+
type: 'TEXT',
|
|
18
|
+
value: 'LOGIN takes 2 string arguments'
|
|
19
|
+
}
|
|
20
|
+
]
|
|
21
|
+
}, 'INVALID COMMAND', parsed, data);
|
|
22
|
+
return callback();
|
|
23
|
+
}
|
|
24
|
+
// User names are unicode strings everywhere (LOGIN, SASL, ACL identifiers). LOGIN does not take UTF-8
|
|
25
|
+
// user names or passwords, a client MUST use AUTHENTICATE for these (RFC 6855 and RFC 9755 section 5)
|
|
26
|
+
if (parsed.attributes.some(attr => /[\x80-\xff]/.test(attr.value))) {
|
|
27
|
+
connection.sendStatus(parsed, data, 'BAD', 'LOGIN does not take UTF-8 user names or passwords, use AUTHENTICATE (RFC 9755 section 5)');
|
|
28
|
+
return callback();
|
|
29
|
+
}
|
|
30
|
+
const user = connection.server.getUser(parsed.attributes[0].value);
|
|
31
|
+
if (!user || user.password !== parsed.attributes[1].value) {
|
|
32
|
+
// RFC 5530 section 3: unknown user or bad password
|
|
33
|
+
connection.sendStatus(parsed, data, 'NO', 'Login failed: authentication failure', 'AUTHENTICATIONFAILED', 'LOGIN FAILED');
|
|
34
|
+
return callback();
|
|
35
|
+
}
|
|
36
|
+
connection.state = 'Authenticated';
|
|
37
|
+
// the authenticated user, for plugins that tell users apart (e.g. ACL)
|
|
38
|
+
connection.username = parsed.attributes[0].value;
|
|
39
|
+
connection.send({
|
|
40
|
+
tag: parsed.tag,
|
|
41
|
+
command: 'OK',
|
|
42
|
+
attributes: [
|
|
43
|
+
{
|
|
44
|
+
type: 'TEXT',
|
|
45
|
+
value: 'User logged in'
|
|
46
|
+
}
|
|
47
|
+
]
|
|
48
|
+
}, 'LOGIN SUCCESS', parsed, data);
|
|
49
|
+
callback();
|
|
50
|
+
}
|
|
51
|
+
{
|
|
52
|
+
const defaultExport = exports.default;
|
|
53
|
+
if (defaultExport && (typeof defaultExport === 'function' || typeof defaultExport === 'object')) {
|
|
54
|
+
for (const key of Object.keys(exports)) {
|
|
55
|
+
if (key !== 'default' && !(key in defaultExport)) {
|
|
56
|
+
defaultExport[key] = exports[key];
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
Object.defineProperty(defaultExport, 'default', { value: defaultExport, enumerable: false, writable: true, configurable: true });
|
|
60
|
+
module.exports = defaultExport;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.default = logoutCommand;
|
|
4
|
+
function logoutCommand(connection, parsed, data, callback) {
|
|
5
|
+
connection.state = 'Logout';
|
|
6
|
+
connection.send({
|
|
7
|
+
tag: '*',
|
|
8
|
+
command: 'BYE',
|
|
9
|
+
attributes: [
|
|
10
|
+
{
|
|
11
|
+
type: 'TEXT',
|
|
12
|
+
value: 'LOGOUT received'
|
|
13
|
+
}
|
|
14
|
+
]
|
|
15
|
+
}, 'LOGOUT UNTAGGED', parsed, data);
|
|
16
|
+
connection.send({
|
|
17
|
+
tag: parsed.tag,
|
|
18
|
+
command: 'OK',
|
|
19
|
+
attributes: [
|
|
20
|
+
{
|
|
21
|
+
type: 'TEXT',
|
|
22
|
+
value: 'Completed'
|
|
23
|
+
}
|
|
24
|
+
]
|
|
25
|
+
}, 'LOGOUT COMPLETED', parsed, data);
|
|
26
|
+
connection.end();
|
|
27
|
+
callback();
|
|
28
|
+
}
|
|
29
|
+
{
|
|
30
|
+
const defaultExport = exports.default;
|
|
31
|
+
if (defaultExport && (typeof defaultExport === 'function' || typeof defaultExport === 'object')) {
|
|
32
|
+
for (const key of Object.keys(exports)) {
|
|
33
|
+
if (key !== 'default' && !(key in defaultExport)) {
|
|
34
|
+
defaultExport[key] = exports[key];
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
Object.defineProperty(defaultExport, 'default', { value: defaultExport, enumerable: false, writable: true, configurable: true });
|
|
38
|
+
module.exports = defaultExport;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.default = lsubCommand;
|
|
4
|
+
function lsubCommand(connection, parsed, data, callback) {
|
|
5
|
+
if (!parsed.attributes ||
|
|
6
|
+
parsed.attributes.length !== 2 ||
|
|
7
|
+
!parsed.attributes[0] ||
|
|
8
|
+
['STRING', 'LITERAL', 'ATOM'].indexOf(parsed.attributes[0].type) < 0 ||
|
|
9
|
+
!parsed.attributes[1] ||
|
|
10
|
+
['STRING', 'LITERAL', 'ATOM'].indexOf(parsed.attributes[1].type) < 0) {
|
|
11
|
+
connection.send({
|
|
12
|
+
tag: parsed.tag,
|
|
13
|
+
command: 'BAD',
|
|
14
|
+
attributes: [
|
|
15
|
+
{
|
|
16
|
+
type: 'TEXT',
|
|
17
|
+
value: 'LSUB expects 2 string arguments'
|
|
18
|
+
}
|
|
19
|
+
]
|
|
20
|
+
}, 'INVALID COMMAND', parsed, data);
|
|
21
|
+
return callback();
|
|
22
|
+
}
|
|
23
|
+
const server = connection.server;
|
|
24
|
+
const match = parsed.attributes[1].value;
|
|
25
|
+
const folders = server.matchFolders(parsed.attributes[0].value, match, (path) => connection.exportMailboxName(path), server.getSubscriptionTree());
|
|
26
|
+
folders.forEach((folder) => {
|
|
27
|
+
let flags;
|
|
28
|
+
if (folder.subscribed) {
|
|
29
|
+
// the subscription list holds names, a subscribed name is listed even if the mailbox does not exist.
|
|
30
|
+
// \Noselect has a special meaning in LSUB (RFC 5258 section 3.1), so it is not listed for these
|
|
31
|
+
flags = folder.flags.filter((flag) => flag !== '\\Noselect');
|
|
32
|
+
}
|
|
33
|
+
else if (match.substr(-1) === '%') {
|
|
34
|
+
// RFC 3501 section 6.3.9: with "%" a level that is not subscribed but has subscribed names
|
|
35
|
+
// below it is listed with \Noselect
|
|
36
|
+
flags = ['\\Noselect'];
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
connection.send({
|
|
42
|
+
tag: '*',
|
|
43
|
+
command: 'LSUB',
|
|
44
|
+
attributes: [
|
|
45
|
+
flags.map((flag) => {
|
|
46
|
+
return {
|
|
47
|
+
type: 'ATOM',
|
|
48
|
+
value: flag
|
|
49
|
+
};
|
|
50
|
+
}),
|
|
51
|
+
server.getSeparator(folder),
|
|
52
|
+
connection.exportMailboxName(folder.path)
|
|
53
|
+
]
|
|
54
|
+
}, 'LSUB ITEM', parsed, data, folder);
|
|
55
|
+
});
|
|
56
|
+
connection.send({
|
|
57
|
+
tag: parsed.tag,
|
|
58
|
+
command: 'OK',
|
|
59
|
+
attributes: [
|
|
60
|
+
{
|
|
61
|
+
type: 'TEXT',
|
|
62
|
+
value: 'Completed'
|
|
63
|
+
}
|
|
64
|
+
]
|
|
65
|
+
}, 'LSUB', parsed, data);
|
|
66
|
+
return callback();
|
|
67
|
+
}
|
|
68
|
+
{
|
|
69
|
+
const defaultExport = exports.default;
|
|
70
|
+
if (defaultExport && (typeof defaultExport === 'function' || typeof defaultExport === 'object')) {
|
|
71
|
+
for (const key of Object.keys(exports)) {
|
|
72
|
+
if (key !== 'default' && !(key in defaultExport)) {
|
|
73
|
+
defaultExport[key] = exports[key];
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
Object.defineProperty(defaultExport, 'default', { value: defaultExport, enumerable: false, writable: true, configurable: true });
|
|
77
|
+
module.exports = defaultExport;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.default = noopCommand;
|
|
4
|
+
function noopCommand(connection, parsed, data, callback) {
|
|
5
|
+
connection.send({
|
|
6
|
+
tag: parsed.tag,
|
|
7
|
+
command: 'OK',
|
|
8
|
+
attributes: [
|
|
9
|
+
{
|
|
10
|
+
type: 'TEXT',
|
|
11
|
+
value: 'Completed'
|
|
12
|
+
}
|
|
13
|
+
]
|
|
14
|
+
}, 'NOOP completed', parsed, data);
|
|
15
|
+
callback();
|
|
16
|
+
}
|
|
17
|
+
{
|
|
18
|
+
const defaultExport = exports.default;
|
|
19
|
+
if (defaultExport && (typeof defaultExport === 'function' || typeof defaultExport === 'object')) {
|
|
20
|
+
for (const key of Object.keys(exports)) {
|
|
21
|
+
if (key !== 'default' && !(key in defaultExport)) {
|
|
22
|
+
defaultExport[key] = exports[key];
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
Object.defineProperty(defaultExport, 'default', { value: defaultExport, enumerable: false, writable: true, configurable: true });
|
|
26
|
+
module.exports = defaultExport;
|
|
27
|
+
}
|
|
28
|
+
}
|