@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.
Files changed (447) hide show
  1. package/changelog.md +42 -0
  2. package/dist_rust/{mailer-bin_linux_amd64 → mailer-bin_linux_amd64_musl} +0 -0
  3. package/dist_rust/mailer-bin_linux_amd64_musl.third-party-notices.json +3848 -0
  4. package/dist_rust/mailer-bin_linux_amd64_musl.third-party-notices.txt +48681 -0
  5. package/dist_rust/mailer-bin_linux_amd64_musl.tsrust-build.json +14 -0
  6. package/dist_rust/{mailer-bin_linux_arm64 → mailer-bin_linux_arm64_musl} +0 -0
  7. package/dist_rust/mailer-bin_linux_arm64_musl.third-party-notices.json +3848 -0
  8. package/dist_rust/mailer-bin_linux_arm64_musl.third-party-notices.txt +48681 -0
  9. package/dist_rust/mailer-bin_linux_arm64_musl.tsrust-build.json +14 -0
  10. package/dist_ts/00_commitinfo_data.js +1 -1
  11. package/dist_ts/index.d.ts +1 -0
  12. package/dist_ts/index.js +2 -1
  13. package/dist_ts/mail/routing/classes.unified.email.server.d.ts +15 -8
  14. package/dist_ts/mail/routing/classes.unified.email.server.js +71 -62
  15. package/dist_ts/plugins.d.ts +0 -2
  16. package/dist_ts/plugins.js +1 -4
  17. package/dist_ts/security/classes.rustsecuritybridge.d.ts +33 -12
  18. package/dist_ts/security/classes.rustsecuritybridge.js +10 -4
  19. package/dist_ts/security/index.d.ts +1 -1
  20. package/dist_ts/security/index.js +1 -1
  21. package/native-notices/crates/adler2-2.0.1/license-0bsd +12 -0
  22. package/native-notices/crates/adler2-2.0.1/license-apache +201 -0
  23. package/native-notices/crates/aes-0.8.4/license-apache +201 -0
  24. package/native-notices/crates/aes-0.8.4/license-mit +25 -0
  25. package/native-notices/crates/ahash-0.8.12/license-mit +25 -0
  26. package/native-notices/crates/aho-corasick-1.1.4/copying +3 -0
  27. package/native-notices/crates/aho-corasick-1.1.4/license-mit +21 -0
  28. package/native-notices/crates/aho-corasick-1.1.4/unlicense +24 -0
  29. package/native-notices/crates/anstream-1.0.0/license-apache +202 -0
  30. package/native-notices/crates/anstream-1.0.0/license-mit +19 -0
  31. package/native-notices/crates/anstyle-1.0.14/license-apache +202 -0
  32. package/native-notices/crates/anstyle-1.0.14/license-mit +19 -0
  33. package/native-notices/crates/anstyle-parse-1.0.0/license-apache +202 -0
  34. package/native-notices/crates/anstyle-parse-1.0.0/license-mit +19 -0
  35. package/native-notices/crates/anstyle-query-1.1.5/license-apache +202 -0
  36. package/native-notices/crates/anstyle-query-1.1.5/license-mit +19 -0
  37. package/native-notices/crates/async-trait-0.1.91/license-apache +176 -0
  38. package/native-notices/crates/async-trait-0.1.91/license-mit +23 -0
  39. package/native-notices/crates/base64-0.22.1/license-apache +201 -0
  40. package/native-notices/crates/base64-0.22.1/license-mit +21 -0
  41. package/native-notices/crates/bitflags-2.13.1/license-apache +201 -0
  42. package/native-notices/crates/bitflags-2.13.1/license-mit +25 -0
  43. package/native-notices/crates/block-buffer-0.10.4/license-apache +201 -0
  44. package/native-notices/crates/block-buffer-0.10.4/license-mit +25 -0
  45. package/native-notices/crates/bumpalo-3.20.3/license-apache +201 -0
  46. package/native-notices/crates/bumpalo-3.20.3/license-mit +25 -0
  47. package/native-notices/crates/bytes-1.12.1/license +25 -0
  48. package/native-notices/crates/bzip2-0.6.1/license-apache +201 -0
  49. package/native-notices/crates/bzip2-0.6.1/license-mit +25 -0
  50. package/native-notices/crates/cc-1.3.0/license-apache +201 -0
  51. package/native-notices/crates/cfg-if-1.0.4/license-apache +201 -0
  52. package/native-notices/crates/cfg-if-1.0.4/license-mit +25 -0
  53. package/native-notices/crates/charset-0.1.5/copyright +12 -0
  54. package/native-notices/crates/charset-0.1.5/license-apache +202 -0
  55. package/native-notices/crates/charset-0.1.5/license-mit +25 -0
  56. package/native-notices/crates/cipher-0.4.4/license-apache +201 -0
  57. package/native-notices/crates/cipher-0.4.4/license-mit +25 -0
  58. package/native-notices/crates/clap-4.6.3/license-apache +202 -0
  59. package/native-notices/crates/clap-4.6.3/license-mit +19 -0
  60. package/native-notices/crates/clap_builder-4.6.2/license-apache +202 -0
  61. package/native-notices/crates/clap_builder-4.6.2/license-mit +19 -0
  62. package/native-notices/crates/clap_derive-4.6.3/license-apache +202 -0
  63. package/native-notices/crates/clap_derive-4.6.3/license-mit +19 -0
  64. package/native-notices/crates/clap_lex-1.1.0/license-apache +202 -0
  65. package/native-notices/crates/clap_lex-1.1.0/license-mit +19 -0
  66. package/native-notices/crates/colorchoice-1.0.5/license-apache +202 -0
  67. package/native-notices/crates/colorchoice-1.0.5/license-mit +19 -0
  68. package/native-notices/crates/constant_time_eq-0.3.1/license-apache +176 -0
  69. package/native-notices/crates/constant_time_eq-0.3.1/license-cc0 +121 -0
  70. package/native-notices/crates/constant_time_eq-0.3.1/license-mit0 +14 -0
  71. package/native-notices/crates/cpufeatures-0.2.17/license-apache +201 -0
  72. package/native-notices/crates/cpufeatures-0.2.17/license-mit +25 -0
  73. package/native-notices/crates/crc-3.4.0/license-apache +201 -0
  74. package/native-notices/crates/crc-3.4.0/license-mit +21 -0
  75. package/native-notices/crates/crc-catalog-2.5.0/apache-2.0.txt +201 -0
  76. package/native-notices/crates/crc-catalog-2.5.0/mit.txt +21 -0
  77. package/native-notices/crates/crc32fast-1.5.0/license-apache +202 -0
  78. package/native-notices/crates/crc32fast-1.5.0/license-mit +21 -0
  79. package/native-notices/crates/critical-section-1.2.0/license-apache +201 -0
  80. package/native-notices/crates/critical-section-1.2.0/license-mit +25 -0
  81. package/native-notices/crates/crossbeam-channel-0.5.16/license-apache +201 -0
  82. package/native-notices/crates/crossbeam-channel-0.5.16/license-mit +27 -0
  83. package/native-notices/crates/crossbeam-epoch-0.9.20/license-apache +201 -0
  84. package/native-notices/crates/crossbeam-epoch-0.9.20/license-mit +27 -0
  85. package/native-notices/crates/crossbeam-utils-0.8.22/license-apache +201 -0
  86. package/native-notices/crates/crossbeam-utils-0.8.22/license-mit +27 -0
  87. package/native-notices/crates/crypto-common-0.1.7/license-apache +201 -0
  88. package/native-notices/crates/crypto-common-0.1.7/license-mit +25 -0
  89. package/native-notices/crates/dashmap-6.2.1/license +21 -0
  90. package/{notices/aws-lc-sys-0.43.0-fiat-license.txt → native-notices/crates/data-encoding-2.11.0/license} +2 -2
  91. package/native-notices/crates/deflate64-0.1.12/license +24 -0
  92. package/native-notices/crates/deranged-0.5.8/license-apache +202 -0
  93. package/native-notices/crates/deranged-0.5.8/license-mit +19 -0
  94. package/native-notices/crates/digest-0.10.7/license-apache +201 -0
  95. package/native-notices/crates/digest-0.10.7/license-mit +25 -0
  96. package/native-notices/crates/displaydoc-0.2.6/license-apache +201 -0
  97. package/native-notices/crates/displaydoc-0.2.6/license-mit +23 -0
  98. package/native-notices/crates/encoding_rs-0.8.35/copyright +17 -0
  99. package/native-notices/crates/encoding_rs-0.8.35/license-apache +202 -0
  100. package/native-notices/crates/encoding_rs-0.8.35/license-mit +25 -0
  101. package/native-notices/crates/encoding_rs-0.8.35/license-whatwg +26 -0
  102. package/native-notices/crates/enum-as-inner-0.6.1/copyright.txt +6 -0
  103. package/native-notices/crates/enum-as-inner-0.6.1/license-apache +202 -0
  104. package/native-notices/crates/enum-as-inner-0.6.1/license-mit +20 -0
  105. package/native-notices/crates/equivalent-1.0.2/license-apache +201 -0
  106. package/native-notices/crates/equivalent-1.0.2/license-mit +25 -0
  107. package/native-notices/crates/errno-0.3.14/license-apache +201 -0
  108. package/native-notices/crates/errno-0.3.14/license-mit +25 -0
  109. package/native-notices/crates/find-msvc-tools-0.1.9/license-apache +201 -0
  110. package/native-notices/crates/find-msvc-tools-0.1.9/license-mit +25 -0
  111. package/native-notices/crates/flate2-1.1.9/license-apache +201 -0
  112. package/native-notices/crates/flate2-1.1.9/license-mit +25 -0
  113. package/native-notices/crates/form_urlencoded-1.2.2/license-apache +201 -0
  114. package/native-notices/crates/form_urlencoded-1.2.2/license-mit +25 -0
  115. package/native-notices/crates/futures-channel-0.3.33/license-apache +202 -0
  116. package/native-notices/crates/futures-channel-0.3.33/license-mit +26 -0
  117. package/native-notices/crates/futures-core-0.3.33/license-apache +202 -0
  118. package/native-notices/crates/futures-core-0.3.33/license-mit +26 -0
  119. package/native-notices/crates/futures-io-0.3.33/license-apache +202 -0
  120. package/native-notices/crates/futures-io-0.3.33/license-mit +26 -0
  121. package/native-notices/crates/futures-task-0.3.33/license-apache +202 -0
  122. package/native-notices/crates/futures-task-0.3.33/license-mit +26 -0
  123. package/native-notices/crates/futures-util-0.3.33/license-apache +202 -0
  124. package/native-notices/crates/futures-util-0.3.33/license-mit +26 -0
  125. package/native-notices/crates/generic-array-0.14.7/license +21 -0
  126. package/native-notices/crates/gethostname-1.1.0/license +201 -0
  127. package/native-notices/crates/getrandom-0.2.17/license-apache +201 -0
  128. package/native-notices/crates/getrandom-0.2.17/license-mit +26 -0
  129. package/native-notices/crates/getrandom-0.3.4/license-apache +201 -0
  130. package/native-notices/crates/getrandom-0.3.4/license-mit +26 -0
  131. package/native-notices/crates/getrandom-0.4.3/license-apache +201 -0
  132. package/native-notices/crates/getrandom-0.4.3/license-mit +26 -0
  133. package/native-notices/crates/hashbrown-0.14.5/license-apache +201 -0
  134. package/native-notices/crates/hashbrown-0.14.5/license-mit +25 -0
  135. package/native-notices/crates/hashbrown-0.16.1/license-apache +201 -0
  136. package/native-notices/crates/hashbrown-0.16.1/license-mit +25 -0
  137. package/native-notices/crates/hashbrown-0.17.1/license-apache +201 -0
  138. package/native-notices/crates/hashbrown-0.17.1/license-mit +25 -0
  139. package/native-notices/crates/hashify-0.2.9/apache-2.0.txt +201 -0
  140. package/native-notices/crates/hashify-0.2.9/mit.txt +23 -0
  141. package/native-notices/crates/heck-0.5.0/license-apache +201 -0
  142. package/native-notices/crates/heck-0.5.0/license-mit +25 -0
  143. package/native-notices/crates/hickory-proto-0.25.2/license-apache +202 -0
  144. package/native-notices/crates/hickory-proto-0.25.2/license-mit +20 -0
  145. package/native-notices/crates/hickory-proto-0.26.0-alpha.1/license-apache +202 -0
  146. package/native-notices/crates/hickory-proto-0.26.0-alpha.1/license-mit +20 -0
  147. package/native-notices/crates/hickory-resolver-0.25.2/license-apache +202 -0
  148. package/native-notices/crates/hickory-resolver-0.25.2/license-mit +20 -0
  149. package/native-notices/crates/hickory-resolver-0.26.0-alpha.1/license-apache +202 -0
  150. package/native-notices/crates/hickory-resolver-0.26.0-alpha.1/license-mit +20 -0
  151. package/native-notices/crates/hmac-0.12.1/license-apache +201 -0
  152. package/native-notices/crates/hmac-0.12.1/license-mit +25 -0
  153. package/native-notices/crates/icu_collections-2.2.0/license +46 -0
  154. package/native-notices/crates/icu_locale_core-2.2.0/license +46 -0
  155. package/native-notices/crates/icu_normalizer-2.2.0/license +46 -0
  156. package/native-notices/crates/icu_normalizer_data-2.2.0/license +46 -0
  157. package/native-notices/crates/icu_properties-2.2.0/license +46 -0
  158. package/native-notices/crates/icu_properties_data-2.2.0/license +46 -0
  159. package/native-notices/crates/icu_provider-2.2.0/license +46 -0
  160. package/native-notices/crates/idna-1.1.0/license-apache +201 -0
  161. package/native-notices/crates/idna-1.1.0/license-mit +25 -0
  162. package/native-notices/crates/idna_adapter-1.2.2/license-apache +201 -0
  163. package/native-notices/crates/idna_adapter-1.2.2/license-mit +25 -0
  164. package/native-notices/crates/indexmap-2.14.0/license-apache +201 -0
  165. package/native-notices/crates/indexmap-2.14.0/license-mit +25 -0
  166. package/native-notices/crates/inout-0.1.4/license-apache +201 -0
  167. package/native-notices/crates/inout-0.1.4/license-mit +26 -0
  168. package/native-notices/crates/ipnet-2.12.0/license-apache +201 -0
  169. package/native-notices/crates/ipnet-2.12.0/license-mit +7 -0
  170. package/native-notices/crates/is_terminal_polyfill-1.70.2/license-apache +202 -0
  171. package/native-notices/crates/is_terminal_polyfill-1.70.2/license-mit +19 -0
  172. package/native-notices/crates/itoa-1.0.18/license-apache +176 -0
  173. package/native-notices/crates/itoa-1.0.18/license-mit +23 -0
  174. package/native-notices/crates/jobserver-0.1.35/license-apache +201 -0
  175. package/native-notices/crates/jobserver-0.1.35/license-mit +25 -0
  176. package/native-notices/crates/libbz2-rs-sys-0.2.5/license +48 -0
  177. package/native-notices/crates/libc-0.2.186/license-apache +176 -0
  178. package/native-notices/crates/libc-0.2.186/license-mit +25 -0
  179. package/native-notices/crates/linux-raw-sys-0.12.1/copyright +29 -0
  180. package/native-notices/crates/linux-raw-sys-0.12.1/license-apache +201 -0
  181. package/native-notices/crates/linux-raw-sys-0.12.1/license-apache-2.0_with_llvm-exception +220 -0
  182. package/native-notices/crates/linux-raw-sys-0.12.1/license-mit +23 -0
  183. package/native-notices/crates/litemap-0.8.2/license +46 -0
  184. package/native-notices/crates/lock_api-0.4.14/license-apache +201 -0
  185. package/native-notices/crates/lock_api-0.4.14/license-mit +25 -0
  186. package/native-notices/crates/log-0.4.33/license-apache +201 -0
  187. package/native-notices/crates/log-0.4.33/license-mit +25 -0
  188. package/native-notices/crates/lzma-rust2-0.13.0/license +201 -0
  189. package/native-notices/crates/mail-auth-0.7.5/apache-2.0.txt +201 -0
  190. package/native-notices/crates/mail-auth-0.7.5/mit.txt +23 -0
  191. package/native-notices/crates/mail-builder-0.4.4/apache-2.0.txt +201 -0
  192. package/native-notices/crates/mail-builder-0.4.4/mit.txt +23 -0
  193. package/native-notices/crates/mail-parser-0.11.5/apache-2.0.txt +201 -0
  194. package/native-notices/crates/mail-parser-0.11.5/mit.txt +23 -0
  195. package/native-notices/crates/mailparse-0.16.1/license +13 -0
  196. package/native-notices/crates/memchr-2.8.3/copying +3 -0
  197. package/native-notices/crates/memchr-2.8.3/license-mit +21 -0
  198. package/native-notices/crates/memchr-2.8.3/unlicense +24 -0
  199. package/native-notices/crates/miniz_oxide-0.8.9/license +25 -0
  200. package/native-notices/crates/miniz_oxide-0.8.9/license-apache.md +177 -0
  201. package/native-notices/crates/miniz_oxide-0.8.9/license-mit.md +24 -0
  202. package/native-notices/crates/miniz_oxide-0.8.9/license-zlib.md +14 -0
  203. package/native-notices/crates/mio-1.2.2/license +19 -0
  204. package/native-notices/crates/moka-0.12.15/license-apache +201 -0
  205. package/native-notices/crates/moka-0.12.15/license-mit +21 -0
  206. package/native-notices/crates/num-conv-0.2.2/license-apache +177 -0
  207. package/native-notices/crates/num-conv-0.2.2/license-mit +19 -0
  208. package/native-notices/crates/once_cell-1.21.4/license-apache +201 -0
  209. package/native-notices/crates/once_cell-1.21.4/license-mit +23 -0
  210. package/native-notices/crates/parking_lot-0.12.5/license-apache +201 -0
  211. package/native-notices/crates/parking_lot-0.12.5/license-mit +25 -0
  212. package/native-notices/crates/parking_lot_core-0.9.12/license-apache +201 -0
  213. package/native-notices/crates/parking_lot_core-0.9.12/license-mit +25 -0
  214. package/native-notices/crates/pbkdf2-0.12.2/license-apache +201 -0
  215. package/native-notices/crates/pbkdf2-0.12.2/license-mit +26 -0
  216. package/native-notices/crates/percent-encoding-2.3.2/license-apache +201 -0
  217. package/native-notices/crates/percent-encoding-2.3.2/license-mit +25 -0
  218. package/native-notices/crates/pin-project-lite-0.2.17/license-apache +177 -0
  219. package/native-notices/crates/pin-project-lite-0.2.17/license-mit +23 -0
  220. package/native-notices/crates/pkg-config-0.3.33/license-apache +201 -0
  221. package/native-notices/crates/pkg-config-0.3.33/license-mit +25 -0
  222. package/native-notices/crates/portable-atomic-1.14.0/license-apache +177 -0
  223. package/native-notices/crates/portable-atomic-1.14.0/license-mit +23 -0
  224. package/native-notices/crates/potential_utf-0.1.5/license +46 -0
  225. package/native-notices/crates/powerfmt-0.2.0/license-apache +202 -0
  226. package/native-notices/crates/powerfmt-0.2.0/license-mit +19 -0
  227. package/native-notices/crates/ppmd-rust-1.4.0/license-cc0.md +119 -0
  228. package/native-notices/crates/ppmd-rust-1.4.0/license-mit-0.md +16 -0
  229. package/native-notices/crates/ppv-lite86-0.2.21/license-apache +201 -0
  230. package/native-notices/crates/ppv-lite86-0.2.21/license-mit +25 -0
  231. package/native-notices/crates/proc-macro2-1.0.107/license-apache +176 -0
  232. package/native-notices/crates/proc-macro2-1.0.107/license-mit +23 -0
  233. package/native-notices/crates/psl-2.1.219/license +21 -0
  234. package/native-notices/crates/psl-types-2.0.11/license +21 -0
  235. package/native-notices/crates/psl-types-2.0.11/license-apache +201 -0
  236. package/native-notices/crates/quick-xml-0.38.4/license-mit.md +23 -0
  237. package/native-notices/crates/quick_cache-0.6.24/licence.md +21 -0
  238. package/native-notices/crates/quote-1.0.47/license-apache +176 -0
  239. package/native-notices/crates/quote-1.0.47/license-mit +23 -0
  240. package/native-notices/crates/quoted_printable-0.5.2/license +13 -0
  241. package/native-notices/crates/rand-0.9.5/copyright +12 -0
  242. package/native-notices/crates/rand-0.9.5/license-apache +176 -0
  243. package/native-notices/crates/rand-0.9.5/license-mit +26 -0
  244. package/native-notices/crates/rand_chacha-0.9.0/copyright +12 -0
  245. package/native-notices/crates/rand_chacha-0.9.0/license-apache +176 -0
  246. package/native-notices/crates/rand_chacha-0.9.0/license-mit +26 -0
  247. package/native-notices/crates/rand_core-0.9.5/copyright +12 -0
  248. package/native-notices/crates/rand_core-0.9.5/license-apache +187 -0
  249. package/native-notices/crates/rand_core-0.9.5/license-mit +26 -0
  250. package/native-notices/crates/regex-1.13.1/license-apache +201 -0
  251. package/native-notices/crates/regex-1.13.1/license-mit +25 -0
  252. package/native-notices/crates/regex-automata-0.4.16/license-apache +201 -0
  253. package/native-notices/crates/regex-automata-0.4.16/license-mit +25 -0
  254. package/native-notices/crates/regex-syntax-0.8.11/license-apache +201 -0
  255. package/native-notices/crates/regex-syntax-0.8.11/license-mit +25 -0
  256. package/native-notices/crates/resolv-conf-0.7.6/license-apache +202 -0
  257. package/native-notices/crates/resolv-conf-0.7.6/license-mit +19 -0
  258. package/native-notices/crates/ring-0.17.14/extra/ring-0.17.14-once-cell-license-apache.txt +201 -0
  259. package/native-notices/crates/rustix-1.1.4/copyright +29 -0
  260. package/native-notices/crates/rustix-1.1.4/license-apache +201 -0
  261. package/native-notices/crates/rustix-1.1.4/license-apache-2.0_with_llvm-exception +220 -0
  262. package/native-notices/crates/rustix-1.1.4/license-mit +23 -0
  263. package/native-notices/crates/rustls-0.23.42/license-apache +201 -0
  264. package/native-notices/crates/rustls-0.23.42/license-isc +15 -0
  265. package/native-notices/crates/rustls-0.23.42/license-mit +25 -0
  266. package/native-notices/crates/rustls-pemfile-2.2.0/license +10 -0
  267. package/native-notices/crates/rustls-pemfile-2.2.0/license-apache +201 -0
  268. package/native-notices/crates/rustls-pemfile-2.2.0/license-isc +15 -0
  269. package/native-notices/crates/rustls-pemfile-2.2.0/license-mit +25 -0
  270. package/native-notices/crates/rustls-pki-types-1.15.0/license-apache +201 -0
  271. package/native-notices/crates/rustls-pki-types-1.15.0/license-mit +25 -0
  272. package/native-notices/crates/rustls-webpki-0.103.13/license +19 -0
  273. package/native-notices/crates/scopeguard-1.2.0/license-apache +201 -0
  274. package/native-notices/crates/scopeguard-1.2.0/license-mit +25 -0
  275. package/native-notices/crates/serde-1.0.229/license-apache +176 -0
  276. package/native-notices/crates/serde-1.0.229/license-mit +23 -0
  277. package/native-notices/crates/serde_core-1.0.229/license-apache +176 -0
  278. package/native-notices/crates/serde_core-1.0.229/license-mit +23 -0
  279. package/native-notices/crates/serde_derive-1.0.229/license-apache +176 -0
  280. package/native-notices/crates/serde_derive-1.0.229/license-mit +23 -0
  281. package/native-notices/crates/serde_json-1.0.151/license-apache +176 -0
  282. package/native-notices/crates/serde_json-1.0.151/license-mit +23 -0
  283. package/native-notices/crates/sha1-0.10.7/license-apache +201 -0
  284. package/native-notices/crates/sha1-0.10.7/license-mit +27 -0
  285. package/native-notices/crates/sha2-0.10.9/license-apache +201 -0
  286. package/native-notices/crates/sha2-0.10.9/license-mit +27 -0
  287. package/native-notices/crates/shlex-2.0.1/license-apache +13 -0
  288. package/native-notices/crates/shlex-2.0.1/license-mit +21 -0
  289. package/native-notices/crates/signal-hook-registry-1.4.8/license-apache +201 -0
  290. package/native-notices/crates/signal-hook-registry-1.4.8/license-mit +25 -0
  291. package/native-notices/crates/simd-adler32-0.3.10/license.md +21 -0
  292. package/native-notices/crates/slab-0.4.12/license +25 -0
  293. package/native-notices/crates/smallvec-1.15.2/license-apache +201 -0
  294. package/native-notices/crates/smallvec-1.15.2/license-mit +25 -0
  295. package/native-notices/crates/socket2-0.6.5/license-apache +201 -0
  296. package/native-notices/crates/socket2-0.6.5/license-mit +25 -0
  297. package/native-notices/crates/stable_deref_trait-1.2.1/license-apache +201 -0
  298. package/native-notices/crates/stable_deref_trait-1.2.1/license-mit +25 -0
  299. package/native-notices/crates/strsim-0.11.1/license +23 -0
  300. package/native-notices/crates/subtle-2.6.1/license +29 -0
  301. package/native-notices/crates/syn-2.0.119/license-apache +176 -0
  302. package/native-notices/crates/syn-2.0.119/license-mit +23 -0
  303. package/native-notices/crates/syn-3.0.2/license-apache +176 -0
  304. package/native-notices/crates/syn-3.0.2/license-mit +23 -0
  305. package/native-notices/crates/synstructure-0.13.2/license +7 -0
  306. package/native-notices/crates/tagptr-0.2.0/license-apache +13 -0
  307. package/native-notices/crates/tagptr-0.2.0/license-mit +21 -0
  308. package/native-notices/crates/thiserror-2.0.19/license-apache +176 -0
  309. package/native-notices/crates/thiserror-2.0.19/license-mit +23 -0
  310. package/native-notices/crates/thiserror-impl-2.0.19/license-apache +176 -0
  311. package/native-notices/crates/thiserror-impl-2.0.19/license-mit +23 -0
  312. package/native-notices/crates/tikv-jemalloc-sys-0.7.1+5.3.1-0-g81034ce1f1373e37dc865038e1bc8eeecf559ce8/license-apache +201 -0
  313. package/native-notices/crates/tikv-jemalloc-sys-0.7.1+5.3.1-0-g81034ce1f1373e37dc865038e1bc8eeecf559ce8/license-mit +25 -0
  314. package/native-notices/crates/tikv-jemallocator-0.7.0/license-apache +201 -0
  315. package/native-notices/crates/tikv-jemallocator-0.7.0/license-mit +25 -0
  316. package/native-notices/crates/time-0.3.54/license-apache +177 -0
  317. package/native-notices/crates/time-0.3.54/license-mit +19 -0
  318. package/native-notices/crates/time-core-0.1.9/license-apache +177 -0
  319. package/native-notices/crates/time-core-0.1.9/license-mit +19 -0
  320. package/native-notices/crates/tinystr-0.8.3/license +46 -0
  321. package/native-notices/crates/tinyvec-1.12.0/license-apache.md +202 -0
  322. package/native-notices/crates/tinyvec-1.12.0/license-mit.md +5 -0
  323. package/native-notices/crates/tinyvec-1.12.0/license-zlib.md +11 -0
  324. package/native-notices/crates/tinyvec_macros-0.1.1/license-apache.md +202 -0
  325. package/native-notices/crates/tinyvec_macros-0.1.1/license-mit.md +21 -0
  326. package/native-notices/crates/tinyvec_macros-0.1.1/license-zlib.md +20 -0
  327. package/native-notices/crates/tokio-1.53.1/license +21 -0
  328. package/native-notices/crates/tokio-macros-2.7.1/license +22 -0
  329. package/native-notices/crates/tokio-rustls-0.26.4/license-apache +201 -0
  330. package/native-notices/crates/tokio-rustls-0.26.4/license-mit +25 -0
  331. package/native-notices/crates/tracing-0.1.44/license +25 -0
  332. package/native-notices/crates/tracing-attributes-0.1.31/license +25 -0
  333. package/native-notices/crates/tracing-core-0.1.36/license +25 -0
  334. package/native-notices/crates/typenum-1.20.1/license +1 -0
  335. package/native-notices/crates/typenum-1.20.1/license-apache +201 -0
  336. package/native-notices/crates/typenum-1.20.1/license-mit +21 -0
  337. package/native-notices/crates/unicode-ident-1.0.24/license-apache +176 -0
  338. package/native-notices/crates/unicode-ident-1.0.24/license-mit +23 -0
  339. package/native-notices/crates/unicode-ident-1.0.24/license-unicode +39 -0
  340. package/native-notices/crates/untrusted-0.9.0/license.txt +13 -0
  341. package/native-notices/crates/url-2.5.8/license-apache +201 -0
  342. package/native-notices/crates/url-2.5.8/license-mit +25 -0
  343. package/native-notices/crates/utf8_iter-1.0.4/copyright +42 -0
  344. package/native-notices/crates/utf8_iter-1.0.4/license-apache +202 -0
  345. package/native-notices/crates/utf8_iter-1.0.4/license-mit +25 -0
  346. package/native-notices/crates/utf8parse-0.2.2/license-apache +176 -0
  347. package/native-notices/crates/utf8parse-0.2.2/license-mit +25 -0
  348. package/native-notices/crates/uuid-1.24.0/license-apache +201 -0
  349. package/native-notices/crates/uuid-1.24.0/license-mit +26 -0
  350. package/native-notices/crates/version_check-0.9.5/license-apache +201 -0
  351. package/native-notices/crates/version_check-0.9.5/license-mit +19 -0
  352. package/native-notices/crates/webpki-roots-0.26.11/license +61 -0
  353. package/native-notices/crates/webpki-roots-1.0.9/license +61 -0
  354. package/native-notices/crates/writeable-0.6.3/license +46 -0
  355. package/native-notices/crates/yoke-0.8.3/license +46 -0
  356. package/native-notices/crates/yoke-derive-0.8.2/license +46 -0
  357. package/native-notices/crates/zerocopy-0.8.55/license-apache +202 -0
  358. package/native-notices/crates/zerocopy-0.8.55/license-bsd +24 -0
  359. package/native-notices/crates/zerofrom-0.1.8/license +46 -0
  360. package/native-notices/crates/zerofrom-derive-0.1.7/license +46 -0
  361. package/native-notices/crates/zeroize-1.9.0/license-apache +202 -0
  362. package/native-notices/crates/zeroize-1.9.0/license-mit +25 -0
  363. package/native-notices/crates/zeroize_derive-1.5.0/license-apache +202 -0
  364. package/native-notices/crates/zeroize_derive-1.5.0/license-mit +25 -0
  365. package/native-notices/crates/zerotrie-0.2.4/license +46 -0
  366. package/native-notices/crates/zerovec-0.11.6/license +46 -0
  367. package/native-notices/crates/zerovec-derive-0.11.3/license +46 -0
  368. package/native-notices/crates/zip-6.0.0/license +24 -0
  369. package/native-notices/crates/zlib-rs-0.6.6/license +19 -0
  370. package/native-notices/crates/zmij-1.0.23/license-mit +23 -0
  371. package/native-notices/crates/zopfli-0.8.3/copying +201 -0
  372. package/native-notices/crates/zstd-0.13.3/license +8 -0
  373. package/native-notices/crates/zstd-safe-7.2.4/license +1 -0
  374. package/native-notices/crates/zstd-safe-7.2.4/license.apache-2.0 +177 -0
  375. package/native-notices/crates/zstd-safe-7.2.4/license.mit +8 -0
  376. package/native-notices/crates/zstd-sys-2.0.16+zstd.1.5.7/license +1 -0
  377. package/native-notices/crates/zstd-sys-2.0.16+zstd.1.5.7/license.apache-2.0 +177 -0
  378. package/native-notices/crates/zstd-sys-2.0.16+zstd.1.5.7/license.bsd-3-clause +32 -0
  379. package/native-notices/crates/zstd-sys-2.0.16+zstd.1.5.7/license.mit +8 -0
  380. package/native-notices/manifest.json +4829 -0
  381. package/native-notices/native/ring-0.17.14/boringssl-ring-0.17.14/license-boringssl +272 -0
  382. package/native-notices/native/ring-0.17.14/boringssl-ring-0.17.14/license-other-bits +13 -0
  383. package/native-notices/native/ring-0.17.14/fiat-crypto-ring-0.17.14/license-boringssl +272 -0
  384. package/native-notices/native/zstd-sys-2.0.16+zstd.1.5.7/zstd-1.5.7/zstd-copying +339 -0
  385. package/native-notices/readme.md +49 -0
  386. package/native-notices/runtime/libunwind-22.1.2/license.txt +311 -0
  387. package/native-notices/runtime/musl-1.2.5/copyright +193 -0
  388. package/native-notices/rust/crates/addr2line-0.25.1/license-apache +201 -0
  389. package/native-notices/rust/crates/addr2line-0.25.1/license-mit +25 -0
  390. package/native-notices/rust/crates/adler2-2.0.1/license-0bsd +12 -0
  391. package/native-notices/rust/crates/adler2-2.0.1/license-apache +201 -0
  392. package/native-notices/rust/crates/adler2-2.0.1/license-mit +23 -0
  393. package/native-notices/rust/crates/memchr-2.7.6/copying +3 -0
  394. package/native-notices/rust/crates/memchr-2.7.6/license-mit +21 -0
  395. package/native-notices/rust/crates/memchr-2.7.6/unlicense +24 -0
  396. package/native-notices/rust/crates/miniz_oxide-0.8.9/license +25 -0
  397. package/native-notices/rust/crates/miniz_oxide-0.8.9/license-apache.md +177 -0
  398. package/native-notices/rust/crates/miniz_oxide-0.8.9/license-mit.md +24 -0
  399. package/native-notices/rust/crates/miniz_oxide-0.8.9/license-zlib.md +14 -0
  400. package/native-notices/rust/crates/object-0.37.3/license-apache +201 -0
  401. package/native-notices/rust/crates/object-0.37.3/license-mit +25 -0
  402. package/native-notices/rust/licenses/apache-2.0.txt +73 -0
  403. package/native-notices/rust/licenses/bsd-2-clause.txt +9 -0
  404. package/native-notices/rust/licenses/cc-by-sa-4.0.txt +427 -0
  405. package/native-notices/rust/licenses/gcc-exception-3.1.txt +30 -0
  406. package/native-notices/rust/licenses/gpl-2.0-only.txt +133 -0
  407. package/native-notices/rust/licenses/gpl-3.0-or-later.txt +202 -0
  408. package/native-notices/rust/licenses/isc.txt +7 -0
  409. package/native-notices/rust/licenses/llvm-exception.txt +15 -0
  410. package/native-notices/rust/licenses/mit.txt +9 -0
  411. package/native-notices/rust/licenses/ncsa.txt +29 -0
  412. package/native-notices/rust/licenses/ofl-1.1.txt +43 -0
  413. package/native-notices/rust/licenses/unicode-3.0.txt +39 -0
  414. package/package.json +7 -10
  415. package/readme.md +29 -27
  416. package/ts/00_commitinfo_data.ts +1 -1
  417. package/ts/index.ts +1 -0
  418. package/ts/mail/routing/classes.unified.email.server.ts +73 -62
  419. package/ts/plugins.ts +0 -7
  420. package/ts/security/classes.rustsecuritybridge.ts +36 -7
  421. package/ts/security/index.ts +4 -0
  422. package/dist_rust/mailer-bin_linux_amd64.tsrust-build.json +0 -14
  423. package/dist_rust/mailer-bin_linux_arm64.tsrust-build.json +0 -14
  424. package/notices/cargo-dependencies.html +0 -4649
  425. package/notices/encoding-rs-copyright.txt +0 -61
  426. package/notices/glibc-copying-lesser.txt +0 -502
  427. package/notices/glibc-licenses.txt +0 -412
  428. package/notices/inventory.json +0 -1226
  429. package/notices/source-attributions.txt +0 -294
  430. package/third-party-notices.md +0 -176
  431. /package/{notices/rustversion-1.0.23-license-mit.txt → native-notices/crates/adler2-2.0.1/license-mit} +0 -0
  432. /package/{notices/ring-0.17.14-once-cell-license-apache.txt → native-notices/crates/ahash-0.8.12/license-apache} +0 -0
  433. /package/{notices/wasm-bindgen-license-mit.txt → native-notices/crates/cc-1.3.0/license-mit} +0 -0
  434. /package/{notices/crossbeam-channel-third-party.txt → native-notices/crates/crossbeam-channel-0.5.16/license-third-party} +0 -0
  435. /package/{notices/moka-notice.txt → native-notices/crates/moka-0.12.15/notice} +0 -0
  436. /package/{notices → native-notices/crates/ring-0.17.14/extra}/ring-0.17.14-once-cell-license-mit.txt +0 -0
  437. /package/{notices/ring-0.17.14-license.txt → native-notices/crates/ring-0.17.14/license} +0 -0
  438. /package/{notices/ring-0.17.14-license-boringssl.txt → native-notices/crates/ring-0.17.14/license-boringssl} +0 -0
  439. /package/{notices/ring-0.17.14-license-other-bits.txt → native-notices/crates/ring-0.17.14/license-other-bits} +0 -0
  440. /package/{notices/zerocopy-derive-0.8.55-license-mit.txt → native-notices/crates/zerocopy-0.8.55/license-mit} +0 -0
  441. /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
  442. /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
  443. /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
  444. /package/{notices/libgcc-gpl-3.0.txt → native-notices/runtime/gcc/gpl-3.0.txt} +0 -0
  445. /package/{notices/libgcc-runtime-exception.txt → native-notices/runtime/gcc/runtime-library-exception-3.1.txt} +0 -0
  446. /package/{notices → native-notices/rust}/compiler-builtins-license.txt +0 -0
  447. /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
