@push.rocks/smartmta 13.0.0 → 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 +18 -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 +14 -14
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/security/classes.rustsecuritybridge.ts +2 -2
package/changelog.md
CHANGED
|
@@ -1,5 +1,23 @@
|
|
|
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
|
+
|
|
13
|
+
## 2026-10-15 - 13.0.1
|
|
14
|
+
|
|
15
|
+
### Fixes
|
|
16
|
+
|
|
17
|
+
- Inbound SMTP DATA keeps the CRLF that ends the message's last line (RFC 5321 §4.1.1.4: the first CRLF of `<CRLF>.<CRLF>` belongs to the message); since 5220ee0 the Rust DATA reader removed it as part of the terminator. The `rawMessage` handed to `onAcceptEnvelope`/`onMessageData` gains those two bytes and is now the exact received message (dot-stuffing removed), so received mail can be passed unchanged to `sendRawEmail({ signing: 'unsignedRelay' })`, `sendRawOutboundEmail()` and `enqueueRawEmail()`, which refused it before for a missing final CRLF. DKIM, SPF and DMARC verdicts, parsed `Email` fields and the SIZE limit are unchanged. Consumers that appended a CRLF themselves must stop (CoreMail).
|
|
18
|
+
- A message larger than `maxMessageSize` is now read to its end-of-data marker and then refused with 552, and the session continues. Before, the 552 was sent as soon as the limit was crossed and the rest of the message was read as SMTP commands, so lines in an oversized body (`RSET`, `MAIL FROM`, `RCPT TO`, `DATA` and a further message) were executed.
|
|
19
|
+
- Commands pipelined behind the end-of-data marker in the same segment (RFC 2920), such as `.<CRLF>QUIT<CRLF>` or the next transaction's `MAIL FROM`/`RCPT TO`/`DATA`, are answered in order. Before, the DATA reader discarded every byte after the marker in the chunk it had read, and the client waited for replies that never came.
|
|
20
|
+
|
|
3
21
|
## 2026-10-15 - 13.0.0
|
|
4
22
|
|
|
5
23
|
### Breaking Changes
|
|
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
|
@@ -270,7 +270,7 @@ const emailServer = new UnifiedEmailServer(dcRouterRef, {
|
|
|
270
270
|
storageManager: smartBucketBlobStorage,
|
|
271
271
|
},
|
|
272
272
|
|
|
273
|
-
maxMessageSize: 25 * 1024 * 1024, // 25 MB
|
|
273
|
+
maxMessageSize: 25 * 1024 * 1024, // 25 MB; a larger message is read to its end and refused with 552
|
|
274
274
|
maxClients: 500,
|
|
275
275
|
});
|
|
276
276
|
|
|
@@ -353,9 +353,9 @@ Without this, an authenticated submission addressed to a domain this server host
|
|
|
353
353
|
|
|
354
354
|
`hooks.onRcptTo`, `hooks.onMessageData`, and `hooks.onAcceptEnvelope` are awaited asynchronously. If a hook throws or times out, SmartMTA returns a temporary SMTP failure. The hook context includes `abortSignal`; long-running consumers should observe it and stop work promptly. A custom `onRcptTo` hook may accept local recipients using application-specific lookup, but external relay is still blocked unless a matched route explicitly sets `allowRelay: true`.
|
|
355
355
|
|
|
356
|
-
`hooks.onMessageData` runs after `DATA` and before the final SMTP response — but only for envelopes with **no** resolved `store` or `deliver` action; terminal local deliveries go through `hooks.onAcceptEnvelope` instead and never invoke `onMessageData`. Return `{ accepted: true }` only after your application has accepted responsibility for the message, such as after durable persistence. Set `continueProcessing: false` when the consumer owns all downstream processing.
|
|
356
|
+
`hooks.onMessageData` runs after `DATA` and before the final SMTP response — but only for envelopes with **no** resolved `store` or `deliver` action; terminal local deliveries go through `hooks.onAcceptEnvelope` instead and never invoke `onMessageData`. Its `rawMessage` holds the same exact received bytes as in `hooks.onAcceptEnvelope`, final CRLF included. Return `{ accepted: true }` only after your application has accepted responsibility for the message, such as after durable persistence. Set `continueProcessing: false` when the consumer owns all downstream processing.
|
|
357
357
|
|
|
358
|
-
`hooks.onAcceptEnvelope` is the terminal durable owner for any envelope containing a resolved `store` or `deliver` action. It receives the exact raw RFC822 bytes (`rawMessage`), the complete per-recipient route resolution (`resolvedRecipientRoutes`), and the Rust security verdicts (`securityResults`). It must durably persist the message before resolving — the SMTP `250` is only sent after the hook resolves. Throwing an `AcceptEnvelopeRejectionError` with a `5xx` code rejects the envelope permanently with that status; any other error or a `smtp.messageAcceptanceTimeoutMs` timeout refuses the envelope with a temporary `451`. Use `createAcceptedEnvelopeDispatchPlan()` inside the hook to snapshot the resolved plan for later replay-safe `dispatchAcceptedEnvelope()` calls. Both `AcceptEnvelopeRejectionError` and `IAcceptEnvelopeContext` are exported.
|
|
358
|
+
`hooks.onAcceptEnvelope` is the terminal durable owner for any envelope containing a resolved `store` or `deliver` action. It receives the exact raw RFC822 bytes (`rawMessage`): the message as the client sent it, with only the DATA dot-stuffing removed and the CRLF that ends the last line kept (RFC 5321 §4.1.1.4: the first CRLF of `<CRLF>.<CRLF>` belongs to the message), so the bytes can be relayed unchanged through `enqueueRawEmail()`, `sendRawOutboundEmail()` or an unsigned raw relay. It also receives the complete per-recipient route resolution (`resolvedRecipientRoutes`), and the Rust security verdicts (`securityResults`). It must durably persist the message before resolving — the SMTP `250` is only sent after the hook resolves. Throwing an `AcceptEnvelopeRejectionError` with a `5xx` code rejects the envelope permanently with that status; any other error or a `smtp.messageAcceptanceTimeoutMs` timeout refuses the envelope with a temporary `451`. Use `createAcceptedEnvelopeDispatchPlan()` inside the hook to snapshot the resolved plan for later replay-safe `dispatchAcceptedEnvelope()` calls. Both `AcceptEnvelopeRejectionError` and `IAcceptEnvelopeContext` are exported.
|
|
359
359
|
|
|
360
360
|
Use `smtp.securePort` when the implicit TLS listener uses a remapped backend port instead of public `465`; the configured secure port must also be present in `ports`, otherwise `start()` throws.
|
|
361
361
|
|
|
@@ -564,7 +564,7 @@ The `sendOutboundEmail` method:
|
|
|
564
564
|
|
|
565
565
|
`sendRawOutboundEmail(host, port, rawMessage, envelope, { dkimDomain, dkimSelector })` provides the same transport behavior for exact bytes. It accepts only canonical CRLF-terminated message bytes and a canonical separate SMTP envelope, requires `dkimDomain` to equal the envelope sender domain, and loads the exact caller-supplied selector. It fails before SMTP if that selector/key cannot be loaded or Rust cannot sign the decoded bytes.
|
|
566
566
|
|
|
567
|
-
Unsigned raw relay exists for one caller: a backup MX that holds mail received for a protected domain while its primary is down and later relays the received bytes to the primary unchanged. It cannot sign third parties' mail and must not re-sign it. It is off unless requested explicitly through the Rust bridge, `RustSecurityBridge.getInstance().sendRawEmail({ ...transport, envelopeFrom, envelopeTo, rawMessageBase64, signing: 'unsignedRelay' })`, and such a request must carry no `dkim` material; Rust refuses a request that mixes the two, names an unknown `signing` mode, or omits `dkim` without the opt-in. Authenticated submission, route actions, `sendRawOutboundEmail()`, the durable raw queue and configuration can never select it: those paths always send `signing: 'dkim'` with their resolved key. The relayed bytes go out byte for byte, so they keep the original sender's own `DKIM-Signature` and smartmta adds none; an empty `envelopeFrom` relays a bounce as `MAIL FROM:<>`, and an `outboundAuthenticationCaptureId` still captures the exact relayed bytes. The bytes must use canonical CRLF line endings and end with CRLF: Rust refuses a bare LF or CR, or a missing final CRLF, before SMTP with `errorType: 'raw_message'` and `retryable: false`, and a relay must treat that refusal as permanent because retrying the same stored bytes cannot succeed. `smartMtaCapabilities.explicitUnsignedRawRelay` advertises the option.
|
|
567
|
+
Unsigned raw relay exists for one caller: a backup MX that holds mail received for a protected domain while its primary is down and later relays the received bytes to the primary unchanged. It cannot sign third parties' mail and must not re-sign it. It is off unless requested explicitly through the Rust bridge, `RustSecurityBridge.getInstance().sendRawEmail({ ...transport, envelopeFrom, envelopeTo, rawMessageBase64, signing: 'unsignedRelay' })`, and such a request must carry no `dkim` material; Rust refuses a request that mixes the two, names an unknown `signing` mode, or omits `dkim` without the opt-in. Authenticated submission, route actions, `sendRawOutboundEmail()`, the durable raw queue and configuration can never select it: those paths always send `signing: 'dkim'` with their resolved key. The relayed bytes go out byte for byte, so they keep the original sender's own `DKIM-Signature` and smartmta adds none; an empty `envelopeFrom` relays a bounce as `MAIL FROM:<>`, and an `outboundAuthenticationCaptureId` still captures the exact relayed bytes. Bytes received by the SMTP listener end with the CRLF of their last line, so a message whose sender used CRLF line endings only relays unchanged. The bytes must use canonical CRLF line endings and end with CRLF: Rust refuses a bare LF or CR, or a missing final CRLF, before SMTP with `errorType: 'raw_message'` and `retryable: false`, and a relay must treat that refusal as permanent because retrying the same stored bytes cannot succeed. `smartMtaCapabilities.explicitUnsignedRawRelay` advertises the option.
|
|
568
568
|
|
|
569
569
|
When a connection proxy returns `sourceEvidence`, successful results and
|
|
570
570
|
`SmtpDeliveryError` instances carry a non-enumerable
|
|
@@ -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
|
}
|