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,42 +1,32 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
module.exports = function (connection, parsed, data, callback) {
|
|
1
|
+
export default function deleteCommand(connection, parsed, data, callback) {
|
|
4
2
|
if (!parsed.attributes || parsed.attributes.length !== 1 || !parsed.attributes[0] || ['STRING', 'LITERAL', 'ATOM'].indexOf(parsed.attributes[0].type) < 0) {
|
|
5
|
-
connection.send(
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
},
|
|
16
|
-
'INVALID COMMAND',
|
|
17
|
-
parsed,
|
|
18
|
-
data
|
|
19
|
-
);
|
|
3
|
+
connection.send({
|
|
4
|
+
tag: parsed.tag,
|
|
5
|
+
command: 'BAD',
|
|
6
|
+
attributes: [
|
|
7
|
+
{
|
|
8
|
+
type: 'TEXT',
|
|
9
|
+
value: 'DELETE expects mailbox name'
|
|
10
|
+
}
|
|
11
|
+
]
|
|
12
|
+
}, 'INVALID COMMAND', parsed, data);
|
|
20
13
|
return callback();
|
|
21
14
|
}
|
|
22
|
-
|
|
23
15
|
const path = parsed.attributes[0].value;
|
|
24
|
-
|
|
25
16
|
const mailbox = connection.server.getMailbox(path);
|
|
26
|
-
|
|
27
17
|
if (!mailbox) {
|
|
28
18
|
connection.sendStatus(parsed, data, 'NO', 'Mailbox does not exist', 'NONEXISTENT', 'DELETE FAILED');
|
|
29
19
|
return callback();
|
|
30
20
|
}
|
|
31
|
-
|
|
32
21
|
try {
|
|
33
22
|
connection.server.deleteMailbox(path);
|
|
34
|
-
}
|
|
23
|
+
}
|
|
24
|
+
catch (err) {
|
|
25
|
+
const E = err;
|
|
35
26
|
connection.sendStatus(parsed, data, 'NO', E.message, E.code, 'DELETE FAILED');
|
|
36
27
|
return callback();
|
|
37
28
|
}
|
|
38
29
|
connection.server.mailboxChanged('delete', mailbox.path, { mailbox });
|
|
39
|
-
|
|
40
30
|
// RFC 2180 section 3.3: the other sessions that have the mailbox selected are disconnected with an untagged
|
|
41
31
|
// BYE (RFC 2683 section 3.1.2), as they can not be told about the deletion in any other way
|
|
42
32
|
connection.server.connections.forEach(other => {
|
|
@@ -44,21 +34,15 @@ module.exports = function (connection, parsed, data, callback) {
|
|
|
44
34
|
other.bye('Selected mailbox was deleted', 'MAILBOX DELETED');
|
|
45
35
|
}
|
|
46
36
|
});
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
]
|
|
58
|
-
},
|
|
59
|
-
'DELETE',
|
|
60
|
-
parsed,
|
|
61
|
-
data
|
|
62
|
-
);
|
|
37
|
+
connection.send({
|
|
38
|
+
tag: parsed.tag,
|
|
39
|
+
command: 'OK',
|
|
40
|
+
attributes: [
|
|
41
|
+
{
|
|
42
|
+
type: 'TEXT',
|
|
43
|
+
value: 'DELETE completed'
|
|
44
|
+
}
|
|
45
|
+
]
|
|
46
|
+
}, 'DELETE', parsed, data);
|
|
63
47
|
return callback();
|
|
64
|
-
}
|
|
48
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export default function expungeCommand(connection, parsed, data, callback) {
|
|
2
|
+
if (connection.refuseReadOnly(parsed, data, 'EXPUNGE FAILED')) {
|
|
3
|
+
return callback();
|
|
4
|
+
}
|
|
5
|
+
connection.expungeDeleted(connection.selectedMailbox, false, true);
|
|
6
|
+
connection.send({
|
|
7
|
+
tag: parsed.tag,
|
|
8
|
+
command: 'OK',
|
|
9
|
+
attributes: [
|
|
10
|
+
{
|
|
11
|
+
type: 'TEXT',
|
|
12
|
+
value: 'EXPUNGE Completed'
|
|
13
|
+
}
|
|
14
|
+
]
|
|
15
|
+
}, 'EXPUNGE', parsed, data);
|
|
16
|
+
callback();
|
|
17
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { Attribute, Callback, FetchHandler, IMAPConnection, Message, ParsedCommand } from '../types.js';
|
|
2
|
+
declare const macros: Record<string, string[]>;
|
|
3
|
+
/**
|
|
4
|
+
* Builds the data list of a FETCH response for a message, without any side effects like setting \Seen
|
|
5
|
+
*
|
|
6
|
+
* @param {Object} connection IMAP connection
|
|
7
|
+
* @param {Object} message Message object
|
|
8
|
+
* @param {Array} params Fetch items
|
|
9
|
+
* @param {Array} [handlers] Handlers from getHandlers
|
|
10
|
+
* @param {Array} [names] Names from responseNames
|
|
11
|
+
* @return {Array} FETCH data items
|
|
12
|
+
* @throws {Error} for an unknown item or invalid item arguments
|
|
13
|
+
*/
|
|
14
|
+
declare function fetchResponse(connection: IMAPConnection, message: Message, params: Attribute[], handlers?: FetchHandler[], names?: Attribute[]): Attribute[];
|
|
15
|
+
/**
|
|
16
|
+
* Shared implementation of FETCH and UID FETCH
|
|
17
|
+
*
|
|
18
|
+
* @param {Boolean} isUid If true, the sequence set lists UIDs and UID is always included in the response
|
|
19
|
+
*/
|
|
20
|
+
declare function processFetch(isUid: boolean, connection: IMAPConnection, parsed: ParsedCommand, data: string, callback: Callback): void;
|
|
21
|
+
declare const fetchCommand: (connection: IMAPConnection, parsed: ParsedCommand, data: string, callback: Callback) => void;
|
|
22
|
+
export default fetchCommand;
|
|
23
|
+
export { processFetch, macros, fetchResponse };
|
|
@@ -1,13 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
const fetchHandlers = require('./handlers/fetch');
|
|
4
|
-
|
|
1
|
+
import fetchHandlers from './handlers/fetch.js';
|
|
5
2
|
const macros = {
|
|
6
3
|
ALL: ['FLAGS', 'INTERNALDATE', 'RFC822.SIZE', 'ENVELOPE'],
|
|
7
4
|
FAST: ['FLAGS', 'INTERNALDATE', 'RFC822.SIZE'],
|
|
8
5
|
FULL: ['FLAGS', 'INTERNALDATE', 'RFC822.SIZE', 'ENVELOPE', 'BODY']
|
|
9
6
|
};
|
|
10
|
-
|
|
11
7
|
/**
|
|
12
8
|
* Returns the item names as they appear in a FETCH response, without .PEEK and only with the origin
|
|
13
9
|
* octet of a partial range (RFC 3501 section 7.4.2)
|
|
@@ -16,7 +12,7 @@ const macros = {
|
|
|
16
12
|
* @return {Array} names
|
|
17
13
|
*/
|
|
18
14
|
function responseNames(params) {
|
|
19
|
-
return params.map(param => {
|
|
15
|
+
return params.map((param) => {
|
|
20
16
|
const name = Object.assign({}, param, { value: param.value.replace(/\.PEEK\b/i, '') });
|
|
21
17
|
if (name.partial) {
|
|
22
18
|
name.partial = name.partial.slice(0, 1);
|
|
@@ -24,7 +20,6 @@ function responseNames(params) {
|
|
|
24
20
|
return name;
|
|
25
21
|
});
|
|
26
22
|
}
|
|
27
|
-
|
|
28
23
|
/**
|
|
29
24
|
* Returns the handlers of fetch items
|
|
30
25
|
*
|
|
@@ -43,7 +38,6 @@ function getHandlers(connection, params) {
|
|
|
43
38
|
return handler;
|
|
44
39
|
});
|
|
45
40
|
}
|
|
46
|
-
|
|
47
41
|
/**
|
|
48
42
|
* Builds the data list of a FETCH response for a message, without any side effects like setting \Seen
|
|
49
43
|
*
|
|
@@ -56,13 +50,12 @@ function getHandlers(connection, params) {
|
|
|
56
50
|
* @throws {Error} for an unknown item or invalid item arguments
|
|
57
51
|
*/
|
|
58
52
|
function fetchResponse(connection, message, params, handlers, names) {
|
|
59
|
-
|
|
60
|
-
|
|
53
|
+
const itemHandlers = handlers || getHandlers(connection, params);
|
|
54
|
+
const itemNames = names || responseNames(params);
|
|
61
55
|
const response = [];
|
|
62
|
-
params.forEach((param, i) => response.push(
|
|
56
|
+
params.forEach((param, i) => response.push(itemNames[i], itemHandlers[i](connection, message, param)));
|
|
63
57
|
return response;
|
|
64
58
|
}
|
|
65
|
-
|
|
66
59
|
/**
|
|
67
60
|
* Shared implementation of FETCH and UID FETCH
|
|
68
61
|
*
|
|
@@ -70,99 +63,76 @@ function fetchResponse(connection, message, params, handlers, names) {
|
|
|
70
63
|
*/
|
|
71
64
|
function processFetch(isUid, connection, parsed, data, callback) {
|
|
72
65
|
const command = isUid ? 'UID FETCH' : 'FETCH';
|
|
73
|
-
|
|
74
|
-
if (
|
|
75
|
-
!parsed.attributes ||
|
|
66
|
+
if (!parsed.attributes ||
|
|
76
67
|
parsed.attributes.length !== 2 ||
|
|
77
68
|
!parsed.attributes[0] ||
|
|
78
69
|
['ATOM', 'SEQUENCE'].indexOf(parsed.attributes[0].type) < 0 ||
|
|
79
70
|
!parsed.attributes[1] ||
|
|
80
|
-
(['ATOM'].indexOf(parsed.attributes[1].type) < 0 && !Array.isArray(parsed.attributes[1]))
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
]
|
|
92
|
-
},
|
|
93
|
-
'INVALID COMMAND',
|
|
94
|
-
parsed,
|
|
95
|
-
data
|
|
96
|
-
);
|
|
71
|
+
(['ATOM'].indexOf(parsed.attributes[1].type) < 0 && !Array.isArray(parsed.attributes[1]))) {
|
|
72
|
+
connection.send({
|
|
73
|
+
tag: parsed.tag,
|
|
74
|
+
command: 'BAD',
|
|
75
|
+
attributes: [
|
|
76
|
+
{
|
|
77
|
+
type: 'TEXT',
|
|
78
|
+
value: command + ' expects sequence set and message item names'
|
|
79
|
+
}
|
|
80
|
+
]
|
|
81
|
+
}, 'INVALID COMMAND', parsed, data);
|
|
97
82
|
return callback();
|
|
98
83
|
}
|
|
99
|
-
|
|
100
84
|
const range = connection.limitRange(parsed, connection.getCommandRange(parsed.attributes[0].value, isUid));
|
|
101
85
|
let params = [].concat(parsed.attributes[1] || []);
|
|
102
|
-
|
|
103
86
|
if (parsed.attributes[1].type === 'ATOM' && Object.prototype.hasOwnProperty.call(macros, parsed.attributes[1].value.toUpperCase())) {
|
|
104
87
|
params = macros[parsed.attributes[1].value.toUpperCase()].slice();
|
|
105
88
|
}
|
|
106
|
-
|
|
107
89
|
// messages that get \Seen set by this FETCH
|
|
108
90
|
const seen = [];
|
|
109
91
|
// untagged FETCH responses and their messages
|
|
110
92
|
const responses = [];
|
|
111
93
|
const messages = [];
|
|
112
|
-
|
|
113
94
|
try {
|
|
114
95
|
let uidExist = false;
|
|
115
96
|
let flagsExist = false;
|
|
116
97
|
let forceSeen = false;
|
|
117
|
-
|
|
118
98
|
params.forEach((param, i) => {
|
|
119
99
|
if (!param || (typeof param !== 'string' && param.type !== 'ATOM')) {
|
|
120
100
|
throw new Error('Invalid FETCH argument #' + (i + 1));
|
|
121
101
|
}
|
|
122
|
-
|
|
123
102
|
if (typeof param === 'string') {
|
|
124
103
|
param = params[i] = {
|
|
125
104
|
type: 'ATOM',
|
|
126
105
|
value: param
|
|
127
106
|
};
|
|
128
107
|
}
|
|
129
|
-
|
|
130
108
|
const key = param.value.toUpperCase();
|
|
131
|
-
|
|
132
109
|
if (key === 'FLAGS') {
|
|
133
110
|
flagsExist = true;
|
|
134
111
|
}
|
|
135
|
-
|
|
136
112
|
if (key === 'UID') {
|
|
137
113
|
uidExist = true;
|
|
138
114
|
}
|
|
139
|
-
|
|
140
115
|
// RFC 3501 6.4.5: BODY[<section>] and items whose handler is marked with setsSeen set \Seen
|
|
141
116
|
const handler = connection.server.fetchHandlers[key] || fetchHandlers[key];
|
|
142
117
|
if (connection.canSetSeen() && ((key === 'BODY' && param.section) || (handler && handler.setsSeen))) {
|
|
143
118
|
forceSeen = true;
|
|
144
119
|
}
|
|
145
120
|
});
|
|
146
|
-
|
|
147
121
|
if (forceSeen && !flagsExist) {
|
|
148
122
|
params.push({
|
|
149
123
|
type: 'ATOM',
|
|
150
124
|
value: 'FLAGS'
|
|
151
125
|
});
|
|
152
126
|
}
|
|
153
|
-
|
|
154
127
|
if (isUid && !uidExist) {
|
|
155
128
|
params.push({
|
|
156
129
|
type: 'ATOM',
|
|
157
130
|
value: 'UID'
|
|
158
131
|
});
|
|
159
132
|
}
|
|
160
|
-
|
|
161
133
|
const handlers = getHandlers(connection, params);
|
|
162
|
-
|
|
163
134
|
// item names as they appear in the response
|
|
164
135
|
const names = responseNames(params);
|
|
165
|
-
|
|
166
136
|
// nothing is sent before every message is done, so a failing item leaves no partial output
|
|
167
137
|
range.forEach(rangeMessage => {
|
|
168
138
|
for (let i = 0, len = connection.server.fetchFilters.length; i < len; i++) {
|
|
@@ -170,14 +140,11 @@ function processFetch(isUid, connection, parsed, data, callback) {
|
|
|
170
140
|
return;
|
|
171
141
|
}
|
|
172
142
|
}
|
|
173
|
-
|
|
174
143
|
if (forceSeen && rangeMessage[1].flags.indexOf('\\Seen') < 0) {
|
|
175
144
|
rangeMessage[1].flags.push('\\Seen');
|
|
176
145
|
seen.push(rangeMessage[1]);
|
|
177
146
|
}
|
|
178
|
-
|
|
179
147
|
const response = fetchResponse(connection, rangeMessage[1], params, handlers, names);
|
|
180
|
-
|
|
181
148
|
messages.push(rangeMessage[1]);
|
|
182
149
|
responses.push({
|
|
183
150
|
tag: '*',
|
|
@@ -191,39 +158,31 @@ function processFetch(isUid, connection, parsed, data, callback) {
|
|
|
191
158
|
]
|
|
192
159
|
});
|
|
193
160
|
});
|
|
194
|
-
}
|
|
161
|
+
}
|
|
162
|
+
catch (err) {
|
|
163
|
+
const E = err;
|
|
195
164
|
// the failed FETCH did not set \Seen after all
|
|
196
165
|
seen.forEach(message => connection.server.removeFlag(message.flags, '\\Seen'));
|
|
197
166
|
// a handler can fail with NO and a response code, e.g. NO [UNKNOWN-CTE] (RFC 3516 section 4.3)
|
|
198
167
|
connection.sendStatus(parsed, data, E.imapResponse === 'NO' ? 'NO' : 'BAD', E.message, E.code, command + ' FAILED');
|
|
199
168
|
return callback();
|
|
200
169
|
}
|
|
201
|
-
|
|
202
170
|
// the message goes with its response, for output handlers
|
|
203
171
|
responses.forEach((response, i) => connection.send(response, command, parsed, data, messages[i]));
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
]
|
|
215
|
-
},
|
|
216
|
-
command,
|
|
217
|
-
parsed,
|
|
218
|
-
data
|
|
219
|
-
);
|
|
220
|
-
|
|
172
|
+
connection.send({
|
|
173
|
+
tag: parsed.tag,
|
|
174
|
+
command: 'OK',
|
|
175
|
+
attributes: [
|
|
176
|
+
{
|
|
177
|
+
type: 'TEXT',
|
|
178
|
+
value: command + ' Completed'
|
|
179
|
+
}
|
|
180
|
+
]
|
|
181
|
+
}, command, parsed, data);
|
|
221
182
|
// other sessions that have the mailbox selected learn about the new flags (RFC 3501 section 5.2)
|
|
222
183
|
connection.notifyFlagChanges(seen);
|
|
223
184
|
return callback();
|
|
224
185
|
}
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
module.exports.macros = macros;
|
|
229
|
-
module.exports.fetchResponse = fetchResponse;
|
|
186
|
+
const fetchCommand = (connection, parsed, data, callback) => processFetch(false, connection, parsed, data, callback);
|
|
187
|
+
export default fetchCommand;
|
|
188
|
+
export { processFetch, macros, fetchResponse };
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { FetchHandler } from '../../types.js';
|
|
2
|
+
declare const fetchHandlers: Record<string, FetchHandler>;
|
|
3
|
+
export default fetchHandlers;
|
|
4
|
+
/**
|
|
5
|
+
* Applies the partial range of a BODY[]<start.length> or BINARY[]<start.length> item
|
|
6
|
+
*
|
|
7
|
+
* @param {String} value Section contents
|
|
8
|
+
* @param {Array} [partial] Parsed partial range
|
|
9
|
+
* @return {String} The requested slice, or the whole value without a range
|
|
10
|
+
*/
|
|
11
|
+
declare function applyPartial(value: string, partial: number[] | null | undefined): string;
|
|
12
|
+
export { applyPartial };
|
|
@@ -1,20 +1,13 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
import { getMessageData, resolveNode, embeddedMessage, headerSection, render } from '../../mimeparser.js';
|
|
2
|
+
import bodystructure from '../../bodystructure.js';
|
|
3
|
+
import envelope from '../../envelope.js';
|
|
3
4
|
const fetchHandlers = {};
|
|
4
|
-
|
|
5
|
-
const bodystructure = require('../../bodystructure');
|
|
6
|
-
const envelope = require('../../envelope');
|
|
7
|
-
|
|
8
|
-
const { getMessageData, resolveNode, embeddedMessage, headerSection, render } = mimeParser;
|
|
9
|
-
|
|
10
|
-
module.exports = fetchHandlers;
|
|
5
|
+
export default fetchHandlers;
|
|
11
6
|
// not an IMAP item, so not enumerable among the handlers
|
|
12
7
|
Object.defineProperty(fetchHandlers, 'applyPartial', { value: applyPartial });
|
|
13
|
-
|
|
14
8
|
fetchHandlers.UID = function (connection, message) {
|
|
15
9
|
return message.uid;
|
|
16
10
|
};
|
|
17
|
-
|
|
18
11
|
fetchHandlers.FLAGS = function (connection, message) {
|
|
19
12
|
return connection.getFlags(message).map(flag => {
|
|
20
13
|
return {
|
|
@@ -23,7 +16,6 @@ fetchHandlers.FLAGS = function (connection, message) {
|
|
|
23
16
|
};
|
|
24
17
|
});
|
|
25
18
|
};
|
|
26
|
-
|
|
27
19
|
fetchHandlers.BODYSTRUCTURE = function (connection, message) {
|
|
28
20
|
return bodystructure(getMessageData(message).tree, {
|
|
29
21
|
upperCaseKeys: true,
|
|
@@ -31,18 +23,15 @@ fetchHandlers.BODYSTRUCTURE = function (connection, message) {
|
|
|
31
23
|
messageGlobal: connection.messageGlobal
|
|
32
24
|
});
|
|
33
25
|
};
|
|
34
|
-
|
|
35
26
|
fetchHandlers.ENVELOPE = function (connection, message) {
|
|
36
27
|
return envelope(getMessageData(message).tree.parsedHeader);
|
|
37
28
|
};
|
|
38
|
-
|
|
39
29
|
fetchHandlers['BODY.PEEK'] = function (connection, message, query) {
|
|
40
30
|
if (!query.section) {
|
|
41
31
|
throw new Error('BODY.PEEK requires ans argument list');
|
|
42
32
|
}
|
|
43
33
|
return fetchHandlers.BODY(connection, message, query);
|
|
44
34
|
};
|
|
45
|
-
|
|
46
35
|
/**
|
|
47
36
|
* Lists the header field names of a HEADER.FIELDS or HEADER.FIELDS.NOT section
|
|
48
37
|
*/
|
|
@@ -50,7 +39,7 @@ function getFieldNames(query, key) {
|
|
|
50
39
|
if (query.section.length !== 2 || !Array.isArray(query.section[1]) || !query.section[1].length) {
|
|
51
40
|
throw new Error(key + ' expects a list of header fields');
|
|
52
41
|
}
|
|
53
|
-
return query.section[1].map(queryKey => {
|
|
42
|
+
return query.section[1].map((queryKey) => {
|
|
54
43
|
if (['ATOM', 'STRING', 'LITERAL'].indexOf(queryKey.type) < 0) {
|
|
55
44
|
throw new Error('Invalid header field name in list');
|
|
56
45
|
}
|
|
@@ -58,7 +47,6 @@ function getFieldNames(query, key) {
|
|
|
58
47
|
return queryKey.value.toUpperCase();
|
|
59
48
|
});
|
|
60
49
|
}
|
|
61
|
-
|
|
62
50
|
/**
|
|
63
51
|
* Returns the contents of a BODY[<section>]
|
|
64
52
|
*
|
|
@@ -71,11 +59,9 @@ function getSection(data, query, global) {
|
|
|
71
59
|
if (!query.section.length) {
|
|
72
60
|
return data.raw;
|
|
73
61
|
}
|
|
74
|
-
|
|
75
62
|
if (query.section[0].type !== 'ATOM') {
|
|
76
63
|
throw new Error('Invalid BODY[<section>] identifier' + (query.section[0].value ? ' ' + query.section[0].type : ''));
|
|
77
64
|
}
|
|
78
|
-
|
|
79
65
|
// RFC 3501 9: section-part = nz-number *("." nz-number), optionally followed by a section-msgtext
|
|
80
66
|
// (or MIME for a part)
|
|
81
67
|
const match = (query.section[0].value || '')
|
|
@@ -84,41 +70,33 @@ function getSection(data, query, global) {
|
|
|
84
70
|
if (!match || (match[2] === 'MIME' && !match[1])) {
|
|
85
71
|
throw new Error('Invalid BODY[<section>] identifier ' + query.section[0].value);
|
|
86
72
|
}
|
|
87
|
-
|
|
88
73
|
const path = match[1] || '';
|
|
89
74
|
const key = match[2] || '';
|
|
90
|
-
let fields;
|
|
91
|
-
|
|
75
|
+
let fields = [];
|
|
92
76
|
if (['HEADER.FIELDS', 'HEADER.FIELDS.NOT'].indexOf(key) >= 0) {
|
|
93
77
|
fields = getFieldNames(query, key);
|
|
94
|
-
}
|
|
78
|
+
}
|
|
79
|
+
else if (query.section.length > 1) {
|
|
95
80
|
throw new Error((key || 'Part number') + ' does not take any arguments');
|
|
96
81
|
}
|
|
97
|
-
|
|
98
82
|
// RFC 3501 6.4.5: a part that does not exist is returned as an empty string
|
|
99
83
|
const node = path ? resolveNode(data.tree, path, global) : data.tree;
|
|
100
84
|
if (!node) {
|
|
101
85
|
return '';
|
|
102
86
|
}
|
|
103
|
-
|
|
104
87
|
// HEADER and TEXT with a part number refer to the encapsulated message of a message/rfc822 part
|
|
105
88
|
// (and message/global in IMAP4rev2, RFC 9051 section 6.4.5.1), not to the part itself
|
|
106
89
|
const message = path ? embeddedMessage(node, global) : node;
|
|
107
|
-
|
|
108
90
|
switch (key) {
|
|
109
91
|
case '':
|
|
110
92
|
// BODY[1.2.3] is a part without its MIME header
|
|
111
93
|
return render(node, true);
|
|
112
|
-
|
|
113
94
|
case 'MIME':
|
|
114
95
|
return headerSection(node);
|
|
115
|
-
|
|
116
96
|
case 'TEXT':
|
|
117
97
|
return message ? render(message, true) : '';
|
|
118
|
-
|
|
119
98
|
case 'HEADER':
|
|
120
99
|
return message ? headerSection(message) : '';
|
|
121
|
-
|
|
122
100
|
default: {
|
|
123
101
|
// HEADER.FIELDS and HEADER.FIELDS.NOT
|
|
124
102
|
if (!message) {
|
|
@@ -126,8 +104,8 @@ function getSection(data, query, global) {
|
|
|
126
104
|
}
|
|
127
105
|
const wanted = key === 'HEADER.FIELDS';
|
|
128
106
|
let value = '';
|
|
129
|
-
(message.header || []).forEach(line => {
|
|
130
|
-
const name = line.split(':').
|
|
107
|
+
(message.header || []).forEach((line) => {
|
|
108
|
+
const name = line.split(':')[0].toUpperCase().trim();
|
|
131
109
|
if (fields.indexOf(name) >= 0 === wanted) {
|
|
132
110
|
value += line + '\r\n';
|
|
133
111
|
}
|
|
@@ -136,7 +114,6 @@ function getSection(data, query, global) {
|
|
|
136
114
|
}
|
|
137
115
|
}
|
|
138
116
|
}
|
|
139
|
-
|
|
140
117
|
/**
|
|
141
118
|
* Applies the partial range of a BODY[]<start.length> or BINARY[]<start.length> item
|
|
142
119
|
*
|
|
@@ -154,10 +131,8 @@ function applyPartial(value, partial) {
|
|
|
154
131
|
}
|
|
155
132
|
return value.substr(partial[0], partial[1]);
|
|
156
133
|
}
|
|
157
|
-
|
|
158
134
|
fetchHandlers.BODY = function (connection, message, query) {
|
|
159
135
|
const data = getMessageData(message);
|
|
160
|
-
|
|
161
136
|
if (!query.section) {
|
|
162
137
|
if (query.partial) {
|
|
163
138
|
throw new Error('BODY without a section does not take a partial range');
|
|
@@ -168,38 +143,31 @@ fetchHandlers.BODY = function (connection, message, query) {
|
|
|
168
143
|
messageGlobal: connection.messageGlobal
|
|
169
144
|
});
|
|
170
145
|
}
|
|
171
|
-
|
|
172
146
|
return {
|
|
173
147
|
type: 'LITERAL',
|
|
174
148
|
value: applyPartial(getSection(data, query, connection.messageGlobal), query.partial)
|
|
175
149
|
};
|
|
176
150
|
};
|
|
177
|
-
|
|
178
151
|
fetchHandlers.INTERNALDATE = function (connection, message) {
|
|
179
152
|
return message.internaldate;
|
|
180
153
|
};
|
|
181
|
-
|
|
182
154
|
fetchHandlers.RFC822 = function (connection, message) {
|
|
183
155
|
return {
|
|
184
156
|
type: 'LITERAL',
|
|
185
157
|
value: getMessageData(message).raw
|
|
186
158
|
};
|
|
187
159
|
};
|
|
188
|
-
|
|
189
160
|
// RFC 3501 6.4.5: RFC822 and RFC822.TEXT set \Seen, RFC822.HEADER is BODY.PEEK[HEADER] and does not
|
|
190
161
|
fetchHandlers.RFC822.setsSeen = true;
|
|
191
|
-
|
|
192
162
|
fetchHandlers['RFC822.SIZE'] = function (connection, message) {
|
|
193
163
|
return getMessageData(message).raw.length;
|
|
194
164
|
};
|
|
195
|
-
|
|
196
165
|
fetchHandlers['RFC822.HEADER'] = function (connection, message) {
|
|
197
166
|
return {
|
|
198
167
|
type: 'LITERAL',
|
|
199
168
|
value: headerSection(getMessageData(message).tree)
|
|
200
169
|
};
|
|
201
170
|
};
|
|
202
|
-
|
|
203
171
|
fetchHandlers['RFC822.TEXT'] = function (connection, message) {
|
|
204
172
|
return {
|
|
205
173
|
type: 'LITERAL',
|
|
@@ -207,3 +175,4 @@ fetchHandlers['RFC822.TEXT'] = function (connection, message) {
|
|
|
207
175
|
};
|
|
208
176
|
};
|
|
209
177
|
fetchHandlers['RFC822.TEXT'].setsSeen = true;
|
|
178
|
+
export { applyPartial };
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { IMAPConnection } from '../../types.js';
|
|
2
|
+
declare const INVALID_KEYWORD_CHAR: RegExp;
|
|
3
|
+
/**
|
|
4
|
+
* System flags are case-insensitive, so "\seen" becomes "\Seen"
|
|
5
|
+
*
|
|
6
|
+
* @param {String} flag Flag value
|
|
7
|
+
* @return {String} Normalized flag
|
|
8
|
+
*/
|
|
9
|
+
declare function normalizeSystemFlag(flag: string): string;
|
|
10
|
+
/**
|
|
11
|
+
* Throws if a flag can not be stored: an unknown system flag (including \Recent) or an invalid keyword
|
|
12
|
+
*
|
|
13
|
+
* @param {Object} connection IMAP connection
|
|
14
|
+
* @param {String} flag Normalized flag value
|
|
15
|
+
*/
|
|
16
|
+
declare function checkSystemFlags(connection: IMAPConnection, flag: string): void;
|
|
17
|
+
export { INVALID_KEYWORD_CHAR, normalizeSystemFlag, checkSystemFlags };
|
|
@@ -1,11 +1,8 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
1
|
// RFC 3501 9: flag-keyword = atom = 1*ATOM-CHAR, so a keyword can not contain atom-specials:
|
|
4
2
|
// "(" / ")" / "{" / SP / CTL / list-wildcards / quoted-specials / resp-specials. 8-bit octets are
|
|
5
3
|
// allowed, the parser accepts them in atoms as well
|
|
6
4
|
// eslint-disable-next-line no-control-regex
|
|
7
5
|
const INVALID_KEYWORD_CHAR = /[\x00-\x1f\x7f (){%*"\\\]]/;
|
|
8
|
-
|
|
9
6
|
/**
|
|
10
7
|
* System flags are case-insensitive, so "\seen" becomes "\Seen"
|
|
11
8
|
*
|
|
@@ -18,7 +15,6 @@ function normalizeSystemFlag(flag) {
|
|
|
18
15
|
}
|
|
19
16
|
return flag;
|
|
20
17
|
}
|
|
21
|
-
|
|
22
18
|
/**
|
|
23
19
|
* Throws if a flag can not be stored: an unknown system flag (including \Recent) or an invalid keyword
|
|
24
20
|
*
|
|
@@ -30,13 +26,9 @@ function checkSystemFlags(connection, flag) {
|
|
|
30
26
|
if (connection.server.systemFlags.indexOf(flag) < 0) {
|
|
31
27
|
throw new Error('Invalid system flag ' + flag);
|
|
32
28
|
}
|
|
33
|
-
}
|
|
29
|
+
}
|
|
30
|
+
else if (!flag || INVALID_KEYWORD_CHAR.test(flag)) {
|
|
34
31
|
throw new Error('Invalid flag keyword ' + JSON.stringify(flag));
|
|
35
32
|
}
|
|
36
33
|
}
|
|
37
|
-
|
|
38
|
-
module.exports = {
|
|
39
|
-
INVALID_KEYWORD_CHAR,
|
|
40
|
-
normalizeSystemFlag,
|
|
41
|
-
checkSystemFlags
|
|
42
|
-
};
|
|
34
|
+
export { INVALID_KEYWORD_CHAR, normalizeSystemFlag, checkSystemFlags };
|