From c3d4c4abb5946d20e3ff8734e4ac1c0bee71e3ff Mon Sep 17 00:00:00 2001 From: Juergen Kunz Date: Wed, 11 Feb 2026 16:23:43 +0000 Subject: [PATCH] fix(rust-bridge): map Node.js platform/arch to tsrust-style suffix and add platform-specific and dev localPaths for RustBridge --- changelog.md | 8 ++++++ ts/00_commitinfo_data.ts | 2 +- ts/security/classes.rustsecuritybridge.ts | 31 +++++++++++++++++++---- 3 files changed, 35 insertions(+), 6 deletions(-) diff --git a/changelog.md b/changelog.md index d46fdb8..b07aba1 100644 --- a/changelog.md +++ b/changelog.md @@ -1,5 +1,13 @@ # Changelog +## 2026-02-11 - 5.2.1 - fix(rust-bridge) +map Node.js platform/arch to tsrust-style suffix and add platform-specific and dev localPaths for RustBridge + +- Add getPlatformSuffix() to map process.platform/process.arch to tsrust-style suffixes (e.g. linux_amd64) +- Include dist_rust/mailer-bin_{suffix} when available to prefer cross-compiled binaries +- Consolidate localPaths and add local dev build paths (rust/target/release and rust/target/debug) +- Pass the computed localPaths array into plugins.smartrust.RustBridge (searchSystemPath remains disabled) + ## 2026-02-11 - 5.2.0 - feat(packaging) add package exports entry, include ts/dist_ts in package files, and add TS barrel index re-exports diff --git a/ts/00_commitinfo_data.ts b/ts/00_commitinfo_data.ts index 2767bbe..3c368e8 100644 --- a/ts/00_commitinfo_data.ts +++ b/ts/00_commitinfo_data.ts @@ -3,6 +3,6 @@ */ export const commitinfo = { name: '@push.rocks/smartmta', - version: '5.2.0', + version: '5.2.1', description: 'A high-performance, enterprise-grade Mail Transfer Agent (MTA) built from scratch in TypeScript with Rust acceleration.' } diff --git a/ts/security/classes.rustsecuritybridge.ts b/ts/security/classes.rustsecuritybridge.ts index 2bafebe..66124e0 100644 --- a/ts/security/classes.rustsecuritybridge.ts +++ b/ts/security/classes.rustsecuritybridge.ts @@ -375,18 +375,39 @@ export class RustSecurityBridge extends EventEmitter { private _deliberateStop = false; private _smtpServerConfig: ISmtpServerConfig | null = null; + /** + * Map Node.js process.platform / process.arch to the tsrust-style suffix + * used for cross-compiled binaries, e.g. mailer-bin_linux_amd64. + */ + private static getPlatformSuffix(): string | null { + const archMap: Record = { x64: 'amd64', arm64: 'arm64' }; + const os = process.platform; // 'linux', 'darwin', 'win32', … + const arch = archMap[process.arch]; + if (!arch) return null; + return `${os}_${arch}`; + } + private constructor() { super(); + + const suffix = RustSecurityBridge.getPlatformSuffix(); + const localPaths: string[] = []; + + // dist_rust/ candidates (tsrust cross-compiled output) + if (suffix) { + localPaths.push(plugins.path.join(paths.packageDir, 'dist_rust', `mailer-bin_${suffix}`)); + } + localPaths.push(plugins.path.join(paths.packageDir, 'dist_rust', 'mailer-bin')); + // Local dev build paths + localPaths.push(plugins.path.join(paths.packageDir, 'rust', 'target', 'release', 'mailer-bin')); + localPaths.push(plugins.path.join(paths.packageDir, 'rust', 'target', 'debug', 'mailer-bin')); + this.bridge = new plugins.smartrust.RustBridge({ binaryName: 'mailer-bin', cliArgs: ['--management'], requestTimeoutMs: 30_000, readyTimeoutMs: 10_000, - localPaths: [ - plugins.path.join(paths.packageDir, 'dist_rust', 'mailer-bin'), - plugins.path.join(paths.packageDir, 'rust', 'target', 'release', 'mailer-bin'), - plugins.path.join(paths.packageDir, 'rust', 'target', 'debug', 'mailer-bin'), - ], + localPaths, searchSystemPath: false, });