@push.rocks/smartmta 11.1.0 → 13.0.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/changelog.md +42 -0
- package/dist_rust/{mailer-bin_linux_amd64 → mailer-bin_linux_amd64_musl} +0 -0
- package/dist_rust/mailer-bin_linux_amd64_musl.third-party-notices.json +3848 -0
- package/dist_rust/mailer-bin_linux_amd64_musl.third-party-notices.txt +48681 -0
- package/dist_rust/mailer-bin_linux_amd64_musl.tsrust-build.json +14 -0
- package/dist_rust/{mailer-bin_linux_arm64 → mailer-bin_linux_arm64_musl} +0 -0
- package/dist_rust/mailer-bin_linux_arm64_musl.third-party-notices.json +3848 -0
- package/dist_rust/mailer-bin_linux_arm64_musl.third-party-notices.txt +48681 -0
- package/dist_rust/mailer-bin_linux_arm64_musl.tsrust-build.json +14 -0
- package/dist_ts/00_commitinfo_data.js +1 -1
- package/dist_ts/index.d.ts +1 -0
- package/dist_ts/index.js +2 -1
- package/dist_ts/mail/routing/classes.unified.email.server.d.ts +15 -8
- package/dist_ts/mail/routing/classes.unified.email.server.js +71 -62
- package/dist_ts/plugins.d.ts +0 -2
- package/dist_ts/plugins.js +1 -4
- package/dist_ts/security/classes.rustsecuritybridge.d.ts +33 -12
- package/dist_ts/security/classes.rustsecuritybridge.js +10 -4
- package/dist_ts/security/index.d.ts +1 -1
- package/dist_ts/security/index.js +1 -1
- package/native-notices/crates/adler2-2.0.1/license-0bsd +12 -0
- package/native-notices/crates/adler2-2.0.1/license-apache +201 -0
- package/native-notices/crates/aes-0.8.4/license-apache +201 -0
- package/native-notices/crates/aes-0.8.4/license-mit +25 -0
- package/native-notices/crates/ahash-0.8.12/license-mit +25 -0
- package/native-notices/crates/aho-corasick-1.1.4/copying +3 -0
- package/native-notices/crates/aho-corasick-1.1.4/license-mit +21 -0
- package/native-notices/crates/aho-corasick-1.1.4/unlicense +24 -0
- package/native-notices/crates/anstream-1.0.0/license-apache +202 -0
- package/native-notices/crates/anstream-1.0.0/license-mit +19 -0
- package/native-notices/crates/anstyle-1.0.14/license-apache +202 -0
- package/native-notices/crates/anstyle-1.0.14/license-mit +19 -0
- package/native-notices/crates/anstyle-parse-1.0.0/license-apache +202 -0
- package/native-notices/crates/anstyle-parse-1.0.0/license-mit +19 -0
- package/native-notices/crates/anstyle-query-1.1.5/license-apache +202 -0
- package/native-notices/crates/anstyle-query-1.1.5/license-mit +19 -0
- package/native-notices/crates/async-trait-0.1.91/license-apache +176 -0
- package/native-notices/crates/async-trait-0.1.91/license-mit +23 -0
- package/native-notices/crates/base64-0.22.1/license-apache +201 -0
- package/native-notices/crates/base64-0.22.1/license-mit +21 -0
- package/native-notices/crates/bitflags-2.13.1/license-apache +201 -0
- package/native-notices/crates/bitflags-2.13.1/license-mit +25 -0
- package/native-notices/crates/block-buffer-0.10.4/license-apache +201 -0
- package/native-notices/crates/block-buffer-0.10.4/license-mit +25 -0
- package/native-notices/crates/bumpalo-3.20.3/license-apache +201 -0
- package/native-notices/crates/bumpalo-3.20.3/license-mit +25 -0
- package/native-notices/crates/bytes-1.12.1/license +25 -0
- package/native-notices/crates/bzip2-0.6.1/license-apache +201 -0
- package/native-notices/crates/bzip2-0.6.1/license-mit +25 -0
- package/native-notices/crates/cc-1.3.0/license-apache +201 -0
- package/native-notices/crates/cfg-if-1.0.4/license-apache +201 -0
- package/native-notices/crates/cfg-if-1.0.4/license-mit +25 -0
- package/native-notices/crates/charset-0.1.5/copyright +12 -0
- package/native-notices/crates/charset-0.1.5/license-apache +202 -0
- package/native-notices/crates/charset-0.1.5/license-mit +25 -0
- package/native-notices/crates/cipher-0.4.4/license-apache +201 -0
- package/native-notices/crates/cipher-0.4.4/license-mit +25 -0
- package/native-notices/crates/clap-4.6.3/license-apache +202 -0
- package/native-notices/crates/clap-4.6.3/license-mit +19 -0
- package/native-notices/crates/clap_builder-4.6.2/license-apache +202 -0
- package/native-notices/crates/clap_builder-4.6.2/license-mit +19 -0
- package/native-notices/crates/clap_derive-4.6.3/license-apache +202 -0
- package/native-notices/crates/clap_derive-4.6.3/license-mit +19 -0
- package/native-notices/crates/clap_lex-1.1.0/license-apache +202 -0
- package/native-notices/crates/clap_lex-1.1.0/license-mit +19 -0
- package/native-notices/crates/colorchoice-1.0.5/license-apache +202 -0
- package/native-notices/crates/colorchoice-1.0.5/license-mit +19 -0
- package/native-notices/crates/constant_time_eq-0.3.1/license-apache +176 -0
- package/native-notices/crates/constant_time_eq-0.3.1/license-cc0 +121 -0
- package/native-notices/crates/constant_time_eq-0.3.1/license-mit0 +14 -0
- package/native-notices/crates/cpufeatures-0.2.17/license-apache +201 -0
- package/native-notices/crates/cpufeatures-0.2.17/license-mit +25 -0
- package/native-notices/crates/crc-3.4.0/license-apache +201 -0
- package/native-notices/crates/crc-3.4.0/license-mit +21 -0
- package/native-notices/crates/crc-catalog-2.5.0/apache-2.0.txt +201 -0
- package/native-notices/crates/crc-catalog-2.5.0/mit.txt +21 -0
- package/native-notices/crates/crc32fast-1.5.0/license-apache +202 -0
- package/native-notices/crates/crc32fast-1.5.0/license-mit +21 -0
- package/native-notices/crates/critical-section-1.2.0/license-apache +201 -0
- package/native-notices/crates/critical-section-1.2.0/license-mit +25 -0
- package/native-notices/crates/crossbeam-channel-0.5.16/license-apache +201 -0
- package/native-notices/crates/crossbeam-channel-0.5.16/license-mit +27 -0
- package/native-notices/crates/crossbeam-epoch-0.9.20/license-apache +201 -0
- package/native-notices/crates/crossbeam-epoch-0.9.20/license-mit +27 -0
- package/native-notices/crates/crossbeam-utils-0.8.22/license-apache +201 -0
- package/native-notices/crates/crossbeam-utils-0.8.22/license-mit +27 -0
- package/native-notices/crates/crypto-common-0.1.7/license-apache +201 -0
- package/native-notices/crates/crypto-common-0.1.7/license-mit +25 -0
- package/native-notices/crates/dashmap-6.2.1/license +21 -0
- package/{notices/aws-lc-sys-0.43.0-fiat-license.txt → native-notices/crates/data-encoding-2.11.0/license} +2 -2
- package/native-notices/crates/deflate64-0.1.12/license +24 -0
- package/native-notices/crates/deranged-0.5.8/license-apache +202 -0
- package/native-notices/crates/deranged-0.5.8/license-mit +19 -0
- package/native-notices/crates/digest-0.10.7/license-apache +201 -0
- package/native-notices/crates/digest-0.10.7/license-mit +25 -0
- package/native-notices/crates/displaydoc-0.2.6/license-apache +201 -0
- package/native-notices/crates/displaydoc-0.2.6/license-mit +23 -0
- package/native-notices/crates/encoding_rs-0.8.35/copyright +17 -0
- package/native-notices/crates/encoding_rs-0.8.35/license-apache +202 -0
- package/native-notices/crates/encoding_rs-0.8.35/license-mit +25 -0
- package/native-notices/crates/encoding_rs-0.8.35/license-whatwg +26 -0
- package/native-notices/crates/enum-as-inner-0.6.1/copyright.txt +6 -0
- package/native-notices/crates/enum-as-inner-0.6.1/license-apache +202 -0
- package/native-notices/crates/enum-as-inner-0.6.1/license-mit +20 -0
- package/native-notices/crates/equivalent-1.0.2/license-apache +201 -0
- package/native-notices/crates/equivalent-1.0.2/license-mit +25 -0
- package/native-notices/crates/errno-0.3.14/license-apache +201 -0
- package/native-notices/crates/errno-0.3.14/license-mit +25 -0
- package/native-notices/crates/find-msvc-tools-0.1.9/license-apache +201 -0
- package/native-notices/crates/find-msvc-tools-0.1.9/license-mit +25 -0
- package/native-notices/crates/flate2-1.1.9/license-apache +201 -0
- package/native-notices/crates/flate2-1.1.9/license-mit +25 -0
- package/native-notices/crates/form_urlencoded-1.2.2/license-apache +201 -0
- package/native-notices/crates/form_urlencoded-1.2.2/license-mit +25 -0
- package/native-notices/crates/futures-channel-0.3.33/license-apache +202 -0
- package/native-notices/crates/futures-channel-0.3.33/license-mit +26 -0
- package/native-notices/crates/futures-core-0.3.33/license-apache +202 -0
- package/native-notices/crates/futures-core-0.3.33/license-mit +26 -0
- package/native-notices/crates/futures-io-0.3.33/license-apache +202 -0
- package/native-notices/crates/futures-io-0.3.33/license-mit +26 -0
- package/native-notices/crates/futures-task-0.3.33/license-apache +202 -0
- package/native-notices/crates/futures-task-0.3.33/license-mit +26 -0
- package/native-notices/crates/futures-util-0.3.33/license-apache +202 -0
- package/native-notices/crates/futures-util-0.3.33/license-mit +26 -0
- package/native-notices/crates/generic-array-0.14.7/license +21 -0
- package/native-notices/crates/gethostname-1.1.0/license +201 -0
- package/native-notices/crates/getrandom-0.2.17/license-apache +201 -0
- package/native-notices/crates/getrandom-0.2.17/license-mit +26 -0
- package/native-notices/crates/getrandom-0.3.4/license-apache +201 -0
- package/native-notices/crates/getrandom-0.3.4/license-mit +26 -0
- package/native-notices/crates/getrandom-0.4.3/license-apache +201 -0
- package/native-notices/crates/getrandom-0.4.3/license-mit +26 -0
- package/native-notices/crates/hashbrown-0.14.5/license-apache +201 -0
- package/native-notices/crates/hashbrown-0.14.5/license-mit +25 -0
- package/native-notices/crates/hashbrown-0.16.1/license-apache +201 -0
- package/native-notices/crates/hashbrown-0.16.1/license-mit +25 -0
- package/native-notices/crates/hashbrown-0.17.1/license-apache +201 -0
- package/native-notices/crates/hashbrown-0.17.1/license-mit +25 -0
- package/native-notices/crates/hashify-0.2.9/apache-2.0.txt +201 -0
- package/native-notices/crates/hashify-0.2.9/mit.txt +23 -0
- package/native-notices/crates/heck-0.5.0/license-apache +201 -0
- package/native-notices/crates/heck-0.5.0/license-mit +25 -0
- package/native-notices/crates/hickory-proto-0.25.2/license-apache +202 -0
- package/native-notices/crates/hickory-proto-0.25.2/license-mit +20 -0
- package/native-notices/crates/hickory-proto-0.26.0-alpha.1/license-apache +202 -0
- package/native-notices/crates/hickory-proto-0.26.0-alpha.1/license-mit +20 -0
- package/native-notices/crates/hickory-resolver-0.25.2/license-apache +202 -0
- package/native-notices/crates/hickory-resolver-0.25.2/license-mit +20 -0
- package/native-notices/crates/hickory-resolver-0.26.0-alpha.1/license-apache +202 -0
- package/native-notices/crates/hickory-resolver-0.26.0-alpha.1/license-mit +20 -0
- package/native-notices/crates/hmac-0.12.1/license-apache +201 -0
- package/native-notices/crates/hmac-0.12.1/license-mit +25 -0
- package/native-notices/crates/icu_collections-2.2.0/license +46 -0
- package/native-notices/crates/icu_locale_core-2.2.0/license +46 -0
- package/native-notices/crates/icu_normalizer-2.2.0/license +46 -0
- package/native-notices/crates/icu_normalizer_data-2.2.0/license +46 -0
- package/native-notices/crates/icu_properties-2.2.0/license +46 -0
- package/native-notices/crates/icu_properties_data-2.2.0/license +46 -0
- package/native-notices/crates/icu_provider-2.2.0/license +46 -0
- package/native-notices/crates/idna-1.1.0/license-apache +201 -0
- package/native-notices/crates/idna-1.1.0/license-mit +25 -0
- package/native-notices/crates/idna_adapter-1.2.2/license-apache +201 -0
- package/native-notices/crates/idna_adapter-1.2.2/license-mit +25 -0
- package/native-notices/crates/indexmap-2.14.0/license-apache +201 -0
- package/native-notices/crates/indexmap-2.14.0/license-mit +25 -0
- package/native-notices/crates/inout-0.1.4/license-apache +201 -0
- package/native-notices/crates/inout-0.1.4/license-mit +26 -0
- package/native-notices/crates/ipnet-2.12.0/license-apache +201 -0
- package/native-notices/crates/ipnet-2.12.0/license-mit +7 -0
- package/native-notices/crates/is_terminal_polyfill-1.70.2/license-apache +202 -0
- package/native-notices/crates/is_terminal_polyfill-1.70.2/license-mit +19 -0
- package/native-notices/crates/itoa-1.0.18/license-apache +176 -0
- package/native-notices/crates/itoa-1.0.18/license-mit +23 -0
- package/native-notices/crates/jobserver-0.1.35/license-apache +201 -0
- package/native-notices/crates/jobserver-0.1.35/license-mit +25 -0
- package/native-notices/crates/libbz2-rs-sys-0.2.5/license +48 -0
- package/native-notices/crates/libc-0.2.186/license-apache +176 -0
- package/native-notices/crates/libc-0.2.186/license-mit +25 -0
- package/native-notices/crates/linux-raw-sys-0.12.1/copyright +29 -0
- package/native-notices/crates/linux-raw-sys-0.12.1/license-apache +201 -0
- package/native-notices/crates/linux-raw-sys-0.12.1/license-apache-2.0_with_llvm-exception +220 -0
- package/native-notices/crates/linux-raw-sys-0.12.1/license-mit +23 -0
- package/native-notices/crates/litemap-0.8.2/license +46 -0
- package/native-notices/crates/lock_api-0.4.14/license-apache +201 -0
- package/native-notices/crates/lock_api-0.4.14/license-mit +25 -0
- package/native-notices/crates/log-0.4.33/license-apache +201 -0
- package/native-notices/crates/log-0.4.33/license-mit +25 -0
- package/native-notices/crates/lzma-rust2-0.13.0/license +201 -0
- package/native-notices/crates/mail-auth-0.7.5/apache-2.0.txt +201 -0
- package/native-notices/crates/mail-auth-0.7.5/mit.txt +23 -0
- package/native-notices/crates/mail-builder-0.4.4/apache-2.0.txt +201 -0
- package/native-notices/crates/mail-builder-0.4.4/mit.txt +23 -0
- package/native-notices/crates/mail-parser-0.11.5/apache-2.0.txt +201 -0
- package/native-notices/crates/mail-parser-0.11.5/mit.txt +23 -0
- package/native-notices/crates/mailparse-0.16.1/license +13 -0
- package/native-notices/crates/memchr-2.8.3/copying +3 -0
- package/native-notices/crates/memchr-2.8.3/license-mit +21 -0
- package/native-notices/crates/memchr-2.8.3/unlicense +24 -0
- package/native-notices/crates/miniz_oxide-0.8.9/license +25 -0
- package/native-notices/crates/miniz_oxide-0.8.9/license-apache.md +177 -0
- package/native-notices/crates/miniz_oxide-0.8.9/license-mit.md +24 -0
- package/native-notices/crates/miniz_oxide-0.8.9/license-zlib.md +14 -0
- package/native-notices/crates/mio-1.2.2/license +19 -0
- package/native-notices/crates/moka-0.12.15/license-apache +201 -0
- package/native-notices/crates/moka-0.12.15/license-mit +21 -0
- package/native-notices/crates/num-conv-0.2.2/license-apache +177 -0
- package/native-notices/crates/num-conv-0.2.2/license-mit +19 -0
- package/native-notices/crates/once_cell-1.21.4/license-apache +201 -0
- package/native-notices/crates/once_cell-1.21.4/license-mit +23 -0
- package/native-notices/crates/parking_lot-0.12.5/license-apache +201 -0
- package/native-notices/crates/parking_lot-0.12.5/license-mit +25 -0
- package/native-notices/crates/parking_lot_core-0.9.12/license-apache +201 -0
- package/native-notices/crates/parking_lot_core-0.9.12/license-mit +25 -0
- package/native-notices/crates/pbkdf2-0.12.2/license-apache +201 -0
- package/native-notices/crates/pbkdf2-0.12.2/license-mit +26 -0
- package/native-notices/crates/percent-encoding-2.3.2/license-apache +201 -0
- package/native-notices/crates/percent-encoding-2.3.2/license-mit +25 -0
- package/native-notices/crates/pin-project-lite-0.2.17/license-apache +177 -0
- package/native-notices/crates/pin-project-lite-0.2.17/license-mit +23 -0
- package/native-notices/crates/pkg-config-0.3.33/license-apache +201 -0
- package/native-notices/crates/pkg-config-0.3.33/license-mit +25 -0
- package/native-notices/crates/portable-atomic-1.14.0/license-apache +177 -0
- package/native-notices/crates/portable-atomic-1.14.0/license-mit +23 -0
- package/native-notices/crates/potential_utf-0.1.5/license +46 -0
- package/native-notices/crates/powerfmt-0.2.0/license-apache +202 -0
- package/native-notices/crates/powerfmt-0.2.0/license-mit +19 -0
- package/native-notices/crates/ppmd-rust-1.4.0/license-cc0.md +119 -0
- package/native-notices/crates/ppmd-rust-1.4.0/license-mit-0.md +16 -0
- package/native-notices/crates/ppv-lite86-0.2.21/license-apache +201 -0
- package/native-notices/crates/ppv-lite86-0.2.21/license-mit +25 -0
- package/native-notices/crates/proc-macro2-1.0.107/license-apache +176 -0
- package/native-notices/crates/proc-macro2-1.0.107/license-mit +23 -0
- package/native-notices/crates/psl-2.1.219/license +21 -0
- package/native-notices/crates/psl-types-2.0.11/license +21 -0
- package/native-notices/crates/psl-types-2.0.11/license-apache +201 -0
- package/native-notices/crates/quick-xml-0.38.4/license-mit.md +23 -0
- package/native-notices/crates/quick_cache-0.6.24/licence.md +21 -0
- package/native-notices/crates/quote-1.0.47/license-apache +176 -0
- package/native-notices/crates/quote-1.0.47/license-mit +23 -0
- package/native-notices/crates/quoted_printable-0.5.2/license +13 -0
- package/native-notices/crates/rand-0.9.5/copyright +12 -0
- package/native-notices/crates/rand-0.9.5/license-apache +176 -0
- package/native-notices/crates/rand-0.9.5/license-mit +26 -0
- package/native-notices/crates/rand_chacha-0.9.0/copyright +12 -0
- package/native-notices/crates/rand_chacha-0.9.0/license-apache +176 -0
- package/native-notices/crates/rand_chacha-0.9.0/license-mit +26 -0
- package/native-notices/crates/rand_core-0.9.5/copyright +12 -0
- package/native-notices/crates/rand_core-0.9.5/license-apache +187 -0
- package/native-notices/crates/rand_core-0.9.5/license-mit +26 -0
- package/native-notices/crates/regex-1.13.1/license-apache +201 -0
- package/native-notices/crates/regex-1.13.1/license-mit +25 -0
- package/native-notices/crates/regex-automata-0.4.16/license-apache +201 -0
- package/native-notices/crates/regex-automata-0.4.16/license-mit +25 -0
- package/native-notices/crates/regex-syntax-0.8.11/license-apache +201 -0
- package/native-notices/crates/regex-syntax-0.8.11/license-mit +25 -0
- package/native-notices/crates/resolv-conf-0.7.6/license-apache +202 -0
- package/native-notices/crates/resolv-conf-0.7.6/license-mit +19 -0
- package/native-notices/crates/ring-0.17.14/extra/ring-0.17.14-once-cell-license-apache.txt +201 -0
- package/native-notices/crates/rustix-1.1.4/copyright +29 -0
- package/native-notices/crates/rustix-1.1.4/license-apache +201 -0
- package/native-notices/crates/rustix-1.1.4/license-apache-2.0_with_llvm-exception +220 -0
- package/native-notices/crates/rustix-1.1.4/license-mit +23 -0
- package/native-notices/crates/rustls-0.23.42/license-apache +201 -0
- package/native-notices/crates/rustls-0.23.42/license-isc +15 -0
- package/native-notices/crates/rustls-0.23.42/license-mit +25 -0
- package/native-notices/crates/rustls-pemfile-2.2.0/license +10 -0
- package/native-notices/crates/rustls-pemfile-2.2.0/license-apache +201 -0
- package/native-notices/crates/rustls-pemfile-2.2.0/license-isc +15 -0
- package/native-notices/crates/rustls-pemfile-2.2.0/license-mit +25 -0
- package/native-notices/crates/rustls-pki-types-1.15.0/license-apache +201 -0
- package/native-notices/crates/rustls-pki-types-1.15.0/license-mit +25 -0
- package/native-notices/crates/rustls-webpki-0.103.13/license +19 -0
- package/native-notices/crates/scopeguard-1.2.0/license-apache +201 -0
- package/native-notices/crates/scopeguard-1.2.0/license-mit +25 -0
- package/native-notices/crates/serde-1.0.229/license-apache +176 -0
- package/native-notices/crates/serde-1.0.229/license-mit +23 -0
- package/native-notices/crates/serde_core-1.0.229/license-apache +176 -0
- package/native-notices/crates/serde_core-1.0.229/license-mit +23 -0
- package/native-notices/crates/serde_derive-1.0.229/license-apache +176 -0
- package/native-notices/crates/serde_derive-1.0.229/license-mit +23 -0
- package/native-notices/crates/serde_json-1.0.151/license-apache +176 -0
- package/native-notices/crates/serde_json-1.0.151/license-mit +23 -0
- package/native-notices/crates/sha1-0.10.7/license-apache +201 -0
- package/native-notices/crates/sha1-0.10.7/license-mit +27 -0
- package/native-notices/crates/sha2-0.10.9/license-apache +201 -0
- package/native-notices/crates/sha2-0.10.9/license-mit +27 -0
- package/native-notices/crates/shlex-2.0.1/license-apache +13 -0
- package/native-notices/crates/shlex-2.0.1/license-mit +21 -0
- package/native-notices/crates/signal-hook-registry-1.4.8/license-apache +201 -0
- package/native-notices/crates/signal-hook-registry-1.4.8/license-mit +25 -0
- package/native-notices/crates/simd-adler32-0.3.10/license.md +21 -0
- package/native-notices/crates/slab-0.4.12/license +25 -0
- package/native-notices/crates/smallvec-1.15.2/license-apache +201 -0
- package/native-notices/crates/smallvec-1.15.2/license-mit +25 -0
- package/native-notices/crates/socket2-0.6.5/license-apache +201 -0
- package/native-notices/crates/socket2-0.6.5/license-mit +25 -0
- package/native-notices/crates/stable_deref_trait-1.2.1/license-apache +201 -0
- package/native-notices/crates/stable_deref_trait-1.2.1/license-mit +25 -0
- package/native-notices/crates/strsim-0.11.1/license +23 -0
- package/native-notices/crates/subtle-2.6.1/license +29 -0
- package/native-notices/crates/syn-2.0.119/license-apache +176 -0
- package/native-notices/crates/syn-2.0.119/license-mit +23 -0
- package/native-notices/crates/syn-3.0.2/license-apache +176 -0
- package/native-notices/crates/syn-3.0.2/license-mit +23 -0
- package/native-notices/crates/synstructure-0.13.2/license +7 -0
- package/native-notices/crates/tagptr-0.2.0/license-apache +13 -0
- package/native-notices/crates/tagptr-0.2.0/license-mit +21 -0
- package/native-notices/crates/thiserror-2.0.19/license-apache +176 -0
- package/native-notices/crates/thiserror-2.0.19/license-mit +23 -0
- package/native-notices/crates/thiserror-impl-2.0.19/license-apache +176 -0
- package/native-notices/crates/thiserror-impl-2.0.19/license-mit +23 -0
- package/native-notices/crates/tikv-jemalloc-sys-0.7.1+5.3.1-0-g81034ce1f1373e37dc865038e1bc8eeecf559ce8/license-apache +201 -0
- package/native-notices/crates/tikv-jemalloc-sys-0.7.1+5.3.1-0-g81034ce1f1373e37dc865038e1bc8eeecf559ce8/license-mit +25 -0
- package/native-notices/crates/tikv-jemallocator-0.7.0/license-apache +201 -0
- package/native-notices/crates/tikv-jemallocator-0.7.0/license-mit +25 -0
- package/native-notices/crates/time-0.3.54/license-apache +177 -0
- package/native-notices/crates/time-0.3.54/license-mit +19 -0
- package/native-notices/crates/time-core-0.1.9/license-apache +177 -0
- package/native-notices/crates/time-core-0.1.9/license-mit +19 -0
- package/native-notices/crates/tinystr-0.8.3/license +46 -0
- package/native-notices/crates/tinyvec-1.12.0/license-apache.md +202 -0
- package/native-notices/crates/tinyvec-1.12.0/license-mit.md +5 -0
- package/native-notices/crates/tinyvec-1.12.0/license-zlib.md +11 -0
- package/native-notices/crates/tinyvec_macros-0.1.1/license-apache.md +202 -0
- package/native-notices/crates/tinyvec_macros-0.1.1/license-mit.md +21 -0
- package/native-notices/crates/tinyvec_macros-0.1.1/license-zlib.md +20 -0
- package/native-notices/crates/tokio-1.53.1/license +21 -0
- package/native-notices/crates/tokio-macros-2.7.1/license +22 -0
- package/native-notices/crates/tokio-rustls-0.26.4/license-apache +201 -0
- package/native-notices/crates/tokio-rustls-0.26.4/license-mit +25 -0
- package/native-notices/crates/tracing-0.1.44/license +25 -0
- package/native-notices/crates/tracing-attributes-0.1.31/license +25 -0
- package/native-notices/crates/tracing-core-0.1.36/license +25 -0
- package/native-notices/crates/typenum-1.20.1/license +1 -0
- package/native-notices/crates/typenum-1.20.1/license-apache +201 -0
- package/native-notices/crates/typenum-1.20.1/license-mit +21 -0
- package/native-notices/crates/unicode-ident-1.0.24/license-apache +176 -0
- package/native-notices/crates/unicode-ident-1.0.24/license-mit +23 -0
- package/native-notices/crates/unicode-ident-1.0.24/license-unicode +39 -0
- package/native-notices/crates/untrusted-0.9.0/license.txt +13 -0
- package/native-notices/crates/url-2.5.8/license-apache +201 -0
- package/native-notices/crates/url-2.5.8/license-mit +25 -0
- package/native-notices/crates/utf8_iter-1.0.4/copyright +42 -0
- package/native-notices/crates/utf8_iter-1.0.4/license-apache +202 -0
- package/native-notices/crates/utf8_iter-1.0.4/license-mit +25 -0
- package/native-notices/crates/utf8parse-0.2.2/license-apache +176 -0
- package/native-notices/crates/utf8parse-0.2.2/license-mit +25 -0
- package/native-notices/crates/uuid-1.24.0/license-apache +201 -0
- package/native-notices/crates/uuid-1.24.0/license-mit +26 -0
- package/native-notices/crates/version_check-0.9.5/license-apache +201 -0
- package/native-notices/crates/version_check-0.9.5/license-mit +19 -0
- package/native-notices/crates/webpki-roots-0.26.11/license +61 -0
- package/native-notices/crates/webpki-roots-1.0.9/license +61 -0
- package/native-notices/crates/writeable-0.6.3/license +46 -0
- package/native-notices/crates/yoke-0.8.3/license +46 -0
- package/native-notices/crates/yoke-derive-0.8.2/license +46 -0
- package/native-notices/crates/zerocopy-0.8.55/license-apache +202 -0
- package/native-notices/crates/zerocopy-0.8.55/license-bsd +24 -0
- package/native-notices/crates/zerofrom-0.1.8/license +46 -0
- package/native-notices/crates/zerofrom-derive-0.1.7/license +46 -0
- package/native-notices/crates/zeroize-1.9.0/license-apache +202 -0
- package/native-notices/crates/zeroize-1.9.0/license-mit +25 -0
- package/native-notices/crates/zeroize_derive-1.5.0/license-apache +202 -0
- package/native-notices/crates/zeroize_derive-1.5.0/license-mit +25 -0
- package/native-notices/crates/zerotrie-0.2.4/license +46 -0
- package/native-notices/crates/zerovec-0.11.6/license +46 -0
- package/native-notices/crates/zerovec-derive-0.11.3/license +46 -0
- package/native-notices/crates/zip-6.0.0/license +24 -0
- package/native-notices/crates/zlib-rs-0.6.6/license +19 -0
- package/native-notices/crates/zmij-1.0.23/license-mit +23 -0
- package/native-notices/crates/zopfli-0.8.3/copying +201 -0
- package/native-notices/crates/zstd-0.13.3/license +8 -0
- package/native-notices/crates/zstd-safe-7.2.4/license +1 -0
- package/native-notices/crates/zstd-safe-7.2.4/license.apache-2.0 +177 -0
- package/native-notices/crates/zstd-safe-7.2.4/license.mit +8 -0
- package/native-notices/crates/zstd-sys-2.0.16+zstd.1.5.7/license +1 -0
- package/native-notices/crates/zstd-sys-2.0.16+zstd.1.5.7/license.apache-2.0 +177 -0
- package/native-notices/crates/zstd-sys-2.0.16+zstd.1.5.7/license.bsd-3-clause +32 -0
- package/native-notices/crates/zstd-sys-2.0.16+zstd.1.5.7/license.mit +8 -0
- package/native-notices/manifest.json +4829 -0
- package/native-notices/native/ring-0.17.14/boringssl-ring-0.17.14/license-boringssl +272 -0
- package/native-notices/native/ring-0.17.14/boringssl-ring-0.17.14/license-other-bits +13 -0
- package/native-notices/native/ring-0.17.14/fiat-crypto-ring-0.17.14/license-boringssl +272 -0
- package/native-notices/native/zstd-sys-2.0.16+zstd.1.5.7/zstd-1.5.7/zstd-copying +339 -0
- package/native-notices/readme.md +49 -0
- package/native-notices/runtime/libunwind-22.1.2/license.txt +311 -0
- package/native-notices/runtime/musl-1.2.5/copyright +193 -0
- package/native-notices/rust/crates/addr2line-0.25.1/license-apache +201 -0
- package/native-notices/rust/crates/addr2line-0.25.1/license-mit +25 -0
- package/native-notices/rust/crates/adler2-2.0.1/license-0bsd +12 -0
- package/native-notices/rust/crates/adler2-2.0.1/license-apache +201 -0
- package/native-notices/rust/crates/adler2-2.0.1/license-mit +23 -0
- package/native-notices/rust/crates/memchr-2.7.6/copying +3 -0
- package/native-notices/rust/crates/memchr-2.7.6/license-mit +21 -0
- package/native-notices/rust/crates/memchr-2.7.6/unlicense +24 -0
- package/native-notices/rust/crates/miniz_oxide-0.8.9/license +25 -0
- package/native-notices/rust/crates/miniz_oxide-0.8.9/license-apache.md +177 -0
- package/native-notices/rust/crates/miniz_oxide-0.8.9/license-mit.md +24 -0
- package/native-notices/rust/crates/miniz_oxide-0.8.9/license-zlib.md +14 -0
- package/native-notices/rust/crates/object-0.37.3/license-apache +201 -0
- package/native-notices/rust/crates/object-0.37.3/license-mit +25 -0
- package/native-notices/rust/licenses/apache-2.0.txt +73 -0
- package/native-notices/rust/licenses/bsd-2-clause.txt +9 -0
- package/native-notices/rust/licenses/cc-by-sa-4.0.txt +427 -0
- package/native-notices/rust/licenses/gcc-exception-3.1.txt +30 -0
- package/native-notices/rust/licenses/gpl-2.0-only.txt +133 -0
- package/native-notices/rust/licenses/gpl-3.0-or-later.txt +202 -0
- package/native-notices/rust/licenses/isc.txt +7 -0
- package/native-notices/rust/licenses/llvm-exception.txt +15 -0
- package/native-notices/rust/licenses/mit.txt +9 -0
- package/native-notices/rust/licenses/ncsa.txt +29 -0
- package/native-notices/rust/licenses/ofl-1.1.txt +43 -0
- package/native-notices/rust/licenses/unicode-3.0.txt +39 -0
- package/package.json +7 -10
- package/readme.md +29 -27
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/index.ts +1 -0
- package/ts/mail/routing/classes.unified.email.server.ts +73 -62
- package/ts/plugins.ts +0 -7
- package/ts/security/classes.rustsecuritybridge.ts +36 -7
- package/ts/security/index.ts +4 -0
- package/dist_rust/mailer-bin_linux_amd64.tsrust-build.json +0 -14
- package/dist_rust/mailer-bin_linux_arm64.tsrust-build.json +0 -14
- package/notices/cargo-dependencies.html +0 -4649
- package/notices/encoding-rs-copyright.txt +0 -61
- package/notices/glibc-copying-lesser.txt +0 -502
- package/notices/glibc-licenses.txt +0 -412
- package/notices/inventory.json +0 -1226
- package/notices/source-attributions.txt +0 -294
- package/third-party-notices.md +0 -176
- /package/{notices/rustversion-1.0.23-license-mit.txt → native-notices/crates/adler2-2.0.1/license-mit} +0 -0
- /package/{notices/ring-0.17.14-once-cell-license-apache.txt → native-notices/crates/ahash-0.8.12/license-apache} +0 -0
- /package/{notices/wasm-bindgen-license-mit.txt → native-notices/crates/cc-1.3.0/license-mit} +0 -0
- /package/{notices/crossbeam-channel-third-party.txt → native-notices/crates/crossbeam-channel-0.5.16/license-third-party} +0 -0
- /package/{notices/moka-notice.txt → native-notices/crates/moka-0.12.15/notice} +0 -0
- /package/{notices → native-notices/crates/ring-0.17.14/extra}/ring-0.17.14-once-cell-license-mit.txt +0 -0
- /package/{notices/ring-0.17.14-license.txt → native-notices/crates/ring-0.17.14/license} +0 -0
- /package/{notices/ring-0.17.14-license-boringssl.txt → native-notices/crates/ring-0.17.14/license-boringssl} +0 -0
- /package/{notices/ring-0.17.14-license-other-bits.txt → native-notices/crates/ring-0.17.14/license-other-bits} +0 -0
- /package/{notices/zerocopy-derive-0.8.55-license-mit.txt → native-notices/crates/zerocopy-0.8.55/license-mit} +0 -0
- /package/{notices/ring-0.17.14-fiat-license.txt → native-notices/native/ring-0.17.14/fiat-crypto-ring-0.17.14/third_party-fiat-license} +0 -0
- /package/{notices/jemalloc-5.3.1-copying.txt → native-notices/native/tikv-jemalloc-sys-0.7.1+5.3.1-0-g81034ce1f1373e37dc865038e1bc8eeecf559ce8/jemalloc-5.3.1/jemalloc-copying} +0 -0
- /package/{notices/zstd-license.txt → native-notices/native/zstd-sys-2.0.16+zstd.1.5.7/zstd-1.5.7/zstd-license} +0 -0
- /package/{notices/libgcc-gpl-3.0.txt → native-notices/runtime/gcc/gpl-3.0.txt} +0 -0
- /package/{notices/libgcc-runtime-exception.txt → native-notices/runtime/gcc/runtime-library-exception-3.1.txt} +0 -0
- /package/{notices → native-notices/rust}/compiler-builtins-license.txt +0 -0
- /package/{notices/rust-standard-library.html → native-notices/rust/copyright-library.html} +0 -0
|
@@ -1187,6 +1187,9 @@ export class UnifiedEmailServer extends EventEmitter {
|
|
|
1187
1187
|
envelopeFrom: envelope.from,
|
|
1188
1188
|
envelopeTo: [...envelope.to],
|
|
1189
1189
|
rawMessageBase64: rawMessage.toString('base64'),
|
|
1190
|
+
// Server and queue raw sends are always DKIM-signed; only a direct
|
|
1191
|
+
// bridge caller can request an unsigned relay.
|
|
1192
|
+
signing: 'dkim',
|
|
1190
1193
|
dkim,
|
|
1191
1194
|
}),
|
|
1192
1195
|
});
|
|
@@ -2475,22 +2478,37 @@ export class UnifiedEmailServer extends EventEmitter {
|
|
|
2475
2478
|
}
|
|
2476
2479
|
|
|
2477
2480
|
/**
|
|
2478
|
-
*
|
|
2479
|
-
*
|
|
2480
|
-
*
|
|
2481
|
-
*
|
|
2482
|
-
*
|
|
2483
|
-
*
|
|
2481
|
+
* The mailbox addresses of every From header field, one list per field in
|
|
2482
|
+
* message order. Groups are flattened into their member mailboxes, and a
|
|
2483
|
+
* repeated From field is kept rather than collapsed to one occurrence,
|
|
2484
|
+
* because scope enforcement and Email.from must see every mailbox a
|
|
2485
|
+
* recipient's client might display. A field that yields no mailbox, such
|
|
2486
|
+
* as an empty group or an encoded word in place of an address, gives an
|
|
2487
|
+
* empty list.
|
|
2484
2488
|
*/
|
|
2485
|
-
private
|
|
2489
|
+
private parseFromHeaderFields(
|
|
2490
|
+
headers: ReadonlyArray<{ key: string; value: string }>,
|
|
2491
|
+
): string[][] {
|
|
2492
|
+
return headers
|
|
2493
|
+
.filter((header) => header.key === 'from')
|
|
2494
|
+
.map((header) =>
|
|
2495
|
+
plugins.smartmail.parseAddressList(header.value).map((mailbox) => mailbox.email),
|
|
2496
|
+
);
|
|
2497
|
+
}
|
|
2498
|
+
|
|
2499
|
+
/**
|
|
2500
|
+
* The From header fields of the header section of a raw message, see
|
|
2501
|
+
* parseFromHeaderFields. Parsing stops at the first CRLFCRLF header
|
|
2502
|
+
* boundary when present (the Rust receiver normalizes line endings to
|
|
2503
|
+
* CRLF); a bodyless message without one is parsed whole.
|
|
2504
|
+
*/
|
|
2505
|
+
private async parseHeaderFromFields(rawMessage: Buffer): Promise<string[][]> {
|
|
2486
2506
|
const headerBoundary = rawMessage.indexOf('\r\n\r\n');
|
|
2487
2507
|
const headerSection = headerBoundary === -1
|
|
2488
2508
|
? rawMessage
|
|
2489
2509
|
: rawMessage.subarray(0, headerBoundary + 4);
|
|
2490
|
-
const parsed = await plugins.
|
|
2491
|
-
return (
|
|
2492
|
-
.map((mailbox: any) => mailbox?.address)
|
|
2493
|
-
.filter(Boolean) as string[];
|
|
2510
|
+
const parsed = await plugins.smartmail.parseMailMessage(headerSection);
|
|
2511
|
+
return this.parseFromHeaderFields(parsed.headers);
|
|
2494
2512
|
}
|
|
2495
2513
|
|
|
2496
2514
|
/**
|
|
@@ -2516,28 +2534,36 @@ export class UnifiedEmailServer extends EventEmitter {
|
|
|
2516
2534
|
if (resolved.kind === 'unrestricted') return null;
|
|
2517
2535
|
if (resolved.kind === 'refused') return UnifiedEmailServer.authScopeUnavailableDecision();
|
|
2518
2536
|
const scope = resolved.scope;
|
|
2519
|
-
|
|
2537
|
+
const notPermitted: ISmtpDecision = {
|
|
2538
|
+
accepted: false,
|
|
2539
|
+
smtpCode: 553,
|
|
2540
|
+
smtpMessage: `5.7.1 Header From address not permitted for authenticated user ${username}`,
|
|
2541
|
+
};
|
|
2542
|
+
let fromFields: string[][];
|
|
2520
2543
|
try {
|
|
2521
|
-
|
|
2544
|
+
fromFields = await this.parseHeaderFromFields(rawMessage);
|
|
2522
2545
|
} catch {
|
|
2523
|
-
|
|
2546
|
+
// A header section that cannot be read cannot be shown to be in scope
|
|
2547
|
+
return notPermitted;
|
|
2524
2548
|
}
|
|
2525
|
-
|
|
2526
|
-
|
|
2527
|
-
//
|
|
2549
|
+
let fromMailboxes: string[];
|
|
2550
|
+
if (fromFields.length === 0) {
|
|
2551
|
+
// A message without a From field is accepted deliberately: Email.from
|
|
2552
|
+
// falls back to the envelope MAIL FROM, which resolveRecipientPolicy has
|
|
2553
|
+
// already scope-checked, and no other sender identity is displayed.
|
|
2528
2554
|
fromMailboxes = [email.getFromAddress()];
|
|
2555
|
+
} else if (fromFields.some((field) => field.length === 0)) {
|
|
2556
|
+
// A From field without a mailbox, such as an empty group or an encoded
|
|
2557
|
+
// word in place of the address, still displays an identity this check
|
|
2558
|
+
// cannot verify.
|
|
2559
|
+
return notPermitted;
|
|
2560
|
+
} else {
|
|
2561
|
+
fromMailboxes = fromFields.flat();
|
|
2529
2562
|
}
|
|
2530
2563
|
const outOfScope = fromMailboxes.find(
|
|
2531
2564
|
(mailbox) => !this.matchesScopePatterns(mailbox, scope.senders),
|
|
2532
2565
|
);
|
|
2533
|
-
|
|
2534
|
-
return null;
|
|
2535
|
-
}
|
|
2536
|
-
return {
|
|
2537
|
-
accepted: false,
|
|
2538
|
-
smtpCode: 553,
|
|
2539
|
-
smtpMessage: `5.7.1 Header From address not permitted for authenticated user ${username}`,
|
|
2540
|
-
};
|
|
2566
|
+
return outOfScope === undefined ? null : notPermitted;
|
|
2541
2567
|
}
|
|
2542
2568
|
|
|
2543
2569
|
private getRecipientValidationTimeoutMs(): number {
|
|
@@ -3499,37 +3525,38 @@ export class UnifiedEmailServer extends EventEmitter {
|
|
|
3499
3525
|
|
|
3500
3526
|
private async createEmailFromBuffer(emailData: Buffer, session: IExtendedSmtpSession): Promise<Email> {
|
|
3501
3527
|
try {
|
|
3502
|
-
|
|
3528
|
+
// Forwarded messages stay attachments of their bytes, so a relay hands them on unchanged
|
|
3529
|
+
const parsed = await plugins.smartmail.parseMailMessage(emailData, { rfc822Attachments: true });
|
|
3530
|
+
const headerFromMailboxes = this.parseFromHeaderFields(parsed.headers).flat();
|
|
3503
3531
|
const envelopeRecipients = session.envelope.rcptTo.map(recipient => recipient.address);
|
|
3504
|
-
const
|
|
3505
|
-
|
|
3506
|
-
.
|
|
3507
|
-
const parsedCc = ((parsed.cc as any)?.value || [])
|
|
3508
|
-
.map((recipient: any) => recipient.address)
|
|
3509
|
-
.filter(Boolean) as string[];
|
|
3510
|
-
const parsedHeaders: Record<string, string> = {};
|
|
3511
|
-
for (const [headerName, headerValue] of parsed.headers.entries()) {
|
|
3512
|
-
if (this.isStandardParsedHeader(headerName)) {
|
|
3532
|
+
const parsedHeaders = new Map<string, string>();
|
|
3533
|
+
for (const header of parsed.headers) {
|
|
3534
|
+
if (this.isStandardParsedHeader(header.key)) {
|
|
3513
3535
|
continue;
|
|
3514
3536
|
}
|
|
3515
|
-
|
|
3537
|
+
// Raw values as written; a repeated field joins its values with ', '
|
|
3538
|
+
const previous = parsedHeaders.get(header.key);
|
|
3539
|
+
parsedHeaders.set(header.key, previous === undefined ? header.value : `${previous}, ${header.value}`);
|
|
3516
3540
|
}
|
|
3517
3541
|
return new Email({
|
|
3518
|
-
|
|
3542
|
+
// The first mailbox of the From fields in message order, groups flattened
|
|
3543
|
+
from: headerFromMailboxes[0] || session.envelope.mailFrom.address,
|
|
3519
3544
|
to: envelopeRecipients.length > 0
|
|
3520
3545
|
? envelopeRecipients
|
|
3521
|
-
:
|
|
3522
|
-
cc:
|
|
3546
|
+
: parsed.to.map(recipient => recipient.email),
|
|
3547
|
+
cc: parsed.cc.map(recipient => recipient.email),
|
|
3523
3548
|
bcc: [],
|
|
3524
3549
|
subject: parsed.subject || '',
|
|
3525
|
-
|
|
3550
|
+
// A message that carries only HTML is read and scanned through its text
|
|
3551
|
+
text: parsed.text ?? (parsed.html ? plugins.smartmail.htmlToText(parsed.html) : ''),
|
|
3526
3552
|
html: parsed.html || undefined,
|
|
3527
|
-
headers: parsedHeaders,
|
|
3528
|
-
attachments: parsed.attachments
|
|
3529
|
-
filename:
|
|
3530
|
-
content:
|
|
3531
|
-
contentType:
|
|
3532
|
-
|
|
3553
|
+
headers: Object.fromEntries(parsedHeaders),
|
|
3554
|
+
attachments: parsed.attachments.map(attachment => ({
|
|
3555
|
+
filename: attachment.filename || '',
|
|
3556
|
+
content: Buffer.from(attachment.content),
|
|
3557
|
+
contentType: attachment.contentType,
|
|
3558
|
+
...(attachment.contentId ? { contentId: attachment.contentId } : {}),
|
|
3559
|
+
})),
|
|
3533
3560
|
});
|
|
3534
3561
|
} catch (error) {
|
|
3535
3562
|
logger.log('error', `Error parsing email data: ${(error as Error).message}`);
|
|
@@ -3555,22 +3582,6 @@ export class UnifiedEmailServer extends EventEmitter {
|
|
|
3555
3582
|
]).has(headerName.toLowerCase());
|
|
3556
3583
|
}
|
|
3557
3584
|
|
|
3558
|
-
private stringifyParsedHeaderValue(headerValue: unknown): string {
|
|
3559
|
-
if (Array.isArray(headerValue)) {
|
|
3560
|
-
return headerValue.map(value => this.stringifyParsedHeaderValue(value)).join(', ');
|
|
3561
|
-
}
|
|
3562
|
-
if (headerValue instanceof Date) {
|
|
3563
|
-
return headerValue.toUTCString();
|
|
3564
|
-
}
|
|
3565
|
-
if (typeof headerValue === 'string') {
|
|
3566
|
-
return headerValue;
|
|
3567
|
-
}
|
|
3568
|
-
if (headerValue && typeof headerValue === 'object' && 'text' in headerValue) {
|
|
3569
|
-
return String((headerValue as { text?: unknown }).text || '');
|
|
3570
|
-
}
|
|
3571
|
-
return headerValue === undefined || headerValue === null ? '' : String(headerValue);
|
|
3572
|
-
}
|
|
3573
|
-
|
|
3574
3585
|
/**
|
|
3575
3586
|
* Compute SCRAM-SHA-256 credential fields from a plaintext password with a
|
|
3576
3587
|
* fresh random salt (used for legacy plaintext credentials only; verifier
|
package/ts/plugins.ts
CHANGED
|
@@ -435,7 +435,10 @@ interface IVerifyCapturedOutboundEmailResult {
|
|
|
435
435
|
result?: IEmailSecurityResult;
|
|
436
436
|
}
|
|
437
437
|
|
|
438
|
-
|
|
438
|
+
/** How a raw outbound message is signed. */
|
|
439
|
+
type TSmtpRawSigningMode = 'dkim' | 'unsignedRelay';
|
|
440
|
+
|
|
441
|
+
interface ISmtpSendRawTransportOptions {
|
|
439
442
|
host: string;
|
|
440
443
|
port: number;
|
|
441
444
|
connectHost?: string;
|
|
@@ -446,7 +449,6 @@ interface ISmtpSendRawOptions {
|
|
|
446
449
|
envelopeFrom: string;
|
|
447
450
|
envelopeTo: string[];
|
|
448
451
|
rawMessageBase64: string;
|
|
449
|
-
dkim: { domain: string; selector: string; privateKey: string; keyType?: string };
|
|
450
452
|
connectionTimeoutSecs?: number;
|
|
451
453
|
socketTimeoutSecs?: number;
|
|
452
454
|
poolKey?: string;
|
|
@@ -456,6 +458,25 @@ interface ISmtpSendRawOptions {
|
|
|
456
458
|
outboundAuthenticationCaptureId?: string;
|
|
457
459
|
}
|
|
458
460
|
|
|
461
|
+
/** A raw send signed with caller-supplied DKIM material, the default. */
|
|
462
|
+
interface ISmtpSendRawOptions extends ISmtpSendRawTransportOptions {
|
|
463
|
+
signing?: 'dkim';
|
|
464
|
+
dkim: { domain: string; selector: string; privateKey: string; keyType?: string };
|
|
465
|
+
}
|
|
466
|
+
|
|
467
|
+
/**
|
|
468
|
+
* A raw send that relays the exact received bytes without a signature, for a
|
|
469
|
+
* backup MX forwarding third parties' mail to the primary. It must be
|
|
470
|
+
* requested explicitly and carries no DKIM material; the Rust engine refuses
|
|
471
|
+
* a request that mixes the two.
|
|
472
|
+
*/
|
|
473
|
+
interface ISmtpSendRawUnsignedRelayOptions extends ISmtpSendRawTransportOptions {
|
|
474
|
+
signing: 'unsignedRelay';
|
|
475
|
+
dkim?: never;
|
|
476
|
+
}
|
|
477
|
+
|
|
478
|
+
type TSmtpSendRawOptions = ISmtpSendRawOptions | ISmtpSendRawUnsignedRelayOptions;
|
|
479
|
+
|
|
459
480
|
interface ISmtpVerifyOptions {
|
|
460
481
|
host: string;
|
|
461
482
|
port: number;
|
|
@@ -674,7 +695,7 @@ type TMailerCommands = {
|
|
|
674
695
|
result: ISmtpSendResult;
|
|
675
696
|
};
|
|
676
697
|
sendRawEmail: {
|
|
677
|
-
params:
|
|
698
|
+
params: TSmtpSendRawOptions;
|
|
678
699
|
result: ISmtpSendResult;
|
|
679
700
|
};
|
|
680
701
|
verifyCapturedOutboundEmail: {
|
|
@@ -764,14 +785,16 @@ export class RustSecurityBridge extends EventEmitter {
|
|
|
764
785
|
private _smtpServerConfig: ISmtpServerConfig | null = null;
|
|
765
786
|
|
|
766
787
|
/**
|
|
767
|
-
* Map Node.js process.platform / process.arch to the tsrust
|
|
768
|
-
*
|
|
788
|
+
* Map Node.js process.platform / process.arch to the tsrust target suffix
|
|
789
|
+
* of the shipped binaries. Linux binaries are static musl builds, e.g.
|
|
790
|
+
* mailer-bin_linux_amd64_musl.
|
|
769
791
|
*/
|
|
770
792
|
private static getPlatformSuffix(): string | null {
|
|
771
793
|
const archMap: Record<string, string> = { x64: 'amd64', arm64: 'arm64' };
|
|
772
794
|
const os = process.platform; // 'linux', 'darwin', 'win32', …
|
|
773
795
|
const arch = archMap[process.arch];
|
|
774
796
|
if (!arch) return null;
|
|
797
|
+
if (os === 'linux') return `linux_${arch}_musl`;
|
|
775
798
|
return `${os}_${arch}`;
|
|
776
799
|
}
|
|
777
800
|
|
|
@@ -1241,8 +1264,11 @@ export class RustSecurityBridge extends EventEmitter {
|
|
|
1241
1264
|
}
|
|
1242
1265
|
}
|
|
1243
1266
|
|
|
1244
|
-
/**
|
|
1245
|
-
|
|
1267
|
+
/**
|
|
1268
|
+
* Send a pre-formatted raw email via the Rust SMTP client. It is DKIM-signed
|
|
1269
|
+
* with `opts.dkim` unless `opts.signing` is explicitly `'unsignedRelay'`.
|
|
1270
|
+
*/
|
|
1271
|
+
public async sendRawEmail(opts: TSmtpSendRawOptions): Promise<ISmtpSendResult> {
|
|
1246
1272
|
this.ensureRunning();
|
|
1247
1273
|
try {
|
|
1248
1274
|
const result = await this.bridge.sendCommand('sendRawEmail', opts);
|
|
@@ -1454,6 +1480,9 @@ export type {
|
|
|
1454
1480
|
ISmtpRecipientResult,
|
|
1455
1481
|
ISmtpSendOptions,
|
|
1456
1482
|
ISmtpSendRawOptions,
|
|
1483
|
+
ISmtpSendRawUnsignedRelayOptions,
|
|
1484
|
+
TSmtpSendRawOptions,
|
|
1485
|
+
TSmtpRawSigningMode,
|
|
1457
1486
|
ISmtpVerifyOptions,
|
|
1458
1487
|
ISmtpVerifyResult,
|
|
1459
1488
|
ISmtpPoolStatus,
|
package/ts/security/index.ts
CHANGED
|
@@ -42,6 +42,10 @@ export {
|
|
|
42
42
|
type ISmtpSendResult,
|
|
43
43
|
type ISmtpRecipientResult,
|
|
44
44
|
type ISmtpSendOptions,
|
|
45
|
+
type ISmtpSendRawOptions,
|
|
46
|
+
type ISmtpSendRawUnsignedRelayOptions,
|
|
47
|
+
type TSmtpSendRawOptions,
|
|
48
|
+
type TSmtpRawSigningMode,
|
|
45
49
|
type ISmtpVerifyResult,
|
|
46
50
|
type ISmtpPoolStatus,
|
|
47
51
|
} from './classes.rustsecuritybridge.js';
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"format": "tsrust.build-provenance.v2",
|
|
3
|
-
"binarySha256": "d698d8d0af565269b930e9af77e6046ca80d5c159e5aca55d2e2aa0c73a96f14",
|
|
4
|
-
"buildInfo": {
|
|
5
|
-
"projectName": "@push.rocks/smartmta",
|
|
6
|
-
"projectVersion": "11.1.0",
|
|
7
|
-
"gitCommit": "f9dc39d8b543051ed3afae5b3708f1583b8c6630",
|
|
8
|
-
"gitDirty": false,
|
|
9
|
-
"builtAt": "2026-10-14T22:19:16.659Z",
|
|
10
|
-
"tsrustVersion": "4.5.1",
|
|
11
|
-
"binary": "mailer-bin",
|
|
12
|
-
"target": "linux_amd64"
|
|
13
|
-
}
|
|
14
|
-
}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"format": "tsrust.build-provenance.v2",
|
|
3
|
-
"binarySha256": "2e5502aaff345b35f16840f14c28e7b50c13b45f7015025021913006d6774f1c",
|
|
4
|
-
"buildInfo": {
|
|
5
|
-
"projectName": "@push.rocks/smartmta",
|
|
6
|
-
"projectVersion": "11.1.0",
|
|
7
|
-
"gitCommit": "f9dc39d8b543051ed3afae5b3708f1583b8c6630",
|
|
8
|
-
"gitDirty": false,
|
|
9
|
-
"builtAt": "2026-10-14T22:21:40.086Z",
|
|
10
|
-
"tsrustVersion": "4.5.1",
|
|
11
|
-
"binary": "mailer-bin",
|
|
12
|
-
"target": "linux_arm64"
|
|
13
|
-
}
|
|
14
|
-
}
|