@push.rocks/smartmta 13.0.1 → 13.0.2
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 +10 -0
- package/dist_rust/mailer-bin_linux_amd64_musl +0 -0
- package/dist_rust/mailer-bin_linux_amd64_musl.tsrust-build.json +5 -5
- package/dist_rust/mailer-bin_linux_arm64_musl +0 -0
- package/dist_rust/mailer-bin_linux_arm64_musl.tsrust-build.json +5 -5
- package/dist_ts/00_commitinfo_data.js +1 -1
- package/dist_ts/security/classes.rustsecuritybridge.d.ts +1 -1
- package/dist_ts/security/classes.rustsecuritybridge.js +2 -2
- package/package.json +9 -10
- package/readme.md +10 -10
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/security/classes.rustsecuritybridge.ts +2 -2
package/changelog.md
CHANGED
|
@@ -1,5 +1,15 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 2026-11-01 - 13.0.2
|
|
4
|
+
|
|
5
|
+
### Fixes
|
|
6
|
+
|
|
7
|
+
- DKIM signing now over-signs From, Reply-To, Subject, To, Cc, Date, Message-ID, MIME-Version and Content-Type (one `h=` entry more than the instances present, so an added or duplicated field fails verification) and also signs In-Reply-To, References, Resent-Date, Resent-From, Resent-Sender, Resent-To, Resent-Cc, Resent-Message-ID and List-* when present; every signature's `h=` therefore differs from earlier releases, and verifiers need no change.
|
|
8
|
+
|
|
9
|
+
### Maintenance
|
|
10
|
+
|
|
11
|
+
- The release tooling moves from the deprecated `@git.zone/tsbuild`, `@git.zone/tstest` and `@git.zone/tsrust` to `@git.zone/tsrepo` ^1.1.1 (`tsrepo build`, `tsrepo check`, `tsrepo test`; tests import `@git.zone/tsrepo/tapbundle`) and `@git.zone/rsrepo` ^1.1.1 (`rsrepo`, `rsrepo verify`, `rsrepo notices`; the `.smartconfig.json` key is now `@git.zone/rsrepo`); `@git.zone/cli` ^12.0.1, `@types/node` ^26.6.5 and pnpm 12.15.0.
|
|
12
|
+
|
|
3
13
|
## 2026-10-15 - 13.0.1
|
|
4
14
|
|
|
5
15
|
### Fixes
|
|
Binary file
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"format": "tsrust.build-provenance.v2",
|
|
3
|
-
"binarySha256": "
|
|
3
|
+
"binarySha256": "5ced0f2fb1fbb6c79a653ff4df450da297eca2e3b2fa1d984a3f7bec689512ac",
|
|
4
4
|
"buildInfo": {
|
|
5
5
|
"projectName": "@push.rocks/smartmta",
|
|
6
|
-
"projectVersion": "13.0.
|
|
7
|
-
"gitCommit": "
|
|
6
|
+
"projectVersion": "13.0.2",
|
|
7
|
+
"gitCommit": "32839c1c9878eac237541811a805265d1abffb7f",
|
|
8
8
|
"gitDirty": false,
|
|
9
|
-
"builtAt": "2026-
|
|
10
|
-
"tsrustVersion": "
|
|
9
|
+
"builtAt": "2026-11-01T15:23:01.857Z",
|
|
10
|
+
"tsrustVersion": "1.1.1",
|
|
11
11
|
"binary": "mailer-bin",
|
|
12
12
|
"target": "linux_amd64_musl"
|
|
13
13
|
}
|
|
Binary file
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"format": "tsrust.build-provenance.v2",
|
|
3
|
-
"binarySha256": "
|
|
3
|
+
"binarySha256": "3cb3e0bda579449bcb6fe637f484967cb0d2f4021bb270cb585e1df02dea4836",
|
|
4
4
|
"buildInfo": {
|
|
5
5
|
"projectName": "@push.rocks/smartmta",
|
|
6
|
-
"projectVersion": "13.0.
|
|
7
|
-
"gitCommit": "
|
|
6
|
+
"projectVersion": "13.0.2",
|
|
7
|
+
"gitCommit": "32839c1c9878eac237541811a805265d1abffb7f",
|
|
8
8
|
"gitDirty": false,
|
|
9
|
-
"builtAt": "2026-
|
|
10
|
-
"tsrustVersion": "
|
|
9
|
+
"builtAt": "2026-11-01T15:26:11.899Z",
|
|
10
|
+
"tsrustVersion": "1.1.1",
|
|
11
11
|
"binary": "mailer-bin",
|
|
12
12
|
"target": "linux_arm64_musl"
|
|
13
13
|
}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export const commitinfo = {
|
|
5
5
|
name: '@push.rocks/smartmta',
|
|
6
|
-
version: '13.0.
|
|
6
|
+
version: '13.0.2',
|
|
7
7
|
description: 'A high-performance, enterprise-grade Mail Transfer Agent (MTA) built from scratch in TypeScript with Rust acceleration.'
|
|
8
8
|
};
|
|
9
9
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvMDBfY29tbWl0aW5mb19kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLElBQUksRUFBRSxzQkFBc0I7SUFDNUIsT0FBTyxFQUFFLFFBQVE7SUFDakIsV0FBVyxFQUFFLHlIQUF5SDtDQUN2SSxDQUFBIn0=
|
|
@@ -406,7 +406,7 @@ export declare class RustSecurityBridge extends EventEmitter {
|
|
|
406
406
|
private _deliberateStop;
|
|
407
407
|
private _smtpServerConfig;
|
|
408
408
|
/**
|
|
409
|
-
* Map Node.js process.platform / process.arch to the
|
|
409
|
+
* Map Node.js process.platform / process.arch to the rsrepo target suffix
|
|
410
410
|
* of the shipped binaries. Linux binaries are static musl builds, e.g.
|
|
411
411
|
* mailer-bin_linux_amd64_musl.
|
|
412
412
|
*/
|
|
@@ -239,7 +239,7 @@ export class RustSecurityBridge extends EventEmitter {
|
|
|
239
239
|
_deliberateStop = false;
|
|
240
240
|
_smtpServerConfig = null;
|
|
241
241
|
/**
|
|
242
|
-
* Map Node.js process.platform / process.arch to the
|
|
242
|
+
* Map Node.js process.platform / process.arch to the rsrepo target suffix
|
|
243
243
|
* of the shipped binaries. Linux binaries are static musl builds, e.g.
|
|
244
244
|
* mailer-bin_linux_amd64_musl.
|
|
245
245
|
*/
|
|
@@ -257,7 +257,7 @@ export class RustSecurityBridge extends EventEmitter {
|
|
|
257
257
|
super();
|
|
258
258
|
const suffix = RustSecurityBridge.getPlatformSuffix();
|
|
259
259
|
const localPaths = [];
|
|
260
|
-
// dist_rust/ candidates (
|
|
260
|
+
// dist_rust/ candidates (rsrepo cross-compiled output)
|
|
261
261
|
if (suffix) {
|
|
262
262
|
localPaths.push(plugins.path.join(paths.packageDir, 'dist_rust', `mailer-bin_${suffix}`));
|
|
263
263
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@push.rocks/smartmta",
|
|
3
|
-
"version": "13.0.
|
|
3
|
+
"version": "13.0.2",
|
|
4
4
|
"description": "A high-performance, enterprise-grade Mail Transfer Agent (MTA) built from scratch in TypeScript with Rust acceleration.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"mta",
|
|
@@ -31,11 +31,10 @@
|
|
|
31
31
|
".": "./dist_ts/index.js"
|
|
32
32
|
},
|
|
33
33
|
"devDependencies": {
|
|
34
|
-
"@git.zone/cli": "^
|
|
35
|
-
"@git.zone/
|
|
36
|
-
"@git.zone/
|
|
37
|
-
"@
|
|
38
|
-
"@types/node": "^26.6.4",
|
|
34
|
+
"@git.zone/cli": "^12.0.1",
|
|
35
|
+
"@git.zone/rsrepo": "^1.1.1",
|
|
36
|
+
"@git.zone/tsrepo": "^1.1.1",
|
|
37
|
+
"@types/node": "^26.6.5",
|
|
39
38
|
"tsx": "^4.23.15"
|
|
40
39
|
},
|
|
41
40
|
"dependencies": {
|
|
@@ -69,10 +68,10 @@
|
|
|
69
68
|
"access": "public"
|
|
70
69
|
},
|
|
71
70
|
"scripts": {
|
|
72
|
-
"test": "
|
|
71
|
+
"test": "tsrepo test test/ --logfile --verbose --timeout 60",
|
|
73
72
|
"test:rust": "cd rust && cargo test",
|
|
74
|
-
"build": "
|
|
75
|
-
"build:release": "(
|
|
76
|
-
"check": "
|
|
73
|
+
"build": "tsrepo build tsfolders && rsrepo",
|
|
74
|
+
"build:release": "(tsrepo build tsfolders) && (rsrepo --configured-targets) && (rsrepo verify)",
|
|
75
|
+
"check": "tsrepo check"
|
|
77
76
|
}
|
|
78
77
|
}
|
package/readme.md
CHANGED
|
@@ -912,7 +912,7 @@ Performance-critical operations are implemented in Rust and communicate with the
|
|
|
912
912
|
| `mailer-smtp` | Complete | Full SMTP protocol engine — TCP/TLS server + client, STARTTLS, AUTH, pipelining, connection pooling, in-process security pipeline |
|
|
913
913
|
| `mailer-bin` | Complete | CLI + smartrust IPC bridge — wires everything together |
|
|
914
914
|
|
|
915
|
-
`RustSecurityBridge` finds `mailer-bin` in the package's `dist_rust/` (or a local `rust/target` build). Inside a Node.js single executable application (built with `@git.zone/
|
|
915
|
+
`RustSecurityBridge` finds `mailer-bin` in the package's `dist_rust/` (or a local `rust/target` build). Inside a Node.js single executable application (built with `tsrepo sea` from `@git.zone/tsrepo`), smartrust runs the sidecar the executable embeds under the name `mailer-bin` instead and searches nothing else; a sidecar the executable cannot provide makes `start()` resolve `false`, and background restarts look it up again.
|
|
916
916
|
|
|
917
917
|
The shipped Linux binaries are static musl executables. The SMTP client connects with `TcpStream::connect("host:port")` (`rust/crates/mailer-smtp/src/client/connection.rs`), so a host name it connects to (an MX or smarthost name, or a `connect_host`) is looked up through the C library, which is musl: only `/etc/hosts` and `/etc/resolv.conf` are consulted, and no NSS modules (`nsswitch.conf`, systemd-resolved's NSS module, LDAP and the like) take part. The SPF, DKIM, DMARC and DNSBL lookups use the hickory resolver instead.
|
|
918
918
|
|
|
@@ -968,10 +968,10 @@ pnpm run build
|
|
|
968
968
|
pnpm test
|
|
969
969
|
|
|
970
970
|
# Run specific test files
|
|
971
|
-
|
|
972
|
-
|
|
973
|
-
|
|
974
|
-
|
|
971
|
+
pnpm exec tsrepo test test/test.e2e.server-lifecycle.node.ts --verbose --timeout 60
|
|
972
|
+
pnpm exec tsrepo test test/test.e2e.inbound-smtp.node.ts --verbose --timeout 60
|
|
973
|
+
pnpm exec tsrepo test test/test.e2e.routing-actions.node.ts --verbose --timeout 60
|
|
974
|
+
pnpm exec tsrepo test test/test.e2e.outbound-delivery.node.ts --verbose --timeout 60
|
|
975
975
|
```
|
|
976
976
|
|
|
977
977
|
**E2E tests** exercise the full pipeline — starting `UnifiedEmailServer`, connecting via raw TCP sockets, sending SMTP transactions, verifying routing actions, and testing outbound delivery through a mock SMTP receiver.
|
|
@@ -1009,15 +1009,15 @@ third-party works too.
|
|
|
1009
1009
|
|
|
1010
1010
|
Every binary carries its notices beside it in `dist_rust/`:
|
|
1011
1011
|
`mailer-bin_<target>.third-party-notices.json` and `.txt`, in the format that
|
|
1012
|
-
[`@git.zone/
|
|
1012
|
+
[`@git.zone/tsrepo`](https://code.foss.global/git.zone/tsrepo)'s `sea` build merges into a
|
|
1013
1013
|
single executable application. Keep that pair with any separately distributed
|
|
1014
|
-
copy of a `mailer-bin` executable. `@git.zone/
|
|
1014
|
+
copy of a `mailer-bin` executable. [`@git.zone/rsrepo`](https://code.foss.global/git.zone/rsrepo) projects them from the
|
|
1015
1015
|
committed `native-notices/` directory, which ships in the npm package as well.
|
|
1016
|
-
`
|
|
1016
|
+
`rsrepo notices` generates that directory from `rust/Cargo.lock`, the toolchain
|
|
1017
1017
|
pinned in `rust-toolchain.toml` and the `notices` overrides in `.smartconfig.json`
|
|
1018
1018
|
(reviewed project texts live in `legal/`); every build checks it and
|
|
1019
|
-
`
|
|
1020
|
-
`pnpm exec
|
|
1019
|
+
`rsrepo verify` checks the release binaries' notices. Regenerate it with
|
|
1020
|
+
`pnpm exec rsrepo notices` after any change to the Cargo graph, the toolchain or
|
|
1021
1021
|
the targets, and review the diff.
|
|
1022
1022
|
|
|
1023
1023
|
## License and Legal Information
|
package/ts/00_commitinfo_data.ts
CHANGED
|
@@ -785,7 +785,7 @@ export class RustSecurityBridge extends EventEmitter {
|
|
|
785
785
|
private _smtpServerConfig: ISmtpServerConfig | null = null;
|
|
786
786
|
|
|
787
787
|
/**
|
|
788
|
-
* Map Node.js process.platform / process.arch to the
|
|
788
|
+
* Map Node.js process.platform / process.arch to the rsrepo target suffix
|
|
789
789
|
* of the shipped binaries. Linux binaries are static musl builds, e.g.
|
|
790
790
|
* mailer-bin_linux_amd64_musl.
|
|
791
791
|
*/
|
|
@@ -804,7 +804,7 @@ export class RustSecurityBridge extends EventEmitter {
|
|
|
804
804
|
const suffix = RustSecurityBridge.getPlatformSuffix();
|
|
805
805
|
const localPaths: string[] = [];
|
|
806
806
|
|
|
807
|
-
// dist_rust/ candidates (
|
|
807
|
+
// dist_rust/ candidates (rsrepo cross-compiled output)
|
|
808
808
|
if (suffix) {
|
|
809
809
|
localPaths.push(plugins.path.join(paths.packageDir, 'dist_rust', `mailer-bin_${suffix}`));
|
|
810
810
|
}
|