Replace wrong path to Rust native module with something we actually control (we aren't using the napi-rs script which is awful). I have no idea wtf musl is even doing there, as Electron is officially supported only on GNU systems. --- clients/apps/desktop/desktop_native/napi/index.js.orig 2025-01-23 19:29:20.654791775 +0100 +++ clients/apps/desktop/desktop_native/napi/index.js 2025-01-23 19:40:31.124702070 +0100 @@ -1,126 +1,7 @@ -const { existsSync } = require("fs"); -const { join } = require("path"); - -const { platform, arch } = process; - let nativeBinding = null; -let localFileExisted = false; let loadError = null; -function loadFirstAvailable(localFiles, nodeModule) { - for (const localFile of localFiles) { - if (existsSync(join(__dirname, localFile))) { - return require(`./${localFile}`); - } - } - - require(nodeModule); -} - -switch (platform) { - case "android": - switch (arch) { - case "arm64": - nativeBinding = loadFirstAvailable( - ["desktop_napi.android-arm64.node"], - "@bitwarden/desktop-napi-android-arm64", - ); - break; - case "arm": - nativeBinding = loadFirstAvailable( - ["desktop_napi.android-arm.node"], - "@bitwarden/desktop-napi-android-arm", - ); - break; - default: - throw new Error(`Unsupported architecture on Android ${arch}`); - } - break; - case "win32": - switch (arch) { - case "x64": - nativeBinding = loadFirstAvailable( - ["desktop_napi.win32-x64-msvc.node"], - "@bitwarden/desktop-napi-win32-x64-msvc", - ); - break; - case "ia32": - nativeBinding = loadFirstAvailable( - ["desktop_napi.win32-ia32-msvc.node"], - "@bitwarden/desktop-napi-win32-ia32-msvc", - ); - break; - case "arm64": - nativeBinding = loadFirstAvailable( - ["desktop_napi.win32-arm64-msvc.node"], - "@bitwarden/desktop-napi-win32-arm64-msvc", - ); - break; - default: - throw new Error(`Unsupported architecture on Windows: ${arch}`); - } - break; - case "darwin": - switch (arch) { - case "x64": - nativeBinding = loadFirstAvailable( - ["desktop_napi.darwin-x64.node"], - "@bitwarden/desktop-napi-darwin-x64", - ); - break; - case "arm64": - nativeBinding = loadFirstAvailable( - ["desktop_napi.darwin-arm64.node"], - "@bitwarden/desktop-napi-darwin-arm64", - ); - break; - default: - throw new Error(`Unsupported architecture on macOS: ${arch}`); - } - break; - case "freebsd": - nativeBinding = loadFirstAvailable( - ["desktop_napi.freebsd-x64.node"], - "@bitwarden/desktop-napi-freebsd-x64", - ); - break; - case "linux": - switch (arch) { - case "x64": - nativeBinding = loadFirstAvailable( - ["desktop_napi.linux-x64-musl.node", "desktop_napi.linux-x64-gnu.node"], - "@bitwarden/desktop-napi-linux-x64-musl", - ); - break; - case "arm64": - nativeBinding = loadFirstAvailable( - ["desktop_napi.linux-arm64-musl.node", "desktop_napi.linux-arm64-gnu.node"], - "@bitwarden/desktop-napi-linux-arm64-musl", - ); - break; - case "arm": - nativeBinding = loadFirstAvailable( - ["desktop_napi.linux-arm-musl.node", "desktop_napi.linux-arm-gnu.node"], - "@bitwarden/desktop-napi-linux-arm-musl", - ); - localFileExisted = existsSync(join(__dirname, "desktop_napi.linux-arm-gnueabihf.node")); - try { - if (localFileExisted) { - nativeBinding = require("./desktop_napi.linux-arm-gnueabihf.node"); - } else { - nativeBinding = require("@bitwarden/desktop-napi-linux-arm-gnueabihf"); - } - } catch (e) { - loadError = e; - } - break; - default: - throw new Error(`Unsupported architecture on Linux: ${arch}`); - } - break; - default: - throw new Error(`Unsupported OS: ${platform}, architecture: ${arch}`); -} +nativeBinding = require('./desktop_napi.node') if (!nativeBinding) { if (loadError) {