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,13 @@
|
|
|
1
|
+
import { SMTPServer } from 'smtp-server';
|
|
2
|
+
import type { IMAPServer } from './types.js';
|
|
3
|
+
/**
|
|
4
|
+
* Starts an SMTP server that appends every received message to the INBOX
|
|
5
|
+
* of the given ImapKit IMAP server. Any sender, recipient and credentials
|
|
6
|
+
* are accepted.
|
|
7
|
+
*
|
|
8
|
+
* @param {Number} smtpPort - port to listen on for SMTP commands
|
|
9
|
+
* @param {Object} imapServer - the ImapKit IMAP server
|
|
10
|
+
* @param {Function} [callback] - function executed when SMTP server is listening
|
|
11
|
+
* @return {SMTPServer} the SMTP server instance, use `close()` to stop it
|
|
12
|
+
*/
|
|
13
|
+
export declare function startSMTPServer(smtpPort: number, imapServer: IMAPServer, callback?: (() => void) | null): SMTPServer;
|
|
@@ -1,7 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
const { SMTPServer } = require('smtp-server');
|
|
4
|
-
|
|
1
|
+
import { SMTPServer } from 'smtp-server';
|
|
5
2
|
/**
|
|
6
3
|
* Starts an SMTP server that appends every received message to the INBOX
|
|
7
4
|
* of the given ImapKit IMAP server. Any sender, recipient and credentials
|
|
@@ -12,9 +9,8 @@ const { SMTPServer } = require('smtp-server');
|
|
|
12
9
|
* @param {Function} [callback] - function executed when SMTP server is listening
|
|
13
10
|
* @return {SMTPServer} the SMTP server instance, use `close()` to stop it
|
|
14
11
|
*/
|
|
15
|
-
|
|
12
|
+
export function startSMTPServer(smtpPort, imapServer, callback) {
|
|
16
13
|
const credentials = imapServer.getCredentials();
|
|
17
|
-
|
|
18
14
|
const server = new SMTPServer({
|
|
19
15
|
banner: 'ImapKit',
|
|
20
16
|
key: credentials.key,
|
|
@@ -26,7 +22,7 @@ exports.startSMTPServer = function startSMTPServer(smtpPort, imapServer, callbac
|
|
|
26
22
|
},
|
|
27
23
|
onData(stream, session, done) {
|
|
28
24
|
const chunks = [];
|
|
29
|
-
stream.on('data', chunk => chunks.push(chunk));
|
|
25
|
+
stream.on('data', (chunk) => chunks.push(chunk));
|
|
30
26
|
stream.on('error', done);
|
|
31
27
|
stream.on('end', () => {
|
|
32
28
|
// smtp-server has already removed the dot-stuffing (RFC 5321 section 4.5.2)
|
|
@@ -35,17 +31,14 @@ exports.startSMTPServer = function startSMTPServer(smtpPort, imapServer, callbac
|
|
|
35
31
|
});
|
|
36
32
|
}
|
|
37
33
|
});
|
|
38
|
-
|
|
39
|
-
server.on('error', err => {
|
|
34
|
+
server.on('error', (err) => {
|
|
40
35
|
if (imapServer.options.debug) {
|
|
41
36
|
console.error('SMTP server error: %s', err.message);
|
|
42
37
|
}
|
|
43
38
|
});
|
|
44
|
-
|
|
45
39
|
server.listen(smtpPort, () => {
|
|
46
40
|
console.log('Incoming SMTP server up and running on port %s', server.server.address().port);
|
|
47
41
|
callback?.();
|
|
48
42
|
});
|
|
49
|
-
|
|
50
43
|
return server;
|
|
51
|
-
}
|
|
44
|
+
}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import makeSearch from './commands/handlers/search.js';
|
|
2
|
+
import type { Attribute, IMAPConnection, Message, ParsedCommand } from './types.js';
|
|
3
|
+
/**
|
|
4
|
+
* Returns the i;unicode-casemap form of a string (RFC 5051 section 2): every character is titlecased
|
|
5
|
+
* and then decomposed (NFKD). Comparing the UTF-8 octets of the results is the collation that
|
|
6
|
+
* RFC 5256 section 7 requires for SORT and THREAD (I18NLEVEL=1, RFC 5255 section 4.5)
|
|
7
|
+
*
|
|
8
|
+
* @param {String} str Unicode string
|
|
9
|
+
* @return {Buffer} UTF-8 octets to compare with Buffer.compare
|
|
10
|
+
*/
|
|
11
|
+
declare function collationKey(str: string): Buffer;
|
|
12
|
+
/**
|
|
13
|
+
* Extracts the base subject (RFC 5256 section 2.1) and tells if the subject marks a reply or a
|
|
14
|
+
* forward (RFC 5256 section 3, REFERENCES): the extraction removed a subj-refwd, a "(fwd)" trailer
|
|
15
|
+
* or a subj-fwd-hdr and subj-fwd-trl pair.
|
|
16
|
+
*
|
|
17
|
+
* @param {String} subject Subject header value as a binary string
|
|
18
|
+
* @return {Object} `{ subject, isReply }`, subject is the base subject as a Unicode string
|
|
19
|
+
*/
|
|
20
|
+
declare function baseSubject(subject: string | undefined): {
|
|
21
|
+
subject: string;
|
|
22
|
+
isReply: boolean;
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* Internal date and time of a message in milliseconds (RFC 5256 ARRIVAL)
|
|
26
|
+
*
|
|
27
|
+
* @param {Object} message Message object
|
|
28
|
+
* @return {Number} timestamp, 0 if the internal date can not be parsed
|
|
29
|
+
*/
|
|
30
|
+
declare function arrivalTime(message: Message): number;
|
|
31
|
+
/**
|
|
32
|
+
* Sent date of a message in milliseconds (RFC 5256 section 2.2): the Date header normalized to UTC.
|
|
33
|
+
* An invalid zone is read as UTC and an invalid time as 00:00:00, and if the header is missing or
|
|
34
|
+
* has no valid date, the internal date is used instead.
|
|
35
|
+
*
|
|
36
|
+
* @param {Object} message Message object
|
|
37
|
+
* @return {Number} timestamp
|
|
38
|
+
*/
|
|
39
|
+
declare function sentTime(message: Message): number;
|
|
40
|
+
/**
|
|
41
|
+
* addr-mailbox of the first address in a header (RFC 5256 CC, FROM and TO), empty if there is none
|
|
42
|
+
*
|
|
43
|
+
* @param {Object} message Message object
|
|
44
|
+
* @param {String} header "from", "to" or "cc"
|
|
45
|
+
* @return {String} Unicode string
|
|
46
|
+
*/
|
|
47
|
+
declare function addressMailbox(message: Message, header: string): string;
|
|
48
|
+
/**
|
|
49
|
+
* DISPLAY sort value of the first address in a header (RFC 5957 sections 3 and 4): the decoded
|
|
50
|
+
* addr-name, or addr-mailbox@addr-host, or addr-mailbox, or the empty string
|
|
51
|
+
*
|
|
52
|
+
* @param {Object} message Message object
|
|
53
|
+
* @param {String} header "from" or "to"
|
|
54
|
+
* @return {String} Unicode string
|
|
55
|
+
*/
|
|
56
|
+
declare function displayAddress(message: Message, header: string): string;
|
|
57
|
+
/**
|
|
58
|
+
* Lists the Message IDs in a header value, normalized so that quoting does not matter (RFC 5256
|
|
59
|
+
* section 3, REFERENCES): comments and white space are dropped and a quoted id-left is unquoted.
|
|
60
|
+
* Only ids of the form "<" id-left "@" id-right ">" (RFC 5322 section 3.6.4) are valid.
|
|
61
|
+
*
|
|
62
|
+
* @param {String|Array} value Header value
|
|
63
|
+
* @return {Array} Message IDs
|
|
64
|
+
*/
|
|
65
|
+
declare function parseMessageIds(value: string | string[] | undefined): string[];
|
|
66
|
+
/**
|
|
67
|
+
* Runs the search part of SORT and THREAD (RFC 5256 section 3): the charset is mandatory and the
|
|
68
|
+
* criteria follow it, both as in SEARCH. Sends a tagged BAD or NO response if the search fails.
|
|
69
|
+
*
|
|
70
|
+
* @param {Object} connection IMAP connection
|
|
71
|
+
* @param {Object} parsed Parsed command
|
|
72
|
+
* @param {String} data Raw command
|
|
73
|
+
* @param {Array} attributes Command arguments starting with the charset
|
|
74
|
+
* @return {Object|Boolean} `{ list, numbers }` like the SEARCH handler returns, or false after an error
|
|
75
|
+
*/
|
|
76
|
+
declare function searchMessages(connection: IMAPConnection, parsed: ParsedCommand, data: string, attributes: Attribute[]): ReturnType<typeof makeSearch> | false;
|
|
77
|
+
export { collationKey, baseSubject, arrivalTime, sentTime, addressMailbox, displayAddress, parseMessageIds, searchMessages };
|
|
@@ -1,15 +1,11 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
1
|
// Message values for SORT and THREAD (RFC 5256): string collation, base subject, sent date,
|
|
4
2
|
// addresses and Message IDs, and the search step that both commands start with
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
const { decodeHeader } = require('./encoded-words');
|
|
12
|
-
|
|
3
|
+
import { getMessageData } from './mimeparser.js';
|
|
4
|
+
import { processAddress } from './envelope.js';
|
|
5
|
+
import { parseDateTime, parseHeaderDate, toTimestamp } from './dates.js';
|
|
6
|
+
import makeSearch from './commands/handlers/search.js';
|
|
7
|
+
import { badError, criteriaValues, sendSearchError } from './commands/handlers/search.js';
|
|
8
|
+
import { decodeHeader } from './encoded-words.js';
|
|
13
9
|
// UnicodeData.txt titlecase mappings that differ from the single code point uppercase mapping
|
|
14
10
|
// that String#toUpperCase gives: the Latin digraphs and the Greek letters with ypogegrammeni
|
|
15
11
|
const TITLECASE = new Map([
|
|
@@ -30,7 +26,6 @@ for (const start of [0x1f80, 0x1f90, 0x1fa0]) {
|
|
|
30
26
|
TITLECASE.set(start + i, start + i + 8);
|
|
31
27
|
}
|
|
32
28
|
}
|
|
33
|
-
|
|
34
29
|
/**
|
|
35
30
|
* Returns the i;unicode-casemap form of a string (RFC 5051 section 2): every character is titlecased
|
|
36
31
|
* and then decomposed (NFKD). Comparing the UTF-8 octets of the results is the collation that
|
|
@@ -53,12 +48,10 @@ function collationKey(str) {
|
|
|
53
48
|
}
|
|
54
49
|
return Buffer.from(result.normalize('NFKD'), 'utf-8');
|
|
55
50
|
}
|
|
56
|
-
|
|
57
51
|
// RFC 5256 section 5: subj-refwd = ("re" / ("fw" ["d"])) *WSP [subj-blob] ":", subj-blob = "[" *BLOBCHAR "]" *WSP
|
|
58
52
|
const SUBJ_BLOB = '\\[[^[\\]]*\\] *';
|
|
59
53
|
const SUBJ_LEADER = new RegExp('^(?:' + SUBJ_BLOB + ')*(?:re|fwd?) *(?:' + SUBJ_BLOB + ')?:', 'i');
|
|
60
54
|
const SUBJ_BLOB_PREFIX = new RegExp('^' + SUBJ_BLOB);
|
|
61
|
-
|
|
62
55
|
/**
|
|
63
56
|
* Extracts the base subject (RFC 5256 section 2.1) and tells if the subject marks a reply or a
|
|
64
57
|
* forward (RFC 5256 section 3, REFERENCES): the extraction removed a subj-refwd, a "(fwd)" trailer
|
|
@@ -69,55 +62,54 @@ const SUBJ_BLOB_PREFIX = new RegExp('^' + SUBJ_BLOB);
|
|
|
69
62
|
*/
|
|
70
63
|
function baseSubject(subject) {
|
|
71
64
|
let isReply = false;
|
|
72
|
-
|
|
73
65
|
// (1) decode encoded words, tabs and continuations become a space, runs of spaces one space
|
|
74
66
|
let text = decodeHeader(subject)
|
|
75
67
|
.replace(/\r?\n(?=[ \t])/g, '')
|
|
76
68
|
.replace(/[\t\r\n]/g, ' ')
|
|
77
69
|
.replace(/ {2,}/g, ' ');
|
|
78
|
-
|
|
79
70
|
for (;;) {
|
|
80
71
|
// (2) remove subj-trailer text until there is none
|
|
81
72
|
let end = text.length;
|
|
82
73
|
for (;;) {
|
|
83
74
|
if (text.charAt(end - 1) === ' ') {
|
|
84
75
|
end--;
|
|
85
|
-
}
|
|
76
|
+
}
|
|
77
|
+
else if (end >= 5 && text.substring(end - 5, end).toLowerCase() === '(fwd)') {
|
|
86
78
|
isReply = true;
|
|
87
79
|
end -= 5;
|
|
88
|
-
}
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
89
82
|
break;
|
|
90
83
|
}
|
|
91
84
|
}
|
|
92
85
|
text = text.substring(0, end);
|
|
93
|
-
|
|
94
86
|
// (3) remove subj-leader text, (4) remove a subj-blob prefix if a subj-base remains, (5) repeat
|
|
95
87
|
for (;;) {
|
|
96
88
|
let match;
|
|
97
89
|
if (text.charAt(0) === ' ') {
|
|
98
90
|
text = text.substr(1);
|
|
99
|
-
}
|
|
91
|
+
}
|
|
92
|
+
else if ((match = text.match(SUBJ_LEADER))) {
|
|
100
93
|
isReply = true;
|
|
101
94
|
text = text.substr(match[0].length);
|
|
102
|
-
}
|
|
95
|
+
}
|
|
96
|
+
else if ((match = text.match(SUBJ_BLOB_PREFIX)) && match[0].length < text.length) {
|
|
103
97
|
text = text.substr(match[0].length);
|
|
104
|
-
}
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
105
100
|
break;
|
|
106
101
|
}
|
|
107
102
|
}
|
|
108
|
-
|
|
109
103
|
// (6) unwrap "[fwd: ... ]" and start over from step (2)
|
|
110
104
|
if (/^\[fwd:/i.test(text) && /\]$/.test(text)) {
|
|
111
105
|
isReply = true;
|
|
112
106
|
text = text.slice(5, -1);
|
|
113
107
|
continue;
|
|
114
108
|
}
|
|
115
|
-
|
|
116
109
|
// (7) the remaining text is the base subject
|
|
117
110
|
return { subject: text, isReply };
|
|
118
111
|
}
|
|
119
112
|
}
|
|
120
|
-
|
|
121
113
|
/**
|
|
122
114
|
* Internal date and time of a message in milliseconds (RFC 5256 ARRIVAL)
|
|
123
115
|
*
|
|
@@ -128,7 +120,6 @@ function arrivalTime(message) {
|
|
|
128
120
|
const date = parseDateTime(message.internaldate);
|
|
129
121
|
return date ? toTimestamp(date) : 0;
|
|
130
122
|
}
|
|
131
|
-
|
|
132
123
|
/**
|
|
133
124
|
* Sent date of a message in milliseconds (RFC 5256 section 2.2): the Date header normalized to UTC.
|
|
134
125
|
* An invalid zone is read as UTC and an invalid time as 00:00:00, and if the header is missing or
|
|
@@ -142,12 +133,12 @@ function sentTime(message) {
|
|
|
142
133
|
if (!date) {
|
|
143
134
|
return arrivalTime(message);
|
|
144
135
|
}
|
|
136
|
+
// the parsers set minutes and seconds together with hours
|
|
145
137
|
if (date.hours === undefined || date.hours > 23 || date.minutes > 59 || date.seconds > 60) {
|
|
146
138
|
Object.assign(date, { hours: 0, minutes: 0, seconds: 0 });
|
|
147
139
|
}
|
|
148
140
|
return toTimestamp(date);
|
|
149
141
|
}
|
|
150
|
-
|
|
151
142
|
/**
|
|
152
143
|
* Returns the first address of an envelope address list, as [name, adl, mailbox, host]
|
|
153
144
|
*/
|
|
@@ -155,7 +146,6 @@ function firstAddress(message, header) {
|
|
|
155
146
|
const list = processAddress(getMessageData(message).tree.parsedHeader[header]);
|
|
156
147
|
return (list && list[0]) || null;
|
|
157
148
|
}
|
|
158
|
-
|
|
159
149
|
/**
|
|
160
150
|
* addr-mailbox of the first address in a header (RFC 5256 CC, FROM and TO), empty if there is none
|
|
161
151
|
*
|
|
@@ -167,7 +157,6 @@ function addressMailbox(message, header) {
|
|
|
167
157
|
const address = firstAddress(message, header);
|
|
168
158
|
return address && address[2] ? decodeHeader(address[2]) : '';
|
|
169
159
|
}
|
|
170
|
-
|
|
171
160
|
/**
|
|
172
161
|
* DISPLAY sort value of the first address in a header (RFC 5957 sections 3 and 4): the decoded
|
|
173
162
|
* addr-name, or addr-mailbox@addr-host, or addr-mailbox, or the empty string
|
|
@@ -184,7 +173,6 @@ function displayAddress(message, header) {
|
|
|
184
173
|
}
|
|
185
174
|
return decodeHeader(address[3] ? address[2] + '@' + address[3] : address[2]);
|
|
186
175
|
}
|
|
187
|
-
|
|
188
176
|
/**
|
|
189
177
|
* Lists the Message IDs in a header value, normalized so that quoting does not matter (RFC 5256
|
|
190
178
|
* section 3, REFERENCES): comments and white space are dropped and a quoted id-left is unquoted.
|
|
@@ -199,7 +187,6 @@ function parseMessageIds(value) {
|
|
|
199
187
|
let depth = 0;
|
|
200
188
|
let quoted = false;
|
|
201
189
|
let current = null;
|
|
202
|
-
|
|
203
190
|
for (let i = 0; i < str.length; i++) {
|
|
204
191
|
const char = str.charAt(i);
|
|
205
192
|
if (quoted) {
|
|
@@ -208,26 +195,35 @@ function parseMessageIds(value) {
|
|
|
208
195
|
current += str.charAt(i + 1);
|
|
209
196
|
}
|
|
210
197
|
i++;
|
|
211
|
-
}
|
|
198
|
+
}
|
|
199
|
+
else if (char === '"') {
|
|
212
200
|
quoted = false;
|
|
213
|
-
}
|
|
201
|
+
}
|
|
202
|
+
else if (current !== null) {
|
|
214
203
|
current += char;
|
|
215
204
|
}
|
|
216
|
-
}
|
|
205
|
+
}
|
|
206
|
+
else if (depth) {
|
|
217
207
|
if (char === '\\') {
|
|
218
208
|
i++;
|
|
219
|
-
}
|
|
209
|
+
}
|
|
210
|
+
else if (char === '(') {
|
|
220
211
|
depth++;
|
|
221
|
-
}
|
|
212
|
+
}
|
|
213
|
+
else if (char === ')') {
|
|
222
214
|
depth--;
|
|
223
215
|
}
|
|
224
|
-
}
|
|
216
|
+
}
|
|
217
|
+
else if (char === '"') {
|
|
225
218
|
quoted = true;
|
|
226
|
-
}
|
|
219
|
+
}
|
|
220
|
+
else if (char === '(') {
|
|
227
221
|
depth++;
|
|
228
|
-
}
|
|
222
|
+
}
|
|
223
|
+
else if (char === '<') {
|
|
229
224
|
current = '';
|
|
230
|
-
}
|
|
225
|
+
}
|
|
226
|
+
else if (char === '>') {
|
|
231
227
|
if (current !== null) {
|
|
232
228
|
const at = current.lastIndexOf('@');
|
|
233
229
|
if (at > 0 && at < current.length - 1) {
|
|
@@ -235,13 +231,13 @@ function parseMessageIds(value) {
|
|
|
235
231
|
}
|
|
236
232
|
}
|
|
237
233
|
current = null;
|
|
238
|
-
}
|
|
234
|
+
}
|
|
235
|
+
else if (current !== null && !/\s/.test(char)) {
|
|
239
236
|
current += char;
|
|
240
237
|
}
|
|
241
238
|
}
|
|
242
239
|
return ids;
|
|
243
240
|
}
|
|
244
|
-
|
|
245
241
|
/**
|
|
246
242
|
* Runs the search part of SORT and THREAD (RFC 5256 section 3): the charset is mandatory and the
|
|
247
243
|
* criteria follow it, both as in SEARCH. Sends a tagged BAD or NO response if the search fails.
|
|
@@ -273,19 +269,10 @@ function searchMessages(connection, parsed, data, attributes) {
|
|
|
273
269
|
}
|
|
274
270
|
const params = ['CHARSET', charset.value].concat(criteria);
|
|
275
271
|
return makeSearch(connection, connection.getSessionMessages(), params);
|
|
276
|
-
}
|
|
272
|
+
}
|
|
273
|
+
catch (E) {
|
|
277
274
|
sendSearchError(connection, parsed, data, E, command + ' FAILED');
|
|
278
275
|
return false;
|
|
279
276
|
}
|
|
280
277
|
}
|
|
281
|
-
|
|
282
|
-
module.exports = {
|
|
283
|
-
collationKey,
|
|
284
|
-
baseSubject,
|
|
285
|
-
arrivalTime,
|
|
286
|
-
sentTime,
|
|
287
|
-
addressMailbox,
|
|
288
|
-
displayAddress,
|
|
289
|
-
parseMessageIds,
|
|
290
|
-
searchMessages
|
|
291
|
-
};
|
|
278
|
+
export { collationKey, baseSubject, arrivalTime, sentTime, addressMailbox, displayAddress, parseMessageIds, searchMessages };
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { IMAPServer, Message } from './types.js';
|
|
2
|
+
/** A searched message with the values that threading looks at */
|
|
3
|
+
export interface ThreadEntry {
|
|
4
|
+
message: Message;
|
|
5
|
+
seq: number;
|
|
6
|
+
/** sent date, see sentTime() */
|
|
7
|
+
date: number;
|
|
8
|
+
/** the base subject as a binary string of its collation key, and if the subject marks a reply or forward */
|
|
9
|
+
subject: {
|
|
10
|
+
id: string;
|
|
11
|
+
isReply: boolean;
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
/** A node of a thread tree, a node without an entry is a dummy */
|
|
15
|
+
export interface ThreadNode {
|
|
16
|
+
entry: ThreadEntry | null;
|
|
17
|
+
parent: ThreadNode | null;
|
|
18
|
+
children: ThreadNode[];
|
|
19
|
+
}
|
|
20
|
+
/** A threading algorithm, returns the top level nodes */
|
|
21
|
+
export type ThreadAlgorithm = (entries: ThreadEntry[]) => ThreadNode[];
|
|
22
|
+
/**
|
|
23
|
+
* Adds the THREAD and UID THREAD commands, unless another algorithm plugin did already, and the
|
|
24
|
+
* THREAD=<algorithm> capability
|
|
25
|
+
*
|
|
26
|
+
* @param {Object} server IMAP server
|
|
27
|
+
* @param {String} algorithm "ORDEREDSUBJECT" or "REFERENCES"
|
|
28
|
+
*/
|
|
29
|
+
declare function addThreadAlgorithm(server: IMAPServer, algorithm: string): void;
|
|
30
|
+
export { addThreadAlgorithm };
|