imapkit 4.0.2 → 4.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +32 -19
- package/bin/imapkit.js +12 -16
- package/dist/cjs/addressparser.d.ts +21 -0
- package/dist/cjs/addressparser.js +277 -0
- package/dist/cjs/arguments.d.ts +31 -0
- package/{lib → dist/cjs}/arguments.js +9 -21
- package/dist/cjs/bodystructure.d.ts +25 -0
- package/dist/cjs/bodystructure.js +150 -0
- package/dist/cjs/cert.d.ts +2 -0
- package/dist/cjs/cert.js +7 -0
- package/dist/cjs/command-states.d.ts +36 -0
- package/dist/cjs/command-states.js +102 -0
- package/dist/cjs/commands/append.d.ts +88 -0
- package/dist/cjs/commands/append.js +299 -0
- package/dist/cjs/commands/capability.d.ts +2 -0
- package/dist/cjs/commands/capability.js +44 -0
- package/dist/cjs/commands/check.d.ts +2 -0
- package/dist/cjs/commands/check.js +28 -0
- package/dist/cjs/commands/close.d.ts +2 -0
- package/dist/cjs/commands/close.js +35 -0
- package/dist/cjs/commands/copy.d.ts +30 -0
- package/dist/cjs/commands/copy.js +107 -0
- package/dist/cjs/commands/create.d.ts +2 -0
- package/dist/cjs/commands/create.js +53 -0
- package/dist/cjs/commands/delete.d.ts +2 -0
- package/dist/cjs/commands/delete.js +63 -0
- package/dist/cjs/commands/examine.d.ts +2 -0
- package/dist/cjs/commands/examine.js +19 -0
- package/dist/cjs/commands/expunge.d.ts +2 -0
- package/dist/cjs/commands/expunge.js +32 -0
- package/dist/cjs/commands/fetch.d.ts +23 -0
- package/dist/cjs/commands/fetch.js +208 -0
- package/dist/cjs/commands/handlers/fetch.d.ts +12 -0
- package/dist/cjs/commands/handlers/fetch.js +195 -0
- package/dist/cjs/commands/handlers/flags.d.ts +17 -0
- package/dist/cjs/commands/handlers/flags.js +39 -0
- package/dist/cjs/commands/handlers/search.d.ts +85 -0
- package/dist/cjs/commands/handlers/search.js +504 -0
- package/dist/cjs/commands/handlers/status.d.ts +34 -0
- package/dist/cjs/commands/handlers/status.js +81 -0
- package/dist/cjs/commands/handlers/store.d.ts +3 -0
- package/dist/cjs/commands/handlers/store.js +117 -0
- package/dist/cjs/commands/index.d.ts +2 -0
- package/dist/cjs/commands/index.js +61 -0
- package/dist/cjs/commands/list.d.ts +2 -0
- package/dist/cjs/commands/list.js +86 -0
- package/dist/cjs/commands/login.d.ts +2 -0
- package/dist/cjs/commands/login.js +62 -0
- package/dist/cjs/commands/logout.d.ts +2 -0
- package/dist/cjs/commands/logout.js +40 -0
- package/dist/cjs/commands/lsub.d.ts +2 -0
- package/dist/cjs/commands/lsub.js +79 -0
- package/dist/cjs/commands/noop.d.ts +2 -0
- package/dist/cjs/commands/noop.js +28 -0
- package/dist/cjs/commands/rename.d.ts +2 -0
- package/dist/cjs/commands/rename.js +98 -0
- package/dist/cjs/commands/search.d.ts +10 -0
- package/dist/cjs/commands/search.js +71 -0
- package/dist/cjs/commands/select.d.ts +19 -0
- package/dist/cjs/commands/select.js +230 -0
- package/dist/cjs/commands/status.d.ts +2 -0
- package/dist/cjs/commands/status.js +57 -0
- package/dist/cjs/commands/store.d.ts +10 -0
- package/dist/cjs/commands/store.js +134 -0
- package/dist/cjs/commands/subscribe.d.ts +2 -0
- package/dist/cjs/commands/subscribe.js +51 -0
- package/dist/cjs/commands/uid-copy.d.ts +2 -0
- package/dist/cjs/commands/uid-copy.js +19 -0
- package/dist/cjs/commands/uid-fetch.d.ts +3 -0
- package/dist/cjs/commands/uid-fetch.js +17 -0
- package/dist/cjs/commands/uid-search.d.ts +3 -0
- package/dist/cjs/commands/uid-search.js +17 -0
- package/dist/cjs/commands/uid-store.d.ts +3 -0
- package/dist/cjs/commands/uid-store.js +17 -0
- package/dist/cjs/commands/unsubscribe.d.ts +2 -0
- package/dist/cjs/commands/unsubscribe.js +50 -0
- package/dist/cjs/dates.d.ts +64 -0
- package/dist/cjs/dates.js +124 -0
- package/dist/cjs/deflate-layer.d.ts +83 -0
- package/dist/cjs/deflate-layer.js +232 -0
- package/dist/cjs/encoded-words.d.ts +15 -0
- package/dist/cjs/encoded-words.js +85 -0
- package/dist/cjs/envelope.d.ts +33 -0
- package/dist/cjs/envelope.js +86 -0
- package/dist/cjs/esearch.d.ts +96 -0
- package/dist/cjs/esearch.js +190 -0
- package/dist/cjs/framing.d.ts +66 -0
- package/{lib → dist/cjs}/framing.js +9 -26
- package/dist/cjs/index.d.ts +9 -0
- package/dist/cjs/index.js +56 -0
- package/dist/cjs/list-extensions.d.ts +50 -0
- package/dist/cjs/list-extensions.js +35 -0
- package/dist/cjs/load-plugins.d.ts +21 -0
- package/dist/cjs/load-plugins.js +89 -0
- package/dist/cjs/mailbox-name.d.ts +26 -0
- package/dist/cjs/mailbox-name.js +127 -0
- package/dist/cjs/mimeparser.d.ts +137 -0
- package/dist/cjs/mimeparser.js +727 -0
- package/dist/cjs/mock-client.d.ts +39 -0
- package/dist/cjs/mock-client.js +236 -0
- package/dist/cjs/numbers.d.ts +28 -0
- package/dist/cjs/numbers.js +52 -0
- package/dist/cjs/package.json +3 -0
- package/dist/cjs/plugins/acl.d.ts +2 -0
- package/dist/cjs/plugins/acl.js +888 -0
- package/dist/cjs/plugins/appendlimit.d.ts +16 -0
- package/dist/cjs/plugins/appendlimit.js +87 -0
- package/dist/cjs/plugins/auth-plain.d.ts +2 -0
- package/dist/cjs/plugins/auth-plain.js +89 -0
- package/dist/cjs/plugins/binary.d.ts +30 -0
- package/dist/cjs/plugins/binary.js +247 -0
- package/dist/cjs/plugins/catenate.d.ts +14 -0
- package/dist/cjs/plugins/catenate.js +250 -0
- package/dist/cjs/plugins/compress.d.ts +7 -0
- package/dist/cjs/plugins/compress.js +79 -0
- package/dist/cjs/plugins/condstore.d.ts +5 -0
- package/dist/cjs/plugins/condstore.js +492 -0
- package/dist/cjs/plugins/context-search.d.ts +8 -0
- package/dist/cjs/plugins/context-search.js +304 -0
- package/dist/cjs/plugins/context-sort.d.ts +6 -0
- package/dist/cjs/plugins/context-sort.js +32 -0
- package/dist/cjs/plugins/create-special-use.d.ts +7 -0
- package/dist/cjs/plugins/create-special-use.js +101 -0
- package/dist/cjs/plugins/enable.d.ts +23 -0
- package/dist/cjs/plugins/enable.js +127 -0
- package/dist/cjs/plugins/esearch.d.ts +6 -0
- package/dist/cjs/plugins/esearch.js +142 -0
- package/dist/cjs/plugins/esort.d.ts +6 -0
- package/dist/cjs/plugins/esort.js +60 -0
- package/dist/cjs/plugins/id.d.ts +5 -0
- package/dist/cjs/plugins/id.js +123 -0
- package/dist/cjs/plugins/idle.d.ts +5 -0
- package/dist/cjs/plugins/idle.js +85 -0
- package/dist/cjs/plugins/imap4rev2.d.ts +6 -0
- package/dist/cjs/plugins/imap4rev2.js +184 -0
- package/dist/cjs/plugins/index.d.ts +2 -0
- package/dist/cjs/plugins/index.js +119 -0
- package/dist/cjs/plugins/list-extended.d.ts +2 -0
- package/dist/cjs/plugins/list-extended.js +235 -0
- package/dist/cjs/plugins/list-status.d.ts +6 -0
- package/dist/cjs/plugins/list-status.js +42 -0
- package/dist/cjs/plugins/literalminus.d.ts +8 -0
- package/dist/cjs/plugins/literalminus.js +32 -0
- package/dist/cjs/plugins/literalplus.d.ts +6 -0
- package/dist/cjs/plugins/literalplus.js +30 -0
- package/dist/cjs/plugins/logindisabled.d.ts +5 -0
- package/dist/cjs/plugins/logindisabled.js +54 -0
- package/dist/cjs/plugins/messagelimit.d.ts +19 -0
- package/dist/cjs/plugins/messagelimit.js +227 -0
- package/dist/cjs/plugins/metadata-server.d.ts +7 -0
- package/dist/cjs/plugins/metadata-server.js +24 -0
- package/dist/cjs/plugins/metadata.d.ts +11 -0
- package/dist/cjs/plugins/metadata.js +436 -0
- package/dist/cjs/plugins/move.d.ts +11 -0
- package/dist/cjs/plugins/move.js +96 -0
- package/dist/cjs/plugins/multiappend.d.ts +12 -0
- package/dist/cjs/plugins/multiappend.js +38 -0
- package/dist/cjs/plugins/multisearch.d.ts +6 -0
- package/dist/cjs/plugins/multisearch.js +263 -0
- package/dist/cjs/plugins/namespace.d.ts +5 -0
- package/dist/cjs/plugins/namespace.js +57 -0
- package/dist/cjs/plugins/notify.d.ts +2 -0
- package/dist/cjs/plugins/notify.js +628 -0
- package/dist/cjs/plugins/oauthbearer.d.ts +32 -0
- package/dist/cjs/plugins/oauthbearer.js +202 -0
- package/dist/cjs/plugins/objectid.d.ts +23 -0
- package/dist/cjs/plugins/objectid.js +221 -0
- package/dist/cjs/plugins/partial.d.ts +6 -0
- package/dist/cjs/plugins/partial.js +78 -0
- package/dist/cjs/plugins/preview.d.ts +31 -0
- package/dist/cjs/plugins/preview.js +378 -0
- package/dist/cjs/plugins/qresync.d.ts +11 -0
- package/dist/cjs/plugins/qresync.js +473 -0
- package/dist/cjs/plugins/quota.d.ts +18 -0
- package/dist/cjs/plugins/quota.js +254 -0
- package/dist/cjs/plugins/replace.d.ts +14 -0
- package/dist/cjs/plugins/replace.js +130 -0
- package/dist/cjs/plugins/sasl-ir.d.ts +5 -0
- package/dist/cjs/plugins/sasl-ir.js +24 -0
- package/dist/cjs/plugins/savedate.d.ts +17 -0
- package/dist/cjs/plugins/savedate.js +64 -0
- package/dist/cjs/plugins/savelimit.d.ts +10 -0
- package/dist/cjs/plugins/savelimit.js +30 -0
- package/dist/cjs/plugins/searchres.d.ts +6 -0
- package/dist/cjs/plugins/searchres.js +91 -0
- package/dist/cjs/plugins/sort-display.d.ts +11 -0
- package/dist/cjs/plugins/sort-display.js +37 -0
- package/dist/cjs/plugins/sort.d.ts +11 -0
- package/dist/cjs/plugins/sort.js +125 -0
- package/dist/cjs/plugins/special-use.d.ts +10 -0
- package/dist/cjs/plugins/special-use.js +95 -0
- package/dist/cjs/plugins/starttls.d.ts +5 -0
- package/dist/cjs/plugins/starttls.js +55 -0
- package/dist/cjs/plugins/status-size.d.ts +7 -0
- package/dist/cjs/plugins/status-size.js +30 -0
- package/dist/cjs/plugins/thread-orderedsubject.d.ts +11 -0
- package/dist/cjs/plugins/thread-orderedsubject.js +28 -0
- package/dist/cjs/plugins/thread-references.d.ts +11 -0
- package/dist/cjs/plugins/thread-references.js +28 -0
- package/dist/cjs/plugins/uidonly.d.ts +15 -0
- package/dist/cjs/plugins/uidonly.js +126 -0
- package/dist/cjs/plugins/uidplus.d.ts +15 -0
- package/dist/cjs/plugins/uidplus.js +119 -0
- package/dist/cjs/plugins/unauthenticate.d.ts +7 -0
- package/dist/cjs/plugins/unauthenticate.js +32 -0
- package/dist/cjs/plugins/unselect.d.ts +5 -0
- package/dist/cjs/plugins/unselect.js +36 -0
- package/dist/cjs/plugins/utf8-accept.d.ts +6 -0
- package/dist/cjs/plugins/utf8-accept.js +72 -0
- package/dist/cjs/plugins/x-gm-ext-1.d.ts +26 -0
- package/dist/cjs/plugins/x-gm-ext-1.js +422 -0
- package/dist/cjs/plugins/xoauth2.d.ts +2 -0
- package/dist/cjs/plugins/xoauth2.js +155 -0
- package/dist/cjs/plugins/xtoybird.d.ts +2 -0
- package/dist/cjs/plugins/xtoybird.js +236 -0
- package/dist/cjs/server.d.ts +876 -0
- package/dist/cjs/server.js +2597 -0
- package/dist/cjs/smtp-listener.d.ts +13 -0
- package/dist/cjs/smtp-listener.js +47 -0
- package/dist/cjs/sorting.d.ts +77 -0
- package/dist/cjs/sorting.js +290 -0
- package/dist/cjs/threading.d.ts +30 -0
- package/dist/cjs/threading.js +318 -0
- package/dist/cjs/types.d.ts +327 -0
- package/dist/cjs/types.js +3 -0
- package/dist/cjs/utf8-session.d.ts +17 -0
- package/dist/cjs/utf8-session.js +148 -0
- package/dist/cjs/vanished.d.ts +21 -0
- package/dist/cjs/vanished.js +55 -0
- package/dist/esm/addressparser.d.ts +21 -0
- package/{lib → dist/esm}/addressparser.js +102 -123
- package/dist/esm/arguments.d.ts +31 -0
- package/dist/esm/arguments.js +96 -0
- package/dist/esm/bodystructure.d.ts +25 -0
- package/{lib → dist/esm}/bodystructure.js +17 -33
- package/dist/esm/cert.d.ts +2 -0
- package/dist/esm/cert.js +4 -0
- package/dist/esm/command-states.d.ts +36 -0
- package/{lib → dist/esm}/command-states.js +4 -16
- package/dist/esm/commands/append.d.ts +88 -0
- package/{lib → dist/esm}/commands/append.js +47 -85
- package/dist/esm/commands/capability.d.ts +2 -0
- package/dist/esm/commands/capability.js +29 -0
- package/dist/esm/commands/check.d.ts +2 -0
- package/dist/esm/commands/check.js +13 -0
- package/dist/esm/commands/close.d.ts +2 -0
- package/dist/esm/commands/close.js +20 -0
- package/dist/esm/commands/copy.d.ts +30 -0
- package/{lib → dist/esm}/commands/copy.js +31 -55
- package/dist/esm/commands/create.d.ts +2 -0
- package/{lib → dist/esm}/commands/create.js +25 -39
- package/dist/esm/commands/delete.d.ts +2 -0
- package/{lib → dist/esm}/commands/delete.js +25 -41
- package/dist/esm/commands/examine.d.ts +2 -0
- package/dist/esm/commands/examine.js +4 -0
- package/dist/esm/commands/expunge.d.ts +2 -0
- package/dist/esm/commands/expunge.js +17 -0
- package/dist/esm/commands/fetch.d.ts +23 -0
- package/{lib → dist/esm}/commands/fetch.js +34 -75
- package/dist/esm/commands/handlers/fetch.d.ts +12 -0
- package/{lib → dist/esm}/commands/handlers/fetch.js +11 -42
- package/dist/esm/commands/handlers/flags.d.ts +17 -0
- package/{lib → dist/esm}/commands/handlers/flags.js +3 -11
- package/dist/esm/commands/handlers/search.d.ts +85 -0
- package/{lib → dist/esm}/commands/handlers/search.js +33 -71
- package/dist/esm/commands/handlers/status.d.ts +34 -0
- package/{lib → dist/esm}/commands/handlers/status.js +1 -9
- package/dist/esm/commands/handlers/store.d.ts +3 -0
- package/{lib → dist/esm}/commands/handlers/store.js +20 -44
- package/dist/esm/commands/index.d.ts +2 -0
- package/dist/esm/commands/index.js +55 -0
- package/dist/esm/commands/list.d.ts +2 -0
- package/dist/esm/commands/list.js +71 -0
- package/dist/esm/commands/login.d.ts +2 -0
- package/{lib → dist/esm}/commands/login.js +24 -44
- package/dist/esm/commands/logout.d.ts +2 -0
- package/dist/esm/commands/logout.js +25 -0
- package/dist/esm/commands/lsub.d.ts +2 -0
- package/dist/esm/commands/lsub.js +64 -0
- package/dist/esm/commands/noop.d.ts +2 -0
- package/dist/esm/commands/noop.js +13 -0
- package/dist/esm/commands/rename.d.ts +2 -0
- package/{lib → dist/esm}/commands/rename.js +32 -51
- package/dist/esm/commands/search.d.ts +10 -0
- package/dist/esm/commands/search.js +54 -0
- package/dist/esm/commands/select.d.ts +19 -0
- package/dist/esm/commands/select.js +214 -0
- package/dist/esm/commands/status.d.ts +2 -0
- package/{lib → dist/esm}/commands/status.js +18 -39
- package/dist/esm/commands/store.d.ts +10 -0
- package/{lib → dist/esm}/commands/store.js +39 -73
- package/dist/esm/commands/subscribe.d.ts +2 -0
- package/{lib → dist/esm}/commands/subscribe.js +22 -39
- package/dist/esm/commands/uid-copy.d.ts +2 -0
- package/dist/esm/commands/uid-copy.js +4 -0
- package/dist/esm/commands/uid-fetch.d.ts +3 -0
- package/dist/esm/commands/uid-fetch.js +3 -0
- package/dist/esm/commands/uid-search.d.ts +3 -0
- package/dist/esm/commands/uid-search.js +3 -0
- package/dist/esm/commands/uid-store.d.ts +3 -0
- package/dist/esm/commands/uid-store.js +3 -0
- package/dist/esm/commands/unsubscribe.d.ts +2 -0
- package/{lib → dist/esm}/commands/unsubscribe.js +22 -37
- package/dist/esm/dates.d.ts +64 -0
- package/{lib → dist/esm}/dates.js +6 -14
- package/dist/esm/deflate-layer.d.ts +83 -0
- package/{lib → dist/esm}/deflate-layer.js +9 -26
- package/dist/esm/encoded-words.d.ts +15 -0
- package/{lib → dist/esm}/encoded-words.js +9 -25
- package/dist/esm/envelope.d.ts +33 -0
- package/{lib → dist/esm}/envelope.js +8 -19
- package/dist/esm/esearch.d.ts +96 -0
- package/{lib → dist/esm}/esearch.js +12 -39
- package/dist/esm/framing.d.ts +66 -0
- package/dist/esm/framing.js +82 -0
- package/dist/esm/index.d.ts +9 -0
- package/dist/esm/index.js +6 -0
- package/dist/esm/list-extensions.d.ts +50 -0
- package/{lib → dist/esm}/list-extensions.js +1 -4
- package/dist/esm/load-plugins.d.ts +21 -0
- package/{lib → dist/esm}/load-plugins.js +9 -43
- package/dist/esm/mailbox-name.d.ts +26 -0
- package/{lib → dist/esm}/mailbox-name.js +5 -26
- package/dist/esm/mimeparser.d.ts +137 -0
- package/{lib → dist/esm}/mimeparser.js +74 -152
- package/dist/esm/mock-client.d.ts +39 -0
- package/{lib → dist/esm}/mock-client.js +26 -40
- package/dist/esm/numbers.d.ts +28 -0
- package/{lib → dist/esm}/numbers.js +1 -8
- package/dist/esm/package.json +3 -0
- package/dist/esm/plugins/acl.d.ts +2 -0
- package/{lib → dist/esm}/plugins/acl.js +146 -240
- package/dist/esm/plugins/appendlimit.d.ts +16 -0
- package/{lib → dist/esm}/plugins/appendlimit.js +5 -16
- package/dist/esm/plugins/auth-plain.d.ts +2 -0
- package/{lib → dist/esm}/plugins/auth-plain.js +11 -31
- package/dist/esm/plugins/binary.d.ts +30 -0
- package/{lib → dist/esm}/plugins/binary.js +17 -43
- package/dist/esm/plugins/catenate.d.ts +14 -0
- package/{lib → dist/esm}/plugins/catenate.js +19 -40
- package/dist/esm/plugins/compress.d.ts +7 -0
- package/dist/esm/plugins/compress.js +61 -0
- package/dist/esm/plugins/condstore.d.ts +5 -0
- package/{lib → dist/esm}/plugins/condstore.js +66 -152
- package/dist/esm/plugins/context-search.d.ts +8 -0
- package/{lib → dist/esm}/plugins/context-search.js +53 -88
- package/dist/esm/plugins/context-sort.d.ts +6 -0
- package/{lib → dist/esm}/plugins/context-sort.js +4 -9
- package/dist/esm/plugins/create-special-use.d.ts +7 -0
- package/{lib → dist/esm}/plugins/create-special-use.js +33 -55
- package/dist/esm/plugins/enable.d.ts +23 -0
- package/dist/esm/plugins/enable.js +111 -0
- package/dist/esm/plugins/esearch.d.ts +6 -0
- package/{lib → dist/esm}/plugins/esearch.js +13 -42
- package/dist/esm/plugins/esort.d.ts +6 -0
- package/{lib → dist/esm}/plugins/esort.js +7 -25
- package/dist/esm/plugins/id.d.ts +5 -0
- package/dist/esm/plugins/id.js +108 -0
- package/dist/esm/plugins/idle.d.ts +5 -0
- package/dist/esm/plugins/idle.js +70 -0
- package/dist/esm/plugins/imap4rev2.d.ts +6 -0
- package/{lib → dist/esm}/plugins/imap4rev2.js +24 -60
- package/dist/esm/plugins/index.d.ts +2 -0
- package/dist/esm/plugins/index.js +113 -0
- package/dist/esm/plugins/list-extended.d.ts +2 -0
- package/{lib → dist/esm}/plugins/list-extended.js +28 -66
- package/dist/esm/plugins/list-status.d.ts +6 -0
- package/{lib → dist/esm}/plugins/list-status.js +5 -12
- package/dist/esm/plugins/literalminus.d.ts +8 -0
- package/{lib → dist/esm}/plugins/literalminus.js +2 -5
- package/dist/esm/plugins/literalplus.d.ts +6 -0
- package/{lib → dist/esm}/plugins/literalplus.js +2 -5
- package/dist/esm/plugins/logindisabled.d.ts +5 -0
- package/dist/esm/plugins/logindisabled.js +39 -0
- package/dist/esm/plugins/messagelimit.d.ts +19 -0
- package/{lib → dist/esm}/plugins/messagelimit.js +18 -41
- package/dist/esm/plugins/metadata-server.d.ts +7 -0
- package/{lib → dist/esm}/plugins/metadata-server.js +3 -7
- package/dist/esm/plugins/metadata.d.ts +11 -0
- package/dist/esm/plugins/metadata.js +421 -0
- package/dist/esm/plugins/move.d.ts +11 -0
- package/{lib → dist/esm}/plugins/move.js +37 -66
- package/dist/esm/plugins/multiappend.d.ts +12 -0
- package/{lib → dist/esm}/plugins/multiappend.js +2 -5
- package/dist/esm/plugins/multisearch.d.ts +6 -0
- package/{lib → dist/esm}/plugins/multisearch.js +24 -48
- package/dist/esm/plugins/namespace.d.ts +5 -0
- package/dist/esm/plugins/namespace.js +42 -0
- package/dist/esm/plugins/notify.d.ts +2 -0
- package/{lib → dist/esm}/plugins/notify.js +90 -134
- package/dist/esm/plugins/oauthbearer.d.ts +32 -0
- package/{lib → dist/esm}/plugins/oauthbearer.js +18 -48
- package/dist/esm/plugins/objectid.d.ts +23 -0
- package/{lib → dist/esm}/plugins/objectid.js +21 -58
- package/dist/esm/plugins/partial.d.ts +6 -0
- package/{lib → dist/esm}/plugins/partial.js +7 -15
- package/dist/esm/plugins/preview.d.ts +31 -0
- package/{lib → dist/esm}/plugins/preview.js +28 -66
- package/dist/esm/plugins/qresync.d.ts +11 -0
- package/{lib → dist/esm}/plugins/qresync.js +64 -134
- package/dist/esm/plugins/quota.d.ts +18 -0
- package/{lib → dist/esm}/plugins/quota.js +89 -135
- package/dist/esm/plugins/replace.d.ts +14 -0
- package/{lib → dist/esm}/plugins/replace.js +21 -51
- package/dist/esm/plugins/sasl-ir.d.ts +5 -0
- package/{lib → dist/esm}/plugins/sasl-ir.js +3 -6
- package/dist/esm/plugins/savedate.d.ts +17 -0
- package/{lib → dist/esm}/plugins/savedate.js +5 -15
- package/dist/esm/plugins/savelimit.d.ts +10 -0
- package/{lib → dist/esm}/plugins/savelimit.js +3 -6
- package/dist/esm/plugins/searchres.d.ts +6 -0
- package/{lib → dist/esm}/plugins/searchres.js +13 -22
- package/dist/esm/plugins/sort-display.d.ts +11 -0
- package/{lib → dist/esm}/plugins/sort-display.js +6 -10
- package/dist/esm/plugins/sort.d.ts +11 -0
- package/{lib → dist/esm}/plugins/sort.js +24 -46
- package/dist/esm/plugins/special-use.d.ts +10 -0
- package/{lib → dist/esm}/plugins/special-use.js +9 -24
- package/dist/esm/plugins/starttls.d.ts +5 -0
- package/{lib → dist/esm}/plugins/starttls.js +20 -37
- package/dist/esm/plugins/status-size.d.ts +7 -0
- package/{lib → dist/esm}/plugins/status-size.js +4 -11
- package/dist/esm/plugins/thread-orderedsubject.d.ts +11 -0
- package/{lib → dist/esm}/plugins/thread-orderedsubject.js +3 -6
- package/dist/esm/plugins/thread-references.d.ts +11 -0
- package/{lib → dist/esm}/plugins/thread-references.js +3 -6
- package/dist/esm/plugins/uidonly.d.ts +15 -0
- package/{lib → dist/esm}/plugins/uidonly.js +11 -35
- package/dist/esm/plugins/uidplus.d.ts +15 -0
- package/{lib → dist/esm}/plugins/uidplus.js +25 -45
- package/dist/esm/plugins/unauthenticate.d.ts +7 -0
- package/dist/esm/plugins/unauthenticate.js +17 -0
- package/dist/esm/plugins/unselect.d.ts +5 -0
- package/dist/esm/plugins/unselect.js +21 -0
- package/dist/esm/plugins/utf8-accept.d.ts +6 -0
- package/{lib → dist/esm}/plugins/utf8-accept.js +10 -21
- package/dist/esm/plugins/x-gm-ext-1.d.ts +26 -0
- package/{lib → dist/esm}/plugins/x-gm-ext-1.js +48 -100
- package/dist/esm/plugins/xoauth2.d.ts +2 -0
- package/dist/esm/plugins/xoauth2.js +140 -0
- package/dist/esm/plugins/xtoybird.d.ts +2 -0
- package/dist/esm/plugins/xtoybird.js +218 -0
- package/dist/esm/server.d.ts +876 -0
- package/dist/esm/server.js +2543 -0
- package/dist/esm/smtp-listener.d.ts +13 -0
- package/{lib → dist/esm}/smtp-listener.js +5 -12
- package/dist/esm/sorting.d.ts +77 -0
- package/{lib → dist/esm}/sorting.js +40 -53
- package/dist/esm/threading.d.ts +30 -0
- package/{lib → dist/esm}/threading.js +29 -70
- package/dist/esm/types.d.ts +327 -0
- package/dist/esm/types.js +2 -0
- package/dist/esm/utf8-session.d.ts +17 -0
- package/{lib → dist/esm}/utf8-session.js +15 -25
- package/dist/esm/vanished.d.ts +21 -0
- package/{lib → dist/esm}/vanished.js +16 -21
- package/dist/plugin-help.json +298 -0
- package/package.json +54 -11
- package/lib/commands/capability.js +0 -47
- package/lib/commands/check.js +0 -21
- package/lib/commands/close.js +0 -30
- package/lib/commands/examine.js +0 -7
- package/lib/commands/expunge.js +0 -27
- package/lib/commands/list.js +0 -100
- package/lib/commands/logout.js +0 -41
- package/lib/commands/lsub.js +0 -87
- package/lib/commands/noop.js +0 -21
- package/lib/commands/search.js +0 -76
- package/lib/commands/select.js +0 -289
- package/lib/commands/uid copy.js +0 -7
- package/lib/commands/uid fetch.js +0 -5
- package/lib/commands/uid search.js +0 -5
- package/lib/commands/uid store.js +0 -5
- package/lib/plugins/compress.js +0 -76
- package/lib/plugins/enable.js +0 -155
- package/lib/plugins/id.js +0 -138
- package/lib/plugins/idle.js +0 -105
- package/lib/plugins/logindisabled.js +0 -50
- package/lib/plugins/metadata.js +0 -475
- package/lib/plugins/namespace.js +0 -67
- package/lib/plugins/unauthenticate.js +0 -28
- package/lib/plugins/unselect.js +0 -36
- package/lib/plugins/xoauth2.js +0 -188
- package/lib/plugins/xtoybird.js +0 -282
- package/lib/server.js +0 -2880
package/lib/plugins/compress.js
DELETED
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
const { states } = require('../command-states');
|
|
4
|
-
const DeflateLayer = require('../deflate-layer');
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* @help Adds COMPRESS=DEFLATE [RFC4978] capability
|
|
8
|
-
* @help Raw DEFLATE in both directions after the tagged OK,
|
|
9
|
-
* @help every burst of responses ends with a sync flush
|
|
10
|
-
*/
|
|
11
|
-
|
|
12
|
-
module.exports = function (server) {
|
|
13
|
-
server.registerCapability('COMPRESS=DEFLATE');
|
|
14
|
-
|
|
15
|
-
const isActive = connection => connection.transport instanceof DeflateLayer && connection.transport.active;
|
|
16
|
-
|
|
17
|
-
// RFC 8437 section 4.1: after UNAUTHENTICATE the server ends its compression after the CRLF of
|
|
18
|
-
// the OK, and the client after the CRLF of the command, so anything it compressed later is dropped
|
|
19
|
-
server.resetHandlers.push(connection => {
|
|
20
|
-
if (isActive(connection)) {
|
|
21
|
-
connection.discardInput();
|
|
22
|
-
connection.transport.endInput();
|
|
23
|
-
connection.transport.end();
|
|
24
|
-
}
|
|
25
|
-
});
|
|
26
|
-
|
|
27
|
-
server.setCommandHandler(
|
|
28
|
-
'COMPRESS',
|
|
29
|
-
(connection, parsed, data, callback) => {
|
|
30
|
-
const args = parsed.attributes || [];
|
|
31
|
-
|
|
32
|
-
// RFC 4978 section 5: compress = "COMPRESS" SP algorithm, algorithm = "DEFLATE"
|
|
33
|
-
if (args.length !== 1 || !args[0] || args[0].type !== 'ATOM') {
|
|
34
|
-
connection.sendStatus(parsed, data, 'BAD', 'COMPRESS expects a compression mechanism');
|
|
35
|
-
return callback();
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
if (args[0].value.toUpperCase() !== 'DEFLATE') {
|
|
39
|
-
connection.sendStatus(parsed, data, 'BAD', 'Unknown compression mechanism');
|
|
40
|
-
return callback();
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
// RFC 4978 section 3: BAD if COMPRESS is already active, NO is for compression by another
|
|
44
|
-
// layer, such as TLS, which ImapKit never negotiates. Dovecot answers NO here
|
|
45
|
-
if (isActive(connection)) {
|
|
46
|
-
connection.sendStatus(parsed, data, 'BAD', 'DEFLATE active via COMPRESS', 'COMPRESSIONACTIVE');
|
|
47
|
-
return callback();
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
connection.sendStatus(parsed, data, 'OK', 'DEFLATE active');
|
|
51
|
-
|
|
52
|
-
if (connection.transport) {
|
|
53
|
-
// the layer of an earlier session, it passes data on as is since UNAUTHENTICATE
|
|
54
|
-
connection.transport.destroy();
|
|
55
|
-
}
|
|
56
|
-
// compression starts right after the CRLF of the tagged OK
|
|
57
|
-
connection.transport = new DeflateLayer({
|
|
58
|
-
writeRaw: chunk => connection.writeRaw(chunk),
|
|
59
|
-
onData: chunk => connection.onData(chunk),
|
|
60
|
-
onError: err => {
|
|
61
|
-
// the input can not be decompressed, so there is nothing left to talk about
|
|
62
|
-
if (connection.options.debug) {
|
|
63
|
-
console.log('COMPRESS error: %s', err.message);
|
|
64
|
-
}
|
|
65
|
-
connection.sendStatus({ tag: '*' }, false, 'BYE', 'Invalid compressed data', false, 'COMPRESS ERROR');
|
|
66
|
-
connection.end();
|
|
67
|
-
}
|
|
68
|
-
});
|
|
69
|
-
|
|
70
|
-
return callback();
|
|
71
|
-
},
|
|
72
|
-
// RFC 4978 section 3: the client MUST NOT send further commands until it has seen the result of COMPRESS.
|
|
73
|
-
// Those commands would be uncompressed, and after an OK the server expects compressed input
|
|
74
|
-
{ states: states.AUTHENTICATED, noPipelining: true }
|
|
75
|
-
);
|
|
76
|
-
};
|
package/lib/plugins/enable.js
DELETED
|
@@ -1,155 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
const { states } = require('../command-states');
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* @help Adds ENABLE capability [RFC5161]
|
|
7
|
-
* @help Plugins that can be enabled (eg. CONDSTORE)
|
|
8
|
-
* @help can be loaded in any order
|
|
9
|
-
*/
|
|
10
|
-
|
|
11
|
-
/**
|
|
12
|
-
* Makes an extension available for ENABLE. Plugins call it whether the ENABLE plugin is loaded before or after them
|
|
13
|
-
*
|
|
14
|
-
* @param {Object} server IMAPServer instance
|
|
15
|
-
* @param {String} name Capability name in the spelling it is advertised in, e.g. "IMAP4rev2"
|
|
16
|
-
*/
|
|
17
|
-
function registerEnable(server, name) {
|
|
18
|
-
server.enableAvailable = server.enableAvailable || [];
|
|
19
|
-
if (server.enableAvailable.indexOf(name) < 0) {
|
|
20
|
-
server.enableAvailable.push(name);
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
/**
|
|
25
|
-
* Checks if a session has enabled an extension with ENABLE. UNAUTHENTICATE clears the list (RFC 8437 section 4.1)
|
|
26
|
-
*
|
|
27
|
-
* @param {Object} connection IMAP connection
|
|
28
|
-
* @param {String} name Capability name in the spelling it was registered with, see registerEnable
|
|
29
|
-
* @return {Boolean} true if the extension is enabled
|
|
30
|
-
*/
|
|
31
|
-
function isEnabled(connection, name) {
|
|
32
|
-
return !!connection.enabled && connection.enabled.indexOf(name) >= 0;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
module.exports = function (server) {
|
|
36
|
-
server.registerCapability('ENABLE');
|
|
37
|
-
|
|
38
|
-
// Shared with plugins that can be enabled, these might be loaded before or after this one
|
|
39
|
-
server.enableAvailable = server.enableAvailable || [];
|
|
40
|
-
|
|
41
|
-
server.connectionHandlers.push(connection => {
|
|
42
|
-
connection.enabled = connection.enabled || [];
|
|
43
|
-
});
|
|
44
|
-
|
|
45
|
-
// RFC 8437 section 4.1: extensions enabled with ENABLE cease to be enabled after UNAUTHENTICATE
|
|
46
|
-
server.resetHandlers.push(connection => {
|
|
47
|
-
connection.enabled = [];
|
|
48
|
-
});
|
|
49
|
-
|
|
50
|
-
server.setCommandHandler(
|
|
51
|
-
'ENABLE',
|
|
52
|
-
(connection, parsed, data, callback) => {
|
|
53
|
-
let capability;
|
|
54
|
-
let i;
|
|
55
|
-
let len;
|
|
56
|
-
|
|
57
|
-
// RFC 5161 section 3.1: "Clients MUST NOT issue ENABLE once they SELECT/EXAMINE a mailbox".
|
|
58
|
-
// Servers do not have to check this, ImapKit does to catch the client bug.
|
|
59
|
-
if (connection.everSelected) {
|
|
60
|
-
connection.sendStatus(parsed, data, 'BAD', 'ENABLE is not allowed after SELECT or EXAMINE');
|
|
61
|
-
return callback();
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
if (!parsed.attributes) {
|
|
65
|
-
connection.send(
|
|
66
|
-
{
|
|
67
|
-
tag: parsed.tag,
|
|
68
|
-
command: 'BAD',
|
|
69
|
-
attributes: [
|
|
70
|
-
{
|
|
71
|
-
type: 'TEXT',
|
|
72
|
-
value: 'ENABLE expects capability list'
|
|
73
|
-
}
|
|
74
|
-
]
|
|
75
|
-
},
|
|
76
|
-
'INVALID COMMAND',
|
|
77
|
-
parsed,
|
|
78
|
-
data
|
|
79
|
-
);
|
|
80
|
-
return callback();
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
for (i = 0, len = parsed.attributes.length; i < len; i++) {
|
|
84
|
-
if (!parsed.attributes[i] || parsed.attributes[i].type !== 'ATOM') {
|
|
85
|
-
connection.send(
|
|
86
|
-
{
|
|
87
|
-
tag: parsed.tag,
|
|
88
|
-
command: 'BAD',
|
|
89
|
-
attributes: [
|
|
90
|
-
{
|
|
91
|
-
type: 'TEXT',
|
|
92
|
-
value: 'Attribute nr ' + (i + 1) + ' is not an ATOM'
|
|
93
|
-
}
|
|
94
|
-
]
|
|
95
|
-
},
|
|
96
|
-
'INVALID COMMAND',
|
|
97
|
-
parsed,
|
|
98
|
-
data
|
|
99
|
-
);
|
|
100
|
-
return callback();
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
// The ENABLED response lists only the extensions enabled by this command
|
|
105
|
-
// Capability names are matched case-insensitively and listed in the spelling the server advertises them
|
|
106
|
-
// (`server.enableAvailable`), e.g. "IMAP4rev2", so plugins look them up in `connection.enabled` by that name
|
|
107
|
-
const enabled = [];
|
|
108
|
-
for (i = 0, len = parsed.attributes.length; i < len; i++) {
|
|
109
|
-
const requested = parsed.attributes[i].value.toUpperCase();
|
|
110
|
-
capability = server.enableAvailable.find(name => name.toUpperCase() === requested);
|
|
111
|
-
if (capability && connection.enabled.indexOf(capability) < 0) {
|
|
112
|
-
connection.enabled.push(capability);
|
|
113
|
-
enabled.push(capability);
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
connection.send(
|
|
118
|
-
{
|
|
119
|
-
tag: '*',
|
|
120
|
-
command: 'ENABLED',
|
|
121
|
-
attributes: enabled.map(capability => ({
|
|
122
|
-
type: 'ATOM',
|
|
123
|
-
value: capability
|
|
124
|
-
}))
|
|
125
|
-
},
|
|
126
|
-
'ENABLED',
|
|
127
|
-
parsed,
|
|
128
|
-
data,
|
|
129
|
-
enabled
|
|
130
|
-
);
|
|
131
|
-
|
|
132
|
-
connection.send(
|
|
133
|
-
{
|
|
134
|
-
tag: parsed.tag,
|
|
135
|
-
command: 'OK',
|
|
136
|
-
attributes: [
|
|
137
|
-
{
|
|
138
|
-
type: 'TEXT',
|
|
139
|
-
value: 'ENABLE completed'
|
|
140
|
-
}
|
|
141
|
-
]
|
|
142
|
-
},
|
|
143
|
-
'ENABLE',
|
|
144
|
-
parsed,
|
|
145
|
-
data
|
|
146
|
-
);
|
|
147
|
-
|
|
148
|
-
return callback();
|
|
149
|
-
},
|
|
150
|
-
{ states: states.AUTHENTICATED }
|
|
151
|
-
);
|
|
152
|
-
};
|
|
153
|
-
|
|
154
|
-
module.exports.registerEnable = registerEnable;
|
|
155
|
-
module.exports.isEnabled = isEnabled;
|
package/lib/plugins/id.js
DELETED
|
@@ -1,138 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
const { states } = require('../command-states');
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* @help Adds ID [RFC2971] capability
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
module.exports = function (server) {
|
|
10
|
-
// Register capability, always usable
|
|
11
|
-
server.registerCapability('ID');
|
|
12
|
-
|
|
13
|
-
// Add ID command
|
|
14
|
-
server.setCommandHandler(
|
|
15
|
-
'ID',
|
|
16
|
-
(connection, parsed, data, callback) => {
|
|
17
|
-
// keys are client supplied, so the object has no prototype
|
|
18
|
-
const clientList = Object.create(null);
|
|
19
|
-
let serverList = null;
|
|
20
|
-
let i;
|
|
21
|
-
let len;
|
|
22
|
-
let key;
|
|
23
|
-
|
|
24
|
-
// Require exactly 1 attribute (NIL or parameter list)
|
|
25
|
-
if (!parsed.attributes || parsed.attributes.length !== 1) {
|
|
26
|
-
return sendError('ID expects 1 attribute', connection, parsed, data, callback);
|
|
27
|
-
}
|
|
28
|
-
const list = parsed.attributes[0];
|
|
29
|
-
if ((list && !Array.isArray(list)) || (list && list.length % 2)) {
|
|
30
|
-
return sendError('ID expects valid parameter list', connection, parsed, data, callback);
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
// RFC 2971 section 3.3: at most 30 field-value pairs
|
|
34
|
-
if (list && list.length > 60) {
|
|
35
|
-
return sendError('ID allows at most 30 field-value pairs', connection, parsed, data, callback);
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
// Build client ID object and check validity of the values
|
|
39
|
-
if (list && list.length) {
|
|
40
|
-
for (i = 0, len = list.length; i < len; i++) {
|
|
41
|
-
if (i % 2 === 0) {
|
|
42
|
-
// Handle keys (always strings)
|
|
43
|
-
if (list[i] && ['STRING', 'LITERAL'].indexOf(list[i].type) >= 0) {
|
|
44
|
-
key = list[i].value;
|
|
45
|
-
// RFC 2971 section 3.3: field names are at most 30 octets, case-insensitive and unique
|
|
46
|
-
if (key.length > 30) {
|
|
47
|
-
return sendError('ID field names can be at most 30 octets', connection, parsed, data, callback);
|
|
48
|
-
}
|
|
49
|
-
if (Object.keys(clientList).some(existing => existing.toLowerCase() === key.toLowerCase())) {
|
|
50
|
-
return sendError('ID field names must not repeat', connection, parsed, data, callback);
|
|
51
|
-
}
|
|
52
|
-
} else {
|
|
53
|
-
return sendError('ID expects valid parameter list', connection, parsed, data, callback);
|
|
54
|
-
}
|
|
55
|
-
} else {
|
|
56
|
-
// Handle values (string or NIL)
|
|
57
|
-
if (!list[i] || ['STRING', 'LITERAL'].indexOf(list[i].type) >= 0) {
|
|
58
|
-
if (list[i] && list[i].value.length > 1024) {
|
|
59
|
-
return sendError('ID values can be at most 1024 octets', connection, parsed, data, callback);
|
|
60
|
-
}
|
|
61
|
-
clientList[key] = (list[i] && list[i].value) || null;
|
|
62
|
-
} else {
|
|
63
|
-
return sendError('ID expects valid parameter list', connection, parsed, data, callback);
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
// Build response object from server options
|
|
70
|
-
if (server.options.id) {
|
|
71
|
-
serverList = [];
|
|
72
|
-
Object.keys(server.options.id).forEach(key => {
|
|
73
|
-
serverList.push({
|
|
74
|
-
type: 'STRING',
|
|
75
|
-
value: key
|
|
76
|
-
});
|
|
77
|
-
serverList.push({
|
|
78
|
-
type: 'STRING',
|
|
79
|
-
value: (server.options.id[key] || '').toString()
|
|
80
|
-
});
|
|
81
|
-
});
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
// Send untagged ID response
|
|
85
|
-
connection.send(
|
|
86
|
-
{
|
|
87
|
-
tag: '*',
|
|
88
|
-
command: 'ID',
|
|
89
|
-
attributes: [serverList]
|
|
90
|
-
},
|
|
91
|
-
'ID',
|
|
92
|
-
parsed,
|
|
93
|
-
data,
|
|
94
|
-
clientList
|
|
95
|
-
);
|
|
96
|
-
|
|
97
|
-
// Send tagged response
|
|
98
|
-
connection.send(
|
|
99
|
-
{
|
|
100
|
-
tag: parsed.tag,
|
|
101
|
-
command: 'OK',
|
|
102
|
-
attributes: [
|
|
103
|
-
{
|
|
104
|
-
type: 'TEXT',
|
|
105
|
-
value: 'ID command completed'
|
|
106
|
-
}
|
|
107
|
-
]
|
|
108
|
-
},
|
|
109
|
-
'ID',
|
|
110
|
-
parsed,
|
|
111
|
-
data,
|
|
112
|
-
clientList
|
|
113
|
-
);
|
|
114
|
-
|
|
115
|
-
callback();
|
|
116
|
-
},
|
|
117
|
-
{ states: states.ANY }
|
|
118
|
-
);
|
|
119
|
-
};
|
|
120
|
-
|
|
121
|
-
function sendError(message, connection, parsed, data, callback) {
|
|
122
|
-
connection.send(
|
|
123
|
-
{
|
|
124
|
-
tag: parsed.tag,
|
|
125
|
-
command: 'BAD',
|
|
126
|
-
attributes: [
|
|
127
|
-
{
|
|
128
|
-
type: 'TEXT',
|
|
129
|
-
value: message
|
|
130
|
-
}
|
|
131
|
-
]
|
|
132
|
-
},
|
|
133
|
-
'INVALID COMMAND',
|
|
134
|
-
parsed,
|
|
135
|
-
data
|
|
136
|
-
);
|
|
137
|
-
return callback();
|
|
138
|
-
}
|
package/lib/plugins/idle.js
DELETED
|
@@ -1,105 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
const { states } = require('../command-states');
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* @help Adds IDLE [RFC2177] capability
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
module.exports = function (server) {
|
|
10
|
-
server.registerCapability('IDLE');
|
|
11
|
-
|
|
12
|
-
server.setCommandHandler(
|
|
13
|
-
'IDLE',
|
|
14
|
-
(connection, parsed, data, callback) => {
|
|
15
|
-
const idleTimer = setTimeout(
|
|
16
|
-
() => {
|
|
17
|
-
if (connection.socket && !connection.socket.destroyed) {
|
|
18
|
-
connection.send(
|
|
19
|
-
{
|
|
20
|
-
tag: '*',
|
|
21
|
-
command: 'BYE',
|
|
22
|
-
attributes: [
|
|
23
|
-
{
|
|
24
|
-
type: 'TEXT',
|
|
25
|
-
value: 'IDLE terminated'
|
|
26
|
-
}
|
|
27
|
-
]
|
|
28
|
-
},
|
|
29
|
-
'IDLE EXPIRED',
|
|
30
|
-
parsed,
|
|
31
|
-
data
|
|
32
|
-
);
|
|
33
|
-
connection.end();
|
|
34
|
-
}
|
|
35
|
-
},
|
|
36
|
-
30 * 60 * 1000
|
|
37
|
-
);
|
|
38
|
-
// An idling client should not keep the process alive
|
|
39
|
-
idleTimer.unref();
|
|
40
|
-
|
|
41
|
-
const clearIdleTimer = () => clearTimeout(idleTimer);
|
|
42
|
-
const socket = connection.socket;
|
|
43
|
-
if (socket) {
|
|
44
|
-
socket.once('close', clearIdleTimer);
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
connection.directNotifications = true;
|
|
48
|
-
|
|
49
|
-
// Temporarily redirect client input to this function
|
|
50
|
-
connection.inputHandler = function (str) {
|
|
51
|
-
clearIdleTimer();
|
|
52
|
-
if (socket) {
|
|
53
|
-
socket.removeListener('close', clearIdleTimer);
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
// Stop listening to any other user input
|
|
57
|
-
connection.inputHandler = false;
|
|
58
|
-
|
|
59
|
-
// Notifications are sent again only while a command is in progress
|
|
60
|
-
connection.directNotifications = false;
|
|
61
|
-
|
|
62
|
-
if (str.toUpperCase() === 'DONE') {
|
|
63
|
-
connection.send(
|
|
64
|
-
{
|
|
65
|
-
tag: parsed.tag,
|
|
66
|
-
command: 'OK',
|
|
67
|
-
attributes: [
|
|
68
|
-
{
|
|
69
|
-
type: 'TEXT',
|
|
70
|
-
value: 'IDLE terminated'
|
|
71
|
-
}
|
|
72
|
-
]
|
|
73
|
-
},
|
|
74
|
-
'IDLE',
|
|
75
|
-
parsed,
|
|
76
|
-
data
|
|
77
|
-
);
|
|
78
|
-
} else {
|
|
79
|
-
connection.send(
|
|
80
|
-
{
|
|
81
|
-
tag: parsed.tag,
|
|
82
|
-
command: 'BAD',
|
|
83
|
-
attributes: [
|
|
84
|
-
{
|
|
85
|
-
type: 'TEXT',
|
|
86
|
-
value: 'Invalid Idle continuation'
|
|
87
|
-
}
|
|
88
|
-
]
|
|
89
|
-
},
|
|
90
|
-
'INVALID IDLE',
|
|
91
|
-
parsed,
|
|
92
|
-
data
|
|
93
|
-
);
|
|
94
|
-
}
|
|
95
|
-
};
|
|
96
|
-
|
|
97
|
-
connection.write('+ idling\r\n');
|
|
98
|
-
|
|
99
|
-
connection.processNotifications();
|
|
100
|
-
|
|
101
|
-
return callback();
|
|
102
|
-
},
|
|
103
|
-
{ states: states.AUTHENTICATED, noArguments: true }
|
|
104
|
-
);
|
|
105
|
-
};
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* @help Disables LOGIN support for unencrypted connections
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
module.exports = function (server) {
|
|
8
|
-
server.registerCapability('LOGINDISABLED', connection => {
|
|
9
|
-
return !connection.secureConnection && connection.state === 'Not Authenticated';
|
|
10
|
-
});
|
|
11
|
-
|
|
12
|
-
// Retrieve actual LOGIN handler
|
|
13
|
-
// Will be run if conditions are met
|
|
14
|
-
const oldHandler = server.getCommandHandler('LOGIN');
|
|
15
|
-
|
|
16
|
-
// Override LOGIN
|
|
17
|
-
server.setCommandHandler('LOGIN', (connection, parsed, data, callback) => {
|
|
18
|
-
// If the connection is unsecure, do not allow LOGIN
|
|
19
|
-
if (!connection.secureConnection) {
|
|
20
|
-
connection.send(
|
|
21
|
-
{
|
|
22
|
-
tag: parsed.tag,
|
|
23
|
-
command: 'NO',
|
|
24
|
-
attributes: [
|
|
25
|
-
{
|
|
26
|
-
type: 'SECTION',
|
|
27
|
-
section: [
|
|
28
|
-
{
|
|
29
|
-
type: 'ATOM',
|
|
30
|
-
value: 'PRIVACYREQUIRED'
|
|
31
|
-
}
|
|
32
|
-
]
|
|
33
|
-
},
|
|
34
|
-
{
|
|
35
|
-
type: 'TEXT',
|
|
36
|
-
value: 'Run STARTTLS first'
|
|
37
|
-
}
|
|
38
|
-
]
|
|
39
|
-
},
|
|
40
|
-
'LOGIN FAILED',
|
|
41
|
-
parsed,
|
|
42
|
-
data
|
|
43
|
-
);
|
|
44
|
-
return callback();
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
// Reroute command to actual LOGIN handler
|
|
48
|
-
oldHandler(connection, parsed, data, callback);
|
|
49
|
-
});
|
|
50
|
-
};
|