- * Extract every mailbox address from the parsed From header. The Email
2479
- * abstraction keeps only the first From mailbox, which is not sufficient
2480
- * for scope enforcement: `From: allowed@a.com, victim@b.com` must not
2481
- * pass. Parsing stops at the first CRLFCRLF header boundary when present
2482
- * (the Rust receiver normalizes line endings to CRLF); a bodyless message
2483
- * without one is parsed whole.
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 async parseHeaderFromMailboxes(rawMessage: Buffer): Promise<string[]> {
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.mailparser.simpleParser(headerSection);
2491
- return ((parsed.from as any)?.value || [])
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
- let fromMailboxes: string[];
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
- fromMailboxes = await this.parseHeaderFromMailboxes(rawMessage);
2544
+ fromFields = await this.parseHeaderFromFields(rawMessage);
2522
2545
  } catch {
2523
- fromMailboxes = [];
2546
+ // A header section that cannot be read cannot be shown to be in scope
2547
+ return notPermitted;
2524
2548
  }
2525
- if (fromMailboxes.length === 0) {
2526
- // No parsable From header: Email.from falls back to the envelope
2527
- // MAIL FROM, which resolveRecipientPolicy has already scope-checked.
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
- if (outOfScope === undefined) {
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
- const parsed = await plugins.mailparser.simpleParser(emailData);
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 parsedTo = ((parsed.to as any)?.value || [])
3505
- .map((recipient: any) => recipient.address)
3506
- .filter(Boolean) as string[];
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
- parsedHeaders[headerName] = this.stringifyParsedHeaderValue(headerValue);
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
- from: parsed.from?.value[0]?.address || session.envelope.mailFrom.address,
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
- : parsedTo,
3522
- cc: parsedCc,
3546
+ : parsed.to.map(recipient => recipient.email),
3547
+ cc: parsed.cc.map(recipient => recipient.email),
3523
3548
  bcc: [],
3524
3549
  subject: parsed.subject || '',
3525
- text: parsed.text || '',
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?.map(att => ({
3529
- filename: att.filename || '',
3530
- content: att.content,
3531
- contentType: att.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
@@ -39,10 +39,3 @@ import * as tsclass from '@tsclass/tsclass';
39
39
  export {
40
40
  tsclass,
41
41
  }
42
-
43
- // third party
44
- import mailparser from 'mailparser';
45
-
46
- export {
47
- mailparser,
48
- }
@@ -435,7 +435,10 @@ interface IVerifyCapturedOutboundEmailResult {
435
435
  result?: IEmailSecurityResult;
436
436
  }
437
437
 
438
- interface ISmtpSendRawOptions {
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: ISmtpSendRawOptions;
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-style suffix
768
- * used for cross-compiled binaries, e.g. mailer-bin_linux_amd64.
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
- /** Send a pre-formatted raw email via the Rust SMTP client. */
1245
- public async sendRawEmail(opts: ISmtpSendRawOptions): Promise<ISmtpSendResult> {
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,
@@ -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
- }