@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 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
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "format": "tsrust.build-provenance.v2",
3
- "binarySha256": "26d34a7674c6b5b739c8ad6764c4e7d5282534e0b577459f1eb7f2d6b73e5543",
3
+ "binarySha256": "5ced0f2fb1fbb6c79a653ff4df450da297eca2e3b2fa1d984a3f7bec689512ac",
4
4
  "buildInfo": {
5
5
  "projectName": "@push.rocks/smartmta",
6
- "projectVersion": "13.0.1",
7
- "gitCommit": "e7bc2248fd9d2e90a3299bd05bfdabefa193f008",
6
+ "projectVersion": "13.0.2",
7
+ "gitCommit": "32839c1c9878eac237541811a805265d1abffb7f",
8
8
  "gitDirty": false,
9
- "builtAt": "2026-10-15T11:23:05.139Z",
10
- "tsrustVersion": "4.6.0",
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
  }
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "format": "tsrust.build-provenance.v2",
3
- "binarySha256": "0c3a0c4ad7a774b1797521e287aad257f2bf10a65bd8d2b7cdc35917a8692113",
3
+ "binarySha256": "3cb3e0bda579449bcb6fe637f484967cb0d2f4021bb270cb585e1df02dea4836",
4
4
  "buildInfo": {
5
5
  "projectName": "@push.rocks/smartmta",
6
- "projectVersion": "13.0.1",
7
- "gitCommit": "e7bc2248fd9d2e90a3299bd05bfdabefa193f008",
6
+ "projectVersion": "13.0.2",
7
+ "gitCommit": "32839c1c9878eac237541811a805265d1abffb7f",
8
8
  "gitDirty": false,
9
- "builtAt": "2026-10-15T11:25:18.459Z",
10
- "tsrustVersion": "4.6.0",
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.1',
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 tsrust target suffix
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 tsrust target suffix
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 (tsrust cross-compiled output)
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.1",
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": "^9.1.0",
35
- "@git.zone/tsbuild": "^6.0.2",
36
- "@git.zone/tsrust": "^4.6.0",
37
- "@git.zone/tstest": "^8.0.0",
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": "tstest test/ --logfile --verbose --timeout 60",
71
+ "test": "tsrepo test test/ --logfile --verbose --timeout 60",
73
72
  "test:rust": "cd rust && cargo test",
74
- "build": "tsbuild tsfolders && tsrust",
75
- "build:release": "(tsbuild tsfolders) && (tsrust --configured-targets) && (tsrust verify)",
76
- "check": "tsbuild 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/tssea`), 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.
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
- tstest test/test.e2e.server-lifecycle.node.ts --verbose --timeout 60
972
- tstest test/test.e2e.inbound-smtp.node.ts --verbose --timeout 60
973
- tstest test/test.e2e.routing-actions.node.ts --verbose --timeout 60
974
- tstest test/test.e2e.outbound-delivery.node.ts --verbose --timeout 60
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/tssea`](https://code.foss.global/git.zone/tssea) merges into a
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/tsrust` projects them from the
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
- `tsrust notices` generates that directory from `rust/Cargo.lock`, the toolchain
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
- `tsrust verify` checks the release binaries' notices. Regenerate it with
1020
- `pnpm exec tsrust notices` after any change to the Cargo graph, the toolchain or
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
@@ -3,6 +3,6 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@push.rocks/smartmta',
6
- version: '13.0.1',
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
  }
@@ -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 tsrust target suffix
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 (tsrust cross-compiled output)
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
  }