imapkit 4.0.3 → 4.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +32 -19
- package/bin/imapkit.js +12 -16
- package/dist/cjs/addressparser.d.ts +21 -0
- package/dist/cjs/addressparser.js +271 -0
- package/dist/cjs/arguments.d.ts +31 -0
- package/{lib → dist/cjs}/arguments.js +9 -21
- package/dist/cjs/bodystructure.d.ts +25 -0
- package/dist/cjs/bodystructure.js +150 -0
- package/dist/cjs/cert.d.ts +2 -0
- package/dist/cjs/cert.js +7 -0
- package/dist/cjs/command-states.d.ts +36 -0
- package/dist/cjs/command-states.js +102 -0
- package/dist/cjs/commands/append.d.ts +88 -0
- package/dist/cjs/commands/append.js +299 -0
- package/dist/cjs/commands/capability.d.ts +2 -0
- package/dist/cjs/commands/capability.js +44 -0
- package/dist/cjs/commands/check.d.ts +2 -0
- package/dist/cjs/commands/check.js +28 -0
- package/dist/cjs/commands/close.d.ts +2 -0
- package/dist/cjs/commands/close.js +35 -0
- package/dist/cjs/commands/copy.d.ts +30 -0
- package/dist/cjs/commands/copy.js +107 -0
- package/dist/cjs/commands/create.d.ts +2 -0
- package/dist/cjs/commands/create.js +53 -0
- package/dist/cjs/commands/delete.d.ts +2 -0
- package/dist/cjs/commands/delete.js +63 -0
- package/dist/cjs/commands/examine.d.ts +2 -0
- package/dist/cjs/commands/examine.js +19 -0
- package/dist/cjs/commands/expunge.d.ts +2 -0
- package/dist/cjs/commands/expunge.js +32 -0
- package/dist/cjs/commands/fetch.d.ts +23 -0
- package/dist/cjs/commands/fetch.js +208 -0
- package/dist/cjs/commands/handlers/fetch.d.ts +12 -0
- package/dist/cjs/commands/handlers/fetch.js +195 -0
- package/dist/cjs/commands/handlers/flags.d.ts +17 -0
- package/dist/cjs/commands/handlers/flags.js +39 -0
- package/dist/cjs/commands/handlers/search.d.ts +85 -0
- package/dist/cjs/commands/handlers/search.js +504 -0
- package/dist/cjs/commands/handlers/status.d.ts +34 -0
- package/dist/cjs/commands/handlers/status.js +81 -0
- package/dist/cjs/commands/handlers/store.d.ts +3 -0
- package/dist/cjs/commands/handlers/store.js +117 -0
- package/dist/cjs/commands/index.d.ts +2 -0
- package/dist/cjs/commands/index.js +61 -0
- package/dist/cjs/commands/list.d.ts +2 -0
- package/dist/cjs/commands/list.js +86 -0
- package/dist/cjs/commands/login.d.ts +2 -0
- package/dist/cjs/commands/login.js +62 -0
- package/dist/cjs/commands/logout.d.ts +2 -0
- package/dist/cjs/commands/logout.js +40 -0
- package/dist/cjs/commands/lsub.d.ts +2 -0
- package/dist/cjs/commands/lsub.js +79 -0
- package/dist/cjs/commands/noop.d.ts +2 -0
- package/dist/cjs/commands/noop.js +28 -0
- package/dist/cjs/commands/rename.d.ts +2 -0
- package/dist/cjs/commands/rename.js +98 -0
- package/dist/cjs/commands/search.d.ts +10 -0
- package/dist/cjs/commands/search.js +71 -0
- package/dist/cjs/commands/select.d.ts +19 -0
- package/dist/cjs/commands/select.js +230 -0
- package/dist/cjs/commands/status.d.ts +2 -0
- package/dist/cjs/commands/status.js +57 -0
- package/dist/cjs/commands/store.d.ts +10 -0
- package/dist/cjs/commands/store.js +134 -0
- package/dist/cjs/commands/subscribe.d.ts +2 -0
- package/dist/cjs/commands/subscribe.js +51 -0
- package/dist/cjs/commands/uid-copy.d.ts +2 -0
- package/dist/cjs/commands/uid-copy.js +19 -0
- package/dist/cjs/commands/uid-fetch.d.ts +3 -0
- package/dist/cjs/commands/uid-fetch.js +17 -0
- package/dist/cjs/commands/uid-search.d.ts +3 -0
- package/dist/cjs/commands/uid-search.js +17 -0
- package/dist/cjs/commands/uid-store.d.ts +3 -0
- package/dist/cjs/commands/uid-store.js +17 -0
- package/dist/cjs/commands/unsubscribe.d.ts +2 -0
- package/dist/cjs/commands/unsubscribe.js +50 -0
- package/dist/cjs/dates.d.ts +64 -0
- package/dist/cjs/dates.js +124 -0
- package/dist/cjs/deflate-layer.d.ts +83 -0
- package/dist/cjs/deflate-layer.js +232 -0
- package/dist/cjs/encoded-words.d.ts +15 -0
- package/dist/cjs/encoded-words.js +85 -0
- package/dist/cjs/envelope.d.ts +33 -0
- package/dist/cjs/envelope.js +86 -0
- package/dist/cjs/esearch.d.ts +96 -0
- package/dist/cjs/esearch.js +190 -0
- package/dist/cjs/framing.d.ts +66 -0
- package/{lib → dist/cjs}/framing.js +9 -26
- package/dist/cjs/index.d.ts +9 -0
- package/dist/cjs/index.js +56 -0
- package/dist/cjs/list-extensions.d.ts +50 -0
- package/dist/cjs/list-extensions.js +35 -0
- package/dist/cjs/load-plugins.d.ts +21 -0
- package/dist/cjs/load-plugins.js +89 -0
- package/dist/cjs/mailbox-name.d.ts +26 -0
- package/dist/cjs/mailbox-name.js +127 -0
- package/dist/cjs/mimeparser.d.ts +137 -0
- package/dist/cjs/mimeparser.js +727 -0
- package/dist/cjs/mock-client.d.ts +39 -0
- package/dist/cjs/mock-client.js +236 -0
- package/dist/cjs/numbers.d.ts +28 -0
- package/dist/cjs/numbers.js +52 -0
- package/dist/cjs/package.json +3 -0
- package/dist/cjs/plugins/acl.d.ts +2 -0
- package/dist/cjs/plugins/acl.js +888 -0
- package/dist/cjs/plugins/appendlimit.d.ts +16 -0
- package/dist/cjs/plugins/appendlimit.js +87 -0
- package/dist/cjs/plugins/auth-plain.d.ts +2 -0
- package/dist/cjs/plugins/auth-plain.js +89 -0
- package/dist/cjs/plugins/binary.d.ts +30 -0
- package/dist/cjs/plugins/binary.js +247 -0
- package/dist/cjs/plugins/catenate.d.ts +14 -0
- package/dist/cjs/plugins/catenate.js +250 -0
- package/dist/cjs/plugins/compress.d.ts +7 -0
- package/dist/cjs/plugins/compress.js +79 -0
- package/dist/cjs/plugins/condstore.d.ts +5 -0
- package/dist/cjs/plugins/condstore.js +492 -0
- package/dist/cjs/plugins/context-search.d.ts +8 -0
- package/dist/cjs/plugins/context-search.js +304 -0
- package/dist/cjs/plugins/context-sort.d.ts +6 -0
- package/dist/cjs/plugins/context-sort.js +32 -0
- package/dist/cjs/plugins/create-special-use.d.ts +7 -0
- package/dist/cjs/plugins/create-special-use.js +101 -0
- package/dist/cjs/plugins/enable.d.ts +23 -0
- package/dist/cjs/plugins/enable.js +127 -0
- package/dist/cjs/plugins/esearch.d.ts +6 -0
- package/dist/cjs/plugins/esearch.js +142 -0
- package/dist/cjs/plugins/esort.d.ts +6 -0
- package/dist/cjs/plugins/esort.js +60 -0
- package/dist/cjs/plugins/id.d.ts +5 -0
- package/dist/cjs/plugins/id.js +123 -0
- package/dist/cjs/plugins/idle.d.ts +5 -0
- package/dist/cjs/plugins/idle.js +85 -0
- package/dist/cjs/plugins/imap4rev2.d.ts +6 -0
- package/dist/cjs/plugins/imap4rev2.js +184 -0
- package/dist/cjs/plugins/index.d.ts +2 -0
- package/dist/cjs/plugins/index.js +119 -0
- package/dist/cjs/plugins/list-extended.d.ts +2 -0
- package/dist/cjs/plugins/list-extended.js +235 -0
- package/dist/cjs/plugins/list-status.d.ts +6 -0
- package/dist/cjs/plugins/list-status.js +42 -0
- package/dist/cjs/plugins/literalminus.d.ts +8 -0
- package/dist/cjs/plugins/literalminus.js +32 -0
- package/dist/cjs/plugins/literalplus.d.ts +6 -0
- package/dist/cjs/plugins/literalplus.js +30 -0
- package/dist/cjs/plugins/logindisabled.d.ts +5 -0
- package/dist/cjs/plugins/logindisabled.js +54 -0
- package/dist/cjs/plugins/messagelimit.d.ts +19 -0
- package/dist/cjs/plugins/messagelimit.js +227 -0
- package/dist/cjs/plugins/metadata-server.d.ts +7 -0
- package/dist/cjs/plugins/metadata-server.js +24 -0
- package/dist/cjs/plugins/metadata.d.ts +11 -0
- package/dist/cjs/plugins/metadata.js +436 -0
- package/dist/cjs/plugins/move.d.ts +11 -0
- package/dist/cjs/plugins/move.js +96 -0
- package/dist/cjs/plugins/multiappend.d.ts +12 -0
- package/dist/cjs/plugins/multiappend.js +38 -0
- package/dist/cjs/plugins/multisearch.d.ts +6 -0
- package/dist/cjs/plugins/multisearch.js +263 -0
- package/dist/cjs/plugins/namespace.d.ts +5 -0
- package/dist/cjs/plugins/namespace.js +57 -0
- package/dist/cjs/plugins/notify.d.ts +2 -0
- package/dist/cjs/plugins/notify.js +628 -0
- package/dist/cjs/plugins/oauthbearer.d.ts +32 -0
- package/dist/cjs/plugins/oauthbearer.js +202 -0
- package/dist/cjs/plugins/objectid.d.ts +23 -0
- package/dist/cjs/plugins/objectid.js +221 -0
- package/dist/cjs/plugins/partial.d.ts +6 -0
- package/dist/cjs/plugins/partial.js +78 -0
- package/dist/cjs/plugins/preview.d.ts +31 -0
- package/dist/cjs/plugins/preview.js +378 -0
- package/dist/cjs/plugins/qresync.d.ts +11 -0
- package/dist/cjs/plugins/qresync.js +473 -0
- package/dist/cjs/plugins/quota.d.ts +18 -0
- package/dist/cjs/plugins/quota.js +254 -0
- package/dist/cjs/plugins/replace.d.ts +14 -0
- package/dist/cjs/plugins/replace.js +130 -0
- package/dist/cjs/plugins/sasl-ir.d.ts +5 -0
- package/dist/cjs/plugins/sasl-ir.js +24 -0
- package/dist/cjs/plugins/savedate.d.ts +17 -0
- package/dist/cjs/plugins/savedate.js +64 -0
- package/dist/cjs/plugins/savelimit.d.ts +10 -0
- package/dist/cjs/plugins/savelimit.js +30 -0
- package/dist/cjs/plugins/searchres.d.ts +6 -0
- package/dist/cjs/plugins/searchres.js +91 -0
- package/dist/cjs/plugins/sort-display.d.ts +11 -0
- package/dist/cjs/plugins/sort-display.js +37 -0
- package/dist/cjs/plugins/sort.d.ts +11 -0
- package/dist/cjs/plugins/sort.js +125 -0
- package/dist/cjs/plugins/special-use.d.ts +10 -0
- package/dist/cjs/plugins/special-use.js +95 -0
- package/dist/cjs/plugins/starttls.d.ts +5 -0
- package/dist/cjs/plugins/starttls.js +55 -0
- package/dist/cjs/plugins/status-size.d.ts +7 -0
- package/dist/cjs/plugins/status-size.js +30 -0
- package/dist/cjs/plugins/thread-orderedsubject.d.ts +11 -0
- package/dist/cjs/plugins/thread-orderedsubject.js +28 -0
- package/dist/cjs/plugins/thread-references.d.ts +11 -0
- package/dist/cjs/plugins/thread-references.js +28 -0
- package/dist/cjs/plugins/uidonly.d.ts +15 -0
- package/dist/cjs/plugins/uidonly.js +126 -0
- package/dist/cjs/plugins/uidplus.d.ts +15 -0
- package/dist/cjs/plugins/uidplus.js +119 -0
- package/dist/cjs/plugins/unauthenticate.d.ts +7 -0
- package/dist/cjs/plugins/unauthenticate.js +32 -0
- package/dist/cjs/plugins/unselect.d.ts +5 -0
- package/dist/cjs/plugins/unselect.js +36 -0
- package/dist/cjs/plugins/utf8-accept.d.ts +6 -0
- package/dist/cjs/plugins/utf8-accept.js +72 -0
- package/dist/cjs/plugins/x-gm-ext-1.d.ts +26 -0
- package/dist/cjs/plugins/x-gm-ext-1.js +422 -0
- package/dist/cjs/plugins/xoauth2.d.ts +2 -0
- package/dist/cjs/plugins/xoauth2.js +155 -0
- package/dist/cjs/plugins/xtoybird.d.ts +2 -0
- package/dist/cjs/plugins/xtoybird.js +236 -0
- package/dist/cjs/server.d.ts +876 -0
- package/dist/cjs/server.js +2597 -0
- package/dist/cjs/smtp-listener.d.ts +13 -0
- package/dist/cjs/smtp-listener.js +47 -0
- package/dist/cjs/sorting.d.ts +77 -0
- package/dist/cjs/sorting.js +290 -0
- package/dist/cjs/threading.d.ts +30 -0
- package/dist/cjs/threading.js +318 -0
- package/dist/cjs/types.d.ts +327 -0
- package/dist/cjs/types.js +3 -0
- package/dist/cjs/utf8-session.d.ts +17 -0
- package/dist/cjs/utf8-session.js +148 -0
- package/dist/cjs/vanished.d.ts +21 -0
- package/dist/cjs/vanished.js +55 -0
- package/dist/esm/addressparser.d.ts +21 -0
- package/{lib → dist/esm}/addressparser.js +106 -133
- package/dist/esm/arguments.d.ts +31 -0
- package/dist/esm/arguments.js +96 -0
- package/dist/esm/bodystructure.d.ts +25 -0
- package/{lib → dist/esm}/bodystructure.js +17 -33
- package/dist/esm/cert.d.ts +2 -0
- package/dist/esm/cert.js +4 -0
- package/dist/esm/command-states.d.ts +36 -0
- package/{lib → dist/esm}/command-states.js +4 -16
- package/dist/esm/commands/append.d.ts +88 -0
- package/{lib → dist/esm}/commands/append.js +47 -85
- package/dist/esm/commands/capability.d.ts +2 -0
- package/dist/esm/commands/capability.js +29 -0
- package/dist/esm/commands/check.d.ts +2 -0
- package/dist/esm/commands/check.js +13 -0
- package/dist/esm/commands/close.d.ts +2 -0
- package/dist/esm/commands/close.js +20 -0
- package/dist/esm/commands/copy.d.ts +30 -0
- package/{lib → dist/esm}/commands/copy.js +31 -55
- package/dist/esm/commands/create.d.ts +2 -0
- package/{lib → dist/esm}/commands/create.js +25 -39
- package/dist/esm/commands/delete.d.ts +2 -0
- package/{lib → dist/esm}/commands/delete.js +25 -41
- package/dist/esm/commands/examine.d.ts +2 -0
- package/dist/esm/commands/examine.js +4 -0
- package/dist/esm/commands/expunge.d.ts +2 -0
- package/dist/esm/commands/expunge.js +17 -0
- package/dist/esm/commands/fetch.d.ts +23 -0
- package/{lib → dist/esm}/commands/fetch.js +33 -74
- package/dist/esm/commands/handlers/fetch.d.ts +12 -0
- package/{lib → dist/esm}/commands/handlers/fetch.js +11 -42
- package/dist/esm/commands/handlers/flags.d.ts +17 -0
- package/{lib → dist/esm}/commands/handlers/flags.js +3 -11
- package/dist/esm/commands/handlers/search.d.ts +85 -0
- package/{lib → dist/esm}/commands/handlers/search.js +33 -71
- package/dist/esm/commands/handlers/status.d.ts +34 -0
- package/{lib → dist/esm}/commands/handlers/status.js +1 -9
- package/dist/esm/commands/handlers/store.d.ts +3 -0
- package/{lib → dist/esm}/commands/handlers/store.js +20 -44
- package/dist/esm/commands/index.d.ts +2 -0
- package/dist/esm/commands/index.js +55 -0
- package/dist/esm/commands/list.d.ts +2 -0
- package/dist/esm/commands/list.js +71 -0
- package/dist/esm/commands/login.d.ts +2 -0
- package/{lib → dist/esm}/commands/login.js +24 -44
- package/dist/esm/commands/logout.d.ts +2 -0
- package/dist/esm/commands/logout.js +25 -0
- package/dist/esm/commands/lsub.d.ts +2 -0
- package/dist/esm/commands/lsub.js +64 -0
- package/dist/esm/commands/noop.d.ts +2 -0
- package/dist/esm/commands/noop.js +13 -0
- package/dist/esm/commands/rename.d.ts +2 -0
- package/{lib → dist/esm}/commands/rename.js +32 -51
- package/dist/esm/commands/search.d.ts +10 -0
- package/dist/esm/commands/search.js +54 -0
- package/dist/esm/commands/select.d.ts +19 -0
- package/dist/esm/commands/select.js +214 -0
- package/dist/esm/commands/status.d.ts +2 -0
- package/{lib → dist/esm}/commands/status.js +18 -39
- package/dist/esm/commands/store.d.ts +10 -0
- package/{lib → dist/esm}/commands/store.js +39 -73
- package/dist/esm/commands/subscribe.d.ts +2 -0
- package/{lib → dist/esm}/commands/subscribe.js +22 -39
- package/dist/esm/commands/uid-copy.d.ts +2 -0
- package/dist/esm/commands/uid-copy.js +4 -0
- package/dist/esm/commands/uid-fetch.d.ts +3 -0
- package/dist/esm/commands/uid-fetch.js +3 -0
- package/dist/esm/commands/uid-search.d.ts +3 -0
- package/dist/esm/commands/uid-search.js +3 -0
- package/dist/esm/commands/uid-store.d.ts +3 -0
- package/dist/esm/commands/uid-store.js +3 -0
- package/dist/esm/commands/unsubscribe.d.ts +2 -0
- package/{lib → dist/esm}/commands/unsubscribe.js +22 -37
- package/dist/esm/dates.d.ts +64 -0
- package/{lib → dist/esm}/dates.js +6 -14
- package/dist/esm/deflate-layer.d.ts +83 -0
- package/{lib → dist/esm}/deflate-layer.js +9 -26
- package/dist/esm/encoded-words.d.ts +15 -0
- package/{lib → dist/esm}/encoded-words.js +9 -25
- package/dist/esm/envelope.d.ts +33 -0
- package/{lib → dist/esm}/envelope.js +8 -19
- package/dist/esm/esearch.d.ts +96 -0
- package/{lib → dist/esm}/esearch.js +12 -39
- package/dist/esm/framing.d.ts +66 -0
- package/dist/esm/framing.js +82 -0
- package/dist/esm/index.d.ts +9 -0
- package/dist/esm/index.js +6 -0
- package/dist/esm/list-extensions.d.ts +50 -0
- package/{lib → dist/esm}/list-extensions.js +1 -4
- package/dist/esm/load-plugins.d.ts +21 -0
- package/{lib → dist/esm}/load-plugins.js +9 -43
- package/dist/esm/mailbox-name.d.ts +26 -0
- package/{lib → dist/esm}/mailbox-name.js +5 -26
- package/dist/esm/mimeparser.d.ts +137 -0
- package/{lib → dist/esm}/mimeparser.js +74 -152
- package/dist/esm/mock-client.d.ts +39 -0
- package/{lib → dist/esm}/mock-client.js +26 -40
- package/dist/esm/numbers.d.ts +28 -0
- package/{lib → dist/esm}/numbers.js +1 -8
- package/dist/esm/package.json +3 -0
- package/dist/esm/plugins/acl.d.ts +2 -0
- package/{lib → dist/esm}/plugins/acl.js +146 -240
- package/dist/esm/plugins/appendlimit.d.ts +16 -0
- package/{lib → dist/esm}/plugins/appendlimit.js +5 -16
- package/dist/esm/plugins/auth-plain.d.ts +2 -0
- package/{lib → dist/esm}/plugins/auth-plain.js +11 -31
- package/dist/esm/plugins/binary.d.ts +30 -0
- package/{lib → dist/esm}/plugins/binary.js +17 -43
- package/dist/esm/plugins/catenate.d.ts +14 -0
- package/{lib → dist/esm}/plugins/catenate.js +19 -40
- package/dist/esm/plugins/compress.d.ts +7 -0
- package/dist/esm/plugins/compress.js +61 -0
- package/dist/esm/plugins/condstore.d.ts +5 -0
- package/{lib → dist/esm}/plugins/condstore.js +66 -152
- package/dist/esm/plugins/context-search.d.ts +8 -0
- package/{lib → dist/esm}/plugins/context-search.js +53 -88
- package/dist/esm/plugins/context-sort.d.ts +6 -0
- package/{lib → dist/esm}/plugins/context-sort.js +4 -9
- package/dist/esm/plugins/create-special-use.d.ts +7 -0
- package/{lib → dist/esm}/plugins/create-special-use.js +33 -55
- package/dist/esm/plugins/enable.d.ts +23 -0
- package/dist/esm/plugins/enable.js +111 -0
- package/dist/esm/plugins/esearch.d.ts +6 -0
- package/{lib → dist/esm}/plugins/esearch.js +13 -42
- package/dist/esm/plugins/esort.d.ts +6 -0
- package/{lib → dist/esm}/plugins/esort.js +7 -25
- package/dist/esm/plugins/id.d.ts +5 -0
- package/dist/esm/plugins/id.js +108 -0
- package/dist/esm/plugins/idle.d.ts +5 -0
- package/dist/esm/plugins/idle.js +70 -0
- package/dist/esm/plugins/imap4rev2.d.ts +6 -0
- package/{lib → dist/esm}/plugins/imap4rev2.js +24 -60
- package/dist/esm/plugins/index.d.ts +2 -0
- package/dist/esm/plugins/index.js +113 -0
- package/dist/esm/plugins/list-extended.d.ts +2 -0
- package/{lib → dist/esm}/plugins/list-extended.js +28 -66
- package/dist/esm/plugins/list-status.d.ts +6 -0
- package/{lib → dist/esm}/plugins/list-status.js +5 -12
- package/dist/esm/plugins/literalminus.d.ts +8 -0
- package/{lib → dist/esm}/plugins/literalminus.js +2 -5
- package/dist/esm/plugins/literalplus.d.ts +6 -0
- package/{lib → dist/esm}/plugins/literalplus.js +2 -5
- package/dist/esm/plugins/logindisabled.d.ts +5 -0
- package/dist/esm/plugins/logindisabled.js +39 -0
- package/dist/esm/plugins/messagelimit.d.ts +19 -0
- package/{lib → dist/esm}/plugins/messagelimit.js +18 -41
- package/dist/esm/plugins/metadata-server.d.ts +7 -0
- package/{lib → dist/esm}/plugins/metadata-server.js +3 -7
- package/dist/esm/plugins/metadata.d.ts +11 -0
- package/dist/esm/plugins/metadata.js +421 -0
- package/dist/esm/plugins/move.d.ts +11 -0
- package/{lib → dist/esm}/plugins/move.js +37 -66
- package/dist/esm/plugins/multiappend.d.ts +12 -0
- package/{lib → dist/esm}/plugins/multiappend.js +2 -5
- package/dist/esm/plugins/multisearch.d.ts +6 -0
- package/{lib → dist/esm}/plugins/multisearch.js +24 -48
- package/dist/esm/plugins/namespace.d.ts +5 -0
- package/dist/esm/plugins/namespace.js +42 -0
- package/dist/esm/plugins/notify.d.ts +2 -0
- package/{lib → dist/esm}/plugins/notify.js +90 -134
- package/dist/esm/plugins/oauthbearer.d.ts +32 -0
- package/{lib → dist/esm}/plugins/oauthbearer.js +18 -48
- package/dist/esm/plugins/objectid.d.ts +23 -0
- package/{lib → dist/esm}/plugins/objectid.js +21 -58
- package/dist/esm/plugins/partial.d.ts +6 -0
- package/{lib → dist/esm}/plugins/partial.js +7 -15
- package/dist/esm/plugins/preview.d.ts +31 -0
- package/{lib → dist/esm}/plugins/preview.js +28 -66
- package/dist/esm/plugins/qresync.d.ts +11 -0
- package/{lib → dist/esm}/plugins/qresync.js +64 -134
- package/dist/esm/plugins/quota.d.ts +18 -0
- package/{lib → dist/esm}/plugins/quota.js +89 -135
- package/dist/esm/plugins/replace.d.ts +14 -0
- package/{lib → dist/esm}/plugins/replace.js +21 -51
- package/dist/esm/plugins/sasl-ir.d.ts +5 -0
- package/{lib → dist/esm}/plugins/sasl-ir.js +3 -6
- package/dist/esm/plugins/savedate.d.ts +17 -0
- package/{lib → dist/esm}/plugins/savedate.js +5 -15
- package/dist/esm/plugins/savelimit.d.ts +10 -0
- package/{lib → dist/esm}/plugins/savelimit.js +3 -6
- package/dist/esm/plugins/searchres.d.ts +6 -0
- package/{lib → dist/esm}/plugins/searchres.js +13 -22
- package/dist/esm/plugins/sort-display.d.ts +11 -0
- package/{lib → dist/esm}/plugins/sort-display.js +6 -10
- package/dist/esm/plugins/sort.d.ts +11 -0
- package/{lib → dist/esm}/plugins/sort.js +24 -46
- package/dist/esm/plugins/special-use.d.ts +10 -0
- package/{lib → dist/esm}/plugins/special-use.js +9 -24
- package/dist/esm/plugins/starttls.d.ts +5 -0
- package/{lib → dist/esm}/plugins/starttls.js +20 -37
- package/dist/esm/plugins/status-size.d.ts +7 -0
- package/{lib → dist/esm}/plugins/status-size.js +4 -11
- package/dist/esm/plugins/thread-orderedsubject.d.ts +11 -0
- package/{lib → dist/esm}/plugins/thread-orderedsubject.js +3 -6
- package/dist/esm/plugins/thread-references.d.ts +11 -0
- package/{lib → dist/esm}/plugins/thread-references.js +3 -6
- package/dist/esm/plugins/uidonly.d.ts +15 -0
- package/{lib → dist/esm}/plugins/uidonly.js +11 -35
- package/dist/esm/plugins/uidplus.d.ts +15 -0
- package/{lib → dist/esm}/plugins/uidplus.js +25 -45
- package/dist/esm/plugins/unauthenticate.d.ts +7 -0
- package/dist/esm/plugins/unauthenticate.js +17 -0
- package/dist/esm/plugins/unselect.d.ts +5 -0
- package/dist/esm/plugins/unselect.js +21 -0
- package/dist/esm/plugins/utf8-accept.d.ts +6 -0
- package/{lib → dist/esm}/plugins/utf8-accept.js +10 -21
- package/dist/esm/plugins/x-gm-ext-1.d.ts +26 -0
- package/{lib → dist/esm}/plugins/x-gm-ext-1.js +48 -100
- package/dist/esm/plugins/xoauth2.d.ts +2 -0
- package/dist/esm/plugins/xoauth2.js +140 -0
- package/dist/esm/plugins/xtoybird.d.ts +2 -0
- package/dist/esm/plugins/xtoybird.js +218 -0
- package/dist/esm/server.d.ts +876 -0
- package/dist/esm/server.js +2543 -0
- package/dist/esm/smtp-listener.d.ts +13 -0
- package/{lib → dist/esm}/smtp-listener.js +5 -12
- package/dist/esm/sorting.d.ts +77 -0
- package/{lib → dist/esm}/sorting.js +40 -53
- package/dist/esm/threading.d.ts +30 -0
- package/{lib → dist/esm}/threading.js +29 -70
- package/dist/esm/types.d.ts +327 -0
- package/dist/esm/types.js +2 -0
- package/dist/esm/utf8-session.d.ts +17 -0
- package/{lib → dist/esm}/utf8-session.js +15 -25
- package/dist/esm/vanished.d.ts +21 -0
- package/{lib → dist/esm}/vanished.js +16 -21
- package/dist/plugin-help.json +298 -0
- package/package.json +55 -12
- package/lib/commands/capability.js +0 -47
- package/lib/commands/check.js +0 -21
- package/lib/commands/close.js +0 -30
- package/lib/commands/examine.js +0 -7
- package/lib/commands/expunge.js +0 -27
- package/lib/commands/list.js +0 -100
- package/lib/commands/logout.js +0 -41
- package/lib/commands/lsub.js +0 -87
- package/lib/commands/noop.js +0 -21
- package/lib/commands/search.js +0 -76
- package/lib/commands/select.js +0 -289
- package/lib/commands/uid copy.js +0 -7
- package/lib/commands/uid fetch.js +0 -5
- package/lib/commands/uid search.js +0 -5
- package/lib/commands/uid store.js +0 -5
- package/lib/plugins/compress.js +0 -76
- package/lib/plugins/enable.js +0 -155
- package/lib/plugins/id.js +0 -138
- package/lib/plugins/idle.js +0 -105
- package/lib/plugins/logindisabled.js +0 -50
- package/lib/plugins/metadata.js +0 -475
- package/lib/plugins/namespace.js +0 -67
- package/lib/plugins/unauthenticate.js +0 -28
- package/lib/plugins/unselect.js +0 -36
- package/lib/plugins/xoauth2.js +0 -188
- package/lib/plugins/xtoybird.js +0 -282
- package/lib/server.js +0 -2880
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Converts a parsed MIME tree into BODY and BODYSTRUCTURE data. Ported from WildDuck
|
|
3
|
+
// (imap-core/lib/indexer/body-structure.js)
|
|
4
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
5
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
6
|
+
};
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
const envelope_js_1 = __importDefault(require("./envelope.js"));
|
|
9
|
+
const mimeparser_js_1 = require("./mimeparser.js");
|
|
10
|
+
// Expose to the world
|
|
11
|
+
exports.default = createBodystructure;
|
|
12
|
+
/**
|
|
13
|
+
* Generates an object out of parsed mime tree, that can be
|
|
14
|
+
* serialized into a BODYSTRUCTURE string
|
|
15
|
+
*
|
|
16
|
+
* @param {Object} tree Parsed mime tree (see mimeparser.ts for input)
|
|
17
|
+
* @param {Object} [options] Optional options object
|
|
18
|
+
* @param {Boolean} [options.upperCaseKeys] If true, use only upper case key names
|
|
19
|
+
* @param {Boolean} [options.skipContentLocation] If true, do not include Content-Location in the output
|
|
20
|
+
* @param {Boolean} [options.body] If true, skip extension fields (needed for BODY)
|
|
21
|
+
* @param {Boolean} [options.messageGlobal] If true, describe message/global like message/rfc822 (IMAP4rev2, RFC 9051 section 7.5.2)
|
|
22
|
+
* @return {Array} Object structure in the form of BODYSTRUCTURE
|
|
23
|
+
*/
|
|
24
|
+
function createBodystructure(tree, options) {
|
|
25
|
+
options = options || {};
|
|
26
|
+
const key = (name) => (options.upperCaseKeys && typeof name === 'string' ? name.toUpperCase() : name);
|
|
27
|
+
// Parameter list of a parsed structured header value, as the flat `(key value key value)` list
|
|
28
|
+
const paramList = (parsed) => {
|
|
29
|
+
if (!parsed || !parsed.hasParams) {
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
const list = [];
|
|
33
|
+
// hasParams is only set together with params
|
|
34
|
+
const params = parsed.params;
|
|
35
|
+
Object.keys(params).forEach(name => {
|
|
36
|
+
list.push(key(name), params[name]);
|
|
37
|
+
});
|
|
38
|
+
return list.length ? list : null;
|
|
39
|
+
};
|
|
40
|
+
const getBasicFields = (node) => {
|
|
41
|
+
const contentType = node.parsedHeader['content-type'] || {};
|
|
42
|
+
let bodyType = contentType.type || null;
|
|
43
|
+
let bodySubtype = contentType.subtype || null;
|
|
44
|
+
if (!bodyType || !bodySubtype) {
|
|
45
|
+
// prevent strange content types like (NIL "/ms-word") that may break some clients
|
|
46
|
+
if (bodyType === 'text' || bodySubtype === 'plain') {
|
|
47
|
+
bodyType = 'text';
|
|
48
|
+
bodySubtype = 'plain';
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
bodyType = 'application';
|
|
52
|
+
bodySubtype = 'octet-stream';
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
return [
|
|
56
|
+
key(bodyType),
|
|
57
|
+
key(bodySubtype),
|
|
58
|
+
// body parameter parenthesized list
|
|
59
|
+
paramList(contentType),
|
|
60
|
+
// body id
|
|
61
|
+
node.parsedHeader['content-id'] || null,
|
|
62
|
+
// body description
|
|
63
|
+
node.parsedHeader['content-description'] || null,
|
|
64
|
+
// body encoding
|
|
65
|
+
key(node.parsedHeader['content-transfer-encoding'] || '7bit'),
|
|
66
|
+
// body size
|
|
67
|
+
node.size
|
|
68
|
+
];
|
|
69
|
+
};
|
|
70
|
+
// The extension fields every part has (a non-multipart part also has an MD5 before them)
|
|
71
|
+
const getExtensionFields = (node) => {
|
|
72
|
+
const languageString = node.parsedHeader['content-language'] && node.parsedHeader['content-language'].replace(/[ ,]+/g, ',').replace(/^,+|,+$/g, '');
|
|
73
|
+
const language = (languageString && languageString.split(',')) || null;
|
|
74
|
+
const disposition = node.parsedHeader['content-disposition'];
|
|
75
|
+
const data = [
|
|
76
|
+
// body disposition
|
|
77
|
+
(disposition && [key(disposition.value), paramList(disposition)]) || null,
|
|
78
|
+
// body language
|
|
79
|
+
language
|
|
80
|
+
];
|
|
81
|
+
// NB! RFC3501 has an errata with content-location type, it is described as
|
|
82
|
+
// "A string list" (eg. an array) in RFC but the errata page states
|
|
83
|
+
// that it is a string (http://www.rfc-editor.org/errata_search.php?rfc=3501)
|
|
84
|
+
// see note for "Section 7.4.2, page 75"
|
|
85
|
+
if (!options.skipContentLocation) {
|
|
86
|
+
data.push(node.parsedHeader['content-location'] || null);
|
|
87
|
+
}
|
|
88
|
+
return data;
|
|
89
|
+
};
|
|
90
|
+
// A non-multipart node: the basic fields, the fields of its type (line count for text, envelope and
|
|
91
|
+
// structure for message/rfc822), and the extension fields unless BODY was asked for
|
|
92
|
+
const processLeaf = (node, extra) => {
|
|
93
|
+
let data = getBasicFields(node).concat(extra);
|
|
94
|
+
if (!options.body) {
|
|
95
|
+
data = data.concat([node.parsedHeader['content-md5'] || null], getExtensionFields(node));
|
|
96
|
+
}
|
|
97
|
+
return data;
|
|
98
|
+
};
|
|
99
|
+
const processMultipartNode = (node) => {
|
|
100
|
+
// only called for a node with parts
|
|
101
|
+
let data = (0, mimeparser_js_1.partsOf)(node)
|
|
102
|
+
.map(walker)
|
|
103
|
+
.concat([key(node.multipart)]);
|
|
104
|
+
if (!options.body) {
|
|
105
|
+
// RFC 3501 7.4.2: BODY is BODYSTRUCTURE without extension data, and for a multipart the
|
|
106
|
+
// parameter list is the first extension field (body-ext-mpart)
|
|
107
|
+
data = data.concat([paramList(node.parsedHeader['content-type'])], getExtensionFields(node));
|
|
108
|
+
}
|
|
109
|
+
// body-type-mpart = 1*body SP media-subtype, there is no SP between the bodies (RFC 3501 section 9)
|
|
110
|
+
Object.defineProperty(data, 'adjacentLists', { value: true });
|
|
111
|
+
return data;
|
|
112
|
+
};
|
|
113
|
+
const walker = (node) => {
|
|
114
|
+
const contentType = node.parsedHeader['content-type'] || {};
|
|
115
|
+
switch (contentType.type) {
|
|
116
|
+
case 'multipart':
|
|
117
|
+
// a multipart without a boundary parameter has no parts and is described with the
|
|
118
|
+
// basic fields (RFC 3501 body-type-mpart needs at least one body)
|
|
119
|
+
return (0, mimeparser_js_1.partsOf)(node) ? processMultipartNode(node) : processLeaf(node, []);
|
|
120
|
+
case 'text':
|
|
121
|
+
return processLeaf(node, [node.lineCount]);
|
|
122
|
+
case 'message': {
|
|
123
|
+
// RFC 2045 5.1: the subtype is not case sensitive. Other message subtypes, such as
|
|
124
|
+
// message/delivery-status, are described as basic parts. RFC 9051 section 9 media-message
|
|
125
|
+
// adds message/global, RFC 3501 body-type-basic describes it as a basic part
|
|
126
|
+
// (embeddedMessage() only returns the message of these types)
|
|
127
|
+
const embedded = (0, mimeparser_js_1.embeddedMessage)(node, options.messageGlobal);
|
|
128
|
+
if (embedded) {
|
|
129
|
+
return processLeaf(node, [(0, envelope_js_1.default)(embedded.parsedHeader), walker(embedded), node.lineCount]);
|
|
130
|
+
}
|
|
131
|
+
return processLeaf(node, []);
|
|
132
|
+
}
|
|
133
|
+
default:
|
|
134
|
+
return processLeaf(node, []);
|
|
135
|
+
}
|
|
136
|
+
};
|
|
137
|
+
return walker(tree);
|
|
138
|
+
}
|
|
139
|
+
{
|
|
140
|
+
const defaultExport = exports.default;
|
|
141
|
+
if (defaultExport && (typeof defaultExport === 'function' || typeof defaultExport === 'object')) {
|
|
142
|
+
for (const key of Object.keys(exports)) {
|
|
143
|
+
if (key !== 'default' && !(key in defaultExport)) {
|
|
144
|
+
defaultExport[key] = exports[key];
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
Object.defineProperty(defaultExport, 'default', { value: defaultExport, enumerable: false, writable: true, configurable: true });
|
|
148
|
+
module.exports = defaultExport;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export declare const key = "-----BEGIN PRIVATE KEY-----\nMIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDN0THQ8qpf3mMo\nNlVzVvjfsw/QHo22ojmmUO+3QjZDeB7mSmniyGOFw0M8f2g3FM0Kfa51rKMYXWQV\ncqRTDFkk9zBnCagFIWCi2DI4VgArzWlu4TqOHfRIHcbAH1bTKVh5KnVmQA6j6leK\njvSW2021Ntp8VX+KV5nXM3rRUWaPUSGj1+n6Pcj8ZrMdm2bd6Q4UscCvKrCi1dBP\nTPt9BNVO0CXL8zsiQfNOveN4nTBmF4T1+P/vvzSqHr199XDkjlhd8j3Pm2LKNS5O\nnPERgwZhgIg15G7Y/vz9N0vZGmIU7ApunyrgOhV1o4AlOzdo31xbVYIVn7/fv44D\nG7hvX8DVAgMBAAECggEABIVNSlEiM+PfGrGC0/s7kTJOLRyWsUXD7WbGtShDp9y6\nFQXaaIxNP1FoJyqHP/p5fHsBO310waK/gYcYm+hgBuNVEVZRdfdjN4B3LeyZqVyk\nLbbNwfRferwIswydLBsy4cpwdLQAflI15Qm5zpx3ivzu9J8uI3xEGUl8r59RmOE9\ntXb+sA9YtWRXUR4mhqApGxMI5ZP1/WbmhlDvLUnartyBNilfS3RTWY7nWMKk3U0N\nyFmYX17WZYnXbJtXQmOX/LHd1nM2NFS2B6yJ6JKY0/jPOGCaTBcVmFgO3x/aDgiJ\nm0XL1mpGBIUugQTio5N1Ewznrg6SA7rzsOzN1g3ZqwKBgQD48+lGyQmFAaaXzf+9\nWiG6F6hQtsiWDwhQ3C1m1fOMk2Fgi/eVPEWxIRbf18XBwgvt4Q7PoyojzR730YZl\n5WsEpliGyaBdrR4ZRh92t3y0fQ6Q/AMhsIEIu62lZbLlLenW5/OZLyVsuctAUZCg\nHBNgwR1wuvBBXrc+TIXjUYgsfwKBgQDTpLEqsjh8ZrCvubH0mlTCHkSS/A3ifk27\nsuLZhps0J0JMM1drxpNHcfySZ31sVrMZog1cf5W6z55pYlEDCrlEjK2gjyzJnmUA\nKE+ramKMH1/hfxdVZLY1F1zL2oLuprQEE6AUMDdZiv4JMcNfHA05Ii5VpsGe/sVe\naCiudjH4qwKBgFEFiMk5ynhYJjDHoVCt0cYvxt6l7jgwIkO2tKwAO6hnmsyCIQyX\nthLEsx4cqka58Yn0sg5Pivpl2otKzJPDC4ZS4QLVAfUaz23oTXskklhnTuNOsXI4\ncHY4JnZq18MQo0cG7FfRaTuuaADByvDg0kmt7/ftTx3nRnnnC7gEo+3fAoGAX4WG\nfNnBSsxiVH2ARwDc3lwg4SIn9iDBXsTnQ/xP0mMhthi6DSer02Qr9bwFzL74yMnu\nM+BVqOIKAlBgdfoCEmFYAA5+zWTS+xY2lwxF/C4w7SqaUm1JG3823774t1PADdL5\nvgLhCGYGMAoovqV/hljaBshjvSoJ1Ik4Sz2HYk8CgYEAnSqiwlpYZKQX7jBo7yWA\nxB6r81uUHwy+XOq7A4OfgbEEuuKQ6tXOg72FX+38rF+Td6iA+6qIPoSoGtK0jANX\nykroFnXr4N3IL5TafDZVvMGNuWhWwS8JR3B0VDzPobt/jxPJKmGunZoCqwJC+nqT\nELanzRGdLk0G2chSGO7ZKGg=\n-----END PRIVATE KEY-----\n";
|
|
2
|
+
export declare const cert = "-----BEGIN CERTIFICATE-----\nMIIDOjCCAiKgAwIBAgIUad1YSlfC6YFAqn38plnziyvx1/YwDQYJKoZIhvcNAQEL\nBQAwFDESMBAGA1UEAwwJbG9jYWxob3N0MCAXDTI2MTAwNjA4NDU1OFoYDzIxMjYw\nOTEyMDg0NTU4WjAUMRIwEAYDVQQDDAlsb2NhbGhvc3QwggEiMA0GCSqGSIb3DQEB\nAQUAA4IBDwAwggEKAoIBAQDN0THQ8qpf3mMoNlVzVvjfsw/QHo22ojmmUO+3QjZD\neB7mSmniyGOFw0M8f2g3FM0Kfa51rKMYXWQVcqRTDFkk9zBnCagFIWCi2DI4VgAr\nzWlu4TqOHfRIHcbAH1bTKVh5KnVmQA6j6leKjvSW2021Ntp8VX+KV5nXM3rRUWaP\nUSGj1+n6Pcj8ZrMdm2bd6Q4UscCvKrCi1dBPTPt9BNVO0CXL8zsiQfNOveN4nTBm\nF4T1+P/vvzSqHr199XDkjlhd8j3Pm2LKNS5OnPERgwZhgIg15G7Y/vz9N0vZGmIU\n7ApunyrgOhV1o4AlOzdo31xbVYIVn7/fv44DG7hvX8DVAgMBAAGjgYEwfzAdBgNV\nHQ4EFgQUzO7Y5K1NaU+/GXZJi2C47uK0+tQwHwYDVR0jBBgwFoAUzO7Y5K1NaU+/\nGXZJi2C47uK0+tQwDwYDVR0TAQH/BAUwAwEB/zAsBgNVHREEJTAjgglsb2NhbGhv\nc3SHBH8AAAGHEAAAAAAAAAAAAAAAAAAAAAEwDQYJKoZIhvcNAQELBQADggEBAL/P\np3lI83Fcw8EpVyzr9QPYA7JZVmy8YlJ7vouOmEUi6X7BnK5Eits1uHGZ6rtLGBCY\nEu4Z4DnCPXnyXuo4Bzaqabs5qUro3Ztf0FXeatGCmTLx06JSapKVyoXkJpzLzX0u\npj0WfWUkwD3rGQozn0FOUOrZyjYgPgsqr6doWd5emAWl1L8ZGDFJEWPRvrS0dw7Z\nZG83/H0UYur8lN2JxV4ITRovftmtruiVNw3mXH5BZCIsoFAEtf3hssn6rekfEOfc\n4vty2NskN112OLQzLK1Oq3dl0C6Ns1MdIoelAHrFdeM3O03Y0D2R+PlNw1cU55if\nEF3engvuSVRtcV8eyxM=\n-----END CERTIFICATE-----\n";
|
package/dist/cjs/cert.js
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Generated by scripts/build.js from cert/. Do not edit by hand.
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.cert = exports.key = void 0;
|
|
5
|
+
// Self-signed certificate for localhost, used when the server options give no credentials
|
|
6
|
+
exports.key = "-----BEGIN PRIVATE KEY-----\nMIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDN0THQ8qpf3mMo\nNlVzVvjfsw/QHo22ojmmUO+3QjZDeB7mSmniyGOFw0M8f2g3FM0Kfa51rKMYXWQV\ncqRTDFkk9zBnCagFIWCi2DI4VgArzWlu4TqOHfRIHcbAH1bTKVh5KnVmQA6j6leK\njvSW2021Ntp8VX+KV5nXM3rRUWaPUSGj1+n6Pcj8ZrMdm2bd6Q4UscCvKrCi1dBP\nTPt9BNVO0CXL8zsiQfNOveN4nTBmF4T1+P/vvzSqHr199XDkjlhd8j3Pm2LKNS5O\nnPERgwZhgIg15G7Y/vz9N0vZGmIU7ApunyrgOhV1o4AlOzdo31xbVYIVn7/fv44D\nG7hvX8DVAgMBAAECggEABIVNSlEiM+PfGrGC0/s7kTJOLRyWsUXD7WbGtShDp9y6\nFQXaaIxNP1FoJyqHP/p5fHsBO310waK/gYcYm+hgBuNVEVZRdfdjN4B3LeyZqVyk\nLbbNwfRferwIswydLBsy4cpwdLQAflI15Qm5zpx3ivzu9J8uI3xEGUl8r59RmOE9\ntXb+sA9YtWRXUR4mhqApGxMI5ZP1/WbmhlDvLUnartyBNilfS3RTWY7nWMKk3U0N\nyFmYX17WZYnXbJtXQmOX/LHd1nM2NFS2B6yJ6JKY0/jPOGCaTBcVmFgO3x/aDgiJ\nm0XL1mpGBIUugQTio5N1Ewznrg6SA7rzsOzN1g3ZqwKBgQD48+lGyQmFAaaXzf+9\nWiG6F6hQtsiWDwhQ3C1m1fOMk2Fgi/eVPEWxIRbf18XBwgvt4Q7PoyojzR730YZl\n5WsEpliGyaBdrR4ZRh92t3y0fQ6Q/AMhsIEIu62lZbLlLenW5/OZLyVsuctAUZCg\nHBNgwR1wuvBBXrc+TIXjUYgsfwKBgQDTpLEqsjh8ZrCvubH0mlTCHkSS/A3ifk27\nsuLZhps0J0JMM1drxpNHcfySZ31sVrMZog1cf5W6z55pYlEDCrlEjK2gjyzJnmUA\nKE+ramKMH1/hfxdVZLY1F1zL2oLuprQEE6AUMDdZiv4JMcNfHA05Ii5VpsGe/sVe\naCiudjH4qwKBgFEFiMk5ynhYJjDHoVCt0cYvxt6l7jgwIkO2tKwAO6hnmsyCIQyX\nthLEsx4cqka58Yn0sg5Pivpl2otKzJPDC4ZS4QLVAfUaz23oTXskklhnTuNOsXI4\ncHY4JnZq18MQo0cG7FfRaTuuaADByvDg0kmt7/ftTx3nRnnnC7gEo+3fAoGAX4WG\nfNnBSsxiVH2ARwDc3lwg4SIn9iDBXsTnQ/xP0mMhthi6DSer02Qr9bwFzL74yMnu\nM+BVqOIKAlBgdfoCEmFYAA5+zWTS+xY2lwxF/C4w7SqaUm1JG3823774t1PADdL5\nvgLhCGYGMAoovqV/hljaBshjvSoJ1Ik4Sz2HYk8CgYEAnSqiwlpYZKQX7jBo7yWA\nxB6r81uUHwy+XOq7A4OfgbEEuuKQ6tXOg72FX+38rF+Td6iA+6qIPoSoGtK0jANX\nykroFnXr4N3IL5TafDZVvMGNuWhWwS8JR3B0VDzPobt/jxPJKmGunZoCqwJC+nqT\nELanzRGdLk0G2chSGO7ZKGg=\n-----END PRIVATE KEY-----\n";
|
|
7
|
+
exports.cert = "-----BEGIN CERTIFICATE-----\nMIIDOjCCAiKgAwIBAgIUad1YSlfC6YFAqn38plnziyvx1/YwDQYJKoZIhvcNAQEL\nBQAwFDESMBAGA1UEAwwJbG9jYWxob3N0MCAXDTI2MTAwNjA4NDU1OFoYDzIxMjYw\nOTEyMDg0NTU4WjAUMRIwEAYDVQQDDAlsb2NhbGhvc3QwggEiMA0GCSqGSIb3DQEB\nAQUAA4IBDwAwggEKAoIBAQDN0THQ8qpf3mMoNlVzVvjfsw/QHo22ojmmUO+3QjZD\neB7mSmniyGOFw0M8f2g3FM0Kfa51rKMYXWQVcqRTDFkk9zBnCagFIWCi2DI4VgAr\nzWlu4TqOHfRIHcbAH1bTKVh5KnVmQA6j6leKjvSW2021Ntp8VX+KV5nXM3rRUWaP\nUSGj1+n6Pcj8ZrMdm2bd6Q4UscCvKrCi1dBPTPt9BNVO0CXL8zsiQfNOveN4nTBm\nF4T1+P/vvzSqHr199XDkjlhd8j3Pm2LKNS5OnPERgwZhgIg15G7Y/vz9N0vZGmIU\n7ApunyrgOhV1o4AlOzdo31xbVYIVn7/fv44DG7hvX8DVAgMBAAGjgYEwfzAdBgNV\nHQ4EFgQUzO7Y5K1NaU+/GXZJi2C47uK0+tQwHwYDVR0jBBgwFoAUzO7Y5K1NaU+/\nGXZJi2C47uK0+tQwDwYDVR0TAQH/BAUwAwEB/zAsBgNVHREEJTAjgglsb2NhbGhv\nc3SHBH8AAAGHEAAAAAAAAAAAAAAAAAAAAAEwDQYJKoZIhvcNAQELBQADggEBAL/P\np3lI83Fcw8EpVyzr9QPYA7JZVmy8YlJ7vouOmEUi6X7BnK5Eits1uHGZ6rtLGBCY\nEu4Z4DnCPXnyXuo4Bzaqabs5qUro3Ztf0FXeatGCmTLx06JSapKVyoXkJpzLzX0u\npj0WfWUkwD3rGQozn0FOUOrZyjYgPgsqr6doWd5emAWl1L8ZGDFJEWPRvrS0dw7Z\nZG83/H0UYur8lN2JxV4ITRovftmtruiVNw3mXH5BZCIsoFAEtf3hssn6rekfEOfc\n4vty2NskN112OLQzLK1Oq3dl0C6Ns1MdIoelAHrFdeM3O03Y0D2R+PlNw1cU55if\nEF3engvuSVRtcV8eyxM=\n-----END CERTIFICATE-----\n";
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { CommandOptions } from './types.js';
|
|
2
|
+
/** Command options with every key set, see commandOptions() */
|
|
3
|
+
export interface ResolvedCommandOptions {
|
|
4
|
+
states: string[] | false;
|
|
5
|
+
noArguments: boolean;
|
|
6
|
+
mailboxArguments: number[];
|
|
7
|
+
astringArguments: number[];
|
|
8
|
+
searchCriteria: number | false;
|
|
9
|
+
sequenceSet: number | false;
|
|
10
|
+
noExpunge: boolean;
|
|
11
|
+
literal8: true | string | false;
|
|
12
|
+
noPipelining: boolean;
|
|
13
|
+
appendMessage: boolean;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Normalizes command options
|
|
17
|
+
*
|
|
18
|
+
* @param {Object|Array} options `{ states, noArguments, mailboxArguments, astringArguments, searchCriteria, sequenceSet, noExpunge,
|
|
19
|
+
* literal8, noPipelining }`, or just the list of states
|
|
20
|
+
* @return {Object} options with all keys set
|
|
21
|
+
*/
|
|
22
|
+
declare function commandOptions(input?: CommandOptions | string[] | null): ResolvedCommandOptions;
|
|
23
|
+
/**
|
|
24
|
+
* Returns the options of a core command
|
|
25
|
+
*
|
|
26
|
+
* @param {String} command Upper case command name, e.g. "UID FETCH"
|
|
27
|
+
* @return {Object|Boolean} command options (see commandOptions) or false if the command is not a core command
|
|
28
|
+
*/
|
|
29
|
+
declare function getCommandOptions(command: string): ResolvedCommandOptions | false;
|
|
30
|
+
declare const states: {
|
|
31
|
+
ANY: string[];
|
|
32
|
+
NOT_AUTHENTICATED: string[];
|
|
33
|
+
AUTHENTICATED: string[];
|
|
34
|
+
SELECTED: string[];
|
|
35
|
+
};
|
|
36
|
+
export { getCommandOptions, commandOptions, states };
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.states = void 0;
|
|
4
|
+
exports.getCommandOptions = getCommandOptions;
|
|
5
|
+
exports.commandOptions = commandOptions;
|
|
6
|
+
// Connection states in which each command is valid (RFC 3501 sections 3 and 6). Commands valid
|
|
7
|
+
// in the authenticated state are also valid in the selected state.
|
|
8
|
+
const ANY = ['Not Authenticated', 'Authenticated', 'Selected'];
|
|
9
|
+
const NOT_AUTHENTICATED = ['Not Authenticated'];
|
|
10
|
+
const AUTHENTICATED = ['Authenticated', 'Selected'];
|
|
11
|
+
const SELECTED = ['Selected'];
|
|
12
|
+
/**
|
|
13
|
+
* Normalizes command options
|
|
14
|
+
*
|
|
15
|
+
* @param {Object|Array} options `{ states, noArguments, mailboxArguments, astringArguments, searchCriteria, sequenceSet, noExpunge,
|
|
16
|
+
* literal8, noPipelining }`, or just the list of states
|
|
17
|
+
* @return {Object} options with all keys set
|
|
18
|
+
*/
|
|
19
|
+
function commandOptions(input) {
|
|
20
|
+
const options = (Array.isArray(input) ? { states: input } : input) || {};
|
|
21
|
+
return {
|
|
22
|
+
// false means any state
|
|
23
|
+
states: options.states ? [].concat(options.states) : false,
|
|
24
|
+
// "Arguments: none" in the command description
|
|
25
|
+
noArguments: !!options.noArguments,
|
|
26
|
+
// positions of the arguments that are mailbox names, checked against RFC 3501 section 5.1.3
|
|
27
|
+
mailboxArguments: [].concat(options.mailboxArguments || []),
|
|
28
|
+
// positions of other arguments that are astrings (RFC 3501 section 9), like user names. In these, in the mailbox
|
|
29
|
+
// name arguments and in search criteria a NIL atom is a string, not the nil of an nstring
|
|
30
|
+
astringArguments: [].concat(options.astringArguments || []),
|
|
31
|
+
// position of the first search key argument, for commands that take search criteria (RFC 3501 section 6.4.4)
|
|
32
|
+
searchCriteria: typeof options.searchCriteria === 'number' ? options.searchCriteria : false,
|
|
33
|
+
// position of the argument that holds message sequence numbers (a sequence set or a seq-number, not UIDs), for
|
|
34
|
+
// the RFC 3501 section 5.5 ambiguity check and for UIDONLY (RFC 9586 section 3)
|
|
35
|
+
sequenceSet: typeof options.sequenceSet === 'number' ? options.sequenceSet : false,
|
|
36
|
+
// EXPUNGE responses must not be sent while the command runs, so a client does not have to wait for its
|
|
37
|
+
// completion before sending a command with sequence numbers (RFC 3501 sections 5.5 and 7.4.1)
|
|
38
|
+
noExpunge: !!options.noExpunge,
|
|
39
|
+
// if the command accepts literal8 arguments `~{n}`: true, or the capability that allows them, like
|
|
40
|
+
// "BINARY" for the APPEND message (RFC 3516 section 4.4)
|
|
41
|
+
literal8: options.literal8 === true || typeof options.literal8 === 'string' ? options.literal8 : false,
|
|
42
|
+
// the client must not send anything after the command before it has seen the result, because the command changes
|
|
43
|
+
// the layers below the protocol (STARTTLS, RFC 9051 section 6.2.1, COMPRESS, RFC 4978 section 3). The command is
|
|
44
|
+
// refused with BAD if more input is waiting
|
|
45
|
+
noPipelining: !!options.noPipelining,
|
|
46
|
+
// the command takes a message after its mailbox argument like APPEND does (REPLACE, RFC 8508 section 3.4), so a
|
|
47
|
+
// message literal to a missing mailbox is refused before it is sent
|
|
48
|
+
appendMessage: !!options.appendMessage
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
// RFC 3501 core commands. Plugins pass the options of their commands to setCommandHandler
|
|
52
|
+
const CORE_COMMANDS = {
|
|
53
|
+
CAPABILITY: commandOptions({ states: ANY, noArguments: true }),
|
|
54
|
+
NOOP: commandOptions({ states: ANY, noArguments: true }),
|
|
55
|
+
LOGOUT: commandOptions({ states: ANY, noArguments: true }),
|
|
56
|
+
STARTTLS: commandOptions({ states: NOT_AUTHENTICATED, noArguments: true, noPipelining: true }),
|
|
57
|
+
// login = "LOGIN" SP userid SP password, both astrings
|
|
58
|
+
LOGIN: commandOptions({ states: NOT_AUTHENTICATED, astringArguments: [0, 1] }),
|
|
59
|
+
SELECT: commandOptions({ states: AUTHENTICATED, mailboxArguments: [0] }),
|
|
60
|
+
EXAMINE: commandOptions({ states: AUTHENTICATED, mailboxArguments: [0] }),
|
|
61
|
+
CREATE: commandOptions({ states: AUTHENTICATED, mailboxArguments: [0] }),
|
|
62
|
+
DELETE: commandOptions({ states: AUTHENTICATED, mailboxArguments: [0] }),
|
|
63
|
+
RENAME: commandOptions({ states: AUTHENTICATED, mailboxArguments: [0, 1] }),
|
|
64
|
+
SUBSCRIBE: commandOptions({ states: AUTHENTICATED, mailboxArguments: [0] }),
|
|
65
|
+
UNSUBSCRIBE: commandOptions({ states: AUTHENTICATED, mailboxArguments: [0] }),
|
|
66
|
+
// the reference is a mailbox name, the pattern a list-mailbox, an atom NIL is a valid name for both
|
|
67
|
+
LIST: commandOptions({ states: AUTHENTICATED, astringArguments: [0, 1] }),
|
|
68
|
+
LSUB: commandOptions({ states: AUTHENTICATED, astringArguments: [0, 1] }),
|
|
69
|
+
STATUS: commandOptions({ states: AUTHENTICATED, mailboxArguments: [0] }),
|
|
70
|
+
APPEND: commandOptions({ states: AUTHENTICATED, mailboxArguments: [0], literal8: 'BINARY', appendMessage: true }),
|
|
71
|
+
CHECK: commandOptions({ states: SELECTED, noArguments: true }),
|
|
72
|
+
CLOSE: commandOptions({ states: SELECTED, noArguments: true }),
|
|
73
|
+
EXPUNGE: commandOptions({ states: SELECTED, noArguments: true }),
|
|
74
|
+
SEARCH: commandOptions({ states: SELECTED, searchCriteria: 0, noExpunge: true }),
|
|
75
|
+
FETCH: commandOptions({ states: SELECTED, sequenceSet: 0, noExpunge: true }),
|
|
76
|
+
STORE: commandOptions({ states: SELECTED, sequenceSet: 0, noExpunge: true }),
|
|
77
|
+
COPY: commandOptions({ states: SELECTED, sequenceSet: 0, mailboxArguments: [1] }),
|
|
78
|
+
'UID COPY': commandOptions({ states: SELECTED, mailboxArguments: [1] }),
|
|
79
|
+
'UID SEARCH': commandOptions({ states: SELECTED, searchCriteria: 0 })
|
|
80
|
+
};
|
|
81
|
+
const UID_COMMAND = commandOptions({ states: SELECTED });
|
|
82
|
+
const AUTHENTICATE_COMMAND = commandOptions({ states: NOT_AUTHENTICATED });
|
|
83
|
+
/**
|
|
84
|
+
* Returns the options of a core command
|
|
85
|
+
*
|
|
86
|
+
* @param {String} command Upper case command name, e.g. "UID FETCH"
|
|
87
|
+
* @return {Object|Boolean} command options (see commandOptions) or false if the command is not a core command
|
|
88
|
+
*/
|
|
89
|
+
function getCommandOptions(command) {
|
|
90
|
+
if (Object.hasOwn(CORE_COMMANDS, command)) {
|
|
91
|
+
return CORE_COMMANDS[command];
|
|
92
|
+
}
|
|
93
|
+
if (/^UID /.test(command)) {
|
|
94
|
+
return UID_COMMAND;
|
|
95
|
+
}
|
|
96
|
+
if (/^AUTHENTICATE /.test(command)) {
|
|
97
|
+
return AUTHENTICATE_COMMAND;
|
|
98
|
+
}
|
|
99
|
+
return false;
|
|
100
|
+
}
|
|
101
|
+
const states = { ANY, NOT_AUTHENTICATED, AUTHENTICATED, SELECTED };
|
|
102
|
+
exports.states = states;
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import type { AppendMessage, Attribute, Callback, IMAPConnection, IMAPError, Mailbox, Message, ParsedCommand, Refusal } from '../types.js';
|
|
2
|
+
/** A message of an APPEND like command, ready to be stored */
|
|
3
|
+
export interface PreparedMessage extends AppendMessage {
|
|
4
|
+
flags: string[];
|
|
5
|
+
internaldate: string | false;
|
|
6
|
+
raw: string;
|
|
7
|
+
/** builds the message source of an append-data extension */
|
|
8
|
+
resolve?: (() => string) | undefined;
|
|
9
|
+
/** the message was sent as a literal8 */
|
|
10
|
+
literal8?: boolean | undefined;
|
|
11
|
+
}
|
|
12
|
+
/** The result of prepareAppend() */
|
|
13
|
+
export interface PreparedAppend {
|
|
14
|
+
mailbox: Mailbox;
|
|
15
|
+
messages: PreparedMessage[];
|
|
16
|
+
}
|
|
17
|
+
/** Options of prepareAppend() */
|
|
18
|
+
export interface PrepareAppendOptions {
|
|
19
|
+
command: string;
|
|
20
|
+
maxMessages?: number | undefined;
|
|
21
|
+
replaced?: Message | null | undefined;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Creates an error that refuses an APPEND like command
|
|
25
|
+
*
|
|
26
|
+
* @param {String} text Human readable text
|
|
27
|
+
* @param {String} [code] Response code, e.g. "TOOBIG"
|
|
28
|
+
* @param {Array} [codeArgs] Arguments of the response code, as response attributes
|
|
29
|
+
* @param {String} [response] "NO" (default) or "BAD"
|
|
30
|
+
* @return {Error} Error object
|
|
31
|
+
*/
|
|
32
|
+
declare function appendError(text: string, code?: string | false, codeArgs?: Attribute[] | false, response?: string): IMAPError;
|
|
33
|
+
declare const badArgument: (text: string) => IMAPError;
|
|
34
|
+
/**
|
|
35
|
+
* Finds the target mailbox name of an APPEND or REPLACE command when a literal of a message (or of a CATENATE TEXT
|
|
36
|
+
* part) is announced. Only the start of the command up to the mailbox argument is parsed, so the data of earlier
|
|
37
|
+
* literals is not parsed again for every message of a MULTIAPPEND
|
|
38
|
+
*
|
|
39
|
+
* @param {Object} connection IMAPConnection
|
|
40
|
+
* @param {String} command Upper case command name
|
|
41
|
+
* @param {String} line Command received so far, up to the literal size marker
|
|
42
|
+
* @return {String|Boolean} storage name of the mailbox, or false if the literal is not a message or the name is not
|
|
43
|
+
* known yet or not valid
|
|
44
|
+
*/
|
|
45
|
+
declare function getPendingTarget(connection: IMAPConnection, command: string, line: string): string | false;
|
|
46
|
+
/**
|
|
47
|
+
* A literal filter (`server.literalFilters`) that refuses the message of an APPEND or REPLACE to a mailbox that does
|
|
48
|
+
* not exist before the client sends it, by not sending a continuation request (RFC 3502 section 6.3.11 example A004,
|
|
49
|
+
* RFC 3501 section 6.3.11: TRYCREATE). Not while earlier commands are still waiting, these could create the mailbox
|
|
50
|
+
*
|
|
51
|
+
* @param {Object} connection IMAPConnection
|
|
52
|
+
* @param {String} command Upper case command name
|
|
53
|
+
* @param {String} line Command received so far, up to the literal size marker
|
|
54
|
+
* @return {Object|Boolean} `{ command, code, text }` to refuse the literal, or false
|
|
55
|
+
*/
|
|
56
|
+
declare function refuseMissingTarget(connection: IMAPConnection, command: string, line: string): Refusal | false;
|
|
57
|
+
/**
|
|
58
|
+
* Prepares the messages of an APPEND like command (APPEND, REPLACE): parses the arguments, checks
|
|
59
|
+
* the target mailbox, builds the message sources and runs `server.appendChecks` through
|
|
60
|
+
* IMAPConnection#checkAppend. Nothing is stored yet, so a failure leaves every mailbox as it was
|
|
61
|
+
* (RFC 3502 section 6.3.11). The error response is sent here.
|
|
62
|
+
*
|
|
63
|
+
* The checks get the built messages (with `raw`) of the whole command and the options as
|
|
64
|
+
* `{ command, replaced }`, `replaced` is the message that REPLACE removes.
|
|
65
|
+
*
|
|
66
|
+
* @param {Object} connection IMAPConnection
|
|
67
|
+
* @param {Object} parsed Parsed command
|
|
68
|
+
* @param {String} data Raw command
|
|
69
|
+
* @param {Object} pathArg Parsed mailbox name argument
|
|
70
|
+
* @param {Array} args Parsed arguments after the mailbox name
|
|
71
|
+
* @param {Object} options `{ command, maxMessages, replaced }`
|
|
72
|
+
* @return {Object|Boolean} `{ mailbox, messages }` or false if an error response was sent
|
|
73
|
+
*/
|
|
74
|
+
declare function prepareAppend(connection: IMAPConnection, parsed: ParsedCommand, data: string, pathArg: Attribute, args: Attribute[], options: PrepareAppendOptions): PreparedAppend | false;
|
|
75
|
+
/**
|
|
76
|
+
* Stores prepared messages. The sessions that have the target mailbox selected get EXISTS updates
|
|
77
|
+
*
|
|
78
|
+
* @param {Object} connection IMAPConnection
|
|
79
|
+
* @param {Object} prepared Result of prepareAppend()
|
|
80
|
+
* @return {Object} `{ mailbox, message, messages }`, message is the last stored message
|
|
81
|
+
*/
|
|
82
|
+
declare function storeMessages(connection: IMAPConnection, prepared: PreparedAppend): {
|
|
83
|
+
mailbox: Mailbox;
|
|
84
|
+
message: Message | undefined;
|
|
85
|
+
messages: Message[];
|
|
86
|
+
};
|
|
87
|
+
export default function appendCommand(connection: IMAPConnection, parsed: ParsedCommand, data: string, callback: Callback): void;
|
|
88
|
+
export { appendError, badArgument, prepareAppend, storeMessages, getPendingTarget, refuseMissingTarget };
|