From 4f4d786ca7c1724cf3a3a531a861653979586a07 Mon Sep 17 00:00:00 2001 From: Juanky Date: Tue, 11 Aug 2026 16:10:27 -0600 Subject: [PATCH 1/8] fix: new release 2.0.25 (171) --- .github/workflows/electron.yml | 30 +++++++ .gitignore | 3 + bin/printversion.ps1 | 2 +- bin/printversion.sh | 2 +- docs/windows-msix.md | 144 ++++++++++++++++++++++++++++++ flatpak/co.zingo.pc.metainfo.xml | 1 + package.json | 27 +++++- public/appx/BadgeLogo.png | Bin 0 -> 1484 bytes public/appx/LargeTile.png | Bin 0 -> 74355 bytes public/appx/SmallTile.png | Bin 0 -> 6323 bytes public/appx/SplashScreen.png | Bin 0 -> 48599 bytes public/appx/Square150x150Logo.png | Bin 0 -> 19295 bytes public/appx/Square310x310Logo.png | Bin 0 -> 74355 bytes public/appx/Square44x44Logo.png | Bin 0 -> 3382 bytes public/appx/Square71x71Logo.png | Bin 0 -> 6323 bytes public/appx/StoreLogo.png | Bin 0 -> 4035 bytes public/appx/Wide310x150Logo.png | Bin 0 -> 14884 bytes scripts/generate-appx-assets.ps1 | 71 +++++++++++++++ src/version.ts | 2 +- 19 files changed, 276 insertions(+), 6 deletions(-) create mode 100644 docs/windows-msix.md create mode 100644 public/appx/BadgeLogo.png create mode 100644 public/appx/LargeTile.png create mode 100644 public/appx/SmallTile.png create mode 100644 public/appx/SplashScreen.png create mode 100644 public/appx/Square150x150Logo.png create mode 100644 public/appx/Square310x310Logo.png create mode 100644 public/appx/Square44x44Logo.png create mode 100644 public/appx/Square71x71Logo.png create mode 100644 public/appx/StoreLogo.png create mode 100644 public/appx/Wide310x150Logo.png create mode 100644 scripts/generate-appx-assets.ps1 diff --git a/.github/workflows/electron.yml b/.github/workflows/electron.yml index af8d84d4..1463b471 100644 --- a/.github/workflows/electron.yml +++ b/.github/workflows/electron.yml @@ -162,6 +162,23 @@ jobs: if: matrix.platform == 'win' run: yarn ${{ matrix.dist_script }} + # The MSIX is the Microsoft Store artifact. The Store re-signs it on upload, + # which is what gets it past Smart App Control — the zip/msi above are + # unsigned and blocked. Reuses what the previous step already built, so this + # costs seconds rather than another Rust + webpack cycle. + # + # Skipped until the three repository variables are set (see + # docs/windows-msix.md); they come from Partner Center once the app is + # reserved and must match its product identity byte for byte. + - name: Build MSIX (Microsoft Store) + if: matrix.platform == 'win' && matrix.arch == 'x64' && vars.STORE_IDENTITY_NAME != '' + run: > + npx electron-builder -w appx --x64 + -c.extraMetadata.main=build/electron.js --publish never + -c.appx.identityName="${{ vars.STORE_IDENTITY_NAME }}" + -c.appx.publisher="${{ vars.STORE_PUBLISHER }}" + -c.appx.publisherDisplayName="${{ vars.STORE_PUBLISHER_DISPLAY_NAME }}" + - name: Upload artifacts (Linux) uses: actions/upload-artifact@v4 if: matrix.platform == 'linux' @@ -194,6 +211,13 @@ jobs: dist/*.msi dist/*.zip + - name: Upload MSIX (Microsoft Store) + uses: actions/upload-artifact@v4 + if: matrix.platform == 'win' && matrix.arch == 'x64' && vars.STORE_IDENTITY_NAME != '' + with: + name: zingo-pc-store-msix + path: dist/*.appx + flatpak: needs: build runs-on: ubuntu-latest @@ -246,6 +270,12 @@ jobs: path: artifacts merge-multiple: false + # The .appx is only useful to Partner Center, which signs it on upload. + # As downloaded from a release it is unsigned and cannot be installed, so + # publishing it would just hand users a file that fails. + - name: Keep the Store package out of the public release + run: rm -rf artifacts/zingo-pc-store-msix + - name: Generate release notes id: notes uses: actions/github-script@v7 diff --git a/.gitignore b/.gitignore index 0768a31a..fd3270c5 100644 --- a/.gitignore +++ b/.gitignore @@ -35,3 +35,6 @@ npm-debug.log* yarn-debug.log* yarn-error.log* *.provisionprofile + +# throwaway self-signed cert for sideloading local MSIX builds (docs/windows-msix.md) +zingo-dev.pfx diff --git a/bin/printversion.ps1 b/bin/printversion.ps1 index 81d7688d..dc9f7f8e 100644 --- a/bin/printversion.ps1 +++ b/bin/printversion.ps1 @@ -1 +1 @@ -echo "VERSION=2.0.24-170" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append +echo "VERSION=2.0.25-171" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append diff --git a/bin/printversion.sh b/bin/printversion.sh index d2cd4d1a..ce690dd9 100755 --- a/bin/printversion.sh +++ b/bin/printversion.sh @@ -1,3 +1,3 @@ #!/bin/bash -VERSION="2.0.24-170" +VERSION="2.0.25-171" echo "VERSION=$VERSION" >> $GITHUB_ENV diff --git a/docs/windows-msix.md b/docs/windows-msix.md new file mode 100644 index 00000000..627d67a2 --- /dev/null +++ b/docs/windows-msix.md @@ -0,0 +1,144 @@ +# Windows MSIX / AppX packaging + +Zingo PC's Windows artifacts (`zip`, `msi`) are unsigned, so Windows Smart App Control +blocks them. Publishing an **MSIX package through the Microsoft Store** sidesteps that: +the Store signs the package with Microsoft's own certificate, and Store-installed apps +are trusted by Smart App Control. No code signing certificate has to be bought or +validated. + +This is a separate channel, not a replacement — users who download the `zip`/`msi` from +GitHub releases are still affected until those artifacts get signed. + +## Build + +``` +yarn dist:win-msix +``` + +Produces `dist/Zingo PC .appx`. Requires the Windows 10/11 SDK (`makeappx.exe`, +`signtool.exe`); electron-builder downloads its own copy on first run. + +The `appx` target is deliberately *not* in `build.win.target` — `dist:win-x64` keeps +producing only `zip` and `msi`, and the MSIX is built on demand. + +## Testing locally before touching Partner Center + +The Store signs the package on upload, but an unsigned `.appx` cannot be sideloaded, so +local testing needs a self-signed certificate whose subject matches `build.appx.publisher` +exactly (currently `CN=Zingo PC Dev`). + +```powershell +# 1. Create the cert (once) +$cert = New-SelfSignedCertificate -Type Custom -Subject "CN=Zingo PC Dev" ` + -KeyUsage DigitalSignature -FriendlyName "Zingo PC Dev" ` + -CertStoreLocation "Cert:\CurrentUser\My" ` + -TextExtension @("2.5.29.37={text}1.3.6.1.5.5.7.3.3", "2.5.29.19={text}") + +# 2. Export it and trust it ($pwd is a PowerShell automatic variable — do not reuse the name) +$certPwd = ConvertTo-SecureString -String "devpass" -Force -AsPlainText +Export-PfxCertificate -Cert "Cert:\CurrentUser\My\$($cert.Thumbprint)" ` + -FilePath zingo-dev.pfx -Password $certPwd +Import-PfxCertificate -FilePath zingo-dev.pfx -Password $certPwd ` + -CertStoreLocation "Cert:\LocalMachine\TrustedPeople" + +# 3. Sign the built package +$signtool = Get-ChildItem "${env:ProgramFiles(x86)}\Windows Kits\10\bin\*\x64\signtool.exe" | + Sort-Object FullName | Select-Object -Last 1 +& $signtool.FullName sign /fd SHA256 /f zingo-dev.pfx /p devpass "dist\Zingo PC .appx" + +# 4. Install +Add-AppxPackage "dist\Zingo PC .appx" +``` + +`zingo-dev.pfx` is a throwaway development credential — do not commit it and do not reuse +it for anything else. + +## What to verify in the packaged app + +MSIX runs full-trust but virtualizes filesystem and registry writes, so these are the +parts most likely to behave differently from the `msi` build: + +- **`zcash:` URI handling.** `app.setAsDefaultProtocolClient` in `public/electron.js` cannot + register the scheme from inside an MSIX container — its registry writes are virtualized. + The scheme is instead declared in the package manifest, generated from `build.win.protocols`. + Test both paths: app closed (cold start) and app already running (`second-instance`). +- **`keytar`.** Credential Manager access from a packaged app. +- **`nym-proxy.exe`.** Spawned as a child process from `extraResources`; confirm it launches + and that its listening socket works. +- **`electron-settings` / `electron-json-storage`.** Writes to `%APPDATA%` are redirected to + the package's private store. Existing users migrating from the `msi` build will not see + their previous settings. + +## Switching from dev values to Store values + +`build.appx` currently holds development placeholders. Three fields must be replaced with +the values Partner Center assigns once the app is reserved: + +| Field | Where it comes from | +| --- | --- | +| `identityName` | Partner Center → app → Product identity → *Package/Identity/Name* | +| `publisher` | Partner Center → app → Product identity → *Package/Identity/Publisher* (the `CN=...` string) | +| `publisherDisplayName` | Partner Center → app → Product identity → *Package/Properties/PublisherDisplayName* | + +They must match byte for byte or the upload is rejected. + +Either edit `package.json` or override at build time without touching the file: + +``` +electron-builder -w appx --x64 -c.extraMetadata.main=build/electron.js --publish never \ + -c.appx.identityName=... -c.appx.publisher="CN=..." -c.appx.publisherDisplayName=... +``` + +Upload the resulting `.appx` unsigned — Partner Center re-signs it. + +## Store assets + +The tile assets live in `public/appx/` (`build.directories.buildResources` is `public`) and +are generated from `resources/icon.png`: + +``` +powershell -ExecutionPolicy Bypass -File scripts/generate-appx-assets.ps1 +``` + +Re-run it whenever the icon changes. Without these files electron-builder silently falls +back to its own placeholder images — a local build still succeeds, but Store certification +fails. + +## CI + +`.github/workflows/electron.yml` builds the MSIX in the Windows x64 job, reusing the output +of `dist:win-x64` rather than running a second Rust + webpack cycle. It is uploaded as its +own artifact (`zingo-pc-store-msix`) and **deliberately excluded from the GitHub release**: +as produced by CI the package is unsigned, so a user who downloaded it could not install it. +Only Partner Center can use it, because the Store signs it on upload. + +The step is skipped unless three **repository variables** are set (Settings → Secrets and +variables → Actions → Variables). They are identifiers, not secrets: + +| Variable | Partner Center → app → Product identity | +| --- | --- | +| `STORE_IDENTITY_NAME` | *Package/Identity/Name* | +| `STORE_PUBLISHER` | *Package/Identity/Publisher* (the full `CN=...`) | +| `STORE_PUBLISHER_DISPLAY_NAME` | *Package/Properties/PublisherDisplayName* | + +Until they exist the whole MSIX path is inert and the release keeps its current shape. + +Only x64 is built for the Store. Adding arm64 means a second package and a second entry in +the same submission; nothing in the config prevents it, it just is not wired up. + +## Publishing + +The first submission has to be done by hand — reserving the name, the listing, screenshots, +age rating and privacy policy have no unattended path: + +1. Register at `partner.microsoft.com` (individual account, one-off fee) and pass identity + verification. +2. Reserve the app name. That is what mints the product identity values above. +3. Set the three repository variables, then push a `zingo-pc-*` tag. +4. Download the `zingo-pc-store-msix` artifact from the run and upload the `.appx` to the + submission. Upload it unsigned — Partner Center re-signs it. +5. Complete the listing and submit for certification. + +Later submissions can be automated with the Microsoft Store submission API, which needs an +Entra tenant with an app registration linked under Partner Center → Account settings → User +management. Worth doing only once the manual flow has gone through at least once. diff --git a/flatpak/co.zingo.pc.metainfo.xml b/flatpak/co.zingo.pc.metainfo.xml index 49b1f0cb..333fda09 100644 --- a/flatpak/co.zingo.pc.metainfo.xml +++ b/flatpak/co.zingo.pc.metainfo.xml @@ -55,6 +55,7 @@ + diff --git a/package.json b/package.json index 92d53021..73eed257 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "zingo-pc", "productName": "Zingo PC", - "version": "2.0.24", + "version": "2.0.25", "private": true, "description": "Zingo PC", "license": "MIT", @@ -67,6 +67,7 @@ "dist:mac-x64": "rimraf dist && yarn build-mac-x64 && node scripts/stage-nym-proxy.js --target x86_64-apple-darwin && electron-builder -m --x64 -c.extraMetadata.main=build/electron.js --publish never", "dist:win-arm64": "rimraf dist && yarn build-win-arm64 && node scripts/stage-nym-proxy.js --target aarch64-pc-windows-msvc && electron-builder -w --arm64 -c.extraMetadata.main=build/electron.js --publish never", "dist:win-x64": "rimraf dist && yarn build-win-x64 && node scripts/stage-nym-proxy.js --target x86_64-pc-windows-msvc && electron-builder -w --x64 -c.extraMetadata.main=build/electron.js --publish never", + "dist:win-msix": "rimraf dist && yarn build-win-x64 && node scripts/stage-nym-proxy.js --target x86_64-pc-windows-msvc && electron-builder -w appx --x64 -c.extraMetadata.main=build/electron.js --publish never", "react-start": "cross-env node scripts/start.js", "neon": "rimraf src/native.node && cargo-cp-artifact -a cdylib zingolib-native src/native.node -- cargo build --release --manifest-path native/Cargo.toml --message-format=json-render-diagnostics", "neon-mac-x64": "rimraf src/native.node && cargo-cp-artifact -a cdylib zingolib-native src/native.node -- cargo build --release --target x86_64-apple-darwin --manifest-path native/Cargo.toml --message-format=json-render-diagnostics", @@ -224,7 +225,7 @@ "hardenedRuntime": true, "gatekeeperAssess": false, "entitlements": "./configs/entitlements.mac.inherit.plist", - "bundleVersion": "170", + "bundleVersion": "171", "extendInfo": { "ITSAppUsesNonExemptEncryption": false }, @@ -252,7 +253,7 @@ "entitlements": "./configs/entitlements.mas.plist", "entitlementsInherit": "./configs/entitlements.mas.inherit.plist", "provisioningProfile": "./configs/Zingo_PC_Profile.provisionprofile", - "bundleVersion": "170", + "bundleVersion": "171", "extendInfo": { "ITSAppUsesNonExemptEncryption": false }, @@ -275,6 +276,14 @@ "zip", "msi" ], + "protocols": [ + { + "name": "Zcash", + "schemes": [ + "zcash" + ] + } + ], "extraResources": [ { "from": "resources/nym-proxy.exe", @@ -282,6 +291,18 @@ } ] }, + "appx": { + "applicationId": "ZingoPC", + "identityName": "ZingoPC", + "publisher": "CN=Zingo PC Dev", + "publisherDisplayName": "Zingo PC Dev", + "displayName": "Zingo PC", + "backgroundColor": "#06172d", + "showNameOnTiles": true, + "languages": [ + "en-US" + ] + }, "deb": { "afterInstall": "scripts/postinstall.sh", "afterRemove": "scripts/postremove.sh" diff --git a/public/appx/BadgeLogo.png b/public/appx/BadgeLogo.png new file mode 100644 index 0000000000000000000000000000000000000000..64e8f277f93bdd9ea052d15653bcd826774894cf GIT binary patch literal 1484 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%0Ae`&Ut>E#B%I}`Z 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 literal 0 HcmV?d00001 diff --git a/public/appx/SmallTile.png b/public/appx/SmallTile.png new file mode 100644 index 0000000000000000000000000000000000000000..b129c3ab9d08146c2c9e0e4def2ab958163992fb GIT binary patch literal 6323 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 literal 0 HcmV?d00001 diff --git a/public/appx/SplashScreen.png b/public/appx/SplashScreen.png new file mode 100644 index 0000000000000000000000000000000000000000..bbcacc7f4bd3c93ddfae5b23e7e3c273a80973c7 GIT binary patch literal 48599 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 literal 0 HcmV?d00001 diff --git a/public/appx/Square150x150Logo.png b/public/appx/Square150x150Logo.png new file mode 100644 index 0000000000000000000000000000000000000000..73121b1976c1256d9eb229a1378176445f26e5d7 GIT binary patch literal 19295 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 Sxu?be0000%6|H00001b5ch_0Itp) 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%0Ae`&Ut>E#B%I}`Z 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 literal 0 HcmV?d00001 diff --git a/public/appx/Square44x44Logo.png b/public/appx/Square44x44Logo.png new file mode 100644 index 0000000000000000000000000000000000000000..5ec97f5bf29132d47b3c98918fe5b9a840113510 GIT binary patch literal 3382 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 literal 0 HcmV?d00001 diff --git a/public/appx/StoreLogo.png b/public/appx/StoreLogo.png new file mode 100644 index 0000000000000000000000000000000000000000..51d1f1e0a0ff6d6e9a05b8a0c3a41be602372e59 GIT binary patch literal 4035 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 Date: Tue, 11 Aug 2026 17:02:57 -0600 Subject: [PATCH 2/8] fix: new release 2.0.25 (172) --- .github/workflows/electron.yml | 32 +++++++++++++++++++++----------- bin/printversion.ps1 | 2 +- bin/printversion.sh | 2 +- docs/windows-msix.md | 12 ++++++++---- package.json | 4 ++-- src/version.ts | 2 +- 6 files changed, 34 insertions(+), 20 deletions(-) diff --git a/.github/workflows/electron.yml b/.github/workflows/electron.yml index 1463b471..daeda606 100644 --- a/.github/workflows/electron.yml +++ b/.github/workflows/electron.yml @@ -167,17 +167,27 @@ jobs: # unsigned and blocked. Reuses what the previous step already built, so this # costs seconds rather than another Rust + webpack cycle. # - # Skipped until the three repository variables are set (see - # docs/windows-msix.md); they come from Partner Center once the app is - # reserved and must match its product identity byte for byte. + # The three values come from Partner Center once the app is reserved + # (docs/windows-msix.md) and must match its product identity byte for byte. + # They are read through env rather than inlined: the secrets context is not + # dependable inside a step `if`, and a missing one has to fail loudly — a + # skipped step just leaves you hunting for an artifact that never appeared. - name: Build MSIX (Microsoft Store) - if: matrix.platform == 'win' && matrix.arch == 'x64' && vars.STORE_IDENTITY_NAME != '' - run: > - npx electron-builder -w appx --x64 - -c.extraMetadata.main=build/electron.js --publish never - -c.appx.identityName="${{ vars.STORE_IDENTITY_NAME }}" - -c.appx.publisher="${{ vars.STORE_PUBLISHER }}" - -c.appx.publisherDisplayName="${{ vars.STORE_PUBLISHER_DISPLAY_NAME }}" + if: matrix.platform == 'win' && matrix.arch == 'x64' + shell: bash + env: + STORE_IDENTITY_NAME: ${{ secrets.STORE_IDENTITY_NAME }} + STORE_PUBLISHER: ${{ secrets.STORE_PUBLISHER }} + STORE_PUBLISHER_DISPLAY_NAME: ${{ secrets.STORE_PUBLISHER_DISPLAY_NAME }} + run: | + : "${STORE_IDENTITY_NAME:?missing repository secret STORE_IDENTITY_NAME (Partner Center > Product identity > Package/Identity/Name)}" + : "${STORE_PUBLISHER:?missing repository secret STORE_PUBLISHER (Partner Center > Product identity > Package/Identity/Publisher)}" + : "${STORE_PUBLISHER_DISPLAY_NAME:?missing repository secret STORE_PUBLISHER_DISPLAY_NAME (Partner Center > Product identity > Package/Properties/PublisherDisplayName)}" + npx electron-builder -w appx --x64 \ + -c.extraMetadata.main=build/electron.js --publish never \ + -c.appx.identityName="$STORE_IDENTITY_NAME" \ + -c.appx.publisher="$STORE_PUBLISHER" \ + -c.appx.publisherDisplayName="$STORE_PUBLISHER_DISPLAY_NAME" - name: Upload artifacts (Linux) uses: actions/upload-artifact@v4 @@ -213,7 +223,7 @@ jobs: - name: Upload MSIX (Microsoft Store) uses: actions/upload-artifact@v4 - if: matrix.platform == 'win' && matrix.arch == 'x64' && vars.STORE_IDENTITY_NAME != '' + if: matrix.platform == 'win' && matrix.arch == 'x64' with: name: zingo-pc-store-msix path: dist/*.appx diff --git a/bin/printversion.ps1 b/bin/printversion.ps1 index dc9f7f8e..a0748cb3 100644 --- a/bin/printversion.ps1 +++ b/bin/printversion.ps1 @@ -1 +1 @@ -echo "VERSION=2.0.25-171" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append +echo "VERSION=2.0.25-172" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append diff --git a/bin/printversion.sh b/bin/printversion.sh index ce690dd9..449b8939 100755 --- a/bin/printversion.sh +++ b/bin/printversion.sh @@ -1,3 +1,3 @@ #!/bin/bash -VERSION="2.0.25-171" +VERSION="2.0.25-172" echo "VERSION=$VERSION" >> $GITHUB_ENV diff --git a/docs/windows-msix.md b/docs/windows-msix.md index 627d67a2..9a960b8f 100644 --- a/docs/windows-msix.md +++ b/docs/windows-msix.md @@ -112,16 +112,20 @@ own artifact (`zingo-pc-store-msix`) and **deliberately excluded from the GitHub as produced by CI the package is unsigned, so a user who downloaded it could not install it. Only Partner Center can use it, because the Store signs it on upload. -The step is skipped unless three **repository variables** are set (Settings → Secrets and -variables → Actions → Variables). They are identifiers, not secrets: +It needs three **repository secrets** (Settings → Secrets and variables → Actions → Secrets), +kept alongside the Apple signing values for consistency: -| Variable | Partner Center → app → Product identity | +| Secret | Partner Center → app → Product identity | | --- | --- | | `STORE_IDENTITY_NAME` | *Package/Identity/Name* | | `STORE_PUBLISHER` | *Package/Identity/Publisher* (the full `CN=...`) | | `STORE_PUBLISHER_DISPLAY_NAME` | *Package/Properties/PublisherDisplayName* | -Until they exist the whole MSIX path is inert and the release keeps its current shape. +If any is missing the step fails with a message naming it, rather than skipping quietly. + +Note they are masked as `***` in the run log. If Partner Center ever rejects a package for a +publisher mismatch, compare against Partner Center directly — the log will not show you the +value that was used. Only x64 is built for the Store. Adding arm64 means a second package and a second entry in the same submission; nothing in the config prevents it, it just is not wired up. diff --git a/package.json b/package.json index 73eed257..ab597b9c 100644 --- a/package.json +++ b/package.json @@ -225,7 +225,7 @@ "hardenedRuntime": true, "gatekeeperAssess": false, "entitlements": "./configs/entitlements.mac.inherit.plist", - "bundleVersion": "171", + "bundleVersion": "172", "extendInfo": { "ITSAppUsesNonExemptEncryption": false }, @@ -253,7 +253,7 @@ "entitlements": "./configs/entitlements.mas.plist", "entitlementsInherit": "./configs/entitlements.mas.inherit.plist", "provisioningProfile": "./configs/Zingo_PC_Profile.provisionprofile", - "bundleVersion": "171", + "bundleVersion": "172", "extendInfo": { "ITSAppUsesNonExemptEncryption": false }, diff --git a/src/version.ts b/src/version.ts index 7ef17843..fa313b06 100644 --- a/src/version.ts +++ b/src/version.ts @@ -1,3 +1,3 @@ -const APP_VERSION = "2.0.25 (171)"; +const APP_VERSION = "2.0.25 (172)"; export default APP_VERSION; From 2f44f935beeb07fc0c4d0d0c5df9d4faba98ff7a Mon Sep 17 00:00:00 2001 From: Juanky Date: Wed, 12 Aug 2026 15:18:48 -0600 Subject: [PATCH 3/8] fix: new release 2.0.25 (173) --- .github/workflows/electron.yml | 60 +++++++------ bin/printversion.ps1 | 2 +- bin/printversion.sh | 2 +- docs/windows-msix.md | 144 +++++++++++++++++-------------- docs/windows-signing.md | 89 +++++++++++++++++++ flatpak/co.zingo.pc.metainfo.xml | 2 +- package.json | 23 +++-- src/version.ts | 2 +- 8 files changed, 219 insertions(+), 105 deletions(-) create mode 100644 docs/windows-signing.md diff --git a/.github/workflows/electron.yml b/.github/workflows/electron.yml index daeda606..f9d7d8e2 100644 --- a/.github/workflows/electron.yml +++ b/.github/workflows/electron.yml @@ -158,36 +158,29 @@ jobs: CSC_NAME: "Distheirs LLC (788KRST4S8)" run: yarn ${{ matrix.dist_script }} + # Signed through Azure Artifact Signing (build.win.azureSignOptions). The + # certificate lives in Azure, never on disk; these three variables are what + # electron-builder's EnvironmentCredential authenticates with. - name: Build (Windows) if: matrix.platform == 'win' + env: + AZURE_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }} + AZURE_CLIENT_ID: ${{ secrets.AZURE_CLIENT_ID }} + AZURE_CLIENT_SECRET: ${{ secrets.AZURE_CLIENT_SECRET }} run: yarn ${{ matrix.dist_script }} - # The MSIX is the Microsoft Store artifact. The Store re-signs it on upload, - # which is what gets it past Smart App Control — the zip/msi above are - # unsigned and blocked. Reuses what the previous step already built, so this - # costs seconds rather than another Rust + webpack cycle. + # The Store package. Locally this is `yarn dist:win-msix-`, mirroring + # dist:mac-mas; here electron-builder is called directly so it reuses what the + # step above produced instead of wiping dist/ and rebuilding Rust for the + # third time. # - # The three values come from Partner Center once the app is reserved - # (docs/windows-msix.md) and must match its product identity byte for byte. - # They are read through env rather than inlined: the secrets context is not - # dependable inside a step `if`, and a missing one has to fail loudly — a - # skipped step just leaves you hunting for an artifact that never appeared. + # signAndEditExecutable=false is load-bearing: Partner Center re-signs the + # package itself and requires it unsigned, and our certificate subject + # (CN=Juan Carlos Carmona Calvo) does not match the package publisher + # (CN=96EC5B6E-…) anyway, which would make the .appx invalid. - name: Build MSIX (Microsoft Store) - if: matrix.platform == 'win' && matrix.arch == 'x64' - shell: bash - env: - STORE_IDENTITY_NAME: ${{ secrets.STORE_IDENTITY_NAME }} - STORE_PUBLISHER: ${{ secrets.STORE_PUBLISHER }} - STORE_PUBLISHER_DISPLAY_NAME: ${{ secrets.STORE_PUBLISHER_DISPLAY_NAME }} - run: | - : "${STORE_IDENTITY_NAME:?missing repository secret STORE_IDENTITY_NAME (Partner Center > Product identity > Package/Identity/Name)}" - : "${STORE_PUBLISHER:?missing repository secret STORE_PUBLISHER (Partner Center > Product identity > Package/Identity/Publisher)}" - : "${STORE_PUBLISHER_DISPLAY_NAME:?missing repository secret STORE_PUBLISHER_DISPLAY_NAME (Partner Center > Product identity > Package/Properties/PublisherDisplayName)}" - npx electron-builder -w appx --x64 \ - -c.extraMetadata.main=build/electron.js --publish never \ - -c.appx.identityName="$STORE_IDENTITY_NAME" \ - -c.appx.publisher="$STORE_PUBLISHER" \ - -c.appx.publisherDisplayName="$STORE_PUBLISHER_DISPLAY_NAME" + if: matrix.platform == 'win' + run: npx electron-builder -w appx --${{ matrix.arch }} -c.extraMetadata.main=build/electron.js -c.win.signAndEditExecutable=false --publish never - name: Upload artifacts (Linux) uses: actions/upload-artifact@v4 @@ -221,11 +214,16 @@ jobs: dist/*.msi dist/*.zip + # Produced by dist:win-* alongside the msi/zip, but kept in its own artifact: + # this one goes to Partner Center, which signs it on upload. That signature is + # what gets it past Smart App Control — the msi/zip above stay unsigned and + # blocked. It is excluded from the public release in the release job, since + # unsigned it cannot be installed by anyone who downloads it. - name: Upload MSIX (Microsoft Store) uses: actions/upload-artifact@v4 - if: matrix.platform == 'win' && matrix.arch == 'x64' + if: matrix.platform == 'win' with: - name: zingo-pc-store-msix + name: zingo-pc-win-msix-${{ matrix.arch }} path: dist/*.appx flatpak: @@ -280,11 +278,11 @@ jobs: path: artifacts merge-multiple: false - # The .appx is only useful to Partner Center, which signs it on upload. - # As downloaded from a release it is unsigned and cannot be installed, so - # publishing it would just hand users a file that fails. - - name: Keep the Store package out of the public release - run: rm -rf artifacts/zingo-pc-store-msix + # Store-bound packages, not user downloads. The .appx goes to Partner Center + # and the .pkg to App Store Connect; both are signed by the store on upload, + # so as published on a release page they are files nobody can install. + - name: Keep the store packages out of the public release + run: rm -rf artifacts/zingo-pc-win-msix-* artifacts/zingo-pc-mas-* - name: Generate release notes id: notes diff --git a/bin/printversion.ps1 b/bin/printversion.ps1 index a0748cb3..b2265ad4 100644 --- a/bin/printversion.ps1 +++ b/bin/printversion.ps1 @@ -1 +1 @@ -echo "VERSION=2.0.25-172" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append +echo "VERSION=2.0.25-173" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append diff --git a/bin/printversion.sh b/bin/printversion.sh index 449b8939..8eacb7ef 100755 --- a/bin/printversion.sh +++ b/bin/printversion.sh @@ -1,3 +1,3 @@ #!/bin/bash -VERSION="2.0.25-172" +VERSION="2.0.25-173" echo "VERSION=$VERSION" >> $GITHUB_ENV diff --git a/docs/windows-msix.md b/docs/windows-msix.md index 9a960b8f..89087ad1 100644 --- a/docs/windows-msix.md +++ b/docs/windows-msix.md @@ -12,23 +12,61 @@ GitHub releases are still affected until those artifacts get signed. ## Build ``` -yarn dist:win-msix +yarn dist:win-msix-x64 # or dist:win-msix-arm64 ``` -Produces `dist/Zingo PC .appx`. Requires the Windows 10/11 SDK (`makeappx.exe`, -`signtool.exe`); electron-builder downloads its own copy on first run. +Its own script, the same way `dist:mac-mas` sits beside `dist:mac-x64`: the store package is +built separately from the ones that go on the release page. `appx` is deliberately **not** in +`build.win.target`, so `dist:win-x64` keeps producing just `zip` and `msi`. -The `appx` target is deliberately *not* in `build.win.target` — `dist:win-x64` keeps -producing only `zip` and `msi`, and the MSIX is built on demand. +Output is `dist/Zingo PC .appx` (`-arm64.appx` on the other arch), carrying the real +Partner Center identity from `build.appx` and ready to upload as-is. -## Testing locally before touching Partner Center +Two things this separation buys locally: -The Store signs the package on upload, but an unsigned `.appx` cannot be sideloaded, so -local testing needs a self-signed certificate whose subject matches `build.appx.publisher` -exactly (currently `CN=Zingo PC Dev`). +- The `msi` target needs an **elevated** shell. WiX cannot run ICE validation under a + restricted system policy, and electron-builder passes `-wx`, so that warning becomes + `LGHT1105` and kills the build. The MSIX script never touches WiX. +- No Rust rebuild is wasted on targets you are not shipping to the Store. + +Requires the Windows 10/11 SDK (`makeappx.exe`, `signtool.exe`); electron-builder downloads +its own copy on first run. That extraction needs symlink privileges — enable Developer Mode +(Settings → System → For developers), or the build dies unpacking `winCodeSign` with +"Cannot create symbolic link". + +## Product identity + +`build.appx` holds the values Partner Center assigned when the app name was reserved. They +are not secrets — every published package carries them in its manifest — but they must match +Partner Center **byte for byte** or the upload is rejected: + +| Field | Partner Center → app → Product identity | +| --- | --- | +| `identityName` | *Package/Identity/Name* | +| `publisher` | *Package/Identity/Publisher* (the full `CN=...`) | +| `publisherDisplayName` | *Package/Properties/PublisherDisplayName* | + +`applicationId` is ours, not Partner Center's, and is unrelated to the Store. + +The package version comes from `package.json`; the Store requires the fourth component to be +`0` (electron-builder does this) and the version to increase on every submission. + +## Testing locally + +The `.appx` that `dist:win-*` produces **cannot be sideloaded** — it is unsigned, and its +publisher is the Store's, not a certificate you hold. The two are mutually exclusive by +design: what you can install locally is not what you can upload. + +To install one on this machine, rebuild with a development identity and sign it yourself: + +``` +npx electron-builder -w appx --x64 -c.extraMetadata.main=build/electron.js --publish never ^ + -c.appx.identityName=ZingoPC -c.appx.publisher="CN=Zingo PC Dev" ^ + -c.appx.publisherDisplayName="Zingo PC Dev" +``` ```powershell -# 1. Create the cert (once) +# 1. Create the cert (once). Subject must equal the publisher above, exactly. $cert = New-SelfSignedCertificate -Type Custom -Subject "CN=Zingo PC Dev" ` -KeyUsage DigitalSignature -FriendlyName "Zingo PC Dev" ` -CertStoreLocation "Cert:\CurrentUser\My" ` @@ -41,56 +79,40 @@ Export-PfxCertificate -Cert "Cert:\CurrentUser\My\$($cert.Thumbprint)" ` Import-PfxCertificate -FilePath zingo-dev.pfx -Password $certPwd ` -CertStoreLocation "Cert:\LocalMachine\TrustedPeople" -# 3. Sign the built package +# 3. Sign and install $signtool = Get-ChildItem "${env:ProgramFiles(x86)}\Windows Kits\10\bin\*\x64\signtool.exe" | Sort-Object FullName | Select-Object -Last 1 & $signtool.FullName sign /fd SHA256 /f zingo-dev.pfx /p devpass "dist\Zingo PC .appx" - -# 4. Install Add-AppxPackage "dist\Zingo PC .appx" ``` -`zingo-dev.pfx` is a throwaway development credential — do not commit it and do not reuse -it for anything else. +`zingo-dev.pfx` is a throwaway credential (gitignored) — do not reuse it for anything else. + +Both installs show up as "Zingo PC" in the Start menu and are indistinguishable there. Launch +the packaged one explicitly: + +```powershell +Start-Process "shell:AppsFolder\$((Get-AppxPackage *ZingoPC*).PackageFamilyName)!ZingoPC" +``` ## What to verify in the packaged app -MSIX runs full-trust but virtualizes filesystem and registry writes, so these are the -parts most likely to behave differently from the `msi` build: +MSIX runs full-trust but virtualizes filesystem and registry writes, so these are the parts +most likely to behave differently from the `msi` build: - **`zcash:` URI handling.** `app.setAsDefaultProtocolClient` in `public/electron.js` cannot register the scheme from inside an MSIX container — its registry writes are virtualized. The scheme is instead declared in the package manifest, generated from `build.win.protocols`. Test both paths: app closed (cold start) and app already running (`second-instance`). -- **`keytar`.** Credential Manager access from a packaged app. +- **`keytar`.** `getRequireAuth`/`setRequireAuth` swallow any keytar failure and fall back to + `settings.json`, so a broken keytar looks like a working app. Prove it by toggling the + device-auth setting and checking that a `Zingo PC` entry appears in Credential Manager. - **`nym-proxy.exe`.** Spawned as a child process from `extraResources`; confirm it launches and that its listening socket works. - **`electron-settings` / `electron-json-storage`.** Writes to `%APPDATA%` are redirected to the package's private store. Existing users migrating from the `msi` build will not see their previous settings. -## Switching from dev values to Store values - -`build.appx` currently holds development placeholders. Three fields must be replaced with -the values Partner Center assigns once the app is reserved: - -| Field | Where it comes from | -| --- | --- | -| `identityName` | Partner Center → app → Product identity → *Package/Identity/Name* | -| `publisher` | Partner Center → app → Product identity → *Package/Identity/Publisher* (the `CN=...` string) | -| `publisherDisplayName` | Partner Center → app → Product identity → *Package/Properties/PublisherDisplayName* | - -They must match byte for byte or the upload is rejected. - -Either edit `package.json` or override at build time without touching the file: - -``` -electron-builder -w appx --x64 -c.extraMetadata.main=build/electron.js --publish never \ - -c.appx.identityName=... -c.appx.publisher="CN=..." -c.appx.publisherDisplayName=... -``` - -Upload the resulting `.appx` unsigned — Partner Center re-signs it. - ## Store assets The tile assets live in `public/appx/` (`build.directories.buildResources` is `public`) and @@ -106,29 +128,22 @@ fails. ## CI -`.github/workflows/electron.yml` builds the MSIX in the Windows x64 job, reusing the output -of `dist:win-x64` rather than running a second Rust + webpack cycle. It is uploaded as its -own artifact (`zingo-pc-store-msix`) and **deliberately excluded from the GitHub release**: -as produced by CI the package is unsigned, so a user who downloaded it could not install it. -Only Partner Center can use it, because the Store signs it on upload. - -It needs three **repository secrets** (Settings → Secrets and variables → Actions → Secrets), -kept alongside the Apple signing values for consistency: - -| Secret | Partner Center → app → Product identity | -| --- | --- | -| `STORE_IDENTITY_NAME` | *Package/Identity/Name* | -| `STORE_PUBLISHER` | *Package/Identity/Publisher* (the full `CN=...`) | -| `STORE_PUBLISHER_DISPLAY_NAME` | *Package/Properties/PublisherDisplayName* | +`.github/workflows/electron.yml` builds the MSIX inside the existing Windows job rather than +calling `dist:win-msix-*`, which would `rimraf dist` and rebuild Rust from scratch a third +time. It reuses what `dist:win-` just produced, so it costs seconds. -If any is missing the step fails with a message naming it, rather than skipping quietly. +That is the one place the MAS symmetry stops. MAS earns its own matrix entry because it is a +genuinely different build — universal lipo, different entitlements, different signing. The +Store MSIX is the same build output packed into another container, so a second +electron-builder call in the same job is enough. -Note they are masked as `***` in the run log. If Partner Center ever rejects a package for a -publisher mismatch, compare against Partner Center directly — the log will not show you the -value that was used. +It is uploaded as its own artifact (`zingo-pc-win-msix-x64` / `-arm64`) and **excluded from +the GitHub release**, along with the MAS `.pkg`. Both are store-bound: signed by Apple and +Microsoft on upload, so on a release page they would be things nobody can install. -Only x64 is built for the Store. Adding arm64 means a second package and a second entry in -the same submission; nothing in the config prevents it, it just is not wired up. +Download both `.appx` files and upload them to the same submission — Partner Center serves +each machine the matching one. An x64-only listing would still run on Windows on ARM through +emulation, just slower and with worse battery life. ## Publishing @@ -138,10 +153,11 @@ age rating and privacy policy have no unattended path: 1. Register at `partner.microsoft.com` (individual account, one-off fee) and pass identity verification. 2. Reserve the app name. That is what mints the product identity values above. -3. Set the three repository variables, then push a `zingo-pc-*` tag. -4. Download the `zingo-pc-store-msix` artifact from the run and upload the `.appx` to the - submission. Upload it unsigned — Partner Center re-signs it. -5. Complete the listing and submit for certification. +3. Push a `zingo-pc-*` tag and download the two `zingo-pc-win-msix-*` artifacts from the run. +4. Upload both `.appx` files to the submission, unsigned — Partner Center re-signs them. +5. Under Packages, tick **Windows 10/11 Desktop** under device family availability, or the + product ships available to nobody. +6. Complete the listing (category: Personal finance) and submit for certification. Later submissions can be automated with the Microsoft Store submission API, which needs an Entra tenant with an app registration linked under Partner Center → Account settings → User diff --git a/docs/windows-signing.md b/docs/windows-signing.md new file mode 100644 index 00000000..f8eef77e --- /dev/null +++ b/docs/windows-signing.md @@ -0,0 +1,89 @@ +# Windows code signing + +The `zip` and `msi` artifacts are signed with **Azure Artifact Signing** (formerly Trusted +Signing). The certificate never exists as a file: it lives in Azure, and each signature is a +call to the service. Nothing sensitive is stored in the repo or on a build machine. + +This is what stops Smart App Control blocking the direct downloads. The Microsoft Store +route ([windows-msix.md](windows-msix.md)) solves the same problem for Store installs, by a +different mechanism — the Store signs the package itself. + +## Configuration + +`build.win.azureSignOptions` in `package.json`: + +| Field | Value | Where it comes from | +| --- | --- | --- | +| `publisherName` | `Juan Carlos Carmona Calvo` | The **CN** of the certificate subject. Must match exactly | +| `endpoint` | `https://eus.codesigning.azure.net` | Region of the signing account (East US → `eus`) | +| `codeSigningAccountName` | `zingo-pc-signing` | The Azure resource | +| `certificateProfileName` | `Zingo-PC` | Certificate profile inside that resource | + +The full certificate subject is +`CN=Juan Carlos Carmona Calvo, O=Juan Carlos Carmona Calvo, L=Boulder, S=co, C=US`, from an +**individual** identity validation. The publisher shown to users is therefore a person, not +an organisation. + +`build.win.signExts` adds `.node` and `.dll` to what gets signed. Without it electron-builder +signs only `.exe` files, leaving the native addon, keytar's binding and Electron's own DLLs +unsigned — modules the process loads at runtime, which is exactly what Smart App Control +inspects. `nym-proxy.exe` needs no special handling: `extraResources` are passed through the +signing transformer because it ends in `.exe`. + +## Credentials + +Three **repository secrets** — real credentials, unlike the Store identity values: + +``` +AZURE_TENANT_ID +AZURE_CLIENT_ID +AZURE_CLIENT_SECRET +``` + +They belong to the `Zingo PC` app registration, which holds the +**Artifact Signing Certificate Profile Signer** role on the signing account. Being subscription +Owner is not enough — that role is data-plane and must be assigned explicitly. + +⚠️ The client secret **expires**. When it does, Windows builds start failing at the signing +step with an authentication error that does not obviously point at an expired credential. +Note the expiry date somewhere visible. + +## Building locally + +`dist:win-x64` and `dist:win-arm64` now sign, so they need the same three variables: + +```powershell +$env:AZURE_TENANT_ID = "..." +$env:AZURE_CLIENT_ID = "..." +$env:AZURE_CLIENT_SECRET = "..." +yarn dist:win-x64 +``` + +Without them the build fails when it reaches signing. There is no unsigned fallback — that is +deliberate: a silently unsigned artifact is the failure this whole setup exists to prevent. + +The `msi` target additionally needs an **elevated** shell (WiX cannot run ICE validation under +a restricted system policy, and `-wx` turns that warning into `LGHT1105`). + +## Why the MSIX build disables signing + +`dist:win-msix-*` and the CI MSIX step pass `-c.win.signAndEditExecutable=false`. + +Partner Center re-signs the `.appx` on upload and requires it unsigned. Beyond that, a package +is only valid if the signing certificate subject equals its `Identity/Publisher` — and those +differ here on purpose: the package publisher is the Partner Center seller GUID +(`CN=96EC5B6E-…`), while this certificate is issued to a person. Signing the `.appx` would +produce a package Windows rejects and Partner Center refuses. + +## Reputation + +A signature is necessary but not instantly sufficient. Smart App Control wants a valid +signature **and** a favourable reputation prediction, and a freshly issued certificate has no +history. Expect some friction on the first releases while the Intelligent Security Graph +accumulates installs. + +Two things help, neither optional if the first releases matter: + +- Keep signing with the **same** certificate. Rotating it resets the reputation. +- Submit each release to `microsoft.com/wdsi/filesubmission` as a software developer. That + feeds the graph directly instead of waiting for organic installs. diff --git a/flatpak/co.zingo.pc.metainfo.xml b/flatpak/co.zingo.pc.metainfo.xml index 333fda09..ca53d581 100644 --- a/flatpak/co.zingo.pc.metainfo.xml +++ b/flatpak/co.zingo.pc.metainfo.xml @@ -55,7 +55,7 @@ - + diff --git a/package.json b/package.json index ab597b9c..25346125 100644 --- a/package.json +++ b/package.json @@ -67,7 +67,8 @@ "dist:mac-x64": "rimraf dist && yarn build-mac-x64 && node scripts/stage-nym-proxy.js --target x86_64-apple-darwin && electron-builder -m --x64 -c.extraMetadata.main=build/electron.js --publish never", "dist:win-arm64": "rimraf dist && yarn build-win-arm64 && node scripts/stage-nym-proxy.js --target aarch64-pc-windows-msvc && electron-builder -w --arm64 -c.extraMetadata.main=build/electron.js --publish never", "dist:win-x64": "rimraf dist && yarn build-win-x64 && node scripts/stage-nym-proxy.js --target x86_64-pc-windows-msvc && electron-builder -w --x64 -c.extraMetadata.main=build/electron.js --publish never", - "dist:win-msix": "rimraf dist && yarn build-win-x64 && node scripts/stage-nym-proxy.js --target x86_64-pc-windows-msvc && electron-builder -w appx --x64 -c.extraMetadata.main=build/electron.js --publish never", + "dist:win-msix-arm64": "rimraf dist && yarn build-win-arm64 && node scripts/stage-nym-proxy.js --target aarch64-pc-windows-msvc && electron-builder -w appx --arm64 -c.extraMetadata.main=build/electron.js -c.win.signAndEditExecutable=false --publish never", + "dist:win-msix-x64": "rimraf dist && yarn build-win-x64 && node scripts/stage-nym-proxy.js --target x86_64-pc-windows-msvc && electron-builder -w appx --x64 -c.extraMetadata.main=build/electron.js -c.win.signAndEditExecutable=false --publish never", "react-start": "cross-env node scripts/start.js", "neon": "rimraf src/native.node && cargo-cp-artifact -a cdylib zingolib-native src/native.node -- cargo build --release --manifest-path native/Cargo.toml --message-format=json-render-diagnostics", "neon-mac-x64": "rimraf src/native.node && cargo-cp-artifact -a cdylib zingolib-native src/native.node -- cargo build --release --target x86_64-apple-darwin --manifest-path native/Cargo.toml --message-format=json-render-diagnostics", @@ -225,7 +226,7 @@ "hardenedRuntime": true, "gatekeeperAssess": false, "entitlements": "./configs/entitlements.mac.inherit.plist", - "bundleVersion": "172", + "bundleVersion": "173", "extendInfo": { "ITSAppUsesNonExemptEncryption": false }, @@ -253,7 +254,7 @@ "entitlements": "./configs/entitlements.mas.plist", "entitlementsInherit": "./configs/entitlements.mas.inherit.plist", "provisioningProfile": "./configs/Zingo_PC_Profile.provisionprofile", - "bundleVersion": "172", + "bundleVersion": "173", "extendInfo": { "ITSAppUsesNonExemptEncryption": false }, @@ -276,6 +277,16 @@ "zip", "msi" ], + "azureSignOptions": { + "publisherName": "Juan Carlos Carmona Calvo", + "endpoint": "https://eus.codesigning.azure.net", + "codeSigningAccountName": "zingo-pc-signing", + "certificateProfileName": "Zingo-PC" + }, + "signExts": [ + ".node", + ".dll" + ], "protocols": [ { "name": "Zcash", @@ -293,9 +304,9 @@ }, "appx": { "applicationId": "ZingoPC", - "identityName": "ZingoPC", - "publisher": "CN=Zingo PC Dev", - "publisherDisplayName": "Zingo PC Dev", + "identityName": "JuanCarlosCarmonaCalvo.ZingoPC", + "publisher": "CN=96EC5B6E-FB9F-4DEA-9C02-05C6CAF8DDF8", + "publisherDisplayName": "Juan Carlos Carmona Calvo", "displayName": "Zingo PC", "backgroundColor": "#06172d", "showNameOnTiles": true, diff --git a/src/version.ts b/src/version.ts index fa313b06..72d64eeb 100644 --- a/src/version.ts +++ b/src/version.ts @@ -1,3 +1,3 @@ -const APP_VERSION = "2.0.25 (172)"; +const APP_VERSION = "2.0.25 (173)"; export default APP_VERSION; From 34f7d466b88c3176c1768329ab35420e4d75cdb0 Mon Sep 17 00:00:00 2001 From: Juanky Date: Wed, 12 Aug 2026 20:39:33 -0600 Subject: [PATCH 4/8] fix: new release 2.0.25 (174) --- .github/workflows/electron.yml | 7 ++++- README.md | 19 ++++++++++++ bin/printversion.ps1 | 2 +- bin/printversion.sh | 2 +- flatpak/co.zingo.pc.metainfo.xml | 2 +- package.json | 8 ++--- scripts/sign-nym-proxy.ps1 | 52 ++++++++++++++++++++++++++++++++ src/version.ts | 2 +- 8 files changed, 85 insertions(+), 9 deletions(-) create mode 100644 scripts/sign-nym-proxy.ps1 diff --git a/.github/workflows/electron.yml b/.github/workflows/electron.yml index f9d7d8e2..c6cd1858 100644 --- a/.github/workflows/electron.yml +++ b/.github/workflows/electron.yml @@ -180,7 +180,12 @@ jobs: # (CN=96EC5B6E-…) anyway, which would make the .appx invalid. - name: Build MSIX (Microsoft Store) if: matrix.platform == 'win' - run: npx electron-builder -w appx --${{ matrix.arch }} -c.extraMetadata.main=build/electron.js -c.win.signAndEditExecutable=false --publish never + shell: bash + run: > + npx electron-builder -w appx --${{ matrix.arch }} + "-c.extraMetadata.main=build/electron.js" + "-c.win.signAndEditExecutable=false" + --publish never - name: Upload artifacts (Linux) uses: actions/upload-artifact@v4 diff --git a/README.md b/README.md index c2368d72..0d67f183 100644 --- a/README.md +++ b/README.md @@ -18,6 +18,8 @@ Pre-built binaries for each release are available on the [Releases page](https:/ | Linux | `.deb`, `.AppImage` | | Linux (Flatpak) | `.flatpak` | +> **Windows users:** if Windows blocks the app on launch, see [Windows blocks Zingo PC from opening](#troubleshooting) in Troubleshooting. Our Windows builds are code signed, but a recently issued certificate has to accumulate reputation before Windows stops flagging it. + --- ## Compiling from source @@ -240,3 +242,20 @@ Antivirus products that inspect HTTPS traffic cannot decrypt those connections, The fix is to allowlist those two hosts in your antivirus. Do not turn off Mixnet Mode just to silence it — that is what hides your IP from the indexer when you send. Unrelated to this warning: always download releases from the [official Releases page](https://github.com/zingolabs/zingo-pc/releases) and verify the checksum. That, not an antivirus popup, is how you confirm your build is genuine. + +--- + +**Q: Windows blocks Zingo PC from opening ("Smart App Control" or "Windows protected your PC")** + +A: Expected on recent releases. Windows weighs **reputation**, not just whether a file is signed, and a signing certificate starts with no history — so early releases can be flagged exactly like unsigned ones. It clears as installs accumulate. (The publisher on the signature is an individual's name rather than an organisation; that is how the certificate was issued, not a sign the build is unofficial.) + +Verify the download yourself rather than trusting Windows' verdict either way. Right-click the file → **Properties** → **Digital Signatures** for a valid, timestamped signature, then check the hash against the [Releases page](https://github.com/zingolabs/zingo-pc/releases): + +```powershell +Get-FileHash "Zingo PC .msi" -Algorithm SHA256 +``` + +Then: + +- **SmartScreen** (*"Windows protected your PC"*): **More info** → **Run anyway**. +- **Smart App Control** (clean installs of Windows 11 22H2+): no per-app exception exists. It can only be disabled entirely, and **cannot be re-enabled without reinstalling Windows** — we do not recommend it. Use the Microsoft Store build instead once it is published; Store packages are trusted by SAC from the first install. diff --git a/bin/printversion.ps1 b/bin/printversion.ps1 index b2265ad4..faf06fef 100644 --- a/bin/printversion.ps1 +++ b/bin/printversion.ps1 @@ -1 +1 @@ -echo "VERSION=2.0.25-173" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append +echo "VERSION=2.0.25-174" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append diff --git a/bin/printversion.sh b/bin/printversion.sh index 8eacb7ef..eabf1d1b 100755 --- a/bin/printversion.sh +++ b/bin/printversion.sh @@ -1,3 +1,3 @@ #!/bin/bash -VERSION="2.0.25-173" +VERSION="2.0.25-174" echo "VERSION=$VERSION" >> $GITHUB_ENV diff --git a/flatpak/co.zingo.pc.metainfo.xml b/flatpak/co.zingo.pc.metainfo.xml index ca53d581..23ce1d5f 100644 --- a/flatpak/co.zingo.pc.metainfo.xml +++ b/flatpak/co.zingo.pc.metainfo.xml @@ -55,7 +55,7 @@ - + diff --git a/package.json b/package.json index 25346125..4170fdc4 100644 --- a/package.json +++ b/package.json @@ -65,8 +65,8 @@ "dist:mac-arm64": "rimraf dist && yarn build-mac-arm64 && node scripts/stage-nym-proxy.js --target aarch64-apple-darwin && electron-builder -m --arm64 -c.extraMetadata.main=build/electron.js --publish never", "dist:mac-mas": "rimraf dist && yarn cargo:clean && yarn neon-mac-x64 && cp src/native.node src/native-x64.node && yarn neon-mac-arm64 && lipo -create -output src/native.node src/native-x64.node src/native.node && rm src/native-x64.node && node scripts/stage-nym-proxy.js && cross-env node scripts/build.js && electron-builder --mac mas --universal -c.extraMetadata.main=build/electron.js --publish never", "dist:mac-x64": "rimraf dist && yarn build-mac-x64 && node scripts/stage-nym-proxy.js --target x86_64-apple-darwin && electron-builder -m --x64 -c.extraMetadata.main=build/electron.js --publish never", - "dist:win-arm64": "rimraf dist && yarn build-win-arm64 && node scripts/stage-nym-proxy.js --target aarch64-pc-windows-msvc && electron-builder -w --arm64 -c.extraMetadata.main=build/electron.js --publish never", - "dist:win-x64": "rimraf dist && yarn build-win-x64 && node scripts/stage-nym-proxy.js --target x86_64-pc-windows-msvc && electron-builder -w --x64 -c.extraMetadata.main=build/electron.js --publish never", + "dist:win-arm64": "rimraf dist && yarn build-win-arm64 && node scripts/stage-nym-proxy.js --target aarch64-pc-windows-msvc && powershell -ExecutionPolicy Bypass -File scripts/sign-nym-proxy.ps1 && electron-builder -w --arm64 -c.extraMetadata.main=build/electron.js --publish never", + "dist:win-x64": "rimraf dist && yarn build-win-x64 && node scripts/stage-nym-proxy.js --target x86_64-pc-windows-msvc && powershell -ExecutionPolicy Bypass -File scripts/sign-nym-proxy.ps1 && electron-builder -w --x64 -c.extraMetadata.main=build/electron.js --publish never", "dist:win-msix-arm64": "rimraf dist && yarn build-win-arm64 && node scripts/stage-nym-proxy.js --target aarch64-pc-windows-msvc && electron-builder -w appx --arm64 -c.extraMetadata.main=build/electron.js -c.win.signAndEditExecutable=false --publish never", "dist:win-msix-x64": "rimraf dist && yarn build-win-x64 && node scripts/stage-nym-proxy.js --target x86_64-pc-windows-msvc && electron-builder -w appx --x64 -c.extraMetadata.main=build/electron.js -c.win.signAndEditExecutable=false --publish never", "react-start": "cross-env node scripts/start.js", @@ -226,7 +226,7 @@ "hardenedRuntime": true, "gatekeeperAssess": false, "entitlements": "./configs/entitlements.mac.inherit.plist", - "bundleVersion": "173", + "bundleVersion": "174", "extendInfo": { "ITSAppUsesNonExemptEncryption": false }, @@ -254,7 +254,7 @@ "entitlements": "./configs/entitlements.mas.plist", "entitlementsInherit": "./configs/entitlements.mas.inherit.plist", "provisioningProfile": "./configs/Zingo_PC_Profile.provisionprofile", - "bundleVersion": "173", + "bundleVersion": "174", "extendInfo": { "ITSAppUsesNonExemptEncryption": false }, diff --git a/scripts/sign-nym-proxy.ps1 b/scripts/sign-nym-proxy.ps1 new file mode 100644 index 00000000..83c3ee13 --- /dev/null +++ b/scripts/sign-nym-proxy.ps1 @@ -0,0 +1,52 @@ +# Signs resources/nym-proxy.exe with Azure Artifact Signing, before electron-builder +# packages it. +# +# electron-builder does not sign extraResources: its signing pass covers the app +# directory, resources/app.asar.unpacked and swiftshader, and nym-proxy.exe sits in +# resources/ instead. It is launched as a child process, so Smart App Control +# inspects it on its own — an unsigned copy would be blocked even with everything +# else signed. Signing the staged binary means electron-builder copies one that is +# already signed. +# +# Values mirror build.win.azureSignOptions in package.json. Credentials come from +# the same AZURE_* environment variables electron-builder uses. +# +# powershell -ExecutionPolicy Bypass -File scripts/sign-nym-proxy.ps1 + +$ErrorActionPreference = "Stop" + +$binary = Join-Path (Split-Path -Parent $PSScriptRoot) "resources\nym-proxy.exe" +if (-not (Test-Path $binary)) { throw "Not staged yet: $binary" } + +foreach ($v in "AZURE_TENANT_ID", "AZURE_CLIENT_ID", "AZURE_CLIENT_SECRET") { + if (-not (Get-Item "env:$v" -ErrorAction SilentlyContinue)) { + throw "$v is not set. Windows builds sign, so the Azure credentials are required." + } +} + +if (-not (Get-Module -ListAvailable -Name TrustedSigning)) { + Write-Host "Installing TrustedSigning module..." + Install-Module -Name TrustedSigning -Scope CurrentUser -Force -AllowClobber +} +Import-Module TrustedSigning + +Write-Host "Signing $binary..." +Invoke-TrustedSigning ` + -Endpoint "https://eus.codesigning.azure.net" ` + -CodeSigningAccountName "zingo-pc-signing" ` + -CertificateProfileName "Zingo-PC" ` + -Files $binary ` + -FileDigest SHA256 ` + -TimestampRfc3161 "http://timestamp.acs.microsoft.com" ` + -TimestampDigest SHA256 + +# Fail loudly rather than shipping an unsigned child process. +$signtool = Get-ChildItem "${env:ProgramFiles(x86)}\Windows Kits\10\bin\*\x64\signtool.exe" -ErrorAction SilentlyContinue | + Sort-Object FullName | Select-Object -Last 1 +if ($signtool) { + & $signtool.FullName verify /pa /q $binary + if ($LASTEXITCODE -ne 0) { throw "nym-proxy.exe is not signed after Invoke-TrustedSigning" } + Write-Host "Verified." -ForegroundColor Green +} else { + Write-Warning "signtool.exe not found; signature not verified." +} diff --git a/src/version.ts b/src/version.ts index 72d64eeb..232854ab 100644 --- a/src/version.ts +++ b/src/version.ts @@ -1,3 +1,3 @@ -const APP_VERSION = "2.0.25 (173)"; +const APP_VERSION = "2.0.25 (174)"; export default APP_VERSION; From e7a4989fc27f71992f21bf048677e114ff6b60fa Mon Sep 17 00:00:00 2001 From: Juanky Date: Thu, 13 Aug 2026 07:40:59 -0600 Subject: [PATCH 5/8] fix: new release 2.0.25 (175) --- bin/printversion.ps1 | 2 +- bin/printversion.sh | 2 +- docs/windows-signing.md | 9 +++++++++ package.json | 8 ++++---- scripts/sign-nym-proxy.ps1 | 12 ++++++++++-- src/version.ts | 2 +- 6 files changed, 26 insertions(+), 9 deletions(-) diff --git a/bin/printversion.ps1 b/bin/printversion.ps1 index faf06fef..a0574170 100644 --- a/bin/printversion.ps1 +++ b/bin/printversion.ps1 @@ -1 +1 @@ -echo "VERSION=2.0.25-174" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append +echo "VERSION=2.0.25-175" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append diff --git a/bin/printversion.sh b/bin/printversion.sh index eabf1d1b..0dd95ed9 100755 --- a/bin/printversion.sh +++ b/bin/printversion.sh @@ -1,3 +1,3 @@ #!/bin/bash -VERSION="2.0.25-174" +VERSION="2.0.25-175" echo "VERSION=$VERSION" >> $GITHUB_ENV diff --git a/docs/windows-signing.md b/docs/windows-signing.md index f8eef77e..a70db74c 100644 --- a/docs/windows-signing.md +++ b/docs/windows-signing.md @@ -65,6 +65,15 @@ deliberate: a silently unsigned artifact is the failure this whole setup exists The `msi` target additionally needs an **elevated** shell (WiX cannot run ICE validation under a restricted system policy, and `-wx` turns that warning into `LGHT1105`). +**pwsh (PowerShell 7) must be installed.** electron-builder shells out to it for Azure signing, +and `scripts/sign-nym-proxy.ps1` does too. Windows PowerShell 5.1 is not enough — its +PowerShellGet cannot load `Install-Module` to pull the `TrustedSigning` module. + +That script signs `resources/nym-proxy.exe` before packaging, because electron-builder does not +sign `extraResources`: its pass covers the app directory, `resources/app.asar.unpacked` and +`swiftshader`, and the proxy sits in `resources/`. It is spawned as a child process, so Smart +App Control inspects it independently of the main executable. + ## Why the MSIX build disables signing `dist:win-msix-*` and the CI MSIX step pass `-c.win.signAndEditExecutable=false`. diff --git a/package.json b/package.json index 4170fdc4..f9b6c13a 100644 --- a/package.json +++ b/package.json @@ -65,8 +65,8 @@ "dist:mac-arm64": "rimraf dist && yarn build-mac-arm64 && node scripts/stage-nym-proxy.js --target aarch64-apple-darwin && electron-builder -m --arm64 -c.extraMetadata.main=build/electron.js --publish never", "dist:mac-mas": "rimraf dist && yarn cargo:clean && yarn neon-mac-x64 && cp src/native.node src/native-x64.node && yarn neon-mac-arm64 && lipo -create -output src/native.node src/native-x64.node src/native.node && rm src/native-x64.node && node scripts/stage-nym-proxy.js && cross-env node scripts/build.js && electron-builder --mac mas --universal -c.extraMetadata.main=build/electron.js --publish never", "dist:mac-x64": "rimraf dist && yarn build-mac-x64 && node scripts/stage-nym-proxy.js --target x86_64-apple-darwin && electron-builder -m --x64 -c.extraMetadata.main=build/electron.js --publish never", - "dist:win-arm64": "rimraf dist && yarn build-win-arm64 && node scripts/stage-nym-proxy.js --target aarch64-pc-windows-msvc && powershell -ExecutionPolicy Bypass -File scripts/sign-nym-proxy.ps1 && electron-builder -w --arm64 -c.extraMetadata.main=build/electron.js --publish never", - "dist:win-x64": "rimraf dist && yarn build-win-x64 && node scripts/stage-nym-proxy.js --target x86_64-pc-windows-msvc && powershell -ExecutionPolicy Bypass -File scripts/sign-nym-proxy.ps1 && electron-builder -w --x64 -c.extraMetadata.main=build/electron.js --publish never", + "dist:win-arm64": "rimraf dist && yarn build-win-arm64 && node scripts/stage-nym-proxy.js --target aarch64-pc-windows-msvc && pwsh -ExecutionPolicy Bypass -File scripts/sign-nym-proxy.ps1 && electron-builder -w --arm64 -c.extraMetadata.main=build/electron.js --publish never", + "dist:win-x64": "rimraf dist && yarn build-win-x64 && node scripts/stage-nym-proxy.js --target x86_64-pc-windows-msvc && pwsh -ExecutionPolicy Bypass -File scripts/sign-nym-proxy.ps1 && electron-builder -w --x64 -c.extraMetadata.main=build/electron.js --publish never", "dist:win-msix-arm64": "rimraf dist && yarn build-win-arm64 && node scripts/stage-nym-proxy.js --target aarch64-pc-windows-msvc && electron-builder -w appx --arm64 -c.extraMetadata.main=build/electron.js -c.win.signAndEditExecutable=false --publish never", "dist:win-msix-x64": "rimraf dist && yarn build-win-x64 && node scripts/stage-nym-proxy.js --target x86_64-pc-windows-msvc && electron-builder -w appx --x64 -c.extraMetadata.main=build/electron.js -c.win.signAndEditExecutable=false --publish never", "react-start": "cross-env node scripts/start.js", @@ -226,7 +226,7 @@ "hardenedRuntime": true, "gatekeeperAssess": false, "entitlements": "./configs/entitlements.mac.inherit.plist", - "bundleVersion": "174", + "bundleVersion": "175", "extendInfo": { "ITSAppUsesNonExemptEncryption": false }, @@ -254,7 +254,7 @@ "entitlements": "./configs/entitlements.mas.plist", "entitlementsInherit": "./configs/entitlements.mas.inherit.plist", "provisioningProfile": "./configs/Zingo_PC_Profile.provisionprofile", - "bundleVersion": "174", + "bundleVersion": "175", "extendInfo": { "ITSAppUsesNonExemptEncryption": false }, diff --git a/scripts/sign-nym-proxy.ps1 b/scripts/sign-nym-proxy.ps1 index 83c3ee13..d77791e3 100644 --- a/scripts/sign-nym-proxy.ps1 +++ b/scripts/sign-nym-proxy.ps1 @@ -11,10 +11,18 @@ # Values mirror build.win.azureSignOptions in package.json. Credentials come from # the same AZURE_* environment variables electron-builder uses. # -# powershell -ExecutionPolicy Bypass -File scripts/sign-nym-proxy.ps1 +# pwsh -ExecutionPolicy Bypass -File scripts/sign-nym-proxy.ps1 +# +# Must run under pwsh (PowerShell 7), not Windows PowerShell 5.1, whose PowerShellGet +# cannot load Install-Module in a CI runner. No extra dependency: electron-builder +# shells out to pwsh for Azure signing too, so it is already required. $ErrorActionPreference = "Stop" +if ($PSVersionTable.PSVersion.Major -lt 6) { + throw "Run this under pwsh (PowerShell 7+), not Windows PowerShell $($PSVersionTable.PSVersion)." +} + $binary = Join-Path (Split-Path -Parent $PSScriptRoot) "resources\nym-proxy.exe" if (-not (Test-Path $binary)) { throw "Not staged yet: $binary" } @@ -26,7 +34,7 @@ foreach ($v in "AZURE_TENANT_ID", "AZURE_CLIENT_ID", "AZURE_CLIENT_SECRET") { if (-not (Get-Module -ListAvailable -Name TrustedSigning)) { Write-Host "Installing TrustedSigning module..." - Install-Module -Name TrustedSigning -Scope CurrentUser -Force -AllowClobber + Install-Module -Name TrustedSigning -Repository PSGallery -Scope CurrentUser -Force -AllowClobber } Import-Module TrustedSigning diff --git a/src/version.ts b/src/version.ts index 232854ab..211ad659 100644 --- a/src/version.ts +++ b/src/version.ts @@ -1,3 +1,3 @@ -const APP_VERSION = "2.0.25 (174)"; +const APP_VERSION = "2.0.25 (175)"; export default APP_VERSION; From 7b99da2ef4ad82f7abcebeb5c6141485abb910a5 Mon Sep 17 00:00:00 2001 From: Juanky Date: Thu, 13 Aug 2026 16:48:46 -0600 Subject: [PATCH 6/8] fix: new release 2.0.25 (176) --- .github/workflows/electron.yml | 22 +++++++-- bin/printversion.ps1 | 2 +- bin/printversion.sh | 2 +- docs/windows-signing.md | 35 ++++++++++--- package.json | 11 +++-- public/electron.js | 49 ++++++++++++++----- .../loadingScreen/LoadingScreen.tsx | 24 ++++++++- src/version.ts | 2 +- 8 files changed, 116 insertions(+), 31 deletions(-) diff --git a/.github/workflows/electron.yml b/.github/workflows/electron.yml index c6cd1858..922456a5 100644 --- a/.github/workflows/electron.yml +++ b/.github/workflows/electron.yml @@ -174,10 +174,23 @@ jobs: # step above produced instead of wiping dist/ and rebuilding Rust for the # third time. # - # signAndEditExecutable=false is load-bearing: Partner Center re-signs the - # package itself and requires it unsigned, and our certificate subject - # (CN=Juan Carlos Carmona Calvo) does not match the package publisher - # (CN=96EC5B6E-…) anyway, which would make the .appx invalid. + # The Store package must ship unsigned: Partner Center re-signs it, and our + # certificate subject (CN=Juan Carlos Carmona Calvo) does not match the + # package publisher (CN=96EC5B6E-…) anyway, which would make it invalid. + # + # Three separate switches are needed for that, none of them obvious: + # - "!.appx" in build.win.signExts stops the package itself being signed. + # signAndEditExecutable does NOT cover it — AppxTarget calls signIf on + # the artifact directly, and signIf never consults that flag. + # - signAndEditExecutable=false skips the binaries inside the package. + # Microsoft's signature covers them, so signing here would only burn + # signing calls — and would make this step need the Azure credentials. + # - azureSignOptions.publisherName is overridden with the Partner Center + # publisher. When Azure signing is configured, electron-builder writes + # that field into the manifest's Identity/@Publisher and ignores + # build.appx.publisher entirely (windowsSignAzureManager.computePublisherName), + # assuming whoever signs the package also publishes it. Without this the + # manifest gets a bare name, which is not a valid DN, and makeappx fails. - name: Build MSIX (Microsoft Store) if: matrix.platform == 'win' shell: bash @@ -185,6 +198,7 @@ jobs: npx electron-builder -w appx --${{ matrix.arch }} "-c.extraMetadata.main=build/electron.js" "-c.win.signAndEditExecutable=false" + "-c.win.azureSignOptions.publisherName=CN=96EC5B6E-FB9F-4DEA-9C02-05C6CAF8DDF8" --publish never - name: Upload artifacts (Linux) diff --git a/bin/printversion.ps1 b/bin/printversion.ps1 index a0574170..f0a55431 100644 --- a/bin/printversion.ps1 +++ b/bin/printversion.ps1 @@ -1 +1 @@ -echo "VERSION=2.0.25-175" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append +echo "VERSION=2.0.25-176" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append diff --git a/bin/printversion.sh b/bin/printversion.sh index 0dd95ed9..ba586298 100755 --- a/bin/printversion.sh +++ b/bin/printversion.sh @@ -1,3 +1,3 @@ #!/bin/bash -VERSION="2.0.25-175" +VERSION="2.0.25-176" echo "VERSION=$VERSION" >> $GITHUB_ENV diff --git a/docs/windows-signing.md b/docs/windows-signing.md index a70db74c..4ffe1bf9 100644 --- a/docs/windows-signing.md +++ b/docs/windows-signing.md @@ -65,18 +65,23 @@ deliberate: a silently unsigned artifact is the failure this whole setup exists The `msi` target additionally needs an **elevated** shell (WiX cannot run ICE validation under a restricted system policy, and `-wx` turns that warning into `LGHT1105`). -**pwsh (PowerShell 7) must be installed.** electron-builder shells out to it for Azure signing, -and `scripts/sign-nym-proxy.ps1` does too. Windows PowerShell 5.1 is not enough — its -PowerShellGet cannot load `Install-Module` to pull the `TrustedSigning` module. +Two prerequisites that GitHub's runners carry by default and a developer machine usually does +not. Both surface as confusing errors rather than a missing-dependency message: + +- **pwsh (PowerShell 7)** — electron-builder shells out to it for Azure signing, and + `scripts/sign-nym-proxy.ps1` does too. Windows PowerShell 5.1 is not enough: its + PowerShellGet cannot load `Install-Module` to pull the `TrustedSigning` module. + `winget install --id Microsoft.PowerShell -e` +- **The .NET SDK** — `Invoke-TrustedSigning` installs the `sign` dotnet tool on first use, and + the runtime alone will not do it (*"No .NET SDKs were found"*). + `winget install --id Microsoft.DotNet.SDK.8 -e` That script signs `resources/nym-proxy.exe` before packaging, because electron-builder does not sign `extraResources`: its pass covers the app directory, `resources/app.asar.unpacked` and `swiftshader`, and the proxy sits in `resources/`. It is spawned as a child process, so Smart App Control inspects it independently of the main executable. -## Why the MSIX build disables signing - -`dist:win-msix-*` and the CI MSIX step pass `-c.win.signAndEditExecutable=false`. +## Why the MSIX build does not sign Partner Center re-signs the `.appx` on upload and requires it unsigned. Beyond that, a package is only valid if the signing certificate subject equals its `Identity/Publisher` — and those @@ -84,6 +89,24 @@ differ here on purpose: the package publisher is the Partner Center seller GUID (`CN=96EC5B6E-…`), while this certificate is issued to a person. Signing the `.appx` would produce a package Windows rejects and Partner Center refuses. +It takes **three** switches, none of them obvious: + +- **`"!.appx"` in `build.win.signExts`** stops the package itself from being signed. + `signAndEditExecutable` does not cover this: `AppxTarget` calls `packager.signIf()` on the + finished artifact, and `signIf` only consults `signExts`. +- **`-c.win.signAndEditExecutable=false`**, passed by `dist:win-msix-*` and the CI step, skips + the binaries inside the package. Microsoft's signature covers them, so signing here would + only spend signing calls — and would force this step to carry the Azure credentials. +- **`-c.win.azureSignOptions.publisherName=CN=96EC5B6E-…`**, same two callers, overrides the + publisher written into the manifest. Once Azure signing is configured, electron-builder puts + that field straight into `Identity/@Publisher` and ignores `build.appx.publisher` + (`windowsSignAzureManager.computePublisherName` discards its argument), on the assumption + that whoever signs a package also publishes it. Ours are deliberately different, and without + the override the manifest gets a bare personal name, which is not a valid DN — `makeappx` + rejects it with a pattern-constraint error. + +With all three in place the MSIX build needs no credentials at all. + ## Reputation A signature is necessary but not instantly sufficient. Smart App Control wants a valid diff --git a/package.json b/package.json index f9b6c13a..fab66a73 100644 --- a/package.json +++ b/package.json @@ -67,8 +67,8 @@ "dist:mac-x64": "rimraf dist && yarn build-mac-x64 && node scripts/stage-nym-proxy.js --target x86_64-apple-darwin && electron-builder -m --x64 -c.extraMetadata.main=build/electron.js --publish never", "dist:win-arm64": "rimraf dist && yarn build-win-arm64 && node scripts/stage-nym-proxy.js --target aarch64-pc-windows-msvc && pwsh -ExecutionPolicy Bypass -File scripts/sign-nym-proxy.ps1 && electron-builder -w --arm64 -c.extraMetadata.main=build/electron.js --publish never", "dist:win-x64": "rimraf dist && yarn build-win-x64 && node scripts/stage-nym-proxy.js --target x86_64-pc-windows-msvc && pwsh -ExecutionPolicy Bypass -File scripts/sign-nym-proxy.ps1 && electron-builder -w --x64 -c.extraMetadata.main=build/electron.js --publish never", - "dist:win-msix-arm64": "rimraf dist && yarn build-win-arm64 && node scripts/stage-nym-proxy.js --target aarch64-pc-windows-msvc && electron-builder -w appx --arm64 -c.extraMetadata.main=build/electron.js -c.win.signAndEditExecutable=false --publish never", - "dist:win-msix-x64": "rimraf dist && yarn build-win-x64 && node scripts/stage-nym-proxy.js --target x86_64-pc-windows-msvc && electron-builder -w appx --x64 -c.extraMetadata.main=build/electron.js -c.win.signAndEditExecutable=false --publish never", + "dist:win-msix-arm64": "rimraf dist && yarn build-win-arm64 && node scripts/stage-nym-proxy.js --target aarch64-pc-windows-msvc && electron-builder -w appx --arm64 -c.extraMetadata.main=build/electron.js -c.win.signAndEditExecutable=false -c.win.azureSignOptions.publisherName=CN=96EC5B6E-FB9F-4DEA-9C02-05C6CAF8DDF8 --publish never", + "dist:win-msix-x64": "rimraf dist && yarn build-win-x64 && node scripts/stage-nym-proxy.js --target x86_64-pc-windows-msvc && electron-builder -w appx --x64 -c.extraMetadata.main=build/electron.js -c.win.signAndEditExecutable=false -c.win.azureSignOptions.publisherName=CN=96EC5B6E-FB9F-4DEA-9C02-05C6CAF8DDF8 --publish never", "react-start": "cross-env node scripts/start.js", "neon": "rimraf src/native.node && cargo-cp-artifact -a cdylib zingolib-native src/native.node -- cargo build --release --manifest-path native/Cargo.toml --message-format=json-render-diagnostics", "neon-mac-x64": "rimraf src/native.node && cargo-cp-artifact -a cdylib zingolib-native src/native.node -- cargo build --release --target x86_64-apple-darwin --manifest-path native/Cargo.toml --message-format=json-render-diagnostics", @@ -226,7 +226,7 @@ "hardenedRuntime": true, "gatekeeperAssess": false, "entitlements": "./configs/entitlements.mac.inherit.plist", - "bundleVersion": "175", + "bundleVersion": "176", "extendInfo": { "ITSAppUsesNonExemptEncryption": false }, @@ -254,7 +254,7 @@ "entitlements": "./configs/entitlements.mas.plist", "entitlementsInherit": "./configs/entitlements.mas.inherit.plist", "provisioningProfile": "./configs/Zingo_PC_Profile.provisionprofile", - "bundleVersion": "175", + "bundleVersion": "176", "extendInfo": { "ITSAppUsesNonExemptEncryption": false }, @@ -285,7 +285,8 @@ }, "signExts": [ ".node", - ".dll" + ".dll", + "!.appx" ], "protocols": [ { diff --git a/public/electron.js b/public/electron.js index 31965852..20c0e0ad 100644 --- a/public/electron.js +++ b/public/electron.js @@ -508,15 +508,23 @@ if (process.platform === "darwin") { // Register all IPC handlers once — calling ipcMain.handle twice for the same channel throws +// Race a platform probe against a timeout so a hung native call (e.g. Windows +// Hello on a system where the consent dialog never surfaces) doesn't block the +// renderer forever and leave it on a screen with no way out. +const withAuthTimeout = (probe, fallback = "not_supported", ms = 3000) => + Promise.race([ + Promise.resolve().then(() => probe()), + new Promise((resolve) => setTimeout(() => resolve(fallback), ms)), + ]).catch(() => fallback); + +// Availability probes are non-interactive, so seconds are plenty. Verification +// waits on a person presenting a face, finger or PIN, so it gets a minute — long +// enough not to cut a real user off, short enough to end rather than hang. +const AUTH_PROBE_TIMEOUT_MS = 3000; +const AUTH_VERIFY_TIMEOUT_MS = 60000; + ipcMain.handle("auth:check", async () => { - // Race any platform probe against a 3s timeout so a hung native call - // (e.g. Windows Hello on a system without it configured) doesn't block - // the renderer's lock-check forever and leave a white screen. - const withTimeout = (probe, fallback = "not_supported", ms = 3000) => - Promise.race([ - Promise.resolve().then(() => probe()), - new Promise((resolve) => setTimeout(() => resolve(fallback), ms)), - ]).catch(() => fallback); + const withTimeout = withAuthTimeout; if (process.platform === "win32") { return withTimeout(() => getNative().checkWindowsHello()); @@ -548,13 +556,25 @@ ipcMain.handle("auth:verify", async (_e, reason) => { // feature: `requireDeviceAuth` defaults to true, but the renderer also gates // the LOCK screen on auth:check === "available", so disabling here keeps the // two callers consistent. + // Both calls are timed out for the same reason auth:check is: a native probe + // or prompt that never returns used to strand the caller. The lock screen sat + // on "Authenticating..." with the window already blurred, and no way forward. if (process.platform === "win32") { const win = BrowserWindow.getAllWindows()[0] ?? null; try { const native = getNative(); - if (native.checkWindowsHello() !== "available") return { success: true }; + const availability = await withAuthTimeout( + () => native.checkWindowsHello(), + "not_supported", + AUTH_PROBE_TIMEOUT_MS, + ); + if (availability !== "available") return { success: true }; if (win) win.blur(); - const result = await native.verifyWindowsUser(String(reason)); + const result = await withAuthTimeout( + () => native.verifyWindowsUser(String(reason)), + { success: false }, + AUTH_VERIFY_TIMEOUT_MS, + ); if (win) win.focus(); return result; } catch { @@ -564,8 +584,13 @@ ipcMain.handle("auth:verify", async (_e, reason) => { } else if (process.platform === "darwin") { try { const native = getNative(); - if (native.checkMacAuth() !== "available") return { success: true }; - return await native.verifyMacUser(String(reason)); + const availability = await withAuthTimeout(() => native.checkMacAuth(), "not_supported", AUTH_PROBE_TIMEOUT_MS); + if (availability !== "available") return { success: true }; + return await withAuthTimeout( + () => native.verifyMacUser(String(reason)), + { success: false }, + AUTH_VERIFY_TIMEOUT_MS, + ); } catch { return { success: false }; } diff --git a/src/components/loadingScreen/LoadingScreen.tsx b/src/components/loadingScreen/LoadingScreen.tsx index 42cdd5ca..93398434 100644 --- a/src/components/loadingScreen/LoadingScreen.tsx +++ b/src/components/loadingScreen/LoadingScreen.tsx @@ -77,7 +77,29 @@ class LoadingScreen extends Component { console.error(`Critical Error crypto provider default ${error}`); } - await this.doFirstTimeSetup(); + // A throw in here used to end the launch silently: the promise rejected, + // componentDidMount stopped, and the app sat on this screen for good — no + // message, and menu clicks doing nothing because the renderer never got as + // far as registering their listeners. Whatever failed (the native module, + // the wallet directory, settings) is worth showing: a wrong answer the user + // can report beats a window that does nothing. + try { + await this.doFirstTimeSetup(); + } catch (error) { + console.error(`Critical Error first time setup ${error}`); + closeErrorModal(); + openErrorModal( + "Zingo PC could not start", +
+
Something failed while preparing the wallet, and the app cannot continue.
+
{String(error)}
+
+ Please report this at github.com/zingolabs/zingo-pc/issues, including the message above. +
+
, + ); + return; + } // only if the active wallet exists if (this.state.walletExists) { diff --git a/src/version.ts b/src/version.ts index 211ad659..ad8fd8b9 100644 --- a/src/version.ts +++ b/src/version.ts @@ -1,3 +1,3 @@ -const APP_VERSION = "2.0.25 (175)"; +const APP_VERSION = "2.0.25 (176)"; export default APP_VERSION; From 26d114bae4841d4e5d607408baaa92934fe07cfb Mon Sep 17 00:00:00 2001 From: Juanky Date: Thu, 13 Aug 2026 20:31:55 -0600 Subject: [PATCH 7/8] fix: new release 2.0.25 (177) --- .github/workflows/electron.yml | 15 ++++++++------- bin/printversion.ps1 | 2 +- bin/printversion.sh | 2 +- docs/windows-signing.md | 22 +++++++++++++--------- flatpak/co.zingo.pc.metainfo.xml | 2 +- package.json | 8 ++++---- src/version.ts | 2 +- 7 files changed, 29 insertions(+), 24 deletions(-) diff --git a/.github/workflows/electron.yml b/.github/workflows/electron.yml index 922456a5..0337b1fe 100644 --- a/.github/workflows/electron.yml +++ b/.github/workflows/electron.yml @@ -185,12 +185,13 @@ jobs: # - signAndEditExecutable=false skips the binaries inside the package. # Microsoft's signature covers them, so signing here would only burn # signing calls — and would make this step need the Azure credentials. - # - azureSignOptions.publisherName is overridden with the Partner Center - # publisher. When Azure signing is configured, electron-builder writes - # that field into the manifest's Identity/@Publisher and ignores - # build.appx.publisher entirely (windowsSignAzureManager.computePublisherName), - # assuming whoever signs the package also publishes it. Without this the - # manifest gets a bare name, which is not a valid DN, and makeappx fails. + # - azureSignOptions is cleared. Left in place, electron-builder builds the + # Azure signing manager just to ask it for a publisher name, which both + # demands the credentials this step does not carry and writes the + # certificate's subject into Identity/@Publisher, ignoring + # build.appx.publisher (windowsSignAzureManager.computePublisherName + # discards its argument) — a bare personal name, not a valid DN, which + # makeappx rejects. Cleared, the publisher comes from build.appx.publisher. - name: Build MSIX (Microsoft Store) if: matrix.platform == 'win' shell: bash @@ -198,7 +199,7 @@ jobs: npx electron-builder -w appx --${{ matrix.arch }} "-c.extraMetadata.main=build/electron.js" "-c.win.signAndEditExecutable=false" - "-c.win.azureSignOptions.publisherName=CN=96EC5B6E-FB9F-4DEA-9C02-05C6CAF8DDF8" + "-c.win.azureSignOptions=" --publish never - name: Upload artifacts (Linux) diff --git a/bin/printversion.ps1 b/bin/printversion.ps1 index f0a55431..822bb767 100644 --- a/bin/printversion.ps1 +++ b/bin/printversion.ps1 @@ -1 +1 @@ -echo "VERSION=2.0.25-176" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append +echo "VERSION=2.0.25-177" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append diff --git a/bin/printversion.sh b/bin/printversion.sh index ba586298..ca76c899 100755 --- a/bin/printversion.sh +++ b/bin/printversion.sh @@ -1,3 +1,3 @@ #!/bin/bash -VERSION="2.0.25-176" +VERSION="2.0.25-177" echo "VERSION=$VERSION" >> $GITHUB_ENV diff --git a/docs/windows-signing.md b/docs/windows-signing.md index 4ffe1bf9..a41b8047 100644 --- a/docs/windows-signing.md +++ b/docs/windows-signing.md @@ -97,15 +97,19 @@ It takes **three** switches, none of them obvious: - **`-c.win.signAndEditExecutable=false`**, passed by `dist:win-msix-*` and the CI step, skips the binaries inside the package. Microsoft's signature covers them, so signing here would only spend signing calls — and would force this step to carry the Azure credentials. -- **`-c.win.azureSignOptions.publisherName=CN=96EC5B6E-…`**, same two callers, overrides the - publisher written into the manifest. Once Azure signing is configured, electron-builder puts - that field straight into `Identity/@Publisher` and ignores `build.appx.publisher` - (`windowsSignAzureManager.computePublisherName` discards its argument), on the assumption - that whoever signs a package also publishes it. Ours are deliberately different, and without - the override the manifest gets a bare personal name, which is not a valid DN — `makeappx` - rejects it with a pattern-constraint error. - -With all three in place the MSIX build needs no credentials at all. +- **`-c.win.azureSignOptions=`**, same two callers, clears the Azure config for that run. Left + in place it costs twice: electron-builder constructs the Azure signing manager merely to ask + it for a publisher name, and that manager validates the credentials on construction — which + this step deliberately does not carry. It then writes the *certificate's* subject into + `Identity/@Publisher`, ignoring `build.appx.publisher` + (`windowsSignAzureManager.computePublisherName` discards its argument) on the assumption that + whoever signs a package also publishes it. Ours differ on purpose, and the result is a bare + personal name — not a valid DN — which `makeappx` rejects with a pattern-constraint error. + Cleared, the publisher comes from `build.appx.publisher` as intended. + +With all three in place the MSIX build needs no credentials at all — verified: the run logs +*"AppX is not signed"* and *"file signing skipped via signExts configuration"*, and the +resulting package carries `Publisher='CN=96EC5B6E-…'` with no `AppxSignature.p7x`. ## Reputation diff --git a/flatpak/co.zingo.pc.metainfo.xml b/flatpak/co.zingo.pc.metainfo.xml index 23ce1d5f..c8693766 100644 --- a/flatpak/co.zingo.pc.metainfo.xml +++ b/flatpak/co.zingo.pc.metainfo.xml @@ -55,7 +55,7 @@ - + diff --git a/package.json b/package.json index fab66a73..607f161f 100644 --- a/package.json +++ b/package.json @@ -67,8 +67,8 @@ "dist:mac-x64": "rimraf dist && yarn build-mac-x64 && node scripts/stage-nym-proxy.js --target x86_64-apple-darwin && electron-builder -m --x64 -c.extraMetadata.main=build/electron.js --publish never", "dist:win-arm64": "rimraf dist && yarn build-win-arm64 && node scripts/stage-nym-proxy.js --target aarch64-pc-windows-msvc && pwsh -ExecutionPolicy Bypass -File scripts/sign-nym-proxy.ps1 && electron-builder -w --arm64 -c.extraMetadata.main=build/electron.js --publish never", "dist:win-x64": "rimraf dist && yarn build-win-x64 && node scripts/stage-nym-proxy.js --target x86_64-pc-windows-msvc && pwsh -ExecutionPolicy Bypass -File scripts/sign-nym-proxy.ps1 && electron-builder -w --x64 -c.extraMetadata.main=build/electron.js --publish never", - "dist:win-msix-arm64": "rimraf dist && yarn build-win-arm64 && node scripts/stage-nym-proxy.js --target aarch64-pc-windows-msvc && electron-builder -w appx --arm64 -c.extraMetadata.main=build/electron.js -c.win.signAndEditExecutable=false -c.win.azureSignOptions.publisherName=CN=96EC5B6E-FB9F-4DEA-9C02-05C6CAF8DDF8 --publish never", - "dist:win-msix-x64": "rimraf dist && yarn build-win-x64 && node scripts/stage-nym-proxy.js --target x86_64-pc-windows-msvc && electron-builder -w appx --x64 -c.extraMetadata.main=build/electron.js -c.win.signAndEditExecutable=false -c.win.azureSignOptions.publisherName=CN=96EC5B6E-FB9F-4DEA-9C02-05C6CAF8DDF8 --publish never", + "dist:win-msix-arm64": "rimraf dist && yarn build-win-arm64 && node scripts/stage-nym-proxy.js --target aarch64-pc-windows-msvc && electron-builder -w appx --arm64 -c.extraMetadata.main=build/electron.js -c.win.signAndEditExecutable=false -c.win.azureSignOptions= --publish never", + "dist:win-msix-x64": "rimraf dist && yarn build-win-x64 && node scripts/stage-nym-proxy.js --target x86_64-pc-windows-msvc && electron-builder -w appx --x64 -c.extraMetadata.main=build/electron.js -c.win.signAndEditExecutable=false -c.win.azureSignOptions= --publish never", "react-start": "cross-env node scripts/start.js", "neon": "rimraf src/native.node && cargo-cp-artifact -a cdylib zingolib-native src/native.node -- cargo build --release --manifest-path native/Cargo.toml --message-format=json-render-diagnostics", "neon-mac-x64": "rimraf src/native.node && cargo-cp-artifact -a cdylib zingolib-native src/native.node -- cargo build --release --target x86_64-apple-darwin --manifest-path native/Cargo.toml --message-format=json-render-diagnostics", @@ -226,7 +226,7 @@ "hardenedRuntime": true, "gatekeeperAssess": false, "entitlements": "./configs/entitlements.mac.inherit.plist", - "bundleVersion": "176", + "bundleVersion": "177", "extendInfo": { "ITSAppUsesNonExemptEncryption": false }, @@ -254,7 +254,7 @@ "entitlements": "./configs/entitlements.mas.plist", "entitlementsInherit": "./configs/entitlements.mas.inherit.plist", "provisioningProfile": "./configs/Zingo_PC_Profile.provisionprofile", - "bundleVersion": "176", + "bundleVersion": "177", "extendInfo": { "ITSAppUsesNonExemptEncryption": false }, diff --git a/src/version.ts b/src/version.ts index ad8fd8b9..cadbb73c 100644 --- a/src/version.ts +++ b/src/version.ts @@ -1,3 +1,3 @@ -const APP_VERSION = "2.0.25 (176)"; +const APP_VERSION = "2.0.25 (177)"; export default APP_VERSION; From 045256e34522ab3edd26721dac147d39e5383549 Mon Sep 17 00:00:00 2001 From: Juanky Date: Fri, 14 Aug 2026 08:35:42 -0600 Subject: [PATCH 8/8] fix: APPX for the store c++ runtime --- .gitignore | 3 + docs/windows-signing.md | 27 ++++++++- package.json | 14 +++-- public/electron.js | 110 ++++++++++++++++++++++++------------- scripts/build.js | 16 ++++-- scripts/check-win-arch.js | 85 ++++++++++++++++++++++++++++ scripts/stage-vcruntime.js | 96 ++++++++++++++++++++++++++++++++ 7 files changed, 302 insertions(+), 49 deletions(-) create mode 100644 scripts/check-win-arch.js create mode 100644 scripts/stage-vcruntime.js diff --git a/.gitignore b/.gitignore index fd3270c5..dcaa584d 100644 --- a/.gitignore +++ b/.gitignore @@ -15,6 +15,9 @@ native.node /resources/nym-proxy /resources/nym-proxy.exe +# staged VC++ runtime (copied from the MSVC redist by scripts/stage-vcruntime.js) +/resources/vcruntime + # testing /coverage diff --git a/docs/windows-signing.md b/docs/windows-signing.md index a41b8047..4cf136b2 100644 --- a/docs/windows-signing.md +++ b/docs/windows-signing.md @@ -1,4 +1,29 @@ -# Windows code signing +# Windows packaging and code signing + +## The Visual C++ runtime + +`native.node` and `nym-proxy.exe` are built with MSVC and import `VCRUNTIME140.dll`. +Electron does not, so without that DLL the window opens perfectly and then every native +call fails: `require()` of the module returns *"the specified module could not be found"*, +`getNative()` yields null, and the app stops on the loading screen. + +It is invisible during development. Visual Studio installs the runtime, so developer +machines and CI runners always have it; clean consumer machines often do not. This cost two +Microsoft Store certification rounds — the report was an app that launched and did nothing, +reproducible on their hardware and on nobody's desk. + +`scripts/stage-vcruntime.js` copies the DLLs out of the MSVC redistributable into +`resources/vcruntime/` (gitignored, architecture-specific, restaged per build), and +`build.win.extraFiles` places them next to `Zingo PC.exe`. App-local deployment is the model +Microsoft's own documentation recommends for this case, and redistribution is permitted. + +`vcruntime140_1.dll` exists only on x64 — it carries C++ exception handling — and is absent +from the arm64 redist, so it is copied when present rather than required. + +The `api-ms-win-crt-*` imports need nothing: those are the Universal CRT, shipped with +Windows 10 and later. + +# Code signing The `zip` and `msi` artifacts are signed with **Azure Artifact Signing** (formerly Trusted Signing). The certificate never exists as a file: it lives in Azure, and each signature is a diff --git a/package.json b/package.json index 607f161f..68a4e927 100644 --- a/package.json +++ b/package.json @@ -65,10 +65,10 @@ "dist:mac-arm64": "rimraf dist && yarn build-mac-arm64 && node scripts/stage-nym-proxy.js --target aarch64-apple-darwin && electron-builder -m --arm64 -c.extraMetadata.main=build/electron.js --publish never", "dist:mac-mas": "rimraf dist && yarn cargo:clean && yarn neon-mac-x64 && cp src/native.node src/native-x64.node && yarn neon-mac-arm64 && lipo -create -output src/native.node src/native-x64.node src/native.node && rm src/native-x64.node && node scripts/stage-nym-proxy.js && cross-env node scripts/build.js && electron-builder --mac mas --universal -c.extraMetadata.main=build/electron.js --publish never", "dist:mac-x64": "rimraf dist && yarn build-mac-x64 && node scripts/stage-nym-proxy.js --target x86_64-apple-darwin && electron-builder -m --x64 -c.extraMetadata.main=build/electron.js --publish never", - "dist:win-arm64": "rimraf dist && yarn build-win-arm64 && node scripts/stage-nym-proxy.js --target aarch64-pc-windows-msvc && pwsh -ExecutionPolicy Bypass -File scripts/sign-nym-proxy.ps1 && electron-builder -w --arm64 -c.extraMetadata.main=build/electron.js --publish never", - "dist:win-x64": "rimraf dist && yarn build-win-x64 && node scripts/stage-nym-proxy.js --target x86_64-pc-windows-msvc && pwsh -ExecutionPolicy Bypass -File scripts/sign-nym-proxy.ps1 && electron-builder -w --x64 -c.extraMetadata.main=build/electron.js --publish never", - "dist:win-msix-arm64": "rimraf dist && yarn build-win-arm64 && node scripts/stage-nym-proxy.js --target aarch64-pc-windows-msvc && electron-builder -w appx --arm64 -c.extraMetadata.main=build/electron.js -c.win.signAndEditExecutable=false -c.win.azureSignOptions= --publish never", - "dist:win-msix-x64": "rimraf dist && yarn build-win-x64 && node scripts/stage-nym-proxy.js --target x86_64-pc-windows-msvc && electron-builder -w appx --x64 -c.extraMetadata.main=build/electron.js -c.win.signAndEditExecutable=false -c.win.azureSignOptions= --publish never", + "dist:win-arm64": "rimraf dist && yarn build-win-arm64 && node scripts/stage-nym-proxy.js --target aarch64-pc-windows-msvc && node scripts/stage-vcruntime.js --arch arm64 && node scripts/check-win-arch.js --arch arm64 && pwsh -ExecutionPolicy Bypass -File scripts/sign-nym-proxy.ps1 && electron-builder -w --arm64 -c.extraMetadata.main=build/electron.js --publish never", + "dist:win-x64": "rimraf dist && yarn build-win-x64 && node scripts/stage-nym-proxy.js --target x86_64-pc-windows-msvc && node scripts/stage-vcruntime.js --arch x64 && node scripts/check-win-arch.js --arch x64 && pwsh -ExecutionPolicy Bypass -File scripts/sign-nym-proxy.ps1 && electron-builder -w --x64 -c.extraMetadata.main=build/electron.js --publish never", + "dist:win-msix-arm64": "rimraf dist && yarn build-win-arm64 && node scripts/stage-nym-proxy.js --target aarch64-pc-windows-msvc && node scripts/stage-vcruntime.js --arch arm64 && node scripts/check-win-arch.js --arch arm64 && electron-builder -w appx --arm64 -c.extraMetadata.main=build/electron.js -c.win.signAndEditExecutable=false -c.win.azureSignOptions= --publish never", + "dist:win-msix-x64": "rimraf dist && yarn build-win-x64 && node scripts/stage-nym-proxy.js --target x86_64-pc-windows-msvc && node scripts/stage-vcruntime.js --arch x64 && node scripts/check-win-arch.js --arch x64 && electron-builder -w appx --x64 -c.extraMetadata.main=build/electron.js -c.win.signAndEditExecutable=false -c.win.azureSignOptions= --publish never", "react-start": "cross-env node scripts/start.js", "neon": "rimraf src/native.node && cargo-cp-artifact -a cdylib zingolib-native src/native.node -- cargo build --release --manifest-path native/Cargo.toml --message-format=json-render-diagnostics", "neon-mac-x64": "rimraf src/native.node && cargo-cp-artifact -a cdylib zingolib-native src/native.node -- cargo build --release --target x86_64-apple-darwin --manifest-path native/Cargo.toml --message-format=json-render-diagnostics", @@ -301,6 +301,12 @@ "from": "resources/nym-proxy.exe", "to": "nym-proxy.exe" } + ], + "extraFiles": [ + { + "from": "resources/vcruntime", + "to": "." + } ] }, "appx": { diff --git a/public/electron.js b/public/electron.js index 20c0e0ad..0a47c96e 100644 --- a/public/electron.js +++ b/public/electron.js @@ -816,15 +816,37 @@ const _nativePath = __dirname.includes(".asar") : path.join(__dirname, "../src/native.node"); let _mainNative = null; +// Why the load error is kept instead of discarded: when native.node fails to +// load, every caller below fails separately — a wrong-architecture module gave +// four different "cannot read properties of null" further up, none of them +// naming the real cause, and the app looked frozen rather than broken. Windows +// says exactly what is wrong ("%1 is not a valid Win32 application" for an +// arch mismatch); this keeps that sentence and puts it in front of the user. +let _mainNativeError = null; function getNative() { - if (!_mainNative) { + if (!_mainNative && !_mainNativeError) { try { _mainNative = require(_nativePath); - } catch (_) {} + } catch (e) { + _mainNativeError = e; + console.error(`FATAL: native module failed to load from ${_nativePath}: ${e && e.message}`); + } } return _mainNative; } +// Throws the load failure rather than letting callers trip over a null. +function requireNative(method) { + const native = getNative(); + if (native && typeof native[method] === "function") { + return native; + } + if (_mainNativeError) { + throw new Error(`native module failed to load (${_nativePath}): ${_mainNativeError.message}`); + } + throw new Error(`native.${method} not available`); +} + // Activates a security-scoped bookmark from the main process, which has // com.apple.security.files.bookmarks.app-scope explicitly. Apple docs say // app-scoped bookmark access applies to all processes in the app sandbox. @@ -900,13 +922,7 @@ const _NATIVE_NO_PARAM_METHODS = [ ]; for (const method of _NATIVE_NO_PARAM_METHODS) { - ipcMain.handle(`native:${method}`, () => { - const native = getNative(); - if (!native || typeof native[method] !== "function") { - throw new Error(`native.${method} not available`); - } - return native[method](); - }); + ipcMain.handle(`native:${method}`, () => requireNative(method)[method]()); } // Sync no-param methods (also routed to main — become async over IPC) @@ -916,41 +932,53 @@ for (const method of [ "get_zennies_for_zingo_donation_address", "set_crypto_default_provider_to_ring", ]) { - ipcMain.handle(`native:${method}`, () => { - const native = getNative(); - if (!native || typeof native[method] !== "function") { - throw new Error(`native.${method} not available`); - } - return native[method](); - }); + ipcMain.handle(`native:${method}`, () => requireNative(method)[method]()); } // Methods with parameters ipcMain.handle("native:wallet_exists", (_e, server_uri, chain_hint, perf, min_conf, wallet_name) => { assertWalletName(wallet_name); - return getNative().wallet_exists(server_uri, chain_hint, perf, min_conf, wallet_name); + return requireNative("wallet_exists").wallet_exists(server_uri, chain_hint, perf, min_conf, wallet_name); }); ipcMain.handle("native:init_new", (_e, server_uri, chain_hint, perf, min_conf, wallet_name) => { assertWalletName(wallet_name); - return getNative().init_new(server_uri, chain_hint, perf, min_conf, wallet_name); + return requireNative("init_new").init_new(server_uri, chain_hint, perf, min_conf, wallet_name); }); ipcMain.handle("native:init_from_seed", (_e, seed, birthday, server_uri, chain_hint, perf, min_conf, wallet_name) => { assertWalletName(wallet_name); - return getNative().init_from_seed(seed, birthday, server_uri, chain_hint, perf, min_conf, wallet_name); + return requireNative("init_from_seed").init_from_seed( + seed, + birthday, + server_uri, + chain_hint, + perf, + min_conf, + wallet_name, + ); }); ipcMain.handle("native:init_from_ufvk", (_e, ufvk, birthday, server_uri, chain_hint, perf, min_conf, wallet_name) => { assertWalletName(wallet_name); - return getNative().init_from_ufvk(ufvk, birthday, server_uri, chain_hint, perf, min_conf, wallet_name); + return requireNative("init_from_ufvk").init_from_ufvk( + ufvk, + birthday, + server_uri, + chain_hint, + perf, + min_conf, + wallet_name, + ); }); ipcMain.handle("native:init_from_b64", (_e, server_uri, chain_hint, perf, min_conf, wallet_name) => { assertWalletName(wallet_name); - return getNative().init_from_b64(server_uri, chain_hint, perf, min_conf, wallet_name); + return requireNative("init_from_b64").init_from_b64(server_uri, chain_hint, perf, min_conf, wallet_name); }); -ipcMain.handle("native:get_latest_block_server", (_e, server_uri) => getNative().get_latest_block_server(server_uri)); -ipcMain.handle("native:parse_address", (_e, address) => getNative().parse_address(address)); -ipcMain.handle("native:parse_ufvk", (_e, ufvk) => getNative().parse_ufvk(ufvk)); -ipcMain.handle("native:get_messages", (_e, address) => getNative().get_messages(address)); -ipcMain.handle("native:zec_price_over_mixnet", () => getNative().zec_price_over_mixnet()); +ipcMain.handle("native:get_latest_block_server", (_e, server_uri) => + requireNative("get_latest_block_server").get_latest_block_server(server_uri), +); +ipcMain.handle("native:parse_address", (_e, address) => requireNative("parse_address").parse_address(address)); +ipcMain.handle("native:parse_ufvk", (_e, ufvk) => requireNative("parse_ufvk").parse_ufvk(ufvk)); +ipcMain.handle("native:get_messages", (_e, address) => requireNative("get_messages").get_messages(address)); +ipcMain.handle("native:zec_price_over_mixnet", () => requireNative("zec_price_over_mixnet").zec_price_over_mixnet()); // --- Mixnet transport: main-owned, session-level (ADR 0024) ---------------- // Main spawns and holds the nym-proxy for the whole app session. Switching // wallets re-attaches the new LightClient to the same tunnel instead of @@ -1008,7 +1036,7 @@ function setMixnetPhase(phase) { async function attachCurrentWallet() { if (!mixnet.socks5Addr) return; try { - await getNative().attach_mixnet(mixnet.socks5Addr); + await requireNative("attach_mixnet").attach_mixnet(mixnet.socks5Addr); setMixnetPhase("ready"); } catch (e) { console.error("[mixnet] attach failed:", e && e.message ? e.message : e); @@ -1083,7 +1111,7 @@ ipcMain.handle("mixnet:disable", async () => { mixnet.intent = "off"; killProxy(); try { - await getNative().stop_mixnet(); + await requireNative("stop_mixnet").stop_mixnet(); } catch (e) { console.error("[mixnet] stop failed:", e && e.message ? e.message : e); } @@ -1095,7 +1123,7 @@ ipcMain.handle("mixnet:disable", async () => { ipcMain.handle("mixnet:attach-current", async () => { if (mixnet.intent === "off") { try { - await getNative().stop_mixnet(); + await requireNative("stop_mixnet").stop_mixnet(); } catch {} setMixnetPhase("switched_off"); } else if (mixnet.socks5Addr) { @@ -1107,27 +1135,31 @@ ipcMain.handle("mixnet:attach-current", async () => { }); app.on("before-quit", () => killProxy()); -ipcMain.handle("native:remove_transaction", (_e, txid) => getNative().remove_transaction(txid)); +ipcMain.handle("native:remove_transaction", (_e, txid) => requireNative("remove_transaction").remove_transaction(txid)); ipcMain.handle("native:get_spendable_balance_with_address", (_e, address, zennies) => - getNative().get_spendable_balance_with_address(address, zennies), + requireNative("get_spendable_balance_with_address").get_spendable_balance_with_address(address, zennies), ); ipcMain.handle("native:create_new_unified_address", (_e, receivers) => - getNative().create_new_unified_address(receivers), + requireNative("create_new_unified_address").create_new_unified_address(receivers), ); ipcMain.handle("native:set_config_wallet_to_prod", (_e, perf, min_conf) => - getNative().set_config_wallet_to_prod(perf, min_conf), + requireNative("set_config_wallet_to_prod").set_config_wallet_to_prod(perf, min_conf), ); -ipcMain.handle("native:send", (_e, send_json) => getNative().send(send_json)); +ipcMain.handle("native:send", (_e, send_json) => requireNative("send").send(send_json)); ipcMain.handle("native:delete_wallet", (_e, server_uri, chain_hint, perf, min_conf, wallet_name) => { assertWalletName(wallet_name); - return getNative().delete_wallet(server_uri, chain_hint, perf, min_conf, wallet_name); + return requireNative("delete_wallet").delete_wallet(server_uri, chain_hint, perf, min_conf, wallet_name); }); -ipcMain.handle("native:change_server", (_e, server_uri) => getNative().change_server(server_uri)); +ipcMain.handle("native:change_server", (_e, server_uri) => requireNative("change_server").change_server(server_uri)); ipcMain.handle("native:start_ironwood_migration", (_e, consented_plan_hash, per_bucket) => - getNative().start_ironwood_migration(consented_plan_hash, per_bucket), + requireNative("start_ironwood_migration").start_ironwood_migration(consented_plan_hash, per_bucket), +); +ipcMain.handle("native:reschedule_parts", (_e, per_bucket) => + requireNative("reschedule_parts").reschedule_parts(per_bucket), +); +ipcMain.handle("native:execute_due_parts", (_e, spacing_ms) => + requireNative("execute_due_parts").execute_due_parts(spacing_ms), ); -ipcMain.handle("native:reschedule_parts", (_e, per_bucket) => getNative().reschedule_parts(per_bucket)); -ipcMain.handle("native:execute_due_parts", (_e, spacing_ms) => getNative().execute_due_parts(spacing_ms)); ipcMain.handle("wallet-dir:request", async () => { const wdLog = (msg) => { diff --git a/scripts/build.js b/scripts/build.js index 1e90b483..79091760 100644 --- a/scripts/build.js +++ b/scripts/build.js @@ -93,12 +93,18 @@ function copyPublicFolder() { function copyNativeNode() { const src = path.join(__dirname, "../src/native.node"); const dest = path.join(paths.appBuild, "native.node"); - if (fs.existsSync(src)) { - fs.copySync(src, dest); - console.log(chalk.cyan("Copied native.node to build/")); - } else { - console.warn(chalk.yellow("Warning: src/native.node not found, skipping copy.")); + // Missing means the neon step did not produce a module, and a build without it + // is not a build: it packages, installs and launches, then fails on the first + // wallet call with an error that points nowhere near this. This used to be a + // yellow warning in the middle of a few hundred lines of webpack output. + if (!fs.existsSync(src)) { + throw new Error( + `src/native.node not found. The native module was not built — run "yarn neon-win-" ` + + `(or the matching neon script for this platform) before building.`, + ); } + fs.copySync(src, dest); + console.log(chalk.cyan("Copied native.node to build/")); } function gzipSize(filePath) { diff --git a/scripts/check-win-arch.js b/scripts/check-win-arch.js new file mode 100644 index 00000000..bc72dd3b --- /dev/null +++ b/scripts/check-win-arch.js @@ -0,0 +1,85 @@ +// Verifies the architecture-specific files match the target before packaging. +// +// node scripts/check-win-arch.js --arch x64 (or arm64) +// +// build/native.node, src/native.node and resources/nym-proxy.exe are shared +// paths rewritten by `yarn build-win-` and stage-nym-proxy. Nothing about +// them records which architecture they hold, so any electron-builder run that +// does not regenerate them packages whatever the previous build left behind. +// +// That is not hypothetical: an x64 package once shipped with an arm64 +// native.node after an arm64 build in the same tree. It installed, launched, and +// then failed on every native call, because require() of a wrong-architecture +// module throws and the failure surfaced far from its cause. CI never sees this +// (each job gets a clean runner); local builds — the ones uploaded to the Store — +// are wide open to it. + +const fs = require("fs"); +const path = require("path"); + +// PE header: offset at 0x3c, then "PE\0\0", then the 2-byte Machine field. +const MACHINE = { 0x8664: "x64", 0xaa64: "arm64", 0x14c: "ia32" }; + +function peArch(file) { + const fd = fs.openSync(file, "r"); + try { + const off = Buffer.alloc(4); + fs.readSync(fd, off, 0, 4, 0x3c); + const machine = Buffer.alloc(2); + fs.readSync(fd, machine, 0, 2, off.readUInt32LE(0) + 4); + const value = machine.readUInt16LE(0); + return MACHINE[value] || `unknown (0x${value.toString(16)})`; + } finally { + fs.closeSync(fd); + } +} + +const argIndex = process.argv.indexOf("--arch"); +const expected = argIndex !== -1 ? process.argv[argIndex + 1] : null; +if (!expected || !Object.values(MACHINE).includes(expected)) { + console.error("check-win-arch: pass --arch x64 or --arch arm64"); + process.exit(1); +} + +const root = path.resolve(__dirname, ".."); +const required = [ + path.join(root, "src", "native.node"), + path.join(root, "build", "native.node"), + path.join(root, "resources", "nym-proxy.exe"), +]; +// Staged by stage-vcruntime.js; also architecture-specific, and shipping the +// wrong one would fail the same way it would with no runtime at all. +const vcDir = path.join(root, "resources", "vcruntime"); +const optional = fs.existsSync(vcDir) + ? fs + .readdirSync(vcDir) + .filter((f) => f.endsWith(".dll")) + .map((f) => path.join(vcDir, f)) + : []; + +const problems = []; +for (const file of [...required, ...optional]) { + const name = path.relative(root, file); + if (!fs.existsSync(file)) { + problems.push(`${name}: missing`); + continue; + } + const actual = peArch(file); + console.log(` ${actual.padEnd(8)} ${name}`); + if (actual !== expected) { + problems.push(`${name}: ${actual}, expected ${expected}`); + } +} + +if (problems.length > 0) { + console.error(`\ncheck-win-arch: architecture mismatch for a ${expected} build:\n`); + for (const p of problems) console.error(` - ${p}`); + console.error( + `\nA package built now would install and then fail on every native call.\n` + + `Run "yarn dist:win-${expected}" (or dist:win-msix-${expected}) from the top, so the\n` + + `native module and nym-proxy are rebuilt for ${expected} rather than reused.\n`, + ); + process.exit(1); +} + +console.log(`check-win-arch: all ${expected}.`); diff --git a/scripts/stage-vcruntime.js b/scripts/stage-vcruntime.js new file mode 100644 index 00000000..69965d7c --- /dev/null +++ b/scripts/stage-vcruntime.js @@ -0,0 +1,96 @@ +// Stages the Visual C++ runtime DLLs into resources/vcruntime/ so electron-builder +// can place them next to Zingo PC.exe via extraFiles. +// +// node scripts/stage-vcruntime.js --arch x64 (or arm64) +// +// Why this exists: native.node and nym-proxy.exe are built with MSVC and import +// VCRUNTIME140.dll. Electron itself does not, so on a machine without the Visual +// C++ Redistributable the window opens normally and then every native call fails +// — require() of the module returns "the specified module could not be found". +// Development machines and CI runners have the runtime because Visual Studio +// installs it, so the failure only ever showed up on clean consumer machines. It +// cost two Microsoft Store certification rounds to find. +// +// The api-ms-win-crt-* imports need nothing: those are the Universal CRT, part of +// Windows 10 and later. +// +// Microsoft permits app-local deployment of these DLLs; this is the deployment +// model their own documentation recommends for exactly this case. + +const fs = require("fs"); +const path = require("path"); + +// vcruntime140_1.dll only exists on x64 (C++ exception handling) and is absent +// from the arm64 redist; copied when present rather than required. +const WANTED = ["vcruntime140.dll", "vcruntime140_1.dll"]; + +const argIndex = process.argv.indexOf("--arch"); +const arch = argIndex !== -1 ? process.argv[argIndex + 1] : null; +if (!arch || !["x64", "arm64"].includes(arch)) { + console.error("stage-vcruntime: pass --arch x64 or --arch arm64"); + process.exit(1); +} + +// The redist ships with the VS Build Tools / VS installation, under a version +// directory that changes with every toolset update, hence the walk. +function findRedistDirs() { + const roots = [process.env["ProgramFiles(x86)"], process.env.ProgramFiles] + .filter(Boolean) + .map((p) => path.join(p, "Microsoft Visual Studio")); + const found = []; + for (const root of roots) { + if (!fs.existsSync(root)) continue; + for (const year of fs.readdirSync(root)) { + for (const edition of safeReaddir(path.join(root, year))) { + const base = path.join(root, year, edition, "VC", "Redist", "MSVC"); + for (const version of safeReaddir(base)) { + const dir = path.join(base, version, arch); + for (const crt of safeReaddir(dir)) { + if (/^Microsoft\.VC\d+\.CRT$/i.test(crt)) found.push(path.join(dir, crt)); + } + } + } + } + } + // Newest toolset last in readdir order is not guaranteed; sort so it is. + return found.sort(); +} + +function safeReaddir(dir) { + try { + return fs.readdirSync(dir); + } catch { + return []; + } +} + +const candidates = findRedistDirs(); +if (candidates.length === 0) { + console.error( + `stage-vcruntime: no Visual C++ ${arch} redistributable found.\n` + + `Install the "MSVC v143 - VS 2022 C++ ${arch === "arm64" ? "ARM64/ARM64EC" : "x64/x86"} build tools"\n` + + `component from the Visual Studio Installer.`, + ); + process.exit(1); +} +const source = candidates[candidates.length - 1]; + +const outDir = path.resolve(__dirname, "../resources/vcruntime"); +fs.rmSync(outDir, { recursive: true, force: true }); +fs.mkdirSync(outDir, { recursive: true }); + +let copied = 0; +for (const name of WANTED) { + const from = path.join(source, name); + if (!fs.existsSync(from)) continue; + fs.copyFileSync(from, path.join(outDir, name)); + console.log(`stage-vcruntime: ${name} (${arch})`); + copied++; +} + +if (copied === 0) { + console.error(`stage-vcruntime: found ${source} but none of ${WANTED.join(", ")} were in it.`); + process.exit(1); +} + +console.log(`stage-vcruntime: staged ${copied} file(s) from ${source}`);